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&nbsp;kan&nbsp;hjelpe Nynorsk Wikipedia gjennom å <span class=plainlinks>''[{{SERVER}}{{localurl:{{NAMESPACE}}:{{SIDENAMN}}|action=edit}} utvide&nbsp;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&nbsp;%| 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|}}}|.&nbsp;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|}}}|.&nbsp;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&nbsp;°C til 57&nbsp;°C, og stader har fått 1000&nbsp;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&nbsp;°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&nbsp;°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&nbsp;°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&nbsp;°C. Dei store kystbyane får sjeldan temperaturar lågare enn -15&nbsp;°C, men kvar vinter kan dei få [[snøstorm]]ar med [[sterk kuling]] og over 30&nbsp;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&nbsp;°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&nbsp;°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&nbsp;°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&nbsp;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&nbsp;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&nbsp;°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&nbsp;°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&nbsp;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&nbsp;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|}}}|&nbsp;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> ←&nbsp;&nbsp;&nbsp;[[Stortingsrepresentantar 2017-2021|Stortingsrepresentantar 2017-2021]]&nbsp;&nbsp;&nbsp;→ <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&ndash; | kampar(mål) = 48 (4) | landslag = {{NOR}} [[Noreg]] U21 | landslagår = 2017&ndash; | 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&ndash; | kampar(mål) = 48 (4) | landslag = {{NOR}} [[Noreg]] U21 | landslagår = 2017&ndash; | 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&ndash; | kampar(mål) = 48 (4) | landslag = {{NOR}} [[Noreg]] U21 | landslagår = 2017&ndash; | 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&ndash; | kampar(mål) = 48 (4) | landslag = {{NOR}} [[Noreg]] | landslagår = 2020&ndash; | 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> ←&nbsp;&nbsp;&nbsp;[[Stortingsrepresentantar 2021-2025|Stortingsrepresentantar 2021-2025]]&nbsp;&nbsp;&nbsp;→ <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ő''&#8239;) 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}}}]]}}|<!-- -->&nbsp;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}}}]]}}|<!-- -->&nbsp;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}}}]]}}|<!-- -->&nbsp;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&nbsp;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&nbsp;cm. Moglegvis er [[bleikhakeflugesnappar]], frå Himalaya til sørlege Myanmar, den største med kroppslengd på opptil 18&nbsp;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&nbsp;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('&#35;', '#') -- 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("<", "&lt;"):gsub(">", "&gt;") :gsub("'", "&#39;"):gsub("\"", "&quot;") 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('&#35;', '#') -- 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("<", "&lt;"):gsub(">", "&gt;") :gsub("'", "&#39;"):gsub("\"", "&quot;") 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('&#35;', '#') -- 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("<", "&lt;"):gsub(">", "&gt;") :gsub("'", "&#39;"):gsub("\"", "&quot;") 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('&#35;', '#') -- 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("<", "&lt;"):gsub(">", "&gt;") :gsub("'", "&#39;"):gsub("\"", "&quot;") 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