Wikibøker
nowikibooks
https://no.wikibooks.org/wiki/Hovedside
MediaWiki 1.47.0-wmf.20
first-letter
Medium
Spesial
Diskusjon
Bruker
Brukerdiskusjon
Wikibøker
Wikibøker-diskusjon
Fil
Fildiskusjon
MediaWiki
MediaWiki-diskusjon
Mal
Maldiskusjon
Hjelp
Hjelpdiskusjon
Kategori
Kategoridiskusjon
Kokebok
Kokebok-diskusjon
Undertekster
Undertekstdiskusjon
Modul
Moduldiskusjon
Arrangement
Arrangementsdiskusjon
Wikibøker:Administratorer/Liste
4
2860
46654
46398
2026-09-17T20:05:09Z
Wkee4ager
4794
46654
wikitext
text/x-wiki
<div class="toccolours" style="margin:1em; padding:10px; float:right;">
__NOTOC__
<h2> [[Bilde:Broom icon.svg|25px|Administrator]] Administratorer </h2>
* {{bruker|Redigeringsfilter}}
* {{bruker|Patandor}}
* {{bruker|Wkee4ager}}
<h2> [[Bilde:Crystal_Clear_action_configure.png|25px|Byråkrat]] Byråkrater </h2>
* ''Ingen lokale byråkrater''
</div>
glix5d0ixfc33lkfm4f5gqojn2jk1fb
Kokebok:Pannekake uten egg
102
3836
46630
44910
2026-09-17T19:27:09Z
Wkee4ager
4794
bruker mboks
46630
wikitext
text/x-wiki
{{mboks |type = move |text = Denne kan gjøres til en variant av [[Kokebok:Pannekake]]}}
=== Ingredienser ===
* 12-18 g havregryn (2-3 ss)
* 35 g sukker (3 ss)
* 45 g smeltet margarin (50 ml)
* 800 ml melk
* En del hvetemel, start med 100-150 g (200-300 ml)
* 2 ts bakepulver
* 2 ts kardemomme
===Fremgangsmåte===
#Bland sukker, kardemomme, bakepulver, smeltet margarin, havregryn og melk i en bolle med hurtigmikseren.
#Tilsett 100-150 g (200-300 ml) hvetemel og ha deretter litt og litt hvetemel oppi til røra har blitt passelig tykk.
#Siden oppskriften er uten egg er det viktig å ha skikkelig varme på stekepanna og ha riktig konsistens på røra - hvis røra er for tynn blir det "bare krøll" og hvis den er for tykk kan pannekakene bli litt rå - så prøv deg fram. Hvis pannekakene har en tendens til å svi seg fast tilsetter du mer margarin.
Servér f.eks. med:
* Blåbærsyltetøy
* Sukker
* Sukker med sitronsaft på
* Bacon
* Brunost
* Is og syltetøy
{{Navigasjon oppskrifter kokebok}}
[[Kategori:Mangler bilde]]
[[Kategori:Pannekaker]]
2aqpw8c6a1t5m4ywyfnklqr9fodb5hg
Mal:Mboks
10
7006
46648
46497
2026-09-17T19:55:41Z
Wkee4ager
4794
46648
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Mboks/styles.css"/>{{#invoke:Message box|mbox|text={{{text|skriv inn noe tekst…}}}|class=beskjedboks}}</onlyinclude><noinclude>
{{dokumentasjon}}
<!-- Kategorier føyes til på undersiden /dok, ikke her -->
</noinclude>
0afzqzqwxmxl19yoz941xjpcxy8cdw1
46682
46648
2026-09-18T10:25:29Z
Wkee4ager
4794
46682
wikitext
text/x-wiki
{{#invoke:Message box|mbox}}<noinclude>
{{dokumentasjon}}
<!-- Kategorier føyes til på undersiden /dok, ikke her -->
</noinclude>
do1sqcxojyq58z23apz3r5ncfod2r5i
Mal:Amboks
10
7009
46634
46485
2026-09-17T19:34:24Z
Wkee4ager
4794
bruker modul:message box
46634
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Mboks/styles.css"/>{{#invoke:Message box|{{{messagebox|ambox}}}|demospace={{{demospace|}}}|type={{{type|}}}|image={{{image|}}}|imageright={{{imageright|}}}|style={{{style|}}}|textstyle={{{textstyle|}}}|text={{{text|skriv inn noe tekst…}}}|small={{{small|}}}|smallimage={{{smallimage|}}}|smallimageright={{{smallimageright|}}}|smalltext={{{smalltext|}}}|class={{{class|beskjedboks}}}}}</onlyinclude><noinclude>
{{dokumentasjon}}
<!-- Denne kategoriseres på undersiden /dok, ikke her -->
</noinclude>
jjmvzgdv2c8282d1p1pu5t0hpyw4xlu
46684
46634
2026-09-18T10:28:49Z
Wkee4ager
4794
46684
wikitext
text/x-wiki
{{#invoke:Message box|ambox}}<noinclude>
{{dokumentasjon}}
<!-- Denne kategoriseres på undersiden /dok, ikke her -->
</noinclude>
joaboom3mj442m6oe9ga89zoklsgrs5
Mal:Omboks
10
7011
46637
40539
2026-09-17T19:42:41Z
Wkee4ager
4794
46637
wikitext
text/x-wiki
<templatestyles src="Mboks/styles.css"/>{{#invoke:Message box|ombox|class=beskjedboks}}<noinclude>
{{dokumentasjon}}
<!-- Denne kategoriseres på undersiden /dok, ikke her -->
</noinclude>
a4q80ayr5hq85o1lbu0987uobg0rpdi
46689
46637
2026-09-18T10:33:01Z
Wkee4ager
4794
46689
wikitext
text/x-wiki
{{#invoke:Message box|ombox}}<noinclude>
{{dokumentasjon}}
<!-- Denne kategoriseres på undersiden /dok, ikke her -->
</noinclude>
524cdgb6nfquhbs8c9jzazq637rk9m1
Mal:Mboks/dok
10
7013
46653
46528
2026-09-17T20:02:54Z
Wkee4ager
4794
46653
wikitext
text/x-wiki
{{Dokumentasjon underside}}
Dette er metamalen {{tl|mboks}} som danner grunnlaget for «meldingsbokser» i forskjellige navnerom. Basert på det navnerommet den oppdager vil den bruke andre meldingsbokser som ambox («a» for ''article''), tmbox («t» for ''talk''), imbox («i» for ''image''), cmbox («c» for ''category'') og ombox («o» for ''other''). Den bygger på [[Modul:Message box]].
Hvis du ikke trenger en mal som selv tilpasser seg navnerommet den settes i kan du velge blant de andre meldingsboksene ved å bruke parameteret «messagebox» etterfulgt av ønsket meldingsboks.
=== Parametre ===
<pre>
{{mboks
| messagebox = ambox / ombox / imbox / cmbox / tmbox
| demospace = {{{demospace|}}} / main / talk / file / category / other
| type = speedy / delete / content / style / notice / move / protection
| image = none / [[File:Some image.svg|40px]]
| imageright = [[File:Some image.svg|40px]]
| style = CSS values
| textstyle = CSS values
| text = The message body text.
| small = {{{small|}}} / left / yes
| smallimage = none / [[File:Some image.svg|30px]]
| smallimageright = none / [[File:Some image.svg|30px]]
| smalltext = A shorter message body text.
}}
</pre>
Parameteret ''small'' virker bare på {{tl|amboks}}, {{tl|tmboks}}, og {{tl|omboks}}. Det gjør ikke noe skade å bruke det andre steder.
__NOTOC__
<includeonly>
<!-- CATEGORIES AND INTERWIKIS HERE, THANKS -->
[[Kategori:Metamaler]]
</includeonly>
thobfqx1k7azxh364lav71h4ww3lryn
46693
46653
2026-09-18T10:50:37Z
Wkee4ager
4794
46693
wikitext
text/x-wiki
{{Dokumentasjon underside}}
{{Lua|Modul:Message box}}
Denne beskjedboksen kan brukes alle navnerom. Basert på det navnerommet den oppdager vil den bruke andre meldingsbokser som {{tl|amboks}} («a» for ''article''), {{tl|cmboks}} («c» for ''category''), {{tl|imboks}} («i» for ''image''), {{tl|tmboks}} («t» for ''talk''), og {{tl|ombox}} («o» for ''other'').
Hvis du ikke trenger at boksen automatisk oppdager hvilket navnerom den plasseres i kan du bruke de ovennevnte boksene basert på navnerommet de plasseres i.
=== Parametre ===
<pre>
{{mboks
| demospace = {{{demospace|}}} / main / talk / file / category / other
| type = speedy / delete / content / style / notice / move / protection
| image = none / [[File:Some image.svg|40px]]
| imageright = [[File:Some image.svg|40px]]
| style = CSS values
| textstyle = CSS values
| text = The message body text.
| small = {{{small|}}} / left / yes
| smallimage = none / [[File:Some image.svg|30px]]
| smallimageright = none / [[File:Some image.svg|30px]]
| smalltext = A shorter message body text.
}}
</pre>
Parameteret ''small'' virker bare på {{tl|amboks}}, {{tl|tmboks}}, og {{tl|omboks}}. Det gjør ikke noe skade å bruke det andre steder.
__NOTOC__
<includeonly>
<!-- CATEGORIES AND INTERWIKIS HERE, THANKS -->
[[Kategori:Metamaler]]
</includeonly>
33wmyaqh7wiudnvcey1sc0hc1gxrktj
Mal:Tmboks
10
7014
46650
40546
2026-09-17T19:57:52Z
Wkee4ager
4794
46650
wikitext
text/x-wiki
<templatestyles src="Mboks/styles.css"/>{{#invoke:Message box|tmbox|class=beskjedboks}}<noinclude>
{{dokumentasjon}}
<!-- Kategorier føyes til på undersiden /dok, ikke her -->
</noinclude>
8w6mz9a6djibm8f0jxrzwbjj4v1c4b6
46688
46650
2026-09-18T10:32:15Z
Wkee4ager
4794
46688
wikitext
text/x-wiki
{{#invoke:Message box|tmbox}}<noinclude>
{{dokumentasjon}}
<!-- Kategorier føyes til på undersiden /dok, ikke her -->
</noinclude>
hgi37htj6sz4dq9gwvaea8k56juyibk
Mal:Tmboks/dok
10
7016
46651
44667
2026-09-17T19:58:17Z
Wkee4ager
4794
46651
wikitext
text/x-wiki
Se [[Mal:Mboks]] for dokumentasjon.
<includeonly>
<!-- Kategorier legges til her -->
[[Kategori:Metamaler]]
</includeonly>
qlcv4i1p9vf19peyuevlqei6rn9weof
46697
46651
2026-09-18T10:52:52Z
Wkee4ager
4794
46697
wikitext
text/x-wiki
{{Dokumentasjon underside}}
{{Lua|Modul:Message box}}
Se [[Mal:Mboks]] for dokumentasjon.
<includeonly>
<!-- Kategorier legges til her -->
[[Kategori:Metamaler]]
</includeonly>
sklv0o1jtznpfszps8vv4n97aad53qq
Mal:Omboks/dok
10
7017
46638
44669
2026-09-17T19:43:22Z
Wkee4ager
4794
46638
wikitext
text/x-wiki
Se dokumentasjon på [[Mal:Mboks]].
<includeonly>
<!-- Kategorier legges til her -->
[[Kategori:Utdaterte maler]][[Kategori:Metamaler]]
</includeonly>
ig8dio5jcwkehrycxj45lssvp95tbq6
46639
46638
2026-09-17T19:45:05Z
Wkee4ager
4794
46639
wikitext
text/x-wiki
Se dokumentasjon på [[Mal:Mboks]].
<includeonly>
<!-- Kategorier legges til her -->
[[Kategori:Metamaler]]
</includeonly>
ttfquprap3b6rgaphybx2y5q8feivlg
46698
46639
2026-09-18T10:53:35Z
Wkee4ager
4794
46698
wikitext
text/x-wiki
{{Dokumentasjon underside}}
{{Lua|Modul:Message box}}
Se dokumentasjon på [[Mal:Mboks]].
<includeonly>
<!-- Kategorier legges til her -->
[[Kategori:Metamaler]]
</includeonly>
iqrj4i4c5onh7toz2moquxlzxuip3he
Mal:Cmboks
10
7018
46646
46487
2026-09-17T19:50:01Z
Wkee4ager
4794
46646
wikitext
text/x-wiki
<templatestyles src="Mboks/styles.css"/>{{#invoke:Message box|cmbox|class=beskjedboks}}<noinclude>
{{dokumentasjon}}
<!-- Kategorier føyes til undersiden /dok, ikke her -->
</noinclude>
9xt80s1usl31b594w9qjvetmzbcv464
46686
46646
2026-09-18T10:31:19Z
Wkee4ager
4794
46686
wikitext
text/x-wiki
{{#invoke:Message box|cmbox}}<noinclude>
{{dokumentasjon}}
<!-- Kategorier føyes til undersiden /dok, ikke her -->
</noinclude>
97xqkd3hvn4jta6lgb88zddxmysxrzq
Mal:Cmboks/dok
10
7019
46647
44668
2026-09-17T19:50:21Z
Wkee4ager
4794
46647
wikitext
text/x-wiki
Se dokumentasjon på [[Mal:Mboks]]
<includeonly>
<!-- Kategorier settes inn her -->
[[Kategori:Metamaler]]
</includeonly>
aqd4msnhv0cdqefcghiz2bnmryntjp2
46695
46647
2026-09-18T10:51:58Z
Wkee4ager
4794
46695
wikitext
text/x-wiki
{{Lua|Modul:Message box}}
Se dokumentasjon på [[Mal:Mboks]]
<includeonly>
<!-- Kategorier settes inn her -->
[[Kategori:Metamaler]]
</includeonly>
qs3mt8dzjnmnfqkgh2fa4wl0ui2e4ev
Mal:Amboks/dok
10
7020
46635
44666
2026-09-17T19:35:05Z
Wkee4ager
4794
46635
wikitext
text/x-wiki
Se dokumentasjon på [[Mal:mboks]]
<includeonly>
[[Kategori:Metamaler]]
</includeonly>
pg650e1clvz1i3vhqn4synfgef8qj2u
46694
46635
2026-09-18T10:51:32Z
Wkee4ager
4794
46694
wikitext
text/x-wiki
{{Lua|Modul:Message box}}
Se dokumentasjon på [[Mal:mboks]]
<includeonly>
[[Kategori:Metamaler]]
</includeonly>
fqibw1vp3jf6widwsirhqia0mvgvy3t
Sankewikiboken/Under arbeid
0
7833
46631
45317
2026-09-17T19:27:44Z
Wkee4ager
4794
bruker mboks
46631
wikitext
text/x-wiki
{{mboks|type = move |text = Her finner du inntil videre alle artene omtalt i denne boken. Planen er å flytte de enkelte omtalene til egne deler av boken etterhvert som det blir tydelig hva som er den beste strukturen. Du vil finne artene alfabetisk ordnet etter deres normerte norske navn.}}
{| align="right"
| __TOC__
|}
Det er et mål at alle de omtalte artene, eller aktuelle grupper av arter, omfatter tips til innhøstning, bruk og passende konservering for senere bruk. Hvis du føler deg tilskyndt til å bidra til boken er du velkommen til det. Noe så enkelt som korrekturlesning er nyttig. Hvis du selv har noen nyttige erfaringer du ønsker å dele er det fint å være oppmerksom på behovet for å kunne etterprøve nøyaktigheten av informasjonen. Særlig spørsmålet om noe er spiselig bør ikke tas med i denne boken uten at det finnes en pålitelig kilde til informasjonen. Hvis det finnes delte meninger om en slik opplysning bør det også tas med, slik at leseren kan gjøres oppmerksom på behovet for å vurdere kildene til opplysningene selv. For at ikke denne boken skal bli vanskelig å lese, foretrekkes det at referanser legges til de aktuelle artiklene på wikipedia, og at det lenkes til artikkelen herfra.
== Blåbær ==
Se [[Sankewikiboken/Blåbær]]
== Bringebær ==
Prøv bringebærsyltetøy krydret med stjerneanis. Kjempegodt!
{{wp-beskrivelse|no|bringebær}}
== Grisetangdokke ==
Grisetangdokke, også kalt trøffeltang, er en rødalge som vokser på brunalgen grisetang. Den kan minne om en liten rødbrun til svart ulldott som forgrener seg ut på begge sider fra stilken (''tallus'') på grisetangen, særlig der tangen har fått sår og skader. Derfor er det vanlig at den forekommer hyppigst der grisetangen får hard medfart av bølgene.
Tørket får den en kraftig smak som de fleste synes minner om svart trøffel.
For at den skal bli delikat bør den renses og skylles godt for å få bort andre sjøgress, vekster og kryp. Om den høstes på våren er dette arbeidet enklere.
{{wp-beskrivelse|no|grisetangdokke}}
== Hyll ==
{{wp-beskrivelse|no|hylleslekta}}
== Kantareller ==
{{wp-beskrivelse|no|kantareller|ekstra= kantarell}}
== Karve ==
I beskrivelsen opplyses det også om noen vanlige forvekslingsarter. Karve er spesielt kjent for frøene som omsettes som krydder. Den er en toårig plante som frør seg i det andre året. Mot slutten av har blomstene blitt byttet ut med små frø. Hele skjermer kan høstes inn og henges til tørk. Frøene er et tradisjonelt krydder i pultost, brennevin og surkål.
<gallery mode="nolines" >
Fil:Illustration Carum carvi retuschiert.jpg|Karvens kjennetegn
</gallery>
På våren kan det høstes «karvekål». Det er det vi kaller en ung bladrosett med rot som skal brukes som en grønnsak. Unge og friske karveblader kan minne om smaken på det grønne på en gulrot og roten smaker også godt, men kanskje ikke like søtt som en gulrot. De tilhører faktisk samme plantefamilie.
Karvens rosett ber om å bli plukket til karvekålsuppe samme år som den blomstrer. Før i tiden ble det kalt «å stikke karvekål» fordi det er praktisk å stikke en kniv eller lignende ned langs roten slik at den slipper taket i jorden. Når man høster planter med rot kan det være verdt å minne seg om at det er mulig å utrydde planten lokalt ved å plukke den med roten før den rekker å spre frøene sine. La det stå noen igjen hvis du ønsker å finne den på samme sted neste år.
{{wp-beskrivelse|no|karve}}
== Krekling ==
Krekling vokser i enorme mengder overalt. Det er liten konkurranse om disse bærene, men de kan nyttes på lik linje med andre bær. De kan for eksempel brukes til saft, sirup eller til gelé.
Prøv kreklingsirup krydret med kanel, kardemomme, nellik og stjerneanis. Kjempegodt!!
<gallery mode="nolines" >
File:Abuluntu Empetrum nigrum.jpg|Krekling
</gallery>
{{wp-beskrivelse|no|krekling}}
== Kremler ==
Se [[Sankewikiboken/Kremler]]
== Kvannslekta ==
Den kan [[kokebok:kandisert sløke|kandiseres]] og brukes som kakepynt, eller rett og slett spises som godteri. Det er blomsterstengelen eller tykke bladstengler som brukes. Det er ikke opplagt at planten kan spises når man ser den ettersom den er nokså trevlete. Under tilberedning bør det ytterste trevlete laget skrelles bort.
{{wp-beskrivelse|no|kvann |ekstra = sløke}}
== Løvetann ==
Se [[Sankewikiboken/Løvetann]]
== Matblekksopp ==
{{wp-beskrivelse|no|matblekksopp}}
== Matpiggsopper ==
{{wp-beskrivelse|no|blek piggsopp |ekstra = rødgul piggsopp}}
== Matrisker ==
Matrisker omfatter fire arter i Norge. Alle har en gulrotfarget melkesaft som siver ut av soppkjøttet når soppen får kutt eller brudd. Sopper med sprøtt kjøtt, skiver under hatten og melkesaft er alltid risker. Kremler har også sprøtt kjøtt, men ikke melkesaft. Mange risker er ikke matsopper, men alle som har gulrotfarget melkesaft kan trygt spises. Dette tydelige kjennetegnet sørger for at disse soppene får sin plass blant de «fem sikre» soppene.
<gallery mode="nolines" >
File:Abuluntu Lactarius deterrimus gills.jpg|Gulrotfarget melkesaft siver ut av snittet i skivene
File:Abuluntu Lactarius deterrimus cap.jpg|Fra oversiden
</gallery>
Når en plukker matrisker og renser dem i skogen er det nyttig å skjære gjennom soppen minst en gang slik at stilken og hatten deles vertikalt. Da vil man fort legge merke til det hvis den er markspist. Det er dessverre andre skapninger enn mennesker som har fått med seg at matrisker er god mat.
{{wp-beskrivelse|no|granmatriske|ekstra=furumatriske}}
== Sisselrot ==
Rotstenglene av sisselrot har en smak som kan minne om lakris. Smaken er sterkest om høsten og svekkes gjennom vinteren.
{{wp-beskrivelse|no|sisselrot|ekstra=myk sisselrot}}
== Skvallerkål ==
Det er de unge og skinnende grønne skuddene som smaker best ubehandlet. Siden skvallerkål ofte brer seg i store tepper der den vokser kan den by på en rikholdig kilde til grønt som en erstatning for spinatvekster pakket i plast. Når den klippes ned vil nye skudd sprette opp gjennom hele sommeren.
<gallery mode="nolines" >
Fil:Aegopodium podagraria young leaf 2.jpg|Friskt skinnende skudd
</gallery>
{{wp-beskrivelse|no|skvallerkål}}
== Steinsopper ==
{{wp-beskrivelse|no|steinsopper |ekstra = steinsopp |ekstra2 = bleklodden steinsopp}}
== Stornesle ==
Sammen med smånesle går den ofte under navnet «brennesle», fordi man kan «brenne» seg på de små hårene den er dekket av. De fleste skiller nok ikke på de to artene, men det nødvendig siden smånesle i 2015 ble vurdert som en sårbar art på norsk rødliste for arter.
<gallery mode="nolines" >
Fil:Urtica dioica - common nettle.jpg|Stornesle, ''Urtica dioica''
Fil:Urtica urens 109618311.jpg|Smånesle, ''Urtica urens''
</gallery>
Hansker er en effektiv beskyttelse mot brennhårene når man sanker stornesle og de uskadeliggjøres ved forvelling eller tørking. Når man ved sanking klipper planten helt ned vil man sørge for at det spretter opp nye skudd som kan sankes gjennom hele sommeren. Det man ikke bruker med én gang kan konserveres ved frysing og tørking.
{{wp-beskrivelse|no|stornesle}}
== Trompetsopp ==
{{wp-beskrivelse|no|trompetsopper|ekstra = gul trompetsopp}}
== Tyttebær ==
'''Tyttebær''' er velkjent for de fleste. Det er vanlig å spise tyttebærsyltetøy, eller rørte bær som tilbehør til kjøttretter, spesielt vilt. Trollkrem er en kjent dessert som inneholder tyttebær. Bærene er nokså syrlige, og de fleste vil nok smake dem til med en del sukker.
<gallery mode="nolines" >
Fil:Abuluntu Vaccinium vitis-idaea.jpg|{{Byline|Abuluntu}}
Fil:Abuluntu vaccinium vitis-idaea tea.jpg|«Te» av tørkede, ristede tyttebærblader. {{Byline|Abuluntu}}
</gallery>
=== Innhøsting ===
Siden lyngen er vintergrønn, og den ikke feller løv, kan bladene høstes året rundt. De kan forveksles med melbær. Blader av melbær inneholder vesentlige mengder av stoffet arbutin, som omdannes til et giftstoff om de spises. Det kan gi forgiftninger. Tyttebærbladene inneholder mye mindre av stoffet, så de kan trygt nytes i moderate mengder. Tyttebærbladenes tykke, læraktige og blanke utseende skiller dem fra melbær. De har tydelige fjærnerver i motsetning til melbærbladene som er nettnervet. Tyttebærbladene har dessuten små mørke «kjertelprikker» på undersiden og en noe innrullet kant.
Bærene sankes om høsten. De modnes til forskjellig tid fra sør til nord i landet, og fra kyst til fjell. Avhengig av hva de skal brukes til kan en sanke dem i varierende modenhetsgrad.
=== Bruk ===
Friske bær kan røres med sukker. De kan kokes til syltetøy, gelé, og kompott. Ved å safte bærene kan en få saft, og saften kan kokes inn til suppe, sirup eller saus. Det er også mulig å framstille vin av saften. Knuste bær som blir til overs etter safting kan utnyttes til grøt, eller brukes i brød.
Bladene kan tørkes, og ristes i en stekeovn eller i en stekepanne for trekkes som en velsmakende «grønn te». De bør trekke mellom 10 til 15 minutter i vann, eller kanskje enda lengre etter hvor mye smak en ønsker å trekke ut.
=== Konservering ===
Bærene inneholder benzoesyre som gir dem god holdbarhet. Hele, friske bær kan oppbevares lenge i vann på glass. Kok opp vannet, og la det kjøle seg ned. Desinfiser glass og lokk. Ha bærene på glassene og hell over det nedkjølte vannet til det dekker bærene. Ha på lokket å sett bort. Hvis en knuser dem, legger dem over andre frukt på glass og topper det hele med saften av knusingen så bidrar de til å konservere innholdet i glasset.
{{wp-beskrivelse|no|tyttebær}}
[[Kategori:Sankewikiboken]]
04odfkxegenkmfl6j82pg14cw9jbgg1
Brukerdiskusjon:SHB
3
7844
46655
44542
2026-09-18T02:42:18Z
Max
5236
Max flyttet siden [[Brukerdiskusjon:SHB2000]] til [[Brukerdiskusjon:SHB]]: Flyttet siden automatisk under navneendring fra «[[Special:CentralAuth/SHB2000|SHB2000]]» til «[[Special:CentralAuth/SHB|SHB]]»
44542
wikitext
text/x-wiki
<div style="border: 1rem #dd0000 ridge; padding: 0.5em;">Hello! Please message me on [[m:User talk:SHB2000|meta.wikimedia.org]] instead. I may not notice messages on this page.</div>
ojy2vkqs676esjrcfi79dwyt0tjr5xc
Modul:Message box
828
7851
46681
46541
2026-09-18T10:23:06Z
Wkee4ager
4794
46681
Scribunto
text/plain
--[[ importert fra
https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555
This is a meta-module for producing message box templates, including {{mbox}},
{{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
]]
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
85a80hjxigzrfcnfsugf3x1w8jd1lj0
Modul:Message box/dok
828
7852
46629
44643
2026-09-17T19:22:14Z
Wkee4ager
4794
46629
wikitext
text/x-wiki
{{mboks|type=notice|text=Denne modulen er importert fra MetaWiki og dokumentasjonen er uoversatt. Her på Wikibøker implementeres modulen gjennom malen {{tl|mboks}} i stedet for å bruke de mange ulike malene nevnt i dokumentasjonen}}
This is a meta-module that implements the message box templates {{tl|mbox}}, {{tl|ambox}}, {{tl|cmbox}}, {{tl|fmbox}}, {{tl|imbox}}, {{tl|ombox}}, and {{tl|tmbox}}. It is intended to be used from Lua modules, and should not be used directly from wiki pages. If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.
== Usage ==
To use this module from another Lua module, first you need to load it.
<syntaxhighlight lang="lua">
local messageBox = require('Module:Message box')
</syntaxhighlight>
To create a message box, use the <code>main</code> function. It takes two parameters: the first is the box type (as a string), and the second is a table containing the message box parameters.
<syntaxhighlight lang="lua">
local box = messageBox.main( boxType, {
param1 = param1,
param2 = param2,
-- More parameters...
})
</syntaxhighlight>
There are seven available box types:
{| class="wikitable"
! Box type !! Template !! Purpose
|-
| <code>mbox</code> || {{tl|mbox}} || For message boxes to be used in multiple namespaces
|-
| <code>ambox</code> || {{tl|ambox}} || For article message boxes
|-
| <code>cmbox</code> || {{tl|cmbox}} || For category message boxes
|-
| <code>fmbox</code> || {{tl|fmbox}} || For interface message boxes
|-
| <code>imbox</code> || {{tl|imbox}} || For file namespace message boxes
|-
| <code>tmbox</code> || {{tl|tmbox}} || For talk page message boxes
|-
| <code>ombox</code> || {{tl|ombox}} || For message boxes in other namespaces
|}
See the template page of each box type for the available parameters.
== Usage from #invoke ==
As well as the <code>main</code> function, this module has separate functions for each box type. They are accessed using the code <code><nowiki>{{#invoke:Message box|mbox|...}}</nowiki></code>, <code><nowiki>{{#invoke:Message box|ambox|...}}</nowiki></code>, etc. These will work when called from other modules, but they access code used to process arguments passed from #invoke, and so calling them will be less efficient than calling <code>main</code>.
== Technical details ==
The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at [[Module:Message box/configuration]]. Here are the various configuration options and what they mean:
* <code>types</code> - a table containing data used by the type parameter of the message box. The table keys are the values that can be passed to the type parameter, and the table values are tables containing the class and the image used by that type.
* <code>default</code> - the type to use if no value was passed to the type parameter, or if an invalid value was specified.
* <code>showInvalidTypeError</code> - whether to show an error if the value passed to the type parameter was invalid.
* <code>allowBlankParams</code> - usually blank values are stripped from parameters passed to the module. However, whitespace is preserved for the parameters included in the allowBlankParams table.
* <code>allowSmall</code> - whether a small version of the message box can be produced with "small=yes".
* <code>smallParam</code> - a custom name for the small parameter. For example, if set to "left" you can produce a small message box using "small=left".
* <code>smallClass</code> - the class to use for small message boxes.
* <code>substCheck</code> - whether to perform a subst check or not.
* <code>classes</code> - an array of classes to use with the message box.
* <code>imageEmptyCell</code> - whether to use an empty td cell if there is no image set. This is used to preserve spacing for message boxes with a width of less than 100% of the screen.
* <code>imageEmptyCellStyle</code> - whether empty image cells should be styled.
* <code>imageCheckBlank</code> - whether "image=blank" results in no image being displayed.
* <code>imageSmallSize</code> - usually, images used in small message boxes are set to 30x30px. This sets a custom size.
* <code>imageCellDiv</code> - whether to enclose the image in a div enforcing a maximum image size.
* <code>useCollapsibleTextFields</code> - whether to use text fields that can be collapsed, i.e. "issue", "fix", "talk", etc. Currently only used in ambox.
* <code>imageRightNone</code> - whether imageright=none results in no image being displayed on the right-hand side of the message box.
* <code>sectionDefault</code> - the default name for the "section" parameter. Depends on <code>useCollapsibleTextFields</code>.
* <code>allowMainspaceCategories</code> - allow categorisation in the main namespace.
* <code>templateCategory</code> - the name of a category to be placed on the template page.
* <code>templateCategoryRequireName</code> - whether the <code>name</code> parameter is required to display the template category.
* <code>templateErrorCategory</code> - the name of the error category to be used on the template page.
* <code>templateErrorParamsToCheck</code> - an array of parameter names to check. If any are absent, the <code>templateErrorCategory</code> is applied to the template page.
rvbml6bw67hc551ckv5xoed83kqie0y
Modul:Message box/configuration
828
7860
46690
46542
2026-09-18T10:36:47Z
Wkee4ager
4794
46690
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Message box configuration --
-- --
-- This module contains configuration data for [[Module:Message box]]. --
--------------------------------------------------------------------------------
return {
ambox = {
types = {
speedy = {
class = 'ambox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ambox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ambox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ambox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ambox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ambox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ambox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'},
allowSmall = true,
smallParam = 'left',
smallClass = 'mbox-small-left',
substCheck = true,
classes = {'metadata', 'plainlinks', 'ambox'},
imageEmptyCell = true,
imageCheckBlank = true,
imageSmallSize = '20x20px',
imageCellDiv = true,
useCollapsibleTextFields = true,
imageRightNone = true,
sectionDefault = 'article',
allowMainspaceCategories = true,
templateCategory = 'Beskjedbokser i hovednavnerommet',
templateCategoryRequireName = true,
templateErrorCategory = nil,
templateErrorParamsToCheck = {'issue', 'fix', 'subst'}
},
cmbox = {
types = {
speedy = {
class = 'cmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'cmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'cmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'cmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'cmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'cmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'cmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
caution = {
class = 'cmbox-style',
image = 'Ambox warning yellow.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'cmbox'},
imageEmptyCell = true
},
fmbox = {
types = {
warning = {
class = 'fmbox-warning',
image = 'OOjs UI icon clock-destructive.svg'
},
editnotice = {
class = 'fmbox-editnotice',
image = 'OOjs UI icon information-progressive.svg'
},
system = {
class = 'fmbox-system',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'system',
showInvalidTypeError = true,
classes = {'plainlinks', 'fmbox'},
imageEmptyCell = false,
imageRightNone = false
},
imbox = {
types = {
speedy = {
class = 'imbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'imbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'imbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'imbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'imbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'imbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
license = {
class = 'imbox-license licensetpl',
image = 'Imbox-license.svg'
},
featured = {
class = 'imbox-featured',
image = 'Cscr-featured.svg'
},
notice = {
class = 'imbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'imbox'},
usePlainlinksParam = true,
imageEmptyCell = true,
below = true,
templateCategory = 'Beskjedbokser i filnavnerommet'
},
ombox = {
types = {
speedy = {
class = 'ombox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'ombox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
warning = { -- alias for content
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
content = {
class = 'ombox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'ombox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'ombox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'ombox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'ombox-notice',
image = 'OOjs UI icon information-progressive.svg'
},
critical = {
class = 'mbox-critical',
image = 'OOjs UI icon clock-destructive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'ombox'},
allowSmall = true,
imageEmptyCell = true,
imageRightNone = true
},
tmbox = {
types = {
speedy = {
class = 'tmbox-speedy',
image = 'OOjs UI icon clock-destructive.svg'
},
delete = {
class = 'tmbox-delete',
image = 'OOjs UI icon alert-destructive.svg'
},
content = {
class = 'tmbox-content',
image = 'OOjs UI icon notice-warning.svg'
},
style = {
class = 'tmbox-style',
image = 'Edit-clear.svg'
},
move = {
class = 'tmbox-move',
image = 'Merge-split-transwiki default.svg'
},
protection = {
class = 'tmbox-protection',
image = 'Semi-protection-shackle-keyhole.svg'
},
notice = {
class = 'tmbox-notice',
image = 'OOjs UI icon information-progressive.svg'
}
},
default = 'notice',
showInvalidTypeError = true,
classes = {'plainlinks', 'tmbox'},
allowSmall = true,
imageRightNone = true,
imageEmptyCell = true,
imageEmptyCellStyle = true,
templateCategory = 'Beskjedbokser på diskusjonssider'
}
}
e8g1iagylx2inai8g1fe3453vwegvc2
Mal:Ambox
10
7862
46632
46495
2026-09-17T19:28:59Z
Wkee4ager
4794
omdirigerer til mboks
46632
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Mboks]]
1slrhfdzd268fg9mjojttygrysn0qdn
46633
46632
2026-09-17T19:31:54Z
Wkee4ager
4794
Endret omdirigeringsmål fra [[Mal:Mboks]] til [[Mal:Amboks]]
46633
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Amboks]]
l03c27lh0yk72mle5bte6nqy1u80tg0
Mal:Tmbox
10
7864
46649
44656
2026-09-17T19:56:20Z
Wkee4ager
4794
Omdirigerte siden til [[Mal:Tmboks]]
46649
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Tmboks]]
evs27c3yyfnwfr72bgfhnklczxmcv3t
Mal:Imboks
10
7865
46640
44657
2026-09-17T19:46:11Z
Wkee4ager
4794
Wkee4ager flyttet siden [[Mal:Imbox]] til [[Mal:Imboks]]: oversetter tittelen
44657
wikitext
text/x-wiki
{{#invoke:Message box|imbox}}<noinclude>
{{Dokumentasjon}}
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
fn9c26svzqmn8ffwvqtia2ijmpj2whj
46644
46640
2026-09-17T19:47:31Z
Wkee4ager
4794
46644
wikitext
text/x-wiki
<templatestyles src="Mboks/styles.css"/>{{#invoke:Message box|imbox|class=beskjedboks}}<noinclude>
{{Dokumentasjon}}
<!-- Kategorier føyes til på undersiden /dok, ikke her -->
</noinclude>
5650ihrjle69c9953hqdwy1dx26n85q
46687
46644
2026-09-18T10:31:51Z
Wkee4ager
4794
46687
wikitext
text/x-wiki
{{#invoke:Message box|imbox}}<noinclude>
{{Dokumentasjon}}
<!-- Kategorier føyes til på undersiden /dok, ikke her -->
</noinclude>
0t2j8f9v7qz1adhwtwkn8pos0jjtkxu
Mal:Cmbox
10
7866
46645
44658
2026-09-17T19:48:31Z
Wkee4ager
4794
Omdirigerte siden til [[Mal:Cmboks]]
46645
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Cmboks]]
jfgzb4iq8d0fy2n3u82q3xngem949dl
Mal:Ombox
10
7867
46636
44659
2026-09-17T19:41:35Z
Wkee4ager
4794
Omdirigerte siden til [[Mal:Omboks]]
46636
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Omboks]]
5ml460jj8lss6u02der8joy7yzyj781
Modul:Namespace detect
828
7868
46692
44660
2026-09-18T10:43:20Z
Wkee4ager
4794
kun whitespace
46692
Scribunto
text/plain
--[[
--------------------------------------------------------------------------------
-- --
-- NAMESPACE DETECT --
-- --
-- This module implements the {{namespace detect}} template in Lua, with a --
-- few improvements: all namespaces and all namespace aliases are supported, --
-- and namespace names are detected automatically for the local wiki. The --
-- module can also use the corresponding subject namespace value if it is --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in --
-- Module:Namespace detect/config. --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Module:Namespace detect/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Module:Yesno')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Fetches a value from the table t1 for the first key in array t2 where
-- a non-nil value of t1 exists.
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Returns true if value equals a value in the array t. Otherwise
-- returns false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Get the page object, passing the function through pcall in case of
-- errors, e.g. being over the expensive function count limit.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Provided for backward compatibility with other modules
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- This function gets the namespace name from the page object.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Handle "demospace = main" properly.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Get the subject namespace if the option is set,
-- otherwise use "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- return nil if the page object doesn't exist.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Check the parameters stored in the mappings table for any matches.
local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- If there were no matches, return parameters for other namespaces.
-- This happens if there was no text specified for the namespace that
-- was detected or if the demospace parameter is not a valid
-- namespace. Note that the parameter for the detected namespace must be
-- completely absent for this to happen, not merely blank.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Create a wikitable of all subject namespace parameters, for
-- documentation purposes. The talk parameter is optional, in case it
-- needs to be excluded in the documentation.
--]]
-- Load modules and initialise variables.
mTableTools = require('Module:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Whether to use the talk parameter.
-- Get the header names.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')
-- Put the namespaces in order.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Build the table.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p
t3wacs62qhv6enzwev2j6s1gbf3oy29
Modul:Lua banner/config
828
7888
46699
44690
2026-09-18T10:56:20Z
Wkee4ager
4794
oversetter kategorier
46699
Scribunto
text/plain
local cfg = {} -- Don’t touch this line.
-- Subpage blacklist: these subpages will not be categorized (except for the
-- error category, which is always added if there is an error).
-- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have
-- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules,
-- so they *will* have categories. All rules should be in the
-- ['<subpage name>'] = true,
-- format.
cfg['subpage_blacklist'] = {
['doc'] = true,
['sandbox'] = true,
['sandbox2'] = true,
['testcases'] = true,
}
-- Allow wishes: whether wishes for conversion to Lua are allowed.
-- If true, calls with zero parameters are valid, and considered to be wishes:
-- The box’s text is “This template should use Lua”, and cfg['wish_category'] is
-- added. If false, such calls are invalid, an error message appears, and
-- cfg['error_category'] is added.
cfg['allow_wishes'] = false
-- Default category: this category is added if the module call contains errors
-- (e.g. no module listed). A category name without namespace, or nil
-- to disable categorization (not recommended).
cfg['error_category'] = 'Lua-maler som rapporterer feil'
-- Wish category: this category is added if no module is listed, and wishes are
-- allowed. (Not used if wishes are not allowed.) A category name without
-- namespace, or nil to disable categorization.
cfg['wish_category'] = nil
-- Default category: this category is added if none of the below module_categories
-- matches the first module listed. A category name without namespace, or nil
-- to disable categorization.
cfg['default_category'] = 'Lua-baserte maler'
-- Module categories: one of these categories is added if the first listed module
-- is the listed module (e.g. {{Lua|Module:String}} adds
-- [[Category:Lua String-based templates]].) Format:
-- ['<module name>'] = '<category name>'
-- where neither <module name> nor <category name> contains namespace. An empty
-- table (i.e. no module-based categorization) will suffice on smaller wikis.
cfg['module_categories'] = {
['Citation'] = 'Lua-baserte referanse-maler',
['Citation/CS1'] = 'Lua-baserte referanse-maler',
}
return cfg -- Don’t touch this line.
l3ulubzkfuhc60yv6d7gfy7vygqqtxu
Mal:Imboks/dok
10
7894
46642
45397
2026-09-17T19:46:11Z
Wkee4ager
4794
Wkee4ager flyttet siden [[Mal:Imbox/dok]] til [[Mal:Imboks/dok]]: oversetter tittelen
45397
wikitext
text/x-wiki
{{Dokumentasjon underside}}
<!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE -->
{{Lua|Module:Message box}}
This is the {{tl|Imbox}} (['''I''']mage ['''m''']essage ['''box''']) metatemplate.
It is used to build message box templates for file (image) pages, such as. It offers several different colours, uses default images if no image parameter is given and it has some other features.
This template works almost exactly like {{tl|Ambox}} and uses the same parameters.
<!--
===We are deploying!===
After long discussion on the [[w:en:Template talk:Imbox|talk page]] of this template and at other places we are finally deploying this template. Feel free to convert any message boxes used on file pages to use this meta-template. If you find any tricky cases then list them on the talk page of this template and you'll get help.
When this template is used to build image message boxes those boxes should contain explanatory texts just like before. (The same texts as before or new improved texts.) If there are more specific images in the boxes or you know a better image, then use them instead of the default images shown here.
-->
===Usage===
Simple usage example:
<pre>
{{Imbox |text=Some text.}}
</pre>
{{Imbox |text=Some text.}}
Complex example:
<pre>
{{Imbox
| type = style
| style = width:400px;
| image = [[File:Emblem-question-yellow.svg|40px]]
| textstyle = font-style:italic; font-weight:bold; color:red;
| text = The message body text.
}}
</pre>
{{Imbox
| type = style
| style = width:400px;
| image = [[File:Emblem-question-yellow.svg|40px]]
| textstyle = font-style:italic; font-weight:bold; color:red;
| text = The message body text.
}}
===Image message box types===
The following examples use different '''type''' parameters but use no image parameters thus they use the default images for each type.
{{Imbox
| type = speedy
| text = type=<u>speedy</u> – Speedy deletion templates such as {{tl|isd}}.
}}
{{Imbox
| type = delete
| text = type=<u>delete</u> – Deletion templates such as {{tl|ifd}}.
}}
{{Imbox
| type = content
| text = type=<u>content</u> – Major warnings and problems, such as {{tl|non-free reduce}}.
}}
{{Imbox
| type = style
| text = type=<u>style</u> – Minor warnings and problems, such as {{tl|cleanup-image}}.
}}
{{Imbox
| type = notice
| text = type=<u>notice</u> – Notices and messages of any kind, both permanent and temporary.
}}
{{Imbox
| type = move
| text = type=<u>move</u> – Move and rename messages and proposals, such as {{tl|Requested move}}.
}}
{{Imbox
| type = protection
| text = type=<u>protection</u> – Protection templates such as {{tl|pp-protected}} when shown on an image page.
}}
{{Imbox
| type = license
| text = type=<u>license</u> – License templates such as {{tl|GFDL}}.
}}
{{Imbox
| type = featured
| text = type=<u>featured</u> – Featured image templates such as {{tl|FeaturedPicture}}.
}}
===Other images===
The default images shown above are mostly for convenience. In many cases it is more appropriate to use more specific images. These examples use the '''image''' parameter to specify an image other than the default images.
{{Imbox
| type = style
| image = [[File:Camera-photo.svg|40px]]
| text = type = style<br/>image = <nowiki>[[File:Gnome-dev-camera.svg|42px]]</nowiki><br/>This image is used for {{tl|cleanup-image}}.
}}
{{Imbox
| type = move
| image = [[File:To Commons.svg|52px]]
| text = type = move<br/>image = <nowiki>[[File:To Commons.svg|52px]]</nowiki><br/>This image is used for {{tl|copy to Wikimedia Commons}}.
}}
{{Imbox
| type = license
| image = [[File:Heckert GNU white.svg|48px]]
| text = type = license<br/>image = <nowiki>[[File:Heckert GNU white.svg|48px]]</nowiki><br/>This image is used for the GFDL license templates such as {{tl|GFDL}}.
}}
===Special===
Some other parameter combinations.
{{Imbox
| text = No type and no image given ('''default''')
}}
{{Imbox
| image = none
| text = No type and '''image=none''' – No image is used and the '''text''' uses the whole message box area.
}}
{{Imbox
| type = license
| image = [[File:PD-icon.svg|40px]]<br/>[[File:Ambox warning yellow.svg|40px]]
| imageright = [[File:Shuttle.svg|30px]]
| text = type = license<br/>image = <nowiki>[[File:PD-icon.svg|40px]]<br/>[[File:Ambox warning yellow.svg|40px]]</nowiki><br/>imageright = <nowiki>[[File:Shuttle.svg|30px]]</nowiki>
}}
{{Imbox
| type = license
| image = [[File:PD-icon.svg|40px]]<br/>[[File:Ambox warning yellow.svg|40px]]
| imageright = [[File:Shuttle.svg|30px]]
| text = '''This file is in the [[public domain]] because it was created by [[NASA]].'''<br/>Note that use of NASA logos, insignia and emblems are restricted per US law.
}}
{{Imbox
| type = license
| image = [[File:PD-icon.svg|40px]]
| text =
type = license<br/>image = <nowiki>[[File:PD-icon.svg|40px]]</nowiki><br/>below = <nowiki>{{Imbox |type=content |text='''This license tag is deprecated!'''}}</nowiki>
| below = {{Imbox |type=content |text='''This license tag is deprecated!'''}}
}}
===Parameters===
List of all parameters:
<pre>
{{Imbox
| name = name of the template
| type = speedy / delete / content / style / notice /
move / protection / license / featured
| image = none / [[File:Some image.svg|40px]]
| imageright = [[File:Some image.svg|40px]]
| style = CSS value
| textstyle = CSS value
| text = The message body text.
| below = More text or another imbox.
| plainlinks = no
}}
</pre>
'''name'''
:(Optional) Name of the template. This adds a CSS class with name <code>box-''name''</code> to the HTML element, for use by bots or scripts.
'''type'''
:If no '''type''' parameter is given the template defaults to type '''notice'''. That means it gets a blue border.
'''image'''
:'''No parameter''' = If no '''image''' parameter is given the template uses a default image. Which default image it uses depends on the '''type''' parameter.
:'''An image''' = Should be an image with usual wiki notation. 40px - 50px width are usually about right depending on the image height to width ratio. (But the message box can handle images of any size.) For example:
::<code><nowiki>image = [[File:Gnome-dev-camera.svg|40px]]</nowiki></code>
:'''none''' = Means that no image is used.
'''imageright'''
:'''No parameter''' = If no '''imageright''' parameter is given then no image is shown on the right side.
:'''An image''' = Should be an image with usual wiki notation. 40px - 50px width are usually about right depending on the image height to width ratio. (But the message box can handle images of any size.) For example:
::<code><nowiki>imageright = [[File:Nuvola apps bookcase.png|40px]]</nowiki></code>
:'''Anything''' = Any other object that you want to show on the right side.
'''style'''
:An optional [[Cascading Style Sheets|CSS]] value used by the entire message box table. Without quotation marks <code>" "</code>. For example:
::<code>style = margin-bottom: 0.5em;</code>
'''textstyle'''
:An optional [[Cascading Style Sheets|CSS]] value used by the text cell. For example:
::<code>textstyle = text-align: center;</code>
'''text'''
:The message body text.
'''below'''
:A full width area below the images and text area. Can take a text or any kind of object, for instance another imbox:
::<code><nowiki>below = {{Imbox |type=content |text=This license tag is deprecated.}}</nowiki></code>
'''plainlinks'''
:Defaults to yes. If external link arrows - [[File:External.svg|10px]] - are desired, specify:
::<code><nowiki>plainlinks = no</nowiki></code>
===Technical details===
Namespace "Image:" was renamed to "File:" on 11 December 2008. This template was created long before that, and that is why it is named "imbox" as in "image message box".
If you need to use special characters in the text parameter then you need to escape them like this:
<pre>
{{Imbox
| text = <div>
Equal sign = and a start and end brace { } work fine as they are.
But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>.
And now a pipe and end braces <nowiki>|}}</nowiki>.
</div>
}}
</pre>
{{Imbox
| text = <div>
Equal sign = and a start and end brace { } work fine as they are.
But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>.
And now a pipe and end braces <nowiki>|}}</nowiki>.
</div>
}}
This template uses the imbox CSS classes in [[MediaWiki:Common.css]] for most of its looks, thus it is fully skinnable.
Internally this meta-template uses HTML markup instead of wiki markup for the table code. That is the usual way we make meta-templates since wiki markup has several drawbacks. For instance it makes it harder to use [[m:Help:ParserFunctions|parser functions]] and special characters in parameters.
The default images for this meta-template are in png format instead of svg format. The main reason is that some older web browsers have trouble with the transparent png images. For those older browsers these png images have been modified so that the color of their default backgrounds match the background color of the template. The default background that MediaWiki renders for svg images is always white. This creates a white box around the images when displayed in older browsers.
For more technical details see the [[w:en:Template talk:Imbox|talk page]]. Since this template works almost exactly like the other mboxes their talk pages and related pages might also contain more details, see the "See also" section below.
===See also===
<includeonly>{{Sandbox other|
| <!-- CATEGORIES BELOW THIS LINE, PLEASE -->
[[Category:Mbox and messagebox templates]]
[[Category:File namespace templates|*]]
}}</includeonly>
ol39l7egs7brk97cejxc798t1i4xkej
46652
46642
2026-09-17T20:01:39Z
Wkee4ager
4794
Erstatter siden med: {{Dokumentasjon underside}} Se dokumentasjon på [[Mal:Mboks]]. <includeonly>[[Kategori:Metamaler]]</includeonly>
46652
wikitext
text/x-wiki
{{Dokumentasjon underside}}
Se dokumentasjon på [[Mal:Mboks]].
<includeonly>[[Kategori:Metamaler]]</includeonly>
0nwktfp4hnz4w3gx704pc8bjtb400k3
46696
46652
2026-09-18T10:52:21Z
Wkee4ager
4794
46696
wikitext
text/x-wiki
{{Dokumentasjon underside}}
{{Lua|Modul:Message box}}
Se dokumentasjon på [[Mal:Mboks]].
<includeonly>[[Kategori:Metamaler]]</includeonly>
rp0zv0tmoyn4q2vnf83yyz5porugmz1
Bruker:Wkee4ager/Kladd
2
8110
46683
46500
2026-09-18T10:28:16Z
Wkee4ager
4794
/* amboks */
46683
wikitext
text/x-wiki
== Mboks ==
=== mboks ===
{{Mboks|messagebox=mbox}}
==== speedy ====
{{Mboks|messagebox=mbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=mbox|type=delete}}
==== content ====
{{Mboks|messagebox=mbox|type=content}}
==== style ====
{{Mboks|messagebox=mbox|type=style}}
==== notice ====
{{Mboks|messagebox=mbox|type=notice}}
==== move ====
{{Mboks|messagebox=mbox|type=move}}
==== protection ====
{{Mboks|messagebox=mbox|type=protection}}
== amboks ==
{{Amboks}}
=== speedy ===
{{Amboks|type=speedy}}
=== delete ===
{{Amboks|type=delete}}
=== content ===
{{Amboks|type=content}}
=== style ===
{{Amboks|type=style}}
=== notice ===
{{Amboks|type=notice}}
=== move ===
{{Amboks|type=move}}
=== protection ===
{{Amboks|type=protection}}
=== cmboks ===
{{Mboks|messagebox=cmbox}}
==== speedy ====
{{Mboks|messagebox=cmbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=cmbox|type=delete}}
==== content ====
{{Mboks|messagebox=cmbox|type=content}}
==== style ====
{{Mboks|messagebox=cmbox|type=style}}
==== notice ====
{{Mboks|messagebox=cmbox|type=notice}}
==== move ====
{{Mboks|messagebox=cmbox|type=move}}
==== protection ====
{{Mboks|messagebox=cmbox|type=protection}}
=== imboks ===
{{Mboks|messagebox=imbox}}
==== speedy ====
{{Mboks|messagebox=imbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=imbox|type=delete}}
==== content ====
{{Mboks|messagebox=imbox|type=content}}
==== style ====
{{Mboks|messagebox=imbox|type=style}}
==== notice ====
{{Mboks|messagebox=imbox|type=notice}}
==== move ====
{{Mboks|messagebox=imbox|type=move}}
==== protection ====
{{Mboks|messagebox=imbox|type=protection}}
=== omboks ===
{{Mboks|messagebox=ombox}}
==== speedy ====
{{Mboks|messagebox=ombox|type=speedy}}
==== delete ====
{{Mboks|messagebox=ombox|type=delete}}
==== content ====
{{Mboks|messagebox=ombox|type=content}}
==== style ====
{{Mboks|messagebox=ombox|type=style}}
==== notice ====
{{Mboks|messagebox=ombox|type=notice}}
==== move ====
{{Mboks|messagebox=ombox|type=move}}
==== protection ====
{{Mboks|messagebox=ombox|type=protection}}
=== tmboks ===
{{Mboks|messagebox=tmbox}}
==== speedy ====
{{Mboks|messagebox=tmbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=tmbox|type=delete}}
==== content ====
{{Mboks|messagebox=tmbox|type=content}}
==== style ====
{{Mboks|messagebox=tmbox|type=style}}
==== notice ====
{{Mboks|messagebox=tmbox|type=notice}}
==== move ====
{{Mboks|messagebox=tmbox|type=move}}
==== protection ====
{{Mboks|messagebox=tmbox|type=protection}}
p2vjl2n5wm9myxscvs96td3pls0tqvh
46685
46683
2026-09-18T10:30:22Z
Wkee4ager
4794
/* cmboks */
46685
wikitext
text/x-wiki
== Mboks ==
=== mboks ===
{{Mboks|messagebox=mbox}}
==== speedy ====
{{Mboks|messagebox=mbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=mbox|type=delete}}
==== content ====
{{Mboks|messagebox=mbox|type=content}}
==== style ====
{{Mboks|messagebox=mbox|type=style}}
==== notice ====
{{Mboks|messagebox=mbox|type=notice}}
==== move ====
{{Mboks|messagebox=mbox|type=move}}
==== protection ====
{{Mboks|messagebox=mbox|type=protection}}
== amboks ==
{{Amboks}}
=== speedy ===
{{Amboks|type=speedy}}
=== delete ===
{{Amboks|type=delete}}
=== content ===
{{Amboks|type=content}}
=== style ===
{{Amboks|type=style}}
=== notice ===
{{Amboks|type=notice}}
=== move ===
{{Amboks|type=move}}
=== protection ===
{{Amboks|type=protection}}
=== cmboks ===
{{Cmboks}}
==== speedy ====
{{Cmboks|type=speedy}}
==== delete ====
{{Cmboks|type=delete}}
==== content ====
{{Cmboks|type=content}}
==== style ====
{{Cmboks|type=style}}
==== notice ====
{{Cmboks|type=notice}}
==== move ====
{{Cmboks|type=move}}
==== protection ====
{{Cmboks|type=protection}}
=== imboks ===
{{Mboks|messagebox=imbox}}
==== speedy ====
{{Mboks|messagebox=imbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=imbox|type=delete}}
==== content ====
{{Mboks|messagebox=imbox|type=content}}
==== style ====
{{Mboks|messagebox=imbox|type=style}}
==== notice ====
{{Mboks|messagebox=imbox|type=notice}}
==== move ====
{{Mboks|messagebox=imbox|type=move}}
==== protection ====
{{Mboks|messagebox=imbox|type=protection}}
=== omboks ===
{{Mboks|messagebox=ombox}}
==== speedy ====
{{Mboks|messagebox=ombox|type=speedy}}
==== delete ====
{{Mboks|messagebox=ombox|type=delete}}
==== content ====
{{Mboks|messagebox=ombox|type=content}}
==== style ====
{{Mboks|messagebox=ombox|type=style}}
==== notice ====
{{Mboks|messagebox=ombox|type=notice}}
==== move ====
{{Mboks|messagebox=ombox|type=move}}
==== protection ====
{{Mboks|messagebox=ombox|type=protection}}
=== tmboks ===
{{Mboks|messagebox=tmbox}}
==== speedy ====
{{Mboks|messagebox=tmbox|type=speedy}}
==== delete ====
{{Mboks|messagebox=tmbox|type=delete}}
==== content ====
{{Mboks|messagebox=tmbox|type=content}}
==== style ====
{{Mboks|messagebox=tmbox|type=style}}
==== notice ====
{{Mboks|messagebox=tmbox|type=notice}}
==== move ====
{{Mboks|messagebox=tmbox|type=move}}
==== protection ====
{{Mboks|messagebox=tmbox|type=protection}}
niy6sngdu5ytrt2pq01xubs8cgi53n9
46691
46685
2026-09-18T10:40:48Z
Wkee4ager
4794
46691
wikitext
text/x-wiki
== Mboks ==
=== mboks ===
{{Mboks}}
=== speedy ===
{{Mboks|type=speedy}}
=== delete ===
{{Mboks|type=delete}}
=== content ===
{{Mboks|type=content}}
=== style ===
{{Mboks|type=style}}
=== notice ===
{{Mboks|type=notice}}
=== move ===
{{Mboks|type=move}}
=== protection ===
{{Mboks|type=protection}}
== amboks ==
{{Amboks}}
=== speedy ===
{{Amboks|type=speedy}}
=== delete ===
{{Amboks|type=delete}}
=== content ===
{{Amboks|type=content}}
=== style ===
{{Amboks|type=style}}
=== notice ===
{{Amboks|type=notice}}
=== move ===
{{Amboks|type=move}}
=== protection ===
{{Amboks|type=protection}}
== cmboks ==
{{Cmboks}}
=== speedy ===
{{Cmboks|type=speedy}}
=== delete ===
{{Cmboks|type=delete}}
=== content ===
{{Cmboks|type=content}}
=== style ===
{{Cmboks|type=style}}
=== notice ===
{{Cmboks|type=notice}}
=== move ===
{{Cmboks|type=move}}
=== protection ===
{{Cmboks|type=protection}}
== imboks ==
{{Imboks}}
=== speedy ===
{{Imboks|type=speedy}}
=== delete ===
{{Imboks|type=delete}}
=== content ===
{{Imboks|type=content}}
=== style ===
{{Imboks|type=style}}
=== notice ===
{{Imboks|type=notice}}
=== move ===
{{Imboks|type=move}}
=== protection ===
{{Imboks|type=protection}}
== omboks ==
{{Omboks}}
=== speedy ===
{{Omboks|type=speedy}}
=== delete ===
{{Omboks|type=delete}}
=== content ===
{{Omboks|type=content}}
=== style ===
{{Omboks|type=style}}
=== notice ===
{{Omboks|type=notice}}
=== move ===
{{Omboks|type=move}}
=== protection ===
{{Omboks|type=protection}}
== tmboks ==
{{Tmboks}}
=== speedy ===
{{Tmboks|type=speedy}}
=== delete ===
{{Tmboks|type=delete}}
=== content ===
{{Tmboks|type=content}}
=== style ===
{{Tmboks|type=style}}
=== notice ===
{{Tmboks|type=notice}}
=== move ===
{{Tmboks|type=move}}
=== protection ===
{{Tmboks|type=protection}}
hbr9v2lfqlmjp78fye5ffmzru21uz3j
Mal:Imbox
10
8127
46641
2026-09-17T19:46:11Z
Wkee4ager
4794
Wkee4ager flyttet siden [[Mal:Imbox]] til [[Mal:Imboks]]: oversetter tittelen
46641
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Imboks]]
ceter8c9wu086tp151vlxkvb8sccs5x
Mal:Imbox/dok
10
8128
46643
2026-09-17T19:46:11Z
Wkee4ager
4794
Wkee4ager flyttet siden [[Mal:Imbox/dok]] til [[Mal:Imboks/dok]]: oversetter tittelen
46643
wikitext
text/x-wiki
#OMDIRIGERING [[Mal:Imboks/dok]]
0v9kvif1y1n5ug48uess9h5jodqr9fn
Brukerdiskusjon:SHB2000
3
8129
46656
2026-09-18T02:42:18Z
Max
5236
Max flyttet siden [[Brukerdiskusjon:SHB2000]] til [[Brukerdiskusjon:SHB]]: Flyttet siden automatisk under navneendring fra «[[Special:CentralAuth/SHB2000|SHB2000]]» til «[[Special:CentralAuth/SHB|SHB]]»
46656
wikitext
text/x-wiki
#OMDIRIGERING [[Brukerdiskusjon:SHB]]
fh1qhrrf44lipzzy768qzran6zksloq
Bruker:Wkee4ager/Utkast til opprydning i Common.css
2
8130
46657
2026-09-18T08:55:40Z
Wkee4ager
4794
Ny side: /* */
46657
css
text/css
/*
*/
kskd7cd8oc3zna4fuqmqdhcd68cylkt
46658
46657
2026-09-18T08:58:35Z
Wkee4ager
4794
Wkee4ager endret innholdsmodellen for siden [[Bruker:Wkee4ager/Utkast til opprydning i Common.css]] fra «CSS» til «wikitekst»: skal ikke brukes som css, men til dokumentasjonsformål
46658
wikitext
text/x-wiki
/*
*/
kskd7cd8oc3zna4fuqmqdhcd68cylkt
46659
46658
2026-09-18T09:02:58Z
Wkee4ager
4794
46659
wikitext
text/x-wiki
<div class="mw-collapsible">
== Common.css ==
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
2od9t3blfjv00ot3xi9frqon502z30x
46660
46659
2026-09-18T09:06:55Z
Wkee4ager
4794
/* Common.css */
46660
wikitext
text/x-wiki
<div class="mw-collapsible">
<div class="mw-collapsible mw-collapsed">
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</div></div>
<div class="mw-collapsible mw-collapsed">
== [[MediaWiki:Common.css|]] ==
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
saqv44wc90v8evi310o6x3v76lvma3r
46661
46660
2026-09-18T09:10:26Z
Wkee4ager
4794
46661
wikitext
text/x-wiki
<div class="mw-collapsible mw-collapsed">
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
<div class="mw-collapsible mw-collapsed">
== [[MediaWiki:Common.css|Common.css]] ==
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
sgdvb7ewblrp4rzmare9agedny5ue8c
46662
46661
2026-09-18T09:11:11Z
Wkee4ager
4794
46662
wikitext
text/x-wiki
<div class="mw-collapsible">
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content mw-collapsed">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
<div class="mw-collapsible">
== [[MediaWiki:Common.css|Common.css]] ==
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content mw-collapsed">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
e888vbnea9rq5kwt7flwcayeslpemo3
46663
46662
2026-09-18T09:13:47Z
Wkee4ager
4794
46663
wikitext
text/x-wiki
<div class="mw-collapsible">
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content mw-collapsed">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
<div class="mw-collapsible">
== [[MediaWiki:Common.css|Common.css]] ==
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content mw-collapsed">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
c6w5po3p14lk7p5j0pf5jlpp4ues76l
46664
46663
2026-09-18T09:14:29Z
Wkee4ager
4794
46664
wikitext
text/x-wiki
<div class="mw-collapsible mw-collapsed">
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
<div class="mw-collapsible mw-collapsed">
== [[MediaWiki:Common.css|Common.css]] ==
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
30zbsbnztt44af424dmw0xqjt63934a
46665
46664
2026-09-18T09:17:41Z
Wkee4ager
4794
46665
wikitext
text/x-wiki
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
ieu7n6oavg7dy9s8roik9ifocnnzkle
46666
46665
2026-09-18T09:21:09Z
Wkee4ager
4794
46666
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
c4c0exu95v98bzol44hivp3i4qdl6ob
46667
46666
2026-09-18T09:41:04Z
Wkee4ager
4794
/* mw:Module:Message box */
46667
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
137t9kc2bbymeco6d0nh2nuo3enqthi
46668
46667
2026-09-18T09:49:34Z
Wkee4ager
4794
/* mw:Module:Message box */
46668
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
</syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
jptbqiizile3r24urwclqlurcc33fdr
46669
46668
2026-09-18T09:49:54Z
Wkee4ager
4794
/* mw:Module:Yesno */
46669
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
osi88uzu8zddg0lpgkd9ylo12rmsuxe
46670
46669
2026-09-18T09:53:36Z
Wkee4ager
4794
/* mw:Module:Message box */
46670
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Category handler]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Category_handler&oldid=2410928 2410928]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
6oui6sib3ho963ari5ihb97mcwu1dbe
46671
46670
2026-09-18T09:56:41Z
Wkee4ager
4794
/* mw:Module:Message box */
46671
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Arguments]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Arguments&oldid=3392121 3392121]
</div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
</syntaxhighlight>
</div></div>
== [[mw:Module:Category handler]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Category_handler&oldid=2410928 2410928]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
gsaudv3cnxu32y63h64a0pod11wqcpv
46672
46671
2026-09-18T09:59:34Z
Wkee4ager
4794
/* mw:Module:Arguments */
46672
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Arguments]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Arguments&oldid=3392121 3392121]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
</syntaxhighlight>
</div></div>
== [[mw:Module:Category handler]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Category_handler&oldid=2410928 2410928]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
mod4bpifkn6n1uctt7z11dmx11vr68l
46673
46672
2026-09-18T10:01:37Z
Wkee4ager
4794
/* mw:Module:Category handler */
46673
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Arguments]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Arguments&oldid=3392121 3392121]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
</syntaxhighlight>
</div></div>
== [[mw:Module:Category handler]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Category_handler&oldid=2410928 2410928]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Namespace detect]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Namespace_detect&oldid=4544589 4544589]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--[[
--------------------------------------------------------------------------------
-- --
-- NAMESPACE DETECT --
-- --
-- This module implements the {{namespace detect}} template in Lua, with a --
-- few improvements: all namespaces and all namespace aliases are supported, --
-- and namespace names are detected automatically for the local wiki. The --
-- module can also use the corresponding subject namespace value if it is --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in --
-- Module:Namespace detect/config. --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Module:Namespace detect/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Module:Yesno')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Fetches a value from the table t1 for the first key in array t2 where
-- a non-nil value of t1 exists.
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Returns true if value equals a value in the array t. Otherwise
-- returns false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Get the page object, passing the function through pcall in case of
-- errors, e.g. being over the expensive function count limit.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Provided for backward compatibility with other modules
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- This function gets the namespace name from the page object.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Handle "demospace = main" properly.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Get the subject namespace if the option is set,
-- otherwise use "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- return nil if the page object doesn't exist.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Check the parameters stored in the mappings table for any matches.
local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- If there were no matches, return parameters for other namespaces.
-- This happens if there was no text specified for the namespace that
-- was detected or if the demospace parameter is not a valid
-- namespace. Note that the parameter for the detected namespace must be
-- completely absent for this to happen, not merely blank.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Create a wikitable of all subject namespace parameters, for
-- documentation purposes. The talk parameter is optional, in case it
-- needs to be excluded in the documentation.
--]]
-- Load modules and initialise variables.
mTableTools = require('Module:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Whether to use the talk parameter.
-- Get the header names.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')
-- Put the namespaces in order.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Build the table.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
ojrk23u1tzsi3fj14du9e2ckxs8188p
46679
46673
2026-09-18T10:20:46Z
Wkee4ager
4794
/* mw:Module:Message box/ombox.css */
46679
wikitext
text/x-wiki
== [[mw:Module:Message box]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box&oldid=6090555 6090555]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This is a meta-module for producing message box templates, including
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.
-- Load necessary modules.
require('strict')
local getArgs
local yesno = require('Module:Yesno')
-- Get a language object for formatDate and ucfirst.
local lang = mw.language.getContentLanguage()
-- Define constants
local CONFIG_MODULE = 'Module:Message box/configuration'
local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'}
local TEMPLATE_STYLES = 'Module:Message box/%s.css'
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function getTitleObject(...)
-- Get the title object, passing the function through pcall
-- in case we are over the expensive function count limit.
local success, title = pcall(mw.title.new, ...)
if success then
return title
end
end
local function union(t1, t2)
-- Returns the union of two arrays.
local vals = {}
for i, v in ipairs(t1) do
vals[v] = true
end
for i, v in ipairs(t2) do
vals[v] = true
end
local ret = {}
for k in pairs(vals) do
table.insert(ret, k)
end
table.sort(ret)
return ret
end
local function getArgNums(args, prefix)
local nums = {}
for k, v in pairs(args) do
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')
if num then
table.insert(nums, tonumber(num))
end
end
table.sort(nums)
return nums
end
--------------------------------------------------------------------------------
-- Box class definition
--------------------------------------------------------------------------------
local MessageBox = {}
MessageBox.__index = MessageBox
function MessageBox.new(boxType, args, cfg)
args = args or {}
local obj = {}
obj.boxType = boxType
-- Set the title object and the namespace.
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()
-- Set the config for our box type.
obj.cfg = cfg[boxType]
if not obj.cfg then
local ns = obj.title.namespace
-- boxType is "mbox" or invalid input
if args.demospace and args.demospace ~= '' then
-- implement demospace parameter of mbox
local demospace = string.lower(args.demospace)
if DEMOSPACES[demospace] then
-- use template from DEMOSPACES
obj.cfg = cfg[DEMOSPACES[demospace]]
obj.boxType = DEMOSPACES[demospace]
elseif string.find( demospace, 'talk' ) then
-- demo as a talk page
obj.cfg = cfg.tmbox
obj.boxType = 'tmbox'
else
-- default to ombox
obj.cfg = cfg.ombox
obj.boxType = 'ombox'
end
elseif ns == 0 then
obj.cfg = cfg.ambox -- main namespace
obj.boxType = 'ambox'
elseif ns == 6 then
obj.cfg = cfg.imbox -- file namespace
obj.boxType = 'imbox'
elseif ns == 14 then
obj.cfg = cfg.cmbox -- category namespace
obj.boxType = 'cmbox'
else
local nsTable = mw.site.namespaces[ns]
if nsTable and nsTable.isTalk then
obj.cfg = cfg.tmbox -- any talk namespace
obj.boxType = 'tmbox'
else
obj.cfg = cfg.ombox -- other namespaces or invalid input
obj.boxType = 'ombox'
end
end
end
-- Set the arguments, and remove all blank arguments except for the ones
-- listed in cfg.allowBlankParams.
do
local newArgs = {}
for k, v in pairs(args) do
if v ~= '' then
newArgs[k] = v
end
end
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do
newArgs[param] = args[param]
end
obj.args = newArgs
end
-- Define internal data structure.
obj.categories = {}
obj.classes = {}
-- For lazy loading of [[Module:Category handler]].
obj.hasCategories = false
return setmetatable(obj, MessageBox)
end
function MessageBox:addCat(ns, cat, sort)
if not cat then
return nil
end
if sort then
cat = string.format('[[Category:%s|%s]]', cat, sort)
else
cat = string.format('[[Category:%s]]', cat)
end
self.hasCategories = true
self.categories[ns] = self.categories[ns] or {}
table.insert(self.categories[ns], cat)
end
function MessageBox:addClass(class)
if not class then
return nil
end
self.classes[class] = 1
end
function MessageBox:removeClass(class)
if not class then
return nil
end
self.classes[class] = nil
end
function MessageBox:setParameters()
local args = self.args
local cfg = self.cfg
-- Get type data.
self.type = args.type
local typeData = cfg.types[self.type]
self.invalidTypeError = cfg.showInvalidTypeError
and self.type
and not typeData
typeData = typeData or cfg.types[cfg.default]
self.typeClass = typeData.class
self.typeImage = typeData.image
-- Find if the box has been wrongly substituted.
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'
-- Find whether we are using a small message box.
self.isSmall = cfg.allowSmall and (
cfg.smallParam and args.small == cfg.smallParam
or not cfg.smallParam and yesno(args.small)
)
-- Add attributes, classes and styles.
self.id = args.id
self.name = args.name
for _, class in ipairs(cfg.classes or {}) do
self:addClass(class)
end
if self.name then
self:addClass('box-' .. string.gsub(self.name,' ','_'))
end
local plainlinks = yesno(args.plainlinks)
if plainlinks == true then
self:addClass('plainlinks')
elseif plainlinks == false then
self:removeClass('plainlinks')
end
if self.isSmall then
self:addClass(cfg.smallClass or 'mbox-small')
end
self:addClass(self.typeClass)
self:addClass(args.class)
self.style = args.style
self.attrs = args.attrs
-- Set text style.
self.textstyle = args.textstyle
-- Find if we are on the template page or not. This functionality is only
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory
-- and cfg.templateCategoryRequireName are set.
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields
if self.useCollapsibleTextFields
or cfg.templateCategory
and cfg.templateCategoryRequireName
then
if self.name then
local templateName = mw.ustring.match(
self.name,
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'
) or self.name
templateName = 'Template:' .. templateName
self.templateTitle = getTitleObject(templateName)
end
self.isTemplatePage = self.templateTitle
and mw.title.equals(self.title, self.templateTitle)
end
-- Process data for collapsible text fields. At the moment these are only
-- used in {{ambox}}.
if self.useCollapsibleTextFields then
-- Get the self.issue value.
if self.isSmall and args.smalltext then
self.issue = args.smalltext
else
local sect
if args.sect == '' then
sect = 'This ' .. (cfg.sectionDefault or 'page')
elseif type(args.sect) == 'string' then
sect = 'This ' .. args.sect
end
local issue = args.issue
issue = type(issue) == 'string' and issue ~= '' and issue or nil
local text = args.text
text = type(text) == 'string' and text or nil
local issues = {}
table.insert(issues, sect)
table.insert(issues, issue)
table.insert(issues, text)
self.issue = table.concat(issues, ' ')
end
-- Get the self.talk value.
local talk = args.talk
-- Show talk links on the template page or template subpages if the talk
-- parameter is blank.
if talk == ''
and self.templateTitle
and (
mw.title.equals(self.templateTitle, self.title)
or self.title:isSubpageOf(self.templateTitle)
)
then
talk = '#'
elseif talk == '' then
talk = nil
end
if talk then
-- If the talk value is a talk page, make a link to that page. Else
-- assume that it's a section heading, and make a link to the talk
-- page of the current page with that section heading.
local talkTitle = getTitleObject(talk)
local talkArgIsTalkPage = true
if not talkTitle or not talkTitle.isTalkPage then
talkArgIsTalkPage = false
talkTitle = getTitleObject(
self.title.text,
mw.site.namespaces[self.title.namespace].talk.id
)
end
if talkTitle and talkTitle.exists then
local talkText = 'Relevant discussion may be found on'
if talkArgIsTalkPage then
talkText = string.format(
'%s [[%s|%s]].',
talkText,
talk,
talkTitle.prefixedText
)
else
talkText = string.format(
'%s the [[%s#%s|talk page]].',
talkText,
talkTitle.prefixedText,
talk
)
end
self.talk = talkText
end
end
-- Get other values.
self.fix = args.fix ~= '' and args.fix or nil
local date
if args.date and args.date ~= '' then
date = args.date
elseif args.date == '' and self.isTemplatePage then
date = lang:formatDate('F Y')
end
if date then
self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date)
end
self.info = args.info
if yesno(args.removalnotice) then
self.removalNotice = cfg.removalNotice
end
end
-- Set the non-collapsible text field. At the moment this is used by all box
-- types other than ambox, and also by ambox when small=yes.
if self.isSmall then
self.text = args.smalltext or args.text
else
self.text = args.text
end
-- Set the below row.
self.below = cfg.below and args.below
-- General image settings.
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv
self.imageEmptyCell = cfg.imageEmptyCell
if cfg.imageEmptyCellStyle then
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'
end
-- Left image settings.
local imageLeft = self.isSmall and args.smallimage or args.image
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'
or not cfg.imageCheckBlank and imageLeft ~= 'none'
then
self.imageLeft = imageLeft
if not imageLeft then
local imageSize = self.isSmall
and (cfg.imageSmallSize or '30x30px')
or '40x40px'
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage
or 'Information icon4.svg', imageSize)
end
end
-- Right image settings.
local imageRight = self.isSmall and args.smallimageright or args.imageright
if not (cfg.imageRightNone and imageRight == 'none') then
self.imageRight = imageRight
end
end
function MessageBox:setMainspaceCategories()
local args = self.args
local cfg = self.cfg
if not cfg.allowMainspaceCategories then
return nil
end
local nums = {}
for _, prefix in ipairs{'cat', 'category', 'all'} do
args[prefix .. '1'] = args[prefix]
nums = union(nums, getArgNums(args, prefix))
end
-- The following is roughly equivalent to the old {{Ambox/category}}.
local date = args.date
date = type(date) == 'string' and date
local preposition = 'from'
for _, num in ipairs(nums) do
local mainCat = args['cat' .. tostring(num)]
or args['category' .. tostring(num)]
local allCat = args['all' .. tostring(num)]
mainCat = type(mainCat) == 'string' and mainCat
allCat = type(allCat) == 'string' and allCat
if mainCat and date and date ~= '' then
local catTitle = string.format('%s %s %s', mainCat, preposition, date)
self:addCat(0, catTitle)
catTitle = getTitleObject('Category:' .. catTitle)
if not catTitle or not catTitle.exists then
self:addCat(0, 'Articles with invalid date parameter in template')
end
elseif mainCat and (not date or date == '') then
self:addCat(0, mainCat)
end
if allCat then
self:addCat(0, allCat)
end
end
end
function MessageBox:setTemplateCategories()
local args = self.args
local cfg = self.cfg
-- Add template categories.
if cfg.templateCategory then
if cfg.templateCategoryRequireName then
if self.isTemplatePage then
self:addCat(10, cfg.templateCategory)
end
elseif not self.title.isSubpage then
self:addCat(10, cfg.templateCategory)
end
end
-- Add template error categories.
if cfg.templateErrorCategory then
local templateErrorCategory = cfg.templateErrorCategory
local templateCat, templateSort
if not self.name and not self.title.isSubpage then
templateCat = templateErrorCategory
elseif self.isTemplatePage then
local paramsToCheck = cfg.templateErrorParamsToCheck or {}
local count = 0
for i, param in ipairs(paramsToCheck) do
if not args[param] then
count = count + 1
end
end
if count > 0 then
templateCat = templateErrorCategory
templateSort = tostring(count)
end
if self.categoryNums and #self.categoryNums > 0 then
templateCat = templateErrorCategory
templateSort = 'C'
end
end
self:addCat(10, templateCat, templateSort)
end
end
function MessageBox:setAllNamespaceCategories()
-- Set categories for all namespaces.
if self.isSubstituted then
self:addCat('all', 'Pages with incorrectly substituted templates')
end
end
function MessageBox:setCategories()
if self.title.namespace == 0 then
self:setMainspaceCategories()
elseif self.title.namespace == 10 then
self:setTemplateCategories()
end
self:setAllNamespaceCategories()
end
function MessageBox:renderCategories()
if not self.hasCategories then
-- No categories added, no need to pass them to Category handler so,
-- if it was invoked, it would return the empty string.
-- So we shortcut and return the empty string.
return ""
end
-- Convert category tables to strings and pass them through
-- [[Module:Category handler]].
return require('Module:Category handler')._main{
main = table.concat(self.categories[0] or {}),
template = table.concat(self.categories[10] or {}),
all = table.concat(self.categories.all or {}),
nocat = self.args.nocat,
page = self.args.page
}
end
function MessageBox:export()
local root = mw.html.create()
-- Add the subst check error.
if self.isSubstituted and self.name then
root:tag('b')
:addClass('error')
:wikitext(string.format(
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')
))
end
-- Add TemplateStyles
root:wikitext(mw.getCurrentFrame():extensionTag{
name = 'templatestyles',
args = { src = TEMPLATE_STYLES:format(self.boxType) },
})
-- Create the box table.
local boxTable
-- Check for fmbox because not all interface messages have mw-parser-output
-- which is necessary for TemplateStyles. Add the wrapper class if it is and
-- then start the actual mbox, else start the mbox.
if self.boxType == 'fmbox' then
boxTable = root:tag('div')
:addClass('mw-parser-output')
:tag('table')
else
boxTable = root:tag('table')
end
boxTable:attr('id', self.id or nil)
for class, _ in pairs(self.classes or {}) do
boxTable:addClass(class or nil)
end
boxTable
:cssText(self.style or nil)
:attr('role', 'presentation')
if self.attrs then
boxTable:attr(self.attrs)
end
-- Add the left-hand image.
local row = boxTable:tag('tr')
if self.imageLeft then
local imageLeftCell = row:tag('td'):addClass('mbox-image')
if self.imageCellDiv then
-- If we are using a div, redefine imageLeftCell so that the image
-- is inside it. Divs use style="width: 52px;", which limits the
-- image width to 52px. If any images in a div are wider than that,
-- they may overlap with the text or cause other display problems.
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')
end
imageLeftCell:wikitext(self.imageLeft or nil)
elseif self.imageEmptyCell then
-- Some message boxes define an empty cell if no image is specified, and
-- some don't. The old template code in templates where empty cells are
-- specified gives the following hint: "No image. Cell with some width
-- or padding necessary for text cell to have 100% width."
row:tag('td')
:addClass('mbox-empty-cell')
:cssText(self.imageEmptyCellStyle or nil)
end
-- Add the text.
local textCell = row:tag('td'):addClass('mbox-text')
if self.useCollapsibleTextFields then
-- The message box uses advanced text parameters that allow things to be
-- collapsible. At the moment, only ambox uses this.
textCell:cssText(self.textstyle or nil)
local textCellDiv = textCell:tag('div')
textCellDiv
:addClass('mbox-text-span')
:wikitext(self.issue or nil)
if (self.talk or self.fix) and not self.isSmall then
textCellDiv:tag('span')
:addClass('hide-when-compact')
:wikitext(self.talk and (' ' .. self.talk) or nil)
:wikitext(self.fix and (' ' .. self.fix) or nil)
end
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)
if self.info and not self.isSmall then
textCellDiv
:tag('span')
:addClass('hide-when-compact')
:wikitext(self.info and (' ' .. self.info) or nil)
end
if self.removalNotice then
textCellDiv:tag('small')
:addClass('hide-when-compact')
:tag('i')
:wikitext(string.format(" (%s)", self.removalNotice))
end
else
-- Default text formatting - anything goes.
textCell
:cssText(self.textstyle or nil)
:wikitext(self.text or nil)
end
-- Add the right-hand image.
if self.imageRight then
local imageRightCell = row:tag('td'):addClass('mbox-imageright')
if self.imageCellDiv then
-- If we are using a div, redefine imageRightCell so that the image
-- is inside it.
imageRightCell = imageRightCell:tag('div'):css('width', '52px')
end
imageRightCell
:wikitext(self.imageRight or nil)
end
-- Add the below row.
if self.below then
boxTable:tag('tr')
:tag('td')
:attr('colspan', self.imageRight and '3' or '2')
:addClass('mbox-text')
:cssText(self.textstyle or nil)
:wikitext(self.below or nil)
end
-- Add error message for invalid type parameters.
if self.invalidTypeError then
root:tag('div')
:css('text-align', 'center')
:wikitext(string.format(
'This message box is using an invalid "type=%s" parameter and needs fixing.',
self.type or ''
))
end
-- Add categories.
root:wikitext(self:renderCategories() or nil)
return tostring(root)
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p, mt = {}, {}
function p._exportClasses()
-- For testing.
return {
MessageBox = MessageBox
}
end
function p.main(boxType, args, cfgTables)
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))
box:setParameters()
box:setCategories()
return box:export()
end
function mt.__index(t, k)
return function (frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))
end
end
return setmetatable(p, mt)
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ambox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 7217283]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ambox}} (article message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/cmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 7933597]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{cmbox}} (category message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/fmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 8010532]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/imbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 7217533]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{imbox}} (image message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/tmbox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 7841560]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
</syntaxhighlight>
</div></div>
=== [[mw:Module:Message box/ombox.css]] ===
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 8319125]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/**
* {{ombox}} (other pages message box) styles
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
</syntaxhighlight>
</div></div>
== [[mw:Module:Arguments]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Arguments&oldid=3392121 3392121]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- This module provides easy processing of arguments passed to Scribunto from
-- #invoke. It is intended for use by other Lua modules, and should not be
-- called from #invoke directly.
local libraryUtil = require('libraryUtil')
local checkType = libraryUtil.checkType
local arguments = {}
-- Generate four different tidyVal functions, so that we don't have to check the
-- options every time we call it.
local function tidyValDefault(key, val)
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val == '' then
return nil
else
return val
end
else
return val
end
end
local function tidyValTrimOnly(key, val)
if type(val) == 'string' then
return val:match('^%s*(.-)%s*$')
else
return val
end
end
local function tidyValRemoveBlanksOnly(key, val)
if type(val) == 'string' then
if val:find('%S') then
return val
else
return nil
end
else
return val
end
end
local function tidyValNoChange(key, val)
return val
end
local function matchesTitle(given, title)
local tp = type( given )
return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title
end
local translate_mt = { __index = function(t, k) return k end }
function arguments.getArgs(frame, options)
checkType('getArgs', 1, frame, 'table', true)
checkType('getArgs', 2, options, 'table', true)
frame = frame or {}
options = options or {}
--[[
-- Set up argument translation.
--]]
options.translate = options.translate or {}
if getmetatable(options.translate) == nil then
setmetatable(options.translate, translate_mt)
end
if options.backtranslate == nil then
options.backtranslate = {}
for k,v in pairs(options.translate) do
options.backtranslate[v] = k
end
end
if options.backtranslate and getmetatable(options.backtranslate) == nil then
setmetatable(options.backtranslate, {
__index = function(t, k)
if options.translate[k] ~= k then
return nil
else
return k
end
end
})
end
--[[
-- Get the argument tables. If we were passed a valid frame object, get the
-- frame arguments (fargs) and the parent frame arguments (pargs), depending
-- on the options set and on the parent frame's availability. If we weren't
-- passed a valid frame object, we are being called from another Lua module
-- or from the debug console, so assume that we were passed a table of args
-- directly, and assign it to a new variable (luaArgs).
--]]
local fargs, pargs, luaArgs
if type(frame.args) == 'table' and type(frame.getParent) == 'function' then
if options.wrappers then
--[[
-- The wrappers option makes Module:Arguments look up arguments in
-- either the frame argument table or the parent argument table, but
-- not both. This means that users can use either the #invoke syntax
-- or a wrapper template without the loss of performance associated
-- with looking arguments up in both the frame and the parent frame.
-- Module:Arguments will look up arguments in the parent frame
-- if it finds the parent frame's title in options.wrapper;
-- otherwise it will look up arguments in the frame object passed
-- to getArgs.
--]]
local parent = frame:getParent()
if not parent then
fargs = frame.args
else
local title = parent:getTitle():gsub('/sandbox$', '')
local found = false
if matchesTitle(options.wrappers, title) then
found = true
elseif type(options.wrappers) == 'table' then
for _,v in pairs(options.wrappers) do
if matchesTitle(v, title) then
found = true
break
end
end
end
-- We test for false specifically here so that nil (the default) acts like true.
if found or options.frameOnly == false then
pargs = parent.args
end
if not found or options.parentOnly == false then
fargs = frame.args
end
end
else
-- options.wrapper isn't set, so check the other options.
if not options.parentOnly then
fargs = frame.args
end
if not options.frameOnly then
local parent = frame:getParent()
pargs = parent and parent.args or nil
end
end
if options.parentFirst then
fargs, pargs = pargs, fargs
end
else
luaArgs = frame
end
-- Set the order of precedence of the argument tables. If the variables are
-- nil, nothing will be added to the table, which is how we avoid clashes
-- between the frame/parent args and the Lua args.
local argTables = {fargs}
argTables[#argTables + 1] = pargs
argTables[#argTables + 1] = luaArgs
--[[
-- Generate the tidyVal function. If it has been specified by the user, we
-- use that; if not, we choose one of four functions depending on the
-- options chosen. This is so that we don't have to call the options table
-- every time the function is called.
--]]
local tidyVal = options.valueFunc
if tidyVal then
if type(tidyVal) ~= 'function' then
error(
"bad value assigned to option 'valueFunc'"
.. '(function expected, got '
.. type(tidyVal)
.. ')',
2
)
end
elseif options.trim ~= false then
if options.removeBlanks ~= false then
tidyVal = tidyValDefault
else
tidyVal = tidyValTrimOnly
end
else
if options.removeBlanks ~= false then
tidyVal = tidyValRemoveBlanksOnly
else
tidyVal = tidyValNoChange
end
end
--[[
-- Set up the args, metaArgs and nilArgs tables. args will be the one
-- accessed from functions, and metaArgs will hold the actual arguments. Nil
-- arguments are memoized in nilArgs, and the metatable connects all of them
-- together.
--]]
local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}
setmetatable(args, metatable)
local function mergeArgs(tables)
--[[
-- Accepts multiple tables as input and merges their keys and values
-- into one table. If a value is already present it is not overwritten;
-- tables listed earlier have precedence. We are also memoizing nil
-- values, which can be overwritten if they are 's' (soft).
--]]
for _, t in ipairs(tables) do
for key, val in pairs(t) do
if metaArgs[key] == nil and nilArgs[key] ~= 'h' then
local tidiedVal = tidyVal(key, val)
if tidiedVal == nil then
nilArgs[key] = 's'
else
metaArgs[key] = tidiedVal
end
end
end
end
end
--[[
-- Define metatable behaviour. Arguments are memoized in the metaArgs table,
-- and are only fetched from the argument tables once. Fetching arguments
-- from the argument tables is the most resource-intensive step in this
-- module, so we try and avoid it where possible. For this reason, nil
-- arguments are also memoized, in the nilArgs table. Also, we keep a record
-- in the metatable of when pairs and ipairs have been called, so we do not
-- run pairs and ipairs on the argument tables more than once. We also do
-- not run ipairs on fargs and pargs if pairs has already been run, as all
-- the arguments will already have been copied over.
--]]
metatable.__index = function (t, key)
--[[
-- Fetches an argument when the args table is indexed. First we check
-- to see if the value is memoized, and if not we try and fetch it from
-- the argument tables. When we check memoization, we need to check
-- metaArgs before nilArgs, as both can be non-nil at the same time.
-- If the argument is not present in metaArgs, we also check whether
-- pairs has been run yet. If pairs has already been run, we return nil.
-- This is because all the arguments will have already been copied into
-- metaArgs by the mergeArgs function, meaning that any other arguments
-- must be nil.
--]]
if type(key) == 'string' then
key = options.translate[key]
end
local val = metaArgs[key]
if val ~= nil then
return val
elseif metatable.donePairs or nilArgs[key] then
return nil
end
for _, argTable in ipairs(argTables) do
local argTableVal = tidyVal(key, argTable[key])
if argTableVal ~= nil then
metaArgs[key] = argTableVal
return argTableVal
end
end
nilArgs[key] = 'h'
return nil
end
metatable.__newindex = function (t, key, val)
-- This function is called when a module tries to add a new value to the
-- args table, or tries to change an existing value.
if type(key) == 'string' then
key = options.translate[key]
end
if options.readOnly then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; the table is read-only',
2
)
elseif options.noOverwrite and args[key] ~= nil then
error(
'could not write to argument table key "'
.. tostring(key)
.. '"; overwriting existing arguments is not permitted',
2
)
elseif val == nil then
--[[
-- If the argument is to be overwritten with nil, we need to erase
-- the value in metaArgs, so that __index, __pairs and __ipairs do
-- not use a previous existing value, if present; and we also need
-- to memoize the nil in nilArgs, so that the value isn't looked
-- up in the argument tables if it is accessed again.
--]]
metaArgs[key] = nil
nilArgs[key] = 'h'
else
metaArgs[key] = val
end
end
local function translatenext(invariant)
local k, v = next(invariant.t, invariant.k)
invariant.k = k
if k == nil then
return nil
elseif type(k) ~= 'string' or not options.backtranslate then
return k, v
else
local backtranslate = options.backtranslate[k]
if backtranslate == nil then
-- Skip this one. This is a tail call, so this won't cause stack overflow
return translatenext(invariant)
else
return backtranslate, v
end
end
end
metatable.__pairs = function ()
-- Called when pairs is run on the args table.
if not metatable.donePairs then
mergeArgs(argTables)
metatable.donePairs = true
end
return translatenext, { t = metaArgs }
end
local function inext(t, i)
-- This uses our __index metamethod
local v = t[i + 1]
if v ~= nil then
return i + 1, v
end
end
metatable.__ipairs = function (t)
-- Called when ipairs is run on the args table.
return inext, t, 0
end
return args
end
return arguments
</syntaxhighlight>
</div></div>
== [[mw:Module:Category handler]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Category_handler&oldid=2410928 2410928]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} template in Lua, --
-- with a few improvements: all namespaces and all namespace aliases --
-- are supported, and namespace names are detected automatically for --
-- the local wiki. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Namespace detect]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Namespace_detect&oldid=4544589 4544589]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
--[[
--------------------------------------------------------------------------------
-- --
-- NAMESPACE DETECT --
-- --
-- This module implements the {{namespace detect}} template in Lua, with a --
-- few improvements: all namespaces and all namespace aliases are supported, --
-- and namespace names are detected automatically for the local wiki. The --
-- module can also use the corresponding subject namespace value if it is --
-- used on a talk page. Parameter names can be configured for different wikis --
-- by altering the values in the "cfg" table in --
-- Module:Namespace detect/config. --
-- --
--------------------------------------------------------------------------------
--]]
local data = mw.loadData('Module:Namespace detect/data')
local argKeys = data.argKeys
local cfg = data.cfg
local mappings = data.mappings
local yesno = require('Module:Yesno')
local mArguments -- Lazily initialise Module:Arguments
local mTableTools -- Lazily initilalise Module:TableTools
local ustringLower = mw.ustring.lower
local p = {}
local function fetchValue(t1, t2)
-- Fetches a value from the table t1 for the first key in array t2 where
-- a non-nil value of t1 exists.
for i, key in ipairs(t2) do
local value = t1[key]
if value ~= nil then
return value
end
end
return nil
end
local function equalsArrayValue(t, value)
-- Returns true if value equals a value in the array t. Otherwise
-- returns false.
for i, arrayValue in ipairs(t) do
if value == arrayValue then
return true
end
end
return false
end
function p.getPageObject(page)
-- Get the page object, passing the function through pcall in case of
-- errors, e.g. being over the expensive function count limit.
if page then
local success, pageObject = pcall(mw.title.new, page)
if success then
return pageObject
else
return nil
end
else
return mw.title.getCurrentTitle()
end
end
-- Provided for backward compatibility with other modules
function p.getParamMappings()
return mappings
end
local function getNamespace(args)
-- This function gets the namespace name from the page object.
local page = fetchValue(args, argKeys.demopage)
if page == '' then
page = nil
end
local demospace = fetchValue(args, argKeys.demospace)
if demospace == '' then
demospace = nil
end
local subjectns = fetchValue(args, argKeys.subjectns)
local ret
if demospace then
-- Handle "demospace = main" properly.
if equalsArrayValue(argKeys.main, ustringLower(demospace)) then
ret = mw.site.namespaces[0].name
else
ret = demospace
end
else
local pageObject = p.getPageObject(page)
if pageObject then
if pageObject.isTalkPage then
-- Get the subject namespace if the option is set,
-- otherwise use "talk".
if yesno(subjectns) then
ret = mw.site.namespaces[pageObject.namespace].subject.name
else
ret = 'talk'
end
else
ret = pageObject.nsText
end
else
return nil -- return nil if the page object doesn't exist.
end
end
ret = ret:gsub('_', ' ')
return ustringLower(ret)
end
function p._main(args)
-- Check the parameters stored in the mappings table for any matches.
local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys
local params = mappings[namespace] or {}
local ret = fetchValue(args, params)
--[[
-- If there were no matches, return parameters for other namespaces.
-- This happens if there was no text specified for the namespace that
-- was detected or if the demospace parameter is not a valid
-- namespace. Note that the parameter for the detected namespace must be
-- completely absent for this to happen, not merely blank.
--]]
if ret == nil then
ret = fetchValue(args, argKeys.other)
end
return ret
end
function p.main(frame)
mArguments = require('Module:Arguments')
local args = mArguments.getArgs(frame, {removeBlanks = false})
local ret = p._main(args)
return ret or ''
end
function p.table(frame)
--[[
-- Create a wikitable of all subject namespace parameters, for
-- documentation purposes. The talk parameter is optional, in case it
-- needs to be excluded in the documentation.
--]]
-- Load modules and initialise variables.
mTableTools = require('Module:TableTools')
local namespaces = mw.site.namespaces
local cfg = data.cfg
local useTalk = type(frame) == 'table'
and type(frame.args) == 'table'
and yesno(frame.args.talk) -- Whether to use the talk parameter.
-- Get the header names.
local function checkValue(value, default)
if type(value) == 'string' then
return value
else
return default
end
end
local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace')
local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases')
-- Put the namespaces in order.
local mappingsOrdered = {}
for nsname, params in pairs(mappings) do
if useTalk or nsname ~= 'talk' then
local nsid = namespaces[nsname].id
-- Add 1, as the array must start with 1; nsid 0 would be lost otherwise.
nsid = nsid + 1
mappingsOrdered[nsid] = params
end
end
mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered)
-- Build the table.
local ret = '{| class="wikitable"'
.. '\n|-'
.. '\n! ' .. nsHeader
.. '\n! ' .. aliasesHeader
for i, params in ipairs(mappingsOrdered) do
for j, param in ipairs(params) do
if j == 1 then
ret = ret .. '\n|-'
.. '\n| <code>' .. param .. '</code>'
.. '\n| '
elseif j == 2 then
ret = ret .. '<code>' .. param .. '</code>'
else
ret = ret .. ', <code>' .. param .. '</code>'
end
end
end
ret = ret .. '\n|-'
.. '\n|}'
return ret
end
return p
</syntaxhighlight>
</div></div>
== [[mw:Module:Yesno]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=Module:Yesno&oldid=3688812 3688812]
<div class="mw-collapsible-content">
<syntaxhighlight lang="lua">
-- Function allowing for consistent treatment of boolean-like wikitext input.
-- It works similarly to the template {{yesno}}.
return function (val, default)
-- If your wiki uses non-ascii characters for any of "yes", "no", etc., you
-- should replace "val:lower()" with "mw.ustring.lower(val)" in the
-- following line.
val = type(val) == 'string' and val:lower() or val
if val == nil then
return nil
elseif val == true
or val == 'yes'
or val == 'y'
or val == 'true'
or val == 't'
or val == 'on'
or tonumber(val) == 1
then
return true
elseif val == false
or val == 'no'
or val == 'n'
or val == 'false'
or val == 'f'
or val == 'off'
or tonumber(val) == 0
then
return false
else
return default
end
end
</syntaxhighlight>
</div></div>
== [[mw:MediaWiki:Gadget-enwp-boxes]] ==
<div class="mw-collapsible mw-collapsed">
: hentet versjon [https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&oldid=8118810 8118810]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
/** @source http://en.wikipedia.org/wiki/MediaWiki:Common.css | 2020-02-03 */
/** [[Module:Message box]] */
/*
* WARNING
* Some wikis use the styles located here in their local CSS with an import
* directive. Do not remove classes from this page until those wikis have
* transitioned to TemplateStyles. MediaWiki wiki uses TemplateStyles and does
* not load this gadget; see Module:Message box for more details.
*/
/** NOTE: These do not include .messagebox styles, which are long-deprecated. */
/* For old WikiProject banners inside banner shells. */
.mbox-inside .standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
width: 100%;
margin: 2px 0;
padding: 2px;
}
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
/* @noflip */
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
td.mbox-empty-cell { /* An empty narrow cell */
border: none;
padding: 0;
width: 1px;
}
/* Article message box styles */
table.ambox {
margin: 0 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #a2a9b1;
/* @noflip */
border-left: 10px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
/* @noflip */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
/* @noflip */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
/* @noflip */
border-left: 10px solid #36c; /* Blue */
}
table.ambox-speedy {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ambox-delete {
/* @noflip */
border-left: 10px solid #b32424; /* Red */
}
table.ambox-content {
/* @noflip */
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
/* @noflip */
border-left: 10px solid #fc3; /* Yellow */
}
table.ambox-move {
/* @noflip */
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
/* @noflip */
border-left: 10px solid #a2a9b1; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #36c; /* Default "notice" blue */
background-color: #fbfbfb;
box-sizing: border-box;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
display: block; /* Fix for webkit to force 100% width. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #36c; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.imbox-delete {
border: 3px solid #b32424; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #fc3; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #a2a9b1; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background-color: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1;
background-color: #dfe8ff; /* Default "notice" blue */
box-sizing: border-box;
}
table.cmbox-notice {
background-color: #d8e8ff; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b32424; /* Red */
background-color: #ffdbdb; /* Pink */
}
table.cmbox-delete {
background-color: #ffdbdb; /* Pink */
}
table.cmbox-content {
background-color: #ffe7ce; /* Orange */
}
table.cmbox-style {
background-color: #fff9db; /* Yellow */
}
table.cmbox-move {
background-color: #e4d8ff; /* Purple */
}
table.cmbox-protection {
background-color: #efefe1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #a2a9b1; /* Default "notice" gray */
background-color: #f8f9fa;
box-sizing: border-box;
}
table.ombox-notice {
border: 1px solid #a2a9b1; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.ombox-delete {
border: 2px solid #b32424; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #fc3; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #a2a9b1; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
min-width: 80%;
box-sizing: border-box;
}
.tmbox.mbox-small {
min-width: 0; /* reset the min-width of tmbox above */
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" class ensures that */
margin: 2px 0; /* this declaration overrides other styles (including mbox-small above) */
width: 100%; /* For Safari and Opera */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: #f8f9fa; /* Default "system" gray */
box-sizing: border-box;
}
table.fmbox-system {
background-color: #f8f9fa;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "html body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
html body.mediawiki .mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
html body.mediawiki .mbox-small-left { /* For the "small=left" option. */
/* @noflip */
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Style for compact ambox */
/* Hide the images */
.compact-ambox table .mbox-image,
.compact-ambox table .mbox-imageright,
.compact-ambox table .mbox-empty-cell {
display: none;
}
/* Remove borders, backgrounds, padding, etc. */
.compact-ambox table.ambox {
border: none;
border-collapse: collapse;
background-color: transparent;
margin: 0 0 0 1.6em !important;
padding: 0 !important;
width: auto;
display: block;
}
body.mediawiki .compact-ambox table.mbox-small-left {
font-size: 100%;
width: auto;
margin: 0;
}
/* Style the text cell as a list item and remove its padding */
.compact-ambox table .mbox-text {
padding: 0 !important;
margin: 0 !important;
}
.compact-ambox table .mbox-text-span {
display: list-item;
line-height: 1.5em;
list-style-type: square;
list-style-image: url(/w/skins/MonoBook/resources/images/bullet.svg);
}
.skin-vector .compact-ambox table .mbox-text-span {
list-style-type: disc;
list-style-image: url(/w/skins/Vector/images/bullet-icon.svg);
}
/* Allow for hiding text in compact form */
.compact-ambox .hide-when-compact {
display: none;
}
</syntaxhighlight>
</div></div>
== [[MediaWiki:Common.css|Common.css]] ==
<div class="mw-collapsible mw-collapsed">
: Hentet versjon [https://no.wikibooks.org/w/index.php?title=MediaWiki:Common.css&oldid=45327 45327]
<div class="mw-collapsible-content">
<syntaxhighlight lang="css">
@import "https://www.mediawiki.org/w/index.php?title=MediaWiki:Gadget-enwp-boxes.css&action=raw&ctype=text/css";
/* CSS plassert i denne fila vil gjelde for alle utseender.
Default style for the PrettyTextBox class of templates
Default style for Template:Warning, Template:Info, and the like
*/
.InformationBox {
width: 80%;
border: solid #999999 1px;
background: #F8F8F8;
margin: 0.5em auto;
clear: both;
color: #000000;
padding: 3px;
}
.PrettyTextBox, .messagebox {
background-color: #F9F9F9;
color: #000000;
border: 1px solid #AAAAAA;
padding: .2em;
}
.messagebox {
width: 80%;
margin: 0 auto 1em auto;
text-align: justify;
}
.messagebox.merge {
border: 1px solid #c0b8cc;
background-color: #f0e5ff;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/*
===Skjul/vis===
For vis/skjul-knapper.
*/
.skjulKnapp {
float:right;
width:4em;
text-align:right;
}
.NavFrame .skjulKnapp {
position:absolute;
right:6px;
z-index:2;
}
.skjulBryter {
position:absolute;
right:0;
z-index:4;
height:15px;
font-size:100px;
overflow:hidden;
}
* html .skjulKnapp { font-size:smaller; }
/*
==Vedlikeholdsmaler==
*/
div.vedlikehold
{
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-bottom: 3px;
clear:both;
}
div.sletting { background-color: #fdd; }
div.viktig { background-color: #fec; }
div.utbedring { background-color: #ffd; }
div.tilpassning { background-color: #fdf; }
div.advarsel { background-color: #ddf; }
div.forbedring { background-color: #dfd; }
div.vedlikehold img { margin: 0 5px 0 -25px; }
/*
==Stubbmaler==
*/
div.stubb
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
padding-left: 30px;
text-align: left;
font-size: 90%;
margin-top: 1em;
}
div.stubb + div.stubb
{
border-top: none;
margin-top:-5px;
}
div.stubb img { margin: 0 5px 0 -25px; }
/*
==Portalmaler==
*/
div.portal
{
clear: both;
background-color: #f9f9f9;
border: 1px solid #aaa;
padding: 5px;
/*padding-left: 30px;*/
text-align: left;
/*font-size: 90%;*/
margin-top: 1em;
}
div.portal + div.portal
{
border-top: none;
margin-top:-5px;
}
/*Do not print navigation bar elements. They should not appear on paper
*/
@media print
{
.NavFrame { display: none; }
.BoxenVerschmelzen { display: none; }
}
/*
== Kunadmins ==
Skjul kunadmins-id-ene for andre enn administratorer som har oppgitt annet
<pre>*/
#kunadmins { display:none; }
#kunadminsinline { display:none; }
/*
== Beskjedbokser ==
Følgende tekst er stil for beskjedbokser som står på diskusjonssider.
*/
.beskjedboks
{
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: justify;
}
.beskjedboks.diskusjon
{
border: 1px solid #c0c090;
background-color: #f8eaba;
margin: 0 auto 3px auto;
}
/*
== Farger på ±-tallene i Siste endringer ==
*/
.mw-plusminus-pos {
color:darkblue;
}
.mw-plusminus-neg {
color:darkred;
}
body.page-Hovedside h1.firstHeading {
display: none;
}
/*
== Spesialtegn ==
Skjul spesielle tegn som nesten aldri brukes for brukere som ikke oppgir annet.
For å vise tegnene, skriv #spesialtegn { display: none; } i [[Spesial:Mypage/monobook.css]]
*/
#spesialtegn { display: none; }
/* Standard utseende for navigasjonsboksene navbox, navbox_generic
Oppdatert fra en-wiki 2010-03-28
http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.css&oldid=350013464
*/
/* Default skin for navigation boxes */
table.navbox { /* Navbox container style */
border: 1px solid #aaa;
width: 100%;
margin: auto;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
}
table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */
margin-top: -1px; /* (doesn't work for IE6, but that's okay) */
}
.navbox-title,
.navbox-abovebelow,
table.navbox th {
text-align: center; /* Title and above/below styles */
padding-left: 1em;
padding-right: 1em;
}
.navbox-group { /* Group style */
white-space: nowrap;
text-align: right;
font-weight: bold;
padding-left: 1em;
padding-right: 1em;
}
.navbox, .navbox-subgroup {
background: #fdfdfd; /* Background color */
}
.navbox-list {
border-color: #fdfdfd; /* Must match background color */
}
.navbox-title,
table.navbox th {
background: #d8d8d8; /* Level 1 color */
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
background: #e0e0e0; /* Level 2 color */
}
.navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow {
background: #e8e8e8; /* Level 3 color */
}
.navbox-even {
background: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background: transparent; /* Odd row striping */
}
.collapseButton { /* 'show'/'hide' buttons created dynamically */
float: right; /* by the CollapsibleTables javascript in */
font-weight: normal; /* [[MediaWiki:Common.js]]are styled here */
text-align: right; /* so they can be customised. */
width: 4em;
}
.navbox .collapseButton { /* In navboxes, the show/hide button balances */
width: 6em; /* the vde links from [[Template:Tnavbar]], */
} /* so they need to be the same width. */
/* Følgende skjuler v·d·e-lenkene som standard; de kan vises igjen ved å slå på tilleggsfunksjonen «Vis lenker i navigasjonsbokser» i [[Spesial:Innstillinger]] */
.navbar {
visibility:hidden;
background:none;
padding:0;
font-weight:normal;
font-size:xx-small;
}
@media print {
.navbox {
display: none;
}
}
/*
* Layout for navboxes
*/
/*div.navbox - this one hits other navboxes too */
div.statbox,
div.dynbox {
border: 1px solid #aaa;
background-color: #f9f9f9;
margin-top: 1em;
margin-bottom: 1em;
padding: 5px;
clear: both;
}
div.navbox dl {
margin: 0;
}
div.navbox dl + dl dt {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAABCAMAAAA7MLYKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtQTFRF29vb2tra4ODg6urq5OTk4uLi6+vr7e3t7Ozs8PDw5+fn4+Pj4eHh3d3d39/f6Ojo5eXl6enp8fHx8/Pz8vLy7+/v3Nzc2dnZ2NjYnErj7QAAAD1JREFUeNq0wQUBACAMALDj7hf6JyUFGxzEnYhC9GaNPG1xVffGDErk/iCigLl1XV2xM49lfAxEaSM+AQYA9HMKuv4liFQAAAAASUVORK5CYII=);
background-position: center top;
background-repeat: no-repeat;
padding-top: 2px;
}
div.navbox dt {
text-align: center;
margin: 0;
}
div.navbox.collapsible dd {
display:none;
}
div.navbox dd {
margin: 0;
}
div.navbox dt {
font-weight: normal;
color: #4d4d4d;
font-size:95%;
}
/* the .title only exists after script is run */
div.navbox.collapsible dt .title {
cursor: pointer;
padding-left: 1.5em;
line-height:inherit;
}
div.navbox dt.collapsed .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF3d3deXl5////nZ2dQA6SoAAAAAN0Uk5T//8A18oNQQAAADNJREFUeNpiYEIDDMQKMKALMDOgCTDCRWACcBG4AEwEIcDITEAFuhnotmC4g4EEzwEEGAADqgHmQSPJKgAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
color: #0645AD;
}
div.navbox dt.expanded .title {
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFeXl53d3dmpqasbGx////GU0iEgAAAAV0Uk5T/////wD7tg5TAAAAK0lEQVQI12NwgQIG0hhCDAwMTCJAhqMCA4MiWEoIJABiOCooQhULi5BqMgB2bh4svs8t+QAAAABJRU5ErkJggg==);
background-repeat: no-repeat;
background-position: 0% 60%;
}
div.navbox dd ul.lead-in:before,
div.navbox dd ol.lead-in:before {
content: ': ';
}
div.navbox ul.lead-in,
div.navbox ol.lead-in {
margin: 0;
text-align: left;
display: inline;
}
div.navbox.no-script ul:before,
div.navbox.no-script ol:before {
content: ': ';
}
div.navbox.no-script ul,
div.navbox.no-script ol {
margin: 0;
text-align: left;
display: inline;
}
div.navbox ul,
div.navbox ol {
margin: 0;
text-align: center;
display: block;
}
div.navbox .lists>ul,
div.navbox .lists>ol {
font-size: 80%;
}
div.navbox li {
margin-left: 0;
margin-right: 0;
display: inline;
/* At some point the following will work, then scripting can be removed */
/*
bikeshedding: consume-before;
bikeshedding: consume-after;
white-space-collapse: consume-before;
white-space-collapse: consume-after;
text-space-collapse: consume-before;
text-space-collapse: consume-after;
*/
}
div.navbox ol {
counter-reset:navbox-ol-items;
}
div.navbox ol li {
counter-increment:navbox-ol-items;
}
div.navbox ol li:before {
content: '[' counter(navbox-ol-items) '] ';
}
div.navbox ol li + li:before {
content: '| [' counter(navbox-ol-items) '] ';
}
div.navbox ul li + li:before {
content: '| ';
}
/* T156351: Support for Parsoid's Cite implementation */
@counter-style custom-backlink {
system: alphabetic;
symbols: 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' 'æ' 'ø' 'å';
}
span[ rel="mw:referencedBy" ] {
counter-reset: mw-ref-linkback 0;
}
span[ rel="mw:referencedBy" ] > a::before {
content: counter( mw-ref-linkback, custom-backlink );
}
</syntaxhighlight>
</div></div>
87kqpfkz2n9lnp5wh6dufzibx7uaqxw
Modul:Message box/ambox.css
828
8131
46674
2026-09-18T10:10:41Z
Wkee4ager
4794
Ny side: /** * {{ambox}} (article message box) styles * https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283 **/ table.ambox { /* 10% = Will not overlap with other elements */ margin: 0 10%; /* Prevent overflow in narrow screens (<=850px) in the Timeless skin. See [[Skin:Timeless#Less than 851 pixels]] and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */ width: unset; border: 1px solid var(…
46674
sanitized-css
text/css
/**
* {{ambox}} (article message box) styles
* https://www.mediawiki.org/w/index.php?title=Module:Message_box/ambox.css&oldid=7217283
**/
table.ambox {
/* 10% = Will not overlap with other elements */
margin: 0 10%;
/* Prevent overflow in narrow screens (<=850px) in the Timeless skin.
See [[Skin:Timeless#Less than 851 pixels]]
and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */
width: unset;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" blue */
border-left: 10px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* Single border between stacked boxes. */
table.ambox + table.ambox,
table.ambox + link + table.ambox,
table.ambox + style + table.ambox {
margin-top: -1px;
}
/* An empty narrow cell */
.ambox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ambox th.mbox-text,
.ambox td.mbox-text {
border: none;
/* 0.5em left/right */
padding: 0.25em 0.5em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ambox td.mbox-image {
/* 0.5em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.5em;
}
/* The right image cell */
.ambox td.mbox-imageright {
/* 0px left, 0.5em right */
/* @noflip */
padding: 2px 0.5em 2px 0;
}
table.ambox-notice {
/* Blue */
border-left-color: var(--border-color-progressive, #36c);
}
table.ambox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle, #fee7e6);
}
table.ambox-delete,
table.ambox-speedy {
/* Red */
border-left-color: var(--background-color-error--active, #b32424);
}
table.ambox-content {
/* Orange */
border-left-color: #f28500;
}
table.ambox-style {
/* Yellow */
border-left-color: #fc3;
}
table.ambox-move {
/* Purple */
border-left-color: #9932cc;
}
table.ambox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
}
/**
* {{ambox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ambox" classes. "html body.mediawiki .ambox"
* is so they override both "table.ambox + table.ambox"
* and "table.ambox + link + table.ambox" above.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ambox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
/* For the "small=left" option. */
html body.mediawiki .ambox.mbox-small-left {
margin: 4px 1em 4px 0;
box-sizing: border-box;
overflow: hidden;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
afw7632gqo00e8tlsdaw5tchv3034id
Modul:Message box/cmbox.css
828
8132
46675
2026-09-18T10:12:27Z
Wkee4ager
4794
Ny side: /** * {{cmbox}} (category message box) styles * https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597 **/ table.cmbox { margin: 3px 10%; border-collapse: collapse; border: 1px solid var(--border-color-base, #a2a9b1); /* Default "notice" light blue */ background-color: var(--background-color-progressive-subtle--hover, #d9e2ff); color: var(--color-base, #202122); box-sizing: border-box; } /* An empty narrow cell */ .cmbox td.mbox-empty-cell…
46675
sanitized-css
text/css
/**
* {{cmbox}} (category message box) styles
* https://www.mediawiki.org/w/index.php?title=Module:Message_box/cmbox.css&oldid=7933597
**/
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid var(--border-color-base, #a2a9b1);
/* Default "notice" light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
color: var(--color-base, #202122);
box-sizing: border-box;
}
/* An empty narrow cell */
.cmbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.cmbox th.mbox-text,
.cmbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.cmbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.cmbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.cmbox-notice {
/* Light blue */
background-color: var(--background-color-progressive-subtle--hover, #d9e2ff);
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
/* Red */
border: 4px solid #b32424;
}
table.cmbox-delete,
table.cmbox-speedy {
/* Pink */
background-color: var(--background-color-error-subtle--active, #ffc8bd);
}
table.cmbox-content {
/* Orange */
background-color: var(--background-color-error-subtle--hover, #ffdad3);
}
table.cmbox-style {
/* Yellow */
background-color: var(--background-color-warning-subtle, #fdf2d5);
}
table.cmbox-move {
/* Blue */
background-color: var(--background-color-progressive-subtle--active, #b6d4fb);
}
table.cmbox-protection {
/* Gold */
background-color: var(--background-color-content-removed, #ffe49c);
}
@media screen and (max-width: 720px) {
table.cmbox {
margin: 3px auto;
}
}
9g5atlkkkx0152rtjlr6x1pts9banls
Modul:Message box/fmbox.css
828
8133
46676
2026-09-18T10:14:36Z
Wkee4ager
4794
Ny side: /** * https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532 /** /* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */ th.mbox-text, td.mbox-text { /* The message body cell(s) */ padding: 0.25em 0.9em; /* 0.9em left/right */ } td.mbox-image { /* The left image cell */ padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */ } td.mbox-imageright { /* The right image cell */ padding: 2px 0.9em 2p…
46676
sanitized-css
text/css
/**
* https://www.mediawiki.org/w/index.php?title=Module:Message_box/fmbox.css&oldid=8010532
/**
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.9em; /* 0.9em left/right */
}
td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
}
td.mbox-imageright { /* The right image cell */
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #a2a9b1;
background-color: var( --background-color-interactive-subtle, #f8f9fa );
color: var( --color-base, #202122 );
box-sizing: border-box;
}
table.fmbox-system {
background-color: var( --background-color-interactive-subtle, #f8f9fa );
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background-color: var(--background-color-destructive-subtle--hover, #ffdad3); /* Pink */
}
table.fmbox-editnotice {
background-color: transparent;
}
pyyx4ks4ddiqo2k0sqqmw7hg5gxuyeu
Modul:Message box/imbox.css
828
8134
46677
2026-09-18T10:18:30Z
Wkee4ager
4794
Ny side: /** * https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533 **/ table.imbox { margin: 4px 10%; border-collapse: collapse; /* Default "notice" blue */ border: 3px solid var(--border-color-progressive, #36c); background-color: var(--background-color-neutral-subtle, #f8f9fa); box-sizing: border-box; } /* For imboxes inside imbox-text cells. */ .imbox .mbox-text .imbox { /* 0.9 - 0.5 = 0.4em left/right. */ margin: 0 -0.5em; /* Fix for…
46677
sanitized-css
text/css
/**
* https://www.mediawiki.org/w/index.php?title=Module:Message_box/imbox.css&oldid=7217533
**/
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" blue */
border: 3px solid var(--border-color-progressive, #36c);
background-color: var(--background-color-neutral-subtle, #f8f9fa);
box-sizing: border-box;
}
/* For imboxes inside imbox-text cells. */
.imbox .mbox-text .imbox {
/* 0.9 - 0.5 = 0.4em left/right. */
margin: 0 -0.5em;
/* Fix for webkit to force 100% width. */
display: block;
}
/* For imboxes inside other templates. */
.mbox-inside .imbox {
margin: 4px;
}
/* An empty narrow cell */
.imbox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.imbox th.mbox-text,
.imbox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.imbox td.mbox-image {
/* 0.9em left, 0px right */
/* @noflip */
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.imbox td.mbox-imageright {
/* 0px left, 0.9em right */
/* @noflip */
padding: 2px 0.9em 2px 0;
}
table.imbox-notice {
/* Blue */
border-color: #36c;
}
table.imbox-speedy {
/* Pink */
background-color: #fee7e6;
/* temp fix for dark mode */
color: #222;
}
table.imbox-delete,
table.imbox-speedy {
/* Red */
border-left-color: var(--border-color-destructive, #bf3c2c);
border-bottom-color: var(--border-color-destructive, #bf3c2c);
border-right-color: var(--border-color-destructive, #bf3c2c);
border-top-color: var(--border-color-destructive, #bf3c2c);
}
table.imbox-content {
/* Orange */
border-color: #f28500;
}
table.imbox-style {
/* Yellow */
border-color: #fc3;
}
table.imbox-move {
/* Purple */
border-color: #9932cc;
}
table.imbox-protection {
/* Gray-gold */
border-left-color: var(--border-color-base, #a2a9b1);
border-bottom-color: var(--border-color-base, #a2a9b1);
border-right-color: var(--border-color-base, #a2a9b1);
border-top-color: var(--border-color-base, #a2a9b1);
}
table.imbox-license {
/* Dark gray */
border-left-color: var(--border-color-notice, #72777d);
border-bottom-color: var(--border-color-notice, #72777d);
border-right-color: var(--border-color-notice, #72777d);
border-top-color: var(--border-color-notice, #72777d);
/* Light gray */
background-color: var(--background-color-neutral-subtle, #f8f9fa);
}
table.imbox-featured {
/* Brown-gold */
border-color: #cba135;
}
@media screen and (max-width: 720px) {
table.imbox {
margin: 4px auto;
}
}
keks7wcatq5jlrr23pvzwqy53ldkw5j
Modul:Message box/tmbox.css
828
8135
46678
2026-09-18T10:19:43Z
Wkee4ager
4794
Ny side: /** * https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560 **/ .tmbox { margin: 4px 0; border-collapse: collapse; border: 1px solid #c0c090; /* Default "notice" gray-brown */ background-color: #f8eaba; box-sizing: border-box; } /* For the "small=yes" option. */ .tmbox.mbox-small { font-size: 88%; line-height: 1.25em; } .tmbox-speedy { border: 2px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .tmbox-delete {…
46678
sanitized-css
text/css
/**
* https://www.mediawiki.org/w/index.php?title=Module:Message_box/tmbox.css&oldid=7841560
**/
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
o8zmf8a9qsne0v29an0gjyz9uydjqfn
Modul:Message box/ombox.css
828
8136
46680
2026-09-18T10:20:55Z
Wkee4ager
4794
Ny side: /** * {{ombox}} (other pages message box) styles * https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125 */ table.ombox { margin: 4px 10%; border-collapse: collapse; /* Default "notice" gray */ border: 1px solid #a2a9b1; background-color: #f8f9fa; color: #333; box-sizing: border-box; } /* An empty narrow cell */ .ombox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .ombox th.mbox-text, .omb…
46680
sanitized-css
text/css
/**
* {{ombox}} (other pages message box) styles
* https://www.mediawiki.org/w/index.php?title=Module:Message_box/ombox.css&oldid=8319125
*/
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
/* Default "notice" gray */
border: 1px solid #a2a9b1;
background-color: #f8f9fa;
color: #333;
box-sizing: border-box;
}
/* An empty narrow cell */
.ombox td.mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
/* The message body cell(s) */
.ombox th.mbox-text,
.ombox td.mbox-text {
border: none;
/* 0.9em left/right */
padding: 0.25em 0.9em;
/* Make all mboxes the same width regardless of text length */
width: 100%;
}
/* The left image cell */
.ombox td.mbox-image {
border: none;
text-align: center;
padding: 2px 0 2px 0.9em;
}
/* The right image cell */
.ombox td.mbox-imageright {
border: none;
text-align: center;
padding: 2px 0.9em 2px 0;
}
table.ombox-notice {
/* Gray */
border-color: #a2a9b1;
}
table.ombox-speedy {
/* Pink */
background-color: #fee7e6;
color: #333;
}
table.ombox-speedy,
table.ombox-delete {
/* Red */
border-color: #b32424;
border-width: 2px;
}
table.ombox-content {
/* Orange */
border-color: #f28500;
}
table.ombox-style {
/* Yellow */
border-color: #fc3;
}
table.ombox-move {
/* Purple */
border-color: #9932cc;
}
table.ombox-protection {
/* Gray-gold */
border-color: #a2a9b1;
border-width: 2px;
}
/**
* {{ombox|small=1}} styles
*
* These ".mbox-small" classes must be placed after all other
* ".ombox" classes. "html body.mediawiki .ombox"
* is so they apply only to other page message boxes.
*
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css
* @revision 2021-07-15
*/
/* For the "small=yes" option. */
html body.mediawiki .ombox.mbox-small {
clear: right;
float: right;
margin: 4px 0 4px 1em;
box-sizing: border-box;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
@media screen {
html.skin-theme-clientpref-night table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (prefers-color-scheme: dark) {
/* automatic mode */
html.skin-theme-clientpref-os table.ombox {
background-color: transparent;
color: inherit;
}
}
@media screen and (max-width: 720px) {
table.ombox {
margin: 4px auto;
}
}
am287dfs7pgce9u0eb7accge80lgbqb
Modul:TNT/config
828
8137
46700
2026-09-18T11:21:12Z
Wkee4ager
4794
Ny side: local p = {}; -- The tracking category name for global TemplateData pages located on Commons -- under "Data:Templatedata/" instead of "Data:TemplateData/", -- defaults to `"Templates using legacy global TemplateData table name"` -- when not set; set to `false` to disable all categorisation p.legacyTemplateDataCategoryName = nil; -- Whether to add the language subtag to the template name using {{#translation:}}, -- defaults to `false` p.translatableCategoryLink = true; return p;
46700
Scribunto
text/plain
local p = {};
-- The tracking category name for global TemplateData pages located on Commons
-- under "Data:Templatedata/" instead of "Data:TemplateData/",
-- defaults to `"Templates using legacy global TemplateData table name"`
-- when not set; set to `false` to disable all categorisation
p.legacyTemplateDataCategoryName = nil;
-- Whether to add the language subtag to the template name using {{#translation:}},
-- defaults to `false`
p.translatableCategoryLink = true;
return p;
feifiyrqk27bj288o6etsyyn8h6qanf