Wikipedia
nnwiki
https://nn.wikipedia.org/wiki/Hovudside
MediaWiki 1.46.0-wmf.22
first-letter
Filpeikar
Spesial
Diskusjon
Brukar
Brukardiskusjon
Wikipedia
Wikipedia-diskusjon
Fil
Fildiskusjon
MediaWiki
MediaWiki-diskusjon
Mal
Maldiskusjon
Hjelp
Hjelpdiskusjon
Kategori
Kategoridiskusjon
Tema
Temadiskusjon
TimedText
TimedText talk
Modul
Moduldiskusjon
Arrangement
Arrangementsdiskusjon
Mal:Spire
10
33
3649655
3593830
2026-04-05T11:40:12Z
Marcuspn
143881
3649655
wikitext
text/x-wiki
{{amboks
| name = Spire
| type = style
| image =[[fil:{{#if:{{{1|}}}|{{emneikon|{{{1|}}}}}|Wiki letter w.svg}}|{{#ifeq: {{{type|}}}|viktig|50px|20px}}|Spire]]
| issue = Denne {{#if: {{{1|}}}|[[:kategori:{{spirekategoriar|{{{1|}}}}}spirer|{{spireemne|{{{1|}}}}}artikkelen]]|artikkelen}} {{#if: {{{2|}}}| som har med [[:kategori:{{spirekategoriar|{{{2|}}}}}spirer|{{{2|}}}]]}} {{#if: {{{3|}}}| og [[:kategori:{{spirekategoriar|{{{3|}}}}}spirer|{{{3|}}}]]}} {{#if: {{{2|}}}|å gjere,}} er {{#ifeq: {{{type|}}} | frø | eit '''[[Wikipedia:Spire|frø]]''' | ei '''[[Wikipedia:Spire|spire]]'''}}. Du kan hjelpe Nynorsk Wikipedia gjennom å <span class=plainlinks>''[{{SERVER}}{{localurl:{{NAMESPACE}}:{{SIDENAMN}}|action=edit}} utvide han]''</span>. {{#if: {{{tull|}}}|Artikkelen treng også {{#switch: {{{tull|}}}
| språk = ein språkvask.[[kategori:språkvask]]
| taksoboks = ein rett taksoboks.[[kategori:manglar taksoboks]]
| wikitekst = ei tilpassing til wikiformatet.[[kategori:Opprydding]]
| wiki = ei tilpassing til wikiformatet.[[kategori:Opprydding]]
| wikifisering = ei tilpassing til wikiformatet.[[kategori:Opprydding]]
| {{{tull|}}} }} }}
}}<includeonly>[[kategori:Alle spirer]][[kategori:Spirer {{ÅRNO}}]]{{#ifeq: {{{type|}}} | frø | [[kategori:spirefrø]] }}{{#if: {{{1|}}}|[[kategori:{{spirekategoriar|{{{1|}}}}}spirer]]|[[kategori:spirer utan emnekategori]]}}{{#if: {{{2|}}}|[[kategori:{{spirekategoriar|{{{2|}}}}}spirer]] }}{{#if: {{{3|}}}|[[kategori:{{spirekategoriar|{{{3|}}}}}spirer]] }}</includeonly><noinclude>
==Bruk==
{{Sjå|Wikipedia:Mal/Spirer}}
Denne malen blir plassert nedst i ein artikkel som ikkje er omfattande nok, slik: <code><nowiki>{{spire}}</nowiki></code>.
*Du kan legga til opptil tre emne som artikkelen rører ved, til dømes slik: <code><nowiki>{{spire|data|språk|historie}}</nowiki></code>. Du kan sjå dei ulike kategoriane som er oppretta for spirer under [[:kategori:spirer]].
*Om det er noko anna gale med artikkelen, kan du legga det inn slik: <code>tull=språk</code> (om artikkelen treng ein språkvask) eller <code>tull=wiki</code> (om artikkelen treng å tilpassast wikipedia-formatet).
[[kategori:spiremalar|{{SIDENAMN}}]]
</noinclude>
c2rhwa58qqs8m34u6o23y74su8w8528
Kvadrat
0
9159
3649646
2800261
2026-04-05T11:13:50Z
Marcuspn
143881
Legg inn mal for sjå også
3649646
wikitext
text/x-wiki
{{Sjå også|Kvadrat kjøpesenter}}[[Fil:Mimasu.svg|mini|''Mi-masu'', fleire kvadrat inni kvarandre, blir brukt som [[slektsvåpen]] av ein japansk familie.]]
Eit '''kvadrat''' er ein [[rett vinkel|rettvinkla]] [[firkant]] der alle sidene er like lange.
For å finna [[flatevidd]]a til kvadratet kan ein ganske enkelt ganga lengda til sidene med kvarandre, s<sup>2</sup>. [[Omkrins]]en er fire gonger lengda til ei side.
Kvadratet er ei særform av [[rektangel]], [[rombe]] og [[parallellogram]].
Adjektivet '''kvadratisk''' vert nytta om noko som har form som eit kvadrat eller som er av andre grad. Dette kan vere ei [[andregradslikning|kvadratisk likning]] (eller eit [[polynom]]), som er ei andregradslikning. På same vis er ei kvadratisk [[kurve]] ei andregradskurve.
Som forstaving føre ei måleining for [[lengd]], vert resultatet ei måleining for [[areal]] lik eit kvadrat med sider lik lengdeeininga. I [[SI-systemet]] er måleininga for areal [[kvadratmeter]], m², og svarar til eit kvadrat med sider som er 1 meter lange. Ein kvadratcentimeter, cm², er lik 10<sup>–4</sup> m<sup>2</sup>, ein kvadratkilometer, km<sup>2</sup>, er lik 10<sup>6</sup> m<sup>2</sup>, medan ein [[kvadratfot]], ft<sup>2</sup>, er lik 9,2903 dm<sup>2</sup> (britisk) eller 9,843 dm<sup>2</sup> (gammal norsk fot).
==Kjelder==
*Holtebekk, Trygve. (2009, 14. februar). Kvadrat . I Store norske leksikon. Henta 12. november 2013 frå http://snl.no/kvadrat-.
{{Autoritetsdata}}
[[Kategori:Firkantar]]
[[Kategori:Måleiningar for areal]]
8pzpkics5j40c78bbtdlt6cunrcjuxb
3649651
3649646
2026-04-05T11:30:45Z
HerVal7752
105842
Mal:Om
3649651
wikitext
text/x-wiki
{{om||}}
[[Fil:Mimasu.svg|mini|''Mi-masu'', fleire kvadrat inni kvarandre, blir brukt som [[slektsvåpen]] av ein japansk familie.]]
Eit '''kvadrat''' er ein [[rett vinkel|rettvinkla]] [[firkant]] der alle sidene er like lange.
For å finna [[flatevidd]]a til kvadratet kan ein ganske enkelt ganga lengda til sidene med kvarandre, s<sup>2</sup>. [[Omkrins]]en er fire gonger lengda til ei side.
Kvadratet er ei særform av [[rektangel]], [[rombe]] og [[parallellogram]].
Adjektivet '''kvadratisk''' vert nytta om noko som har form som eit kvadrat eller som er av andre grad. Dette kan vere ei [[andregradslikning|kvadratisk likning]] (eller eit [[polynom]]), som er ei andregradslikning. På same vis er ei kvadratisk [[kurve]] ei andregradskurve.
Som forstaving føre ei måleining for [[lengd]], vert resultatet ei måleining for [[areal]] lik eit kvadrat med sider lik lengdeeininga. I [[SI-systemet]] er måleininga for areal [[kvadratmeter]], m², og svarar til eit kvadrat med sider som er 1 meter lange. Ein kvadratcentimeter, cm², er lik 10<sup>–4</sup> m<sup>2</sup>, ein kvadratkilometer, km<sup>2</sup>, er lik 10<sup>6</sup> m<sup>2</sup>, medan ein [[kvadratfot]], ft<sup>2</sup>, er lik 9,2903 dm<sup>2</sup> (britisk) eller 9,843 dm<sup>2</sup> (gammal norsk fot).
==Kjelder==
*Holtebekk, Trygve. (2009, 14. februar). Kvadrat . I Store norske leksikon. Henta 12. november 2013 frå http://snl.no/kvadrat-.
{{Autoritetsdata}}
[[Kategori:Firkantar]]
[[Kategori:Måleiningar for areal]]
py8dzog8l7iry8sp8g6hd7biczp9ib7
Mal:Fakta om Myanmar
10
15551
3649601
3631360
2026-04-04T16:10:00Z
HerVal7752
105842
Ny president og statsminister
3649601
wikitext
text/x-wiki
<div align=right>{{endre|Mal:Fakta om Myanmar}}</div>
{{Infoboks_land|
lokalt_namn = Pyidaungzu Myanma <br /> Naingngandaw|
norsk_namn = Burma/Myanmar|
adjektiv = burmesisk/myanmarsk|
bilete_riksvåpen = Variant of the State seal of Myanmar (2011-2025).svg|
bilete_flagg = flag of Myanmar.svg|
bilete_kart = Myanmar in its region.svg|
nasjonale_motto = Ukjent|
nasjonaldag = [[4. januar]]|
nasjonalsong = [[Gba majay Bma]]|
hovudstad = [[Nay Pyi Taw]]|
offisielle_språk = [[Burmesisk språk|Burmesisk]]|
styresett = [[Militærjunta]], [[diktatur]]|
leiar_titlar = President <br /> [[Statsminister]]|
leiar_namn = [[Min Aung Hlaing]] <br /> [[Nyo Saw]]|
sjølvstende_type = [[Sjølvstende]]|
sjølvstende_hendingar = Frå [[Storbritannia]] |
sjølvstende_datoar = [[4. januar]] [[1948]]|
flatevidd_andel_vatn = 3,06 %|
folketal_tettleik_rangering = 105|
valuta = [[Kyat]]|
tidssone = [[UTC]] +6,30|
internasjonal_telefonkode = 95|
nasjonale_toppdomene = .mm (tidlegare .bu)|
fotnotar =|
}}<noinclude>
[[Kategori:Geografiske infoboksar etter land|Myanmar]]
[[Kategori:Burmesiske malar]]
</noinclude>
0v46xmexfhyhzwexoz9jyxv24zlucm3
Mal:Objektivitet
10
31498
3649603
3518642
2026-04-04T16:11:51Z
HerVal7752
105842
Amboks
3649603
wikitext
text/x-wiki
{{amboks
| type = style
| bilde = [[Fil:Unbalanced scales.svg|40px]]
| tekst = '''[[Wikipedia:Objektivitet|Objektiviteten]]''' i denne artikkelen er omstridd. Endringar som manglar kjelder og/eller avviker frå ei objektiv framstilling, kan bli fjerna.
| dato = {{{dato|}}}
| kategori = Objektivitet
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[Kategori:artiklar merka for manglande objektivitet]]</includeonly><includeonly>[[kategori:artiklar som treng tilsyn {{ÅRNO}}]]</includeonly><noinclude>
[[Kategori:Vedlikehaldsmalar|{{SIDENAMN}}]]</noinclude>
04n39byi3vw9jp5gl85vj5b5kbr1lxh
3649607
3649603
2026-04-04T16:22:10Z
HerVal7752
105842
3649607
wikitext
text/x-wiki
{{amboks
| type = style
| bilde = [[Fil:Unbalanced scales.svg|40px]]
| tekst = '''[[Wikipedia:Objektivitet|Objektiviteten]]''' i denne artikkelen er omstridd. Endringar som manglar kjelder og/eller avviker frå ei objektiv framstilling, kan bli fjerna.
| dato = {{{dato|}}}
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[Kategori:artiklar merka for manglande objektivitet]]</includeonly><includeonly>[[kategori:artiklar som treng tilsyn {{ÅRNO}}]]</includeonly><noinclude>
[[Kategori:Vedlikehaldsmalar|{{SIDENAMN}}]]</noinclude>
jj6lj6p7pef1rjtb33a3mxwstqf3vq6
Mal:Flett
10
37537
3649604
3567928
2026-04-04T16:16:46Z
HerVal7752
105842
Amboks
3649604
wikitext
text/x-wiki
{{amboks
| type = flett
| bilde = [[Fil:Merge-arrows.svg|40px]]
| tekst = '''Flett:''' Det er føreslått at denne sida blir fletta med ''{{#switch:{{NAMESPACE}}|=[[{{{1}}}]]|[[:{{NAMESPACE}}:{{{1}}}|{{{1}}}]]}}''{{#if:{{{2|}}}|. Oppgjeven årsak: ''{{{2}}}''}}. (Sjå eventuelt {{#ifexist:{{TALKPAGENAME}}|([[{{TALKPAGENAME}}|diskusjon]])|{{#ifexist:Diskusjon:{{{1}}}|([[Diskusjon:{{{1}}}|Diskusjon]])|[[{{TALKPAGENAME}}|diskusjon]]}} }})
| dato = {{{dato|}}}
| kategori = Flett
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[Kategori:Sider som bør flettast|{{SIDENAMN}}]]</includeonly>
<includeonly>[[kategori:artiklar som treng tilsyn {{ÅRNO}}]]</includeonly><noinclude>
[[Kategori:Vedlikehaldsmalar|{{SIDENAMN}}]]
</noinclude>
pilygg4ln1wvj7t6vq31d0hyqhdta6z
3649606
3649604
2026-04-04T16:21:09Z
HerVal7752
105842
3649606
wikitext
text/x-wiki
{{amboks
| type = flett
| bilde = [[Fil:Merge-arrows.svg|40px]]
| tekst = '''Flett:''' Det er føreslått at denne sida blir fletta med ''{{#switch:{{NAMESPACE}}|=[[{{{1}}}]]|[[:{{NAMESPACE}}:{{{1}}}|{{{1}}}]]}}''{{#if:{{{2|}}}|. Oppgjeven årsak: ''{{{2}}}''}}. (Sjå eventuelt {{#ifexist:{{TALKPAGENAME}}|([[{{TALKPAGENAME}}|diskusjon]])|{{#ifexist:Diskusjon:{{{1}}}|([[Diskusjon:{{{1}}}|Diskusjon]])|[[{{TALKPAGENAME}}|diskusjon]]}} }})
| dato = {{{dato|}}}
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[Kategori:Sider som bør flettast|{{SIDENAMN}}]]</includeonly>
<includeonly>[[kategori:artiklar som treng tilsyn {{ÅRNO}}]]</includeonly><noinclude>
[[Kategori:Vedlikehaldsmalar|{{SIDENAMN}}]]
</noinclude>
e0ukyd7o5bfn2cl984gc66ef1eba09u
Klima i USA
0
48670
3649654
3594806
2026-04-05T11:39:54Z
Marcuspn
143881
3649654
wikitext
text/x-wiki
'''Klimaet i USA''' er kjenneteikna med nokre av dei mest ekstreme vêrfenomena ein har på jorda, som [[tropisk syklon|tropiske orkanar]], [[tornado]]ar, [[snøstorm]]ar, store temperaturskilnadar, og enorme nedbørsmengder. Landet har ein minimums- og maksimumstemperatur som varierer frå -62 °C til 57 °C, og stader har fått 1000 mm regn på mindre enn ein dag, medan andre område har fått 25 meter snø på berre ein vinter.
Dei 48 samanhengande statane ligg alle innanfor den [[temperert klima|tempererte sona]], så ein kan vente seg både behagelege temperaturar og stundom svært kalde eller varme forhold så godt som alle stader. Folk på [[Miami]] Beach har sett snø falle til bakken (januar 1977), medan temperaturen har blitt så høg som 49 °C i [[North Dakota]], som ligg på same breiddegrad som [[Frankrike]]. [[Mexicogolfen]] sender opp mykje fukt over dei austlege områda av landet, slik at [[Minneapolis]] kan vere like fuktig som [[New Orleans]] midtsommars. Forholda er tørrare og friskare i [[Rocky Mountains]], og vêret i [[California]] er ei verd i seg sjølv. I dei indre områda her finn ein både den steikande varme [[Death Valley]] og dei [[snø]]kledde [[Sierra Nevada]]fjella.
== New England og den sentrale atlanterhavskysten ==
[[Fil:Miniskirts in snow storm.jpg|mini|250px|Snøstorm på Manhattan i New York City.]]
[[New England]] har eit typisk [[temperert klima]] med fire årstider: Ein varm sommar, ein kald vinter, ein solrik, men ofte kjølig vår og ein frisk, kjølig haust. Kortid som helst på året, men særleg frå oktober til juni, kan området kome ut for ein ''nor'easter'', som har fått dette namnet fordi [[vind]]en bles frå nordaust når eit uvêr nærmar seg. Når dei flyttar seg opp langs kysten fører nor'easter vanlegvis med seg ein dag og to med [[regn]], vind og gråvêr. Like ofte kan derimot eit [[høgtrykk]] flytte seg sørover frå [[Canada]] og gje nokre dagar med klårt og fint vêr.
Dei store kystbyane sørover langs kysten har eit klima mykje likt New England, men det vert gradvis varmare jo lenger sør ein kjem. [[Washington DC]] er i middel om lag 5 °C varmare enn [[Boston]], som er nok til at sommaren nesten er subtropisk. Vinteren er òg litt mildare og byen får berre halvparten av snømengda som Boston får. Sommaren på austkysten er [[dis]]ig, varm og fuktig. Dei verste varmebølgjene kan sende temperaturen opp mot 40 °C når ein tørr vestavind strøymer nedover [[Appalachane]], ei fjellrekkje som går parallelt med kysten frå [[Maine]] til [[Alabama]]. Stader i høgda er nokre grader kaldare enn områda ved kysten. Vinterkulda kan vere brutal frå dei øvre områda av staten [[New York]] og nordover i New England, der temperaturane kan bli lågare enn -35 °C. Dei store kystbyane får sjeldan temperaturar lågare enn -15 °C, men kvar vinter kan dei få [[snøstorm]]ar med [[sterk kuling]] og over 30 cm [[snø]], som kan stenge [[flyplass]]ar og [[motorveg]]ar for ein dag eller meir. [[Tropisk syklon|Orkanar]] og [[tornado]]ar oppstår ikkje så ofte i desse områda, men begge kan vere katastrofale når dei først slår til. Sjølv orkanar som berre kjem i nærleiken av desse områda kan skape farlege [[straumkvervel|straumkvervlar]] og [[dønning]]ar langs kysten. Bortsett frå alt dette har dei store kystbyane mykje fint vêr, særleg om våren og hausten då temperaturane er moderate og lufta forholdsvis klår.
== Sørstatane ==
[[Fil:Islamorada Florida.jpg|mini|250px|venstre|Islamorada ligg i Florida Keys lengst sør i Florida, og har tropisk klima.]]
Klimaet i denne sørlege delen av USA er varmt og fuktig stort sett heile året bortsett frå midt på vinteren. Den midla maksimumstemperaturen er høgare enn 26 °C frå mai til oktober frå [[Louisiana]] til [[Georgia]]. Litt meir behageleg er det på kysten der [[sjøbris]]en vanlegvis gjev litt vind på kysten på varme ettermiddagar, eller i [[Appalachane]], som strekkjer seg så langt sør som til det nordaustlege Alabama og nordlege Georgia. Dei lange somrane i dette området inneheld vanlegvis ein del regn- og [[torevêr|torebyer]], og stundom ein tropisk storm eller orkan, som kan gje enorme nedbørsmengder.
Vinteren er meir varierande med klåre og fine dagar, ofte behageleg mildt, men av og til bitande kaldt, og ein kan ha alt frå kraftige torevêr til snø. Under [[El Niño]]-år regnar det ofte meir om vinteren her. Området frå [[Arkansas]] til Carolina er utsett for [[underkjølt regn|isstormar]]. [[Tornado]]ar kan oppstå året rundt, men er vanlegast om vinteren og tidleg på våren.
Nordlege delar av [[Florida]] har mykje det same klimaet som i resten av Sørstatane, men sør for [[Orlando]] er klimaet [[tropisk klima|tropisk]]. Det er sjeldan frost her, og sola er skarp sjølv på vinterstid. Det meste av nedbøren kjem om sommaren i så godt som daglege regn - og torebyer med mange [[lyn]]nedslag. Frå juni til november kjem òg ofte ein del av nedbøren i samband med orkanar som råkar Florida i gjennomsnitt ein gong i året.
== [[Dei store sjøane]] og [[Midtvesten]] ==
[[Fil:Frozen Lake Michigan.jpg|mini|250px|Lake Michigan nær Chicago ein kald vinterdag]]
Dei sentrale områda av USA har eit [[kontinentalklima]], som vert påverka av element frå alle retningar. September og oktober er ofte den finaste tida på året, då den verste varmen frå sommaren har gjeve seg, og vinterkulda enno ikkje har kome. Vintrane her er like kald og ofte kaldare enn i dei nordaustlege områda, og ofte med stor [[vindavkjølingseffekt]], men snøfallet varer som regel berre i korte periodar om gongen. Unntaket er langs den sørlege og austlege kysten av [[Dei store sjøane]], der kaldluft som strøymer over dei relativt varme innsjøane om hausten og tidleg på vinteren fører til store snøfall. Av og til kan det kome ein meter snø på ein dag og to, medan områda ein times køyretur innanfor ikkje får noko. Varmeperiodar om vinteren her er tørrare og meir solrik enn i nordaust.
Ettermiddagane seint på våren og om sommaren kan ofte ha intense [[torevêr]], særleg i områda frå [[Iowa]] og det sørlege [[Minnesota]] sør for Dei store innsjøane til [[Ohio]]. Kystområda av innsjøane har stort sett moderate temperaturar om sommaren, bortsett frå når varmebølgjer byggjer seg opp. Sommaren har ofte overraskande høg fukt på grunn av all fukta som [[fordamping|fordampar]] frå jordbruksområda. Kombinert med [[varmestråling]] frå [[asfalt]] og bygningar kan fukta i byar som [[St. Louis]] og [[Chicago]] halde nattetemperaturen over 25 °C.
== Dei store slettene ==
Området frå [[North Dakota]] til [[Texas]] har [[steppe]]klima, ei overgangssone mellom det fuktigare regimet i aust og det tørrare området i [[Rocky Mountains]] og [[ørken]]ane lenger vest. Sommardagane kan bli svært varme, men luftfukta vert lågare når ein kjem lenger nordvest. Hausten er den mest behagelege tida på året her. [[Kaldfront]]ar om vinteren kan presse kald luft sørover frå Canada til Texas i løpet av få dagar. Like raskt kan lufta varmast opp, særleg like aust for Rocky Mountains der Stillehavsluft kan erstatte polarlufta på ein augneblink. I enkelte tilfelle har temperaturen stige med over 20 °C i løpet av få minutt.
Dei nordlege slettene er kaldare enn lenger sør, medan nedbørsfordelinga varierer frå aust mot vest. I søraustlege delar av Texas får [[Houston]] om lag 1200 mm på eit år, medan [[Del Rio]] i [[Elva Rio Grande|Rio Grandedalen]] lenger vest berre får halvparten. Utan store fjellrekkjer i området kan [[lågtrykk]] som utviklar seg aust for Rocky Mountains samle luft inn frå alle kantar, og vinden kjem ofte over 15–17 m/s ([[stiv kuling]]) på slettene, og vindstille er det sjeldan. I tørre vårsesongar kan støv blese opp i lufta og gje himmelen ein [[kopar]]farge og til og med sleppe frå seg eit tynt støvlag. Dette er ei påminning om dei katastrofale «Dust Bowl» [[sandstorm]]ane på 1930-talet. Når det er fukt i lufta og frontar nærmar seg, kan det oppstår kraftige [[tornado]]ar på desse slettene.
== Rocky Mountains ==
{{Sjå|Rocky Mountains}}[[Fil:Death Valley Mesquite Sand Dunes.jpg|mini|250px|venstre|Death Valley er den varmaste staden i USA, og ein av dei varmaste i verda.]]
Ein kan ha store temperaturskilnadar i Rocky Mountains, både frå årstid til årstid og frå time til time. På grunn av høgda og låg [[relativ fukt]] kan temperaturen lett variere 20 °C i løpet av eit døger. [[Great Basin]], eit ujamnt platå, utgjer ein god del av dei indre områda i vest, med lett snø om vinteren og korte sommaruvêr som kan utløyse bråe [[flaum]]ar. Polarlufta klarer vanlegvis ikkje å trenge inn i bekkenet, men når den gjer det kan det medføre fleire veker med [[smog]] i byar som [[Boise]] og [[Salt Lake City]]. Somrane her er solrike med varme dagar og kjølige netter.
I dei store ørkenområda i [[Arizona]], sørlege delar av [[Nevada]] og søraustlege delar av [[California]] er somrane brennande heite og svært tørre, bortsett frå eit par veker (vanlegvis i juli og august) i samband med [[monsun]]en (ein svakare versjon av den indiske monsunen). Temperaturane vert då litt lågare, men fukta aukar.
Byane i den austlege fjellsida, som [[Denver]], har eit meir steppeliknande klima med torevêr om sommaren, kulde om vinteren og stundom periodar med kraftig vind. Utan mykje fukt til å regulere temperaturen, kan våren og hausten i Rocky Mountains vere både varm og kald.
== Vestkysten ==
[[Fil:Prsf Bay fog.jpg|mini|250px|Tåke er det ofte ved Golden Gatebrua i San Francisco.]]
Vestkysten er mykje fuktigare enn dei indre områda av [[California]], [[Oregon]] og [[Washington]]. Unntaket er dei vestlege fjellsidene av [[Sierra Nevada]] som er kjend for å få enorme snømengder når den fuktige lufta frå Stillehavet strøymer over fjellet. Stillehavskysten i California har derimot eit [[middelhavsklima]], med tørre og varme somrar. På kysten av California kjem det så godt som ingen nedbør frå juni til september, men om våren og tidleg på sommaren kan ein ofte ha [[tåke]] på grunn av dei kalde havstraumane utanfor. [[San Francisco]] er blant anna kjend for dette fenomenet. Vinteren er våtare i California og åssidene vert grøne, men det regnar sjeldan meir enn kvar tredje dag.
Lenger nord har ein derimot regn oftare, og skyene kan gjerne ligge ei veke og to i slengen. Somrane her er òg solrike som i California, men sidan dei ligg lenger nord er temperaturen nokre gradar lågare. Dei fleste lågtrykka om vinteren er svakare enn dei på austkysten, men det finst unntak. Lengre regnperiodar kan medføre flaum, og kraftig vind kan velte straumleidningar. Stundom kan polarlufta strøyme over Rocky Mountains og dei vestlege områda av Washington kan bli dekte av både is og snø heilt ut til kysten.
Under [[El Niño]]-hendingar aukar vanlegvis nedbøren i California om vinteren, medan dei nordvestlege områda får [[tørke]]. [[La Niña]] fører til motsette forhold og [[Seattle]] og [[Portland]] får meir regn enn vanleg, medan California får tørke.
== Hawaii ==
[[Fil:Honolulu-Oahu.jpg|mini|250px|venstre|Honolulu på øya Oahu på Hawaii.]]
Den 50. staten i USA har [[tropisk klima]] med [[passatvind]], mykje sol og stabile temperaturar. Sommaren er berre litt varmare enn vinteren, og skilnaden mellom dag- og nattetemperaturane er stort sett rundt 6 °C året gjennom. Dei største klimatiske skilnadane på Hawaii er geografiske. På grunn av vedvarande nordaustleg passatvind, får austsidene av øyane mest nedbør. [[Hilo]] på [[øya Hawaii]] får om lag 3300 mm i løpet av eit år, medan vestkysten slik som Konakysten på øya Hawaii er nesten heilt tørre. Utslepp frå dei to [[vulkan]]ane kan av og til blande seg med [[tåke]] og lage ei disig blanding som dei lokale innbyggjarane kallar «vog».
[[Honolulu]], på søraustkysten av [[Oahu]], har svært lite nedbør om sommaren, og akkurat nok nedbør om vinteren til å halde vegetasjonen grøn. [[El Niño]]-hendingar fører til at Hawaii vert litt tørrare enn vanleg. Sjølv om havområda rundt Hawaii er litt for kjølig til at orkanar kan oppstå, hender det av og til at ein og anna passerer forbi.
[[Kategori:Klima i USA| ]]
7nhbk3cdlfiebc4yhm0borad0d8vv9f
Mal:Definisjon
10
51486
3649608
3397438
2026-04-04T16:25:36Z
HerVal7752
105842
Amboks
3649608
wikitext
text/x-wiki
{{amboks
| type = style
| bilde = [[Fil:Accessories-dictionary.svg|40px]]
| tekst = Denne artikkelen inneheld berre ein [[:Kategori:Definisjonar|ordboksdefinisjon]]. Du kan hjelpe [[Nynorsk Wikipedia|Nynorsk Wikipedia]] å vekse seg stor og sterk gjennom å [{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} leggje inn meir innhald].
| dato = {{{dato|}}}
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[kategori:Spirer {{ÅRNO}}]][[kategori:Definisjonar]]</includeonly><noinclude>
[[kategori:Vedlikehaldsmalar]]
</noinclude>
d2cuuglbb8kc8nmulohf89oz581j8ll
Mal:Flytt
10
74630
3649605
3592703
2026-04-04T16:20:35Z
HerVal7752
105842
Amboks
3649605
wikitext
text/x-wiki
{{amboks
| type = flytt
| bilde = [[Fil:Merge-arrows.svg|40px]]
| tekst = '''Flytt:''' Det er føreslått at denne sida blir flytta til ''{{#byt:{{NAMNEROM}}|=[[{{{1}}}]]|[[:{{NAMNEROM}}:{{{1}}}|{{{1}}}]]}}''{{#if:{{{fordi|}}}| fordi {{{fordi|}}}|}}. (Sjå eventuelt {{#if:{{{2|}}}|[[{{{2|}}}|diskusjon]]|[[:{{TALKSPACE}}:{{SIDENAMN}}|diskusjon]]}})
| dato = {{{dato|}}}
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[Kategori:Føreslåtte flyttingar|{{SIDENAMN}}]] [[Kategori:Artiklar som treng tilsyn {{ÅRNO}}]]</includeonly><noinclude>[[Kategori:Vedlikehaldsmalar|{{SIDENAMN}}]]
{{Dokumentasjon}}</noinclude>
cptanc5tpxwtl3f2kcffma59qirqncj
MF «Bergensfjord»
0
86781
3649617
3646986
2026-04-05T07:12:51Z
Ranveig
39
Infoboks, ref. o.a.
3649617
wikitext
text/x-wiki
{{Infoboks skip
| navn = MF «Bergensfjord»
| bilete = Bergensfjord 72.jpg
| bilettekst = MF «Bergensfjord» på veg over [[Bjørnafjorden]].
| type = [[Passasjerskip]] / [[roro-skip]] / [[bilferje]] / [[pendelferje]] / [[gassferje]]
| bygga = 21. november 2006
| verft = Brattvåg Skipsverft
| døypt = 25. november 2006
| flaggstat = {{Flaggikon|Norge}} [[Florø]]
| register = {{Flaggikon|Norge}} [[Norsk Ordinært Skipsregister|NOR]]
| reiarlag= {{Flaggikon|Noreg}} [[Fjord1]]
| status = I rute
| kallesignal = LNZZ
| IMO-nummer = 9343091
| MMSI-nummer = 258271000
| lengd = 130
| breidde = 19
| toppfart = 23,5
| tonnasje = 6 904
| passasjerar = 589
| bilar= 212 [[Personbileining|PBE]]
| lastekapasitet = 18
}}
[[Fil:MF Bergensfjord.JPG|mini|Bergensfjord på veg over [[Bjørnafjorden]].]]
[[Fil:MF Bergenfjord at Sandvikvåg.JPG|mini|Baugen på Bergensfjord]]
[[Fil:MF Bergenfjord2.JPG|mini|Bergensfjord ein kveld i april]]
'''MF Bergensfjord''' er ei [[bilferje]] som vart bygd av [[Aker Yards]] på [[Sunnmøre]] og var ferdigstilt i [[2006]]. Ferja var ei av dei første gassdrivne ferjene som vart sette i trafikk i [[Noreg]], og vart bygd for [[Fjord1 Fylkesbaatane]] og sett inn i ferjesambandet [[Halhjem-Sandvikvåg]] i 2007.<ref>{{ Kjelde avis | dato = 2007-01-08 | tittel = «Bergensfjord» ga full gass|blad=Bergensavisen | stad = Bergen | url = https://www.nb.no/items/bcabbebd911c3317e06ff725b825061f?page=5&searchText=Bergensfjord| side = 6}}</ref><ref name=jomfrutur>{{ Kjelde avis | dato= 2007-01-08 | tittel = Vellykket jomfrutur|avis=Haugesunds Avis | stad = Haugesund | url = https://www.nb.no/items/acb0d08bcb16832231c8680a1f4efc69?page=7&searchText=Bergensfjord | side =8 }}</ref>
«Bergensfjord» vart formelt overlevert til Fjord1 22. november 2006<ref>{{ Kjelde avis | dato = 2006-11-23 | tittel = Statsråden får døype gassferja|blad=Firda | stad = Sunnfjord | url=https://www.nb.no/items/4fb9bb4fe5682f74f88ccf7f4dbbbf73?page=9&searchText=Bergensfjord| side = 10}}</ref> og døypt i [[Florø]] av [[samferdsleminister]] [[Liv Signe Navarsete]] 25. november.<ref>{{ Kjelde avis | dato = 2006-11-11 | tittel = Full gass med «Bergensfjord» gav 23,3 mils fart|blad=Bygdebladet | stad = Ørskog | url = https://www.nb.no/items/37bba91eeaf97d1d9ff465a1284ba8fa?page=7&searchText=Bergensfjord | side = 8}}</ref><ref>{{ Kjelde avis | dato = 2006-11-27 | tittel = ‘Går som ei svane i stormen’ |blad=Firda | stad = Sunnfjord | url = https://www.nb.no/items/e6127bff03bbe5dd187baad36559423f?page=7&searchText=Bergensfjord | side = 8}}</ref>
Skroga til ferjene vart bygde i [[Romania]].<ref>{{ Kjelde avis | dato = 2006-05-24 | tittel = Her er MF «Bergensfjord»|blad=Haugesunds Avis | stad = Haugesund | url = https://www.nb.no/items/c44ffc79fa617a1b87e0fcc32a28c131?page=5&searchText=Bergensfjord | side =6 }}</ref> Ein flaum bydde på problem i Romania og skroga vart forseinka, og ferjene var difor ikkje klare til 1. januar 2007, då Fjord1 skulle ha teke over ruta.<ref>{{ Kjelde avis | utgjeve år = 2006-11-17 | tittel = Fem nye gassferger snart klar|blad=Fiskaren | stad = Bergen | url = https://www.nb.no/items/eb6051476d817df94de3e58d6c93564d?page=27&searchText=Bergensfjord| side =28 }}</ref>
«Bergensfjord» vart offisielt sett i trafikk 8. januar 2007.<ref name=jomfrutur/> Seinare vart systerskipa [[M/F «Fanafjord»]] og [[M/F «Raunefjord»]] sette inn i sambandet, og [[M/F «Stavangerfjord»]] og [[M/F «Mastrafjord»]] i [[Arsvågen-Mortavika]].
«Bergensfjord» sette verdsrekord for eittskrogs pendelferjer i [[Byfjorden i Bergen|Byfjorden]] i [[Bergen]] med 23,5 [[knop]].<ref>{{Kilde www|url=https://www.bt.no/article/bt-R6vLW.html|tittel=Kaptein Remmes andre hjem|besøksdato=2019-11-03|forfattere=|dato=2014-06-30|språk=nb|verk=www.bt.no}}</ref> Marsjfarten er 21 knop.
== Kjelder ==
{{fotnoteliste}}
<div class="references-small">
* [http://www.fjord1.no/ Fjord1 sine vevsider]
* ''Denne artikkelen bygger på «[[:nb:M/F «Bergensfjord»|M/F «Bergensfjord»]]» frå {{Wikipedia-utgåve|nb}}, den 16. mars 2008.''
** ''{{Wikipedia-utgåve|nb}} oppgav desse kjeldene:''
*** [http://www.ship-info.com ship-info.com]
*** [http://www.nis-nor.no Norsk ordinært skipsregister]
</div>
{{DEFAULTSORT |Bergensfjord}}
[[Kategori:Europaveg 39 i Noreg]]
[[Kategori:Norske ferjer]]
[[Kategori:Skip frå 2006]]
s9rpy7r4j9j1ezjqtn1e4hs8iblgb8o
Mal:Treng oppdatering
10
290362
3649602
3551905
2026-04-04T16:10:37Z
HerVal7752
105842
+Kolon
3649602
wikitext
text/x-wiki
{{amboks
| type = style
| bilde = [[Fil:Ambox outdated_serious.svg|40px]]
| tekst = '''Treng oppdatering:'''
| fix = {{{part|{{{1|Denne artikkelen eller seksjonen}}}}}} er ikkje oppdatert med ny utvikling eller ny informasjon. Du kan hjelpe Nynorsk Wikipedia gjennom å [{{fullurl:{{FULLPAGENAME}}|action=edit}} oppdatere] han.
| dato = {{{dato|}}}
| kategori = treng oppdatering
| nocat = {{{nocat|<noinclude>true</noinclude>}}}
}}<includeonly>[[kategori:Treng oppdatering|{{SIDENAMN}}]]</includeonly><includeonly>[[kategori:artiklar som treng tilsyn {{ÅRNO}}]]</includeonly><noinclude>
[[Kategori:Vedlikehaldsmalar|{{SIDENAMN}}]]</noinclude>
dvhs22fzsntcbg1n221gbv1gi0zqh0d
Kyrkjesamfunn
0
290695
3649619
3419334
2026-04-05T07:55:24Z
Ranveig
39
Litt meir frå en:
3649619
wikitext
text/x-wiki
{{pie chart|thumb = right
|caption = Kristne etter tradisjon i verda i 2024, ifølgje World Christian Database<ref name="WorldChristian Database">{{cite web |url=https://www.gordonconwell.edu/wp-content/uploads/sites/13/2024/01/Status-of-Global-Christianity-2024.pdf |title=Status of Global Christianity, 2024, in the Context of 1900–2050 |publisher=Center for the Study of Global Christianity, Gordon-Conwell Theological Seminary |access-date=23. mai 2024}}</ref>
|label1 = Katolikkar
|value1 = 48.6
|label2 = Protestantar
|value2 = 39.8
|label3 = Ortodokse, inkludert [[den austlege ortodokse kyrkja|austlege]] og [[orientalske ortodokse kyrkjer]]
|value3 = 11.1
|label4 = Andre
|value4 = 0.5}}
'''Kyrkjesamfunn''' eller eit [[kristendommen|kristent]] [[trussamfunn]] er ei religiøs eining som er identifiserbar gjennom eit namn, ein struktur og/eller ei viss lære. Innan den kristne [[kyrkja]] finst det fem store kyrkjesamfunn: [[Den katolske kyrkja|Katolske]], [[Ortodoks kristendom|ortodokse]], [[Orientalske ortodokse kyrkjer|orientalske]], [[den anglikanske kyrkja|anglikanske]] og [[protestantiske]]. I tillegg finst ulike mindre kyrkjesamfunn.
Dei store kyrkjesamfunna kan ha fleire undergrupperingar. Innan katolisismen finst til dømes 23 autonome delkyrkjer som likevel er i grunnleggjande eining med kvarandre. Innan protestantismen, på den andre sida, finst fleire ulike hovudstrømmingar med klare læremessige forskjellar (som mellom [[luthersk]] og [[pentekostal]] kristendom); desse hovudstrømmingane er igjen delte i mindre einingar både etter teologiske, organisatoriske og nasjonale/regionale skiljelinjer. Innan [[pinserørsla]] i Noreg oppfattar og organiserer kvar lokal [[kyrkjelyd]] seg som eit eige kristent trussamfunn der medlemskapet ikkje er territorielt definert.
Orda «kyrkjesamfunn» og etterkvart særleg «[[trussamfunn]]» har i Noreg fungert som eit av de juridiske rammebegrepa for [[religionsfridom]]somgrepet.
==Inndeling av kyrkjesamfunn==
[[Taksonomi]]sk kan kristendommen delast inn i seks hovudgrupper: [[kyrkja i aust]] (den assyriske kyrkja), [[orientalske ortodokse kyrkjer]], [[den austlege ortodokse kyrkja]], [[den katolske kyrkja]], [[protestantisme]] og [[restorasjonisme]].<ref name="Riswold2009">{{cite book |last1=Riswold |first1=Caryn D. |title=Feminism and Christianity: Questions and Answers in the Third Wave |date=1 October 2009 |publisher=Wipf and Stock Publishers |isbn=978-1-62189-053-9 |language=en}}</ref><ref name="GaoSawatsky2023">{{cite web |last1=Gao |first1=Ronnie Chuang-Rang |last2=Sawatsky |first2=Kevin |title=Motivations in Faith-Based Organizations|url=https://hc.edu/center-for-christianity-in-business/2023/02/07/motivations-in-faith-based-organizations/ |publisher=Houston Christian University |access-date=22. november 2023 |language=en|date=7 February 2023 |quote=For example, Christianity comprises six major groups: Church of the East, Oriental Orthodoxy, Eastern Orthodoxy, Roman Catholicism, Protestantism and Restorationism.}} Gao og Sawatsky referer til [[Robert S. Ellwood|Ellwood, Robert S.]], ''The Encyclopedia of World Religions'', New York: Infobase Publishing (2008) som kjelde for denne taksonomien.</ref> Protestantisme omfattar mange grupper som ikkje har felles kyrkjeadministrasjon og har vidt avvikande tru og praksis.<ref name="EB2008">{{cite book |title=Encyclopedia of World Religions |date=2008 |publisher=[[Encyclopædia Britannica]] |isbn=978-1-59339-491-2 |language=en |quote=Amid all this diversity, however, it is possible to define Protestantism formally as non-Roman Western Christianity and to divide most of Protestantism into four major confessions or confessional families – Lutheran, Anglican, Reformed, and Free Church.}}</ref> Større protestantiske grupper er mellom anna [[adventisme]], [[anabaptisme]], [[anglikanisme]], [[baptisme]], [[lutheranisme]], [[metodisme]], [[herrnhutisme]], [[kvekarar]], [[pinserørsla]], [[Plymouth Brethren]], [[kalvinisme]] og [[waldensianisme]].<ref name="EB2008"/><ref name="Melton2005">{{cite book |last1=Melton |first1=J. Gordon |title=Encyclopedia of Protestantism |date=2005 |publisher=Infobase Publishing |isbn=978-0-8160-6983-5 |language=en |quote=Most narrowly, it denotes a movement that began within the Roman Catholic Church in Europe in the 16th century and the churches that come directly out of it. In this narrow sense, Protestantism would include the Lutheran, Reformed or Presbyterian, and Anglican (Church of England) churches, and by extension the churches of the British Puritan movement, which sought to bring the Church of England into the Reformed/Presbyterian camp. Most recently, scholars have argued quite effectively that the churches of the radical phase of the 16th-century Reformation, the Anabaptist and Mennonite groups, also belong within this more narrow usage.}}</ref> Kalvinisme omfattar vidare tradisjonar som [[den reformerte kyrkja]], [[presbyterianisme]], [[evangelisk anglikanisme]], [[kongregasjonalistkkyrkja|kongregasjonalisme]] og [[reformert baptissme]].<ref>{{cite book |title=The New Encyclopaedia Britannica |url=https://archive.org/details/newencyclopaediav01ency |url-access=registration |date=1987 |publisher=Encyclopaedia Britannica |isbn=978-0-85229-443-7 |page=[https://archive.org/details/newencyclopaediav01ency/page/244 244] |language=en}}</ref> Anabaptisme Christianity omfattar tradisjonar som [[amish]], [[Apostolic Christian Church|Apostolic]], [[Bruderhof]], [[hutterittar]], [[mennonittar]], [[River Brethren]] og [[Schwarzenauer Brüder]].<ref>{{cite book |last1=Brewer |first1=Brian C. |title=T&T Clark Handbook of Anabaptism |date=30 December 2021 |publisher=Bloomsbury Publishing |isbn=978-0-567-68950-4 |page=564 |language=en}}</ref> Innanfor restorasjonismen finst det vidare grupper som [[den katolsk-apostolske kyrkja]], [[swedenborgianisme]], [[kristadelfianarar]], [[siste dagars heilage]], [[Jehovas vitne]], {{lang|es|[[La Luz del Mundo]]|italic=no}} og {{lang|tl|[[Iglesia ni Cristo]]|italic=no}}.<ref name="LewisMittelstadt2016">{{cite book |last1=Lewis |first1=Paul W. |last2=Mittelstadt |first2=Martin William |title=What's So Liberal about the Liberal Arts?: Integrated Approaches to Christian Formation |date=27 April 2016 |publisher=Wipf and Stock Publishers |isbn=978-1-4982-3145-9 |language=en |quote=The Second Great Awakening (1790-1840) spurred a renewed interest in primitive Christianity. What is known as the Restoration Movement of the nineteenth century gave birth to an array of groups: Mormons (The Latter Day Saint Movement), the Churches of Christ, Adventists, and Jehovah's Witnesses. Though these groups demonstrate a breathtaking diversity on the continuum of Christianity they share an intense restorationist impulse. Picasso and Stravinsky reflect a primitivism that came to the fore around the turn of the twentieth century that more broadly has been characterized as a "retreat from the industrialized world."}}</ref><ref name="Bloesch2005">{{cite book |last1=Bloesch |first1=Donald G. |title=The Holy Spirit: Works Gifts |date=2 December 2005 |publisher=InterVarsity Press |isbn=978-0-8308-2755-8 |page=158 |language=en}}</ref><ref name="Spinks2017">{{cite book |last1=Spinks |first1=Bryan D. |title=Reformation and Modern Rituals and Theologies of Baptism: From Luther to Contemporary Practices |date=2 March 2017 |publisher=[[Routledge]] |isbn=978-1-351-90583-1 |language=en |quote=However, Swedenborg claimed to receive visions and revelations of heavenly things and a 'New Church', and the new church which was founded upon his writings was a Restorationist Church. The three nineteenth-century churches are all examples of Restorationist Churches, which believed they were refounding the Apostolic Church, and preparing for the Second Coming of Christ.}}</ref>
I [[oldkyrkja|tidleg kristendom]] fanst det fleire rørsler som blei rekna som [[vranglære]] og ikkje finst meir, som [[gnostisisme]] (som trudde på ein [[esoterisme|esoterisk]] [[Dualistisk kosmologi|dualisme]] kalla [[gnosis]]), [[ebionittane]] (som nekta for at Jesus var guddommeleg) og [[arianisme]] (som meinte [[Gud sonen|sonen]] låg under [[Gud faderen|faderen]] ved å fornekta ein allereie eksisterande Kristus), [[bogomilisme]] og [[den bosniske kyrkja]]. Det største skiljet innan kristendommen i dag er mellom austlege, orientalsk-ortodokse og katolikkar på eine sida og dei ulike kyrkjesamfunna skipa under og etter den protestantiske [[reformasjonen]].<ref>{{Cite web|title=The main differences between Catholics and Protestants {{!}} DW {{!}} 21.04.2019|url=https://www.dw.com/en/the-main-differences-between-catholics-and-protestants/a-37888597|last=Welle (www.dw.com)|first=Deutsche|website=DW.COM|language=en-GB|access-date=2020-05-23|archive-date=2020-05-23|archive-url=https://web.archive.org/web/20200523124651/https://www.dw.com/en/the-main-differences-between-catholics-and-protestants/a-37888597|url-status=live}}</ref><ref>{{Cite web|title=What Are the Differences Between Catholics and Eastern Orthodox Anyway?|url=https://www.ncregister.com/daily-news/what-are-the-differences-between-catholics-and-eastern-orthodox-anyway|website=National Catholic Register|date=30 June 2016 |access-date=2020-05-23|archive-date=2020-07-28|archive-url=https://web.archive.org/web/20200728140745/https://www.ncregister.com/daily-news/what-are-the-differences-between-catholics-and-eastern-orthodox-anyway|url-status=live|author-last1=Bunderson|author-first1=Carl}}</ref><ref>{{Cite web|title=Beyond Dialogue: The Quest for Eastern and Oriental Orthodox Unity Today|publisher=St Vladimir's Orthodox Theological Seminary|author-first1=John H |author-last1=Erickson|via=Symposium on 1700th Anniversary of Christian Armenia|year=2000|url=https://www.svots.edu/content/beyond-dialogue-quest-eastern-and-oriental-orthodox-unity-today|access-date=2020-05-23|archive-date=2018-11-14|archive-url=https://web.archive.org/web/20181114100312/https://www.svots.edu/content/beyond-dialogue-quest-eastern-and-oriental-orthodox-unity-today|url-status=dead}}</ref> Det finst også ei rekkje grupper med [[antitrinitarisme]] som lære.
==Kjelder==
{{fotnoteliste}}
<div class="references-small">
*''Denne artikkelen bygger på «[[:nb:Kirkesamfunn|Kirkesamfunn]]» frå {{Wikipedia-utgåve|nb}}, den 6. desember 2014.''
</div>
{{refopning}}
*''Denne artikkelen bygger på «[[:en:Christian denomination|Christian denomination]]» frå {{Wikipedia-utgåve|en}}, den 5. april 2026.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
{{autoritetsdata}}
[[Kategori:Kristne samfunn| ]]
[[Kategori:Trussamfunn]]
h9f1pclpksxvat4lld94zceuklkfwap
Nysæter ungdomsskule
0
319230
3649615
3647497
2026-04-05T07:10:32Z
Ranveig
39
Flikk
3649615
wikitext
text/x-wiki
{{Infoboks skule
|bilete =Nysæter ungdomskule 2018.jpg
|bilettekst =Nysæter ungdomskule på [[Stord]] {{foto|2018}}
|type =[[Ungdomsskule]]
|grunnlagt =1975
|fylke =[[Vestland fylke|Vestland]]
|kommune =[[Stord]]
|tettstad =[[Nysæter]]
|adresse =Nysæter skule, utslettevegen 60, 5410 Sagvåg
|rektor =Anne Beate Sunde
|elevar =231 (2025-2026)
|klasser=8.-10.
|tilsette =30
|eigar =Stord kommune
|biletetekst=dette bildet ble tatt tilbake i 2018}}
'''Nysæter ungdomsskule''' er ein offentleg [[ungdomsskule]] i Sagvåg i [[Stord kommune]]. Rektor ved skulen er Anne Beate Sunde. Elevane som byrjar på denne skulen kjem frå [[Sagvåg skule]] og [[Tjødnalio skule]] (og tidlegare frå [[Litlabø skule]]).
==Bakgrunnsstoff==
* [https://www.stord.kommune.no/tenester/barnehage-skule-og-familie/skule-og-utdanning/alle-skular/nysaeter-ungdomsskule Nettstad]
{{spire|utdanning|Vestland}}
{{Autoritetsdata}}
[[Kategori:Skular i Stord]]
[[Kategori:Ungdomsskular i Vestland]]
mdk199ucw5ityovwf7fjdvqg34514nu
Mal:Stortingsrep 2017-2021
10
343034
3649650
3632454
2026-04-05T11:26:28Z
HerVal7752
105842
Elise Bjørnebekk-Waagen -> Elise Waagen
3649650
wikitext
text/x-wiki
{{navboks
| namn = Stortingsrep 2017-2021
| tittel = <small>[[Stortingsrepresentantar 2013-2017|før]]</small> ← [[Stortingsrepresentantar 2017-2021|Stortingsrepresentantar 2017-2021]] → <small>[[Stortingsrepresentantar 2021-2025|etter]]</small>
| status = collapsed
| tittelstil=background:#E5E4E2; color:black;
| gruppestil = background:#E5E4E2; color:black;
| stil=font-size: 85%;line-height: 1.7;font-weight:normal
| bodyclass=hlist
| gruppe1 = Akershus
| liste1 =
*[[Jan Tore Sanner|Sanner]] (Vara: [[Bente Stein Mathisen|Mathisen]])
*[[Anniken Huitfeldt|Huitfeldt]]
*[[Hans Andreas Limi|Limi]]
*[[Tone Wilhelmsen Trøen|Trøen]]
*[[Sverre Myrli|Myrli]]
*[[Nils Aage Jegstad|Jegstad]]
*[[Nina Sandberg|Sandberg]]
*[[Himanshu Gulati|Gulati]]
*[[Abid Raja|Raja]] (Vara: [[Solveig Schytz|Schytz]])
*[[Henrik Asheim|Asheim]] (Vara: [[Anne Kristine Linnestad|Linnestad]])
*[[Sigbjørn Gjelsvik|Gjelsvik]]
*[[Nicholas Wilkinson|Wilkinson]] (Vara: [[Sheida Sangtarash|Sangtarash]])
*[[Åsmund Aukrust|Aukrust]]
*[[Turid Kristensen|Kristensen]]
*[[Kari Kjønaas Kjos|Kjos]]
*[[Tuva Moflag|Moflag]]
*[[Hårek Elvenes|Elvenes]]
| gruppe2 = Aust-Agder
| liste2 =
*[[Svein Harberg|Harberg]]
*[[Tellef Inge Mørland|Mørland]]
*[[Åshild Bruun-Gundersen|Bruun-Gundersen]]
*[[Kjell Ingolf Ropstad|Ropstad]]
| gruppe3 = Buskerud
| liste3 =
*[[Martin Kolberg|Kolberg]]
*[[Trond Helleland|Helleland]]
*[[Morten Wold|Wold]]
*[[Lise Christoffersen|Christoffersen]]
*[[Kristin Ørmen Johnsen|K.Ø. Johnsen]]
*[[Per Olaf Lundteigen|Lundteigen]]
*[[Jon Helgheim|Engen-Helgheim]]
*[[Masud Gharahkhani|Gharahkhani]]
*[[Arne Nævra|Nævra]]
| gruppe4 = Finnmark
| liste4 =
*[[Runar Sjåstad|Sjåstad]]
*[[Bengt Rune Strifeldt|Strifeldt]]
*[[Ingalill Olsen|Olsen]]
*[[Geir Iversen|Iversen]]
*[[Frank Bakke-Jensen|Bakke-Jensen]] (Vara: [[Marianne Haukland|Haukland]])
| gruppe5 = Hedmark
| liste5 =
*[[Anette Trettebergstuen|Trettebergstuen]]
*[[Trygve Slagsvold Vedum|Slagsvold Vedum]]
*[[Nils Kristen Sandtrøen|Sandtrøen]]
*[[Kristian Tonning Riise|Tonning Riise]]
*[[Tor André Johnsen|T. A. Johnsen]]
*[[Emilie Enger Mehl|Enger Mehl]]
*[[Karin Andersen|K. Andersen]]
| gruppe6 = Hordaland
| liste6 =
*[[Erna Solberg|Solberg]] (Vara: [[ Liv Kari Eskeland|Eskeland]])
*[[Magne Rommetveit|Rommetveit]]
*[[Helge André Njåstad|Njåstad]]
*[[Ove Trellevik|Trellevik]]
*[[Jette F. Christensen|Christensen]]
*[[Peter Christian Frølich|Frølich]]
*[[Kjersti Toppe|Toppe]]
*[[Silje Hjemdal|Hjemdal]]
*[[Audun Lysbakken|Lysbakken]]
*[[Eigil Knutsen|Knutsen]]
*[[Torill Eidsheim|Eidsheim]]
*[[Knut Arild Hareide|Hareide]]
*[[Tom-Christer Nilsen|Nilsen]]
*[[Ruth Grung|Grung]]
*[[Terje Breivik|Breivik]]
*[[Nils T. Bjørke|Bjørke]]
| gruppe7 = Møre og Romsdal
| liste7 =
*[[Helge Orten|Orten]]
*[[Sylvi Listhaug|Listhaug]] (Vara: [[Jan Steinar Engeli Johansen|Engeli Johansen]])
*[[Else-May Botten|Botten]]
*[[Jenny Klinge|Klinge]]
*[[Marianne Synnes|Synnes]]
*[[Jon Georg Dale|Dale]] (Vara: [[Knut Magne Flølo|Flølo]])
*[[Fredric Holen Bjørdal|Bjørdal]]
*[[Vetle Wang Soleim|Soleim]]
*[[Steinar Reiten|Reiten]]
| gruppe8 = Nord-Trøndelag
| liste8 =
*[[Ingvild Kjerkol|Kjerkol]]
*[[Marit Arnstad|Arnstad]]
*[[Arild Grande|Grande]]
*[[Elin Agdestein|Agdestein]]
*[[André N. Skjelstad|Skjelstad]]
| gruppe9 = Nordland
| liste9 =
*[[Eirik Sivertsen|Sivertsen]]
*[[Margunn Ebbesen|Ebbesen]]
*[[Willfred Nordlund|Nordlund]]
*[[Kjell-Børge Freiberg|Freiberg]] (Vara: [[Dagfinn Olsen|Olsen]])
*[[Åsunn Lyngedal|Lyngedal]]
*[[Jonny Finstad|Finstad]]
*[[Siv Mossleth|Mossleth]]
*[[Hanne Dyveke Søttar|Søttar]]
*[[Mona Fagerås|Fagerås]]
| gruppe10 = Oppland
| liste10 =
*[[Rigmor Aasrud|Aasrud]]
*[[Ivar Odnes|Odnes]] (Vara: [[Bengt Fasteraune|Fasteraune]])
*[[Olemic Thommessen|Thommessen]]
*[[Tore Hagebakken|Hagebakken]]
*[[Morten Ørsal Johansen|Johansen]]
*[[Marit Knutsdatter Strand|Strand]]
*[[Ketil Kjenseth|Kjenseth]]
| gruppe11 = Oslo
| liste11 =
*[[Jonas Gahr Støre|Støre]]
*[[Ine Marie Eriksen Søreide|Eriksen Søreide]] (Vara: [[Mathilde Tybring-Gjedde|Tybring-Gjedde]])
*[[Marianne Marthinsen|Marthinsen]]
*[[Nikolai E. Astrup|Astrup]]
*[[Siv Jensen|Jensen]] (Vara: [[Mazyar Keshvari|Keshvari]])
*[[Kari Elisabeth Kaski|Kaski]]
*[[Trine Skei Grande|Skei Grande]]
*[[Jan Bøhler|Bøhler]]
*[[Michael Tetzschner|Tetzschner]]
*[[Bjørnar Moxnes|Moxnes]]
*[[Une Bastholm|Bastholm]] (Vara: [[Per Espen Stoknes|Stoknes]])
*[[Siri Staalesen|Staalesen]]
*[[Heidi Nordby Lunde|Nordby Lunde]]
*[[Christian Tybring-Gjedde|Tybring-Gjedde]]
*[[Espen Barth Eide|Barth Eide]]
*[[Petter Eide|Eide]]
*[[Mudassar Kapur|Kapur]]
*[[Ola Elvestuen|Elvestuen]]
*[[Stefan Heggelund|Heggelund]]
| gruppe12 = Rogaland
| liste12 =
*[[Bent Høie|Høie]] (Vara: [[Aleksander Stokkebø|Stokkebø]])
*[[Hadia Tajik|Tajik]]
*[[Solveig Horne|Horne]] (Vara: [[Atle Simonsen|Simonsen]])
*[[Tina Bru|Bru]]
*[[Torstein Tvedt Solberg|Tvedt Solberg]]
*[[Roy Steffensen|Steffensen]]
*[[Olaug Bollestad|Bollestad]]
*[[Sveinung Stensland|Stensland]]
*[[Geir Pollestad|Pollestad]]
*[[Hege Haukeland Liadal|Haukeland Liadal]]
*[[Margret Hagerup|Hagerup]]
*[[Terje Halleland|Halleland]]
*[[Øystein Langholm Hansen|Langholm Hansen]]
*[[Solfrid Lerbrekk|Lerbrekk]]
| gruppe13 = Sogn og Fjordane
| liste13 =
*[[Liv Signe Navarsete|Navarsete]]
*[[Ingrid Heggø|Heggø]]
*[[Frida Melvær|Melvær]]
*[[Tore Storehaug|Storehaug]]
| gruppe14 = Sør-Trøndelag
| liste14 =
*[[Trond Giske|Giske]]
*[[Linda Hofstad Helleland|Hofstad Helleland]] (Vara: [[Guro Angell Gimse|Angell Gimse]])
*[[Eva Kristin Hansen|E. K. Hansen]]
*[[Sivert Bjørnstad|Bjørnstad]]
*[[Heidi Greni|Greni]]
*[[Mari Lønseth|Holm Lønseth]]
*[[Jorodd Asphjell|Asphjell]]
*[[Lars Haltbrekken|Haltbrekken]]
*[[Kirsti Leirtrø|Leirtrø]]
*[[Jon Gunnes|Gunnes]]
| gruppe15 = Telemark
| liste15 =
*[[Terje Lien Aasland|Aasland]]
*[[Solveig Sundbø Abrahamsen|Sundbø Abrahamsen]]
*[[Bård Hoksrud|Hoksrud]]
*[[Lene Vågslid|Vågslid]]
*[[Åslaug Sem-Jacobsen|Sem-Jacobsen]]
*[[Geir Bekkevold|Bekkevold]]
| gruppe16 = Troms
| liste16 =
*[[Cecilie Myrseth|Myrseth]]
*[[Kent Gudmundsen|Gudmundsen]]
*[[Per-Willy Amundsen|Amundsen]] (Vara: [[Kristian P. Wilsgård|Wilsgård]])
*[[Sandra Borch|Borch]]
*[[Martin Henriksen|M. Henriksen]]
*[[Torgeir Knag Fylkesnes|Fylkesnes]]
| gruppe17 = Vest-Agder
| liste17 =
*[[Ingunn Foss|Foss]]
*[[Kari Henriksen|K. Henriksen]]
*[[Gisle Meininger Saudland|Saudland]]
*[[Norunn Tveiten Benestad|Tveiten Benestad]]
*[[Hans Fredrik Grøvan|Grøvan]]
*[[Torhild Bransdal|Bransdal]]
| gruppe18 = Vestfold
| liste18 =
*[[Kårstein Eidem Løvaas|Eidem Løvaas]]
*[[Dag Terje Andersen|D.T. Andersen]]
*[[Morten Stordalen|Stordalen]]
*[[Lene Westgaard-Halle|Westgaard-Halle]]
*[[Maria Aasen-Svensrud|Aasen-Svensrud]]
*[[Erlend Larsen|Larsen]]
*[[Carl-Erik Grimstad|Grimstad]]
| gruppe19 = Østfold
| liste19 =
*[[Stein Erik Lauvås|Lauvås]]
*[[Ingjerd Schou|Schou]]
*[[Ulf Leirstein|Leirstein]]
*[[Elise Waagen|Bjørnebekk-Waagen]]
*[[Tage Pettersen|Pettersen]]
*[[Svein Roald Hansen|S.R. Hansen]]
*[[Ole André Myhrvold|Myhrvold]]
*[[Erlend Wiborg|Wiborg]]
*[[Freddy Øvstegård|Øvstegård]]
}}<noinclude>
[[Kategori:Navigasjonsmalar norsk politikk]]
</noinclude>
ly8ddnd3v51xgmdhp9jwxrtqrv9xmsc
Julian Ryerson
0
345989
3649630
3224465
2026-04-05T09:16:55Z
Migne
2086
3649630
wikitext
text/x-wiki
{{Infoboks fotballspelar
| namn = Julian Ryerson
| fødd = {{Fødselsdato og alder|1997|11|17}}
| føddstad = [[Lyngdal]]
| føddland = [[Noreg]]
| høgd = 170 cm
| kallenamn =
| posisjon = back/kant
| nvklubb = {{NOR}} [[Viking Fotballklubb|Viking]]
| draktnummer = 18
| ungdomsår =
| ungdomsklubb = {{NOR}} [[Lyngdal Idrettslag|Lyngdal]]
| klubbar ={{NOR}} [[Viking Fotballklubb|Viking]]
| år = 2013–
| kampar(mål) = 48 (4)
| landslag = {{NOR}} [[Noreg]] U21
| landslagår = 2017–
| landskampar(mål) = 8 (0)
| trenerår =
| trenerklubber =
| kloppdatert = 5. januar 2018
| lloppdatert = 5. januar 2018
}}
'''Julian Ryerson''' ({{fødd|17. november|1997|Ryerson}}) er ein norsk fotballspelar frå [[Lyngdal]] i [[Vest-Agder]] som sidan 2023 gjer teneste i den tyske fotballklubben [[Borussia Dortmund]]. Han er forsvarsspelar.
===Klubbspel===
Ryerson spelte frå 2015 for [[Viking FK]] i den norske eliteserien. Sommaren 2018 vart han overført til tyske Union Berlin, ein klubb som i 2019 rykte opp i bundesligaen. Her imponerte han med kontant backspel og offensive kvalitetar. I januar 2023 skreiv han kontrakt med topplaget Borussia Dortmund.
===Landslagsspel===
18. november 2020 fekk Ryerson sin fyrste landskamp då det såkalla naudlandslaget spelte uavgjort 1–1 mot [[Austerrike]] i [[Wien]]. Utover i 2021 og 2022 deltok han i mange kampar som innbytar. Sidan 2023-sesongen har han vore fyrstevalet på høgreback. Ryerson har skåra eitt landslagsmål, det kom i VM-kvalifiseringskampen mot [[Moldova]] på bortebane 22. mars 2025. Pr 1. april 2026 er han bokført med 41 landskampar.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:en:Julian Ryerson|Julian Ryerson]]» frå {{Wikipedia-utgåve|en}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31288 eu-football]
{{referansar}}
{{autoritetsdata}}
[[Kategori:Norske fotballspelarar]]
[[Kategori:Viking-spelarar]]
i32zyc07zlpyd0gmyjeih3uw5lwze5q
3649631
3649630
2026-04-05T09:17:11Z
Migne
2086
la til [[Kategori:Norske landslagsspelarar i fotball]] med [[WP:HotCat|HotCat]]
3649631
wikitext
text/x-wiki
{{Infoboks fotballspelar
| namn = Julian Ryerson
| fødd = {{Fødselsdato og alder|1997|11|17}}
| føddstad = [[Lyngdal]]
| føddland = [[Noreg]]
| høgd = 170 cm
| kallenamn =
| posisjon = back/kant
| nvklubb = {{NOR}} [[Viking Fotballklubb|Viking]]
| draktnummer = 18
| ungdomsår =
| ungdomsklubb = {{NOR}} [[Lyngdal Idrettslag|Lyngdal]]
| klubbar ={{NOR}} [[Viking Fotballklubb|Viking]]
| år = 2013–
| kampar(mål) = 48 (4)
| landslag = {{NOR}} [[Noreg]] U21
| landslagår = 2017–
| landskampar(mål) = 8 (0)
| trenerår =
| trenerklubber =
| kloppdatert = 5. januar 2018
| lloppdatert = 5. januar 2018
}}
'''Julian Ryerson''' ({{fødd|17. november|1997|Ryerson}}) er ein norsk fotballspelar frå [[Lyngdal]] i [[Vest-Agder]] som sidan 2023 gjer teneste i den tyske fotballklubben [[Borussia Dortmund]]. Han er forsvarsspelar.
===Klubbspel===
Ryerson spelte frå 2015 for [[Viking FK]] i den norske eliteserien. Sommaren 2018 vart han overført til tyske Union Berlin, ein klubb som i 2019 rykte opp i bundesligaen. Her imponerte han med kontant backspel og offensive kvalitetar. I januar 2023 skreiv han kontrakt med topplaget Borussia Dortmund.
===Landslagsspel===
18. november 2020 fekk Ryerson sin fyrste landskamp då det såkalla naudlandslaget spelte uavgjort 1–1 mot [[Austerrike]] i [[Wien]]. Utover i 2021 og 2022 deltok han i mange kampar som innbytar. Sidan 2023-sesongen har han vore fyrstevalet på høgreback. Ryerson har skåra eitt landslagsmål, det kom i VM-kvalifiseringskampen mot [[Moldova]] på bortebane 22. mars 2025. Pr 1. april 2026 er han bokført med 41 landskampar.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:en:Julian Ryerson|Julian Ryerson]]» frå {{Wikipedia-utgåve|en}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31288 eu-football]
{{referansar}}
{{autoritetsdata}}
[[Kategori:Norske fotballspelarar]]
[[Kategori:Viking-spelarar]]
[[Kategori:Norske landslagsspelarar i fotball]]
7tygdy9h1msccawq6yccksnjia83tux
3649632
3649631
2026-04-05T09:17:21Z
Migne
2086
la til [[Kategori:Borussia Dortmund-spelarar]] med [[WP:HotCat|HotCat]]
3649632
wikitext
text/x-wiki
{{Infoboks fotballspelar
| namn = Julian Ryerson
| fødd = {{Fødselsdato og alder|1997|11|17}}
| føddstad = [[Lyngdal]]
| føddland = [[Noreg]]
| høgd = 170 cm
| kallenamn =
| posisjon = back/kant
| nvklubb = {{NOR}} [[Viking Fotballklubb|Viking]]
| draktnummer = 18
| ungdomsår =
| ungdomsklubb = {{NOR}} [[Lyngdal Idrettslag|Lyngdal]]
| klubbar ={{NOR}} [[Viking Fotballklubb|Viking]]
| år = 2013–
| kampar(mål) = 48 (4)
| landslag = {{NOR}} [[Noreg]] U21
| landslagår = 2017–
| landskampar(mål) = 8 (0)
| trenerår =
| trenerklubber =
| kloppdatert = 5. januar 2018
| lloppdatert = 5. januar 2018
}}
'''Julian Ryerson''' ({{fødd|17. november|1997|Ryerson}}) er ein norsk fotballspelar frå [[Lyngdal]] i [[Vest-Agder]] som sidan 2023 gjer teneste i den tyske fotballklubben [[Borussia Dortmund]]. Han er forsvarsspelar.
===Klubbspel===
Ryerson spelte frå 2015 for [[Viking FK]] i den norske eliteserien. Sommaren 2018 vart han overført til tyske Union Berlin, ein klubb som i 2019 rykte opp i bundesligaen. Her imponerte han med kontant backspel og offensive kvalitetar. I januar 2023 skreiv han kontrakt med topplaget Borussia Dortmund.
===Landslagsspel===
18. november 2020 fekk Ryerson sin fyrste landskamp då det såkalla naudlandslaget spelte uavgjort 1–1 mot [[Austerrike]] i [[Wien]]. Utover i 2021 og 2022 deltok han i mange kampar som innbytar. Sidan 2023-sesongen har han vore fyrstevalet på høgreback. Ryerson har skåra eitt landslagsmål, det kom i VM-kvalifiseringskampen mot [[Moldova]] på bortebane 22. mars 2025. Pr 1. april 2026 er han bokført med 41 landskampar.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:en:Julian Ryerson|Julian Ryerson]]» frå {{Wikipedia-utgåve|en}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31288 eu-football]
{{referansar}}
{{autoritetsdata}}
[[Kategori:Norske fotballspelarar]]
[[Kategori:Viking-spelarar]]
[[Kategori:Norske landslagsspelarar i fotball]]
[[Kategori:Borussia Dortmund-spelarar]]
6x1kv7vjstfhgzxfzfnx3rcigqqtinf
3649633
3649632
2026-04-05T09:19:38Z
Migne
2086
3649633
wikitext
text/x-wiki
{{Infoboks fotballspelar
| namn = Julian Ryerson
| fødd = {{Fødselsdato og alder|1997|11|17}}
| føddstad = [[Lyngdal]]
| føddland = [[Noreg]]
| høgd = 183 cm
| kallenamn =
| posisjon = back/kant
| nvklubb = {{NOR}} [[Viking Fotballklubb|Viking]]
| draktnummer = 18
| klubbar ={{NOR}} [[Viking Fotballklubb|Viking]]
| år = 2013–
| kampar(mål) = 48 (4)
| landslag = {{NOR}} [[Noreg]]
| landslagår = 2020–
| landskampar(mål) = 39 (1)
| trenerår =
| trenerklubber =
| kloppdatert =
| lloppdatert = 5. april 2026
}}
'''Julian Ryerson''' ({{fødd|17. november|1997|Ryerson}}) er ein norsk fotballspelar frå [[Lyngdal]] i [[Vest-Agder]] som sidan 2023 gjer teneste i den tyske fotballklubben [[Borussia Dortmund]]. Han er forsvarsspelar.
===Klubbspel===
Ryerson spelte frå 2015 for [[Viking FK]] i den norske eliteserien. Sommaren 2018 vart han overført til tyske Union Berlin, ein klubb som i 2019 rykte opp i bundesligaen. Her imponerte han med kontant backspel og offensive kvalitetar. I januar 2023 skreiv han kontrakt med topplaget Borussia Dortmund.
===Landslagsspel===
18. november 2020 fekk Ryerson sin fyrste landskamp då det såkalla naudlandslaget spelte uavgjort 1–1 mot [[Austerrike]] i [[Wien]]. Utover i 2021 og 2022 deltok han i mange kampar som innbytar. Sidan 2023-sesongen har han vore fyrstevalet på høgreback. Ryerson har skåra eitt landslagsmål, det kom i VM-kvalifiseringskampen mot [[Moldova]] på bortebane 22. mars 2025. Pr 1. april 2026 er han bokført med 41 landskampar.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:en:Julian Ryerson|Julian Ryerson]]» frå {{Wikipedia-utgåve|en}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31288 eu-football]
{{referansar}}
{{autoritetsdata}}
[[Kategori:Norske fotballspelarar]]
[[Kategori:Viking-spelarar]]
[[Kategori:Norske landslagsspelarar i fotball]]
[[Kategori:Borussia Dortmund-spelarar]]
cgphgbb8ogzyqcuwqzc0dyzzui0a8iq
Brukar:Eniisi Lisika
2
369626
3649613
3288497
2026-04-04T19:40:23Z
CommonsDelinker
1379
Fjernar fila Reading_in_the_Crootch_or_Krotol_language.wav, sidan ho er sletta frå Commons av Jameslwoodward.
3649613
wikitext
text/x-wiki
[[Fil:Эниси_Лисика_(2019)._Eniisi_Lisika_(2019).png|mini|Ищите меня тут / Look for me here (''Na kultar nokhlu gau''): https://ru.wikipedia.org/wiki/Участник:Eniisi_Lisika).]]
<div style="float: left; border: solid #6ef7a7 1px; margin: 1px;">
{| cellspacing="0" style="width:238px;background:#c5fcdc;"
| style="width: 45px; height: 45px; background: #6ef7a7; text-align: center; font-size: 12pt;" |''''''kro-N''''''
| style="font-size: 8pt; padding: 4pt; line-height: 1.25em;" |Ina-tonk'yoshug '''satuma''' baazdul-don '''Krotol'-do''' shegami.
|}
</div>
8oy13hpqltswm408m7ug5mfg2tcsjek
Elise Waagen
0
393380
3649647
3646769
2026-04-05T11:24:43Z
HerVal7752
105842
+{{Stortingsrep 2025-2029}} mm.
3649647
wikitext
text/x-wiki
{{infoboks politikar}}
'''Elise Waagen''' ({{datoar}}) er ein norsk politikar frå Hannestad i [[Sarpsborg kommune|Sarpsborg]]. Ho har sidan 2017 representert [[Østfold]] og [[Arbeidarpartiet]] på [[Stortinget]].<ref name=Stor>{{stortingetbio|ELW}}</ref>
Elise Waagen deltok i 2011 på [[AUF]] sin sommarleir på [[Utøya i Hole]]. Under [[Terroråtaka 22. juli 2011|terroråtaket]] mot leiren vart ho skadeskoten i låret, ein skade det tok lang tid å utbetre.<ref name="utøya-tv2">{{Kilde www
|url = http://www.tv2.no/a/8332747/
|tittel = Ble skutt og havnet i rullestol etter Utøya – nå driver Elise (26) med krevende multisport
|besøksdato = 2017-04-01
|utgiver = TV2.no
|dato = 2016-05-25
}}</ref>
<ref name="utøya-fb">{{Kilde www
|url = https://www.f-b.no/nyheter/utoya/22-juli/na-er-elise-klar-for-nye-kamper/s/5-59-504166
|tittel = Nå er Elise klar for nye kamper
|besøksdato = 2017-04-01
|utgiver = Fredriksstad Blad
|dato = 2016-07-18
}}</ref>
Waagen var bystyremedlem i Sarpsborg frå 2015, der ho vart vald til leiar i utvalet for velferd og folkehelse.<ref name="rapport">«På vei mot Stortinget». ''Kommunal Rapport'', 16. mars 2017.</ref> Hausten 2017 kom ho inn på Stortinget som Arbeidarpartiet sin andrekandidat frå Østfold, attvald i 2021 og 2025.
== Kjelder ==
<references/>
{{Navboks
|namn = Elise Bjørnebekk-Waagen
|navbar = plain
|tittel = Relaterte artiklar
|listestil = padding:0px;font-size:111%;
|listepadding = 0px;
|liste1 =
{{Stortingsrep 2017-2021}}
{{Stortingsrep 2021-2025}}
{{Stortingsrep 2025-2029}}
}}
{{Autoritetsdata}}
[[Kategori:Stortingsrepresentantar for Østfold]]
[[Kategori:Stortingsrepresentantar frå Ap]]
[[Kategori:Stortingsrepresentantar 2017-2021]]
[[Kategori:Stortingsrepresentantar 2021-2025]]
[[Kategori:Folk frå Sarpsborg]]
kzdm7fdlw63nvcw3o9603434t9cz4bn
Mal:Stortingsrep 2021-2025
10
393455
3649648
3632571
2026-04-05T11:25:45Z
HerVal7752
105842
Elise Bjørnebekk-Waagen -> Elise Waagen
3649648
wikitext
text/x-wiki
{{navboks
| namn = Stortingsrep 2021-2025
| tittel = <small>[[Stortingsrepresentantar 2017-2021|før]]</small> ← [[Stortingsrepresentantar 2021-2025|Stortingsrepresentantar 2021-2025]] → <small>[[Stortingsrepresentantar 2025-2029|etter]]</small>
| status = collapsed
| tittelstil=background:#E5E4E2; color:black;
| gruppestil = background:#E5E4E2; color:black;
| stil=font-size: 85%;line-height: 1.7;font-weight:normal
| bodyclass=hlist
| gruppe1 = Akershus
| liste1 =
* [[Abid Raja|Raja]]
* [[Anne Kristine Linnestad|Linnestad]]
* [[Anniken Huitfeldt|Huitfeldt]]
* [[Else Marie Tveit Rødby|Rødby]]
* [[Hans Andreas Limi|Limi]]
* [[Henrik Asheim|Asheim]]
* [[Himanshu Gulati|Gulati]]
* [[Hårek Elvenes|Elvenes]]
* [[Jan Tore Sanner|Sanner]]
* [[Kirsti Bergstø|Bergstø]]
* [[Mani Hussaini|Hussaini]]
* [[Marie Sneve Martinussen|Martinussen]]
* [[Sigbjørn Gjelsvik|Gjelsvik]]
* [[Sverre Myrli|Myrli]]
* [[Tone Wilhelmsen Trøen|Trøen]]
* [[Turid Kristensen|Kristensen]]
* [[Tuva Moflag|Moflag]]
* [[Une Bastholm|Bastholm]]
* [[Åsmund Aukrust|Aukrust]]
| gruppe2 = Aust-Agder
| liste2 =
* [[Gro-Anita Mykjåland|Mykjåland]]
* [[Marius Nilsen|Nilsen]]
* [[Svein Harberg|Harberg]]
* [[Tellef Inge Mørland|Mørland]]
| gruppe3 = Buskerud
| liste3 =
* [[Even A. Røed|Røed]]
* [[Kathy Lie|Lie]]
* [[Lise Christoffersen|Christoffersen]]
* [[Masud Gharahkhani|Gharahkhani]]
* [[Morten Wold|Wold]]
* [[Per Olaf Lundteigen|Lundteigen]]
* [[Sandra Bruflot|Bruflot]]
* [[Trond Helleland|Helleland]]
| gruppe4 = Finnmark
| liste4 =
* [[Bengt Rune Strifeldt|Strifeldt]]
* [[Geir Iversen|Iversen]]
* [[Irene Ojala|Ojala]] <small> (Pasientfokus) </small>
* [[Marianne Sivertsen Næss|Næss]]
* [[Runar Sjåstad|Sjåstad]]
| gruppe5 = Hedmark
| liste5 =
* [[Anette Trettebergstuen|Trettebergstuen]] (Vara: [[Even Eriksen|Eriksen]])
* [[Anna Molberg|Molberg]]
* [[Emilie Enger Mehl|Mehl]]
* [[Lise Selnes|Selnes]]
* [[Nils Kristen Sandtrøen|Sandtrøen]]
* [[Tor André Johnsen|Johnsen]]
* [[Trygve Slagsvold Vedum|Vedum]]
| gruppe6 = Hordaland
| liste6 =
* [[Audun Lysbakken|Lysbakken]]
* [[Dag Inge Ulstein|Ulstein]]
* [[Eigil Knutsen|Knutsen]]
* [[Erna Solberg|Solberg]]
* [[Helge André Njåstad|Njåstad]]
* [[Kjersti Toppe|Toppe]]
* [[Liv Kari Eskeland|Eskeland]]
* [[Marte Mjøs Persen|Persen]] (Vara:[[Lubna Jaffery|Jaffery]], [[Benjamin Jakobsen|Jakobsen]])
* [[Nils T. Bjørke|Bjørke]]
* [[Odd Harald Hovland|Hovland]]
* [[Ove Trellevik|Trellevik]]
* [[Peter Christian Frølich|Frølich]]
* [[Linda Monsen Merkesdal|Merkesdal]]
* [[Silje Hjemdal|Hjemdal]]
* [[Sofie Marhaug|Marhaug]]
* [[Sveinung Rotevatn|Rotevatn]]
| gruppe7 = Møre og Romsdal
| liste7 =
* [[Birgit Oline Kjerstad|Kjerstad]]
* [[Frank Sve|Sve]]
* [[Geir Inge Lien|Lien]]
* [[Helge Orten|Orten]]
* [[Jenny Klinge|Klinge]]
* [[Per Vidar Kjølmoen|Kjølmoen]]
* [[Sylvi Listhaug|Listhaug]]
* [[Åse Kristin Bakke|Bakke]]
| gruppe8 = Nord-Trøndelag
| liste8 =
* [[André N. Skjelstad|Skjelstad]]
* [[Ingvild Kjerkol|Kjerkol]]
* [[Marit Arnstad|Arnstad]]
* [[Per Olav Tyldum|Tyldum]]
* [[Terje Sørvik|Sørvik]]
| gruppe9 = Nordland
| liste9 =
* [[Bjørnar Skjæran|Skjæran]]
* [[Bård Ludvig Thorheim|Thorheim]]
* [[Dagfinn Olsen|Olsen]]
* [[Geir-Asbjørn Jørgensen|Jørgensen]]
* [[Mona Fagerås|Fagerås]]
* [[Mona Nilsen|Nilsen]]
* [[Siv Mossleth|Mossleth]]
* [[Willfred Nordlund|Nordlund]]
* [[Øystein Mathisen|Mathisen]]
| gruppe10 = Oppland
| liste10 =
* [[Bengt Fasteraune|Fasteraune]]
* [[Carl I. Hagen|Hagen]]
* [[Kari-Anne Jønnes|Jønnes]]
* [[Marit Knutsdatter Strand|Strand]]
* [[Rigmor Aasrud|Aasrud]]
* [[Rune Støstad|Støstad]]
| gruppe11 = Oslo
| liste11 =
* [[Andreas Sjalg Unneland|Unneland]]
* [[Bjørnar Moxnes|Moxnes]]
* [[Christian Tybring-Gjedde|Tybring-Gjedde]]
* [[Espen Barth Eide|Eide]]
* [[Grunde Almeland|Almeland]]
* [[Guri Melby|Melby]]
* [[Heidi Nordby Lunde|Lunde]]
* [[Ine Marie Eriksen Søreide|Søreide]]
* [[Jonas Gahr Støre|Støre]] (Vara: [[Politikaren Frode Jacobsen|Jacobsen]])
* [[Kamzy Gunaratnam|Gunaratnam]]
* [[Kari Elisabeth Kaski|Kaski]]
* [[Lan Marie Nguyen Berg|Berg]]
* [[Marian Hussein|Hussein]]
* [[Mathilde Tybring-Gjedde|Tybring-Gjedde]]
* [[Mudassar Kapur|Kapur]]
* [[Nikolai E. Astrup|Astrup]]
* [[Ola Elvestuen|Elvestuen]]
* [[Rasmus Hansson|Hansson]]
* [[Seher Aydar|Aydar]]
* [[Trine Lise Sundnes|Sundnes]]
| gruppe12 = Rogaland
| liste12 =
* [[Aleksander Stokkebø|Stokkebø]]
* [[Geir Pollestad|Pollestad]]
* [[Hadia Tajik|Tajik]]
* [[Ingrid Fiskaa|Fiskaa]]
* [[Lisa Marie Klungland|Klungland]]
* [[Margret Hagerup|Hagerup]]
* [[Mímir Kristjánsson|Kristjánsson]]
* [[Olaug Bollestad|Bollestad]]
* [[Roy Steffensen|Steffensen]]
* [[Sveinung Stensland|Stensland]]
* [[Terje Halleland|Halleland]]
* [[Tina Bru|Bru]]
* [[Torstein Solberg|Solberg]]
* [[Tove Elise Madland|Madland]]
| gruppe13 = Sogn og Fjordane
| liste13 =
* [[Alfred Bjørlo|Bjørlo]]
* [[Erling Sande|Sande]]
* [[Olve Grotle|Grotle]]
* [[Torbjørn Vereide|Vereide]]
| gruppe14 = Sør-Trøndelag
| liste14 =
* [[Eva Kristin Hansen|Hansen]]
* [[Hege Bae Nyholt|Nyholt]]
* [[Heidi Greni|Greni]]
* [[Jorodd Asphjell|Asphjell]]
* [[Kirsti Leirtrø|Leirtrø]]
* [[Lars Haltbrekken|Haltbrekken]]
* [[Linda Hofstad Helleland|Helleland]]
* [[Mari Lønseth|Lønseth]]
* [[Ola Borten Moe|Moe]] (Vara: [[Maren Grøthe|Grøthe]])
* [[Sivert Bjørnstad|Bjørnstad]]
| gruppe15 = Telemark
| liste15 =
* [[Bård Hoksrud|Hoksrud]]
* [[Lene Vågslid|Vågslid]]
* [[Mahmoud Farahmand|Farahmand]]
* [[Terje Lien Aasland|Aasland]]
* [[Tobias Drevland Lund|Lund]]
* [[Åslaug Sem-Jacobsen|Sem-Jacobsen]]
| gruppe16 = Troms
| liste16 =
* [[Cecilie Myrseth|Myrseth]]
* [[Erlend Svardal Bøe|Bøe]]
* [[Nils-Ole Foshaug|Foshaug]]
* [[Per-Willy Amundsen|Amundsen]]
* [[Sandra Borch|Borch]]
* [[Torgeir Knag Fylkesnes|Fylkesnes]]
| gruppe17 = Vest-Agder
| liste17 =
* [[Gisle Meininger Saudland|Saudland]]
* [[Anja Abusland|Abusland]]
* [[Ingunn Foss|Foss]]
* [[Ingvild Wetrhus Thorsvik|Thorsvik]]
* [[Kari Henriksen|Henriksen]]
* [[Kjell Ingolf Ropstad|Ropstad]]
| gruppe18 = Vestfold
| liste18 =
* [[Erlend Larsen|Larsen]]
* [[Grete Wold|Wold]]
* [[Kathrine Kleveland|Kleveland]]
* [[Lene Westgaard-Halle|Westgaard-Halle]]
* [[Maria Aasen-Svensrud|Aasen-Svensrud]]
* [[Morten Stordalen|Stordalen]]
* [[Truls Vasvik|Vasvik]]
| gruppe19 = Østfold
| liste19 =
* [[Elise Waagen|Bjørnebekk-Waagen]]
* [[Erlend Wiborg|Wiborg]]
* [[Freddy Øvstegård|Øvstegård]]
* [[Ingjerd Schou|Schou]]
* [[Jon-Ivar Nygård|Nygård]] (Vara: [[Solveig Vitanza|Vitanza]])
* [[Kjerstin Wøyen Funderud|Funderud]]
* [[Ole André Myhrvold|Myhrvold]]
* [[Stein Erik Lauvås|Lauvås]]
* [[Tage Pettersen|Pettersen]]
}}
<noinclude>
[[Kategori:Navigasjonsmalar norsk politikk]]
</noinclude>
agly5m9cdwn0itnn255nbpiyzxthfer
Ighiu
0
397994
3649635
3507451
2026-04-05T10:54:14Z
HerVal7752
105842
Geoboks
3649635
wikitext
text/x-wiki
{{geoboks|kommune
|bilete = Ighiu Biserica reformata.JPG
|bilettekst = Reformert kyrkje i Ighiu
|våpen = ROU AB Ighiu CoA.jpg
|fylke = [[Alba fylke|Alba]]
|borgarmeister = Traian Rusu
|folketal_i_år = 2021
|folketal merknad = <ref name="rpl2021"/>
|folketal = 6543
|høgd = 254
|postnummer = 517360
}}
'''Ighiu'''{{mrk|[[ungarsk]] ''Magyarigen'', [[tysk]] ''Grobendorf''}} er ein kommune i [[Alba fylke]] i [[Romania]]. Kommunen er meint å inngå i storbyområdet til fylkeshovudstaden [[Alba Iulia]].<ref name="zona_noi"/>
== Busetnader ==
[[File:Ighiu jud Alba.svg|mini|300px|Kommunen Ighiu innanfor Alba fylke]]
Ighiu er ein ''[[comună]]'' (landkommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Ighiu || 1 266 || 1 360
|-
| style=text-align:left; | {{ikkjeraud|Bucerdea Vinoasă}} || 873 || 835
|-
| style=text-align:left; | {{ikkjeraud|Ighiel}} || 930 || 883
|-
| style=text-align:left; | {{ikkjeraud|Șard}} || 2 208 || 2 496
|-
| style=text-align:left; | {{ikkjeraud|Țelna}} || 1 006 || 969
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 15. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
<ref name="zona_noi">{{Kjelde www
|url = https://www.libertatea.ro/stiri/zone-metropolitane-romania-3000128
|tittel = Noi clarificări de la autorități despre cele 22 de zone metropolitane din România ''(Nye avklaringar frå styresmaktene om dei 22 storbyområda i Romania)''
|vitja = 27. oktober 2022
|utgjevingsdato = 22. mai 2020
|utgjevar = Libertatea
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Comuna Ighiu, Alba|Comuna Ighiu, Alba]]» frå {{Wikipedia-utgåve|ro}}, den 15. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Comună i Alba fylke]]
mokuiwds4jtkbfez34dtug53x5iygj9
Săsciori
0
397996
3649636
3575310
2026-04-05T10:55:22Z
HerVal7752
105842
Geoboks
3649636
wikitext
text/x-wiki
{{geoboks|kommune
|bilete = Ceramics sasciori.jpg
|fylke = [[Alba fylke|Alba]]
|borgarmeister = Nicolae Florin Morar
|folketal_i_år = 2021
|folketal merknad = <ref name="rpl2021"/>
|folketal = 5820
|høgd = 551
|postnummer = 517660
}}
'''Săsciori'''{{mrk|[[ungarsk]] ''Szászcsór'', [[tysk]] ''Scweis''}} er ein kommune i [[Alba fylke]] i [[Romania]].
== Busetnader ==
[[File:Sasciori jud Alba.svg|mini|300px|Kommunen Săsciori innanfor Alba fylke]]
Săsciori er ein ''[[comună]]'' (landkommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Săsciori || 1 287 || 1 632
|-
| style=text-align:left; | {{ikkjeraud|Căpâlna}} || 842 || 624
|-
| style=text-align:left; | {{ikkjeraud|Dumbrava i Săsciori|Dumbrava}} || 122 || 107
|-
| style=text-align:left; | {{ikkjeraud|Laz}} || 385 || 334
|-
| style=text-align:left; | {{ikkjeraud|Loman}} || 578 || 549
|-
| style=text-align:left; | {{ikkjeraud|Pleși}} || 97 || 95
|-
| style=text-align:left; | {{ikkjeraud|Răchita}} || 959 || 1 027
|-
| style=text-align:left; | {{ikkjeraud|Sebeșel}} || 1 255 || 1 277
|-
| style=text-align:left; | {{ikkjeraud|Tonea}} || 232 || 175
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 15. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Comuna Săsciori, Alba|Comuna Săsciori, Alba]]» frå {{Wikipedia-utgåve|ro}}, den 15. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Comună i Alba fylke|Sasciori]]
1vbdvpnghx3ghmanfklk6iq3yy3mn6x
Chișineu-Criș
0
398010
3649637
3507291
2026-04-05T10:58:39Z
HerVal7752
105842
Geoboks
3649637
wikitext
text/x-wiki
{{geoboks|by
|bilete = Panneau de signalisation routière de direction à Chișineu-Criș.jpg
|bilettekst = Innkøyringa til Chișineu-Criș
|våpen = ROU AR Chisineu-Cris CoA.jpg
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Florin-Flavius Chereji
|høgd = 127
|postnummer = 315100
}}
'''Chișineu-Criș''' ([[ungarsk]] ''Kisjenő'' ) er ein by i [[Arad fylke]] i [[Romania]].
== Busetnader ==
[[File:Chisineu-Cris jud Arad.svg|mini|300px|Kommunen Chișineu-Criș innanfor Arad fylke]]
Chișineu-Criș er ein ''[[oraș]]'' (mindre bykommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Chișineu-Criș || 6 194 || 5 463
|-
| style=text-align:left; | {{ikkjeraud|Nădab}} || 1 793 || 1 749
|}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Chișineu-Criș|Chișineu-Criș]]» frå {{Wikipedia-utgåve|ro}}, den 15. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke|Chisineu-Cris]]
5hzq1upafx64ftqj5v5o14m20enlbrv
Curtici
0
398012
3649638
3507030
2026-04-05T11:00:28Z
HerVal7752
105842
Geoboks
3649638
wikitext
text/x-wiki
{{geoboks|by
|bilete = RO AR Panoramic view of Curtici.jpg
|bilettekst = Frå sentrum av Curtici
|våpen = ROU AR Curtici CoA.gif
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Ioan-Bogdan Ban
|postnummer = 315200
}}
'''Curtici'''{{mrk|[[ungarsk]] ''Kürtös'', [[tysk]] ''Kurtitsch''}} er ein by i [[Arad fylke]] i [[Romania]].
== Busetnader ==
[[File:Curtici jud Arad.svg|mini|300px|Kommunen Curtici innanfor Arad fylke]]
Curtici er ein ''[[oraș]]'' (mindre bykommune) med berre den eine busetnaden:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Curtici || 7 453 || 7 279
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Curtici|Curtici]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke]]
smjxd3ar6qcjykrbjq86d5ykq77hn85
Ineu i Arad
0
398013
3649639
3507032
2026-04-05T11:01:50Z
HerVal7752
105842
Geoboks
3649639
wikitext
text/x-wiki
{{geoboks|by
|namn = Ineu
|bilete = Cetatea Ineului.jpg
|bilettekst = Festning frå 1200-talet i Ineu
|våpen = ROU AR Ineu CoA.jpg
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Călin-Ilie Abrudan
|høgd = 116
|postnummer = 315300
}}
'''Ineu'''{{mrk|[[ungarsk]] ''Borosjenő'', [[serbisk]] Јенопоље/''Jenopolje'', [[tyrkisk]] ''Yanova''}} er ein by i [[Arad fylke]] i [[Romania]].
== Busetnader ==
[[File:Ineu jud Arad.svg|mini|300px|Kommunen Ineu innanfor Arad fylke]]
Ineu er ein ''[[oraș]]'' (mindre bykommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Ineu || 8 377 || 7976
|-
| style=text-align:left; | {{ikkjeraud|Mocrea}} || 883 || 831
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Ineu|Ineu]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke]]
mr2armem7zu0tug15frzlgw5x1zex0t
Lipova
0
398014
3649640
3507033
2026-04-05T11:02:58Z
HerVal7752
105842
Geoboks
3649640
wikitext
text/x-wiki
{{geoboks|by
|bilete = Nicolae Balcescu Lipova3.jpg
|bilettekst = Frå sentrum av Lipova
|våpen = ROU AR Lipova CoA.jpg
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Florin-Fabius Pera
|høgd = 153
|postnummer = 315400
}}
'''Lipova'''{{mrk|[[ungarsk]] ''Lippa'', [[tysk]] ''Lippa''}} er ein by i [[Arad fylke]] i [[Romania]].
== Busetnader ==
[[File:Lipova jud Arad.svg|mini|300px|Kommunen Lipova innanfor Arad fylke]]
Lipova er ein ''[[oraș]]'' (mindre bykommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Lipova || 7 292 || 7 191
|-
| style=text-align:left; | {{ikkjeraud|Radna}} || 2 082 || 2 009
|-
| style=text-align:left; | {{ikkjeraud|Șoimoș}}|| 929 || 840
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Lipova|Lipova]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke]]
20vbkrelobe0dpoh3715dhtaxyrabmi
Nădlac
0
398015
3649641
3507034
2026-04-05T11:04:00Z
HerVal7752
105842
Geoboks
3649641
wikitext
text/x-wiki
{{geoboks|by
|bilete = Nădlac - view from the church tower I.jpg
|bilettekst = Utsyn over Nădlac
|våpen = ROU AR Nadlac CoA.jpg
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Ioan-Radu Mărginean
|høgd = 85
|postnummer = 315500
}}
'''Nădlac'''{{mrk|[[ungarsk]] ''Nagylak'', [[tysk]] ''Nadlak'', [[slovakisk]] ''Nadlak'', [[serbisk]] Надлак/''Nadlak''}} er ein by i [[Arad fylke]] i [[Romania]].
== Busetnader ==
[[File:Nadlac jud Arad.svg|mini|300px|Kommunen Nădlac innanfor Arad fylke]]
Nădlac er ein ''[[oraș]]'' (mindre bykommune) med berre denne eine busetnaden:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Nădlac || 7 398 || 6 713
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Nădlac|Nădlac]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke|Nadlac]]
2lh121js683ym6as4jlpfdrffr56wr4
Pâncota
0
398016
3649642
3507035
2026-04-05T11:05:01Z
HerVal7752
105842
Geoboks
3649642
wikitext
text/x-wiki
{{geoboks|by
|bilete = Castel dietrich sulkowski.jpg
|bilettekst = Borg i Pâncota på gammalt postkort
|våpen = ROU AR Pancota CoA.gif
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Dan-Ștefan Pocrișer
|høgd = 192
|postnummer = 315500
}}
'''Pâncota'''{{mrk|[[ungarsk]] ''Pankota'', [[tysk]] ''Pankota''}} er ein by i [[Arad fylke]] i [[Romania]].
== Busetnader ==
[[File:Pancota jud Arad.svg|mini|300px|Kommunen Pâncota innanfor Arad fylke]]
Pâncota er ein ''[[oraș]]'' (mindre bykommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Pâncota || 5 526 || 5 455
|-
| style=text-align:left; | {{ikkjeraud|Măderat}} || 1 420 || 1 332
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Pâncota|Pâncota]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke|Pancota]]
gx97c0ikzcb06tb63h1tcz0yun81dr0
Pecica
0
398017
3649643
3567383
2026-04-05T11:07:07Z
HerVal7752
105842
Geoboks
3649643
wikitext
text/x-wiki
{{geoboks|by
|bilete = Pecica Ansamblul urban (7).jpg
|bilettekst = Kyrkje i Pecica
|land = Romania
|våpen = ROU AR Pecica CoA.jpg
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Petru Antal
|høgd = 100
|postnummer = 317235
}}
'''Pecica'''{{mrk|[[ungarsk]] ''Pécska'', [[tysk]] ''Petschka'', [[serbisk]] Печка/''Pečka''}} er ein by i [[Arad fylke]] i [[Romania]]. Pecica vart oppretta som bykommune (''oraș'') i 2004.<ref name="bystatus"/>
== Busetnader ==
[[File:Pecica jud Arad.svg|mini|300px|Kommunen Pecica innanfor Arad fylke]]
Pecica er ein ''[[oraș]]'' (mindre bykommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Pecica || 11 266 || 10 613
|-
| style=text-align:left; | {{ikkjeraud|Bodrogu Vechi}} || 4 || 23
|-
| style=text-align:left; | {{ikkjeraud|Sederhat}} || 311 || 259
|-
| style=text-align:left; | {{ikkjeraud|Turnu}} || 1 181 || 1 055
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
<ref name="bystatus">{{Kjelde www
|url=https://legislatie.just.ro/Public/DetaliiDocumentAfis/51035
|tittel=LEGE nr. 83 din 5 aprilie 2004
|utgjevar=Portal legislativ
|vitja=8 september 2024
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Pecica|Pecica]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke|Pecica]]
kk503e1rbvdqfp7tvz8rw6few0l3pcv
Sântana
0
398018
3649644
3567379
2026-04-05T11:08:17Z
HerVal7752
105842
Geoboks
3649644
wikitext
text/x-wiki
{{geoboks|by
|bilete = Kirchejesu.jpg
|bilettekst = Kyrkje i Sântana
|våpen = ROU AR Santana CoA.jpg
|fylke = [[Arad fylke|Arad]]
|borgarmeister = Daniel-Sorin Tomuța
|høgd = 99
|postnummer = 317280
}}
'''Sântana'''{{mrk|[[ungarsk]] ''Újszentanna'', [[tysk]] ''Sanktanna''}} er ein by i [[Arad fylke]] i [[Romania]]. Sântana vart oppretta som bykommune (''oraș'') i 2003.<ref name="bystatus"/>
== Busetnader ==
[[File:Santana jud Arad.svg|mini|300px|Kommunen Sântana innanfor Arad fylke]]
Sântana er ein ''[[oraș]]'' (mindre bykommune) med desse busetnadane:
{| class="wikitable"; style=text-align:right;
|-
! !! Folketal 2011<ref name="rpl2011"/> !! Folketal 2021<ref name="rpl2021"/>
|-
| style=text-align:left; | Sântana || 10 134 || 11 164
|-
| style=text-align:left; | {{ikkjeraud|Caporal Alexa}} || 1 294 || 1 296
|}
==Merknader==
{{merknadar}}
== Kjelder ==
<references>
<ref name="rpl2011">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2021/11/rpl_2011_populatia-pe-categorii-de-localitati.xls
|tittel = Populatia stabila (rezidenta) pe judete, categorii de localitati, municipii, orase, comune si localitati componente ''(Stabil befolkning (busett) etter fylke, lokalitetskategoriar, municipiu, oraș, comună og komponentlokalitetar)''
|vitja = 16. april 2022
|utgjevingsdato = 31. oktober 2011
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
}}</ref>
<ref name="rpl2021">{{Kjelde www
|url = https://www.recensamantromania.ro/wp-content/uploads/2023/05/Tabel-1.22.xlsx
|tittel = Populația rezidentă (Sexe, Județe, Municipii, orașe și comune*, Sate*) ''(Busett befolkning (kjønn, fylke, municipiu, oraș og comună, landsby))''
|vitja = 20. september 2023
|utgjevingsdato = 1. desember 2021
|utgjevar = Institutul Național de Statistică ''(Det nasjonale instituttet for statistikk)''
|sitat =
}}</ref>
<ref name="bystatus">{{Kjelde www
|url=https://legislatie.just.ro/Public/DetaliiDocumentAfis/48758
|tittel=LEGE nr. 583 din 22 decembrie 2003
|utgjevar=Portal legislativ
|vitja=8 september 2024
}}</ref>
</references>
{{refopning}}
*''Delar av denne artikkelen bygger på «[[:ro:Sântana|Sântana]]» frå {{Wikipedia-utgåve|ro}}, den 16. april 2022.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
*{{offisiell nettstad}}
{{spire|geografi|Romania}}
{{Autoritetsdata}}
[[Kategori:Oraș i Arad fylke|Santana]]
bq1fusgd18hnym4ssx6kxixqth6qsui
Mal:Sjå også
10
411877
3649649
3512731
2026-04-05T11:26:02Z
Marcuspn
143881
Forsøk å leggja til dokumentasjon
3649649
wikitext
text/x-wiki
<div class="utdypende-artikkel" style="padding-left:2em;">''Sjå også [[{{{1}}}]]<!--
-->{{#if:{{{2|}}}|<!--
-->{{#if:{{{3|}}}|<!--
-->{{#if:{{{4|}}}|<!--
-->{{#if:{{{5|}}}|<!--
-->, [[{{{2}}}]], [[{{{3}}}]], [[{{{4}}}]] og [[{{{5}}}]]|<!--
-->, [[{{{2}}}]], [[{{{3}}}]] og [[{{{4}}}]]}}|<!--
-->, [[{{{2}}}]] og [[{{{3}}}]]}}|<!--
--> og [[{{{2}}}]]}}}}<!--
-->.''</div><noinclude>
{{DEFAULTSORT:{{PAGENAME}}}}
[[Kategori:Navigasjonsmalar]]
<templatedata>
{
"params": {
"1": {
"label": "Artikkel 1",
"required": true
},
"2": {
"label": "Artikkel 2"
},
"3": {
"label": "Artikkel 3"
},
"4": {
"label": "Artikkel 4"
},
"5": {
"label": "Artikkel 5"
}
},
"description": "Legg til ei linje med innrykk som peiker til andre artiklar som er relevante til denne artikkelen eller seksjonen."
}
</templatedata></noinclude>
2ocparv5dxfy9ck174w5ya0c8a9958o
3649653
3649649
2026-04-05T11:37:03Z
Marcuspn
143881
3649653
wikitext
text/x-wiki
<div class="utdypende-artikkel" style="padding-left:2em;">''Sjå også [[{{{1}}}]]<!--
-->{{#if:{{{2|}}}|<!--
-->{{#if:{{{3|}}}|<!--
-->{{#if:{{{4|}}}|<!--
-->{{#if:{{{5|}}}|<!--
-->, [[{{{2}}}]], [[{{{3}}}]], [[{{{4}}}]] og [[{{{5}}}]]|<!--
-->, [[{{{2}}}]], [[{{{3}}}]] og [[{{{4}}}]]}}|<!--
-->, [[{{{2}}}]] og [[{{{3}}}]]}}|<!--
--> og [[{{{2}}}]]}}}}<!--
-->.''</div><noinclude>
{{DEFAULTSORT:{{PAGENAME}}}}
[[Kategori:Navigasjonsmalar]]
<templatedata>
{
"params": {
"1": {
"label": "Artikkel 1",
"required": true
},
"2": {
"label": "Artikkel 2"
},
"3": {
"label": "Artikkel 3"
},
"4": {
"label": "Artikkel 4"
},
"5": {
"label": "Artikkel 5"
}
},
"description": "Legg til ei linje med innrykk som peiker til andre artiklar som er relevante for denne artikkelen eller seksjonen. Støttar peiking til fleire artiklar. Ikkje bruk wiki-lenker."
}
</templatedata></noinclude>
tg59gmqv59kglgvyi3t4ux422vxgrfs
3649656
3649653
2026-04-05T11:46:11Z
Marcuspn
143881
Føreslår at denne vert fletta med Mal:Sjå
3649656
wikitext
text/x-wiki
<noinclude>{{flett|Sjå}}</noinclude><div class="utdypende-artikkel" style="padding-left:2em;">''Sjå også [[{{{1}}}]]<!--
-->{{#if:{{{2|}}}|<!--
-->{{#if:{{{3|}}}|<!--
-->{{#if:{{{4|}}}|<!--
-->{{#if:{{{5|}}}|<!--
-->, [[{{{2}}}]], [[{{{3}}}]], [[{{{4}}}]] og [[{{{5}}}]]|<!--
-->, [[{{{2}}}]], [[{{{3}}}]] og [[{{{4}}}]]}}|<!--
-->, [[{{{2}}}]] og [[{{{3}}}]]}}|<!--
--> og [[{{{2}}}]]}}}}<!--
-->.''</div><noinclude>
{{DEFAULTSORT:{{PAGENAME}}}}
[[Kategori:Navigasjonsmalar]]
<templatedata>
{
"params": {
"1": {
"label": "Artikkel 1",
"required": true
},
"2": {
"label": "Artikkel 2"
},
"3": {
"label": "Artikkel 3"
},
"4": {
"label": "Artikkel 4"
},
"5": {
"label": "Artikkel 5"
}
},
"description": "Legg til ei linje med innrykk som peiker til andre artiklar som er relevante for denne artikkelen eller seksjonen. Støttar peiking til fleire artiklar. Ikkje bruk wiki-lenker."
}
</templatedata></noinclude>
i0nhk9z3szpiawjs59p22qpluecs36k
Cyornis
0
413953
3649626
3614172
2026-04-05T08:45:52Z
Ranveig
39
Omvend rekkjefølgje for tala i Pie chart
3649626
wikitext
text/x-wiki
{{taksoboksLua|taksonomi_WD=ja
| underfamilie = Niltavinae
| bilete = Blue throated flycatcher thattekadu.jpg
| bilettekst = Nymfeflugesnappar (C. rubeculoides), hannfugl
}}
'''''Cyornis''''' er ei [[biologisk slekt]] av [[flugesnapparar]] med 32 medlemar som er utbreidd i [[Den orientalske regionen]] frå [[Himalaya]] til [[Sulawesi]]. [[Verdas naturvernunion]], IUCN, har kategorisert to artar i slekta som kritisk truga, og nær 50 % av dei kategoriserte artane er raudlista.<ref name=ioc/>
Slekta ''Cyornis'' vart introdusert i 1843 av den britiske zoologen Edward Blyth, men utan å gje opp nokon typeart.<ref name=blyth/> Slektsnamnet kombinerer det antikke [[gresk]]e ''kuanos'' som betyr «mørk blå» med ''ornis'' som betyr «fugl».<ref name=jobling/>
== Skildring ==
Dette er små til mellomstore einsarta flugesnapparar; mange arter er 15 cm i kroppslengd. Det er grovt rekna to hovudgrupper av fjørdrakter. Den største gruppa har dei mest iaugefallande hannfuglar i blått, med bryst i raudbrunt eller kvitt og elles kvit underside. Hoene er i brunt, raudbrunt, oransje nyansar og kvit buk. Denne kombinasjonen gjelder 23 av dei 32 artane. I dei resterande 9 artane er hannfuglar brune som hoene med lys eller nær kvit underside. Den minste av dei blå artane er [[blåstrupeflugesnappar]] som lever på Malayahalvøya, Sumatra og Borneo på 13–14 cm. Moglegvis er [[bleikhakeflugesnappar]], frå Himalaya til sørlege Myanmar, den største med kroppslengd på opptil 18 cm.
== Utbreiing{{mrk|Informasjon om utbreiing i artikkelen er frå data i IOC World Bird List<ref name=ioc/> og frå artiklar tilgjengelege frå ''Birds of the World, Old World Flycatchers (Muscicapidae)''<ref name=bow/>}} ==
Ein kan finne mest mangfald av ''Cyornis'' på [[Borneo]], 11 artar i slekta kan observerast der. [[Sumatra]] har registrert 7 artar. Om ein tar med dei store øyane er 22-23 artar å rekne som øyartar, fleire av dei på svært innskrenka utbreiingsområde.
Generelt er ''Cyornis'' [[standfuglar]], men dei som hekkar lengst nord og høgtliggande er [[trekkfuglar]]. Fem artar er hekkar delvis inn i Himalaya. Av dei er [[arunachalflugesnappar]], ''Cyornis magnirostris'', ein trekkfugl som overvintrar på Malayahalvøya. Også [[nymfeflugesnappar]] (''C. rubeculoides'') trekker etter dette mønsteret, men overvintrar lengere mot vest.
<gallery mode=packed>
Tickell's Blue Flycatcher at Nilgiris.jpg|[[Buskflugesnappar]], ''Cyornis tickelliae''
Hainan Blue Flycatcher (female, ssp. klossi) 0A2A3136.jpg|[[Koboltflugesnappar]], ''C. hainanus'', hoe
Hainan Blue Flycatcher (male, ssp hainanus) 0A2A7225.jpg|[[Koboltflugesnappar]], ''C. hainanus'', hann
White-bellied Blue Flycatcher SM.jpg|[[Kvitbukflugesnappar]], ''Cyornis pallidipes''
Mangrove Blue Flycatcher, Cagayan de Oro, Philippines 2.jpg|[[Mangroveflugesnappar]], ''Cyornis rufigastra''
</gallery>
=== Status ===
{{Image frame
|width = 210
|align=right
|pos=bottom
|content=<div style="color:black; background-color: #F9F9F9; color:black; font-size: 100%; text-align: left;">
{{pie chart
| caption = Raudlista for ''Cyornis'' per '''2023''', fordeling over kategoriar
| label4 = CR - kritisk truga 2
| color4 = #cc3333
| value4 = 7
| label3 = VU - sårbar 3
| color3 = #cc9900
| value3 = 10
| label2 = NT - nær truga 9
| color2 = #99cc99
| value2 = 31
| label1 = LC - livskraftig 15
| color1 = #006666
| value1 = 52
}}
</div>
|caption=IUCN raudlistekategori er etter ''[[IOC World Bird List]] V14.1, 2024''. 3 artar lista er ikkje godtatte av IUCN, er ikkje kategoriserte og ikkje medrekna i prosentvis fordeling.
}}
[[Ravineflugesnappar]] (''C. banyumas'') på Java er kritisk truga, CR, med færre enn 1000 attlevande modne individ. Grunnen til denne statusen er tap av habitat og fangst for burfuglhandel.<ref name=banyumas/> [[Medanflugesnappar]] (''C. ruckii'') er den andre arten i slekta som er kritisk truge. Populasjonen er estimert til å ligge under 50 individ. Den siste observasjonen er frå 1918. Leveområdet var på Nord-Sumatra.<ref name=ruckii/>
== Artsliste ==
Per 2024 har IOC lista opp 32 artar i [[IOC-lista|IOC Word Bird List]].<ref name=ioc/> Talet er aukande, til dømes var det berre 21 artar i utgåva frå mars 2008.<ref name=ioc08/>
Norske artsnamn er etter ''Norske navn på verdens fugler'':<ref name=NNKF/>
<div class="references-small" style="-moz-column-count:2; column-count:2;">
* [[Asurflugesnappar]], ''C. unicolor'', Pale Blue Flycatcher, <small>Blyth, 1843, (LC)</small>
:
* [[Apsaraflugesnappar]], ''C. glaucicomans'', Chinese Blue Flycatcher, <small>Thayer & Bangs, 1909, (LC)</small>
:
* [[Nymfeflugesnappar]], ''C. rubeculoides'', Blue-throated Blue Flycatcher, <small>(Vigors, 1831), (LC)</small>
:
* [[Koboltflugesnappar]], ''C. hainanus'', Hainan Blue Flycatcher, <small>(Ogilvie-Grant, 1900), (LC)</small>
:
* [[Borneoflugesnappar]], ''C. superbus'', Bornean Blue Flycatcher, <small>Stresemann, 1925, (LC)</small>
:
* [[Blåstrupeflugesnappar]], ''C. turcosus'', Malaysian Blue Flycatcher, <small>Brüggemann, 1877, (NT)</small>
:
* [[Svartkinnflugesnappar]], ''C. lemprieri'', Palawan Blue Flycatcher, <small>(Sharpe, 1884), (NT)</small>
:
* [[Sundaflugesnappar]], ''C. caerulatus'', Sunda Blue Flycatcher, <small>(Bonaparte, 1857), (VU)</small>
:
* [[Blåbrystflugesnappar]], ''C. herioti'', Blue-breasted Blue Flycatcher, <small>Wardlaw-Ramsay, RG, 1886, (NT)</small>
:
* [[Edelflugesnappar]], ''C. camarinensis'', Rufous-breasted Blue Flycatcher, <small>(Rand & Rabor, 1967), (VU)</small>
:
* [[Raudhaleflugesnappar]], ''C. ruficauda'', Philippine Jungle Flycatcher, <small>(Sharpe, 1877), (LC)</small>
:
* [[Suluflugesnappar]], ''C. ocularis'', Sulu Jungle Flycatcher, <small>(Bourns & Worcester, 1894)</small>
:IOC har nyleg splitta taksonet frå ''C. ruficauda'', ikkje anerkjent av Birdlife International
* [[Raudstjertflugesnappar]], ''C. ruficrissa'', Crocker Jungle Flycatcher, <small>(Sharpe, 1887)</small>
:IOC har nyleg splitta taksonet frå ''C. ruficauda'', ikkje anerkjent av Birdlife International
* [[Kvitbukflugesnappar]], ''C. pallidipes'', White-bellied Blue Flycatcher, <small>(Jerdon, 1840), (LC)</small>
:
* [[Brunbrystflugesnappar]], ''C. brunneatus'', Brown-chested Jungle Flycatcher, <small>(Slater, HH, 1897), (VU)</small>
:
* [[Nikobarflugesnappar]], ''C. nicobaricus'', Nicobar Jungle Flycatcher, <small>(Richmond, 1902), (NT)</small>
:
* [[Gråbrystflugesnappar]], ''C. umbratilis'', Grey-chested Jungle Flycatcher, <small>(Strickland, 1849), (NT)</small>
:
* [[Arunachalflugesnappar]], ''C. magnirostris'', Large Blue Flycatcher, <small>Blyth, 1849, (NT)</small>
:
* [[Buskflugesnappar]], ''C. tickelliae'', Tickell's Blue Flycatcher, <small>Blyth, 1843, (LC)</small>
:
* [[Indokinaflugesnappar]], ''C. sumatrensis'', Indochinese Blue Flycatcher, <small>(Sharpe, 1879), (LC)</small>
:
* [[Ravineflugesnappar]], ''C. whitei'', Hill Blue Flycatcher, <small>Harington, 1908, (LC)</small>
:
* [[Mangroveflugesnappar]], ''C. rufigastra'', Mangrove Blue Flycatcher, <small>(Raffles, 1822), (LC)</small>
:
* [[Alveflugesnappar]], ''C. omissus'', Sulawesi Blue Flycatcher, <small>(Hartert, EJO, 1896), (LC)</small>
:
* [[Kalaoflugesnappar]], ''C. kalaoensis'', Kalao Blue Flycatcher, <small>(Hartert, EJO, 1896), ()</small>
:
* [[Ravineflugesnappar]], ''C. banyumas'', Javan Blue Flycatcher, <small>(Horsfield, 1821), (CR)</small>
:
* [[Dayakflugesnappar]], ''C. montanus'', Dayak Blue Flycatcher, <small>Robinson & Kinnear, 1928, (LC)</small>
:
* [[Meratusflugesnappar]], ''C. kadayangensis'', Meratus Blue Flycatcher, <small>Irham, Haryoko, Shakya, Mitchell, S, Burner, Bocos, Eaton, Rheindt, Suparno, Sheldon & Prawiradilaga, 2021, (NT)</small>
:
* [[Bleikhakeflugesnappar]], ''C. poliogenys'', Pale-chinned Flycatcher, <small>Brooks, WE, 1880, (LC)</small>
:
* [[Okerbrystflugesnappar]], ''C. olivaceus'', Fulvous-chested Jungle Flycatcher, <small>Hume, 1877, (LC)</small>
:
* [[Pelengflugesnappar]], ''C. pelingensis'', Banggai Jungle Flycatcher, <small>(Vaurie, 1952), (NT)</small>
:
* [[Hennaflugesnappar]], ''C. colonus'', Sula Jungle Flycatcher, <small>(Hartert, EJO, 1898), (NT)</small>
:
* [[Medanflugesnappar]], ''C. ruckii'', Rück's Blue Flycatcher, <small>(Oustalet, 1881), (CR)</small>
</div>
== Kjelder ==
* Winkler, D. W., S. M. Billerman, og I. J. Lovette (2020). [https://birdsoftheworld.org/bow/species/muscic3/cur/species#genusCyornisOld World Flycatchers (Muscicapidae), version 1.0. In Birds of the World] (S. M. Billerman, B. K. Keeney, P. G. Rodewald, og T. S. Schulenberg, red.) Cornell Lab of Ornithology, Ithaca, NY, USA. https://doi.org/10.2173/bow.muscic3.01
;Merknadar
{{Merknadar}}
; Referansar
{{Reflist|2|refs=
<ref name=bow>Winkler et al (2020).</ref>
<ref name=banyumas>BirdLife International (2024) ''[https://datazone.birdlife.org/species/factsheet/javan-blue-flycatcher-cyornis-banyumas/text Species factsheet: Cyornis banyumas.]'' Henta den 14. februar 2024</ref>
<ref name=ruckii>BirdLife International (2024) ''[http://datazone.birdlife.org/species/factsheet/rucks-blue-flycatcher-cyornis-ruckii/text Species factsheet: Cyornis ruckii.]'' Henta den 14. februar 2024</ref>
<ref name=blyth>{{ cite journal | last=Blyth | first=Edward | year=1843 | title=Mr. Blyth's monthly Report for December Meeting, 1842, with Addenda subsequently appended | journal=Journal of the Asiatic Society of Bengal | volume=12 | issue=143 | pages=925–1011 [940-941] | url=https://www.biodiversitylibrary.org/page/40060929 }}</ref>
<ref name=jobling>{{cite book | last=Jobling | first=James A. | year=2010| title=The Helm Dictionary of Scientific Bird Names | publisher=Christopher Helm | location=London | isbn=978-1-4081-2501-4 | pages=[https://archive.org/stream/Helm_Dictionary_of_Scientific_Bird_Names_by_James_A._Jobling#page/n129/mode/1up 129]}}</ref>
<ref name=ioc08>{{cite web |url=https://worldbirdnames.org/ |title=IOC World Bird List Version 14.1 |publisher = WorldBirdNames.org | date=mars 2008 |access-date=14. februar 2024 |archive-date=15. februar 2010 |archive-url=https://web.archive.org/web/20080511200050/http://worldbirdnames.org/ |url-status=live }}</ref>
<ref name=ioc>{{cite web| editor1-last=Gill | editor1-first=Frank | editor2-last=Donsker | editor2-first=David | editor3-last=Rasmussen | editor3-first=Pamela | date=January 2024 | title=Chats, Old World flycatchers | work=IOC World Bird List Version 14.1 | url=https://www.worldbirdnames.org/new/bow/chats/ | publisher=International Ornithologists' Union | access-date=11. februar 2024 }}</ref>
<ref name=NNKF>{{Cite web|author=Norsk navnekomité for fugl (NNKF) |url=https://www.birdlife.no/fuglekunnskap/navn/sok/?q=Eupsittula&search=S%C3%B8k|access-date=5. januar 2024|title=Norske navn på verdens fugler |edition=|date=|publisher=[[Birdlife Norge]]}}</ref>
}}
== Bakgrunnsstoff ==
{{Commonskat}}
{{Autoritetsdata}}
[[Kategori:Flugesnapparfamilien]]
[[Kategori:Fugleslekter]]
tqw7yv54nno1bvxqlwk2qds95n8eqzr
Cupfinalen i fotball 2023/Menn
0
419501
3649634
3575629
2026-04-05T09:20:34Z
Migne
2086
3649634
wikitext
text/x-wiki
'''Cupfinalen i fotball 2023''' var den 115. finalen i rekka av norske meisterskap i fotball for menn. Finalekampen vart spelt laurdag 9. desember 2023 på [[Ullevaal stadion]] i [[Oslo]] framfor 19 178 tilskodarar. Mannskapet til [[Molde Fotballklubb]] sikra klubbens femte kongepokal ved å vinne 1–0 over [[Bodø/Glimt]]. Kristoffer Hagenes frå TIL Hovding var dommar.
===Kampen===
I den fyrste omgangen braut Emil Breivik foten i ein duell med Glimt-målvakta. Etter ein jamspelt kamp stakk [[Fredrik Gulbrandsen]] fram i sluttminutta og skåra kampens einaste mål frå få meters hald.
===Laga===
'''Molde''' sitt meisterlag bestod av Oliver Petersen, Casper Øyvann, Martin Ellingsen, Eirik Haugan, Kristoffer Haugen, Mathias Løvik, Markus Kaasa, Emil Breivik, Kristian Eriksen, [[Magnus Eikrem]] (kaptein), [[Fredrik Gulbrandsen]], samt innbytarane Martin Bjørnbak, Veton Berisha, [[Martin Linnes]], Magnus Grødem, Anders Hagelskjær.
'''Bodø/Glimt''' stilte med Julian Faye Lund, Brice Wembangomo, Isak Amundsen, Fredrik Bjørkan, Brede Moe, Albert Grønbæk, Sondre Fet, [[Patrick Berg]] (kaptein), Amahl Pellegrino, Pemi Faris og Nino Zugelj. Odin Bjørtuft, Ulrik Saltnes, Tobias Gulliksen, Oscar Kapskarmo, Adam Sørensen kom alle i spel som innbytarar.
==Kjelder==
[[Kategori:NM i fotball]]
[[Kategori:Sport i Noreg i 2023]]
[[Kategori:Noregsmeisterskap i 2023]]
[[Kategori:Idrettstilskipingar i Oslo]]
o2utw7gs16u5915yf1vp4sb0zl46epf
Lura
0
424466
3649645
3606047
2026-04-05T11:11:59Z
Marcuspn
143881
3649645
wikitext
text/x-wiki
{{geoboks|bydel|zoom=10|kommune=Sandnes|fylke=Rogaland}}
'''Lura''' er ein bydel i [[Sandnes kommune|Sandnes]] som hadde 8468 innbyggjarar den 1. januar 2014.<ref>{{Kjelde www|url=https://www.sandnes.kommune.no/Globalmeny/om-kommunen/Om-Sandnes/Sandnes-i-tall/|tittel=Sandnes kommune - Sandnes i tall|arkiv_url=https://archive.today/20141125005725/https://www.sandnes.kommune.no/Globalmeny/om-kommunen/Om-Sandnes/Sandnes-i-tall/|arkivdato=2014-11-25|dato=|utgjevar=|vitja=25.11.2014}}</ref> Bydelen ligg nord for [[Sentrum i Sandnes|sentrum]] og grensar til [[Stavanger kommune]] i nord og til [[Sola kommune]] i nordvest. Lura består hovudsakleg av bustadområde i lag med store næringsområde i industriparkane [[Forus]] og Lura.
== Næring ==
[[Fil:Btd_statoil_hoved_lura.jpg|venstre|mini|[[Equinor]]-kontoret på Lura.]]
I tillegg til stor IT- og oljeindustri er bydelen senter for handel på Nord-Jæren og har mange store varehus, mellom anna [[IKEA]] og eit av dei største kjøpesentera i Noreg, [[Kvadrat kjøpesenter|Kvadrat]]. Hovudnæringane har skifta frå den historiske jordbruks- og industriproduksjonen til handel, [[Informasjonsteknologi|IKT]] og petroleumsindustri. Lura husar mellom anna hovudkontora til to av dei største pizzakjedene i Noreg, [[Dolly Dimple's]] og [[Pizzabakeren]].
== Samferdsel ==
[[Fil:Btd_stavangerveien_s-lura.jpg|venstre|mini|Stavangerveien]]
[[Europaveg 39|E39]] går gjennom Lura og vest for denne er dagens jordbruksområde verna mot utbygging. Like ved Kvadrat kjøpesenter møter han [[Fylkesveg 505|riksveg 505]], som held fram sørover og splittar bydelen frå aust til vest, og ei eventuell utviding med tilfartsveg frå [[Gandsfjord bru]] og kollektiv-/bybanefelt vil medføra ei stor totalbreidd. Det blir derfor jobba med løysingar som vil ta vare på fotgjengarar og bebuarar på ein betre måte.
[[Jærbanen]] går langs sjøkanten gjennom Lura, men den lokale haldeplassen er nedlagd. Det blir derimot arbeidd med dobbeltspor som kan inkludera ny haldeplass for bybanen på Lura. Ved sjøfronten i Luravika, som hadde vore avsperra av jernbanen, blei det sommaren 2018 laga til bystrand.
== Utdanning ==
=== Barnehagar ===
* Myklaberget barnehage
* Porsholen barnehage
* Rissebærstraen barnehage
* Aktiv barnehage
* Håholen barnehage
* Lura barnehage
* Myrsnipa barnehage
* Rabalder barnehage ([[Exxon Mobil|ExxonMobil]])
* Svanholmen barnehage ([[Equinor|Statoil]])
=== Grunnskular ===
* Lura skole ([[Barneskule|B]])
* Porsholen skole ([[Barneskule|B]])
* Smeaheia skole ([[Barneskule|B]])
* Lurahammaren ungdomsskole ([[Ungdomsskule|U]])
* Tryggheim barne- og ungdomsskole (B) (U)
== Kjende personar frå Lura ==
* Svein Fanebust (Administrerende direktør i [[Coop Norge]])
* [[Trond Erik Bertelsen]], idrettsutøvar
* [[Annette Obrestad]], pokerspelar
* [[Thomas Dybdahl]], musikar
* [[Henrik Ingebrigtsen]], idrettsutøvar
* [[Filip Ingebrigtsen]], idrettsutøvar
* [[Jakob Ingebrigtsen]], idrettsutøvar
==Kjelder==
<references/>
{{refopning}}
*''Denne artikkelen bygger på «[[:no:Lura|Lura]]» frå {{Wikipedia-utgåve|no}}, den 15. mai 2025.''
{{refslutt}}
{{Autoritetsdata}}
[[Kategori:Bydelar i Sandnes]]
57cvy93tio8xqbjkha40p6qio93455r
Den finske landdagen
0
429785
3649614
3649325
2026-04-05T05:16:45Z
EmausBot
18303
robot: retta dobbel omdirigering → [[Den finske riksdagen]]
3649614
wikitext
text/x-wiki
#OMDIRIGER [[Den finske riksdagen]]
gjsnd3sj4qtru5qtbdok04y2dbrqhx5
Veton Berisha
0
429812
3649609
3649589
2026-04-04T16:32:20Z
HerVal7752
105842
Malar
3649609
wikitext
text/x-wiki
{{infoboks idrettsutøvar}}
'''Veton Berisha''' ({{datoar}}) er ein norsk fotballspelar frå [[Eigersund]]. Perioden mellom 2016 og 2022 deltok han i 10 av Noreg sine landskampar. Han er angrepsspelar og vart norsk meister 2023 med [[Molde Fotballklubb]].
==Karriere==
===Klubbspel===
Berisha fekk sin debut i 2009 med nivå 4-laget Egersund IK. Sommaren gjekk han over til [[Viking FK]] der han fekk sitt gjennombrot i 2012. I juli 2015 vart han overført Greuther Fürth i tysk andredivisjon. Frå september 2017 til mars 2019 gjorde han teneste i austerrikske [[Rapid Wien]]. 2019-sesongen spelte han for [[SK Brann]]. Gjennom 2020 og 2021 imponerte han som Viking-spelar. Etter indre uro i Viking-leiren flytta han til svenske Hammarby IF mot nærare 20 millionar kroner. Framom 2023-sesongen signerte han for Molde FK. Stendige skadeplagar førte til han ikkje fekk fast plass i fyrste-ellevaren. Han var innbytar då Molde vann 1–0 over [[Bodø/Glimt]] i cupfinalen 9. desember 2023. Den 1. august 2025 terminerte Berisha kontrakten med Molde, for så å ta til på si tredje periode i Viking.
===Landslagsspel===
Berisha debuterte for Noreg 29. mai 2016, i ein kamp der også hans eldre bror Valon Berisha spelte frå start for Noreg. Ei veke seinare skåra Veton Berisha det andre norske målet då Noreg på bortebane tapte 2–3 mot [[Belgia]]. Etter ytterlegare to kampar i 2016, måtte han vente til 18. november 2020 før han fekk sin femte landskamp. Med det såkalla naudlandslaget speltee Noreg uavgjort 1–1 mot [[Austerrike]] i [[Wien]]. I tida frå oktober 2021 til juni 2022 var Berisha innbytar i fem av Noregs landskampar.
==Kjelder==
{{fotnoteliste}}
{{refopning}}
*''Denne artikkelen bygger på «[[:nb:Veton Berisha|Veton Berisha]]» frå {{Wikipedia-utgåve|nb}}, den 4. april 2026.''
*[https://eu-football.info/_player.php?id=29437 i Veton Berisha] i eu-football.info
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
{{autoritetsdata}}
[[Kategori:Norske landslagsspelarar i fotball]]
[[Kategori:Viking-spelarar]]
[[Kategori:Brann-spelarar]]
[[Kategori:Molde-spelarar]]
7xyqd68qbdnupdidtdj3rg0pc3qeinw
Fredrik Gulbrandsen
0
429813
3649610
3649593
2026-04-04T16:34:50Z
HerVal7752
105842
Geoboks
3649610
wikitext
text/x-wiki
{{infoboks idrettsutøvar}}
'''Fredrik Aasmundrud Gulbrandsen''' ({{datoar}}) er ein norsk fotballspelar frå [[Lillestrøm]] som er trippel noregsmeister og ein gong seriemeister med [[Molde Fotballklubb]], samt fleirfaldig serie- og cupmeister i [[Austerrike]] og ligameister i [[Tyrkia]]. Han er angrepsspelar. Tom Gulbrandsen er far hans.
==Karriere==
===Klubbspel===
Gulbrandsen fekk sin debut for [[Lillestrøm SK]] i 2009. Vårsesongen 2010 spelte han i tre månader for Lyn på nivå 2 i seriefotballen. Sommaren 2013 forlet han Lillestrøm til fordel for Molde FK. Her var han med å vinne den norske cupfinalen i 2013 og i 2014, i den siste finalekampen skåra han det fyrste målet då Molde vann 2–0 over [[Odds Ballklubb]]. I 2014 vart han også seriemeister. Sommaren 2016 vandra Gulbrandsen vidare til Red Bull Salzburg i [[Austerrike]] der han over tre sesongar fekk med seg tre seriemeister-pokalar og to cup-triumfar. Mellombels i 2017 spelte han 12 kampar for New York Red Bulls i USA. Sesongane 2019–2022 gjorde han teneste i tyrkiske İstanbul Başakşehir. Her vart han tyrkisk ligameister i sin fyrste sesong. Gulbrandsen heldt i 2022/23-sesongen fram karrieren med spel for den tyrkiske ligarivalen Adana Demirspor. I august 2023 vende han tilbake til Molde FK og norsk fotball. Den 9. desember 2023 vart han matchvinnar då han skåra det einaste målet i cupfinalen mot [[Bodø/Glimt]].
===Landslagsspel===
Gulbrandsen deltok i 3 landskampar, to i 2014 og ein våren 2016. Han var med å spele uavgjort i den fyrste og vinne dei to siste, utan sjølv å kome på skåringslista.
===Merittar===
*Noregsmeister: 2013, 2014 og 2023 med Molde FK
*Norsk seriemeister: 2014 med Molde FK
*Austerriksk ligameister: 2017, 2018, 2019 for Red Bull Salzburg
*Austerriksk pokalmeister: 2017 og 2019 for Red Bull Salzburg
*Tyrkisk ligameister: 2020 for İstanbul Başakşehir
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:de:Fredrik Gulbrandsen|Fredrik Gulbrandsen]]» frå {{Wikipedia-utgåve|de}}, den 4. april 2026.''
*[https://eu-football.info/_player.php?id=28759 Fredrik Gulbrandsen] i eu-football.info
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
{{autoritetsdata}}
[[Kategori:Norske landslagsspelarar i fotball]]
[[Kategori:Molde-spelarar]]
[[Kategori:Lillestrøm-spelarar]]
2m3wu0ngaw2zyg70yptzcmpnomf5j9s
Karol Nawrocki
0
429814
3649600
2026-04-04T14:15:17Z
Maxbeirut
153662
Oppretta sida med «[[Fil:Karol_Nawrocki_(2025)_(cropped).jpg|mini|Karol Nawrocki (2025)]] '''Karol Tadeusz Nawrocki''' (fødd 3. mars 1983) er ein [[Polen|polsk]] politikar som representerer det [[Nasjonalkonservatisme|nasjonalkonservative]] partiet [[Lov og rettferd]]. Han var [[president i Polen]] frå 6. august 2025. Nawrocki har tidlegare vore IPN-chef ved presidentens kontor. ==Merknader== {{merknadar}} == Kjelder== <references /> {{refopning}} *''Denne artikkelen bygger på «…»
3649600
wikitext
text/x-wiki
[[Fil:Karol_Nawrocki_(2025)_(cropped).jpg|mini|Karol Nawrocki (2025)]]
'''Karol Tadeusz Nawrocki''' (fødd 3. mars 1983) er ein [[Polen|polsk]] politikar som representerer det [[Nasjonalkonservatisme|nasjonalkonservative]] partiet [[Lov og rettferd]]. Han var [[president i Polen]] frå 6. august 2025. Nawrocki har tidlegare vore IPN-chef ved presidentens kontor.
==Merknader==
{{merknadar}}
== Kjelder==
<references />
{{refopning}}
*''Denne artikkelen bygger på «[[:nb:Karol Nawrocki|Karol Nawrocki]]» frå {{Wikipedia-utgåve|nb}}, den 18. januar 2026.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
{{autoritetsdata}}
[[Kategori:Polske presidentar]]
[[Kategori:Polske politikar]]
[[Kategori:Folk frå Gdańsk]]
nk02mfaoexjhvpgemrc7su4s76xowqp
3649616
3649600
2026-04-05T07:12:24Z
Ranveig
39
Flikk
3649616
wikitext
text/x-wiki
{{infoboks politikar}}
'''Karol Tadeusz Nawrocki''' ({{datoar}}) er ein [[Polen|polsk]] politikar som er knytt til det [[Nasjonalkonservatisme|nasjonalkonservative]] partiet [[Lov og rettferd]]. Han vart [[president i Polen]] 6. august 2025.
== Kjelder==
<references />
{{refopning}}
*''Denne artikkelen bygger på «[[:nb:Karol Nawrocki|Karol Nawrocki]]» frå {{Wikipedia-utgåve|nb}}, den 4. april 2026.''
{{refslutt}}
==Bakgrunnsstoff==
{{commonskat}}
{{autoritetsdata}}
[[Kategori:Polske presidentar]]
[[Kategori:Folk frå Gdańsk]]
oqu5341ume2ebd7n08agi77z3j5s9lg
Vor Tid (1877-1894)
0
429815
3649611
2026-04-04T18:03:41Z
Johshh
122989
Oppretta sida med «{{Infoboks avis}} '''Vor Tid''' var eit norsk tidskrift som kom ut frå 1877 til 1894. [[Olav Andreas Eftestøl]], [[Lars Eskeland]] og [[Viggo Ullmann]] var redaktørar.<ref>{{ Kjelde tidsskrift | utgjeve år = 1893 | tittel = Vor tid | stad = Kristiania | url = https://urn.nb.no/URN:NBN:no-nb_digitidsskrift_2023041480020_002 | side = }}</ref> == Kjelder == {{fotnoteliste}} {{spire|media|Noreg}} {{Autoritetsdata}} [[Kategori:Tidlegare norske tidsskrift]] Kategori:…»
3649611
wikitext
text/x-wiki
{{Infoboks avis}}
'''Vor Tid''' var eit norsk tidskrift som kom ut frå 1877 til 1894. [[Olav Andreas Eftestøl]], [[Lars Eskeland]] og [[Viggo Ullmann]] var redaktørar.<ref>{{ Kjelde tidsskrift | utgjeve år = 1893 | tittel = Vor tid | stad = Kristiania | url = https://urn.nb.no/URN:NBN:no-nb_digitidsskrift_2023041480020_002 | side = }}</ref>
== Kjelder ==
{{fotnoteliste}}
{{spire|media|Noreg}}
{{Autoritetsdata}}
[[Kategori:Tidlegare norske tidsskrift]]
[[Kategori:Skipingar i 1877]]
[[Kategori:Nedleggingar i 1894]]
k8zarymaufzl83mgnhr6936924qhhvx
3649612
3649611
2026-04-04T18:06:10Z
Johshh
122989
3649612
wikitext
text/x-wiki
{{Infoboks avis}}
'''Vor Tid''' var eit norsk tidskrift som kom ut frå 1877 til 1894. [[Olav Andreas Eftestøl]], [[Lars Eskeland]] og [[Viggo Ullmann]] var redaktørar.<ref>{{ Kjelde tidsskrift | utgjeve år = 1893 | tittel = Vor tid | stad = Kristiania | url = https://urn.nb.no/URN:NBN:no-nb_digitidsskrift_2023041480020_002 | side = }}</ref>
== Kjelder ==
{{fotnoteliste}}
== Bakgrunnsstoff ==
{{bladlenkjer}}
{{spire|media|Noreg}}
{{Autoritetsdata}}
[[Kategori:Tidlegare norske tidsskrift]]
[[Kategori:Skipingar i 1877]]
[[Kategori:Nedleggingar i 1894]]
54bq9y8elaxj4ebrji8rvpesi9xciax
Roro-skip
0
429816
3649618
2026-04-05T07:13:02Z
Ranveig
39
Omdirigerer til [[Roroskip]]
3649618
wikitext
text/x-wiki
#OMDIRIGER [[Roroskip]]
a8u800lmmuzwi6gy2wis1um46dzcj9s
Mal:Pie chart/styles.css
10
429817
3649620
2026-04-05T08:08:35Z
Ranveig
39
Frå en:
3649620
sanitized-css
text/css
/** {{pp-template}}
Smooth piechart.
[[Module:Piechart]]
Note! Mobile screen breakpoint is set to 640px for MediaWiki Mobile.
*/
/* base structure */
.smooth-pie {
display: none;
position: relative;
width: 100px;
height: 100px;
border-radius: 50%;
background-color: #333;
color:black;
border: 1px solid black;
}
/* slices (default = pie25/pieX) */
.smooth-pie div {
position: absolute;
transform-origin: left bottom;
background-color: #655;
color:black;
top: 0; left: 50%;
width: 50%; height: 50%;
border-radius: 0 500% 0 0;
}
.smooth-pie div.pie50 {
transform-origin: left center;
height: 100%;
border-radius: 0 100% 100% 0 / 50%;
}
.smooth-pie .pie12-5 {clip-path: polygon(0% 0%, 100% 0%, 0 100%);}
.smooth-pie .pie5 {clip-path: polygon(0% 0%, 32.49197% 0%, 0 100%);}
.smooth-pie .pie7 {clip-path: polygon(0% 0%, 47.056428% 0%, 0 100%);}
.smooth-pie .pie1 {clip-path: polygon(0% 0%, 6.2914667% 0%, 0 100%);}
.smooth-pie div.smooth-pie-border {
display: none;
}
/* Border around pie (on top of slices). *
.smooth-pie div.smooth-pie-border {
position: absolute;
background-color: transparent;
border: 1px solid black;
top: 0; left: 0;
width: 100%; height: 100%;
border-radius: 50%;
box-sizing: border-box;
z-index: 20;
pointer-events: none;
}
/* unlock for supported browsers */
@supports(clip-path: circle(50%)) {
.smooth-pie {
display:block;
}
}
/* container and legend */
.smooth-pie-container {
display: flex;
align-items: flex-start;
gap: 1em;
flex-wrap: wrap;
}
.smooth-pie-legend {
list-style-type: none !important;
margin: 0 !important;
padding: 0 !important;
}
.smooth-pie-legend > li {
display: flex;
align-items: baseline;
gap: .5em;
margin: 0;
margin-bottom: 0.1em;
}
.smooth-pie-legend > li > span {
display: block;
box-sizing: border-box;
}
.smooth-pie-legend > li > .l-color {
border: 1px solid var(--color-base, black);
width: .8em;
height: .8em;
flex-shrink: 0;
}
/* floating pie */
.pie-thumb .smooth-pie-container {
padding: .5em;
padding-bottom: 0;
text-align: left;
}
.pie-thumb .smooth-pie-caption {
margin-bottom: 1em;
font-size: 94%;
}
/* Flow in a reverse column for thumbs (pie above the legend). */
.thumbinner > .smooth-pie-container {
flex-direction: column-reverse;
}
/* Wide screen style for thumbs */
@media screen and (min-width: 641px) {
.thumbinner > .smooth-pie-container {
width: min-content;
}
}
@media print {
/*
Avoid breaking up the chart.
Otherwise if the pie chart crosses a page line,
the slices can end up e.g. squished to the bottom of the page.
*/
.smooth-pie-container {
break-inside: avoid-page;
}
}
/*
Ex-thumb layout for small screen
and adjustments for compatibility with MW's Mobile Frontend (mw-mf).
*/
/* center the pie */
body.mw-mf .thumbinner .smooth-pie-container {
align-items: center;
}
/* style roughly the same as figcaption on mobile */
body.mw-mf .thumbinner .smooth-pie-legend-container {
font-size: 0.8125rem;
line-height: 1.5;
color: var(--color-subtle, #54595d);
}
/* specifically for thin screens (when thumbinner becomes 100% width) */
@media screen and (max-width: 640px) {
.thumbinner .smooth-pie-legend {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(190px, 1fr) ) ;
gap: 0.3em;
}
.thumbinner .smooth-pie-footer {
margin-top: .5em;
}
}
5hd2i5dulbo60uu99ih01gqs1hgo2o0
Modul:Piechart
828
429818
3649621
2026-04-05T08:08:40Z
Ranveig
39
Frå en:
3649621
Scribunto
text/plain
local p = {}
local priv = {} -- private functions scope
-- expose private for easy testing/debugging
p.__priv = priv
-- require exact colors for printing
local forPrinting = "-webkit-print-color-adjust: exact; print-color-adjust: exact;"
--[===[
Smooth piechart module.
Draws charts in HTML with an accessible legend (optional).
A list of all features is in the "TODO" section of the main `p.pie` function.
Module info:
- Changelog and TODO: [[:en:User:Nux/pie_chart_-_todo]] (Piechart 1.0, 2.0 and beyond).
- Author: [[:en:User:Nux|Maciej Nux]].
Use with a helper template that adds required CSS.
{{{1}}}:
[
{ "label": "pie: $v", "color": "wheat", "value": 40 },
{ "label": "cheese pizza $v", "color": "#fc0", "value": 20 },
{ "label": "mixed pizza: $v", "color": "#f60", "value": 20 },
{ "label": "raw pizza $v", "color": "#f30" }
]
Where $v is a formatted number (see `function prepareLabel`).
{{{meta}}}:
{"size":200, "autoscale":false, "legend":true}
All meta options are optional (see `function p.setupOptions`).
]===]
--[[
Debug:
-- labels and auto-value
local json_data = '[{"label": "k: $v", "value": 33.1}, {"label": "m: $v", "value": -1}]'
local html = p.renderPie(json_data)
mw.logObject(html)
-- autoscale values
local json_data = '[{"value": 700}, {"value": 300}]'
local html = p.renderPie(json_data, options)
mw.logObject(html)
-- size option
local json_data = '[{"label": "k: $v", "value": 33.1}, {"label": "m: $v", "value": -1}]'
local options = '{"size":200}'
local html = p.renderPie(json_data, options)
mw.logObject(html)
-- custom colors
local json_data = '[{"label": "k: $v", "value": 33.1, "color":"black"}, {"label": "m: $v", "value": -1, "color":"green"}]'
local html = p.renderPie(json_data)
mw.logObject(html)
-- 4-cuts
local entries = {
'{"label": "ciastka: $v", "value": 2, "color":"goldenrod"}',
'{"label": "słodycze: $v", "value": 4, "color":"darkred"}',
'{"label": "napoje: $v", "value": 1, "color":"lightblue"}',
'{"label": "kanapki: $v", "value": 3, "color":"wheat"}'
}
local json_data = '['..table.concat(entries, ',')..']'
local html = p.renderPie(json_data, '{"autoscale":true}')
mw.logObject(html)
-- colors
local fr = { args = { " 123 " } }
local ret = p.color(fr)
]]
--[[
Color for a slice (defaults).
{{{1}}}: slice number
]]
function p.color(frame)
local index = tonumber(priv.trim(frame.args[1]))
return ' ' .. priv.defaultColor(index)
end
--[===[
Main pie chart function.
TODO (maybe):
[[:en:User:Nux/pie_chart_-_todo#Hopes_and_dreams]]
]===]
function p.pie(frame)
local json_data = priv.trim(frame.args[1])
local options = {}
if (frame.args.meta) then
options.meta = priv.trim(frame.args.meta)
end
local html = p.renderPie(json_data, options)
return priv.trim(html)
end
-- Setup chart options.
function p.setupOptions(user_options)
local options = {
-- circle size in [px]
size = 100,
-- autoscale values (otherwise assume they sum up to 100)
autoscale = false,
-- hide chart for screen readers (when you have a table, forced for legend)
ariahidechart = false,
-- show legend (defaults to the left side)
legend = false,
-- direction of legend-chart flexbox (flex-direction)
direction = "",
-- width of the main container
-- when direction is used defaults to max-width, otherwise it's not added
width = "",
-- caption above the labels
caption = "",
-- footer below the labels
footer = "",
-- formatting template for labels
labelformat = "",
-- percentage number formatting precision (number of digits; -1 = automatic mode)
precision = -1,
}
-- internals
options.style = ""
if user_options and user_options.meta then
local decodeSuccess, rawOptions = pcall(function()
return mw.text.jsonDecode(user_options.meta, mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
rawOptions = false
mw.log('invalid meta parameters')
end
if rawOptions then
if type(rawOptions.size) == "number" then
options.size = math.floor(rawOptions.size)
end
options.autoscale = rawOptions.autoscale or false
if rawOptions.legend then
options.legend = true
end
if rawOptions.ariahidechart then
options.ariahidechart = true
end
if (type(rawOptions.direction) == "string") then
-- Remove unsafe/invalid characters
local sanitized = rawOptions.direction:gsub("[^a-z0-9%-]", "")
-- also adjust width so that row-reverse won't push things to the right
options.direction = 'flex-direction: ' .. sanitized .. ';'
options.width = 'width: max-content;'
end
if (type(rawOptions.width) == "string") then
-- note, this intentionaly overwrites what was set for direction
local sanitized = rawOptions.width:gsub("[^a-z0-9%-]", "")
options.width = 'width: ' .. sanitized .. ';'
end
if (type(rawOptions.caption) == "string") then
options.caption = rawOptions.caption
end
if (type(rawOptions.footer) == "string") then
options.footer = rawOptions.footer
end
if (type(rawOptions.labelformat) == "string") then
options.labelformat = rawOptions.labelformat
end
if type(rawOptions.precision) == "number" then
options.precision = math.floor(rawOptions.precision)
end
end
-- build style
if options.width ~= "" then
options.style = options.style .. options.width
end
if options.direction ~= "" then
options.style = options.style .. options.direction
end
end
if (options.legend) then
options.ariahidechart = true
end
return options
end
-- internal for testing legend rendering
p.__priv.legendDebug = false
--[[
Render piechart.
@param json_data JSON string with pie data.
]]
function p.renderPie(json_data, user_options)
if type(json_data) ~= "string" then
error('invalid piechart data type: '..type(json_data))
end
if #json_data < 2 then
error('piechart data is empty')
end
local decodeSuccess, data = pcall(function()
return mw.text.jsonDecode(json_data, mw.text.JSON_TRY_FIXING)
end)
-- Handle decode error
if not decodeSuccess then
error('invalid piechart data: '..json_data)
end
local options = p.setupOptions(user_options)
-- prepare
local ok, total = p.prepareEntries(data, options)
-- init render
local html = "<div class='smooth-pie-container' style='"..options.style.."'>"
-- error info
if not ok then
html = html .. priv.renderErrors(data)
end
-- render legend
if options.legend then
html = html .. p.renderLegend(data, options)
end
if p.__priv.legendDebug then
return html
end
-- render items
local header, items, footer = p.renderEntries(ok, total, data, options)
html = html .. header .. items .. footer
-- end .smooth-pie-container
html = html .. "\n</div>"
return html
end
function priv.boundaryFormatting(diff)
local value = 0.0
if diff <= 1.0 then
value = math.ceil(diff / 0.2) * 0.2 -- 0.2 step
else
value = math.ceil(diff / 0.5) * 0.5 -- 0.5 step
end
return string.format("%.1f", value)
end
-- Check if sum will trigger autoscaling
function priv.willAutoscale(sum)
-- Compare with a number larger then 100% to avoid floating-point precision problems
--- ...and data precision problems https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-PrimeHunter-20250420202500-Allow_percentage_sum_slightly_above_100
local diff = sum - 100
local grace = 1
return diff > grace
end
-- Tracking errors in data (note: somewhat expensive, similar to a red link)
-- In short: ±0.3 is a reasonable deviation; ±1 when the errors accumulate
-- https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-Nux-20250429152000-Nux-20250422224600
function priv.sumErrorTracking(sum, items)
local diff = sum - 100
if diff >= 0.4 and diff <= 10 then
local firstItem = items[1]
local lastItem = items[#items]
mw.addWarning("pie chart: Σ (value) = "..sum.."% ("..firstItem.value.." + .. .+ "..lastItem.value..")")
if mw.title.getCurrentTitle().namespace == 0 then
local suffix = priv.boundaryFormatting(diff)
_ = mw.title.new("Module:Piechart/tracing/diff below "..suffix).id
end
end
end
-- Prepare data (slices etc)
function p.prepareEntries(data, options)
local sum = priv.sumValues(data);
-- force autoscale when over 100
if priv.willAutoscale(sum) then
options.autoscale = true
end
-- pre-format entries
local ok = true
local no = 0
local total = #data
for index, entry in ipairs(data) do
no = no + 1
if not priv.prepareSlice(entry, no, sum, total, options) then
no = no - 1
ok = false
end
end
total = no -- total valid
return ok, total
end
function priv.sumValues(data)
local sum = 0;
for _, entry in ipairs(data) do
local value = entry.value
if not (type(value) ~= "number" or value < 0) then
sum = sum + value
end
end
return sum
end
-- render error info
function priv.renderErrors(data)
local html = "\n<ol class='chart-errors' style='display:none'>"
for _, entry in ipairs(data) do
if entry.error then
local entryJson = mw.text.jsonEncode(entry)
html = html .. "\n<li>".. entryJson .."</li>"
end
end
return html .. "\n</ol>\n"
end
-- Prepare single slice data (modifies entry).
-- @param no = 1..total
function priv.prepareSlice(entry, no, sum, total, options)
local autoscale = options.autoscale
local value = entry.value
if (type(value) ~= "number" or value < 0) then
if autoscale then
entry.error = "cannot autoscale unknown value"
return false
end
value = 100 - sum
end
-- entry.raw only when scaled
if autoscale then
entry.raw = value
value = (value / sum) * 100
end
entry.value = value
-- prepare final label
entry.label = priv.prepareLabel(options.labelformat, entry, options.precision)
-- background, but also color for MW syntax linter
entry.bcolor = priv.backColor(entry, no, total) .. ";color:#000"
return true
end
-- render legend for pre-processed entries
function p.renderLegend(data, options)
local html = ""
if options.caption ~= "" or options.footer ~= "" then
html = "\n<div class='smooth-pie-legend-container'>"
end
if options.caption ~= "" then
html = html .. "<div class='smooth-pie-caption'>" .. options.caption .. "</div>"
end
html = html .. "\n<ol class='smooth-pie-legend'>"
for _, entry in ipairs(data) do
if not entry.error then
html = html .. priv.renderLegendItem(entry, options)
end
end
html = html .. "\n</ol>\n"
if options.footer ~= "" then
html = html .. "<div class='smooth-pie-footer'>" .. options.footer .. "</div>"
end
if options.caption ~= "" or options.footer ~= "" then
html = html .. "</div>\n"
end
return html
end
-- render legend item
function priv.renderLegendItem(entry, options)
-- invisible value (for a11y reasons this should not be used for important values!)
if entry.visible ~= nil and entry.visible == false then
return ""
end
local label = entry.label
local bcolor = entry.bcolor
local html = "\n<li>"
if p.__priv.legendDebug then
forPrinting = ""
end
html = html .. '<span class="l-color" style="'..forPrinting..bcolor..'"></span>'
html = html .. '<span class="l-label">'..label..'</span>'
return html .. "</li>"
end
-- Prepare data (slices etc)
function p.renderEntries(ok, total, data, options)
-- cache for some items (small slices)
p.cuts = mw.loadJsonData('Module:Piechart/cuts.json')
local first = true
local previous = 0
local items = ""
for index, entry in ipairs(data) do
if not entry.error then
items = items .. priv.renderItem(previous, entry, options)
previous = previous + entry.value
end
end
local header = priv.renderHeader(options)
local footer = '\n<div class="smooth-pie-border"></div></div>'
return header, items, footer
end
-- header of pie-items (class="smooth-pie")
function priv.renderHeader(options)
local bcolor = 'background:#888;color:#000'
local size = options.size
-- hide chart for readers, especially when legend is there
local aria = ""
if (options.ariahidechart) then
aria = 'aria-hidden="true"'
end
-- slices container and last slice
local style = 'width:'..size..'px;height:'..size..'px;'..bcolor..';'..forPrinting
local html = [[
<div class="smooth-pie"
style="]]..style..[["
]]..aria..[[
>]]
return html
end
-- Render pie-item
-- (previous is a sum of previous values)
function priv.renderItem(previous, entry, options)
local value = entry.value
local label = entry.label
local bcolor = entry.bcolor
-- value too small to see
if (value < 0.03) then
mw.log('value too small', value, label)
mw.addWarning("pie chart: Value too small ↆ "..value.."% ("..label..")")
return ""
end
-- minimize transformation defects
if value < 10 then
if previous > 1 then
previous = previous - 0.01
end
value = value + 0.02
else
if previous > 1 then
previous = previous - 0.1
end
value = value + 0.2
end
-- force sum to be below 100% (needed due to value errors)
if previous + value > 100 then
if previous >= 100 then
mw.log('previous is already at 100', value, label)
return ""
end
value = 100 - previous
end
local html = ""
local size = ''
-- mw.logObject({'v,p,l', value, previous, label})
if (value >= 50) then
html = priv.sliceWithClass('pie50', 50, value, previous, bcolor, label)
elseif (value >= 25) then
html = priv.sliceWithClass('pie25', 25, value, previous, bcolor, label)
elseif (value >= 12.5) then
html = priv.sliceWithClass('pie12-5', 12.5, value, previous, bcolor, label)
elseif (value >= 7) then
html = priv.sliceWithClass('pie7', 7, value, previous, bcolor, label)
elseif (value >= 5) then
html = priv.sliceWithClass('pie5', 5, value, previous, bcolor, label)
else
-- 0-5%
local cutIndex = priv.round(value*10)
if cutIndex < 1 then
cutIndex = 1
end
local cut = p.cuts[cutIndex]
local transform = priv.rotation(previous)
html = priv.sliceX(cut, transform, bcolor, label)
end
-- mw.log(html)
return html
end
-- round to int
function priv.round(number)
return math.floor(number + 0.5)
end
-- render full slice with specific class
function priv.sliceWithClass(sizeClass, sizeStep, value, previous, bcolor, label)
local transform = priv.rotation(previous)
local html = ""
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
-- mw.logObject({'sliceWithClass:', sizeClass, sizeStep, value, previous, bcolor, label})
if (value > sizeStep) then
local extra = value - sizeStep
transform = priv.rotation(previous + extra)
-- mw.logObject({'sliceWithClass; extra, transform', extra, transform})
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
end
return html
end
-- render single slice
function priv.sliceBase(sizeClass, transform, bcolor, label)
local style = bcolor
if transform ~= "" then
style = style .. '; ' .. transform
end
return '\n\t<div class="'..sizeClass..'" style="'..style..'" title="'..p.extract_text(label)..'"></div>'
end
-- small slice cut to fluid size.
-- range in theory: 0 to 24.(9)% reaching 24.(9)% for cut = +inf
-- range in practice: 0 to 5%
function priv.sliceX(cut, transform, bcolor, label)
local path = 'clip-path: polygon(0% 0%, '..cut..'% 0%, 0 100%)'
return '\n\t<div style="'..transform..'; '..bcolor..'; '..path..'" title="'..p.extract_text(label)..'"></div>'
end
-- translate value to turn rotation (v=100 => 1.0turn)
function priv.rotation(value)
if (value > 0.001) then
local f = string.format("%.7f", value / 100)
f = f:gsub("(%d)0+$", "%1") -- remove trailing zeros
return "transform: rotate("..f.."turn)"
end
return ''
end
-- Language sensitive float, small numbers.
function priv.formatNum(value, precision)
precision = precision or -1
local v = ""
if precision >= 0 then
-- custom format
v = string.format("%." .. precision .. "f", value)
else
-- automatic
if (value < 10) then
v = string.format("%.2f", value)
else
v = string.format("%.1f", value)
end
end
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'pl') then
v = v:gsub("%.", ",")
end
return v
end
-- Format large values.
function priv.formatLargeNum(value)
local lang = mw.language.getContentLanguage()
-- add thusands separators
local v = lang:formatNum(value)
return v
end
-- Testing formatLargeNum.
-- p.__priv.test_formatLargeNum()
function priv.test_formatLargeNum()
mw.log("must not add fractional part")
mw.log( p.__priv.formatLargeNum(12) )
mw.log( p.__priv.formatLargeNum(123) )
mw.log("should preserve fractional part for small numbers")
mw.log( p.__priv.formatLargeNum(1.1) )
mw.log( p.__priv.formatLargeNum(1.12) )
mw.log( p.__priv.formatLargeNum(12.1) )
mw.log("can preserve long fractional part")
mw.log( p.__priv.formatLargeNum(1.1234) )
mw.log( p.__priv.formatLargeNum(1.12345) )
mw.log("should add separators above 1k")
mw.log( p.__priv.formatLargeNum(999) )
mw.log( p.__priv.formatLargeNum(1234) )
mw.log( p.__priv.formatLargeNum(12345) )
mw.log( p.__priv.formatLargeNum(123456) )
mw.log( p.__priv.formatLargeNum(1234567) )
mw.log("must handle large float, but might round values")
mw.log( p.__priv.formatLargeNum(1234.123) )
mw.log( p.__priv.formatLargeNum(12345.123) )
mw.log( p.__priv.formatLargeNum(123456.123) )
mw.log( p.__priv.formatLargeNum(1234567.123) )
end
--[[
Prepare final label.
Typical tpl:
"$L: $v" (same as: "$label: $auto")
will result in:
"Abc: 23%" -- when values are percentages
"Abc: 1234 (23%)" -- when values are autoscaled
Advanced tpl:
"$L: $d ($p)" e.g. "Abc: 1234 (23%)" for {"label":"Abc", "value":1234}
"$L: $v" is the same as above when values are autoscaled
Long vs short variable names:
$label ($L)
$auto ($v)
$value ($d)
$percent ($p)
]]
function priv.prepareLabel(tpl, entry, precision)
-- setup default tpl
if not tpl or tpl == "" then
-- simple if no label
if not entry.label or entry.label == "" then
tpl = "$v"
else
if entry.label:find("%$[a-z]") then
tpl = entry.label
else
tpl = "$L: $v"
end
end
end
local labelLabel = entry.label and entry.label or priv.getLangOther()
-- format % value without %
local pRaw = priv.formatNum(entry.value, precision)
local pp = pRaw .. "%%"
local label = tpl
-- aliases
label = label
:gsub("%$label", "$L")
:gsub("%$auto", "$v")
:gsub("%$value", "$d")
:gsub("%$percent", "$p")
-- replace variables
label = label:gsub("%$L", labelLabel)
local d = priv.formatLargeNum(entry.raw and entry.raw or entry.value)
local v = entry.raw and (d .. " (" .. pp .. ")") or pp
label = label
:gsub("%$p", pp)
:gsub("%$d", d)
:gsub("%$v", v)
-- Report unknown variables
for var in label:gmatch("%$[a-zA-Z]+") do
-- in preview
mw.addWarning("pie chart: Unknown variable (wrong format of your label): " .. var)
-- tracing links
_ = mw.title.new("Module:Piechart/tracing/unknown-variable").id
end
return label
end
-- default colors
-- source: https://colorbrewer2.org/#type=diverging&scheme=PRGn&n=6
local colorGroupSize = 3 -- must be at least 3
local colorGroups = 4
local colorPalette = {
-- green (from dark)
'#1b7837',
'#7fbf7b',
'#d9f0d3',
-- violet
'#762a83',
'#af8dc3',
'#e7d4e8',
-- red
'#d73027',
'#fc8d59',
'#fee090',
-- blue
'#4575b4',
'#91bfdb',
'#e0f3f8',
}
local lastColor = '#fff'
-- background color from entry or the default colors
function priv.backColor(entry, no, total)
if (type(entry.color) == "string") then
-- Remove unsafe characters from entry.color
local sanitizedColor = entry.color
:gsub('#', '#') -- workaround Module:Political_party issue reported on talk
:gsub("[^a-zA-Z0-9#%-]", "")
return 'background:' .. sanitizedColor
else
local color = priv.defaultColor(no, total)
return 'background:' .. color
end
end
-- color from the default colors
function priv.defaultColor(no, total)
local color = lastColor
if no <= 0 then
return color
end
local size = #colorPalette
if not total or total == 0 then
total = size + 1
end
local colorNo = priv.defaultColorNo(no, total, size)
if colorNo > 0 then
color = colorPalette[colorNo]
end
return color
end
-- gets color number from default colors
-- trys to return a light color as the last one
-- 0 means white-ish color should be used
function priv.defaultColorNo(no, total, size)
local color = 0 -- special, lastColor
if total == 1 then
color = 1
elseif total <= colorGroupSize * (colorGroups - 1) then
if no < total then
color = no
else
local groupIndex = ((no - 1) % colorGroupSize)
if groupIndex == 0 then -- dark
color = no+1
elseif groupIndex == 1 then -- med
color = no+1
else
color = no
end
end
elseif no < total then
color = ((no - 1) % size) + 1
end
return color
end
--[[
Testing defaultColorNo:
p.__priv.test_defaultColorNo(1, 12)
p.__priv.test_defaultColorNo(2, 12)
p.__priv.test_defaultColorNo(3, 12)
p.__priv.test_defaultColorNo(4, 12)
p.__priv.test_defaultColorNo(5, 12)
p.__priv.test_defaultColorNo(6, 12)
]]
function priv.test_defaultColorNo(total, size)
for no=1,total do
local color = priv.defaultColorNo(no, total, size)
mw.logObject({no=no, color=color})
end
end
--[[
trim string
note:
`(s:gsub(...))` returns only a string
`s:gsub(...)` returns a string and a number
]]
function priv.trim(s)
return (s:gsub("^%s+", ""):gsub("%s+$", ""))
end
--[[
Extract text from simple wikitext.
For now only works with links.
]]
-- Tests:
-- mw.log(p.extract_text("[[candy|sweets]]: $v"))
-- mw.log(p.extract_text("[[sandwich]]es: $v"))
-- mw.log(p.extract_text("sandwich]]es: $v"))
-- mw.log(p.extract_text("sandwiches: $v"))
function p.extract_text(label)
label = label
-- replace links with pipe (e.g., [[candy|sweets]])
:gsub("%[%[[^|%]]+|(.-)%]%]", "%1")
-- replace simple links without pipe (e.g., [[sandwich]])
:gsub("%[%[(.-)%]%]", "%1")
-- remove templates?
-- :gsub("{.-}", "")
-- remove tags
:gsub("<[^>]+>", "")
-- escape special chars just in case
:gsub("<", "<"):gsub(">", ">")
:gsub("'", "'"):gsub("\"", """)
return label
end
--[[
Parse classic template params into JSON.
From:
|label1=cookies: $v |value1=11 |color1=goldenrod
|label2=sweets: $v |value2=20 |color2=darkred
To:
{"value":11,"color":"goldenrod","label":"cookies: $v"},
{"value":20,"color":"darkred","label":"sweets: $v"},
]]
function p.parseEnumParams(frame)
local args = frame:getParent().args
return priv.parseEnumParams(args)
end
function priv.parseEnumParams(args)
local result = {}
local i = 1
local sum = 0.0
local hasCustomColor = false -- has last custom color
while args["value" .. i] do
-- value is required in this mode; it's also assumed to be 0..100
local entry = { value = tonumber(args["value" .. i]) or 0 }
-- label and color is optional
local label = args["label" .. i]
if label and label ~= "" then
entry.label = label
end
hasCustomColor = false
local color = args["color" .. i]
if color and color ~= "" then
entry.color = color
hasCustomColor = true
end
table.insert(result, entry)
sum = sum + entry.value
i = i + 1
end
-- re-loop to set values in labels
local willAutoscale = priv.willAutoscale(sum)
for _, entry in ipairs(result) do
local label = entry.label
if label and not label:find("%$[a-z]") then
-- autoscale will be forced, so use $v in labels
if willAutoscale then
entry.label = label .. " $v"
else
entry.label = label .. " ($p)"
end
end
end
-- tracking data errors
priv.sumErrorTracking(sum, result)
-- support other value mapping
local langOther = priv.getLangOther()
local colorOther = "#FEFDFD" -- white-ish for custom colors for best chance and contrast
local otherValue = 100 - sum
if args["other"] and args["other"] ~= "" then
if otherValue < 0.001 then
otherValue = 0
end
local otherEntry = { label = (args["other-label"] or langOther) .. " ($p)" }
if args["other-color"] and args["other-color"] ~= "" then
otherEntry.color = args["other-color"]
else
otherEntry.color = colorOther
end
table.insert(result, otherEntry)
elseif otherValue > 0.01 then
if hasCustomColor then
table.insert(result, {visible = false, label = langOther .. " ($v)", color = colorOther})
else
table.insert(result, {visible = false, label = langOther .. " ($v)"})
end
end
local jsonString = mw.text.jsonEncode(result)
return jsonString
end
function priv.getLangOther()
-- support other value mapping
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'pl') then
return "Inne"
end
return "Other"
end
-- Function to check if a value is true-ish
local trueValues = { ["true"] = true, ["1"] = true, ["on"] = true, ["yes"] = true }
function priv.isTrueishValue(value)
-- should return nil for empty args (i.e. undefined i.e. default)
if not value or value == "" then return nil end
value = priv.trim(value)
if value == "" then return nil end
-- other non-empty are false
return trueValues[value:lower()] or false
end
--[[
Parse classic template params into JSON with chart meta data.
]]
function p.parseMetaParams(frame)
local args = frame:getParent().args
local meta = {}
-- default meta for value1..n parameters
-- ...and for thumb right/left
local thumb = args["thumb"]
if args["value1"] or (thumb and (thumb == "right" or thumb == "left")) then
meta.size = 200
meta.legend = true
end
-- explicit meta param
if args["meta"] then
local decodeSuccess, tempMeta = pcall(function()
return mw.text.jsonDecode(args["meta"], mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
mw.log('invalid meta parameter')
else
meta = tempMeta
end
end
if args["size"] then meta.size = tonumber(args["size"]) end
if args["radius"] and tonumber(args["radius"]) then
meta.size = 2 * tonumber(args["radius"])
end
if args["autoscale"] then meta.autoscale = priv.isTrueishValue(args["autoscale"]) end
if args["legend"] then meta.legend = priv.isTrueishValue(args["legend"]) end
if args["ariahidechart"] then meta.ariahidechart = priv.isTrueishValue(args["ariahidechart"]) end
if args["direction"] and args["direction"] ~= "" then
meta.direction = args["direction"]:gsub("[^a-z0-9%-]", "")
end
if args["width"] and args["width"] ~= "" then
meta.width = args["width"]:gsub("[^a-z0-9%-]", "")
end
if args["caption"] and args["caption"] ~= "" then
meta.caption = args["caption"]
end
if args["footer"] and args["footer"] ~= "" then
meta.footer = args["footer"]
end
if args["labelformat"] and args["labelformat"] ~= "" then
meta.labelformat = args["labelformat"]
end
if args["precision"] and args["precision"] ~= "" then
meta.precision = tonumber(args["precision"])
end
return mw.text.jsonEncode(meta)
end
return p
0pe0jhyrd7qwc5sgf62bymcop20x1mi
3649623
3649621
2026-04-05T08:11:32Z
Ranveig
39
. > ,
3649623
Scribunto
text/plain
local p = {}
local priv = {} -- private functions scope
-- expose private for easy testing/debugging
p.__priv = priv
-- require exact colors for printing
local forPrinting = "-webkit-print-color-adjust: exact; print-color-adjust: exact;"
--[===[
Smooth piechart module.
Draws charts in HTML with an accessible legend (optional).
A list of all features is in the "TODO" section of the main `p.pie` function.
Module info:
- Changelog and TODO: [[:en:User:Nux/pie_chart_-_todo]] (Piechart 1.0, 2.0 and beyond).
- Author: [[:en:User:Nux|Maciej Nux]].
Use with a helper template that adds required CSS.
{{{1}}}:
[
{ "label": "pie: $v", "color": "wheat", "value": 40 },
{ "label": "cheese pizza $v", "color": "#fc0", "value": 20 },
{ "label": "mixed pizza: $v", "color": "#f60", "value": 20 },
{ "label": "raw pizza $v", "color": "#f30" }
]
Where $v is a formatted number (see `function prepareLabel`).
{{{meta}}}:
{"size":200, "autoscale":false, "legend":true}
All meta options are optional (see `function p.setupOptions`).
]===]
--[[
Debug:
-- labels and auto-value
local json_data = '[{"label": "k: $v", "value": 33.1}, {"label": "m: $v", "value": -1}]'
local html = p.renderPie(json_data)
mw.logObject(html)
-- autoscale values
local json_data = '[{"value": 700}, {"value": 300}]'
local html = p.renderPie(json_data, options)
mw.logObject(html)
-- size option
local json_data = '[{"label": "k: $v", "value": 33.1}, {"label": "m: $v", "value": -1}]'
local options = '{"size":200}'
local html = p.renderPie(json_data, options)
mw.logObject(html)
-- custom colors
local json_data = '[{"label": "k: $v", "value": 33.1, "color":"black"}, {"label": "m: $v", "value": -1, "color":"green"}]'
local html = p.renderPie(json_data)
mw.logObject(html)
-- 4-cuts
local entries = {
'{"label": "ciastka: $v", "value": 2, "color":"goldenrod"}',
'{"label": "słodycze: $v", "value": 4, "color":"darkred"}',
'{"label": "napoje: $v", "value": 1, "color":"lightblue"}',
'{"label": "kanapki: $v", "value": 3, "color":"wheat"}'
}
local json_data = '['..table.concat(entries, ',')..']'
local html = p.renderPie(json_data, '{"autoscale":true}')
mw.logObject(html)
-- colors
local fr = { args = { " 123 " } }
local ret = p.color(fr)
]]
--[[
Color for a slice (defaults).
{{{1}}}: slice number
]]
function p.color(frame)
local index = tonumber(priv.trim(frame.args[1]))
return ' ' .. priv.defaultColor(index)
end
--[===[
Main pie chart function.
TODO (maybe):
[[:en:User:Nux/pie_chart_-_todo#Hopes_and_dreams]]
]===]
function p.pie(frame)
local json_data = priv.trim(frame.args[1])
local options = {}
if (frame.args.meta) then
options.meta = priv.trim(frame.args.meta)
end
local html = p.renderPie(json_data, options)
return priv.trim(html)
end
-- Setup chart options.
function p.setupOptions(user_options)
local options = {
-- circle size in [px]
size = 100,
-- autoscale values (otherwise assume they sum up to 100)
autoscale = false,
-- hide chart for screen readers (when you have a table, forced for legend)
ariahidechart = false,
-- show legend (defaults to the left side)
legend = false,
-- direction of legend-chart flexbox (flex-direction)
direction = "",
-- width of the main container
-- when direction is used defaults to max-width, otherwise it's not added
width = "",
-- caption above the labels
caption = "",
-- footer below the labels
footer = "",
-- formatting template for labels
labelformat = "",
-- percentage number formatting precision (number of digits; -1 = automatic mode)
precision = -1,
}
-- internals
options.style = ""
if user_options and user_options.meta then
local decodeSuccess, rawOptions = pcall(function()
return mw.text.jsonDecode(user_options.meta, mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
rawOptions = false
mw.log('invalid meta parameters')
end
if rawOptions then
if type(rawOptions.size) == "number" then
options.size = math.floor(rawOptions.size)
end
options.autoscale = rawOptions.autoscale or false
if rawOptions.legend then
options.legend = true
end
if rawOptions.ariahidechart then
options.ariahidechart = true
end
if (type(rawOptions.direction) == "string") then
-- Remove unsafe/invalid characters
local sanitized = rawOptions.direction:gsub("[^a-z0-9%-]", "")
-- also adjust width so that row-reverse won't push things to the right
options.direction = 'flex-direction: ' .. sanitized .. ';'
options.width = 'width: max-content;'
end
if (type(rawOptions.width) == "string") then
-- note, this intentionaly overwrites what was set for direction
local sanitized = rawOptions.width:gsub("[^a-z0-9%-]", "")
options.width = 'width: ' .. sanitized .. ';'
end
if (type(rawOptions.caption) == "string") then
options.caption = rawOptions.caption
end
if (type(rawOptions.footer) == "string") then
options.footer = rawOptions.footer
end
if (type(rawOptions.labelformat) == "string") then
options.labelformat = rawOptions.labelformat
end
if type(rawOptions.precision) == "number" then
options.precision = math.floor(rawOptions.precision)
end
end
-- build style
if options.width ~= "" then
options.style = options.style .. options.width
end
if options.direction ~= "" then
options.style = options.style .. options.direction
end
end
if (options.legend) then
options.ariahidechart = true
end
return options
end
-- internal for testing legend rendering
p.__priv.legendDebug = false
--[[
Render piechart.
@param json_data JSON string with pie data.
]]
function p.renderPie(json_data, user_options)
if type(json_data) ~= "string" then
error('invalid piechart data type: '..type(json_data))
end
if #json_data < 2 then
error('piechart data is empty')
end
local decodeSuccess, data = pcall(function()
return mw.text.jsonDecode(json_data, mw.text.JSON_TRY_FIXING)
end)
-- Handle decode error
if not decodeSuccess then
error('invalid piechart data: '..json_data)
end
local options = p.setupOptions(user_options)
-- prepare
local ok, total = p.prepareEntries(data, options)
-- init render
local html = "<div class='smooth-pie-container' style='"..options.style.."'>"
-- error info
if not ok then
html = html .. priv.renderErrors(data)
end
-- render legend
if options.legend then
html = html .. p.renderLegend(data, options)
end
if p.__priv.legendDebug then
return html
end
-- render items
local header, items, footer = p.renderEntries(ok, total, data, options)
html = html .. header .. items .. footer
-- end .smooth-pie-container
html = html .. "\n</div>"
return html
end
function priv.boundaryFormatting(diff)
local value = 0.0
if diff <= 1.0 then
value = math.ceil(diff / 0.2) * 0.2 -- 0.2 step
else
value = math.ceil(diff / 0.5) * 0.5 -- 0.5 step
end
return string.format("%,1f", value)
end
-- Check if sum will trigger autoscaling
function priv.willAutoscale(sum)
-- Compare with a number larger then 100% to avoid floating-point precision problems
--- ...and data precision problems https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-PrimeHunter-20250420202500-Allow_percentage_sum_slightly_above_100
local diff = sum - 100
local grace = 1
return diff > grace
end
-- Tracking errors in data (note: somewhat expensive, similar to a red link)
-- In short: ±0.3 is a reasonable deviation; ±1 when the errors accumulate
-- https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-Nux-20250429152000-Nux-20250422224600
function priv.sumErrorTracking(sum, items)
local diff = sum - 100
if diff >= 0.4 and diff <= 10 then
local firstItem = items[1]
local lastItem = items[#items]
mw.addWarning("pie chart: Σ (value) = "..sum.."% ("..firstItem.value.." + .. .+ "..lastItem.value..")")
if mw.title.getCurrentTitle().namespace == 0 then
local suffix = priv.boundaryFormatting(diff)
_ = mw.title.new("Module:Piechart/tracing/diff below "..suffix).id
end
end
end
-- Prepare data (slices etc)
function p.prepareEntries(data, options)
local sum = priv.sumValues(data);
-- force autoscale when over 100
if priv.willAutoscale(sum) then
options.autoscale = true
end
-- pre-format entries
local ok = true
local no = 0
local total = #data
for index, entry in ipairs(data) do
no = no + 1
if not priv.prepareSlice(entry, no, sum, total, options) then
no = no - 1
ok = false
end
end
total = no -- total valid
return ok, total
end
function priv.sumValues(data)
local sum = 0;
for _, entry in ipairs(data) do
local value = entry.value
if not (type(value) ~= "number" or value < 0) then
sum = sum + value
end
end
return sum
end
-- render error info
function priv.renderErrors(data)
local html = "\n<ol class='chart-errors' style='display:none'>"
for _, entry in ipairs(data) do
if entry.error then
local entryJson = mw.text.jsonEncode(entry)
html = html .. "\n<li>".. entryJson .."</li>"
end
end
return html .. "\n</ol>\n"
end
-- Prepare single slice data (modifies entry).
-- @param no = 1..total
function priv.prepareSlice(entry, no, sum, total, options)
local autoscale = options.autoscale
local value = entry.value
if (type(value) ~= "number" or value < 0) then
if autoscale then
entry.error = "cannot autoscale unknown value"
return false
end
value = 100 - sum
end
-- entry.raw only when scaled
if autoscale then
entry.raw = value
value = (value / sum) * 100
end
entry.value = value
-- prepare final label
entry.label = priv.prepareLabel(options.labelformat, entry, options.precision)
-- background, but also color for MW syntax linter
entry.bcolor = priv.backColor(entry, no, total) .. ";color:#000"
return true
end
-- render legend for pre-processed entries
function p.renderLegend(data, options)
local html = ""
if options.caption ~= "" or options.footer ~= "" then
html = "\n<div class='smooth-pie-legend-container'>"
end
if options.caption ~= "" then
html = html .. "<div class='smooth-pie-caption'>" .. options.caption .. "</div>"
end
html = html .. "\n<ol class='smooth-pie-legend'>"
for _, entry in ipairs(data) do
if not entry.error then
html = html .. priv.renderLegendItem(entry, options)
end
end
html = html .. "\n</ol>\n"
if options.footer ~= "" then
html = html .. "<div class='smooth-pie-footer'>" .. options.footer .. "</div>"
end
if options.caption ~= "" or options.footer ~= "" then
html = html .. "</div>\n"
end
return html
end
-- render legend item
function priv.renderLegendItem(entry, options)
-- invisible value (for a11y reasons this should not be used for important values!)
if entry.visible ~= nil and entry.visible == false then
return ""
end
local label = entry.label
local bcolor = entry.bcolor
local html = "\n<li>"
if p.__priv.legendDebug then
forPrinting = ""
end
html = html .. '<span class="l-color" style="'..forPrinting..bcolor..'"></span>'
html = html .. '<span class="l-label">'..label..'</span>'
return html .. "</li>"
end
-- Prepare data (slices etc)
function p.renderEntries(ok, total, data, options)
-- cache for some items (small slices)
p.cuts = mw.loadJsonData('Module:Piechart/cuts.json')
local first = true
local previous = 0
local items = ""
for index, entry in ipairs(data) do
if not entry.error then
items = items .. priv.renderItem(previous, entry, options)
previous = previous + entry.value
end
end
local header = priv.renderHeader(options)
local footer = '\n<div class="smooth-pie-border"></div></div>'
return header, items, footer
end
-- header of pie-items (class="smooth-pie")
function priv.renderHeader(options)
local bcolor = 'background:#888;color:#000'
local size = options.size
-- hide chart for readers, especially when legend is there
local aria = ""
if (options.ariahidechart) then
aria = 'aria-hidden="true"'
end
-- slices container and last slice
local style = 'width:'..size..'px;height:'..size..'px;'..bcolor..';'..forPrinting
local html = [[
<div class="smooth-pie"
style="]]..style..[["
]]..aria..[[
>]]
return html
end
-- Render pie-item
-- (previous is a sum of previous values)
function priv.renderItem(previous, entry, options)
local value = entry.value
local label = entry.label
local bcolor = entry.bcolor
-- value too small to see
if (value < 0.03) then
mw.log('value too small', value, label)
mw.addWarning("pie chart: Value too small ↆ "..value.."% ("..label..")")
return ""
end
-- minimize transformation defects
if value < 10 then
if previous > 1 then
previous = previous - 0.01
end
value = value + 0.02
else
if previous > 1 then
previous = previous - 0.1
end
value = value + 0.2
end
-- force sum to be below 100% (needed due to value errors)
if previous + value > 100 then
if previous >= 100 then
mw.log('previous is already at 100', value, label)
return ""
end
value = 100 - previous
end
local html = ""
local size = ''
-- mw.logObject({'v,p,l', value, previous, label})
if (value >= 50) then
html = priv.sliceWithClass('pie50', 50, value, previous, bcolor, label)
elseif (value >= 25) then
html = priv.sliceWithClass('pie25', 25, value, previous, bcolor, label)
elseif (value >= 12.5) then
html = priv.sliceWithClass('pie12-5', 12.5, value, previous, bcolor, label)
elseif (value >= 7) then
html = priv.sliceWithClass('pie7', 7, value, previous, bcolor, label)
elseif (value >= 5) then
html = priv.sliceWithClass('pie5', 5, value, previous, bcolor, label)
else
-- 0-5%
local cutIndex = priv.round(value*10)
if cutIndex < 1 then
cutIndex = 1
end
local cut = p.cuts[cutIndex]
local transform = priv.rotation(previous)
html = priv.sliceX(cut, transform, bcolor, label)
end
-- mw.log(html)
return html
end
-- round to int
function priv.round(number)
return math.floor(number + 0.5)
end
-- render full slice with specific class
function priv.sliceWithClass(sizeClass, sizeStep, value, previous, bcolor, label)
local transform = priv.rotation(previous)
local html = ""
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
-- mw.logObject({'sliceWithClass:', sizeClass, sizeStep, value, previous, bcolor, label})
if (value > sizeStep) then
local extra = value - sizeStep
transform = priv.rotation(previous + extra)
-- mw.logObject({'sliceWithClass; extra, transform', extra, transform})
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
end
return html
end
-- render single slice
function priv.sliceBase(sizeClass, transform, bcolor, label)
local style = bcolor
if transform ~= "" then
style = style .. '; ' .. transform
end
return '\n\t<div class="'..sizeClass..'" style="'..style..'" title="'..p.extract_text(label)..'"></div>'
end
-- small slice cut to fluid size.
-- range in theory: 0 to 24.(9)% reaching 24.(9)% for cut = +inf
-- range in practice: 0 to 5%
function priv.sliceX(cut, transform, bcolor, label)
local path = 'clip-path: polygon(0% 0%, '..cut..'% 0%, 0 100%)'
return '\n\t<div style="'..transform..'; '..bcolor..'; '..path..'" title="'..p.extract_text(label)..'"></div>'
end
-- translate value to turn rotation (v=100 => 1.0turn)
function priv.rotation(value)
if (value > 0.001) then
local f = string.format("%.7f", value / 100)
f = f:gsub("(%d)0+$", "%1") -- remove trailing zeros
return "transform: rotate("..f.."turn)"
end
return ''
end
-- Language sensitive float, small numbers.
function priv.formatNum(value, precision)
precision = precision or -1
local v = ""
if precision >= 0 then
-- custom format
v = string.format("%." .. precision .. "f", value)
else
-- automatic
if (value < 10) then
v = string.format("%.2f", value)
else
v = string.format("%.1f", value)
end
end
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'pl') then
v = v:gsub("%.", ",")
end
return v
end
-- Format large values.
function priv.formatLargeNum(value)
local lang = mw.language.getContentLanguage()
-- add thusands separators
local v = lang:formatNum(value)
return v
end
-- Testing formatLargeNum.
-- p.__priv.test_formatLargeNum()
function priv.test_formatLargeNum()
mw.log("must not add fractional part")
mw.log( p.__priv.formatLargeNum(12) )
mw.log( p.__priv.formatLargeNum(123) )
mw.log("should preserve fractional part for small numbers")
mw.log( p.__priv.formatLargeNum(1.1) )
mw.log( p.__priv.formatLargeNum(1.12) )
mw.log( p.__priv.formatLargeNum(12.1) )
mw.log("can preserve long fractional part")
mw.log( p.__priv.formatLargeNum(1.1234) )
mw.log( p.__priv.formatLargeNum(1.12345) )
mw.log("should add separators above 1k")
mw.log( p.__priv.formatLargeNum(999) )
mw.log( p.__priv.formatLargeNum(1234) )
mw.log( p.__priv.formatLargeNum(12345) )
mw.log( p.__priv.formatLargeNum(123456) )
mw.log( p.__priv.formatLargeNum(1234567) )
mw.log("must handle large float, but might round values")
mw.log( p.__priv.formatLargeNum(1234.123) )
mw.log( p.__priv.formatLargeNum(12345.123) )
mw.log( p.__priv.formatLargeNum(123456.123) )
mw.log( p.__priv.formatLargeNum(1234567.123) )
end
--[[
Prepare final label.
Typical tpl:
"$L: $v" (same as: "$label: $auto")
will result in:
"Abc: 23%" -- when values are percentages
"Abc: 1234 (23%)" -- when values are autoscaled
Advanced tpl:
"$L: $d ($p)" e.g. "Abc: 1234 (23%)" for {"label":"Abc", "value":1234}
"$L: $v" is the same as above when values are autoscaled
Long vs short variable names:
$label ($L)
$auto ($v)
$value ($d)
$percent ($p)
]]
function priv.prepareLabel(tpl, entry, precision)
-- setup default tpl
if not tpl or tpl == "" then
-- simple if no label
if not entry.label or entry.label == "" then
tpl = "$v"
else
if entry.label:find("%$[a-z]") then
tpl = entry.label
else
tpl = "$L: $v"
end
end
end
local labelLabel = entry.label and entry.label or priv.getLangOther()
-- format % value without %
local pRaw = priv.formatNum(entry.value, precision)
local pp = pRaw .. "%%"
local label = tpl
-- aliases
label = label
:gsub("%$label", "$L")
:gsub("%$auto", "$v")
:gsub("%$value", "$d")
:gsub("%$percent", "$p")
-- replace variables
label = label:gsub("%$L", labelLabel)
local d = priv.formatLargeNum(entry.raw and entry.raw or entry.value)
local v = entry.raw and (d .. " (" .. pp .. ")") or pp
label = label
:gsub("%$p", pp)
:gsub("%$d", d)
:gsub("%$v", v)
-- Report unknown variables
for var in label:gmatch("%$[a-zA-Z]+") do
-- in preview
mw.addWarning("pie chart: Unknown variable (wrong format of your label): " .. var)
-- tracing links
_ = mw.title.new("Module:Piechart/tracing/unknown-variable").id
end
return label
end
-- default colors
-- source: https://colorbrewer2.org/#type=diverging&scheme=PRGn&n=6
local colorGroupSize = 3 -- must be at least 3
local colorGroups = 4
local colorPalette = {
-- green (from dark)
'#1b7837',
'#7fbf7b',
'#d9f0d3',
-- violet
'#762a83',
'#af8dc3',
'#e7d4e8',
-- red
'#d73027',
'#fc8d59',
'#fee090',
-- blue
'#4575b4',
'#91bfdb',
'#e0f3f8',
}
local lastColor = '#fff'
-- background color from entry or the default colors
function priv.backColor(entry, no, total)
if (type(entry.color) == "string") then
-- Remove unsafe characters from entry.color
local sanitizedColor = entry.color
:gsub('#', '#') -- workaround Module:Political_party issue reported on talk
:gsub("[^a-zA-Z0-9#%-]", "")
return 'background:' .. sanitizedColor
else
local color = priv.defaultColor(no, total)
return 'background:' .. color
end
end
-- color from the default colors
function priv.defaultColor(no, total)
local color = lastColor
if no <= 0 then
return color
end
local size = #colorPalette
if not total or total == 0 then
total = size + 1
end
local colorNo = priv.defaultColorNo(no, total, size)
if colorNo > 0 then
color = colorPalette[colorNo]
end
return color
end
-- gets color number from default colors
-- trys to return a light color as the last one
-- 0 means white-ish color should be used
function priv.defaultColorNo(no, total, size)
local color = 0 -- special, lastColor
if total == 1 then
color = 1
elseif total <= colorGroupSize * (colorGroups - 1) then
if no < total then
color = no
else
local groupIndex = ((no - 1) % colorGroupSize)
if groupIndex == 0 then -- dark
color = no+1
elseif groupIndex == 1 then -- med
color = no+1
else
color = no
end
end
elseif no < total then
color = ((no - 1) % size) + 1
end
return color
end
--[[
Testing defaultColorNo:
p.__priv.test_defaultColorNo(1, 12)
p.__priv.test_defaultColorNo(2, 12)
p.__priv.test_defaultColorNo(3, 12)
p.__priv.test_defaultColorNo(4, 12)
p.__priv.test_defaultColorNo(5, 12)
p.__priv.test_defaultColorNo(6, 12)
]]
function priv.test_defaultColorNo(total, size)
for no=1,total do
local color = priv.defaultColorNo(no, total, size)
mw.logObject({no=no, color=color})
end
end
--[[
trim string
note:
`(s:gsub(...))` returns only a string
`s:gsub(...)` returns a string and a number
]]
function priv.trim(s)
return (s:gsub("^%s+", ""):gsub("%s+$", ""))
end
--[[
Extract text from simple wikitext.
For now only works with links.
]]
-- Tests:
-- mw.log(p.extract_text("[[candy|sweets]]: $v"))
-- mw.log(p.extract_text("[[sandwich]]es: $v"))
-- mw.log(p.extract_text("sandwich]]es: $v"))
-- mw.log(p.extract_text("sandwiches: $v"))
function p.extract_text(label)
label = label
-- replace links with pipe (e.g., [[candy|sweets]])
:gsub("%[%[[^|%]]+|(.-)%]%]", "%1")
-- replace simple links without pipe (e.g., [[sandwich]])
:gsub("%[%[(.-)%]%]", "%1")
-- remove templates?
-- :gsub("{.-}", "")
-- remove tags
:gsub("<[^>]+>", "")
-- escape special chars just in case
:gsub("<", "<"):gsub(">", ">")
:gsub("'", "'"):gsub("\"", """)
return label
end
--[[
Parse classic template params into JSON.
From:
|label1=cookies: $v |value1=11 |color1=goldenrod
|label2=sweets: $v |value2=20 |color2=darkred
To:
{"value":11,"color":"goldenrod","label":"cookies: $v"},
{"value":20,"color":"darkred","label":"sweets: $v"},
]]
function p.parseEnumParams(frame)
local args = frame:getParent().args
return priv.parseEnumParams(args)
end
function priv.parseEnumParams(args)
local result = {}
local i = 1
local sum = 0.0
local hasCustomColor = false -- has last custom color
while args["value" .. i] do
-- value is required in this mode; it's also assumed to be 0..100
local entry = { value = tonumber(args["value" .. i]) or 0 }
-- label and color is optional
local label = args["label" .. i]
if label and label ~= "" then
entry.label = label
end
hasCustomColor = false
local color = args["color" .. i]
if color and color ~= "" then
entry.color = color
hasCustomColor = true
end
table.insert(result, entry)
sum = sum + entry.value
i = i + 1
end
-- re-loop to set values in labels
local willAutoscale = priv.willAutoscale(sum)
for _, entry in ipairs(result) do
local label = entry.label
if label and not label:find("%$[a-z]") then
-- autoscale will be forced, so use $v in labels
if willAutoscale then
entry.label = label .. " $v"
else
entry.label = label .. " ($p)"
end
end
end
-- tracking data errors
priv.sumErrorTracking(sum, result)
-- support other value mapping
local langOther = priv.getLangOther()
local colorOther = "#FEFDFD" -- white-ish for custom colors for best chance and contrast
local otherValue = 100 - sum
if args["other"] and args["other"] ~= "" then
if otherValue < 0.001 then
otherValue = 0
end
local otherEntry = { label = (args["other-label"] or langOther) .. " ($p)" }
if args["other-color"] and args["other-color"] ~= "" then
otherEntry.color = args["other-color"]
else
otherEntry.color = colorOther
end
table.insert(result, otherEntry)
elseif otherValue > 0.01 then
if hasCustomColor then
table.insert(result, {visible = false, label = langOther .. " ($v)", color = colorOther})
else
table.insert(result, {visible = false, label = langOther .. " ($v)"})
end
end
local jsonString = mw.text.jsonEncode(result)
return jsonString
end
function priv.getLangOther()
-- support other value mapping
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'pl') then
return "Inne"
end
return "Other"
end
-- Function to check if a value is true-ish
local trueValues = { ["true"] = true, ["1"] = true, ["on"] = true, ["yes"] = true }
function priv.isTrueishValue(value)
-- should return nil for empty args (i.e. undefined i.e. default)
if not value or value == "" then return nil end
value = priv.trim(value)
if value == "" then return nil end
-- other non-empty are false
return trueValues[value:lower()] or false
end
--[[
Parse classic template params into JSON with chart meta data.
]]
function p.parseMetaParams(frame)
local args = frame:getParent().args
local meta = {}
-- default meta for value1..n parameters
-- ...and for thumb right/left
local thumb = args["thumb"]
if args["value1"] or (thumb and (thumb == "right" or thumb == "left")) then
meta.size = 200
meta.legend = true
end
-- explicit meta param
if args["meta"] then
local decodeSuccess, tempMeta = pcall(function()
return mw.text.jsonDecode(args["meta"], mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
mw.log('invalid meta parameter')
else
meta = tempMeta
end
end
if args["size"] then meta.size = tonumber(args["size"]) end
if args["radius"] and tonumber(args["radius"]) then
meta.size = 2 * tonumber(args["radius"])
end
if args["autoscale"] then meta.autoscale = priv.isTrueishValue(args["autoscale"]) end
if args["legend"] then meta.legend = priv.isTrueishValue(args["legend"]) end
if args["ariahidechart"] then meta.ariahidechart = priv.isTrueishValue(args["ariahidechart"]) end
if args["direction"] and args["direction"] ~= "" then
meta.direction = args["direction"]:gsub("[^a-z0-9%-]", "")
end
if args["width"] and args["width"] ~= "" then
meta.width = args["width"]:gsub("[^a-z0-9%-]", "")
end
if args["caption"] and args["caption"] ~= "" then
meta.caption = args["caption"]
end
if args["footer"] and args["footer"] ~= "" then
meta.footer = args["footer"]
end
if args["labelformat"] and args["labelformat"] ~= "" then
meta.labelformat = args["labelformat"]
end
if args["precision"] and args["precision"] ~= "" then
meta.precision = tonumber(args["precision"])
end
return mw.text.jsonEncode(meta)
end
return p
4vpdcrex5pdnkjriw72qre6wnb42iqz
3649624
3649623
2026-04-05T08:22:52Z
Ranveig
39
3649624
Scribunto
text/plain
local p = {}
local priv = {} -- private functions scope
-- expose private for easy testing/debugging
p.__priv = priv
-- require exact colors for printing
local forPrinting = "-webkit-print-color-adjust: exact; print-color-adjust: exact;"
--[===[
Smooth piechart module.
Draws charts in HTML with an accessible legend (optional).
A list of all features is in the "TODO" section of the main `p.pie` function.
Module info:
- Changelog and TODO: [[:en:User:Nux/pie_chart_-_todo]] (Piechart 1.0, 2.0 and beyond).
- Author: [[:en:User:Nux|Maciej Nux]].
Use with a helper template that adds required CSS.
{{{1}}}:
[
{ "label": "pie: $v", "color": "wheat", "value": 40 },
{ "label": "cheese pizza $v", "color": "#fc0", "value": 20 },
{ "label": "mixed pizza: $v", "color": "#f60", "value": 20 },
{ "label": "raw pizza $v", "color": "#f30" }
]
Where $v is a formatted number (see `function prepareLabel`).
{{{meta}}}:
{"size":200, "autoscale":false, "legend":true}
All meta options are optional (see `function p.setupOptions`).
]===]
--[[
Debug:
-- labels and auto-value
local json_data = '[{"label": "k: $v", "value": 33.1}, {"label": "m: $v", "value": -1}]'
local html = p.renderPie(json_data)
mw.logObject(html)
-- autoscale values
local json_data = '[{"value": 700}, {"value": 300}]'
local html = p.renderPie(json_data, options)
mw.logObject(html)
-- size option
local json_data = '[{"label": "k: $v", "value": 33.1}, {"label": "m: $v", "value": -1}]'
local options = '{"size":200}'
local html = p.renderPie(json_data, options)
mw.logObject(html)
-- custom colors
local json_data = '[{"label": "k: $v", "value": 33.1, "color":"black"}, {"label": "m: $v", "value": -1, "color":"green"}]'
local html = p.renderPie(json_data)
mw.logObject(html)
-- 4-cuts
local entries = {
'{"label": "ciastka: $v", "value": 2, "color":"goldenrod"}',
'{"label": "słodycze: $v", "value": 4, "color":"darkred"}',
'{"label": "napoje: $v", "value": 1, "color":"lightblue"}',
'{"label": "kanapki: $v", "value": 3, "color":"wheat"}'
}
local json_data = '['..table.concat(entries, ',')..']'
local html = p.renderPie(json_data, '{"autoscale":true}')
mw.logObject(html)
-- colors
local fr = { args = { " 123 " } }
local ret = p.color(fr)
]]
--[[
Color for a slice (defaults).
{{{1}}}: slice number
]]
function p.color(frame)
local index = tonumber(priv.trim(frame.args[1]))
return ' ' .. priv.defaultColor(index)
end
--[===[
Main pie chart function.
TODO (maybe):
[[:en:User:Nux/pie_chart_-_todo#Hopes_and_dreams]]
]===]
function p.pie(frame)
local json_data = priv.trim(frame.args[1])
local options = {}
if (frame.args.meta) then
options.meta = priv.trim(frame.args.meta)
end
local html = p.renderPie(json_data, options)
return priv.trim(html)
end
-- Setup chart options.
function p.setupOptions(user_options)
local options = {
-- circle size in [px]
size = 100,
-- autoscale values (otherwise assume they sum up to 100)
autoscale = false,
-- hide chart for screen readers (when you have a table, forced for legend)
ariahidechart = false,
-- show legend (defaults to the left side)
legend = false,
-- direction of legend-chart flexbox (flex-direction)
direction = "",
-- width of the main container
-- when direction is used defaults to max-width, otherwise it's not added
width = "",
-- caption above the labels
caption = "",
-- footer below the labels
footer = "",
-- formatting template for labels
labelformat = "",
-- percentage number formatting precision (number of digits; -1 = automatic mode)
precision = -1,
}
-- internals
options.style = ""
if user_options and user_options.meta then
local decodeSuccess, rawOptions = pcall(function()
return mw.text.jsonDecode(user_options.meta, mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
rawOptions = false
mw.log('invalid meta parameters')
end
if rawOptions then
if type(rawOptions.size) == "number" then
options.size = math.floor(rawOptions.size)
end
options.autoscale = rawOptions.autoscale or false
if rawOptions.legend then
options.legend = true
end
if rawOptions.ariahidechart then
options.ariahidechart = true
end
if (type(rawOptions.direction) == "string") then
-- Remove unsafe/invalid characters
local sanitized = rawOptions.direction:gsub("[^a-z0-9%-]", "")
-- also adjust width so that row-reverse won't push things to the right
options.direction = 'flex-direction: ' .. sanitized .. ';'
options.width = 'width: max-content;'
end
if (type(rawOptions.width) == "string") then
-- note, this intentionaly overwrites what was set for direction
local sanitized = rawOptions.width:gsub("[^a-z0-9%-]", "")
options.width = 'width: ' .. sanitized .. ';'
end
if (type(rawOptions.caption) == "string") then
options.caption = rawOptions.caption
end
if (type(rawOptions.footer) == "string") then
options.footer = rawOptions.footer
end
if (type(rawOptions.labelformat) == "string") then
options.labelformat = rawOptions.labelformat
end
if type(rawOptions.precision) == "number" then
options.precision = math.floor(rawOptions.precision)
end
end
-- build style
if options.width ~= "" then
options.style = options.style .. options.width
end
if options.direction ~= "" then
options.style = options.style .. options.direction
end
end
if (options.legend) then
options.ariahidechart = true
end
return options
end
-- internal for testing legend rendering
p.__priv.legendDebug = false
--[[
Render piechart.
@param json_data JSON string with pie data.
]]
function p.renderPie(json_data, user_options)
if type(json_data) ~= "string" then
error('invalid piechart data type: '..type(json_data))
end
if #json_data < 2 then
error('piechart data is empty')
end
local decodeSuccess, data = pcall(function()
return mw.text.jsonDecode(json_data, mw.text.JSON_TRY_FIXING)
end)
-- Handle decode error
if not decodeSuccess then
error('invalid piechart data: '..json_data)
end
local options = p.setupOptions(user_options)
-- prepare
local ok, total = p.prepareEntries(data, options)
-- init render
local html = "<div class='smooth-pie-container' style='"..options.style.."'>"
-- error info
if not ok then
html = html .. priv.renderErrors(data)
end
-- render legend
if options.legend then
html = html .. p.renderLegend(data, options)
end
if p.__priv.legendDebug then
return html
end
-- render items
local header, items, footer = p.renderEntries(ok, total, data, options)
html = html .. header .. items .. footer
-- end .smooth-pie-container
html = html .. "\n</div>"
return html
end
function priv.boundaryFormatting(diff)
local value = 0.0
if diff <= 1.0 then
value = math.ceil(diff / 0.2) * 0.2 -- 0.2 step
else
value = math.ceil(diff / 0.5) * 0.5 -- 0.5 step
end
return string.format("%.1f", value)
end
-- Check if sum will trigger autoscaling
function priv.willAutoscale(sum)
-- Compare with a number larger then 100% to avoid floating-point precision problems
--- ...and data precision problems https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-PrimeHunter-20250420202500-Allow_percentage_sum_slightly_above_100
local diff = sum - 100
local grace = 1
return diff > grace
end
-- Tracking errors in data (note: somewhat expensive, similar to a red link)
-- In short: ±0.3 is a reasonable deviation; ±1 when the errors accumulate
-- https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-Nux-20250429152000-Nux-20250422224600
function priv.sumErrorTracking(sum, items)
local diff = sum - 100
if diff >= 0.4 and diff <= 10 then
local firstItem = items[1]
local lastItem = items[#items]
mw.addWarning("pie chart: Σ (value) = "..sum.."% ("..firstItem.value.." + .. .+ "..lastItem.value..")")
if mw.title.getCurrentTitle().namespace == 0 then
local suffix = priv.boundaryFormatting(diff)
_ = mw.title.new("Module:Piechart/tracing/diff below "..suffix).id
end
end
end
-- Prepare data (slices etc)
function p.prepareEntries(data, options)
local sum = priv.sumValues(data);
-- force autoscale when over 100
if priv.willAutoscale(sum) then
options.autoscale = true
end
-- pre-format entries
local ok = true
local no = 0
local total = #data
for index, entry in ipairs(data) do
no = no + 1
if not priv.prepareSlice(entry, no, sum, total, options) then
no = no - 1
ok = false
end
end
total = no -- total valid
return ok, total
end
function priv.sumValues(data)
local sum = 0;
for _, entry in ipairs(data) do
local value = entry.value
if not (type(value) ~= "number" or value < 0) then
sum = sum + value
end
end
return sum
end
-- render error info
function priv.renderErrors(data)
local html = "\n<ol class='chart-errors' style='display:none'>"
for _, entry in ipairs(data) do
if entry.error then
local entryJson = mw.text.jsonEncode(entry)
html = html .. "\n<li>".. entryJson .."</li>"
end
end
return html .. "\n</ol>\n"
end
-- Prepare single slice data (modifies entry).
-- @param no = 1..total
function priv.prepareSlice(entry, no, sum, total, options)
local autoscale = options.autoscale
local value = entry.value
if (type(value) ~= "number" or value < 0) then
if autoscale then
entry.error = "cannot autoscale unknown value"
return false
end
value = 100 - sum
end
-- entry.raw only when scaled
if autoscale then
entry.raw = value
value = (value / sum) * 100
end
entry.value = value
-- prepare final label
entry.label = priv.prepareLabel(options.labelformat, entry, options.precision)
-- background, but also color for MW syntax linter
entry.bcolor = priv.backColor(entry, no, total) .. ";color:#000"
return true
end
-- render legend for pre-processed entries
function p.renderLegend(data, options)
local html = ""
if options.caption ~= "" or options.footer ~= "" then
html = "\n<div class='smooth-pie-legend-container'>"
end
if options.caption ~= "" then
html = html .. "<div class='smooth-pie-caption'>" .. options.caption .. "</div>"
end
html = html .. "\n<ol class='smooth-pie-legend'>"
for _, entry in ipairs(data) do
if not entry.error then
html = html .. priv.renderLegendItem(entry, options)
end
end
html = html .. "\n</ol>\n"
if options.footer ~= "" then
html = html .. "<div class='smooth-pie-footer'>" .. options.footer .. "</div>"
end
if options.caption ~= "" or options.footer ~= "" then
html = html .. "</div>\n"
end
return html
end
-- render legend item
function priv.renderLegendItem(entry, options)
-- invisible value (for a11y reasons this should not be used for important values!)
if entry.visible ~= nil and entry.visible == false then
return ""
end
local label = entry.label
local bcolor = entry.bcolor
local html = "\n<li>"
if p.__priv.legendDebug then
forPrinting = ""
end
html = html .. '<span class="l-color" style="'..forPrinting..bcolor..'"></span>'
html = html .. '<span class="l-label">'..label..'</span>'
return html .. "</li>"
end
-- Prepare data (slices etc)
function p.renderEntries(ok, total, data, options)
-- cache for some items (small slices)
p.cuts = mw.loadJsonData('Module:Piechart/cuts.json')
local first = true
local previous = 0
local items = ""
for index, entry in ipairs(data) do
if not entry.error then
items = items .. priv.renderItem(previous, entry, options)
previous = previous + entry.value
end
end
local header = priv.renderHeader(options)
local footer = '\n<div class="smooth-pie-border"></div></div>'
return header, items, footer
end
-- header of pie-items (class="smooth-pie")
function priv.renderHeader(options)
local bcolor = 'background:#888;color:#000'
local size = options.size
-- hide chart for readers, especially when legend is there
local aria = ""
if (options.ariahidechart) then
aria = 'aria-hidden="true"'
end
-- slices container and last slice
local style = 'width:'..size..'px;height:'..size..'px;'..bcolor..';'..forPrinting
local html = [[
<div class="smooth-pie"
style="]]..style..[["
]]..aria..[[
>]]
return html
end
-- Render pie-item
-- (previous is a sum of previous values)
function priv.renderItem(previous, entry, options)
local value = entry.value
local label = entry.label
local bcolor = entry.bcolor
-- value too small to see
if (value < 0.03) then
mw.log('value too small', value, label)
mw.addWarning("pie chart: Value too small ↆ "..value.."% ("..label..")")
return ""
end
-- minimize transformation defects
if value < 10 then
if previous > 1 then
previous = previous - 0.01
end
value = value + 0.02
else
if previous > 1 then
previous = previous - 0.1
end
value = value + 0.2
end
-- force sum to be below 100% (needed due to value errors)
if previous + value > 100 then
if previous >= 100 then
mw.log('previous is already at 100', value, label)
return ""
end
value = 100 - previous
end
local html = ""
local size = ''
-- mw.logObject({'v,p,l', value, previous, label})
if (value >= 50) then
html = priv.sliceWithClass('pie50', 50, value, previous, bcolor, label)
elseif (value >= 25) then
html = priv.sliceWithClass('pie25', 25, value, previous, bcolor, label)
elseif (value >= 12.5) then
html = priv.sliceWithClass('pie12-5', 12.5, value, previous, bcolor, label)
elseif (value >= 7) then
html = priv.sliceWithClass('pie7', 7, value, previous, bcolor, label)
elseif (value >= 5) then
html = priv.sliceWithClass('pie5', 5, value, previous, bcolor, label)
else
-- 0-5%
local cutIndex = priv.round(value*10)
if cutIndex < 1 then
cutIndex = 1
end
local cut = p.cuts[cutIndex]
local transform = priv.rotation(previous)
html = priv.sliceX(cut, transform, bcolor, label)
end
-- mw.log(html)
return html
end
-- round to int
function priv.round(number)
return math.floor(number + 0.5)
end
-- render full slice with specific class
function priv.sliceWithClass(sizeClass, sizeStep, value, previous, bcolor, label)
local transform = priv.rotation(previous)
local html = ""
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
-- mw.logObject({'sliceWithClass:', sizeClass, sizeStep, value, previous, bcolor, label})
if (value > sizeStep) then
local extra = value - sizeStep
transform = priv.rotation(previous + extra)
-- mw.logObject({'sliceWithClass; extra, transform', extra, transform})
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
end
return html
end
-- render single slice
function priv.sliceBase(sizeClass, transform, bcolor, label)
local style = bcolor
if transform ~= "" then
style = style .. '; ' .. transform
end
return '\n\t<div class="'..sizeClass..'" style="'..style..'" title="'..p.extract_text(label)..'"></div>'
end
-- small slice cut to fluid size.
-- range in theory: 0 to 24.(9)% reaching 24.(9)% for cut = +inf
-- range in practice: 0 to 5%
function priv.sliceX(cut, transform, bcolor, label)
local path = 'clip-path: polygon(0% 0%, '..cut..'% 0%, 0 100%)'
return '\n\t<div style="'..transform..'; '..bcolor..'; '..path..'" title="'..p.extract_text(label)..'"></div>'
end
-- translate value to turn rotation (v=100 => 1.0turn)
function priv.rotation(value)
if (value > 0.001) then
local f = string.format("%.7f", value / 100)
f = f:gsub("(%d)0+$", "%1") -- remove trailing zeros
return "transform: rotate("..f.."turn)"
end
return ''
end
-- Language sensitive float, small numbers.
function priv.formatNum(value, precision)
precision = precision or -1
local v = ""
if precision >= 0 then
-- custom format
v = string.format("%." .. precision .. "f", value)
else
-- automatic
if (value < 10) then
v = string.format("%.2f", value)
else
v = string.format("%.1f", value)
end
end
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'pl') then
v = v:gsub("%.", ",")
end
return v
end
-- Format large values.
function priv.formatLargeNum(value)
local lang = mw.language.getContentLanguage()
-- add thusands separators
local v = lang:formatNum(value)
return v
end
-- Testing formatLargeNum.
-- p.__priv.test_formatLargeNum()
function priv.test_formatLargeNum()
mw.log("must not add fractional part")
mw.log( p.__priv.formatLargeNum(12) )
mw.log( p.__priv.formatLargeNum(123) )
mw.log("should preserve fractional part for small numbers")
mw.log( p.__priv.formatLargeNum(1.1) )
mw.log( p.__priv.formatLargeNum(1.12) )
mw.log( p.__priv.formatLargeNum(12.1) )
mw.log("can preserve long fractional part")
mw.log( p.__priv.formatLargeNum(1.1234) )
mw.log( p.__priv.formatLargeNum(1.12345) )
mw.log("should add separators above 1k")
mw.log( p.__priv.formatLargeNum(999) )
mw.log( p.__priv.formatLargeNum(1234) )
mw.log( p.__priv.formatLargeNum(12345) )
mw.log( p.__priv.formatLargeNum(123456) )
mw.log( p.__priv.formatLargeNum(1234567) )
mw.log("must handle large float, but might round values")
mw.log( p.__priv.formatLargeNum(1234.123) )
mw.log( p.__priv.formatLargeNum(12345.123) )
mw.log( p.__priv.formatLargeNum(123456.123) )
mw.log( p.__priv.formatLargeNum(1234567.123) )
end
--[[
Prepare final label.
Typical tpl:
"$L: $v" (same as: "$label: $auto")
will result in:
"Abc: 23%" -- when values are percentages
"Abc: 1234 (23%)" -- when values are autoscaled
Advanced tpl:
"$L: $d ($p)" e.g. "Abc: 1234 (23%)" for {"label":"Abc", "value":1234}
"$L: $v" is the same as above when values are autoscaled
Long vs short variable names:
$label ($L)
$auto ($v)
$value ($d)
$percent ($p)
]]
function priv.prepareLabel(tpl, entry, precision)
-- setup default tpl
if not tpl or tpl == "" then
-- simple if no label
if not entry.label or entry.label == "" then
tpl = "$v"
else
if entry.label:find("%$[a-z]") then
tpl = entry.label
else
tpl = "$L: $v"
end
end
end
local labelLabel = entry.label and entry.label or priv.getLangOther()
-- format % value without %
local pRaw = priv.formatNum(entry.value, precision)
local pp = pRaw .. "%%"
local label = tpl
-- aliases
label = label
:gsub("%$label", "$L")
:gsub("%$auto", "$v")
:gsub("%$value", "$d")
:gsub("%$percent", "$p")
-- replace variables
label = label:gsub("%$L", labelLabel)
local d = priv.formatLargeNum(entry.raw and entry.raw or entry.value)
local v = entry.raw and (d .. " (" .. pp .. ")") or pp
label = label
:gsub("%$p", pp)
:gsub("%$d", d)
:gsub("%$v", v)
-- Report unknown variables
for var in label:gmatch("%$[a-zA-Z]+") do
-- in preview
mw.addWarning("pie chart: Unknown variable (wrong format of your label): " .. var)
-- tracing links
_ = mw.title.new("Module:Piechart/tracing/unknown-variable").id
end
return label
end
-- default colors
-- source: https://colorbrewer2.org/#type=diverging&scheme=PRGn&n=6
local colorGroupSize = 3 -- must be at least 3
local colorGroups = 4
local colorPalette = {
-- green (from dark)
'#1b7837',
'#7fbf7b',
'#d9f0d3',
-- violet
'#762a83',
'#af8dc3',
'#e7d4e8',
-- red
'#d73027',
'#fc8d59',
'#fee090',
-- blue
'#4575b4',
'#91bfdb',
'#e0f3f8',
}
local lastColor = '#fff'
-- background color from entry or the default colors
function priv.backColor(entry, no, total)
if (type(entry.color) == "string") then
-- Remove unsafe characters from entry.color
local sanitizedColor = entry.color
:gsub('#', '#') -- workaround Module:Political_party issue reported on talk
:gsub("[^a-zA-Z0-9#%-]", "")
return 'background:' .. sanitizedColor
else
local color = priv.defaultColor(no, total)
return 'background:' .. color
end
end
-- color from the default colors
function priv.defaultColor(no, total)
local color = lastColor
if no <= 0 then
return color
end
local size = #colorPalette
if not total or total == 0 then
total = size + 1
end
local colorNo = priv.defaultColorNo(no, total, size)
if colorNo > 0 then
color = colorPalette[colorNo]
end
return color
end
-- gets color number from default colors
-- trys to return a light color as the last one
-- 0 means white-ish color should be used
function priv.defaultColorNo(no, total, size)
local color = 0 -- special, lastColor
if total == 1 then
color = 1
elseif total <= colorGroupSize * (colorGroups - 1) then
if no < total then
color = no
else
local groupIndex = ((no - 1) % colorGroupSize)
if groupIndex == 0 then -- dark
color = no+1
elseif groupIndex == 1 then -- med
color = no+1
else
color = no
end
end
elseif no < total then
color = ((no - 1) % size) + 1
end
return color
end
--[[
Testing defaultColorNo:
p.__priv.test_defaultColorNo(1, 12)
p.__priv.test_defaultColorNo(2, 12)
p.__priv.test_defaultColorNo(3, 12)
p.__priv.test_defaultColorNo(4, 12)
p.__priv.test_defaultColorNo(5, 12)
p.__priv.test_defaultColorNo(6, 12)
]]
function priv.test_defaultColorNo(total, size)
for no=1,total do
local color = priv.defaultColorNo(no, total, size)
mw.logObject({no=no, color=color})
end
end
--[[
trim string
note:
`(s:gsub(...))` returns only a string
`s:gsub(...)` returns a string and a number
]]
function priv.trim(s)
return (s:gsub("^%s+", ""):gsub("%s+$", ""))
end
--[[
Extract text from simple wikitext.
For now only works with links.
]]
-- Tests:
-- mw.log(p.extract_text("[[candy|sweets]]: $v"))
-- mw.log(p.extract_text("[[sandwich]]es: $v"))
-- mw.log(p.extract_text("sandwich]]es: $v"))
-- mw.log(p.extract_text("sandwiches: $v"))
function p.extract_text(label)
label = label
-- replace links with pipe (e.g., [[candy|sweets]])
:gsub("%[%[[^|%]]+|(.-)%]%]", "%1")
-- replace simple links without pipe (e.g., [[sandwich]])
:gsub("%[%[(.-)%]%]", "%1")
-- remove templates?
-- :gsub("{.-}", "")
-- remove tags
:gsub("<[^>]+>", "")
-- escape special chars just in case
:gsub("<", "<"):gsub(">", ">")
:gsub("'", "'"):gsub("\"", """)
return label
end
--[[
Parse classic template params into JSON.
From:
|label1=cookies: $v |value1=11 |color1=goldenrod
|label2=sweets: $v |value2=20 |color2=darkred
To:
{"value":11,"color":"goldenrod","label":"cookies: $v"},
{"value":20,"color":"darkred","label":"sweets: $v"},
]]
function p.parseEnumParams(frame)
local args = frame:getParent().args
return priv.parseEnumParams(args)
end
function priv.parseEnumParams(args)
local result = {}
local i = 1
local sum = 0.0
local hasCustomColor = false -- has last custom color
while args["value" .. i] do
-- value is required in this mode; it's also assumed to be 0..100
local entry = { value = tonumber(args["value" .. i]) or 0 }
-- label and color is optional
local label = args["label" .. i]
if label and label ~= "" then
entry.label = label
end
hasCustomColor = false
local color = args["color" .. i]
if color and color ~= "" then
entry.color = color
hasCustomColor = true
end
table.insert(result, entry)
sum = sum + entry.value
i = i + 1
end
-- re-loop to set values in labels
local willAutoscale = priv.willAutoscale(sum)
for _, entry in ipairs(result) do
local label = entry.label
if label and not label:find("%$[a-z]") then
-- autoscale will be forced, so use $v in labels
if willAutoscale then
entry.label = label .. " $v"
else
entry.label = label .. " ($p)"
end
end
end
-- tracking data errors
priv.sumErrorTracking(sum, result)
-- support other value mapping
local langOther = priv.getLangOther()
local colorOther = "#FEFDFD" -- white-ish for custom colors for best chance and contrast
local otherValue = 100 - sum
if args["other"] and args["other"] ~= "" then
if otherValue < 0.001 then
otherValue = 0
end
local otherEntry = { label = (args["other-label"] or langOther) .. " ($p)" }
if args["other-color"] and args["other-color"] ~= "" then
otherEntry.color = args["other-color"]
else
otherEntry.color = colorOther
end
table.insert(result, otherEntry)
elseif otherValue > 0.01 then
if hasCustomColor then
table.insert(result, {visible = false, label = langOther .. " ($v)", color = colorOther})
else
table.insert(result, {visible = false, label = langOther .. " ($v)"})
end
end
local jsonString = mw.text.jsonEncode(result)
return jsonString
end
function priv.getLangOther()
-- support other value mapping
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'pl') then
return "Inne"
end
return "Other"
end
-- Function to check if a value is true-ish
local trueValues = { ["true"] = true, ["1"] = true, ["on"] = true, ["yes"] = true }
function priv.isTrueishValue(value)
-- should return nil for empty args (i.e. undefined i.e. default)
if not value or value == "" then return nil end
value = priv.trim(value)
if value == "" then return nil end
-- other non-empty are false
return trueValues[value:lower()] or false
end
--[[
Parse classic template params into JSON with chart meta data.
]]
function p.parseMetaParams(frame)
local args = frame:getParent().args
local meta = {}
-- default meta for value1..n parameters
-- ...and for thumb right/left
local thumb = args["thumb"]
if args["value1"] or (thumb and (thumb == "right" or thumb == "left")) then
meta.size = 200
meta.legend = true
end
-- explicit meta param
if args["meta"] then
local decodeSuccess, tempMeta = pcall(function()
return mw.text.jsonDecode(args["meta"], mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
mw.log('invalid meta parameter')
else
meta = tempMeta
end
end
if args["size"] then meta.size = tonumber(args["size"]) end
if args["radius"] and tonumber(args["radius"]) then
meta.size = 2 * tonumber(args["radius"])
end
if args["autoscale"] then meta.autoscale = priv.isTrueishValue(args["autoscale"]) end
if args["legend"] then meta.legend = priv.isTrueishValue(args["legend"]) end
if args["ariahidechart"] then meta.ariahidechart = priv.isTrueishValue(args["ariahidechart"]) end
if args["direction"] and args["direction"] ~= "" then
meta.direction = args["direction"]:gsub("[^a-z0-9%-]", "")
end
if args["width"] and args["width"] ~= "" then
meta.width = args["width"]:gsub("[^a-z0-9%-]", "")
end
if args["caption"] and args["caption"] ~= "" then
meta.caption = args["caption"]
end
if args["footer"] and args["footer"] ~= "" then
meta.footer = args["footer"]
end
if args["labelformat"] and args["labelformat"] ~= "" then
meta.labelformat = args["labelformat"]
end
if args["precision"] and args["precision"] ~= "" then
meta.precision = tonumber(args["precision"])
end
return mw.text.jsonEncode(meta)
end
return p
0pe0jhyrd7qwc5sgf62bymcop20x1mi
3649625
3649624
2026-04-05T08:29:03Z
Ranveig
39
Slovensk versjon med komma
3649625
Scribunto
text/plain
local p = {}
local priv = {} -- private functions scope
-- expose private for easy testing/debugging
p.__priv = priv
-- require exact colors for printing
local forPrinting = "-webkit-print-color-adjust: exact; print-color-adjust: exact;"
--[===[
Smooth piechart module.
Draws charts in HTML with an accessible legend (optional).
A list of all features is in the "TODO" section of the main `p.pie` function.
Module info:
- Changelog and TODO: [[:en:User:Nux/pie_chart_-_todo]] (Piechart 1.0, 2.0 and beyond).
- Author: [[:en:User:Nux|Maciej Nux]].
Use with a helper template that adds required CSS.
{{{1}}}:
[
{ "label": "pie: $v", "color": "wheat", "value": 40 },
{ "label": "cheese pizza $v", "color": "#fc0", "value": 20 },
{ "label": "mixed pizza: $v", "color": "#f60", "value": 20 },
{ "label": "raw pizza $v", "color": "#f30" }
]
Where $v is a formatted number (see `function prepareLabel`).
{{{meta}}}:
{"size":200, "autoscale":false, "legend":true}
All meta options are optional (see `function p.setupOptions`).
]===]
--[[
Color for a slice (defaults).
{{{1}}}: slice number
]]
function p.color(frame)
local index = tonumber(priv.trim(frame.args[1]))
return ' ' .. priv.defaultColor(index)
end
--[===[
Main pie chart function.
]===]
function p.pie(frame)
local json_data = priv.trim(frame.args[1])
local options = {}
if (frame.args.meta) then
options.meta = priv.trim(frame.args.meta)
end
local html = p.renderPie(json_data, options)
return priv.trim(html)
end
-- Setup chart options.
function p.setupOptions(user_options)
local options = {
-- circle size in [px]
size = 100,
-- autoscale values (otherwise assume they sum up to 100)
autoscale = false,
-- hide chart for screen readers (when you have a table, forced for legend)
ariahidechart = false,
-- show legend (defaults to the left side)
legend = false,
-- direction of legend-chart flexbox (flex-direction)
direction = "",
-- width of the main container
-- when direction is used defaults to max-width, otherwise it's not added
width = "",
-- caption above the labels
caption = "",
-- footer below the labels
footer = "",
-- formatting template for labels
labelformat = "",
}
-- internals
options.style = ""
if user_options and user_options.meta then
local decodeSuccess, rawOptions = pcall(function()
return mw.text.jsonDecode(user_options.meta, mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
rawOptions = false
mw.log('invalid meta parameters')
end
if rawOptions then
if type(rawOptions.size) == "number" then
options.size = math.floor(rawOptions.size)
end
options.autoscale = rawOptions.autoscale or false
if rawOptions.legend then
options.legend = true
end
if rawOptions.ariahidechart then
options.ariahidechart = true
end
if (type(rawOptions.direction) == "string") then
-- Remove unsafe/invalid characters
local sanitized = rawOptions.direction:gsub("[^a-z0-9%-]", "")
-- also adjust width so that row-reverse won't push things to the right
options.direction = 'flex-direction: ' .. sanitized .. ';'
options.width = 'width: max-content;'
end
if (type(rawOptions.width) == "string") then
-- note, this intentionaly overwrites what was set for direction
local sanitized = rawOptions.width:gsub("[^a-z0-9%-]", "")
options.width = 'width: ' .. sanitized .. ';'
end
if (type(rawOptions.caption) == "string") then
options.caption = rawOptions.caption
end
if (type(rawOptions.footer) == "string") then
options.footer = rawOptions.footer
end
if (type(rawOptions.labelformat) == "string") then
options.labelformat = rawOptions.labelformat
end
end
-- build style
if options.width ~= "" then
options.style = options.style .. options.width
end
if options.direction ~= "" then
options.style = options.style .. options.direction
end
end
if (options.legend) then
options.ariahidechart = true
end
return options
end
-- internal for testing legend rendering
p.__priv.legendDebug = false
--[[
Render piechart.
@param json_data JSON string with pie data.
]]
function p.renderPie(json_data, user_options)
if type(json_data) ~= "string" then
error('invalid piechart data type: '..type(json_data))
end
if #json_data < 2 then
error('piechart data is empty')
end
-- [[POPRAVEK ZA VEJICO V JSON VNOSU (sl)]]
-- MW funkcija mw.text.jsonDecode ne prepozna vejice (,) kot decimalnega ločila,
-- zato jo zamenjamo s piko (.), da je JSON veljaven.
-- Zamenjamo vsak vzorec "številka,številka" z "številka.številka".
json_data = json_data:gsub("([%d]),([%d])", "%1.%2")
local decodeSuccess, data = pcall(function()
return mw.text.jsonDecode(json_data, mw.text.JSON_TRY_FIXING)
end)
-- Handle decode error
if not decodeSuccess then
error('invalid piechart data: '..json_data)
end
local options = p.setupOptions(user_options)
-- prepare
local ok, total = p.prepareEntries(data, options)
-- init render
local html = "<div class='smooth-pie-container' style='"..options.style.."'>"
-- error info
if not ok then
html = html .. priv.renderErrors(data)
end
-- render legend
if options.legend then
html = html .. p.renderLegend(data, options)
end
if p.__priv.legendDebug then
return html
end
-- render items
local header, items, footer = p.renderEntries(ok, total, data, options)
html = html .. header .. items .. footer
-- end .smooth-pie-container
html = html .. "\n</div>"
return html
end
function priv.boundaryFormatting(diff)
local value = 0.0
if diff <= 1.0 then
value = math.ceil(diff / 0.2) * 0.2 -- 0.2 step
else
value = math.ceil(diff / 0.5) * 0.5 -- 0.5 step
end
return string.format("%.1f", value)
end
-- Check if sum will trigger autoscaling
function priv.willAutoscale(sum)
-- Compare with a number larger then 100% to avoid floating-point precision problems
--- ...and data precision problems https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-PrimeHunter-20250420202500-Allow_percentage_sum_slightly_above_100
local diff = sum - 100
local grace = 1
return diff > grace
end
-- Tracking errors in data (note: somewhat expensive, similar to a red link)
-- In short: ±0.3 is a reasonable deviation; ±1 when the errors accumulate
-- https://en.wikipedia.org/wiki/Template_talk:Pie_chart#c-Nux-20250429152000-Nux-20250422224600
function priv.sumErrorTracking(sum, items)
local diff = sum - 100
if diff >= 0.4 and diff <= 10 then
local firstItem = items[1]
local lastItem = items[#items]
mw.addWarning("pie chart: Σ (value) = "..sum.."% ("..firstItem.value.." + .. .+ "..lastItem.value..")")
if mw.title.getCurrentTitle().namespace == 0 then
local suffix = priv.boundaryFormatting(diff)
_ = mw.title.new("Module:Piechart/tracing/diff below "..suffix).id
end
end
end
-- Prepare data (slices etc)
function p.prepareEntries(data, options)
local sum = priv.sumValues(data);
-- force autoscale when over 100
if priv.willAutoscale(sum) then
options.autoscale = true
end
-- pre-format entries
local ok = true
local no = 0
local total = #data
for index, entry in ipairs(data) do
no = no + 1
if not priv.prepareSlice(entry, no, sum, total, options) then
no = no - 1
ok = false
end
end
total = no -- total valid
return ok, total
end
function priv.sumValues(data)
local sum = 0;
for _, entry in ipairs(data) do
local value = entry.value
if not (type(value) ~= "number" or value < 0) then
sum = sum + value
end
end
return sum
end
-- render error info
function priv.renderErrors(data)
local html = "\n<ol class='chart-errors' style='display:none'>"
for _, entry in ipairs(data) do
if entry.error then
local entryJson = mw.text.jsonEncode(entry)
html = html .. "\n<li>".. entryJson .."</li>"
end
end
return html .. "\n</ol>\n"
end
-- Prepare single slice data (modifies entry).
-- @param no = 1..total
function priv.prepareSlice(entry, no, sum, total, options)
local autoscale = options.autoscale
local value = entry.value
if (type(value) ~= "number" or value < 0) then
if autoscale then
entry.error = "cannot autoscale unknown value"
return false
end
value = 100 - sum
end
-- entry.raw only when scaled
if autoscale then
entry.raw = value
value = (value / sum) * 100
end
entry.value = value
-- prepare final label
entry.label = priv.prepareLabel(options.labelformat, entry)
-- background, but also color for MW syntax linter
entry.bcolor = priv.backColor(entry, no, total) .. ";color:#000"
return true
end
-- render legend for pre-processed entries
function p.renderLegend(data, options)
local html = ""
if options.caption ~= "" or options.footer ~= "" then
html = "\n<div class='smooth-pie-legend-container'>"
end
if options.caption ~= "" then
html = html .. "<div class='smooth-pie-caption'>" .. options.caption .. "</div>"
end
html = html .. "\n<ol class='smooth-pie-legend'>"
for _, entry in ipairs(data) do
if not entry.error then
html = html .. priv.renderLegendItem(entry, options)
end
end
html = html .. "\n</ol>\n"
if options.footer ~= "" then
html = html .. "<div class='smooth-pie-footer'>" .. options.footer .. "</div>"
end
if options.caption ~= "" or options.footer ~= "" then
html = html .. "</div>\n"
end
return html
end
-- render legend item
function priv.renderLegendItem(entry, options)
-- invisible value (for a11y reasons this should not be used for important values!)
if entry.visible ~= nil and entry.visible == false then
return ""
end
local label = entry.label
local bcolor = entry.bcolor
local html = "\n<li>"
if p.__priv.legendDebug then
forPrinting = ""
end
html = html .. '<span class="l-color" style="'..forPrinting..bcolor..'"></span>'
html = html .. '<span class="l-label">'..label..'</span>'
return html .. "</li>"
end
-- Prepare data (slices etc)
function p.renderEntries(ok, total, data, options)
-- cache for some items (small slices)
p.cuts = mw.loadJsonData('Module:Piechart/cuts.json')
local first = true
local previous = 0
local items = ""
for index, entry in ipairs(data) do
if not entry.error then
items = items .. priv.renderItem(previous, entry, options)
previous = previous + entry.value
end
end
local header = priv.renderHeader(options)
local footer = '\n<div class="smooth-pie-border"></div></div>'
return header, items, footer
end
-- header of pie-items (class="smooth-pie")
function priv.renderHeader(options)
local bcolor = 'background:#888;color:#000'
local size = options.size
-- hide chart for readers, especially when legend is there
local aria = ""
if (options.ariahidechart) then
aria = 'aria-hidden="true"'
end
-- slices container and last slice
local style = 'width:'..size..'px;height:'..size..'px;'..bcolor..';'..forPrinting
local html = [[
<div class="smooth-pie"
style="]]..style..[["
]]..aria..[[
>]]
return html
end
-- Render pie-item
-- (previous is a sum of previous values)
function priv.renderItem(previous, entry, options)
local value = entry.value
local label = entry.label
local bcolor = entry.bcolor
-- value too small to see
if (value < 0.03) then
mw.log('value too small', value, label)
mw.addWarning("pie chart: Value too small ↆ "..value.."% ("..label..")")
return ""
end
-- minimize transformation defects
if value < 10 then
if previous > 1 then
previous = previous - 0.01
end
value = value + 0.02
else
if previous > 1 then
previous = previous - 0.1
end
value = value + 0.2
end
-- force sum to be below 100% (needed due to value errors)
if previous + value > 100 then
if previous >= 100 then
mw.log('previous is already at 100', value, label)
return ""
end
value = 100 - previous
end
local html = ""
local size = ''
-- mw.logObject({'v,p,l', value, previous, label})
if (value >= 50) then
html = priv.sliceWithClass('pie50', 50, value, previous, bcolor, label)
elseif (value >= 25) then
html = priv.sliceWithClass('pie25', 25, value, previous, bcolor, label)
elseif (value >= 12.5) then
html = priv.sliceWithClass('pie12-5', 12.5, value, previous, bcolor, label)
elseif (value >= 7) then
html = priv.sliceWithClass('pie7', 7, value, previous, bcolor, label)
elseif (value >= 5) then
html = priv.sliceWithClass('pie5', 5, value, previous, bcolor, label)
else
-- 0-5%
local cutIndex = priv.round(value*10)
if cutIndex < 1 then
cutIndex = 1
end
local cut = p.cuts[cutIndex]
local transform = priv.rotation(previous)
html = priv.sliceX(cut, transform, bcolor, label)
end
-- mw.log(html)
return html
end
-- round to int
function priv.round(number)
return math.floor(number + 0.5)
end
-- render full slice with specific class
function priv.sliceWithClass(sizeClass, sizeStep, value, previous, bcolor, label)
local transform = priv.rotation(previous)
local html = ""
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
-- mw.logObject({'sliceWithClass:', sizeClass, sizeStep, value, previous, bcolor, label})
if (value > sizeStep) then
local extra = value - sizeStep
transform = priv.rotation(previous + extra)
-- mw.logObject({'sliceWithClass; extra, transform', extra, transform})
html = html .. priv.sliceBase(sizeClass, transform, bcolor, label)
end
return html
end
-- render single slice
function priv.sliceBase(sizeClass, transform, bcolor, label)
local style = bcolor
if transform ~= "" then
style = style .. '; ' .. transform
end
return '\n\t<div class="'..sizeClass..'" style="'..style..'" title="'..p.extract_text(label)..'"></div>'
end
-- small slice cut to fluid size.
-- range in theory: 0 to 24.(9)% reaching 24.(9)% for cut = +inf
-- range in practice: 0 to 5%
function priv.sliceX(cut, transform, bcolor, label)
local path = 'clip-path: polygon(0% 0%, '..cut..'% 0%, 0 100%)'
return '\n\t<div style="'..transform..'; '..bcolor..'; '..path..'" title="'..p.extract_text(label)..'"></div>'
end
-- translate value to turn rotation (v=100 => 1.0turn)
function priv.rotation(value)
if (value > 0.001) then
local f = string.format("%.7f", value / 100)
f = f:gsub("(%d)0+$", "%1") -- remove trailing zeros
return "transform: rotate("..f.."turn)"
end
return ''
end
-- Language sensitive float, small numbers.
function priv.formatNum(value)
local lang = mw.language.getContentLanguage()
-- doesn't do precision :(
-- local v = lang:formatNum(value)
local v = ""
if (value < 10) then
v = string.format("%.2f", value)
else
v = string.format("%.1f", value)
end
-- Dodana lokalizacija za slovenski jezik (sl)
if (lang:getCode() == 'nn' or lang:getCode() == 'sl') then
v = v:gsub("%.", ",")
end
return v
end
-- Format large values.
function priv.formatLargeNum(value)
local lang = mw.language.getContentLanguage()
-- add thusands separators
local v = lang:formatNum(value)
return v
end
-- Testing formatLargeNum.
-- p.__priv.test_formatLargeNum()
function priv.test_formatLargeNum()
mw.log("must not add fractional part")
mw.log( p.__priv.formatLargeNum(12) )
mw.log( p.__priv.formatLargeNum(123) )
mw.log("should preserve fractional part for small numbers")
mw.log( p.__priv.formatLargeNum(1.1) )
mw.log( p.__priv.formatLargeNum(1.12) )
mw.log( p.__priv.formatLargeNum(12.1) )
mw.log("can preserve long fractional part")
mw.log( p.__priv.formatLargeNum(1.1234) )
mw.log( p.__priv.formatLargeNum(1.12345) )
mw.log("should add separators above 1k")
mw.log( p.__priv.formatLargeNum(999) )
mw.log( p.__priv.formatLargeNum(1234) )
mw.log( p.__priv.formatLargeNum(12345) )
mw.log( p.__priv.formatLargeNum(123456) )
mw.log( p.__priv.formatLargeNum(1234567) )
mw.log("must handle large float, but might round values")
mw.log( p.__priv.formatLargeNum(1234.123) )
mw.log( p.__priv.formatLargeNum(12345.123) )
mw.log( p.__priv.formatLargeNum(123456.123) )
mw.log( p.__priv.formatLargeNum(1234567.123) )
end
--[[
Prepare final label.
Typical tpl:
"$L: $v" (same as: "$label: $auto")
will result in:
"Abc: 23%" -- when values are percentages
"Abc: 1234 (23%)" -- when values are autoscaled
Advanced tpl:
"$L: $d ($p)" e.g. "Abc: 1234 (23%)" for {"label":"Abc", "value":1234}
"$L: $v" is the same as above when values are autoscaled
Long vs short variable names:
$label ($L)
$auto ($v)
$value ($d)
$percent ($p)
]]
function priv.prepareLabel(tpl, entry)
-- setup default tpl
if not tpl or tpl == "" then
-- simple if no label
if not entry.label or entry.label == "" then
tpl = "$v"
else
if entry.label:find("%$[a-z]") then
tpl = entry.label
else
tpl = "$L: $v"
end
end
end
local labelLabel = entry.label and entry.label or priv.getLangOther()
-- format % value without %
local pRaw = priv.formatNum(entry.value)
local pp = pRaw .. "%%"
local label = tpl
-- aliases
label = label
:gsub("%$label", "$L")
:gsub("%$auto", "$v")
:gsub("%$value", "$d")
:gsub("%$percent", "$p")
-- replace variables
label = label:gsub("%$L", labelLabel)
local d = priv.formatLargeNum(entry.raw and entry.raw or entry.value)
local v = entry.raw and (d .. " (" .. pp .. ")") or pp
label = label
:gsub("%$p", pp)
:gsub("%$d", d)
:gsub("%$v", v)
-- Report unknown variables
for var in label:gmatch("%$[a-zA-Z]+") do
-- in preview
mw.addWarning("pie chart: Unknown variable (wrong format of your label): " .. var)
-- tracing links
_ = mw.title.new("Module:Piechart/tracing/unknown-variable").id
end
return label
end
-- default colors
-- source: https://colorbrewer2.org/#type=diverging&scheme=PRGn&n=6
local colorGroupSize = 3 -- must be at least 3
local colorGroups = 4
local colorPalette = {
-- green (from dark)
'#1b7837',
'#7fbf7b',
'#d9f0d3',
-- violet
'#762a83',
'#af8dc3',
'#e7d4e8',
-- red
'#d73027',
'#fc8d59',
'#fee090',
-- blue
'#4575b4',
'#91bfdb',
'#e0f3f8',
}
local lastColor = '#fff'
-- background color from entry or the default colors
function priv.backColor(entry, no, total)
if (type(entry.color) == "string") then
-- Remove unsafe characters from entry.color
local sanitizedColor = entry.color
:gsub('#', '#') -- workaround Module:Political_party issue reported on talk
:gsub("[^a-zA-Z0-9#%-]", "")
return 'background:' .. sanitizedColor
else
local color = priv.defaultColor(no, total)
return 'background:' .. color
end
end
-- color from the default colors
function priv.defaultColor(no, total)
local color = lastColor
if no <= 0 then
return color
end
local size = #colorPalette
if not total or total == 0 then
total = size + 1
end
local colorNo = priv.defaultColorNo(no, total, size)
if colorNo > 0 then
color = colorPalette[colorNo]
end
return color
end
-- gets color number from default colors
-- trys to return a light color as the last one
-- 0 means white-ish color should be used
function priv.defaultColorNo(no, total, size)
local color = 0 -- special, lastColor
if total == 1 then
color = 1
elseif total <= colorGroupSize * (colorGroups - 1) then
if no < total then
color = no
else
local groupIndex = ((no - 1) % colorGroupSize)
if groupIndex == 0 then -- dark
color = no+1
elseif groupIndex == 1 then -- med
color = no+1
else
color = no
end
end
elseif no < total then
color = ((no - 1) % size) + 1
end
return color
end
--[[
trim string
note:
`(s:gsub(...))` returns only a string
`s:gsub(...)` returns a string and a number
]]
function priv.trim(s)
return (s:gsub("^%s+", ""):gsub("%s+$", ""))
end
--[[
Extract text from simple wikitext.
For now only works with links.
]]
function p.extract_text(label)
label = label
-- replace links with pipe (e.g., [[candy|sweets]])
:gsub("%[%[[^|%]]+|(.-)%]%]", "%1")
-- replace simple links without pipe (e.g., [[sandwich]])
:gsub("%[%[(.-)%]%]", "%1")
-- remove templates?
-- :gsub("{.-}", "")
-- remove tags
:gsub("<[^>]+>", "")
-- escape special chars just in case
:gsub("<", "<"):gsub(">", ">")
:gsub("'", "'"):gsub("\"", """)
return label
end
--[[
Parse classic template params into JSON.
From:
|label1=cookies: $v |value1=11 |color1=goldenrod
|label2=sweets: $v |value2=20 |color2=darkred
To:
{"value":11,"color":"goldenrod","label":"cookies: $v"},
{"value":20,"color":"darkred","label":"sweets: $v"},
]]
function p.parseEnumParams(frame)
local args = frame:getParent().args
return priv.parseEnumParams(args)
end
function priv.parseEnumParams(args)
local result = {}
local i = 1
local sum = 0.0
local hasCustomColor = false -- has last custom color
while args["value" .. i] do
local rawValue = priv.trim(args["value" .. i])
-- Če je vnesena vejica kot decimalno ločilo (obvezno za slovenske uporabnike),
-- jo pretvorimo v piko, da jo funkcija tonumber() prepozna. (POPRAVEK IZ 1. VPRAŠANJA)
if rawValue:find(",") then
rawValue = rawValue:gsub(",", ".")
end
-- value is required in this mode; it's also assumed to be 0..100
local entry = { value = tonumber(rawValue) or 0 }
-- label and color is optional
local label = args["label" .. i]
if label and label ~= "" then
entry.label = label
end
hasCustomColor = false
local color = args["color" .. i]
if color and color ~= "" then
entry.color = color
hasCustomColor = true
end
table.insert(result, entry)
sum = sum + entry.value
i = i + 1
end
-- re-loop to set values in labels
local willAutoscale = priv.willAutoscale(sum)
for _, entry in ipairs(result) do
local label = entry.label
if label and not label:find("%$[a-z]") then
-- autoscale will be forced, so use $v in labels
if willAutoscale then
entry.label = label .. " $v"
else
entry.label = label .. " ($p)"
end
end
end
-- tracking data errors
priv.sumErrorTracking(sum, result)
-- support other value mapping
local langOther = priv.getLangOther()
local colorOther = "#FEFDFD" -- white-ish for custom colors for best chance and contrast
local otherValue = 100 - sum
if args["other"] and args["other"] ~= "" then
if otherValue < 0.001 then
otherValue = 0
end
local otherEntry = { label = (args["other-label"] or langOther) .. " ($p)" }
if args["other-color"] and args["other-color"] ~= "" then
otherEntry.color = args["other-color"]
else
otherEntry.color = colorOther
end
table.insert(result, otherEntry)
elseif otherValue > 0.01 then
if hasCustomColor then
table.insert(result, {visible = false, label = langOther .. " ($v)", color = colorOther})
else
table.insert(result, {visible = false, label = langOther .. " ($v)"})
end
end
local jsonString = mw.text.jsonEncode(result)
return jsonString
end
function priv.getLangOther()
-- support other value mapping
local lang = mw.language.getContentLanguage()
if (lang:getCode() == 'sl') then
return "Drugo"
end
-- Uporaba slovenske besede za "Other"
if (lang:getCode() == 'sl') then
return "Ostalo"
end
return "Other"
end
-- Function to check if a value is true-ish
local trueValues = { ["true"] = true, ["1"] = true, ["on"] = true, ["yes"] = true }
function priv.isTrueishValue(value)
-- should return nil for empty args (i.e. undefined i.e. default)
if not value or value == "" then return nil end
value = priv.trim(value)
if value == "" then return nil end
-- other non-empty are false
return trueValues[value:lower()] or false
end
--[[
Parse classic template params into JSON with chart meta data.
]]
function p.parseMetaParams(frame)
local args = frame:getParent().args
local meta = {}
-- default meta for value1..n parameters
-- ...and for thumb right/left
local thumb = args["thumb"]
if args["value1"] or (thumb and (thumb == "right" or thumb == "left")) then
meta.size = 200
meta.legend = true
end
-- explicit meta param
if args["meta"] then
local decodeSuccess, tempMeta = pcall(function()
return mw.text.jsonDecode(args["meta"], mw.text.JSON_TRY_FIXING)
end)
if not decodeSuccess then
mw.log('invalid meta parameter')
else
meta = tempMeta
end
end
if args["size"] then meta.size = tonumber(args["size"]) end
if args["radius"] and tonumber(args["radius"]) then
meta.size = 2 * tonumber(args["radius"])
end
if args["autoscale"] then meta.autoscale = priv.isTrueishValue(args["autoscale"]) end
if args["legend"] then meta.legend = priv.isTrueishValue(args["legend"]) end
if args["ariahidechart"] then meta.ariahidechart = priv.isTrueishValue(args["ariahidechart"]) end
if args["direction"] and args["direction"] ~= "" then
meta.direction = args["direction"]:gsub("[^a-z0-9%-]", "")
end
if args["width"] and args["width"] ~= "" then
meta.width = args["width"]:gsub("[^a-z0-9%-]", "")
end
if args["caption"] and args["caption"] ~= "" then
meta.caption = args["caption"]
end
if args["footer"] and args["footer"] ~= "" then
meta.footer = args["footer"]
end
if args["labelformat"] and args["labelformat"] ~= "" then
meta.labelformat = args["labelformat"]
end
return mw.text.jsonEncode(meta)
end
return p
himof4ux4jnkxwc02kf3h82x9h89fth
Modul:Piechart/cuts.json
828
429819
3649622
2026-04-05T08:09:40Z
Ranveig
39
Frå en:
3649622
json
application/json
[
"0.62832680",
"1.25670321",
"1.88517887",
"2.51380343",
"3.14262660",
"3.77169816",
"4.40106795",
"5.03078592",
"5.66090212",
"6.29146673",
"6.92253007",
"7.55414263",
"8.18635505",
"8.81921820",
"9.45278312",
"10.08710109",
"10.72222363",
"11.35820252",
"11.99508981",
"12.63293784",
"13.27179928",
"13.91172711",
"14.55277465",
"15.19499560",
"15.83844403",
"16.48317442",
"17.12924167",
"17.77670111",
"18.42560853",
"19.07602022",
"19.72799294",
"20.38158399",
"21.03685121",
"21.69385298",
"22.35264829",
"23.01329673",
"23.67585852",
"24.34039451",
"25.00696627",
"25.67563604",
"26.34646677",
"27.01952221",
"27.69486683",
"28.37256594",
"29.05268567",
"29.73529300",
"30.42045581",
"31.10824286",
"31.79872390",
"32.49196962"
]
krgtix2rrezq6fjv4f604ff9pjqo28e
Patrick Berg
0
429820
3649627
2026-04-05T08:57:31Z
Migne
2086
Oppretta sida med «[[Fil:Patrick Berg (cropped).jpg|mini|]] '''Patrick Berg''' ({{fødd|24. november|1997|Berg, P}}) er ein norsk fotballspelar frå Bodø som er firfaldig seriemeister med [[Bodø/Glimt]] i tida 2020-24. [[Ørjan Berg]] er far hans og [[Harald Berg]] bestefaren. ===Klubbspel=== Patrick Berg debuterte for Bodø/Glimt i 2014. I sesongen 2016 etablerte han seg i fyrste-ellevaren. Han har i fleire sesongar vore kaptein på Bodø/Glimt, ein fotballklubb som vann sitt fyr…»
3649627
wikitext
text/x-wiki
[[Fil:Patrick Berg (cropped).jpg|mini|]]
'''Patrick Berg''' ({{fødd|24. november|1997|Berg, P}}) er ein norsk fotballspelar frå Bodø som er firfaldig seriemeister med [[Bodø/Glimt]] i tida 2020-24. [[Ørjan Berg]] er far hans og [[Harald Berg]] bestefaren.
===Klubbspel===
Patrick Berg debuterte for Bodø/Glimt i 2014. I sesongen 2016 etablerte han seg i fyrste-ellevaren. Han har i fleire sesongar vore kaptein på Bodø/Glimt, ein fotballklubb som vann sitt fyrste seriegull i 2020. Sidan har han vore ein sentral spelar i laget som også vart norsk seriemeister i 2021, 2023 og 2024. Våren 2025 tok Bodø/Glimt seg til semifinale i europaligaen, med Berg i fremste rekke. Vinteren 2026 slo Berg og lagkameratane [[FC Inter]] ut i meisterligaen, før det vart tap mot [[Sporting CP]] i oktofinalane.
Frå januar til august 2022 gjorde Berg teneste i franske RC Lens.
===Landslagsspel===
Berg fekk sin debut på landslaget som innbytar den 24. mars 2021 i bortekamp mot [[Gibraltar]]. Han deltok i sju av dei åtte kvalifiseringskampane til Fotball-VM 2026. Oftast har han anten spelt frå start, eller han har vorte bytta inn i andre omgang. Einast i seks landskampar har han spelt samtlege 90 minutt. Pr 1. april 2026 er han bokført med 41 landskampar og ingen mål.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:de:Patrick Berg|Patrick Berg]]» frå {{Wikipedia-utgåve|de}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31356 eu-football]
qhckurkdmx1dtgn8maqb94ydaj8ohfk
3649628
3649627
2026-04-05T08:57:42Z
Migne
2086
la til [[Kategori:Norske landslagsspelarar i fotball]] med [[WP:HotCat|HotCat]]
3649628
wikitext
text/x-wiki
[[Fil:Patrick Berg (cropped).jpg|mini|]]
'''Patrick Berg''' ({{fødd|24. november|1997|Berg, P}}) er ein norsk fotballspelar frå Bodø som er firfaldig seriemeister med [[Bodø/Glimt]] i tida 2020-24. [[Ørjan Berg]] er far hans og [[Harald Berg]] bestefaren.
===Klubbspel===
Patrick Berg debuterte for Bodø/Glimt i 2014. I sesongen 2016 etablerte han seg i fyrste-ellevaren. Han har i fleire sesongar vore kaptein på Bodø/Glimt, ein fotballklubb som vann sitt fyrste seriegull i 2020. Sidan har han vore ein sentral spelar i laget som også vart norsk seriemeister i 2021, 2023 og 2024. Våren 2025 tok Bodø/Glimt seg til semifinale i europaligaen, med Berg i fremste rekke. Vinteren 2026 slo Berg og lagkameratane [[FC Inter]] ut i meisterligaen, før det vart tap mot [[Sporting CP]] i oktofinalane.
Frå januar til august 2022 gjorde Berg teneste i franske RC Lens.
===Landslagsspel===
Berg fekk sin debut på landslaget som innbytar den 24. mars 2021 i bortekamp mot [[Gibraltar]]. Han deltok i sju av dei åtte kvalifiseringskampane til Fotball-VM 2026. Oftast har han anten spelt frå start, eller han har vorte bytta inn i andre omgang. Einast i seks landskampar har han spelt samtlege 90 minutt. Pr 1. april 2026 er han bokført med 41 landskampar og ingen mål.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:de:Patrick Berg|Patrick Berg]]» frå {{Wikipedia-utgåve|de}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31356 eu-football]
[[Kategori:Norske landslagsspelarar i fotball]]
j92jc9tv8q64vdw7nsfmzublsrhvofj
3649629
3649628
2026-04-05T08:57:53Z
Migne
2086
la til [[Kategori:Bodø/Glimt-spelarar]] med [[WP:HotCat|HotCat]]
3649629
wikitext
text/x-wiki
[[Fil:Patrick Berg (cropped).jpg|mini|]]
'''Patrick Berg''' ({{fødd|24. november|1997|Berg, P}}) er ein norsk fotballspelar frå Bodø som er firfaldig seriemeister med [[Bodø/Glimt]] i tida 2020-24. [[Ørjan Berg]] er far hans og [[Harald Berg]] bestefaren.
===Klubbspel===
Patrick Berg debuterte for Bodø/Glimt i 2014. I sesongen 2016 etablerte han seg i fyrste-ellevaren. Han har i fleire sesongar vore kaptein på Bodø/Glimt, ein fotballklubb som vann sitt fyrste seriegull i 2020. Sidan har han vore ein sentral spelar i laget som også vart norsk seriemeister i 2021, 2023 og 2024. Våren 2025 tok Bodø/Glimt seg til semifinale i europaligaen, med Berg i fremste rekke. Vinteren 2026 slo Berg og lagkameratane [[FC Inter]] ut i meisterligaen, før det vart tap mot [[Sporting CP]] i oktofinalane.
Frå januar til august 2022 gjorde Berg teneste i franske RC Lens.
===Landslagsspel===
Berg fekk sin debut på landslaget som innbytar den 24. mars 2021 i bortekamp mot [[Gibraltar]]. Han deltok i sju av dei åtte kvalifiseringskampane til Fotball-VM 2026. Oftast har han anten spelt frå start, eller han har vorte bytta inn i andre omgang. Einast i seks landskampar har han spelt samtlege 90 minutt. Pr 1. april 2026 er han bokført med 41 landskampar og ingen mål.
==Kjelder==
{{refopning}}
*''Denne artikkelen bygger på «[[:de:Patrick Berg|Patrick Berg]]» frå {{Wikipedia-utgåve|de}}, den 5. april 2026.''
{{refslutt}}
*[https://eu-football.info/_player.php?id=31356 eu-football]
[[Kategori:Norske landslagsspelarar i fotball]]
[[Kategori:Bodø/Glimt-spelarar]]
t5olhdsr3wcefh1ob1dgvh13yr1jkzx
Kvadrat (fleirtyding)
0
429821
3649652
2026-04-05T11:33:57Z
HerVal7752
105842
Frå no:
3649652
wikitext
text/x-wiki
'''Kvadrat''' kan visa til:
*[[Kvadrat]], geometrisk figur
**[[Kvadratmeter]], ei SI-eining for måling av areal
**[[Magisk kvadrat]], talisman
*[[Kvadrattal]], eit tal multiplisert med seg sjølv
*[[Kvadrat kjøpesenter]], kjøpesenter i Sandnes
{{fleirtyding|Kvadrat}}
1t1edqj7jr6eiqozonaqx3g2dvqmnhb