Wikipedya
htwiki
https://ht.wikipedia.org/wiki/Paj_Prensipal
MediaWiki 1.44.0-wmf.2
first-letter
Medya
Espesyal
Diskite
Itilizatè
Diskisyon Itilizatè
Wikipedya
Diskisyon Wikipedya
Fichye
Diskisyon Fichye
MedyaWiki
Diskisyon MedyaWiki
Modèl
Diskisyon Modèl
Èd
Diskisyon Èd
Kategori
Diskisyon Kategori
TimedText
TimedText talk
Module
Discussion module
Layòs
0
1606
855654
840751
2024-11-13T09:13:09Z
Gerd Eichmann
20679
gallery added
855654
wikitext
text/x-wiki
{{Infobox Peyi
|non_lokal=Sathalanalat Passathipatai Passasson lao
|non_kreyòl=Laos
|deviz_nasyonal=
|deviz_nasyonal_kreyòl=Pè, Endependans, Demokrasi, Inite and Pwosperite
|im_nasyonal=
|lang=
|jantile=
|drapo_imaj=Flag of Laos.svg
|anblèm_imaj=
|fizo_orè=
|kapital=[[Vansiàn]]
|pi_gwo_vil=Vansiàn
|monnen_non=
|monnen_kòd=
|monnen_divizyon=
|PIB_dat=
|PIB_total=
|PIB_total_ran=
|PIB_pa_abitan=
|PIB_pa_abitan_ran=
|gouvènman_dat=
|gouvènman_tip=
|chèf_tit=
|chèf_non=
|sipèfisi_dat=
|sipèfisi_ran=
|sipèfisi_total=
|dlo_pousantaj=
|frontyè_tè=
|frontyè_kòt=
|pli_ro_kote=
|pli_ro=
|pli_ba_kote=
|pli_ba=
|popilasyon_dat=
|popilasyon_ran=
|popilasyon_total=
|popilasyon_dansite=
|popilasyon_tip=
|popilasyon_lavi_dat=
|popilasyon_lavi=
|popilasyon_ne_dat=
|popilasyon_ne=
|popilasyon_mòtalite_dat=
|popilasyon_mòtalite=
|popilasyon_mòtalite_timoun_dat=
|popilasyon_mòtalite_timoun=
|popilasyon_alfabèt_dat=
|popilasyon_alfabèt=
|popilasyon_an_vil_dat=
|popilasyon_an_vil=
|endepandans_dat=
|endepandans_tip=
|endepandans_de=
|kòd=
|ISO_kòd=
|endikatif_entènet=
|endikatif_telefonik=
|endikatif_radyofonik=
|EDI=
|EDI_ran=
|EDI_dat=
|EPI=
|EPI_ran=
|EPI_dat=
|kat_anplasman=LocationLaos.png
|kat_politik=
|kat_jewografik=
|kat_satelit=
|divizyon_tip=
|divizyon_non=
|vwazen=
|òganizasyon=
|nòt=
}}
[[Fichye:LaosCarte.gif|300px|right|thumb|Layòs]]
'''Layòs''' se yon peyi ki sitiye nan [[Azi]] disidès. [[Kapital]] se [[Vyantyàn]].
<center><gallery caption="Layòs - Laos">
Vientiane-Wat Xieng Ngeun-14-gje.jpg|Vyantyàn
Vientiane-Wat Hay Sok-14-Tischchen-gje.jpg|Vyantyàn
Vientiane-Wat Si Muang-16-Marabu-gje.jpg|Vyantyàn
Luang Prabang-Wat Visounarath-04-Boddhi-Baum-gje.jpg|Luang Prabang
Luang Prabang-Wat That Luang-01d-Moenche-gje.jpg|Luang Prabang
Luang Prabang-Phou Si-02-von Wat Visounarath-gje.jpg|Luang Prabang
Muang Sing-Akha-Dorf A-18-Haeuser-gje.jpg|Muang Sing
Houay Mo-Markt-22-Fischiges-gje.jpg|Houay Mo
Laos-Reis-22-Pflanzer-gje.jpg
</gallery></center>
== Istwa ==
== Jewografi ==
== Referans ==
{{referans}}
== Lyen deyò ==
{{Azi}}
[[Kategori:Peyi]]
[[Kategori:Laos|*]]
[[Kategori:Azi disidès]]
3copywzxkqj8x74tws560xup2ef24gi
Pat
0
14844
855651
679859
2024-11-13T03:09:45Z
Kitanago
19629
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/219259271|Pâte]] »
855651
wikitext
text/x-wiki
[[Fichye:Kneading.jpg|vignette| Frazage, premye etap nan mase yon farin ki vin trè kolan <ref>{{Citation|Les mécanismes physico-chimiques explicatifs de l'apparition et de la disparition du caractère collant d'une pâte sont peu connus. On considère que ce phénomène est associé aux proportions respectives d'[[eau libre]] et d'[[eau liée]] dans la pâte et qu'un excès d'eau libre serait la cause première de ce caractère. Il faut s'assurer d'un bon ajustement entre la quantité d'eau ajoutée à la [[farine]] pour former la pâte et la capacité d'absorption des [[macromolécule]]s qui la constituent pour le prévenir.}}.</ref> .]]
Anjeneral, yon '''pat''' se yon sibstans oswa melanj ki pwès; li se souvan yon etap nan fabrikasyon an nan yon pwodwi.
== Definisyon ==
Nan sans orijinal li, " [[Pat (materyo)|pat]] » (soti nan laten ''pasta'', ki gen menm siyifikasyon an, prete nan ansyen grèk la πάστα (" gro lòj "), deziyen [[farin]] tranpe ak mase pou fè [[pen]], pa ekstansyon yon lòt bagay ki sanble bon manje <ref name="DAF1762">''Dictionnaire de l'Académie française'', {{4e}} édition, 1762. </ref> .
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|wiktionary=pâte}}
[[Kategori:Pages avec des traductions non relues]]
b4by8w4tnxu2durcjjk7wml8kwweyiy
855652
855651
2024-11-13T03:10:40Z
Kitanago
19629
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/219259271|Pâte]] »
855652
wikitext
text/x-wiki
[[Fichye:Kneading.jpg|vignette| Frazage, premye etap nan mase yon farin ki vin trè kolan <ref>{{Citation|Les mécanismes physico-chimiques explicatifs de l'apparition et de la disparition du caractère collant d'une pâte sont peu connus. On considère que ce phénomène est associé aux proportions respectives d'[[eau libre]] et d'[[eau liée]] dans la pâte et qu'un excès d'eau libre serait la cause première de ce caractère. Il faut s'assurer d'un bon ajustement entre la quantité d'eau ajoutée à la [[farine]] pour former la pâte et la capacité d'absorption des [[macromolécule]]s qui la constituent pour le prévenir.}}.</ref> .]]
Anjeneral, yon '''pat''' se yon sibstans oswa melanj ki pwès; li se souvan yon etap nan fabrikasyon an nan yon pwodwi.
== Definisyon ==
Nan sans orijinal li, " [[Pat (materyo)|pat]] » (soti nan laten ''pasta'', ki gen menm siyifikasyon an, prete nan ansyen grèk la πάστα (" gro lòj "), deziyen [[farin]] tranpe ak mase pou fè [[pen]], pa ekstansyon yon lòt bagay ki sanble bon manje <ref name="DAF1762">''Dictionnaire de l'Académie française'', {{4e}} édition, 1762. </ref>.
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|wiktionary=pâte}}
[[Kategori:Pat]]
[[Kategori:Pages avec des traductions non relues]]
ob7ujvfrxv3xbiclco6iwdo7vyx34ue
855653
855652
2024-11-13T03:10:57Z
Kitanago
19629
855653
wikitext
text/x-wiki
[[Fichye:Kneading.jpg|vignette| Frazage, premye etap nan mase yon farin ki vin trè kolan <ref>{{Citation|Les mécanismes physico-chimiques explicatifs de l'apparition et de la disparition du caractère collant d'une pâte sont peu connus. On considère que ce phénomène est associé aux proportions respectives d'[[eau libre]] et d'[[eau liée]] dans la pâte et qu'un excès d'eau libre serait la cause première de ce caractère. Il faut s'assurer d'un bon ajustement entre la quantité d'eau ajoutée à la [[farine]] pour former la pâte et la capacité d'absorption des [[macromolécule]]s qui la constituent pour le prévenir.}}.</ref> .]]
Anjeneral, yon '''pat''' se yon sibstans oswa melanj ki pwès; li se souvan yon etap nan fabrikasyon an nan yon pwodwi.
== Definisyon ==
Nan sans orijinal li, " [[Pat (materyo)|pat]] » (soti nan laten ''pasta'', ki gen menm siyifikasyon an, prete nan ansyen grèk la πάστα (" gro lòj "), deziyen [[farin]] tranpe ak mase pou fè [[pen]], pa ekstansyon yon lòt bagay ki sanble bon manje <ref name="DAF1762">''Dictionnaire de l'Académie française'', {{4e}} édition, 1762. </ref>.
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|wiktionary=pâte}}
[[Kategori:Pat]]
rz2z1d61pn09hd9bprkcq0qotm3vzzb
Jocelyne Béroard
0
16904
855570
817130
2024-11-12T13:39:07Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855570
wikitext
text/x-wiki
{{mizisyen
|non= Jocelyne Béroard
|foto= Jb olympia (cropped).jpg
|fonksyon=Chantèz, aktris
|domèn=Mizik, sinema, televizyon
|diplòm=
|etid=
|dat nesans= [[12 septanm]] [[1954]]
|lye nesans= [[Fod Fwans]], [[Matinik]]
|peyi nesans= [[Frans]]
|dat lanmò=
|lye lanmò=
|peyi lanmò=
|nasyonalite= franse
|zèv=
|nòt=
|gwoup= [[Kassav]]
|mizik= [[Zouk]]
|enstriman=[[vwa]]
}}
'''Jocelyne Béroard''', ki fèt [[12 septanm]] [[1954]] nan [[Fod Fwans]] nan [[Matinik]] ) se yon chantèz [[Matinik|matinikèz]].
Li se yon atis, chantèz kreyòl. Li chante mizik zouk, sèl oubyen avèk gwoup [[Kassav]].
== Biyografi ==
Sou 22 me [[2011]], li chante avèk siksè nan Olympia nan solo kèk jou aprè piblikasyon doub albòm li ''Yen Ki Lanmou''.
An [[2014]], li chante ''On n'oublie pas'' (ekri pa [[Serge Bilé]]) avèk plizyè atis ak pèsonalite pami [[Alpha Blondy]], [[Tanya Saint-Val]], [[Harry Roselmack]], [[Admiral T]], [[Jean-Marie Ragald]] ak [[Chris Combette]]. Chante sa a se yon omaj pou 152 viktim martinikèz nan [[Vol 708 West Caribbean|krach 16 out 2005]], pou yo pa bliye evènman sa a ak ede AVCA (Association des Victimes de la Catastrophe Aérienne) pou kolekte lajan<ref>{{cite web|author1=|title=Crash du 16 août : « On n'oublie pas »|url=http://www.martinique.franceantilles.fr/actualite/societe/crash-du-16-aout-on-n-oublie-pas-266424.php/|date=7 out 2014|publisher=martinique France-Antilles|access-date=2019-05-19|archive-date=2018-01-16|archive-url=https://web.archive.org/web/20180116135057/http://www.martinique.franceantilles.fr/actualite/societe/crash-du-16-aout-on-n-oublie-pas-266424.php|dead-url=yes}}</ref>
== Zèv li yo ==
=== Diskografi ===
==== Albòm estidyo ====
* 1986 : ''Siwo'' (disk dò) (GD Productions)
* 1991 : ''Milans'' (Columbia Records)
* 2003 : ''Madousinay'' (Créon Music)
==== Konpilasyon ====
* 2011 : ''Yen ki lanmou'' (Warner Music)
==== Videyoklip ak kolaborasyon ====
* [[1986]] : ''Siwo''
* [[1986]] : ''Mi tchè mwen''
* [[1986]] : ''Kay manman''
* [[1987]] : ''Kolé séré'' (avèk [[Philippe Lavil]])
* [[1991]] : ''Milans''
* [[1991]] : ''Ti tak isi''
* [[1997]] : ''Lonbraj an pyé mango'' (avèk [[Chris Combette]])
* [[1998]] : ''Coupé bibamba'' (avèk [[Awilo Longomba]])
* [[2003]] : ''Wè yo''
* [[2004]] : ''Difé karribean (avèk [[Dj Jackson]])
* [[2007]] : ''Ba mwen en tibo'' (avèk [[Victor Treffre]] ak [[Kali (chantè)|Kali]])
* [[2010]] : ''Avan i two ta'' (avèk [[Jocelyne Labylle]])
* [[2010]] : ''Ecolo'' (avèk [[Jacky Alpha]] ak [[Paille (chantè)|Paille]])
* [[2011]] : ''An limiè'' (avèk [[Sista Tchad]])
* [[2012]] : ''Ych mwen kouté'' (avèk [[Sam Alpha]])
* [[2012]] : ''Pou i pé sa tjenbé'' (avèk [[Gilles Voyer]])
* [[2014]] : ''Mizik an nou'' (avèk [[G'Ny]])
* [[2015]] : ''Lapli pé tonbé''
* [[2016]] : ''On tient bon'' (avèk [[ Nayah]], [[Luchko]] ak [[Papa Tank]])
=== Sinema ===
==== Fim ====
* 1992 : ''[[Siméon (fim)|Siméon]]'' ([[Euzhan Palcy]]) : Roselyne
* 2005 : ''[[Nèg Maron]]'' ([[Jean-Claude Barny]]) : Manman Josua
* 2016 : ''[[Le Gang des Antillais]]'' ([[Jean-Claude Barny]]) : Komè
==== Kout fim ====
* [[2017]] : ''Passagers'' de Nènèb ak Christophe Agelan : Nadine
=== Televizyon ===
* 2015 : ''[[Rose et le soldat]]'' : Clémence
* [[2017]] : ''[[Le rêve français]]'' de [[Christian Faure (reyalizatè)|Christian Faure]] : Betty
== Referans ==
{{referans}}
== Lyen deyò ==
* [https://www.imdb.com/name/nm0077227/ Jocelyne Béroard] sou IMDb
* [http://www.jocelyneberoard.com/ Sitwèb ofisyèl Jocelyne Béroard]
* [https://web.archive.org/web/20190530224542/http://www.kassav30ans.com/ Sitwèb ofisyèl Kassav]
{{DEFAULTSORT:Berouard, Jocelyne}}
[[Kategori:Moun]]
[[Kategori:Fanm]]
[[Kategori:Mizik]]
[[kategori:franse]]
[[Kategori:Chantè]]
[[Kategori:Chantè franse]]
[[Kategori:Chantè matinikè]]
[[Kategori:Aktè]]
[[Kategori:Aktè sinema]]
[[Kategori:Aktè televizyon]]
[[Kategori:Aktè franse]]
[[Kategori:Aktè matinikè]]
[[Kategori:Nesans nan lane 1954]]
89oeca3s7d8u9r9whvkgo6arq7zxrhg
Lakewood, Kolorado
0
24737
855616
766981
2024-11-12T20:52:53Z
Nathavaskie
31718
/* Kèk lyen */ ajoute lyen
855616
wikitext
text/x-wiki
{{ebòch}}
{{kolektivite tèritoryal
|non_lokal=Lakewood
|koodone_lat=
|koodone_lon=
|drapo_imaj=
|anblèm_imaj=
|tip=vil
|dat=
|zòn_tip=Eta
|zòn=[[Kolorado]]
|kapital_tip=
|kapital_non=[[Washington]]
|chèf_tit=
|chèf_non=?
|sipèfisi_dat=
|sipèfisi_ran=
|sipèfisi_total=
|dlo_pousantaj=
|frontyè_tè=
|frontyè_kòt=
|rote_mwayen=
|pli_ro_kote=
|pli_ro=
|pli_ba_kote=
|pli_ba=
|popilasyon_dat=
|popilasyon_ran=1
|popilasyon_total=
|popilasyon_dansite=
|popilasyon_tip=
|aktivite=
|kat_anplasman=
|kat_politik=
|kat_jewografik=
|kat_satelit=
|divizyon_tip=
|divizyon_non=
|vwazen=
|sitwèb=
|kòd_tip=jewografik
|kòd=
|nòt=
}}
'''{{PAGENAME}}''' se yon vil [[Etazini]]. Li sitye nan leta [[Kolorado]].
Chèf-lye li se ? .
== Istwa ==
Istwa
== referans ==
== Kèk lyen ==
[[Kategori:vil nan Kolorado]]
[[Kategori:Vil nan Etazini]]
[[Kategori:jewografi]]
https://www-colorado-com.translate.goog/cities-and-towns/lakewood?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc&_x_tr_hist=true<br /><br />
nlt6dzemh4pqmx47baaikfr0amdf8nq
855617
855616
2024-11-12T20:53:33Z
A09
30748
Reverted edits by [[Special:Contribs/Nathavaskie|Nathavaskie]] ([[User talk:Nathavaskie|talk]]) to last version by Escarbot: unnecessary links or spam
766981
wikitext
text/x-wiki
{{ebòch}}
{{kolektivite tèritoryal
|non_lokal=Lakewood
|koodone_lat=
|koodone_lon=
|drapo_imaj=
|anblèm_imaj=
|tip=vil
|dat=
|zòn_tip=Eta
|zòn=[[Kolorado]]
|kapital_tip=
|kapital_non=[[Washington]]
|chèf_tit=
|chèf_non=?
|sipèfisi_dat=
|sipèfisi_ran=
|sipèfisi_total=
|dlo_pousantaj=
|frontyè_tè=
|frontyè_kòt=
|rote_mwayen=
|pli_ro_kote=
|pli_ro=
|pli_ba_kote=
|pli_ba=
|popilasyon_dat=
|popilasyon_ran=1
|popilasyon_total=
|popilasyon_dansite=
|popilasyon_tip=
|aktivite=
|kat_anplasman=
|kat_politik=
|kat_jewografik=
|kat_satelit=
|divizyon_tip=
|divizyon_non=
|vwazen=
|sitwèb=
|kòd_tip=jewografik
|kòd=
|nòt=
}}
'''{{PAGENAME}}''' se yon vil [[Etazini]]. Li sitye nan leta [[Kolorado]].
Chèf-lye li se ? .
== Istwa ==
Istwa
== referans ==
== Kèk lyen ==
[[Kategori:vil nan Kolorado]]
[[Kategori:Vil nan Etazini]]
[[Kategori:jewografi]]
<br /><br />
9pt6oua5ayj0lyhqxip3g7ch4miszx1
Moorestown, New Jersey
0
35777
855610
855326
2024-11-12T17:42:35Z
InternetArchiveBot
25431
Rescuing 2 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855610
wikitext
text/x-wiki
{{ebòch}}
{{kolektivite tèritoryal
|non_lokal= Moorestown
|koodone_lat=
|koodone_lon=
|drapo_imaj=
|anblèm_imaj=
|tip=vil
|dat=
|zòn_tip=Eta
|zòn= [[New Jersey]]
|kapital_tip=
|kapital_non=Trenton
|chèf_tit=
|chèf_non=
|sipèfisi_dat=
|sipèfisi_ran=
|sipèfisi_total=
|dlo_pousantaj=
|frontyè_tè=
|frontyè_kòt=
|rote_mwayen=
|pli_ro_kote=
|pli_ro=
|pli_ba_kote=
|pli_ba=
|popilasyon_dat=
|popilasyon_ran=
|popilasyon_total=
|popilasyon_dansite=
|popilasyon_tip=
|aktivite=
|kat_anplasman=
|kat_politik=
|kat_jewografik=
|kat_satelit=
|divizyon_tip=
|divizyon_non=
|vwazen=
|sitwèb=
|kòd_tip=jewografik
|kòd=
|nòt=
}}
Moorestown se yon vil nan eta [[New Jersey]] .
Li nan konte Burlington
Li te genyen nan lane 2000 19017 moun.
== Istwa ==
Istwa
== Relasyon ak Ayiti ==
*Kominote Ayisyen, relasyon ant eta sa epi Ayiti
== Jewografi ==
Very humid in the summer, but cold in the winter.
== Ekonomi ==
== Devlòpman ==
== Politik ==
== Edikasyon ==
== Anviwònman ==
== Pèsonalite ==
Pèsonalite ki te fèt nan, moun ki abite nan, oswa otreman asosye ak Moorestown Township gen ladan yo:
[[Fichye:MSG O'Connor.jpg|thumb|right|upright|[[Brendan O'Connor (United States Army)|Brendan O'Connor]]]]
* [[Diane Allen]] (ki fèt an 1948), politisyen<ref>{{cite web
|url=http://www.senatenj.com/allen/biography.php
|title=Biyografi Senatris Diane Allen - Diane graduated from Moorestown High School as valedictorian
|website=senatenj.com
|date=2015-05-16
|access-date=15 fevriye 2015
|archive-date=2018-09-25
|archive-url=https://web.archive.org/web/20180925122703/https://www.senatenj.com/allen/biography.php
|dead-url=yes
}}</ref>
* [[Samuel Leeds Allen]] (1841–1918), envantè ak fabrikan ekipman fèm ak avyon.<ref>[https://web.archive.org/web/20110716072006/http://www.njinvent.org/2004/allen.html New Jersey Inventors Hall of Fame] "Samuel Leeds Allen has been awarded almost 300 patents for farming machinery,..." "Because the production of farm equipment was seasonal, many of Allen's employees were laid off during the winter." "Allen invented the Flexible Flyer,..." Accessed July 25, 2008.</ref>
* [[Emily Bacon]] (1891-1972), fizisyen ki te premye espesyalis pedyatrik nan Filadèlfi.<ref>[https://www.nlm.nih.gov/changingthefaceofmedicine/physicians/biography_18.html Dr. Emily Partridge Bacon], [[National Institutes of Health]], Changing the face of Medicine. Accessed September 8, 2015. "Born in Moorestown, New Jersey in 1891, Emily Bacon entered Wilson College in Chambersburg, Pennsylvania, in 1908."</ref>
* [[Sam Bishop]] (ki fèt an 1983), foutbalè pwofesyonèl.<ref>Bullock, Michael. [http://blog.pennlive.com/patriotnewssports/2010/04/ceperos_return_solidifies_city.html "Cepero's return solidifies City Islanders goalkeeping situation"], ''[[The Patriot-News]]'', April 3, 2010. Accessed March 2, 2011. "Sam Bishop, the 27-year-old keeper who has logged three seasons (2005-07) with the City Islanders, spent the opening week of the expansion Philadelphia Union's first training camp working out with the first-year MLS club. Needless to say, it was a memorable experience for the Moorestown, N.J., native."</ref>
* [[David Bispham]] (1857–1921), chantè opera.<ref>[http://www.westjerseyhistory.org/books/decou1/mtn10.html West Jersey History]. Accessed January 9, 2011. "David Bispham, the great singer, whose boyhood days were spent in Moorestown, attended this school and some of our older residents who were students at that time tell interesting anecdotes about this celebrated man."</ref>
* [[Francis L. Bodine]] (ki fèt an 1936), politisyen<ref name=Bodine/><ref>[http://votesmart.org/bio.php?can_id=4420 Assembly Member Francis L. Bodine], [[Project Vote Smart]]. Accessed August 8, 2007.</ref>
* [[Hugh Borton]] (1903–1995), ekspè nan etid japonèz, prezidan [[Haverford College]] pandan 10 zan.<ref>Pace, Eric. [https://www.nytimes.com/1995/08/09/obituaries/hugh-borton-92-expert-on-japan-and-ex-college-president-dies.html "Hugh Borton, 92, Expert on Japan and Ex-College President, Dies"], ''[[The New York Times]]'', August 9, 1995. Accessed February 11, 2012. "Dr. Borton was born in Moorestown, N.J., graduated from Haverford in 1926 and received an M.A. in history from Columbia in 1932. He was awarded several honorary degrees and was decorated by the postwar Japanese Government."</ref>
* [[T. J. Brennan]] (ki fèt an 1989), defansè [[Toronto Maple Leafs]] of the NHL.<ref>Donnellon, Sam. [http://www.accessmylibrary.com/coms2/summary_0286-31347148_ITM "Sam Donnellon / Moorestown's."], ''[[Philadelphia Daily News]]'', June 22, 2007. Accessed March 1, 2011. "His future lay 1,805 miles away, on the easternmost point of an island nearer the Arctic Circle than his Moorestown home. This is where the National Hockey League would discover T.J. Brennan."</ref><ref>Miller, Randy. [http://www.courierpostonline.com/article/20111125/SPORTS/311250029/Moorestown-native-scores-NHL-debut-Buffalo-Sabres "Moorestown native scores in debut for Buffalo Sabres"], ''[[Courier-Post]]'', November 25, 2011. Accessed December 3, 2011. "Moorestown native T.J. Brennan showed what he can bring in his NHL debut for the Buffalo Sabres."</ref><ref>[http://mapleleafs.nhl.com/club/player.htm?id=8474113 T J Brennan], [[Toronto Maple Leafs]]. Accessed October 9, 2013.</ref>
* [[Dave Brock (foutbòl ameriken)|Dave Brock]] (ki fèt an 1967) .<ref>Luicci, Tom. [http://www.nj.com/rutgersfootball/index.ssf/2012/02/rutgers_to_name_boston_college.html "Rutgers to name Boston College assistant Dave Brock as new offensive coordinator"], ''[[The Star-Ledger]]'', February 7, 2012. Accessed September 8, 2015. "Dave Brock, a Moorestown native who was the interim offensive coordinator at Boston College last fall and has held that position at Kansas State, Temple and Hofstra, will be named the Scarlet Knights' offensive coordinator, replacing Frank Cignetti, possibly by the end of the week, according to a person familiar with the situation."</ref>
* [[Lem Burnham]] (ki fèt an 1947), ansyen jwè [[National Football League]].<ref>Elane, Patricia. [https://web.archive.org/web/20140728221042/http://voices.yahoo.com/sports-rookie-athletes-too-much-too-soon-60257.html "Sports' Rookie Athletes - Too Much, Too Soon? Sports Agent and Former NFL Player Sees an 'Achilles Heel' in Toay's Recruiting Practices"], Yahoo! Voices, August 9, 2006. Accessed June 3, 2013. "Dr. Lem Burnham, a resident of Moorestown, New Jersey, has seen more than his fair share of action both on and off the field in the NFL."</ref>
* [[Kevin Chamberlin]] (ki fèt an 1963), aktè.<ref>Gardner, Amanda. [https://www.nytimes.com/2001/06/03/nyregion/theater-tony-awards-new-jersey-ties.html "Theater; Tony Awards' New Jersey Ties"], ''[[The New York Times]]'', June 3, 2001. Accessed July 23, 2008. "Kevin Chamberlin (best performance by a leading actor in a musical, Seussical) also traces his childhood and early career to New Jersey. Mr. Chamberlin moved to Moorestown (exit 4) when he was 7 years old and worked summers as a singing waiter at the Show Place in Beach Haven on Long Beach Island."</ref>
* [[Bobby Clarke]] (ki fèt an 1949), ansyen jwè okè nan National Hockey League avèk Philadelphia Flyers.<ref>[https://web.archive.org/web/20200811014922/http://www.citypaper.net/articles/2003-10-02/cover.shtml The Ice Man] Accessed July 26, 2008: "On Comcast's website, he's 'the ultimate Flyer' who's married to wife Sandy, has four children (sons Wade and Lucas and daughters Jody and Jakki) and resides in Moorestown, N.J."</ref>
* [[Gary Close]], asistan pou baskètbal [[Wisconsin Badgers men's basketball]] team.<ref>[https://web.archive.org/web/20150920114732/http://www.uwbadgers.com/sports/m-baskbl/mtt/close_gary00.html Gary Close] {{webarchive|url=https://web.archive.org/web/20101020134033/http://www.uwbadgers.com/sports/m-baskbl/mtt/close_gary00.html |date=2010-10-20 }}, [[Wisconsin Badgers men's basketball]]. Accessed January 9, 2011.</ref>
* [[Josh Cody]] (1892–1961), manm [[College Football Hall of Fame]].<ref>Traughber, Bill. [https://web.archive.org/web/20110708212327/http://vucommodores.cstv.com/sports/m-footbl/spec-rel/093009aab.html "Josh Cody, a College Football Hall of Famer"], [[Vanderbilt Commodores football]], September 30, 2009. Accessed March 1, 2011. "In 1959, Cody retired to his 190-acre farm across the Delaware River in Moorestown, N.J. He died on his farm in 1961 at age 69."</ref>
* [[John S. Collins]] (1837–1928), devlopè [[Miami Beach]], [[Florid]].<ref>[http://www.miamibeach411.com/History/bio_collins.htm John Collins Biography], Miami Beach History. Accessed March 13, 2008. "Born on December 29, 1837, in Moorestown, New Jersey, John Stiles Collins was the sixth generation of Collinses to farm the family's western New Jersey homestead since 1678."</ref>
* [[Herb Conaway]] (ki fèt an 1963), politisyen ki sèvi nan [[New Jersey General Assembly]] depi 1998, kote li reprezante [[7th Legislative District (New Jersey)|7th Legislative District]].<ref>Staff. [http://www.burlingtoncountytimes.com/article/20151023/OPINION/310239712 "Conaway and Singleton get our nod for 7th District"], ''[[Burlington County Times]]'', October 23, 2015. Accessed November 29, 2017. "Vying for two Assembly seats in the 7th Legislative District in New Jersey are Democratic incumbents Herb Conaway of Moorestown and Troy Singleton of Palmyra and Republican challengers William Conley and Robert Prisco."</ref>
* [[Phil Costa (American football)|Phil Costa]] (born 1987), former football player with the [[Dallas Cowboys]].<ref>[https://web.archive.org/web/20110717154050/http://www.umterps.com/sports/m-footbl/mtt/costa_phil00.html Phil Costa] {{webarchive|url=https://web.archive.org/web/20110717154050/http://www.umterps.com/sports/m-footbl/mtt/costa_phil00.html |date=2011-07-17 }}, [[Maryland Terrapins football]]. Accessed March 2, 2011.</ref><ref>Staff. [https://web.archive.org/web/20160304093207/http://www.baltimoresun.com/sports/bal-costa0723-photo.html "Phil Costa"], ''[[The Baltimore Sun]]''. Accessed September 8, 2015. "Phil Costa; Junior offensive lineman Phil Costa is expected to start at right guard for the Terps in 2008. Costa, a junior from Moorestown, N.J., appeared in all 13 games as a junior."</ref>
* [[Colin Farrell (rower)|Colin Farrell]], head coach of the [[University of Pennsylvania]] lightweight rowing team.<ref>[http://www.pennathletics.com/news/2016/6/27/5771aaf2e4b0028e7235e1e9_131492719921710273.aspx?path=mltrow "Colin Farrell Named Lightweight Rowing Head Coach"], PennAthletics.com, June 30, 2014. Accessed November 29, 2017. "Colin Farrell, who has served as an assistant coachfor the past two seasons and interim head coach since the conclusion of the 2014 EARC Sprints, will officially be promoted to head coach of the University of Pennsylvania men's lightweight rowing program effective July 1.... Farrell and his wife, Ellie, reside in Moorestown, N.J., with their son, Kellan."</ref>
* [[Dereck Faulkner]] (born 1985), [[wide receiver]] who played in the NFL for the [[Philadelphia Eagles]].<ref>Hunt, Donald. [http://www.espn.com/college-football/news/story?id=2604575 "Hampton finds another star in QB Shepherd"], ''[[ESPN]]'', September 27, 2006. Accessed November 29, 2017. "Dereck Faulkner, Hampton's senior slot receiver, played with Iowa's star running back Albert Young at Moorestown High School in Moorestown, N.J. Faulkner and Young talk to each other at least twice a week."</ref>
* [[Edwin B. Forsythe]] (1916–1984), member of the United States House of Representatives from New Jersey who served as mayor of Moorestown from 1957-62.<ref name=Forsythe/><ref>Waggoner, Walter H. [https://www.nytimes.com/1984/03/30/obituaries/edwin-forsythe-congressman-dies.html "Edwin Forsythe, congressman, dies"], ''[[The New York Times]]'', March 30, 1984. Accessed March 2, 2011. "Representative Edwin B. Forsythe, a New Jersey Republican who served in the House of Representatives for 14 years, died of lung cancer yesterday at his home in Moorestown, N.J. He was 68 years old."</ref>
* [[Walter French (baseball)|Walter French]] (1899–1984), football All-American and professional baseball player for the Philadelphia Athletics, 1923-1929.<ref>[https://web.archive.org/web/20150909071042/http://www.moorestown.com/history/ Historical Society of Moorestown], Moorestown.com. Accessed September 8, 2015. "Congratulations to our president, Lenny Wagner. His article on Moorestown's Walter French, a former major league baseball player for the Philadelphia A's, was accepted for publication by The Society for American Baseball Research (SABR)."</ref><ref>Wagner, Lenny. [https://web.archive.org/web/20181118193922/https://sabr.org/bioproj/person/81b87e6a "Walt French"], [[Society for American Baseball Research]]. Accessed September 8, 2015. "Walter E. French was born in Moorestown, New Jersey, on July 10, 1899.... He entered Moorestown High School in 1914 and starred in football, baseball, basketball, and track."</ref>
* [[Joseph H. Gaskill]] (1851-1935), judge on the [[New Jersey Court of Common Pleas]] and Justice of the [[New Jersey Supreme Court]] from 1893 to 1896.<ref>Staff. [https://www.nytimes.com/1935/11/26/archives/exjudge-gaskill-i-ds-suddeiily-84-servedon-burlington-county-n-j.html "Ex-Judge Gaskill Dies Suddenly, 84; Served-on Burlington County, N. J., Common Pleas Bench Many years Ago"], ''[[The New York Times]]'', November 26, 1935. Accessed August 28, 2018. "Judge Gaskill, a native of Mount Holly, was admitted to the bar as an attorney in 1873 and became a counselor in 1877.... After his retirement from the bench, Judge Gaskill opened law offices in Camden. In 1910 he moved from Mount Holly to Moorestown."</ref>
* [[John F. Gerry]] (1926–1995), former chief [[United States federal judge|United States district judge]] on the [[United States District Court for the District of New Jersey]].<ref>Holloway, Lynette. [https://www.nytimes.com/1995/03/12/obituaries/john-f-gerry-69-chief-judge-of-federal-court-in-new-jersey.html "John F. Gerry, 69, Chief Judge Of Federal Court in New Jersey"], ''[[The New York Times]]'', March 12, 1995. Accessed June 3, 2013. "John Francis Gerry, the chief United States district judge in New Jersey for seven years and a former top official of the policy-making arm of the Federal bench, died on Friday at his home in Moorestown, N.J. He was 69."</ref>
* [[Chris Gheysens]] (born c. 1972), president and chief executive officer of [[Wawa Inc.]]<ref name=SJT2014>Laday, Jason. [http://www.nj.com/gloucester-county/index.ssf/2014/04/wawa_ceo_chris_gheysens_remembers_vineland_as_company_celebrates_50-year_milestone.html "As Wawa celebrates 50th anniversary, CEO remembers Vineland store"], ''[[South Jersey Times]]'', April 15, 2014. Accessed October 8, 2015. "'My dad would have a bunch of change from the car wash, and he was like the banker for everyone over there at the Wawa,' said Gheysens, a graduate of both St. Mary's in East Vineland and St. Augustine College Preparatory School. 'South Jersey is a big part of Wawa, and it is definitely part of me — I grew up in Vineland, and my parents had a summer house in Sea Isle. I moved to Washington Township — or 'Township' as they call it — after marrying my wife, and we raised our four children there.' Gheysens, who currently resides in Burlington County, will be spending Wednesday morning at Wawa's very first store, which opened in 1964 in Folsom, Pa., for a ceremony at 6 a.m."</ref><ref>Monostra, Mike. [http://patch.com/new-jersey/moorestown/wawa-planned-to-open-near-moorestown-mall "Wawa Planned to Open Near Moorestown Mall; The convenience store will be located at the former location of Classic Chevrolet."], Moorestown Patch. Accessed October 8, 2015. "Wawa CEO Chris Gheysens is a resident of Moorestown."</ref>
* [[Bill Guerin]] (born 1970), right winger who earned the [[Stanley Cup]] with both the [[New Jersey Devils]] and [[Pittsburgh Penguins]].<ref>Staff. [http://nl.newsbank.com/nl-search/we/Archives?p_product=DN&s_site=philly&p_multi=PI|DN&p_theme=realcities&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=0F0211A2D9FD5BF4&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Guerin to Flyers? Speculation Bruin"], ''[[Philadelphia Daily News]]'', November 30, 2001. Accessed March 1, 2011. "Guerin spends his offseasons in Moorestown with his wife, Kara, and their three kids."</ref>
* [[Edward Harris (ornithologist)|Edward Harris]] (1799–1863), introduced the [[Percheron]] horse to America; benefactor of [[John James Audubon]]; lived at Smith-Cadbury Mansion.<ref>[http://moorestownhistory.org/about/smith-cadbury/ Smith-Cadbury Mansion]</ref>
* [[Vernon Hill]] (born 1946), founder and former chairman, president, and chief executive officer of [[Commerce Bancorp]] and Commerce Bank of Cherry Hill Township, New Jersey.<ref>Staff. [http://nl.newsbank.com/nl-search/we/Archives?p_product=PI&s_site=philly&p_multi=PI&p_theme=realcities&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=0F8051776326BDE7&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Moorestown tells Hill that gate must go, Elaborate entrance at banker's estate violates zoning, officials say."], ''[[The Philadelphia Inquirer]]'', December 18, 2002. Accessed March 1, 2011. "The drive-through lane at Commerce Bancorp chairman Vernon Hill's home will move a little faster starting today. Moorestown's zoning officer ordered Hill to remove the elaborate entrance gate at his 44.2-acre estate because it violates last month's zoning board decision that disallowed a tall fence that would have separated a portion of Hill's land from neighboring property."</ref>
* [[Leon A. Huff]] (born 1942), co-founder and vice-chairman of Gamble-Huff Music, a songwriting and record production team who have written and produced 15 gold singles and 22 gold albums.<ref>Friedman, Sally. [https://web.archive.org/web/20160509184851/http://articles.philly.com/2010-03-19/living/25214561_1_huffs-music-producer-love-privacy "One neat arrangement Music producer Leon Huff's Moorestown home is a serene, orderly getaway. The Sound of Philadelphia? 'I'm a guy who really needs quiet.'"], ''[[The Philadelphia Inquirer]]'', March 19, 2010. Accessed April 27, 2016. "Leon Huff admits it - he's a neat freak, and it shows in his elegant Moorestown home, a place so immaculate it's hard to imagine anyone even lives in it."</ref>
* [[Alfred Hunt (steel magnate)|Alfred Hunt]] (1817–1888), first president of Bethlehem Iron Company, precursor of Bethlehem Steel Corporation.<ref>[http://www.pa-roots.org/data/read.php?360,473948 Alfred Hunt's obituary] "The announcement of the death of Alfred Hunt, president of the Bethlehem Iron Company, will be a shock to his numerous friends throughout the Lehigh Valley and the State. The sad event occurred last evening at the home of his brother, Mordecai Hunt, in Moorestown, N. J."</ref><ref>[http://www.pa-roots.org/data/read.php?351,454514,454514 Hunt family history]</ref>
* [[Esther Hunt]] (1751–1820), a pioneer who lived on America's frontier as a wife, a mother and a leader in her Quaker faith.<ref>Specht, Neva Jean (1997), ''Mixed blessing: trans-Appalachian settlement and the Society of Friends, 1780-1813'', Ph. D. dissertation, University of Delaware</ref><ref>Specht, Neva Jean (2003), "Women of one or many bonnets?: Quaker women and the role of religion in trans-Appalachian settlement", ''NWSA Journal'' '''15 (2)''': 27-44</ref>
* [[John Hunt (Quaker minister)|John Hunt]] (1740-1824), [[Recorded Minister|Quaker minister]] and journalist.<ref>[http://www.swarthmore.edu/library/friends/ead/5240johu.xml An Inventory of the John Hunt Papers, 1770-1828], [[Swarthmore College]]. Accessed November 20, 2017.</ref>
* [[Eldridge R. Johnson]] (1867–1945), founder of [[Victor Talking Machine Company]].<ref>Staff. [https://www.nytimes.com/1928/10/15/archives/er-johnson-buyer-of-original-alice-pays-150000-for-manuscript-and.html "E.R. Johnson buyer of original 'Alice'; Pays $150,000 for Manuscript and Two Copies of Carroll's Famous Story. Will sent it on tour Former Head of Victor Talking Machine Company Will Never Sell It, He Says."], ''[[The New York Times]]'', October 15, 1928. Accessed August 28, 2018. "Eldridge R. Johnson, founder and former President of the Victor Talking Machine Company and a resident of Moorestown, N.J., is the purchaser from Dr. A.S.W. Rosenbach of Philadelphia of the original manuscript of Lewis Carroll's ''Alice in Wonderland,'' for which Dr. Rosenbach paid $75,259 at an auction at Sotheby's in London in April."</ref>
* [[Jevon Kearse]] (born 1976), former NFL defensive end who played for the [[Philadelphia Eagles]] and [[Tennessee Titans]].<ref>Klein, Michael. [https://web.archive.org/web/20171201033202/http://www.philly.com/philly/columnists/michael_klein/20080608_Inqlings__Throwback_plan_for_Striped_Bass.html "Inqlings: Throwback plan for Striped Bass"], ''[[The Philadelphia Inquirer]]'', June 8, 2008. Accessed November 29, 2017. "Former Eagle Jevon Kearse has cut the asking price of his Moorestown five-bedroom from $3.1 million to $2,699,993."</ref>
* [[Tim Kerr]] (born 1960), former NHL right wing who played for the [[Philadelphia Flyers]], [[New York Rangers]] and [[Hartford Whalers]].<ref>Lulgjuraj, Susan. [http://www.pressofatlanticcity.com/news/top_three/article_f53db206-66e5-11df-ae77-001cc4c03286.html "Many Philadelphia Flyers past and present call Cape May County home"], ''[[The Press of Atlantic City]]'', May 24, 2010. Accessed March 1, 2011. "Tim Kerr has a huge presence in the Avalon and Stone Harbor area. The three-time All-Star played in Philadelphia for 11 seasons from 1980 to 1991 and holds Philadelphia's team record for the most 50-goal seasons with four. He owns Tim Kerr's Powerplay Realty on Dune Drive, which sells and rents homes in the Avalon and Stone Harbor area. For several years, Kerr also has run a charity run that bears his name. Kerr splits time between his homes in Avalon and Moorestown, Burlington County, said Tim Kerr Realty sales associate Ann Delaney."</ref>
* [[Matt Langel]] (born 1977), [[head coach]] for the [[Colgate Raiders men's basketball]] team.<ref>Ronaldson, Tim. [https://moorestownsun.com/from-the-courts-to-coach-482a89b51a54 "From the courts to coach"], ''The Moorestown Sun'', April 26, 2011. Accessed November 29, 2017. "Moorestown-native Matt Langel has etched his name into history books as a basketball player, now he'll do it as a coach."</ref>
* [[Jonathan V. Last]] (born 1974), columnist for ''[[The Weekly Standard]]''.<ref>Staff. [http://nl.newsbank.com/nl-search/we/Archives?p_product=PI&s_site=philly&p_multi=PI&p_theme=realcities&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=10F2C719F9FE5FE0&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Great leap rightward? Nah, just finding balance"], ''[[The Philadelphia Inquirer]]'', January 15, 2006. Accessed March 2, 2011. "Folks meet Jonathan V. Last. He was born in Camden 31 years ago grew up in Woodbury and Moorestown and now works as online editor for the Weekly Standard."</ref>
* [[Al LeConey]] (1901–1959), gold medal winner in the [[4 × 100 metres relay|4x100 meter relay]] at the [[1924 Summer Olympics]].<ref>LeConey, Bill. [http://nl.newsbank.com/nl-search/we/Archives?p_product=AC&p_theme=ac&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=0EAEDD1A31B61260&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "1924 gold medalist in family spurs press writer's search"], ''[[The Press of Atlantic City]]'', September 27, 2000. Accessed March 1, 2011. "J. Alfred LeConey was a great American sprinter of his time achieving local fame at Moorestown and then at Lafayette in the early 1920s."</ref><ref>''New Jersey Mirror'', March 2, 1938: "Death of William G. LeConey." "Surviving are his wife, Laura Haines LeConey, a very active worker in the First Baptist Church; and two sons, Everett LeConey, of Moorestown; and J. Alfred LeConey, of Plainfield. The latter was a winner in the Olympics at Paris in 1924 and upon his return to Moorestown, a great reception was held on the lawn of the LeConey home here to do him honor."</ref>
* [[Kathy Linden]] (born 1938), pop singer who scored hits on the U.S. [[Billboard Hot 100|''Billboard'' Hot 100]] with "[[Billy (Kathy Linden song)|Billy]]" and "[[Goodbye Jimmy, Goodbye]]".<ref>[https://mentalitch.com/kathy-linden-the-woman-with-a-childish-voice/ "Kathy Linden – The Woman with a Childish Voice"], Mental Itch. Accessed November 29, 2017. "Kathy Linden is an American traditional pop singer whose singing was considered one of the sweetest-sounding voices during her era. She was born Marion Londres in Moorestown Township, New Jersey, and grew up in nearby Burlington, living on the town's Elm Avenue."</ref>
* [[Donovan McNabb]] (born 1976), former professional football player for the [[Philadelphia Eagles]].<ref>[https://www.usatoday.com/news/nation/2005-07-11-nj-town-best-place-to-live_x.htm "Moorestown, N.J., named best town to live"], ''[[USA Today]]'', July 11, 2005. Accessed July 25, 2008. "Plenty of executives still inhabit its {{convert|15|sqmi|km2}}. But the best-known citizens these days are a number of Philadelphia Eagles players, including star quarterback Donovan McNabb."</ref>
* [[Stephen W. Meader]] (1892–1977), author of more than 40 novels for boys and girls.<ref>[https://web.archive.org/web/20110708104413/http://www.burlcohistorian.com/NewViewsVIINarrative New Views VII - 2008 Literary Burlington County], [[Burlington County, New Jersey]] Historian. Accessed March 1, 2011. "Stephen W. Meader home, 565 East Main Street, Moorestown. Author of Children's Books (1892-1977). Stephen Meader, born to Quaker parents, wrote his first children's book, The Black Buccaneer, in 1920. He moved his growing family to Moorestown in 1922 and by 1927, he had obtained a position with the Philadelphia advertising firm of N.W. Ayer & Son."</ref><ref>[https://web.archive.org/web/20060527162905/http://www.southernskies.com/bio.asp ''The Life of Stephen W. Meader''] "A third child, John, was born in 1921, and in 1922, the family moved to Moorestown, New Jersey." Accessed April 16, 2008.</ref>
* [[Freddie Mitchell]] (born 1978), former professional football player for the [[Philadelphia Eagles]].<ref>Jones, Gordie. [https://web.archive.org/web/20140722230636/http://articles.mcall.com/2005-04-24/sports/3609037_1_defensive-linemen-andy-reid-receiver "Don't buy Andy's spin: draft sent Iggles a message"], ''[[The Morning Call]]'', April 24, 2005. Accessed February 11, 2012. "It was hard to hear him, because it sounded like somebody was hammering a 'For Sale' sign into the lawn in front of Freddie Mitchell's Moorestown, N.J., home."</ref><ref>Boyer, Dave. [https://web.archive.org/web/20160304060820/http://articles.philly.com/2004-10-11/news/25390659_1_moorestown-resident-affordable-housing-town-dump "Hear this, T.O.: There are plenty of hoppin' spots in Moorestown Who needs a liquor store when you have the town dump and a Friendly's?"], ''[[The Philadelphia Inquirer]]'', October 11, 2004. Accessed April 23, 2015. "And wide receiver Freddie Mitchell has lived in Moorestown the last few years, although he's moving. Mitchell got into a dispute with a neighbor over trees, and has been looking for a place that is - repeat after me, T.O. - quieter than Moorestown."</ref>
* [[Victoria Napolitano]] (born 1988), politician who became Moorestown's youngest mayor, when she took office in 2015 at age 26.<ref name=Napolitano>Williams, Sharrie. [http://6abc.com/politics/26-year-old-moorestown-mayor-sworn-in-/464735/ "26-year-old Moorestown mayor sworn in"], [[WPVI-TV]], January 6, 2015. Accessed November 29, 2017. "A new year means new leadership in Moorestown, New Jersey. Victoria Napolitano was sworn in as the town's new mayor. At the age of 26, she's the youngest mayor in Moorestown's recent history."</ref>
* [[David A. Norcross]] (born 1937), politician who ran for [[United States Senate]] in 1976 and served as chairman of the [[New Jersey Republican State Committee]].<ref>Guenther, Alan. [https://web.archive.org/web/20170108213527/http://pqasb.pqarchiver.com/app/doc/438008849.html?FMT=ABS&FMTS=ABS:FT&type=current&date=Nov%2024,%202007&author=ALAN%20GUENTHER&pub=Asbury%20Park%20Press&edition=&startpage=&desc=Feud%20roils%20race%20for%20Saxton%27s%20seat "Feud roils race for Saxton's seat"], ''[[Asbury Park Press]]'', November 24, 2007. Accessed December 2, 2013. "The next day, he touted the candidacy of Moorestown resident David A. Norcross, who's been active with the national Republican Party."</ref>
* [[Brendan O'Connor (United States Army)|Brendan O'Connor]] (born c. 1960), recipient of the [[Distinguished Service Cross (United States)|Distinguished Service Cross]] for his heroic action in [[Afghanistan]].<ref>[https://web.archive.org/web/20110105120529/http://www.moorestown.nj.us/pubs/140/2669.pdf Proclamation honoring Master Sergeant Brendan O'Connor at July 28, 2008, Meeting of the Township Council of Moorestown Township], Moorestown Township, backed up by the [[Internet Archive]] as of January 15, 2011. Accessed September 8, 2015.</ref><ref>[http://militarytimes.com/citations-medals-awards/recipient.php?recipientid=3669 Brendan W. O'Connor], ''MilitaryTimes'' Hall of Valor. Accessed September 8, 2015. "Brendan W. O'Connor; Home of record: Moorestown New Jersey"</ref>
* [[Christine O'Donnell]] (born 1969), Republican candidate in [[Delaware]]'s [[United States Senate special election in Delaware, 2010|2010 United States Senate special election]].<ref>via ''[[The Washington Post]]''. [http://www.cleveland.com/nation/index.ssf/2010/09/gop_candidate_christine_odonne.html "GOP candidate Christine O'Donnell's stunning Senate primary win raises questions about her past"], ''[[The Plain Dealer]]'', September 19, 2010. Accessed March 1, 2011. "O'Donnell, 41, grew up in Moorestown, N.J., and attended Fairleigh Dickinson University, though she did not earn her degree until this year."</ref>
* [[Terrell Owens]] (born 1973), former professional football player who played for the [[Philadelphia Eagles]] and other teams.<ref>[http://sports.espn.go.com/nfl/news/story?id=2216703 Reid: T.O. will not play for Eagles this season], [[ESPN.com]], November 8, 2005.</ref>
* [[Sal Paolantonio]], (born 1956), [[Philadelphia]]-based bureau reporter for [[ESPN]].<ref>Fiorillo, Victor. [http://www.phillymag.com/articles/2013/10/25/espns-sal-paolantonio-nobody-high-school/ "ESPN’s Sal Paolantonio Was a Nobody in High School; Plus, the Moorestown-based sports broadcast personality and former Inquirer reporter tells us why Donovan McNabb is misunderstood, his summer chasing Russian subs, and how the Beatles saved the USA."], ''[[Philadelphia (magazine)]]'', October 25, 2013. Accessed January 11, 2018.</ref><ref>Aleardi, Marianne. [https://sjmagazine.net/people/ten-questions/ten-questions-sal-paolantonio "Ten Questions: Sal Paolantonio; The ESPN correspondent talks sports, politics and Uncle Bill’s Pancake House"], ''South Jersey Magazine'', July 2013. Accessed January 11, 2018. "A resident of Moorestown, Paolantonio spends the NFL season watching, talking, breathing football."</ref>
* [[Alice Paul]] (1885–1977), leader of a campaign for women's suffrage resulting in passage of the 19th Amendment to the U.S. Constitution.<ref>[https://web.archive.org/web/20110719035030/http://www.ettc.net/njarts/details.cfm?ID=313 Alice Paul House, Moorestown], [[Stockton University]]. Accessed July 25, 2008.</ref>
* [[Doug Pederson]] (born 1968), head coach of the [[Philadelphia Eagles]] of the [[National Football League]].<ref>{{cite web|title=Eagles hiring Chiefs OC Doug Pederson as head coach|url=http://www.nfl.com/news/story/0ap3000000622612/article/eagles-hiring-chiefs-oc-doug-pederson-as-head-coach|website=NFL.com}}</ref><ref>Anastasia, Phil. [http://www.philly.com/philly/blogs/phil-anastasia/Football-preview-Moorestown.html "Football preview: Moorestown"], ''[[The Philadelphia Inquirer]]'', October 17, 2013. Accessed September 8, 2015. "But Lisa is not even a lock to start as Horton insists that junior Drew Pederson, the son of Eagles assistant coach Doug Pederson, is a strong contender for the job."</ref><ref>Cuellar, Dann. [http://6abc.com/sports/doug-pedersons-neighbors-ready-to-welcome-him-back-home/1166113/ "Doug Pedersons' neighbors ready to welcome him back home"], [[WPVI-TV]], January 19, 2016. Accessed November 29, 2017. "New Philadelphia Eagles head coach Doug Pederson and his family are excited about moving back to the area.... Before moving to Kansas City in 2011, the Pederson family lived on a cul-de-sac in the unit block of Hamilton Court in Moorestown, New Jersey."</ref>
* [[Samuel K. Robbins]] (1853–1926), politician who served as Speaker of the [[New Jersey General Assembly]] and president of the [[New Jersey Senate]].<ref>Staff. [https://www.nytimes.com/1908/12/26/archives/would-succeed-watkins-senator-robbins-out-for-his-place-as-jersey.html "Would Succeed Watkins.; Senator Robbins Out for His Place as Jersey Commissioner of Banking."], ''[[The New York Times]]'', December 26, 1908. Accessed August 28, 2018. "Senator Samuel K. Robbins of Moorestown, Burlington County, is expected to succeed David O. Watkins of Woodbury as State Commissioner of Banking and Insurance."</ref>
* [[Julie Robenhymer]] (born 1981), [[Miss New Jersey]] 2005.<ref>via [[Associated Press]]. [http://nl.newsbank.com/nl-search/we/Archives?p_product=BURB&p_multi=WBCB&p_theme=burb&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=10B1325E2D06DB00&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Pageant life teaches new Miss N.J. Moorestown woman learns about competition, herself"], ''[[Burlington County Times]]'', June 20, 2005. Accessed March 1, 2011. "Julie Robenhymer, the reigning Miss Burlington County and the newly crowned Miss New Jersey, isn't entirely comfortable with being called beautiful. 'It's very weird,' she said. The 24-year-old Moorestown native would rather talk about how competing in beauty pageants gave her confidence and self-worth."</ref>
* [[Jeremy Roenick]] (born 1970), professional hockey player, former player for the [[Philadelphia Flyers]].<ref>Ginsberg, Wendy. [https://web.archive.org/web/20110517031158/http://www.highbeam.com/doc/1G1-120637001.html "New Magazine Aims to Be Social Guide for Southern New Jersey Suburbs"], ''[[The Philadelphia Inquirer]]'', January 17, 2002. Accessed March 8, 2008. "The monthly magazine, which aims to be a social guide for South Jerseyans, was relaunched this month with the toothy grin of Philadelphia Flyer Jeremy Roenick, a Moorestown resident, gracing the cover."</ref>
* [[Jon Runyan]] (born 1973), football player for the [[Philadelphia Eagles]], [[Houston Oilers]] and [[San Diego Chargers]] who was elected to represent [[New Jersey's 3rd congressional district]] from 2011 to 2015.<ref>[https://web.archive.org/web/20130729114852/http://abclocal.go.com/wpvi/story?section=news%2Fsports&id=5749333 "Inside Jon Runyan's New Crib"], [[WPVI]], November 17, 2007. Accessed June 15, 2008. "The man is Philadelphia Eagle Jon Runyan, and the house is located in Moorestown, New Jersey."</ref><ref>Zap, Claudine. [https://www.realtor.com/news/celebrity-real-estate/jon-runyan-purchases-new-jersey-home/ "Former Congressman and NFL Star Jon Runyan Buys Smaller Place in Jersey"], [[Realtor.com]], December 10, 2015. Accessed February 5, 2018. "From NFL offensive lineman to two-term New Jersey congressman, Jon Runyan has had an action-packed career.... He has since purchased a more modest home in nearby Moorestown, NJ, for $1,375,000. We're sure he'll adjust to his smaller manse."</ref>
* [[Steve Sabol]] (1942–2012), president and co-founder of [[NFL Films]].<ref>Staff. [http://nl.newsbank.com/nl-search/we/Archives?p_product=PI&s_site=philly&p_multi=PI&p_theme=realcities&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=11E9657AA56E88E8&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Sabol's seen many Super moments"], ''[[The Philadelphia Inquirer]]'', February 3, 2008. Accessed March 1, 2011. ""Steve Sabol, president of the Mount Laurel-based NFL Films and a resident of Moorestown, has been at all of these title games, documenting the events..."</ref>
* [[Ulf Samuelsson]] (born 1964), professional hockey player, former player for the [[Philadelphia Flyers]].<ref>Samuelsson, Ulf. [https://web.archive.org/web/20160304032757/http://www.thehockeynews.com/articles/19067-Ulf-Samuelssons-Blog-The-transition-to-coaching.html "Ulf Samuelsson's Blog: The transition to coaching"], ''[[The Hockey News]]'', October 24, 2008. Accessed March 1, 2011. "I got into a number of things, like restaurants and car dealerships. For a while, we had three dealerships going in Pittsburgh and we sold a lot on eBay. It was fun to go out and try many things that I couldn't when I was playing hockey. My family and I stayed in New Jersey, in a great town called Moorestown Township."</ref>
* [[Lauren Schmetterling]] (born 1988), [[Rowing (sport)|rower]] who won a total of three gold medals in the Women's eight competition at the [[2013 World Rowing Championships]], the [[2015 World Rowing Championships]] and the [[2016 Summer Olympics]] in [[Rio de Janeiro]].<ref>[http://www.teamusa.org/us-rowing/athletes/Lauren-Schmetterling Lauren Schmetterling], [[United States Olympic Team]]. Accessed August 10, 2016. "Birthplace: Voorhees, N.J.; Hometown: Moorestown, N.J.; High School: Moorestown High School (Moorestown, N.J.) '06"</ref>
* [[Katherine Shindle]] (born 1977), [[Miss America]] 1998 and actress.<ref>[http://nl.newsbank.com/nl-search/we/Archives?p_product=PI&s_site=philly&p_multi=PI&p_theme=realcities&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=0EB32F096FA2E5E0&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "A S. Jersey girl takes the crown of Miss America, but she's Miss Illinois."], ''[[The Philadelphia Inquirer]]'', September 14, 1977. Accessed February 11, 2012. "Moorestown native and Bishop Eustace graduate Katherine Shindle was named Miss America 1998 last night, topping an all-vocalist field of five finalists in the 77th annual competition."</ref><ref>Marcus, Joan. [http://www.philly.com/philly/entertainment/author-alison-bechdel-and-actor-katherine-shindle-dish-on-the-tony-winning-musical-fun-home-opening-tuesday-in-philly-20170606.html "Author Alison Bechdel and actor Katherine Shindle dish on the Tony winning musical Fun Home opening Tuesday in Philly"], ''[[The Philadelphia Inquirer]]'', June 7, 2017. Accessed November 29, 2017. "A critical and commercial hit when it opened in 2015 on Broadway, the show kicked off a national tour in October and stars former Miss America Katherine Shindle (''Legally Blonde'' on Broadway, Cabaret national tour), who grew up in New Jersey, in Brigantine and Moorestown, and attended Bishop Eustace Preparatory School in Pennsauken."</ref>
* [[Scott Terry (musician)|Scott Terry]] (born 1976), songwriter and singer who has fronted the band [[Red Wanting Blue]].<ref>Scott, Rob. [http://patch.com/new-jersey/moorestown/moorestown-s-scott-terry-to-rock-letterman "Moorestown's Scott Terry to Rock Letterman; Moorestown High School alum Scott Terry and his band, Red Wanting Blue, will perform on the ''Late Show with David Letterman'' Wednesday night."], Moorestown Patch, July 18, 2012. Accessed November 7, 2015. "But Scott said he didn't take music seriously until he moved to Moorestown and began singing in the choir at the and later joined the Madrigals at Moorestown High School."</ref>
* [[Albert W. Van Duzer]] (1917-1999), bishop of the [[Episcopal Diocese of New Jersey]], serving from 1973 to 1982.<ref>Hagenmayer, S. Joseph. [https://web.archive.org/web/20160323105944/http://articles.philly.com/1999-11-30/news/25495375_1_general-theological-seminary-longtime-rector-first-parish "Episcopal Bishop Albert W. Van Duzer"], ''[[The Philadelphia Inquirer]]'', November 30, 1999. Accessed November 8, 2015. "A longtime New Jersey resident, he lived in Moorestown for five years, Medford for 10 years, Trenton for 20 years, and Merchantville for 20 years."</ref>
* [[John Vanbiesbrouck]] (born 1963), professional hockey player, former player for the [[Philadelphia Flyers]].<ref>Staff. [http://nl.newsbank.com/nl-search/we/Archives?p_product=PI&s_site=philly&p_multi=PI&p_theme=realcities&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=0EB33094992DA3D4&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Vanbiesbrouck ready for spotlight - The new goalie knows he was no. 3 on shopping lists during the free-agent period. He's eager to show that the flyers picked the right one"], ''[[The Philadelphia Inquirer]]'', October 8, 1998. Accessed March 1, 2011. "He has three sons - Ian, Ben and Nicholas - and lives in Moorestown."</ref>
* [[James Weinstein (New Jersey)|James Weinstein]], transportation planner and executive who served as executive director of [[New Jersey Transit]].<ref>[http://www.state.nj.us/transportation/about/press/1999/010699.shtm "Governor Swears in James Weinstein as Commissioner of Transportation"], [[Governor of New Jersey]] [[Christine Todd Whitman]], press release dated April 5, 2007. Accessed November 29, 2017. "Weinstein is a graduate of Seton Hall University and began his career as a journalist. He currently resides in Moorestown, Burlington County, with his wife Linda Artlip."</ref>
* [[Brian Willison]] (ki fèt an 1977), direktè nan Parsons Institute for Information Mapping.
* [[Helen Van Pelt Wilson]] (1901-2003), ekriven.<ref>Staff. [http://nl.newsbank.com/nl-search/we/Archives?p_product=WTNB&p_theme=wtnb&p_action=search&p_maxdocs=200&p_topdoc=1&p_text_direct-0=0FEB2ABAAC2C21F8&p_field_direct-0=document_id&p_perpage=10&p_sort=YMD_date:D&s_trackval=GooglePM "Wilson, Helen Van Pelt"], ''Westport News (Connecticut)'', October 24, 2003. Accessed November 17, 2013. "Born in Collingswood, N.J., Oct. 19, 1901, she grew up in nearby Moorestown, went to the Shipley School in Bryn Mawr and graduated cum laude from Bryn Mawr College in 1923."</ref>
* [[Esther V. Yanai]] (1928-2003), avokat open-space preservation in Moorestown.<ref>[http://obits.syracuse.com/obituaries/syracuse/obituary.aspx?n=esther-yanai&pid=1497100 "Obituary: Esther Yanai"], ''[[Syracuse Post Standard]]'', October 21, 2003. Accessed November 29, 2017. "October 15, 2003 Esther Yanai, 75, of Moorestown, NJ, died Wednesday at her daughter Ruth's home in Syracuse, cared for by friends and family, including husband Steve and granddaughter Nora."</ref>
* [[Albert Young (American football)|Albert Young]] (ki fèt an 1985), ansyen foutbalè pou [[Iowa Hawkeyes football|University of Iowa]] and [[Minnesota Vikings]].<ref>[https://web.archive.org/web/20081022183017/http://hawkeyesports.cstv.com/sports/m-footbl/mtt/young_albert00.html Albert Young], [[Iowa Hawkeyes football]]. Accessed May 25, 2008.</ref>
* [[Tim Young (American rower)|Tim Young]] (ki fèt an 1968), silver medal-winning rower in the quadruple sculls at the [[1996 Summer Olympics]].<ref>Pucin, Diane via ''[[The Philadelphia Inquirer]]''. [https://news.google.com/newspapers?id=jqRSAAAAIBAJ&sjid=m28DAAAAIBAJ&dq=tim-young%20moorestown&pg=4608%2C6177294 "U.S. rowers put 3 boats into finals"], ''[[Pittsburgh Post-Gazette]]'', July 27, 1996. Accessed March 1, 2011. "Young, from Moorestown, has chosen to row in the quad, a sculling boat in a country where the sculling boats are always of lowest priority."</ref>
* [[Martha Zweig]], powèt.<ref>[http://www.versedaily.org/2010/aboutmarthazweigml.shtml About Martha Zweig], Verse Daily. Accessed November 29, 2017. "Martha Zweig was born in Philadelphia and grew up in suburban Moorestown, New Jersey, where she was educated at the Friends' (Quaker) School."</ref>
== Referans ==
{{referans}}
== Lyen deyò ==
[[Kategori:Vil nan New Jersey]]
[[Kategori:Vil nan Etazini]]
[[Kategori:Jewografi]]
o5okbmxrm08glrnjnky1v29c83c1gzw
River Edge, New Jersey
0
35859
855615
762206
2024-11-12T20:50:31Z
Nathavaskie
31718
/* Kèk lyen */ ajoute lyen
855615
wikitext
text/x-wiki
{{ebòch}}
{{kolektivite tèritoryal
|non_lokal= River Edge
|koodone_lat=
|koodone_lon=
|drapo_imaj=
|anblèm_imaj=
|tip=vil
|dat=
|zòn_tip=Eta
|zòn= [[New Jersey]]
|kapital_tip=
|kapital_non=Trenton
|chèf_tit=
|chèf_non=
|sipèfisi_dat=
|sipèfisi_ran=
|sipèfisi_total=
|dlo_pousantaj=
|frontyè_tè=
|frontyè_kòt=
|rote_mwayen=
|pli_ro_kote=
|pli_ro=
|pli_ba_kote=
|pli_ba=
|popilasyon_dat=
|popilasyon_ran=
|popilasyon_total=
|popilasyon_dansite=
|popilasyon_tip=
|aktivite=
|kat_anplasman=
|kat_politik=
|kat_jewografik=
|kat_satelit=
|divizyon_tip=
|divizyon_non=
|vwazen=
|sitwèb=
|kòd_tip=jewografik
|kòd=
|nòt=
}}
River Edge se yon vil nan eta [[New Jersey]] .
Li nan konte Bergen
Li te genyen nan lane 2000 10946 moun.
== Istwa ==
Istwa
== Relasyon ak Ayiti ==
*Kominote Ayisyen, relasyon ant eta sa epi Ayiti
== Jewografi ==
== Ekonomi ==
== Devlòpman ==
== Politik ==
== Edikasyon ==
== Anviwònman ==
== referans ==
== Kèk lyen ==
https://datausa.io/profile/geo/river-edge-nj
[[kategori:vil nan New Jersey]]
[[Kategori:Vil nan Etazini]]
[[kategori:jewografi]]
lb6jyggobdyzu7amcge0e6xf7wgk56a
Modèl:Infobox
10
62585
855582
852945
2024-11-12T15:16:54Z
BwaKajou
31668
855582
wikitext
text/x-wiki
{{#invoke:Infobox|build|nom={{#invoke:Infobox/Infobox universelle|main|{{{wikidata|}}}}}}}{{Infobox en Lua}}</div></includeonly>
nermv6nivplreo3rrpgeqfet1odlrco
XVideos
0
62588
855591
841203
2024-11-12T16:02:46Z
BwaKajou
31668
855591
wikitext
text/x-wiki
{{Infobox Dotcom company
| company_name = XVideos
| company_logo = XVideos logo.svg
| company_type = [[Pònografik]]
| genre = Pònografi
| foundation =
| founder =
| location = [[Etazini]]
| area_served = Atravè lemond
| industry = Pònografi
| products =
| services = Pònografi
| revenue =
| operating_income =
| net_income =
| owner =
| parent =
| divisions =
| subsid =
| company_slogan = Gratis Albòm Porn
| url = xvideos.com
| screenshot =
| caption =
| alexa = {{DecreasePositive}} 41 ({{as of|2014|6|25|alt=June 2014}})<ref name="alexa">{{cite web |url= http://www.alexa.com/siteinfo/xvideos.com |title= Xvideos.com Site Info |publisher= [[Alexa Internet]] |accessdate= 2014-04-01 |archive-date= 2019-05-17 |archive-url= https://web.archive.org/web/20190517111328/https://www.alexa.com/siteinfo/xvideos.com |dead-url= yes }}</ref><!--Updated monthly by OKBot.-->
| website_type = Pònografik pataje videyo
| language = [[Angle]]
| advertising = Wi
| registration = Si ou vle
| launch_date = [[1997]]
| current_status = Aktif
| footnotes =
| intl =
}}
'''XVideos''' se yon pònografik gratis sou sit wèb pataje videyo. Li se sit entènèt la ki pi popilè pònografik nan mond lan, li te gen simonte porneub kòm ki pi popilè sou sit wèb granmoun pataje videyo nan Novanm [[2010]]. Li te tou plis pouvwa pase LiveJasmin, yon sit entènèt chat videyo granmoun nan janvye [[2012]].
Dapre [[Alexa Internet|Alexa]] li te youn nan 50 sou sit entènèt yo sou entènèt la ki pi popilè depi nan kòmansman [[2013]], ak kounye a gen sou 350 milyon vizitè chak mwa, bay "nan 29 petabytes nan done transfere chak mwa."<ref name="ExtremeTech">{{cite journal |url= http://www.extremetech.com/computing/123929-just-how-big-are-porn-sites |title=Just how big are porn sites? |first=Sebastian |last=Anthony |journal=[[ExtremeTech]] |location=New York, NY |publisher=[[Ziff Davis Media]] |date=April 4, 2012 |accessdate=April 7, 2012 |oclc=489265532}}</ref>
==Referans==
<references/>
[[Kategori:Entènèt]]
fft8inrks1t0assfifjpn0tehjzv6os
Module:Infobox
828
62631
855580
852896
2024-11-12T15:00:35Z
BwaKajou
31668
855580
Scribunto
text/plain
local p = {}
local wikiLang = 'ht'
local localdata = {}-- données concernant les paramètres passés au modèle
-- données concernant la page où est affichée l'infobox
local page = mw.title.getCurrentTitle()
local maincolor, secondcolor, thirdcolor = 'var(--background-color-interactive-subtle, #f8f9fa)', 'var(--background-color-interactive-subtle, #f8f9fa)', 'var(--color-emphasized, #000000)'
-- l'objet principal à retourner
local infobox = mw.html.create('div')
-- objets secondaires à retourner
local maintenance = '' -- chaîne retournée avec le module : cats de maintenance
local externaltext = '' -- par exemple coordonnées en titre
-- modules importés
local wd = require 'Module:Wikidata'
local yesno = require 'Module:Yesno'
local valueexpl = wd.translate("activate-query")
-- maintenance des images dupliquées
local usedImages = {}
local i18n = {
['see doc'] = 'Documentation du modèle',
['edit'] = 'modifye',
['edit code'] = 'modifye kòd la',
['edit item'] = 'modifye Wikidata',
['tracking cat'] = "Paj ki itilize done Wikidata",
['invalid block type'] = "Bloc de données invalide dans le module d'infobox",
['default cat'] = "Antretyen infobox",
}
local function expandQuery(query)
if not query.entity then
query.entity = localdata.item
end
if not query.conjtype then
query.conjtype = 'comma'
end
local claims = wd.getClaims(query)
if (not claims) then
return nil
end
return wd.formatAndCat(query), wd.getgendernum(claims) -- valeur et code indiquant le genre/nombre pour accorder le libellé
end
local function getWikidataValue(params, wikidataparam)
-- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre "wikidata" soit dans le paramètre "property"
if not localdata.item then
return nil
end
if params.blockers then -- blockers are local parameters that disable the wikidata query
local blockers = params.blockers
if (type(blockers) == 'string') then
blockers = {blockers}
end
for i, blocker in ipairs(blockers) do
if localdata[blocker] then
return nil
end
end
end
local v, valgendernum -- la valeur à retourner, et le genre/nombre de de valeurs (pour l'accord grammatical)
if not wikidataparam then -- par défaut la valeur wikidata est dans le paramètre "wikidata" mais dans les structures composées comme "title", il y a plusieurs paramètres wikidata
wikidataparam = 'wikidata'
end
if params.property and not params[wikidataparam] then params[wikidataparam] = {property = params.property} end
if params[wikidataparam] then
if type(params[wikidataparam]) == 'function' then
v, valgendernum = params[wikidataparam](localdata.item)
elseif type(params[wikidataparam]) == 'table' then
v, valgendernum = expandQuery(params[wikidataparam])
else
v, valgendernum = params[wikidataparam]
end
end
if not v then
return nil
end
if(type(valgendernum) == 'number') then
if(valgendernum > 1) then
valgendernum = 'p'
else
valgendernum = 's'
end
end
return v, valgendernum
end
local function getValue(val, params)
if type(val) == 'string' then
return localdata[val]
elseif type(val) == 'function' then
return val(localdata, localdata.item, params)
elseif type(val) == 'table' then
for i, j in pairs(val) do -- si plusieurs paramètres possibles (legacy de vieux code), prendre le premier non vide
if localdata[j] then
return localdata[j]
end
end
end
end
local function addMaintenanceCat(cat, sortkey)
if page.namespace ~= 0 then
return ''
end
if cat then
local sortkeycode
if sortkey then sortkeycode = '|' .. sortkey else sortkeycode = '' end
maintenance = maintenance .. '[[Category:'.. cat .. sortkeycode .. ']]'
end
end
function p.separator(params)
local style = params['separator style'] or {}
style.height = style.height or '2px'
style['background-color'] = style['background-color'] or maincolor
return mw.html.create('hr'):css( style )
end
--[=[
Construit le code du bloc de titre de l'infobox
Paramètres (liste partielle) :
- value : Moyen d'obtenir le titre via getValue (nom de paramètre de modèle ou fonction).
- textdefaultvalue : Valeur par défaut du titre.
- icon : Pictogramme d'infobox (voir [[Projet:Infobox/Pictogramme]]).
- italic : Indique si le titre doit être affiché en italique.
Si italic=true, le paramètre "titre en italique" de l'infobox peut forcer la désactivation.
- setdisplaytitle : Indique si le titre de l'article doit être mis en forme comme celui de l'infobox.
Si setdisplaytitle=true, le paramètre "titre article en italique" de l'infobox peut forcer la désactivation.
]=]
function p.buildtitle(params)
local text = getValue(params.value, params) or params.textdefaultvalue or getWikidataValue(params) or page.prefixedText
local lang = localdata['langue du titre'] or ''
if lang ~= '' then
local langueFunction = require( 'Module:Langue' ).langue
text = langueFunction( { lang, text } )
end
local subtext = getValue(params.subtitle) or getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue
if subtext and (subtext ~= text) then
text = text .. '<br /><small>' .. subtext .. '</small>'
end
local icon = params.icon or ''
if icon ~= '' and icon ~= 'defaut' then
text = text .. mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Infobox/Pictogramme/' .. mw.text.trim(icon) .. '.css'})
if not params.large then
icon = 'icon ' .. icon
end
end
local classes = 'entete ' .. icon
local italic = params.italic and yesno(localdata['titre en italique'] or '', true, true)
if italic then
classes = classes .. ' italique'
end
if params.setdisplaytitle and yesno(localdata['titre article en italique'] or '', true, true) then
local formatTitleModule = require( 'Module:Formatage du titre' )
text = text .. formatTitleModule.setDisplayTitle{ args = {
lang = lang,
italic = italic,
options = 'noreplace',
} }
end
-- overwrites with those provided in the module
local style = {}
style['background-color'] = maincolor
style['color'] = thirdcolor
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local title = mw.html.create('div')
:addClass(classes)
:css(style)
:tag('div')
:wikitext(text)
:allDone()
return title
end
p.buildTitle = p.buildtitle
function p.buildnavigator(params)
-- définition du style
local classes = "overflow infobox-navigateur " .. (params.class or '')
local style = params.style or {}
if params.separated then -- options pour ajouter une ligne de séparation au dessus
classes = classes .. ' bordered'
style['border-top'] = '1px solid' .. maincolor
end
-- ajustement des paramètres de données
params.previousval = params.previousval or params.previousparameter -- nom de paramètre obsolète
params.nextval = params.nextval or params.nextparameter
if params.previousproperty then
params.previouswikidata = {property = params.previousproperty}
end
if params.nextproperty then
params.nextwikidata = {property = params.nextproperty}
end
local previousval = getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')
local nextval = getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')
if previousval == '-' then previousval = nil end
if nextval == '-' then nextval = nil end
local navigator
if params.inner then -- pour celles qui sont à l'intérieur d'une table
navigator = mw.html.create('tr'):tag('th'):attr('colspan', 2)
style['font-weight'] = style['font-weight'] or 'normal'
else
navigator = mw.html.create('div')
end
if previousval or nextval then
navigator
:addClass(classes)
:css(style)
:tag('div')
:addClass('prev_bloc')
:wikitext(previousval)
:done()
:tag('div')
:addClass('next_bloc')
:wikitext(nextval)
:done()
:allDone()
return navigator
end
return nil
end
p.buildNavigator = p.buildnavigator
function p.buildimages(params)
local images = {}
local upright, link, caption, classe, alt, size -- size is deprecated
if type(params.imageparameters) == 'string' then
params.imageparameters = {params.imageparameters}
end
if not params.imageparameters then -- s'il n'y a pas de paramètre image, continuer, peut-être y a-t-il une image par défaut définie dans le module d'infobox
params.imageparameters = {}
end
for j, k in ipairs(params.imageparameters) do
table.insert(images, localdata[k])
end
-- Images de Wikidata
local iswikidataimage, iswikidatacaption = false
if #images == 0 and localdata.item then
if params.property then
params.wikidata = {entity = localdata.item, property = params.property}
end
if params.wikidata then
local wdq = params.wikidata
wdq.excludespecial = true
if type(wdq) == 'table' then
wdq.entity = wdq.entity or localdata.item
wdq.numval = wdq.numval or params.numval or 1
images = wd.getClaims(wdq)
end
if type(wdq) == 'function' then
images = params.wikidata()
if type(images) == 'string' then
return images
end --c'est probablement une erreur dans la requête => afficher le message
end
if (not images) then
images = {}
end
if (#images > 0) and (params.wikidata.property) then
maintenance = maintenance .. wd.addTrackingCat(params.wikidata.property)
end
if type(images[1]) == 'table' then
for i, image in pairs(images) do
if image.mainsnak.snaktype ~= 'value' then
return
end
if #images == 1 then -- si une seule image, on utilise la légende (si deux plusieurs images, comment mettre en forme ?)
caption = wd.getFormattedQualifiers(images[i], {'P2096'}, {isinlang = wikiLang}) or wd.getFormattedQualifiers(images[i], {'P805'})
iswikidatacaption = caption ~= nil
end
images[i] = image.mainsnak.datavalue.value
iswikidataimage = true
end
end
end
end
if #images == 0 and getValue(params.captionparameter) ~= nil then
addMaintenanceCat("Infobox avec une légende locale sans image")
end
-- Images par défaut
if #images == 0 then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
if params.defaultimages then
images = params.defaultimages
if type(images) == 'string' then
images = {images}
end
upright = params.defaultimageupright
caption = params.defaultimagecaption
link = params.defaultimagelink
classe = params.defaultimageclass
if not classe and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then
classe = 'skin-invert notheme'
end
alt = params.defaultimagealt
if not alt and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then
alt = 'une illustration sous licence libre serait bienvenue'
end
end
end
if #images == 0 then
return nil
end
upright = upright or getValue(params.uprightparameter) or params.defaultupright or "1.2"
link = link or getValue(params.linkparameter) or params.defaultlink
caption = caption or getValue(params.captionparameter) or params.defaultcaption
classe = classe or getValue( params.classparameter) or params.defaultclass
alt = alt or getValue( params.altparameter) or params.defaultalt
if iswikidataimage and not iswikidatacaption and getValue(params.captionparameter) ~= nil then
addMaintenanceCat("Infobox avec une légende locale et une image sur Wikidata")
end
-- taille avec "size" (obsolète)
size = size or getValue(params.sizeparameter) or params.defaultsize -- deprecated
if size then
local sizevalue = size:gsub('px$', '')
local widthonly = mw.ustring.gsub(sizevalue, 'x.*', '')
widthonly = tonumber(widthonly)
if type(widthonly) ~= 'number' or widthonly > 280 then
addMaintenanceCat("Infobox avec une image trop grande")
end
if tonumber(sizevalue) then
size = tostring( tonumber(sizevalue) ) .. 'px'
end
end
if tonumber(upright) then
upright = tostring( tonumber(upright) )
end
local style = params.style or {padding ='2px 0',}
-- Partie image
local imagesString = ''
for i,image in pairs(images) do
if image == '-' then
return
end
imagesString = imagesString .. '[[Fichye:' .. image .. '|frameless'
if size then
imagesString = imagesString .. '|' .. size -- not a mistake, parameter is unnamed
end
if classe then
imagesString = imagesString .. '|class=' .. classe
end
if alt then
imagesString = imagesString .. '|alt=' .. alt
end
if link then
imagesString = imagesString .. '|link=' .. link
end
if upright then
imagesString = imagesString .. '|upright=' .. upright
elseif #images > 1 and not size then
imagesString = imagesString .. '|upright=' .. ( 1 / #images )
end
if image:sub(-4):lower() == '.svg' then
imagesString = imagesString .. '|lang=' .. wikiLang
end
imagesString = imagesString .. ']]'
if usedImages[image] then
addMaintenanceCat('Infobox avec plusieurs images identiques')
end
usedImages[image] = true
end
local image = mw.html.create('div')
:addClass("images")
:css(style)
:wikitext(imagesString)
-- Partie légende
local captionobj
if caption then
captionobj = mw.html.create('div')
:wikitext(caption)
:css(params.legendstyle or {})
:addClass("legend")
:done()
end
-- séparateur
local separator
if params.separator then
separator = p.separator(params)
end
return mw.html.create('div')
:node(image)
:node(captionobj)
:node(separator)
:done()
end
p.buildImages = p.buildimages
function p.buildtext(params)
local classes = params.class or ''
local style = {
['text-align'] = 'center',
['font-weight'] = 'bold'
}
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue
if text == '-' then
return
end
if not text then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
return nil
end
-- séparateur
local separator
if params.separator then
separator = p.separator(params)
end
local formattedtext = mw.html.create('p')
:addClass(classes)
:css(style)
:wikitext(text)
:node(separator)
:done()
return formattedtext
end
p.buildText = p.buildtext
function p.buildrow(params)
local classes = params.class or ''
local style = params.style or {}
local valueClass = params.valueClass or ''
local valueStyle = params.valueStyle or {}
local value, gendernum = getValue(params.value, params)
if(type(gendernum) == 'number') then
if(gendernum > 1) then
gendernum = 'p'
else
gendernum = 's'
end
end
if type(params.wikidata) == 'table' then
params.wikidata.wikidatalang = localdata.wikidatalang
if (value == valueexpl) then
value = nil
params.wikidata.expl = false
end
end
if (not value) then
value, gendernum = getWikidataValue(params, 'wikidata')
end
if not value then
value = params.defaultvalue
end
if value == '-' then
return nil
end
if not gendernum then
gendernum = 's' --singulier indéfini
end
if not value then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
return nil
end
local label = params.label
if type(label) == 'string' then label = {default = label} end
if type(label) == 'table' then -- Accord en genre et en nombre
local onlynum = {default = 'default', s = 's', ms = 's', fs = 's', p = 'p', mp = 'p', fp = 'p', mixtep = 'p'} -- Accord seulement en nombre par défaut
label['s'] = label['s'] or params.singularlabel or label['default'] or label['ms']
label['p'] = label['p'] or params.plurallabel or label['mp']
label = label[gendernum] or label[onlynum[gendernum]] or label.default
end
if type(label) == 'function' then
label = label(localdata, localdata.item)
end
-- format
local formattedvalue = mw.html.create('div')
:wikitext('\n' .. value) -- Le '\n' est requis lorsque value est une liste commençant par '*' ou '#'
if (params.hidden == true)then
formattedvalue
:attr({class="NavContent", style="display: none; text-align: left;"})
formattedvalue = mw.html.create('div')
:attr({class="NavFrame", title="[Afiche]/[Maske]", style="border: none; padding: 0;"})
:node(formattedvalue)
end
formattedvalue = mw.html.create('td')
:node(formattedvalue)
:addClass(valueClass)
:css(valueStyle)
:allDone()
local formattedlabel
if label then
formattedlabel = mw.html.create('th')
:attr('scope', 'row')
:wikitext(label)
:done()
end
local row = mw.html.create('tr')
:addClass(classes)
:css(style)
:node(formattedlabel)
:node(formattedvalue)
:done()
return row
end
p.buildRow = p.buildrow
function p.buildsuccession(params)
if not params.value then
return nil
end
--local style = params.style or {}
--style['text-align'] = style['text-align'] or 'center'
--style['color'] = style['color'] or '#000000'
--style['background-color'] = style['background-color'] or '#F9F9F9'
local rowI = mw.html.create('tr')
local styleI = {}
local colspan = '2'
styleI['padding'] = '1px'
local cellI = mw.html.create('td')
:attr({colspan = colspan})
:attr({align = 'center'})
:css(styleI)
local styleT = {
margin = '0px',
['background-color'] = 'transparent',
color = 'inherit',
width = '100%'
}
local tabC = mw.html.create('table')
:attr({cellspacing = '0'})
:addClass('navigation-not-searchable')
:css(styleT)
local row = mw.html.create('tr')
local color = params.color
local style = {}
local arrowLeft = '[[Fichye:Arrleft.svg|13px|alt=Anvan|link=]]'
local arrowRight = '[[Fichye:Arrright.svg|13px|alt=Aprè|link=]]'
if color ~= 'default' then
style['background-color'] = color
end
local styleTrans = {}
local values = params.value
local before = values['before']
local center = values['center']
local after = values['after']
local widthCenter
local widthCell = '44%'
if center then
widthCenter = '28%'
widthCell = '29%'
end
local formattedbefore
if before then
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'left'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowLeft)
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(before)
:done()
row:node(formattedbefore)
else
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'left'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
end
local formattedcenter
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
if center then
formattedcenter = mw.html.create('td')
:attr({align = 'center'})
:attr({valign = 'middle'})
:attr({width = widthCenter})
:css(style)
:wikitext(center)
:done()
row:node(formattedcenter)
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
end
local formattedafter
if after then
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(after)
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowRight)
:done()
row:node(formattedafter)
else
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
end
row:done()
tabC:node(row)
tabC:done()
cellI:node(tabC)
cellI:done()
rowI:node(cellI)
rowI:allDone()
return rowI
end
p.buildSuccession = p.buildsuccession
function p.buildrow1col(params)
if not params.value then
return nil
end
--local style = params.style or {}
--style['text-align'] = style['text-align'] or 'center'
--style['color'] = style['color'] or '#000000'
--style['background-color'] = style['background-color'] or '#F9F9F9'
local classes = params.class
local rowcolor
if params.color == 'secondcolor' then
rowcolor = secondcolor
else
rowcolor = params.color
end
local style = {}
style['padding'] = '4px'
style['text-align'] = 'center'
style['background-color'] = rowcolor or 'var(--couleur-fond-boite-grise, #f9f9f9)'
style['color'] = 'var(--color-emphasized, #000000)'
local text = params.value
local colspan ='2'
local formattedlabel
formattedlabel = mw.html.create('th')
:attr({colspan = colspan})
:css(style)
:wikitext(text)
:done()
local row = mw.html.create('tr')
:addClass(classes)
:css(style)
:node(formattedlabel)
:done()
return row
end
p.buildRow1Col = p.buildrow1col
function p.buildtable(params)
local tab = mw.html.create('table'):css(params.style or {})
local rows = params.rows
-- expand parameters so that we have a list of tables
local i = 1
while (i <= #rows) do
local l = rows[i]
if type(l) == 'function' then
l = l(localdata, localdata.item)
end
if (type(l) == 'table') and (l.type == 'multi') then
table.remove(rows, i)
for j, row in ipairs(l.rows) do
table.insert(rows, i + j - 1, row)
end
elseif type(l) == 'nil' then
table.remove(rows, i)
elseif type(l) ~= 'table' then
return error('les lignes d\'infobox ("rows") doivent être des tables, est ' .. type(l))
else
i = i + 1
end
end
-- CREATE ROW
local expandedrows = {}
for k, row in ipairs(rows) do
local v = p.buildblock(row)
if v then
table.insert(expandedrows, v)
end
end
if (#expandedrows == 0) then
return nil
end
rows = expandedrows
-- ADD TITLE
local title
if params.title or params.singulartitle or params.pluraltitle then
local text
if #rows > 1 and params.pluraltitle then
text = params.pluraltitle
elseif #rows == 1 and params.singulartitle then
text = params.singulartitle
else
text = params.title
end
local style = params.titlestyle or {}
style['text-align'] = style['text-align'] or 'center'
style['color'] = style['color'] or thirdcolor
style['background-color'] = style['background-color'] or maincolor
local colspan ='2'
title = mw.html.create('caption')
:attr({colspan = colspan})
:css(style)
:wikitext(text)
:done()
end
if title then
tab:node(title)
end
for i, j in pairs (rows) do
tab:node(j)
end
if params.separator then
local separator = p.separator(params)
tab:node(separator)
end
tab:allDone()
return tab
end
p.buildTable = p.buildtable
function p.buildinvalidblock(args)
addMaintenanceCat(i18n['default cat'])
local text = ''
if type(args) ~= 'table' then
text = "Les blocs d'infobox doivent être des tables"
else
text = i18n["invalid block type"] .. ' : ' .. (args.type or '??')
end
return text
end
p.buildInvalidBlock = p.buildinvalidblock
function p.buildmap(params)
-- paramètre d'affichage
local maplist = getValue(params.maps)
local pointtype = params.pointtype
local maptype = params.maptype -- choisit le type de carte le plus approprié (relief, administratif, etc.)
if type(maplist) == 'function' then
maplist = maplist(localdata, localdata.item)
end
local width = tonumber(params.width) or 280
if width > 280 then
addMaintenanceCat("Infobox avec une image trop grande")
return 'image trop grande, la largeur doit être inférieure ou égale à 280px'
end
-- récupération des données locales
local pointtable = {}
local globe = params.globe
if params.latitude then
local lat, long
if type(params.latitude) == 'function' then
lat, long = params.latitude(localdata, localdata.item), params.longitude(localdata, localdata.item)
else
lat, long = localdata[params.latitude], localdata[params.longitude]
end
if lat then
table.insert(pointtable, {latitude = lat, longitude = long})
end
end
-- récupération des données wikidata
local function processWDval(claim, displayformat)
if not claim then
return nil
end
local val = wd.formatSnak( claim.mainsnak )
return {latitude = val.latitude, longitude = val.longitude, globe = val.globe, marker = displayformat.marker}
end
local function getWDvals(query)
query.excludespecial = true
query.numval = query.numval or 1
query.entity = query.entity or localdata.item
local claims = wd.getClaims(query)
if (not claims) then
return
end
for i, claim in ipairs(claims) do
claim = processWDval(claim, query)
table.insert(pointtable, claim)
end
end
if (#pointtable == 0) and localdata.item and params.wikidata and (params.wikidata ~= '-') then
for i, query in ipairs(params.wikidata) do
if type(query) == 'function' then
query = query()
end
if query then
getWDvals(query)
end
end
end
if (not pointtable) or (#pointtable == 0) then
return nil
end
local newparams = {maplist = maplist, pointtype = pointtype, maptype = maptype, width = width, item = localdata.item, pointtable = pointtable, globe = globe, marker=params.marker, default_zoom=params.default_zoom, ids = params.ids, markercolor = params.markercolor, shapecolor = params.shapecolor }
if params.params and type(params.params) == 'table' then -- paramètres additionnels
for i, j in pairs(params.params) do
newparams[i] = j
end
end
return require('Module:Carte').multimap(newparams)
end
p.buildMap = p.buildmap
function p.buildexternaltext(params)
local value = getValue(params.value)
if value and (type(value) == 'string') then
externaltext = externaltext .. value
end
end
p.buildExternalText = p.buildexternaltext
function p.buildfooter(params)
if not params then
params = {}
end
local classes = 'navbar noprint bordered navigation-not-searchable ' .. (params.class or '')
local style = params.style or {}
style['border-top'] = style['border-top'] or '1px solid ' .. maincolor
local backlinkstr = '[' .. tostring( mw.uri.fullUrl( page.prefixedText, 'veaction=edit§ion=0' ) ) .. ' ' .. i18n['edit'] .. ']'
.. ' - [' .. tostring( mw.uri.fullUrl( page.prefixedText, 'action=edit§ion=0' ) ) .. ' ' .. i18n['edit code'] .. ']'
local itemlinkstr
if localdata.item and localdata.item ~= '-' then
itemlinkstr = '[[d:' .. localdata.item .. '|' .. i18n['edit item'] .. ']]'
end
local editstr = backlinkstr
if itemlinkstr then
editstr = editstr .. ' - ' .. itemlinkstr
end
local editlinkspan = mw.html.create('span')
:css({['text-align'] = "left"})
:addClass('plainlinks')
:wikitext(editstr)
:done()
local doclinkstr = '[[Fichier:Info Simple.svg|12px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]'
-- si ce lien ne marche pas toujours, il faut ajouter un variable pour le nom de l'infobox récupéré par le frame
local doclinkspan = mw.html.create('span')
:css({['text-align'] = "right"})
:wikitext(doclinkstr)
:done()
local footer = mw.html.create('p')
:addClass(classes)
:css(style)
:node(editlinkspan)
:node(doclinkspan)
return footer
end
p.buildFooter = p.buildfooter
function p.buildblock(block)
if type(block) == 'function' then
block = block( localdata )
end
local blocktypes = { -- list of functions for block buildings
['invalid'] = p.buildinvalidblock,
['external text'] = p.buildexternaltext,
['footer'] = p.buildfooter,
['images'] = p.buildimages,
['map']= p.buildmap,
['mixed'] = p.buildrow,
['navigator'] = p.buildnavigator,
['table'] = p.buildtable,
['row'] = p.buildrow,
['row1col'] = p.buildrow1col,
['succession'] = p.buildsuccession,
['text'] = p.buildtext,
['title'] = p.buildtitle,
}
if type(block) ~= 'table' or (not block.type) or (not blocktypes[block.type]) then
return blocktypes['invalid'](block)
end
return blocktypes[block.type](block)
end
p.buildBlock = p.buildblock
function p.build()
localdata = require( 'Module:Infobox/Localdata' )
if type( localdata.item ) == 'table' then
localdata.item = localdata.item.id
end
-- assign rank to the infobox, "secondary" means special formatting like no displaytitle for coordinates
local infoboxrank = 'main' -- main infobox of the page, with coordinates displayed in title etc.
if page.namespace ~= 0 then
infoboxrank = 'secondary'
end
-- if infobox is linked to another item: rank = secondary
if localdata.item then
local itemlink = mw.wikibase.sitelink(localdata.item)
local pagetitle = page.prefixedText
if (itemlink or '') ~= pagetitle then
infoboxrank = 'secondary'
end
end
localdata.infoboxrank = infoboxrank
-- load infobox module page
local moduledata = require('Module:Infobox/' .. localdata.modulename)
moduledata.name = localdata.modulename
-- maintenance categories given by the module page
if moduledata.categories then
for i, j in pairs(moduledata.categories) do
if (type(j) == 'string') then addMaintenanceCat(j) end
if (type(j) == 'table') then addMaintenanceCat(j[1],j[2]) end
end
end
-- defines main color
maincolor = localdata['couleur infobox'] or localdata['couleur boîte'] or localdata['couleur boite'] or moduledata.maincolor or maincolor
secondcolor = moduledata.secondcolor or secondcolor
thirdcolor = localdata['texte noir'] or localdata['couleur texte'] or moduledata.thirdcolor or thirdcolor
if ( #maincolor == 6 or #maincolor == 3 ) and maincolor:match( '^%x+$' ) then
maincolor = '#' .. maincolor
end
if thirdcolor == 'oui' or thirdcolor == 'true' then
thirdcolor = '#000'
elseif thirdcolor == 'non' or thirdcolor == 'false' then
thirdcolor = '#fff'
end
-- classes
local classes = mw.getCurrentFrame():expandTemplate{ title = 'Classes début infobox', args = { version = '3' } }
classes = classes .. ' large ' .. (moduledata.class or '')
-- style
local style = moduledata.style or {}
-- build infobox
infobox :addClass(classes)
:css(style)
for i, j in pairs( moduledata.parts ) do
infobox:node( p.buildblock(j) )
end
infobox :node(p.buildfooter(moduledata.footer))
:done()
return tostring(infobox) .. externaltext, maintenance
end
return p
gdmy4x09fxmghcn5s788f7ormph713y
855586
855580
2024-11-12T15:28:41Z
BwaKajou
31668
855586
Scribunto
text/plain
local p = {}
local wikiLang = 'ht'
local localdata = {}-- données concernant les paramètres passés au modèle
-- données concernant la page où est affichée l'infobox
local page = mw.title.getCurrentTitle()
local maincolor, secondcolor, thirdcolor = 'var(--background-color-interactive-subtle, #f8f9fa)', 'var(--background-color-interactive-subtle, #f8f9fa)', 'var(--color-emphasized, #000000)'
-- l'objet principal à retourner
local infobox = mw.html.create('div')
-- objets secondaires à retourner
local maintenance = '' -- chaîne retournée avec le module : cats de maintenance
local externaltext = '' -- par exemple coordonnées en titre
-- modules importés
local wd = require 'Module:Wikidata'
local yesno = require 'Module:Yesno'
local valueexpl = wd.translate("activate-query")
-- maintenance des images dupliquées
local usedImages = {}
local i18n = {
['see doc'] = 'Documentation du modèle',
['edit'] = 'modifye',
['edit code'] = 'modifye kòd la',
['edit item'] = 'modifye Wikidata',
['tracking cat'] = "Paj ki itilize done Wikidata",
['invalid block type'] = "Bloc de données invalide dans le module d'infobox",
['default cat'] = "Antretyen infobox",
}
local function expandQuery(query)
if not query.entity then
query.entity = localdata.item
end
if not query.conjtype then
query.conjtype = 'comma'
end
local claims = wd.getClaims(query)
if (not claims) then
return nil
end
return wd.formatAndCat(query), wd.getgendernum(claims) -- valeur et code indiquant le genre/nombre pour accorder le libellé
end
local function getWikidataValue(params, wikidataparam)
-- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre "wikidata" soit dans le paramètre "property"
if not localdata.item then
return nil
end
if params.blockers then -- blockers are local parameters that disable the wikidata query
local blockers = params.blockers
if (type(blockers) == 'string') then
blockers = {blockers}
end
for i, blocker in ipairs(blockers) do
if localdata[blocker] then
return nil
end
end
end
local v, valgendernum -- la valeur à retourner, et le genre/nombre de de valeurs (pour l'accord grammatical)
if not wikidataparam then -- par défaut la valeur wikidata est dans le paramètre "wikidata" mais dans les structures composées comme "title", il y a plusieurs paramètres wikidata
wikidataparam = 'wikidata'
end
if params.property and not params[wikidataparam] then params[wikidataparam] = {property = params.property} end
if params[wikidataparam] then
if type(params[wikidataparam]) == 'function' then
v, valgendernum = params[wikidataparam](localdata.item)
elseif type(params[wikidataparam]) == 'table' then
v, valgendernum = expandQuery(params[wikidataparam])
else
v, valgendernum = params[wikidataparam]
end
end
if not v then
return nil
end
if(type(valgendernum) == 'number') then
if(valgendernum > 1) then
valgendernum = 'p'
else
valgendernum = 's'
end
end
return v, valgendernum
end
local function getValue(val, params)
if type(val) == 'string' then
return localdata[val]
elseif type(val) == 'function' then
return val(localdata, localdata.item, params)
elseif type(val) == 'table' then
for i, j in pairs(val) do -- si plusieurs paramètres possibles (legacy de vieux code), prendre le premier non vide
if localdata[j] then
return localdata[j]
end
end
end
end
local function addMaintenanceCat(cat, sortkey)
if page.namespace ~= 0 then
return ''
end
if cat then
local sortkeycode
if sortkey then sortkeycode = '|' .. sortkey else sortkeycode = '' end
maintenance = maintenance .. '[[Category:'.. cat .. sortkeycode .. ']]'
end
end
function p.separator(params)
local style = params['separator style'] or {}
style.height = style.height or '2px'
style['background-color'] = style['background-color'] or maincolor
return mw.html.create('hr'):css( style )
end
--[=[
Construit le code du bloc de titre de l'infobox
Paramètres (liste partielle) :
- value : Moyen d'obtenir le titre via getValue (nom de paramètre de modèle ou fonction).
- textdefaultvalue : Valeur par défaut du titre.
- icon : Pictogramme d'infobox (voir [[Projet:Infobox/Pictogramme]]).
- italic : Indique si le titre doit être affiché en italique.
Si italic=true, le paramètre "titre en italique" de l'infobox peut forcer la désactivation.
- setdisplaytitle : Indique si le titre de l'article doit être mis en forme comme celui de l'infobox.
Si setdisplaytitle=true, le paramètre "titre article en italique" de l'infobox peut forcer la désactivation.
]=]
function p.buildtitle(params)
local text = getValue(params.value, params) or params.textdefaultvalue or getWikidataValue(params) or page.prefixedText
local lang = localdata['langue du titre'] or ''
if lang ~= '' then
local langueFunction = require( 'Module:Langue' ).langue
text = langueFunction( { lang, text } )
end
local subtext = getValue(params.subtitle) or getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue
if subtext and (subtext ~= text) then
text = text .. '<br /><small>' .. subtext .. '</small>'
end
local icon = params.icon or ''
if icon ~= '' and icon ~= 'defaut' then
text = text .. mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Infobox/Pictogramme/' .. mw.text.trim(icon) .. '.css'})
if not params.large then
icon = 'icon ' .. icon
end
end
local classes = 'entete ' .. icon
local italic = params.italic and yesno(localdata['titre en italique'] or '', true, true)
if italic then
classes = classes .. ' italique'
end
if params.setdisplaytitle and yesno(localdata['titre article en italique'] or '', true, true) then
local formatTitleModule = require( 'Module:Formatage du titre' )
text = text .. formatTitleModule.setDisplayTitle{ args = {
lang = lang,
italic = italic,
options = 'noreplace',
} }
end
-- overwrites with those provided in the module
local style = {}
style['background-color'] = maincolor
style['color'] = thirdcolor
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local title = mw.html.create('div')
:addClass(classes)
:css(style)
:tag('div')
:wikitext(text)
:allDone()
return title
end
p.buildTitle = p.buildtitle
function p.buildnavigator(params)
-- définition du style
local classes = "overflow infobox-navigateur " .. (params.class or '')
local style = params.style or {}
if params.separated then -- options pour ajouter une ligne de séparation au dessus
classes = classes .. ' bordered'
style['border-top'] = '1px solid' .. maincolor
end
-- ajustement des paramètres de données
params.previousval = params.previousval or params.previousparameter -- nom de paramètre obsolète
params.nextval = params.nextval or params.nextparameter
if params.previousproperty then
params.previouswikidata = {property = params.previousproperty}
end
if params.nextproperty then
params.nextwikidata = {property = params.nextproperty}
end
local previousval = getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')
local nextval = getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')
if previousval == '-' then previousval = nil end
if nextval == '-' then nextval = nil end
local navigator
if params.inner then -- pour celles qui sont à l'intérieur d'une table
navigator = mw.html.create('tr'):tag('th'):attr('colspan', 2)
style['font-weight'] = style['font-weight'] or 'normal'
else
navigator = mw.html.create('div')
end
if previousval or nextval then
navigator
:addClass(classes)
:css(style)
:tag('div')
:addClass('prev_bloc')
:wikitext(previousval)
:done()
:tag('div')
:addClass('next_bloc')
:wikitext(nextval)
:done()
:allDone()
return navigator
end
return nil
end
p.buildNavigator = p.buildnavigator
function p.buildimages(params)
local images = {}
local upright, link, caption, classe, alt, size -- size is deprecated
if type(params.imageparameters) == 'string' then
params.imageparameters = {params.imageparameters}
end
if not params.imageparameters then -- s'il n'y a pas de paramètre image, continuer, peut-être y a-t-il une image par défaut définie dans le module d'infobox
params.imageparameters = {}
end
for j, k in ipairs(params.imageparameters) do
table.insert(images, localdata[k])
end
-- Images de Wikidata
local iswikidataimage, iswikidatacaption = false
if #images == 0 and localdata.item then
if params.property then
params.wikidata = {entity = localdata.item, property = params.property}
end
if params.wikidata then
local wdq = params.wikidata
wdq.excludespecial = true
if type(wdq) == 'table' then
wdq.entity = wdq.entity or localdata.item
wdq.numval = wdq.numval or params.numval or 1
images = wd.getClaims(wdq)
end
if type(wdq) == 'function' then
images = params.wikidata()
if type(images) == 'string' then
return images
end --c'est probablement une erreur dans la requête => afficher le message
end
if (not images) then
images = {}
end
if (#images > 0) and (params.wikidata.property) then
maintenance = maintenance .. wd.addTrackingCat(params.wikidata.property)
end
if type(images[1]) == 'table' then
for i, image in pairs(images) do
if image.mainsnak.snaktype ~= 'value' then
return
end
if #images == 1 then -- si une seule image, on utilise la légende (si deux plusieurs images, comment mettre en forme ?)
caption = wd.getFormattedQualifiers(images[i], {'P2096'}, {isinlang = wikiLang}) or wd.getFormattedQualifiers(images[i], {'P805'})
iswikidatacaption = caption ~= nil
end
images[i] = image.mainsnak.datavalue.value
iswikidataimage = true
end
end
end
end
if #images == 0 and getValue(params.captionparameter) ~= nil then
addMaintenanceCat("Infobox avec une légende locale sans image")
end
-- Images par défaut
if #images == 0 then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
if params.defaultimages then
images = params.defaultimages
if type(images) == 'string' then
images = {images}
end
upright = params.defaultimageupright
caption = params.defaultimagecaption
link = params.defaultimagelink
classe = params.defaultimageclass
if not classe and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then
classe = 'skin-invert notheme'
end
alt = params.defaultimagealt
if not alt and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then
alt = 'une illustration sous licence libre serait bienvenue'
end
end
end
if #images == 0 then
return nil
end
upright = upright or getValue(params.uprightparameter) or params.defaultupright or "1.2"
link = link or getValue(params.linkparameter) or params.defaultlink
caption = caption or getValue(params.captionparameter) or params.defaultcaption
classe = classe or getValue( params.classparameter) or params.defaultclass
alt = alt or getValue( params.altparameter) or params.defaultalt
if iswikidataimage and not iswikidatacaption and getValue(params.captionparameter) ~= nil then
addMaintenanceCat("Infobox avec une légende locale et une image sur Wikidata")
end
-- taille avec "size" (obsolète)
size = size or getValue(params.sizeparameter) or params.defaultsize -- deprecated
if size then
local sizevalue = size:gsub('px$', '')
local widthonly = mw.ustring.gsub(sizevalue, 'x.*', '')
widthonly = tonumber(widthonly)
if type(widthonly) ~= 'number' or widthonly > 280 then
addMaintenanceCat("Infobox avec une image trop grande")
end
if tonumber(sizevalue) then
size = tostring( tonumber(sizevalue) ) .. 'px'
end
end
if tonumber(upright) then
upright = tostring( tonumber(upright) )
end
local style = params.style or {padding ='2px 0',}
-- Partie image
local imagesString = ''
for i,image in pairs(images) do
if image == '-' then
return
end
imagesString = imagesString .. '[[Fichye:' .. image .. '|frameless'
if size then
imagesString = imagesString .. '|' .. size -- not a mistake, parameter is unnamed
end
if classe then
imagesString = imagesString .. '|class=' .. classe
end
if alt then
imagesString = imagesString .. '|alt=' .. alt
end
if link then
imagesString = imagesString .. '|link=' .. link
end
if upright then
imagesString = imagesString .. '|upright=' .. upright
elseif #images > 1 and not size then
imagesString = imagesString .. '|upright=' .. ( 1 / #images )
end
if image:sub(-4):lower() == '.svg' then
imagesString = imagesString .. '|lang=' .. wikiLang
end
imagesString = imagesString .. ']]'
if usedImages[image] then
addMaintenanceCat('Infobox avec plusieurs images identiques')
end
usedImages[image] = true
end
local image = mw.html.create('div')
:addClass("images")
:css(style)
:wikitext(imagesString)
-- Partie légende
local captionobj
if caption then
captionobj = mw.html.create('div')
:wikitext(caption)
:css(params.legendstyle or {})
:addClass("legend")
:done()
end
-- séparateur
local separator
if params.separator then
separator = p.separator(params)
end
return mw.html.create('div')
:node(image)
:node(captionobj)
:node(separator)
:done()
end
p.buildImages = p.buildimages
function p.buildtext(params)
local classes = params.class or ''
local style = {
['text-align'] = 'center',
['font-weight'] = 'bold'
}
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue
if text == '-' then
return
end
if not text then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
return nil
end
-- séparateur
local separator
if params.separator then
separator = p.separator(params)
end
local formattedtext = mw.html.create('p')
:addClass(classes)
:css(style)
:wikitext(text)
:node(separator)
:done()
return formattedtext
end
p.buildText = p.buildtext
function p.buildrow(params)
local classes = params.class or ''
local style = params.style or {}
local valueClass = params.valueClass or ''
local valueStyle = params.valueStyle or {}
local value, gendernum = getValue(params.value, params)
if(type(gendernum) == 'number') then
if(gendernum > 1) then
gendernum = 'p'
else
gendernum = 's'
end
end
if type(params.wikidata) == 'table' then
params.wikidata.wikidatalang = localdata.wikidatalang
if (value == valueexpl) then
value = nil
params.wikidata.expl = false
end
end
if (not value) then
value, gendernum = getWikidataValue(params, 'wikidata')
end
if not value then
value = params.defaultvalue
end
if value == '-' then
return nil
end
if not gendernum then
gendernum = 's' --singulier indéfini
end
if not value then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
return nil
end
local label = params.label
if type(label) == 'string' then label = {default = label} end
if type(label) == 'table' then -- Accord en genre et en nombre
local onlynum = {default = 'default', s = 's', ms = 's', fs = 's', p = 'p', mp = 'p', fp = 'p', mixtep = 'p'} -- Accord seulement en nombre par défaut
label['s'] = label['s'] or params.singularlabel or label['default'] or label['ms']
label['p'] = label['p'] or params.plurallabel or label['mp']
label = label[gendernum] or label[onlynum[gendernum]] or label.default
end
if type(label) == 'function' then
label = label(localdata, localdata.item)
end
-- format
local formattedvalue = mw.html.create('div')
:wikitext('\n' .. value) -- Le '\n' est requis lorsque value est une liste commençant par '*' ou '#'
if (params.hidden == true)then
formattedvalue
:attr({class="NavContent", style="display: none; text-align: left;"})
formattedvalue = mw.html.create('div')
:attr({class="NavFrame", title="[Afiche]/[Maske]", style="border: none; padding: 0;"})
:node(formattedvalue)
end
formattedvalue = mw.html.create('td')
:node(formattedvalue)
:addClass(valueClass)
:css(valueStyle)
:allDone()
local formattedlabel
if label then
formattedlabel = mw.html.create('th')
:attr('scope', 'row')
:wikitext(label)
:done()
end
local row = mw.html.create('tr')
:addClass(classes)
:css(style)
:node(formattedlabel)
:node(formattedvalue)
:done()
return row
end
p.buildRow = p.buildrow
function p.buildsuccession(params)
if not params.value then
return nil
end
--local style = params.style or {}
--style['text-align'] = style['text-align'] or 'center'
--style['color'] = style['color'] or '#000000'
--style['background-color'] = style['background-color'] or '#F9F9F9'
local rowI = mw.html.create('tr')
local styleI = {}
local colspan = '2'
styleI['padding'] = '1px'
local cellI = mw.html.create('td')
:attr({colspan = colspan})
:attr({align = 'center'})
:css(styleI)
local styleT = {
margin = '0px',
['background-color'] = 'transparent',
color = 'inherit',
width = '100%'
}
local tabC = mw.html.create('table')
:attr({cellspacing = '0'})
:addClass('navigation-not-searchable')
:css(styleT)
local row = mw.html.create('tr')
local color = params.color
local style = {}
local arrowLeft = '[[Fichye:Arrleft.svg|13px|alt=Anvan|link=]]'
local arrowRight = '[[Fichye:Arrright.svg|13px|alt=Aprè|link=]]'
if color ~= 'default' then
style['background-color'] = color
end
local styleTrans = {}
local values = params.value
local before = values['before']
local center = values['center']
local after = values['after']
local widthCenter
local widthCell = '44%'
if center then
widthCenter = '28%'
widthCell = '29%'
end
local formattedbefore
if before then
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'left'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowLeft)
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(before)
:done()
row:node(formattedbefore)
else
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'left'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
end
local formattedcenter
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
if center then
formattedcenter = mw.html.create('td')
:attr({align = 'center'})
:attr({valign = 'middle'})
:attr({width = widthCenter})
:css(style)
:wikitext(center)
:done()
row:node(formattedcenter)
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
end
local formattedafter
if after then
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(after)
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowRight)
:done()
row:node(formattedafter)
else
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
end
row:done()
tabC:node(row)
tabC:done()
cellI:node(tabC)
cellI:done()
rowI:node(cellI)
rowI:allDone()
return rowI
end
p.buildSuccession = p.buildsuccession
function p.buildrow1col(params)
if not params.value then
return nil
end
--local style = params.style or {}
--style['text-align'] = style['text-align'] or 'center'
--style['color'] = style['color'] or '#000000'
--style['background-color'] = style['background-color'] or '#F9F9F9'
local classes = params.class
local rowcolor
if params.color == 'secondcolor' then
rowcolor = secondcolor
else
rowcolor = params.color
end
local style = {}
style['padding'] = '4px'
style['text-align'] = 'center'
style['background-color'] = rowcolor or 'var(--couleur-fond-boite-grise, #f9f9f9)'
style['color'] = 'var(--color-emphasized, #000000)'
local text = params.value
local colspan ='2'
local formattedlabel
formattedlabel = mw.html.create('th')
:attr({colspan = colspan})
:css(style)
:wikitext(text)
:done()
local row = mw.html.create('tr')
:addClass(classes)
:css(style)
:node(formattedlabel)
:done()
return row
end
p.buildRow1Col = p.buildrow1col
function p.buildtable(params)
local tab = mw.html.create('table'):css(params.style or {})
local rows = params.rows
-- expand parameters so that we have a list of tables
local i = 1
while (i <= #rows) do
local l = rows[i]
if type(l) == 'function' then
l = l(localdata, localdata.item)
end
if (type(l) == 'table') and (l.type == 'multi') then
table.remove(rows, i)
for j, row in ipairs(l.rows) do
table.insert(rows, i + j - 1, row)
end
elseif type(l) == 'nil' then
table.remove(rows, i)
elseif type(l) ~= 'table' then
return error('les lignes d\'infobox ("rows") doivent être des tables, est ' .. type(l))
else
i = i + 1
end
end
-- CREATE ROW
local expandedrows = {}
for k, row in ipairs(rows) do
local v = p.buildblock(row)
if v then
table.insert(expandedrows, v)
end
end
if (#expandedrows == 0) then
return nil
end
rows = expandedrows
-- ADD TITLE
local title
if params.title or params.singulartitle or params.pluraltitle then
local text
if #rows > 1 and params.pluraltitle then
text = params.pluraltitle
elseif #rows == 1 and params.singulartitle then
text = params.singulartitle
else
text = params.title
end
local style = params.titlestyle or {}
style['text-align'] = style['text-align'] or 'center'
style['color'] = style['color'] or thirdcolor
style['background-color'] = style['background-color'] or maincolor
local colspan ='2'
title = mw.html.create('caption')
:attr({colspan = colspan})
:css(style)
:wikitext(text)
:done()
end
if title then
tab:node(title)
end
for i, j in pairs (rows) do
tab:node(j)
end
if params.separator then
local separator = p.separator(params)
tab:node(separator)
end
tab:allDone()
return tab
end
p.buildTable = p.buildtable
function p.buildinvalidblock(args)
addMaintenanceCat(i18n['default cat'])
local text = ''
if type(args) ~= 'table' then
text = "Les blocs d'infobox doivent être des tables"
else
text = i18n["invalid block type"] .. ' : ' .. (args.type or '??')
end
return text
end
p.buildInvalidBlock = p.buildinvalidblock
function p.buildmap(params)
-- paramètre d'affichage
local maplist = getValue(params.maps)
local pointtype = params.pointtype
local maptype = params.maptype -- choisit le type de carte le plus approprié (relief, administratif, etc.)
if type(maplist) == 'function' then
maplist = maplist(localdata, localdata.item)
end
local width = tonumber(params.width) or 280
if width > 280 then
addMaintenanceCat("Infobox avec une image trop grande")
return 'image trop grande, la largeur doit être inférieure ou égale à 280px'
end
-- récupération des données locales
local pointtable = {}
local globe = params.globe
if params.latitude then
local lat, long
if type(params.latitude) == 'function' then
lat, long = params.latitude(localdata, localdata.item), params.longitude(localdata, localdata.item)
else
lat, long = localdata[params.latitude], localdata[params.longitude]
end
if lat then
table.insert(pointtable, {latitude = lat, longitude = long})
end
end
-- récupération des données wikidata
local function processWDval(claim, displayformat)
if not claim then
return nil
end
local val = wd.formatSnak( claim.mainsnak )
return {latitude = val.latitude, longitude = val.longitude, globe = val.globe, marker = displayformat.marker}
end
local function getWDvals(query)
query.excludespecial = true
query.numval = query.numval or 1
query.entity = query.entity or localdata.item
local claims = wd.getClaims(query)
if (not claims) then
return
end
for i, claim in ipairs(claims) do
claim = processWDval(claim, query)
table.insert(pointtable, claim)
end
end
if (#pointtable == 0) and localdata.item and params.wikidata and (params.wikidata ~= '-') then
for i, query in ipairs(params.wikidata) do
if type(query) == 'function' then
query = query()
end
if query then
getWDvals(query)
end
end
end
if (not pointtable) or (#pointtable == 0) then
return nil
end
local newparams = {maplist = maplist, pointtype = pointtype, maptype = maptype, width = width, item = localdata.item, pointtable = pointtable, globe = globe, marker=params.marker, default_zoom=params.default_zoom, ids = params.ids, markercolor = params.markercolor, shapecolor = params.shapecolor }
if params.params and type(params.params) == 'table' then -- paramètres additionnels
for i, j in pairs(params.params) do
newparams[i] = j
end
end
return require('Module:Carte').multimap(newparams)
end
p.buildMap = p.buildmap
function p.buildexternaltext(params)
local value = getValue(params.value)
if value and (type(value) == 'string') then
externaltext = externaltext .. value
end
end
p.buildExternalText = p.buildexternaltext
function p.buildfooter(params)
if not params then
params = {}
end
local classes = 'navbar noprint bordered navigation-not-searchable ' .. (params.class or '')
local style = params.style or {}
style['border-top'] = style['border-top'] or '1px solid ' .. maincolor
local backlinkstr = '[' .. tostring( mw.uri.fullUrl( page.prefixedText, 'veaction=edit§ion=0' ) ) .. ' ' .. i18n['edit'] .. ']'
.. ' - [' .. tostring( mw.uri.fullUrl( page.prefixedText, 'action=edit§ion=0' ) ) .. ' ' .. i18n['edit code'] .. ']'
local itemlinkstr
if localdata.item and localdata.item ~= '-' then
itemlinkstr = '[[d:' .. localdata.item .. '|' .. i18n['edit item'] .. ']]'
end
local editstr = backlinkstr
if itemlinkstr then
editstr = editstr .. ' - ' .. itemlinkstr
end
local editlinkspan = mw.html.create('span')
:css({['text-align'] = "left"})
:addClass('plainlinks')
:wikitext(editstr)
:done()
local doclinkstr = '[[Fichye:Info Simple.svg|12px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]'
-- si ce lien ne marche pas toujours, il faut ajouter un variable pour le nom de l'infobox récupéré par le frame
local doclinkspan = mw.html.create('span')
:css({['text-align'] = "right"})
:wikitext(doclinkstr)
:done()
local footer = mw.html.create('p')
:addClass(classes)
:css(style)
:node(editlinkspan)
:node(doclinkspan)
return footer
end
p.buildFooter = p.buildfooter
function p.buildblock(block)
if type(block) == 'function' then
block = block( localdata )
end
local blocktypes = { -- list of functions for block buildings
['invalid'] = p.buildinvalidblock,
['external text'] = p.buildexternaltext,
['footer'] = p.buildfooter,
['images'] = p.buildimages,
['map']= p.buildmap,
['mixed'] = p.buildrow,
['navigator'] = p.buildnavigator,
['table'] = p.buildtable,
['row'] = p.buildrow,
['row1col'] = p.buildrow1col,
['succession'] = p.buildsuccession,
['text'] = p.buildtext,
['title'] = p.buildtitle,
}
if type(block) ~= 'table' or (not block.type) or (not blocktypes[block.type]) then
return blocktypes['invalid'](block)
end
return blocktypes[block.type](block)
end
p.buildBlock = p.buildblock
function p.build()
localdata = require( 'Module:Infobox/Localdata' )
if type( localdata.item ) == 'table' then
localdata.item = localdata.item.id
end
-- assign rank to the infobox, "secondary" means special formatting like no displaytitle for coordinates
local infoboxrank = 'main' -- main infobox of the page, with coordinates displayed in title etc.
if page.namespace ~= 0 then
infoboxrank = 'secondary'
end
-- if infobox is linked to another item: rank = secondary
if localdata.item then
local itemlink = mw.wikibase.sitelink(localdata.item)
local pagetitle = page.prefixedText
if (itemlink or '') ~= pagetitle then
infoboxrank = 'secondary'
end
end
localdata.infoboxrank = infoboxrank
-- load infobox module page
local moduledata = require('Module:Infobox/' .. localdata.modulename)
moduledata.name = localdata.modulename
-- maintenance categories given by the module page
if moduledata.categories then
for i, j in pairs(moduledata.categories) do
if (type(j) == 'string') then addMaintenanceCat(j) end
if (type(j) == 'table') then addMaintenanceCat(j[1],j[2]) end
end
end
-- defines main color
maincolor = localdata['couleur infobox'] or localdata['couleur boîte'] or localdata['couleur boite'] or moduledata.maincolor or maincolor
secondcolor = moduledata.secondcolor or secondcolor
thirdcolor = localdata['texte noir'] or localdata['couleur texte'] or moduledata.thirdcolor or thirdcolor
if ( #maincolor == 6 or #maincolor == 3 ) and maincolor:match( '^%x+$' ) then
maincolor = '#' .. maincolor
end
if thirdcolor == 'oui' or thirdcolor == 'true' then
thirdcolor = '#000'
elseif thirdcolor == 'non' or thirdcolor == 'false' then
thirdcolor = '#fff'
end
-- classes
local classes = mw.getCurrentFrame():expandTemplate{ title = 'Classes début infobox', args = { version = '3' } }
classes = classes .. ' large ' .. (moduledata.class or '')
-- style
local style = moduledata.style or {}
-- build infobox
infobox :addClass(classes)
:css(style)
for i, j in pairs( moduledata.parts ) do
infobox:node( p.buildblock(j) )
end
infobox :node(p.buildfooter(moduledata.footer))
:done()
return tostring(infobox) .. externaltext, maintenance
end
return p
br526059bfs7lt3vkf9a6dxce9gki3t
855647
855586
2024-11-13T00:26:25Z
BwaKajou
31668
855647
Scribunto
text/plain
local p = {}
local wikiLang = 'ht'
local localdata = {}-- données concernant les paramètres passés au modèle
-- données concernant la page où est affichée l'infobox
local page = mw.title.getCurrentTitle()
local maincolor, secondcolor, thirdcolor = 'var(--background-color-interactive-subtle, #f8f9fa)', 'var(--background-color-interactive-subtle, #f8f9fa)', 'var(--color-emphasized, #000000)'
-- l'objet principal à retourner
local infobox = mw.html.create('div')
-- objets secondaires à retourner
local maintenance = '' -- chaîne retournée avec le module : cats de maintenance
local externaltext = '' -- par exemple coordonnées en titre
-- modules importés
local wd = require 'Module:Wikidata'
local yesno = require 'Module:Yesno'
local valueexpl = wd.translate("activate-query")
-- maintenance des images dupliquées
local usedImages = {}
local i18n = {
['see doc'] = 'Documentation du modèle',
['edit'] = 'modifye',
['edit code'] = 'modifye kòd la',
['edit item'] = 'modifye Wikidata',
['tracking cat'] = "Paj ki itilize done Wikidata",
['invalid block type'] = "Bloc de données invalide dans le module d'infobox",
['default cat'] = "Antretyen infobox",
}
local function expandQuery(query)
if not query.entity then
query.entity = localdata.item
end
if not query.conjtype then
query.conjtype = 'comma'
end
local claims = wd.getClaims(query)
if (not claims) then
return nil
end
return wd.formatAndCat(query), wd.getgendernum(claims) -- valeur et code indiquant le genre/nombre pour accorder le libellé
end
local function getWikidataValue(params, wikidataparam)
-- Récupère la valeur Wikidata pour la valeur, soit dans le paramètre "wikidata" soit dans le paramètre "property"
if not localdata.item then
return nil
end
if params.blockers then -- blockers are local parameters that disable the wikidata query
local blockers = params.blockers
if (type(blockers) == 'string') then
blockers = {blockers}
end
for i, blocker in ipairs(blockers) do
if localdata[blocker] then
return nil
end
end
end
local v, valgendernum -- la valeur à retourner, et le genre/nombre de de valeurs (pour l'accord grammatical)
if not wikidataparam then -- par défaut la valeur wikidata est dans le paramètre "wikidata" mais dans les structures composées comme "title", il y a plusieurs paramètres wikidata
wikidataparam = 'wikidata'
end
if params.property and not params[wikidataparam] then params[wikidataparam] = {property = params.property} end
if params[wikidataparam] then
if type(params[wikidataparam]) == 'function' then
v, valgendernum = params[wikidataparam](localdata.item)
elseif type(params[wikidataparam]) == 'table' then
v, valgendernum = expandQuery(params[wikidataparam])
else
v, valgendernum = params[wikidataparam]
end
end
if not v then
return nil
end
if(type(valgendernum) == 'number') then
if(valgendernum > 1) then
valgendernum = 'p'
else
valgendernum = 's'
end
end
return v, valgendernum
end
local function getValue(val, params)
if type(val) == 'string' then
return localdata[val]
elseif type(val) == 'function' then
return val(localdata, localdata.item, params)
elseif type(val) == 'table' then
for i, j in pairs(val) do -- si plusieurs paramètres possibles (legacy de vieux code), prendre le premier non vide
if localdata[j] then
return localdata[j]
end
end
end
end
local function addMaintenanceCat(cat, sortkey)
if page.namespace ~= 0 then
return ''
end
if cat then
local sortkeycode
if sortkey then sortkeycode = '|' .. sortkey else sortkeycode = '' end
maintenance = maintenance .. '[[Category:'.. cat .. sortkeycode .. ']]'
end
end
function p.separator(params)
local style = params['separator style'] or {}
style.height = style.height or '2px'
style['background-color'] = style['background-color'] or maincolor
return mw.html.create('hr'):css( style )
end
--[=[
Construit le code du bloc de titre de l'infobox
Paramètres (liste partielle) :
- value : Moyen d'obtenir le titre via getValue (nom de paramètre de modèle ou fonction).
- textdefaultvalue : Valeur par défaut du titre.
- icon : Pictogramme d'infobox (voir [[Projet:Infobox/Pictogramme]]).
- italic : Indique si le titre doit être affiché en italique.
Si italic=true, le paramètre "titre en italique" de l'infobox peut forcer la désactivation.
- setdisplaytitle : Indique si le titre de l'article doit être mis en forme comme celui de l'infobox.
Si setdisplaytitle=true, le paramètre "titre article en italique" de l'infobox peut forcer la désactivation.
]=]
function p.buildtitle(params)
local text = getValue(params.value, params) or params.textdefaultvalue or getWikidataValue(params) or page.prefixedText
local lang = localdata['langue du titre'] or ''
if lang ~= '' then
local langueFunction = require( 'Module:Langue' ).langue
text = langueFunction( { lang, text } )
end
local subtext = getValue(params.subtitle) or getWikidataValue(params, 'wikidatasubtitle') or params.subtitledefaultvalue
if subtext and (subtext ~= text) then
text = text .. '<br /><small>' .. subtext .. '</small>'
end
local icon = params.icon or ''
if icon ~= '' and icon ~= 'defaut' then
text = text .. mw.getCurrentFrame():extensionTag('templatestyles', '', {src = 'Infobox/Pictogramme/' .. mw.text.trim(icon) .. '.css'})
if not params.large then
icon = 'icon ' .. icon
end
end
local classes = 'entete ' .. icon
local italic = params.italic and yesno(localdata['titre en italique'] or '', true, true)
if italic then
classes = classes .. ' italique'
end
if params.setdisplaytitle and yesno(localdata['titre article en italique'] or '', true, true) then
local formatTitleModule = require( 'Module:Formatage du titre' )
text = text .. formatTitleModule.setDisplayTitle{ args = {
lang = lang,
italic = italic,
options = 'noreplace',
} }
end
-- overwrites with those provided in the module
local style = {}
style['background-color'] = maincolor
style['color'] = thirdcolor
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local title = mw.html.create('div')
:addClass(classes)
:css(style)
:tag('div')
:wikitext(text)
:allDone()
return title
end
p.buildTitle = p.buildtitle
function p.buildnavigator(params)
-- définition du style
local classes = "overflow infobox-navigateur " .. (params.class or '')
local style = params.style or {}
if params.separated then -- options pour ajouter une ligne de séparation au dessus
classes = classes .. ' bordered'
style['border-top'] = '1px solid' .. maincolor
end
-- ajustement des paramètres de données
params.previousval = params.previousval or params.previousparameter -- nom de paramètre obsolète
params.nextval = params.nextval or params.nextparameter
if params.previousproperty then
params.previouswikidata = {property = params.previousproperty}
end
if params.nextproperty then
params.nextwikidata = {property = params.nextproperty}
end
local previousval = getValue(params.previousval, params) or getWikidataValue(params, 'previouswikidata')
local nextval = getValue(params.nextval, params) or getWikidataValue(params, 'nextwikidata')
if previousval == '-' then previousval = nil end
if nextval == '-' then nextval = nil end
local navigator
if params.inner then -- pour celles qui sont à l'intérieur d'une table
navigator = mw.html.create('tr'):tag('th'):attr('colspan', 2)
style['font-weight'] = style['font-weight'] or 'normal'
else
navigator = mw.html.create('div')
end
if previousval or nextval then
navigator
:addClass(classes)
:css(style)
:tag('div')
:addClass('prev_bloc')
:wikitext(previousval)
:done()
:tag('div')
:addClass('next_bloc')
:wikitext(nextval)
:done()
:allDone()
return navigator
end
return nil
end
p.buildNavigator = p.buildnavigator
function p.buildimages(params)
local images = {}
local upright, link, caption, classe, alt, size -- size is deprecated
if type(params.imageparameters) == 'string' then
params.imageparameters = {params.imageparameters}
end
if not params.imageparameters then -- s'il n'y a pas de paramètre image, continuer, peut-être y a-t-il une image par défaut définie dans le module d'infobox
params.imageparameters = {}
end
for j, k in ipairs(params.imageparameters) do
table.insert(images, localdata[k])
end
-- Images de Wikidata
local iswikidataimage, iswikidatacaption = false
if #images == 0 and localdata.item then
if params.property then
params.wikidata = {entity = localdata.item, property = params.property}
end
if params.wikidata then
local wdq = params.wikidata
wdq.excludespecial = true
if type(wdq) == 'table' then
wdq.entity = wdq.entity or localdata.item
wdq.numval = wdq.numval or params.numval or 1
images = wd.getClaims(wdq)
end
if type(wdq) == 'function' then
images = params.wikidata()
if type(images) == 'string' then
return images
end --c'est probablement une erreur dans la requête => afficher le message
end
if (not images) then
images = {}
end
if (#images > 0) and (params.wikidata.property) then
maintenance = maintenance .. wd.addTrackingCat(params.wikidata.property)
end
if type(images[1]) == 'table' then
for i, image in pairs(images) do
if image.mainsnak.snaktype ~= 'value' then
return
end
if #images == 1 then -- si une seule image, on utilise la légende (si deux plusieurs images, comment mettre en forme ?)
caption = wd.getFormattedQualifiers(images[i], {'P2096'}, {isinlang = wikiLang}) or wd.getFormattedQualifiers(images[i], {'P805'})
iswikidatacaption = caption ~= nil
end
images[i] = image.mainsnak.datavalue.value
iswikidataimage = true
end
end
end
end
if #images == 0 and getValue(params.captionparameter) ~= nil then
addMaintenanceCat("Infobox avèk yon lejand lokal san imaj")
end
-- Images par défaut
if #images == 0 then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
if params.defaultimages then
images = params.defaultimages
if type(images) == 'string' then
images = {images}
end
upright = params.defaultimageupright
caption = params.defaultimagecaption
link = params.defaultimagelink
classe = params.defaultimageclass
if not classe and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then
classe = 'skin-invert notheme'
end
alt = params.defaultimagealt
if not alt and ( images[1] == 'Defaut.svg' or images[1] == 'Defaut 2.svg' ) then
alt = 'yon ilistarsyon sou lisans lib ap byenvini'
end
end
end
if #images == 0 then
return nil
end
upright = upright or getValue(params.uprightparameter) or params.defaultupright or "1.2"
link = link or getValue(params.linkparameter) or params.defaultlink
caption = caption or getValue(params.captionparameter) or params.defaultcaption
classe = classe or getValue( params.classparameter) or params.defaultclass
alt = alt or getValue( params.altparameter) or params.defaultalt
if iswikidataimage and not iswikidatacaption and getValue(params.captionparameter) ~= nil then
addMaintenanceCat("Infobox avèk lejand lokal ak yon imaj sou Wikidata")
end
-- taille avec "size" (obsolète)
size = size or getValue(params.sizeparameter) or params.defaultsize -- deprecated
if size then
local sizevalue = size:gsub('px$', '')
local widthonly = mw.ustring.gsub(sizevalue, 'x.*', '')
widthonly = tonumber(widthonly)
if type(widthonly) ~= 'number' or widthonly > 280 then
addMaintenanceCat("Infobox avèk yon imaj ki twò gwo")
end
if tonumber(sizevalue) then
size = tostring( tonumber(sizevalue) ) .. 'px'
end
end
if tonumber(upright) then
upright = tostring( tonumber(upright) )
end
local style = params.style or {padding ='2px 0',}
-- Partie image
local imagesString = ''
for i,image in pairs(images) do
if image == '-' then
return
end
imagesString = imagesString .. '[[Fichye:' .. image .. '|frameless'
if size then
imagesString = imagesString .. '|' .. size -- not a mistake, parameter is unnamed
end
if classe then
imagesString = imagesString .. '|class=' .. classe
end
if alt then
imagesString = imagesString .. '|alt=' .. alt
end
if link then
imagesString = imagesString .. '|link=' .. link
end
if upright then
imagesString = imagesString .. '|upright=' .. upright
elseif #images > 1 and not size then
imagesString = imagesString .. '|upright=' .. ( 1 / #images )
end
if image:sub(-4):lower() == '.svg' then
imagesString = imagesString .. '|lang=' .. wikiLang
end
imagesString = imagesString .. ']]'
if usedImages[image] then
addMaintenanceCat('Infobox avèk plizyè imaj idantik')
end
usedImages[image] = true
end
local image = mw.html.create('div')
:addClass("images")
:css(style)
:wikitext(imagesString)
-- Partie légende
local captionobj
if caption then
captionobj = mw.html.create('div')
:wikitext(caption)
:css(params.legendstyle or {})
:addClass("legend")
:done()
end
-- séparateur
local separator
if params.separator then
separator = p.separator(params)
end
return mw.html.create('div')
:node(image)
:node(captionobj)
:node(separator)
:done()
end
p.buildImages = p.buildimages
function p.buildtext(params)
local classes = params.class or ''
local style = {
['text-align'] = 'center',
['font-weight'] = 'bold'
}
if params.style then
for i, j in pairs(params.style) do
style[i] = j
end
end
local text = getValue(params.value, params) or getWikidataValue(params) or params.defaultvalue
if text == '-' then
return
end
if not text then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
return nil
end
-- séparateur
local separator
if params.separator then
separator = p.separator(params)
end
local formattedtext = mw.html.create('p')
:addClass(classes)
:css(style)
:wikitext(text)
:node(separator)
:done()
return formattedtext
end
p.buildText = p.buildtext
function p.buildrow(params)
local classes = params.class or ''
local style = params.style or {}
local valueClass = params.valueClass or ''
local valueStyle = params.valueStyle or {}
local value, gendernum = getValue(params.value, params)
if(type(gendernum) == 'number') then
if(gendernum > 1) then
gendernum = 'p'
else
gendernum = 's'
end
end
if type(params.wikidata) == 'table' then
params.wikidata.wikidatalang = localdata.wikidatalang
if (value == valueexpl) then
value = nil
params.wikidata.expl = false
end
end
if (not value) then
value, gendernum = getWikidataValue(params, 'wikidata')
end
if not value then
value = params.defaultvalue
end
if value == '-' then
return nil
end
if not gendernum then
gendernum = 's' --singulier indéfini
end
if not value then
if params.maintenancecat then
addMaintenanceCat(params.maintenancecat, params.sortkey)
end
return nil
end
local label = params.label
if type(label) == 'string' then label = {default = label} end
if type(label) == 'table' then -- Accord en genre et en nombre
local onlynum = {default = 'default', s = 's', ms = 's', fs = 's', p = 'p', mp = 'p', fp = 'p', mixtep = 'p'} -- Accord seulement en nombre par défaut
label['s'] = label['s'] or params.singularlabel or label['default'] or label['ms']
label['p'] = label['p'] or params.plurallabel or label['mp']
label = label[gendernum] or label[onlynum[gendernum]] or label.default
end
if type(label) == 'function' then
label = label(localdata, localdata.item)
end
-- format
local formattedvalue = mw.html.create('div')
:wikitext('\n' .. value) -- Le '\n' est requis lorsque value est une liste commençant par '*' ou '#'
if (params.hidden == true)then
formattedvalue
:attr({class="NavContent", style="display: none; text-align: left;"})
formattedvalue = mw.html.create('div')
:attr({class="NavFrame", title="[Afiche]/[Maske]", style="border: none; padding: 0;"})
:node(formattedvalue)
end
formattedvalue = mw.html.create('td')
:node(formattedvalue)
:addClass(valueClass)
:css(valueStyle)
:allDone()
local formattedlabel
if label then
formattedlabel = mw.html.create('th')
:attr('scope', 'row')
:wikitext(label)
:done()
end
local row = mw.html.create('tr')
:addClass(classes)
:css(style)
:node(formattedlabel)
:node(formattedvalue)
:done()
return row
end
p.buildRow = p.buildrow
function p.buildsuccession(params)
if not params.value then
return nil
end
--local style = params.style or {}
--style['text-align'] = style['text-align'] or 'center'
--style['color'] = style['color'] or '#000000'
--style['background-color'] = style['background-color'] or '#F9F9F9'
local rowI = mw.html.create('tr')
local styleI = {}
local colspan = '2'
styleI['padding'] = '1px'
local cellI = mw.html.create('td')
:attr({colspan = colspan})
:attr({align = 'center'})
:css(styleI)
local styleT = {
margin = '0px',
['background-color'] = 'transparent',
color = 'inherit',
width = '100%'
}
local tabC = mw.html.create('table')
:attr({cellspacing = '0'})
:addClass('navigation-not-searchable')
:css(styleT)
local row = mw.html.create('tr')
local color = params.color
local style = {}
local arrowLeft = '[[Fichye:Arrleft.svg|13px|alt=Anvan|link=]]'
local arrowRight = '[[Fichye:Arrright.svg|13px|alt=Aprè|link=]]'
if color ~= 'default' then
style['background-color'] = color
end
local styleTrans = {}
local values = params.value
local before = values['before']
local center = values['center']
local after = values['after']
local widthCenter
local widthCell = '44%'
if center then
widthCenter = '28%'
widthCell = '29%'
end
local formattedbefore
if before then
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'left'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowLeft)
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(before)
:done()
row:node(formattedbefore)
else
formattedbefore = mw.html.create('td')
:attr({valign = 'middle'})
:attr({align = 'left'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedbefore = mw.html.create('td')
:attr({align = 'left'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
end
local formattedcenter
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
if center then
formattedcenter = mw.html.create('td')
:attr({align = 'center'})
:attr({valign = 'middle'})
:attr({width = widthCenter})
:css(style)
:wikitext(center)
:done()
row:node(formattedcenter)
formattedcenter = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedcenter)
end
local formattedafter
if after then
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(style)
:wikitext(after)
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(style)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(style)
:wikitext(arrowRight)
:done()
row:node(formattedafter)
else
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = widthCell})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
formattedbefore = mw.html.create('td')
:attr({width = '1%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedbefore)
formattedafter = mw.html.create('td')
:attr({align = 'right'})
:attr({valign = 'middle'})
:attr({width = '5%'})
:css(styleTrans)
:wikitext('')
:done()
row:node(formattedafter)
end
row:done()
tabC:node(row)
tabC:done()
cellI:node(tabC)
cellI:done()
rowI:node(cellI)
rowI:allDone()
return rowI
end
p.buildSuccession = p.buildsuccession
function p.buildrow1col(params)
if not params.value then
return nil
end
--local style = params.style or {}
--style['text-align'] = style['text-align'] or 'center'
--style['color'] = style['color'] or '#000000'
--style['background-color'] = style['background-color'] or '#F9F9F9'
local classes = params.class
local rowcolor
if params.color == 'secondcolor' then
rowcolor = secondcolor
else
rowcolor = params.color
end
local style = {}
style['padding'] = '4px'
style['text-align'] = 'center'
style['background-color'] = rowcolor or 'var(--couleur-fond-boite-grise, #f9f9f9)'
style['color'] = 'var(--color-emphasized, #000000)'
local text = params.value
local colspan ='2'
local formattedlabel
formattedlabel = mw.html.create('th')
:attr({colspan = colspan})
:css(style)
:wikitext(text)
:done()
local row = mw.html.create('tr')
:addClass(classes)
:css(style)
:node(formattedlabel)
:done()
return row
end
p.buildRow1Col = p.buildrow1col
function p.buildtable(params)
local tab = mw.html.create('table'):css(params.style or {})
local rows = params.rows
-- expand parameters so that we have a list of tables
local i = 1
while (i <= #rows) do
local l = rows[i]
if type(l) == 'function' then
l = l(localdata, localdata.item)
end
if (type(l) == 'table') and (l.type == 'multi') then
table.remove(rows, i)
for j, row in ipairs(l.rows) do
table.insert(rows, i + j - 1, row)
end
elseif type(l) == 'nil' then
table.remove(rows, i)
elseif type(l) ~= 'table' then
return error('les lignes d\'infobox ("rows") doivent être des tables, est ' .. type(l))
else
i = i + 1
end
end
-- CREATE ROW
local expandedrows = {}
for k, row in ipairs(rows) do
local v = p.buildblock(row)
if v then
table.insert(expandedrows, v)
end
end
if (#expandedrows == 0) then
return nil
end
rows = expandedrows
-- ADD TITLE
local title
if params.title or params.singulartitle or params.pluraltitle then
local text
if #rows > 1 and params.pluraltitle then
text = params.pluraltitle
elseif #rows == 1 and params.singulartitle then
text = params.singulartitle
else
text = params.title
end
local style = params.titlestyle or {}
style['text-align'] = style['text-align'] or 'center'
style['color'] = style['color'] or thirdcolor
style['background-color'] = style['background-color'] or maincolor
local colspan ='2'
title = mw.html.create('caption')
:attr({colspan = colspan})
:css(style)
:wikitext(text)
:done()
end
if title then
tab:node(title)
end
for i, j in pairs (rows) do
tab:node(j)
end
if params.separator then
local separator = p.separator(params)
tab:node(separator)
end
tab:allDone()
return tab
end
p.buildTable = p.buildtable
function p.buildinvalidblock(args)
addMaintenanceCat(i18n['default cat'])
local text = ''
if type(args) ~= 'table' then
text = "Les blocs d'infobox doivent être des tables"
else
text = i18n["invalid block type"] .. ' : ' .. (args.type or '??')
end
return text
end
p.buildInvalidBlock = p.buildinvalidblock
function p.buildmap(params)
-- paramètre d'affichage
local maplist = getValue(params.maps)
local pointtype = params.pointtype
local maptype = params.maptype -- choisit le type de carte le plus approprié (relief, administratif, etc.)
if type(maplist) == 'function' then
maplist = maplist(localdata, localdata.item)
end
local width = tonumber(params.width) or 280
if width > 280 then
addMaintenanceCat("Infobox avec une image trop grande")
return 'image trop grande, la largeur doit être inférieure ou égale à 280px'
end
-- récupération des données locales
local pointtable = {}
local globe = params.globe
if params.latitude then
local lat, long
if type(params.latitude) == 'function' then
lat, long = params.latitude(localdata, localdata.item), params.longitude(localdata, localdata.item)
else
lat, long = localdata[params.latitude], localdata[params.longitude]
end
if lat then
table.insert(pointtable, {latitude = lat, longitude = long})
end
end
-- récupération des données wikidata
local function processWDval(claim, displayformat)
if not claim then
return nil
end
local val = wd.formatSnak( claim.mainsnak )
return {latitude = val.latitude, longitude = val.longitude, globe = val.globe, marker = displayformat.marker}
end
local function getWDvals(query)
query.excludespecial = true
query.numval = query.numval or 1
query.entity = query.entity or localdata.item
local claims = wd.getClaims(query)
if (not claims) then
return
end
for i, claim in ipairs(claims) do
claim = processWDval(claim, query)
table.insert(pointtable, claim)
end
end
if (#pointtable == 0) and localdata.item and params.wikidata and (params.wikidata ~= '-') then
for i, query in ipairs(params.wikidata) do
if type(query) == 'function' then
query = query()
end
if query then
getWDvals(query)
end
end
end
if (not pointtable) or (#pointtable == 0) then
return nil
end
local newparams = {maplist = maplist, pointtype = pointtype, maptype = maptype, width = width, item = localdata.item, pointtable = pointtable, globe = globe, marker=params.marker, default_zoom=params.default_zoom, ids = params.ids, markercolor = params.markercolor, shapecolor = params.shapecolor }
if params.params and type(params.params) == 'table' then -- paramètres additionnels
for i, j in pairs(params.params) do
newparams[i] = j
end
end
return require('Module:Carte').multimap(newparams)
end
p.buildMap = p.buildmap
function p.buildexternaltext(params)
local value = getValue(params.value)
if value and (type(value) == 'string') then
externaltext = externaltext .. value
end
end
p.buildExternalText = p.buildexternaltext
function p.buildfooter(params)
if not params then
params = {}
end
local classes = 'navbar noprint bordered navigation-not-searchable ' .. (params.class or '')
local style = params.style or {}
style['border-top'] = style['border-top'] or '1px solid ' .. maincolor
local backlinkstr = '[' .. tostring( mw.uri.fullUrl( page.prefixedText, 'veaction=edit§ion=0' ) ) .. ' ' .. i18n['edit'] .. ']'
.. ' - [' .. tostring( mw.uri.fullUrl( page.prefixedText, 'action=edit§ion=0' ) ) .. ' ' .. i18n['edit code'] .. ']'
local itemlinkstr
if localdata.item and localdata.item ~= '-' then
itemlinkstr = '[[d:' .. localdata.item .. '|' .. i18n['edit item'] .. ']]'
end
local editstr = backlinkstr
if itemlinkstr then
editstr = editstr .. ' - ' .. itemlinkstr
end
local editlinkspan = mw.html.create('span')
:css({['text-align'] = "left"})
:addClass('plainlinks')
:wikitext(editstr)
:done()
local doclinkstr = '[[Fichye:Info Simple.svg|12px|link=' .. localdata.templatename .. '|' .. i18n['see doc'] .. ']]'
-- si ce lien ne marche pas toujours, il faut ajouter un variable pour le nom de l'infobox récupéré par le frame
local doclinkspan = mw.html.create('span')
:css({['text-align'] = "right"})
:wikitext(doclinkstr)
:done()
local footer = mw.html.create('p')
:addClass(classes)
:css(style)
:node(editlinkspan)
:node(doclinkspan)
return footer
end
p.buildFooter = p.buildfooter
function p.buildblock(block)
if type(block) == 'function' then
block = block( localdata )
end
local blocktypes = { -- list of functions for block buildings
['invalid'] = p.buildinvalidblock,
['external text'] = p.buildexternaltext,
['footer'] = p.buildfooter,
['images'] = p.buildimages,
['map']= p.buildmap,
['mixed'] = p.buildrow,
['navigator'] = p.buildnavigator,
['table'] = p.buildtable,
['row'] = p.buildrow,
['row1col'] = p.buildrow1col,
['succession'] = p.buildsuccession,
['text'] = p.buildtext,
['title'] = p.buildtitle,
}
if type(block) ~= 'table' or (not block.type) or (not blocktypes[block.type]) then
return blocktypes['invalid'](block)
end
return blocktypes[block.type](block)
end
p.buildBlock = p.buildblock
function p.build()
localdata = require( 'Module:Infobox/Localdata' )
if type( localdata.item ) == 'table' then
localdata.item = localdata.item.id
end
-- assign rank to the infobox, "secondary" means special formatting like no displaytitle for coordinates
local infoboxrank = 'main' -- main infobox of the page, with coordinates displayed in title etc.
if page.namespace ~= 0 then
infoboxrank = 'secondary'
end
-- if infobox is linked to another item: rank = secondary
if localdata.item then
local itemlink = mw.wikibase.sitelink(localdata.item)
local pagetitle = page.prefixedText
if (itemlink or '') ~= pagetitle then
infoboxrank = 'secondary'
end
end
localdata.infoboxrank = infoboxrank
-- load infobox module page
local moduledata = require('Module:Infobox/' .. localdata.modulename)
moduledata.name = localdata.modulename
-- maintenance categories given by the module page
if moduledata.categories then
for i, j in pairs(moduledata.categories) do
if (type(j) == 'string') then addMaintenanceCat(j) end
if (type(j) == 'table') then addMaintenanceCat(j[1],j[2]) end
end
end
-- defines main color
maincolor = localdata['couleur infobox'] or localdata['couleur boîte'] or localdata['couleur boite'] or moduledata.maincolor or maincolor
secondcolor = moduledata.secondcolor or secondcolor
thirdcolor = localdata['texte noir'] or localdata['couleur texte'] or moduledata.thirdcolor or thirdcolor
if ( #maincolor == 6 or #maincolor == 3 ) and maincolor:match( '^%x+$' ) then
maincolor = '#' .. maincolor
end
if thirdcolor == 'oui' or thirdcolor == 'true' then
thirdcolor = '#000'
elseif thirdcolor == 'non' or thirdcolor == 'false' then
thirdcolor = '#fff'
end
-- classes
local classes = mw.getCurrentFrame():expandTemplate{ title = 'Classes début infobox', args = { version = '3' } }
classes = classes .. ' large ' .. (moduledata.class or '')
-- style
local style = moduledata.style or {}
-- build infobox
infobox :addClass(classes)
:css(style)
for i, j in pairs( moduledata.parts ) do
infobox:node( p.buildblock(j) )
end
infobox :node(p.buildfooter(moduledata.footer))
:done()
return tostring(infobox) .. externaltext, maintenance
end
return p
5ttbq23gq4qnkyyaf2b4zxwqoaex5xj
Module:Wikidata
828
64455
855593
854323
2024-11-12T16:16:10Z
BwaKajou
31668
855593
Scribunto
text/plain
--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
local wd = {}
-- creation of a subobject to store comparison funtions, used for sorting claims
-- to be able to build more complex sorts like topological sorts
wd.compare = {}
local databases = { }
local modules = { }
local databasesNames = { -- modules de données statiques pouvant être appelés avec mw.loadData(), ne nécessitant pas require()
i18n = 'Module:Wikidata/I18n',
globes = 'Module:Wikidata/Globes',
langhierarchy = 'Module:Wikidata/Hiérarchie des langues',
langcodes = 'Module:Dictionnaire Wikidata/Codes langue', -- big, infrequently useda
invertedlangcodes = 'Module:Dictionnaire Wikidata/Codes langue/inversé'
}
local modulesNames = {
reference = 'Module:Wikidata/Références',
linguistic = 'Module:Linguistique',
datemodule = 'Module:Date',
formatDate = 'Module:Date complexe',
formatNum = 'Module:Conversion',
langmodule = 'Module:Langue',
cite = 'Module:Biblio',
weblink = 'Module:Weblink'
}
local function loadDatabase( t, key )
if databasesNames[key] then
local m = mw.loadData( databasesNames[key] )
t[key] = m
return m
end
end
local function loadModule( t, key )
if modulesNames[key] then
local m = require( modulesNames[key] )
t[key] = m
return m
end
end
setmetatable( databases, { __index = loadDatabase } )
setmetatable( modules, { __index = loadModule } ) -- ainsi le require() sera opéré seulement si nécessaire par modules.(nom du module)
local datequalifiers = {'P585', 'P571', 'P580', 'P582', 'P1319', 'P1326'}
-- === I18n ===
local defaultlang = mw.getContentLanguage():getCode()
function wd.translate(str, rep1, rep2)
str = databases.i18n[str] or str
if rep1 and (type (rep1) == 'string') then
str = str:gsub('$1', rep1)
end
if rep2 and (type (rep2) == 'string')then
str = str:gsub('$2', rep2)
end
return str
end
local function addCat(cat, sortkey)
if sortkey then
return '[[Category:' .. cat .. '|' .. sortkey .. ']]'
end
return '[[Category:' .. cat .. ']]'
end
local function formatError( key , category, debug)
if debug then
return error(databases.i18n[key] or key)
end
if category then
return addCat(category, key)
else
return addCat('cat-unsorted-issue', key)
end
end
--
function wd.isSpecial(snak)
return (snak.snaktype ~= 'value')
end
function wd.getId(snak)
if (snak.snaktype == 'value') then
return 'Q' .. snak.datavalue.value['numeric-id']
end
end
function wd.getNumericId(snak)
if (snak.snaktype == 'value') then
return snak.datavalue.value['numeric-id']
end
end
function wd.getMainId(claim)
return wd.getId(claim.mainsnak)
end
function wd.entityId(entity)
if type(entity) == 'string' then
return entity
elseif type(entity) == 'table' then
return entity.id
end
end
function wd.getEntityIdForCurrentPage()
return mw.wikibase.getEntityIdForCurrentPage()
end
-- function that returns true if the "qid" parameter is the qid
-- of the item that is linked to the calling page
function wd.isPageOfQId(qid)
local self_id = mw.wikibase.getEntityIdForCurrentPage()
return self_id ~= nil and qid == self_id
end
function wd.getEntity( val )
if type(val) == 'table' then
return val
end
if val == '-' then
return nil
end
if val == '' then
val = nil
end
return mw.wikibase.getEntity(val)
end
function wd.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparation
if type(val) == 'string' then
val = mw.text.split(val, ",")
end
return val
end
function wd.isHere(searchset, val, matchfunction)
for i, j in pairs(searchset) do
if matchfunction then
if matchfunction(val,j) then
return true
end
else
if val == j then
return true
end
end
end
return false
end
local function wikidataLink(entity)
local name =':d:'
if type(entity) == 'string' then
if entity:match("P[0-9+]") then
entity = "Property:" .. entity
end
return name .. entity
elseif type(entity) == 'table' then
if entity["tip"] == "property" then
name = ":d:Property:"
end
return name .. entity.id
elseif type(entity) == nil then
return formatError('entity-not-found')
end
end
function wd.siteLink(entity, project, lang)
-- returns 3 values: a sitelink (with the relevant prefix) a project name and a language
lang = lang or defaultlang
if (type(project) ~= 'string') then
project = 'wiki'
end
project = project:lower()
if project == 'wikipedia' then
project = 'wiki'
end
if type(entity) == 'string' and (project == 'wiki') and ( (not lang or lang == defaultlang) ) then -- évite de charger l'élément entier
local link = mw.wikibase.getSitelink(entity)
if link then
local test_redirect = mw.title.new(link) -- remplacement des redirections (retirer si trop coûteux)
if test_redirect.isRedirect and test_redirect.redirectTarget then
link = test_redirect.redirectTarget.fullText
end
end
return link, 'wiki', defaultlang
end
if project == 'wikidata' then
return wikidataLink(entity), 'wikidata'
end
local projects = {
-- nom = {préfixe sur Wikidata, préfix pour les liens sur Wikipédia, ajouter préfixe de langue}
wiki = {'wiki', nil, true}, -- wikipedia
commons = {'commonswiki', 'commons', false},
commonswiki = {'commonswiki', 'commons', false},
wikiquote = {'wikiquote', 'q', true},
wikivoyage = {'wikivoyage', 'voy', true},
wikibooks = {'wikibooks', 'b', true},
wikinews = {'wikinews', 'n', true},
wikiversity = {'wikiversity', 'v', true},
wikisource = {'wikisource', 's', true},
wiktionary = {'wiktionary', 'wikt', true},
specieswiki = {'specieswiki', 'species', false},
metawiki = {'metawiki', 'm', false},
incubator = {'incubator', 'incubator', false},
outreach = {'outreach', 'outreach', false},
mediawiki = {'mediawiki', 'mw', false}
}
local entityid = entity.id or entity
local projectdata = projects[project:lower()]
if not projectdata then -- defaultlink might be in the form "dewiki" rather than "project: 'wiki', lang: 'de' "
for k, v in pairs(projects) do
if project:match( k .. '$' )
and mw.language.isKnownLanguageTag(project:sub(1, #project-#k))
then
lang = project:sub(1, #project-#k)
project = project:sub(#lang + 1, #project)
projectdata = projects[project]
break
end
end
if not mw.language.isKnownLanguageTag(lang) then
return --formatError('invalid-project-code', projet or 'nil')
end
end
if not projectdata then
return -- formatError('invalid-project-code', projet or 'nil')
end
local linkcode = projectdata[1]
local prefix = projectdata[2]
local multiversion = projectdata[3]
if multiversion then
linkcode = lang .. linkcode
end
local link = mw.wikibase.getSitelink(entityid, linkcode)
if not link then
return nil
end
if prefix then
link = prefix .. ':' .. link
end
if multiversion then
link = ':' .. lang .. ':' .. link
end
return link, project, lang
end
-- add new values to a list, avoiding duplicates
function wd.addNewValues(olditems, newitems, maxnum, stopval)
if not newitems then
return olditems
end
for _, qid in pairs(newitems) do
if stopval and (qid == stopval) then
table.insert(olditems, qid)
return olditems
end
if maxnum and (#olditems >= maxnum) then
return olditems
end
if not wd.isHere(olditems, qid) then
table.insert(olditems, qid)
end
end
return olditems
end
--=== FILTER CLAIMS ACCORDING TO VARIOUS CRITERIA : FUNCTION GETCLAIMS et alii ===
local function notSpecial(claim)
local type
if claim.mainsnak ~= nil then
type = claim.mainsnak.snaktype
else
-- condition respectée quand showonlyqualifier est un paramètre renseigné
-- dans ce cas, claim n'est pas une déclaration entière, mais UNE snak qualifiée du main snak
type = claim.snaktype
end
return type == 'value'
end
local function hasTargetValue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
return wd.isHere(targets, id) or wd.isSpecial(claim.mainsnak)
end
local function excludeValues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetValue(claim, values) )
end
local function hasTargetClass(claim, targets, maxdepth) -- retourne true si la valeur est une instance d'une classe dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
local maxdepth = maxdepth or 10
local matchfunction = function(value, target) return wd.isInstance(target, value, maxdepth) end
return wd.isHere(targets, id, matchfunction) or wd.isSpecial(claim.mainsnak)
end
local function excludeClasses(claim, classes) -- true si la valeur n'est pas une instance d'une classe dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetClass(claim, classes, maxdepth) )
end
local function hasTargetSuperclass(claim, targets, maxdepth) -- retourne true si la valeur est une sous-classe d'une classe dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
local maxdepth = maxdepth or 10
local matchfunction = function(value, target) return wd.isSubclass(target, value, maxdepth) end
return wd.isHere(targets, id, matchfunction) or wd.isSpecial(claim.mainsnak)
end
local function excludeSuperclasses(claim, classes) -- true si la valeur n'est pas une sous-classe d'une classe dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetSuperclass(claim, classes, maxdepth) )
end
local function bestRanked(claims)
if not claims then
return nil
end
local preferred, normal = {}, {}
for i, j in pairs(claims) do
if j.rank == 'preferred' then
table.insert(preferred, j)
elseif j.rank == 'normal' then
table.insert(normal, j)
end
end
if #preferred > 0 then
return preferred
else
return normal
end
end
local function withRank(claims, target)
if target == 'best' then
return bestRanked(claims)
end
local newclaims = {}
for pos, claim in pairs(claims) do
if target == 'valid' then
if claim.rank ~= 'deprecated' then
table.insert(newclaims, claim)
end
elseif claim.rank == target then
table.insert(newclaims, claim)
end
end
return newclaims
end
function wd.hasQualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = wd.splitStr(acceptedqualifs)
acceptedvals = wd.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if wd.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
function wd.hasQualifierNumber(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = wd.splitStr(acceptedqualifs)
acceptedvals = wd.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if mw.wikibase.renderSnak(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
local function hasSource(claim, targetsource, sourceproperty)
sourceproperty = sourceproperty or 'P248'
if targetsource == "-" then
return true
end
if (not claim.references) then return
false
end
local candidates = claim.references[1].snaks[sourceproperty] -- les snaks utilisant la propriété demandée
if (not candidates) then
return false
end
if (targetsource == "any") then -- si n'importe quelle valeur est acceptée tant qu'elle utilise en ref la propriété demandée
return true
end
targetsource = wd.splitStr(targetsource)
for _, source in pairs(candidates) do
local s = wd.getId(source)
for i, target in pairs(targetsource) do
if s == target then return true end
end
end
return false
end
local function excludeQualifier(claim, qualifier, qualifiervalues)
return not wd.hasQualifier(claim, qualifier, qualifiervalues)
end
function wd.hasDate(claim)
if not claim then
return false --error() ?
end
if wd.getDateFromQualif(claim, 'P585') or wd.getDateFromQualif(claim, 'P580') or wd.getDateFromQualif(claim, 'P582') then
return true
end
return false
end
local function hasLink(claim, site, lang)
if (claim.mainsnak.snaktype ~= 'value') then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça
return true
end
local id = wd.getMainId(claim)
local link = wd.siteLink(id, site, lang)
if link then
return true
end
end
local function isInLanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?
if type(lang) == 'table' then -- si c'est une table de language séparées par des virgules, on les accepte toutes
for i, l in pairs(lang) do
local v = isInLanguage(claim, l)
if v then
return true
end
end
end
if type(lang) ~= ('string') then
return --?
end
if (lang == '-') then
return true
end
if (lang == 'locallang') then
lang = mw.getContentLanguage():getCode()
end
-- pour les monolingual text
local snak = claim.mainsnak or claim
if snak.snaktype == 'value' and snak.datavalue.type == 'monolingualtext' then
if snak.datavalue.value.language == lang then
return true
end
return false
end
-- pour les autres types de données : recherche dans les qualificatifs
if (lang == 'ht') then
lang = 'Q150'
elseif (lang == 'en') then
lang = 'Q1860'
else
lang = databases.invertedlangcodes[lang]
end
if claim.qualifiers and claim.qualifiers.P407 then
if wd.hasQualifier(claim, {'P407'}, {lang}) then
return true
else
return false
end
end
return true -- si on ne ne sait pas la langue, on condière que c'est bon
end
local function firstVals(claims, numval) -- retourn les numval premières valeurs de la table claims
local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
while (#claims > numval) do
table.remove(claims)
end
return claims
end
local function lastVals(claims, numval2) -- retourn les valeurs de la table claims à partir de numval2
local numval2 = tonumber(numval2) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
for i=1,numval2 do
table.remove(claims, 1)
end
return claims
end
-- retourne les valeurs de la table claims à partir de removedupesdate,
-- sans les dates en doublons avec conversion entre les calendrier julien et grégorien,
-- ou uniquement en catégorisant si le paramètre removedupesdate est égale à 'cat'
local function removeDupesDate(claims, removedupesdate)
if not claims or #claims < 2 then
return claims, ''
end
local cat = ''
local newClaims = {}
local newIsos = {}
local function findIndex(searchset, val) -- similaire à wd.isHere mais retourne l'index de la valeur trouvée
for i, j in pairs(searchset) do
if val == j then
return i
end
end
return -1
end
for _, claim in ipairs( claims ) do
local snak = claim.mainsnak or claim
if (snak.snaktype == 'value') and (snak.datatype == 'time') and snak.datavalue.value.precision >= 11 then -- s'il s'agit d'un time et que la précision est au moins l'année
local iso = snak.datavalue.value.time
_, _, iso = string.find(iso, "(+%d+-%d+-%d+T)")
local deleteIfDuplicate = false
if snak.datavalue.value.calendarmodel == 'http://www.wikidata.org/entity/Q1985727' then -- si la date est grégorienne
if modules.formatDate.before('+1582', iso) then -- si avant 1582 on calcule la date julienne
_, _, y, m, d = string.find(iso, "+(%d+)-(%d+)-(%d+)T")
y, m , d = modules.datemodule.gregorianToJulian(y, m , d)
if m < 10 then m = '0' .. m end
if d < 10 then d = '0' .. d end
iso = '+' .. y .. '-' .. m .. '-' .. d .. 'T'
deleteIfDuplicate = true
end
local index = findIndex(newIsos, iso)
if index >= 0 then -- si la date est déjà présente
cat = cat .. '[[Catégorie:Article avec des dates identiques venant de wikidata dans le code de l\'infobox]]'
if removedupesdate == "cat" then -- ne faire que catégoriser
table.insert(newIsos, iso)
table.insert(newClaims, claim)
elseif not deleteIfDuplicate then -- supprimer l'autre date si la date courante n'a pas été convertie
newClaims[index] = claim
end -- sinon supprimer la date courante
else -- pas de doublon
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
elseif snak.datavalue.value.calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then -- si date julienne
if not modules.formatDate.before('+1582', iso) then -- si après 1582 on calcule la date grégorienne
_, _, y, m, d = string.find(iso, "+(%d+)-(%d+)-(%d+)T")
y, m , d = modules.datemodule.julianToGregorian(y, m , d)
if m < 10 then m = '0' .. m end
if d < 10 then d = '0' .. d end
iso = '+' .. y .. '-' .. m .. '-' .. d .. 'T'
deleteIfDuplicate = true
end
local index = findIndex(newIsos, iso)
if index >= 0 then -- si date déjà présente
cat = cat .. '[[Catégorie:Article avec des dates identiques venant de wikidata dans le code de l\'infobox]]'
if removedupesdate == "cat" then -- ne faire que catégoriser
table.insert(newIsos, iso)
table.insert(newClaims, claim)
elseif not deleteIfDuplicate then -- supprimer l'autre date si la date courante n'a pas été convertie
newClaims[index] = claim
end -- sinon supprimer la date courante
else -- pas de doublon
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
else -- autre calendrier
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
else -- précision insuffisante
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
end
return newClaims, cat
end
local function timeFromQualifs(claim, qualifs)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return nil
end
for i, qualif in ipairs(qualifs or datequalifiers) do
local vals = claimqualifs[qualif]
if vals and (vals[1].snaktype == 'value') then
return vals[1].datavalue.value.time, vals[1].datavalue.value.precision
end
end
end
local function atDate(claim, mydate)
if mydate == "today" then
mydate = os.date("!%Y-%m-%dT%TZ")
end
-- determines required precision depending on the atdate format
local d = mw.text.split(mydate, "-")
local myprecision
if d[3] then
myprecision = 11 -- day
elseif d[2] then
myprecision = 10 -- month
else
myprecision = 9 -- year
end
-- with point in time
local d, storedprecision = timeFromQualifs(claim, {'P585'})
if d then
return modules.formatDate.equal(mydate, d, math.min(myprecision, storedprecision))
end
-- with start or end date -- TODO: precision
local mindate = timeFromQualifs(claim, {'P580'})
local maxdate = timeFromQualifs(claim, {'P582'})
if modules.formatDate.before(mydate, mindate) and modules.formatDate.before(maxdate, mydate) then
return true
end
return false
end
local function check(claim, condition)
if type(condition) == 'function' then -- cas standard
return condition(claim)
end
return formatError('invalid type', 'function', type(condition))
end
local function minPrecision(claim, minprecision)
local snak
if claim.qualifiers then -- si une date est donnée en qualificatif, c'est elle qu'on utilise de préférence au mainsnak
for i, j in ipairs(datequalifiers) do
if claim.qualifiers[j] then
snak = claim.qualifiers[j][1]
break
end
end
end
if not snak then
snak = claim.mainsnak or claim
end
if (snak.snaktype == 'value') and (snak.datatype == 'time') and (snak.datavalue.value.precision < minprecision) then
return false
end
return true
end
function wd.sortClaims(claims, sorttype)
if not claims then
return nil
end
if wd.isHere({'chronological', 'order', 'inverted', 'age', 'ageinverted'}, sorttype) then
return wd.chronoSort(claims, sorttype)
elseif sorttype == 'ascending' then
return wd.quantitySort(claims)
elseif sorttype == 'descending' then
return wd.quantitySort(claims, true)
elseif type(sorttype) == 'function' then
table.sort(claims, sorttype)
return claims
elseif type(sorttype) == 'string' and sorttype:sub(1, 1) == 'P' then
return wd.numericPropertySort(claims, sorttype)
end
return claims
end
function wd.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters
local function filter(condition, filterfunction, funargs)
if not args[condition] then
return
end
for i = #claims, 1, -1 do
if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then
table.remove(claims, i)
end
end
end
filter('isinlang', isInLanguage, {'isinlang'} )
filter('excludespecial', notSpecial, {} )
filter('condition', check, {'condition'} )
if claims[1] and claims[1].mainsnak then
filter('targetvalue', hasTargetValue, {'targetvalue'} )
filter('targetclass', hasTargetClass, {'targetclass'} )
filter('targetsuperclass', hasTargetSuperclass, {'targetsuperclass'} )
filter('atdate', atDate, {'atdate'} )
filter('qualifier', wd.hasQualifier, {'qualifier', 'qualifiervalue'} )
filter('qualifiernumber', wd.hasQualifierNumber, {'qualifiernumber', 'qualifiernumbervalue'} )
filter('excludequalifier', excludeQualifier, {'excludequalifier', 'excludequalifiervalue'} )
filter('withsource', hasSource, {'withsource', 'sourceproperty'} )
filter('withdate', wd.hasDate, {} )
filter('excludevalues', excludeValues, {'excludevalues'})
filter('excludeclasses', excludeClasses, {'excludeclasses'})
filter('excludesuperclasses', excludeSuperclasses, {'excludesuperclasses'})
filter('withlink', hasLink, {'withlink', 'linklang'} )
filter('minprecision', minPrecision, {'minprecision'} )
claims = withRank(claims, args.rank or 'best')
end
if #claims == 0 then
return nil
end
if args.sorttype then
claims = wd.sortClaims(claims, args.sorttype)
end
if args.numval2 then
claims = lastVals(claims, args.numval2)
end
if args.numval then
claims = firstVals(claims, args.numval)
end
return claims
end
function wd.loadEntity(entity, cache)
if type(entity) ~= 'table' then
if cache then
if not cache[entity] then
cache[entity] = mw.wikibase.getEntity(entity)
mw.log("cached")
end
return cache[entity]
else
if entity == '' or (entity == '-') then
entity = nil
end
return mw.wikibase.getEntity(entity)
end
else
return entity
end
end
function wd.getClaims( args ) -- returns a table of the claims matching some conditions given in args
if args.claims then -- if claims have already been set, return them
return args.claims
end
local properties = args.property
if type(properties) == 'string' then
properties = wd.splitStr(string.upper(args.property))
end
if not properties then
return formatError( 'property-param-not-provided' )
end
--Get entity
local entity = args.entity
if type(entity) == 'string' then
if entity == '' then
entity = nil
end
elseif type(entity) == 'table' then
entity = entity.id
end
if (not entity) then
entity = mw.wikibase.getEntityIdForCurrentPage()
end
if (not entity) or (entity == '-') or (entity == wd.translate('somevalue')) or (entity == modules.linguistic.ucfirst(wd.translate('somevalue'))) then
return nil
end
if args.labelformat and args.labelformat == 'gendered' then
local longgender = {m = 'male', f = 'female'}
args.labelformat = longgender[wd.getgender(entity)]
end
local claims = {}
if #properties == 1 then
claims = mw.wikibase.getAllStatements(entity, properties[1]) -- do not use mw.wikibase.getBestStatements at this stage, as it may remove the best ranked values that match other criteria in the query
else
for i, prop in ipairs(properties) do
local newclaims = mw.wikibase.getAllStatements(entity, prop)
if newclaims and #newclaims > 0 then
for j, claim in ipairs(newclaims) do
table.insert(claims, claim)
end
end
end
end
if (not claims) or (#claims == 0) then
return nil
end
return wd.filterClaims(claims, args)
end
--=== ENTITY FORMATTING ===
function wd.getLabel(entity, lang1, lang2)
if (not entity) then
return nil -- ou option de gestion des erreurs ?
end
entity = entity.id or ( type(entity) == "string" and entity)
if not(type(entity) == 'string') then return nil end
lang1 = lang1 or defaultlang
local str, lang --str : texte rendu, lang : langue de celui-ci
if lang1 == defaultlang then -- le plus économique
str, lang = mw.wikibase.getLabelWithLang(entity) -- le libellé peut être en français ou en anglais
else
str = mw.wikibase.getLabelByLang(entity, lang1)
if str then lang = lang1 end
end
if str and (lang == lang1) then --pas de catégorie "à traduire" si on a obtenu un texte dans la langue désirée (normalement fr)
return str
end
if lang2 then -- langue secondaire, avec catégorie "à traduire"
str2 = mw.wikibase.getLabelByLang(entity, lang2)
if str2 then
lang = lang2
str = str2
end
end
if not str then --si ni lang1, ni lang2 ni l'anglais ne sont présents, parcours de la hiérarchie des langues
for _, trylang in ipairs(databases.langhierarchy.codes) do
str = mw.wikibase.getLabelByLang(entity, trylang)
if str then
lang = trylang
break
end
end
end
if str then
local translationCat = databases.i18n['to translate']
translationCat = translationCat .. (databases.langhierarchy.cattext[lang] or '')
translationCat = addCat(translationCat)
return str, translationCat
end
end
function wd.formatEntity( entity, params )
if (not entity) then
return nil --formatError('entity-not-found')
end
local id = entity
if type(id) == 'table' then
id = id.id
end
params = params or {}
local lang = params.lang or defaultlang
local speciallabels = params.speciallabels
local displayformat = params.displayformat
local labelformat = params.labelformat
local labelformat2 = params.labelformat2
local defaultlabel = params.defaultlabel or id
local linktype = params.link
local defaultlink = params.defaultlink
local defaultlinkquery = params.defaultlinkquery
if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
return speciallabels[id]
end
if params.displayformat == 'raw' then
return id
end
if params.labelformat == 'male' then
labelformat = function(objectid) return wd.genderedlabel(objectid, 'm') end
end
if params.labelformat == 'female' then
labelformat = function(objectid) return wd.genderedlabel(objectid, 'f') end
end
local label, translationCat
if type(labelformat) == 'function' then -- sert à des cas particuliers
label, translationCat = labelformat(entity)
end
if not label then
label, translationCat = wd.getLabel(entity, lang, params.wikidatalang)
end
if type(labelformat2) == 'function' and label then -- sert à des cas particuliers
label = labelformat2(label)
end
translationCat = translationCat or "" -- sera toujours ajoutée au résultat mais sera vide si la catégorie de maintenance n'est pas nécessaire
if not label then
if (defaultlabel == '-') then
return nil
end
local link = wd.siteLink(id, 'wikidata')
return '[[' .. link .. '|' .. id .. ']]' .. translationCat
-- si pas de libellé, on met un lien vers Wikidata pour qu'on comprenne à quoi ça fait référence
end
-- détermination du fait qu'on soit ou non en train de rendre l'élément sur la page de son article
local rendering_entity_on_its_page = wd.isPageOfQId(id)
if (linktype == '-') or rendering_entity_on_its_page then
return label .. translationCat
end
local link = wd.siteLink(entity, linktype, lang)
-- defaultlinkquery will try to link to another page on this Wiki
if (not link) and defaultlinkquery then
if type(defaultlinkquery) == 'string' then
defaultlinkquery = {property = defaultlinkquery}
end
defaultlinkquery.excludespecial = true
defaultlinkquery.entity = entity
local claims = wd.getClaims(defaultlinkquery)
if claims then
for i, j in pairs(claims) do
local id = wd.getMainId(j)
link = wd.siteLink(id, linktype, lang)
if link then
break
end
end
end
end
if link then
if link:match('^Category:') or link:match('^Catégorie:') then -- attention, le « é » est multibyte
-- lier vers une catégorie au lieu de catégoriser
link = ':' .. link
end
return '[[' .. link .. '|' .. label .. ']]' .. translationCat
end
-- if not link, you can use defaultlink: a sidelink to another Wikimedia project
if (not defaultlink) then
defaultlink = {'enwiki'}
end
if defaultlink and (defaultlink ~= '-') then
local linktype
local sidelink, site, langcode
if type(defaultlink) == 'string' then
defaultlink = {defaultlink}
end
for i, j in ipairs(defaultlink) do
sidelink, site, langcode = wd.siteLink(entity, j, lang)
if sidelink then
break
end
end
if not sidelink then
sidelink, site = wd.siteLink(entity, 'wikidata')
end
local icon, class, title = site, nil, nil -- le texte affiché du lien
if site == 'wiki' then
icon, class, title = langcode, "indicateur-langue", wd.translate('see-another-language', mw.language.fetchLanguageName(langcode, defaultlang))
elseif site == 'wikidata' then
icon, class, title = 'd', "indicateur-langue", wd.translate('see-wikidata')
else
title = wd.translate('see-another-project', site)
end
local val = '[[' .. sidelink .. '|' .. '<span class = "' .. (class or '').. '" title = "' .. (title or '') .. '">' .. icon .. '</span>]]'
return label .. ' <small>(' .. val .. ')</small>' .. translationCat
end
return label .. translationCat
end
function wd.addTrackingCat(prop, cat) -- doit parfois être appelé par d'autres modules
if type(prop) == 'table' then
prop = prop[1] -- devrait logiquement toutes les ajouter
end
if not prop and not cat then
return formatError("property-param-not-provided")
end
if not cat then
cat = wd.translate('trackingcat', prop or 'P??')
end
return addCat(cat )
end
local function unknownValue(snak, label)
local str = label
if type(str) == "function" then
str = str(snak)
end
if (not str) then
if snak.datatype == 'time' then
str = wd.translate('sometime')
else
str = wd.translate('somevalue')
end
end
if type(str) ~= "string" then
return formatError(snak.datatype)
end
return str
end
local function noValue(displayformat)
if not displayformat then
return wd.translate('novalue')
end
if type(displayformat) == 'string' then
return displayformat
end
return formatError()
end
local function getLangCode(entityid)
return databases.langcodes[tonumber(entityid:sub(2))]
end
local function showLang(statement, maxLang) -- retourne le code langue entre paranthèse avant la valeur (par exemple pour les biblios et liens externes)
local mainsnak = statement.mainsnak
if mainsnak.snaktype ~= 'value' then
return nil
end
local langlist = {}
if mainsnak.datavalue.type == 'monolingualtext' then
langlist = {mainsnak.datavalue.value.language}
elseif (not statement.qualifiers) or (not statement.qualifiers.P407) then
return
else
for i, j in pairs( statement.qualifiers.P407 ) do
if j.snaktype == 'value' then
local langentity = wd.getId(j)
local langcode = getLangCode(langentity)
table.insert(langlist, langcode)
end
end
end
if (#langlist > 1) or (#langlist == 1 and langlist[1] ~= defaultlang) then -- si c'est en français, pas besoin de le dire
langlist.maxLang = maxLang
return modules.langmodule.indicationMultilingue(langlist)
end
end
-- === DATE HANDLING ===
local function fuzzydate(str, precision) -- ajoute le qualificatif "vers" à une date
if not str then
return nil
end
if (precision >= 11) or (precision == 7) or (precision == 6) then --dates avec jour, siècles, millénaires
return "vers le " .. str
end
if (precision == 8) then --deseni ("ane ...")
return "alantou " .. str
end
return "alantou " .. str
end
function wd.addStandardQualifs(str, statement)
if (not statement) or (not statement.qualifiers) then
return str
end
if not str then
return error()-- what's that ?
end
if statement.qualifiers.P1480 then
for i, j in pairs(statement.qualifiers.P1480) do
local v = wd.getId(j)
if (v == "Q21818619") then
str = wd.translate('approximate-place', str)
elseif (v == "Q18122778") or (v == "Q18912752") or (v == "Q56644435") or (v == "Q30230067") then
str = wd.translate('uncertain-information', str)
elseif (v == "Q5727902") then
if (statement.mainsnak.datatype == 'time') then
local datevalue = statement.mainsnak.datavalue
if datevalue then str = fuzzydate(str, datevalue.value.precision) end
else
str = wd.translate('approximate-value', str)
end
end
end
end
return str
end
local function rangeObject(begin, ending, params)
--[[
objet comportant un timestamp pour le classement chronologique et deux dateobject (begin et ending)
]]--
local timestamp
if begin then
timestamp = begin.timestamp
else
timestamp = ending.timestamp
end
return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}
end
local function dateObject(orig, params)
--[[ transforme un snak en un nouvel objet utilisable par Module:Date complexe
{type = 'dateobject', timestamp = str, era = '+' ou '-', year = number, month = number, day = number, calendar = calendar}
]]--
if not params then
params = {}
end
local newobj = modules.formatDate.splitDate(orig.time, orig.calendarmodel)
newobj.precision = params.precision or orig.precision
newobj.type = 'dateobject'
return newobj
end
local function objectToText(obj, params)
if obj.type == 'dateobject' then
return modules.formatDate.simplestring(obj, params)
elseif obj.type == 'rangeobject' then
return modules.formatDate.daterange(obj.begin, obj.ending, params)
end
end
function wd.getDateFromQualif(statement, qualif)
if (not statement) or (not statement.qualifiers) or not (statement.qualifiers[qualif]) then
return nil
end
local v = statement.qualifiers[qualif][1]
if v.snaktype ~= 'value' then -- que faire dans ce cas ?
return nil
end
return dateObject(v.datavalue.value)
end
function wd.getDate(statement)
local period = wd.getDateFromQualif(statement, 'P585') -- retourne un dateobject
if period then
return period
end
local begin, ending = wd.getDateFromQualif(statement, 'P580'), wd.getDateFromQualif(statement, 'P582')
if begin or ending then
return rangeObject(begin, ending) -- retourne un rangeobject fait de deux dateobject
end
return nil
end
function wd.getFormattedDate(statement, params)
if not statement then
return nil
end
local str
--cherche la date avec les qualifs P580/P582
local datetable = wd.getDate(statement)
if datetable then
str = objectToText(datetable, params)
end
-- puis limite intérieur / supérieur
if not str then
local start, ending = wd.getDateFromQualif(statement, 'P1319'), wd.getDateFromQualif(statement, 'P1326')
str = modules.formatDate.between(start, ending, params)
end
-- sinon, le mainsnak, pour les données de type time
if (not str) and (statement.mainsnak.datatype == 'time') then
local mainsnak = statement.mainsnak
if (mainsnak.snaktype == 'value') or (mainsnak.snaktype == 'somevalue') then
str = wd.formatSnak(mainsnak, params)
end
end
if str and params and (params.addstandardqualifs ~= '-') then
str = wd.addStandardQualifs(str, statement)
end
return str
end
wd.compare.by_quantity = function(c1, c2)
local v1 = wd.getDataValue(c1.mainsnak)
local v2 = wd.getDataValue(c2.mainsnak)
if not (v1 and v2) then
return true
end
return v1 < v2
end
--[[ tri chronologique générique :
retourne une fonction de tri de liste de déclaration
en fonction d’une fonction qui calcule la clé de tri
et d’une fonction qui compare les clés de tri
paramètres nommés: (appel type wikidata.compare.chrono_key_sort{sortKey="nom clé"})
sortKey (optionnel) : chaine, le nom de la clé utilisée pour un tri
(pour éviter de rentrer en collision avec "dateSortKey"
utilisé par chronoSort au besoin)
snak_key_get_function : fonction qui calcule la valeur de la clé à partir d’un snak ou d’une déclaration,
(obligatoire) le résultat n’est calculé qu’une fois et est stocké en cache dans claim[sortKey]
key_compare_function : fonction de comparaison des clés calculées par snak_key_get_function
(optionnel)
--]]
function wd.chrono_key_sort(arg)
local snak_key_get_function = arg.snak_key_get_function
local sortKey = arg.sortKey or "dateSortKey"
local key_compare_function = arg.key_compare_function or
function(c1, c2) return c1 < c2 end
return function(claims)
for _, claim in ipairs( claims ) do
if not claim[sortKey] then
local key = snak_key_get_function(claim)
if key then
claim[sortKey] = wd.compare.get_claim_date(key)
else
claim[sortKey] = 0
end
end
end
table.sort(
claims,
function(c1, c2)
return key_compare_function(c1[sortKey], c2[sortKey])
end
)
return claims
end
end
function wd.quantitySort(claims, inverted)
local function sort(c1, c2)
local v1 = wd.getDataValue(c1.mainsnak)
local v2 = wd.getDataValue(c2.mainsnak)
if not (v1 and v2) then
return true
end
if inverted then
return v2 < v1
end
return v1 < v2
end
table.sort(claims, sort )
return claims
end
function wd.compare.get_claim_date(claim, datetype) -- rend une date au format numérique pour faire des comparaisons
local snak = claim.mainsnak or claim
if datetype and datetype == 'personbirthdate' then -- fonctionne avec un claim dont la valeur est une personne dont on va rendre la date de naissance
if (snak.snaktype == 'value') and (snak.datatype == 'wikibase-item') then
local personid = wd.getId(snak)
local birthclaims = wd.getClaims({ entity = personid, property = 'P569', numval = 1})
if birthclaims then
return wd.compare.get_claim_date(birthclaims[1] or birthclaims)
else return math.huge end
else return math.huge end -- en cas de donnée manquante, valeur infinie qui entraîne le classement en fin de liste
end
local iso, datequalif, isonumber
if (snak.snaktype == 'value') and (snak.datatype == 'time') then
iso = snak.datavalue.value.time
else
for i, dqualif in ipairs(datequalifiers) do
iso = timeFromQualifs(claim, {dqualif})
if iso then
datequalif = dqualif
break
end
end
if not iso then return math.huge end
end
-- transformation en nombre (indication de la base car gsub retourne deux valeurs)
isonumber = tonumber( iso:gsub( '(%d)%D', '%1' ), 10 )
-- ajustement de la date tenant compte du qualificatif dont elle est issue : un fait se terminant à une date est antérieur à un autre commençant à cette date
if datequalif == 'P582' then --date de fin
isonumber = isonumber - 2
elseif datequalif == 'P1326' then -- date au plus tard
isonumber = isonumber - 1
elseif datequalif == 'P1319' then -- date au plus tôt
isonumber = isonumber + 1
elseif datequalif == 'P571' or datequalif == 'P580' then -- date de début et date de création
isonumber = isonumber + 2
end
return isonumber
end
function wd.compare.chronoCompare(c1, c2)
return wd.compare.get_claim_date(c1) < wd.compare.get_claim_date(c2)
end
-- fonction pour renverser l’ordre d’une autre fonction
function wd.compare.rev(comp_criteria)
return function(c1, c2)
-- attention les tris en lua attendent des fonctions de comparaison strictement inférieur, on doit
-- vérifier la non égalité quand on inverse l’ordre d’un critère, d’ou "and comp_criteria(c2,c1)"
return not(comp_criteria(c1,c2)) and comp_criteria(c2,c1)
end
end
-- Fonction qui trie des Claims de type time selon l'ordre chronologique
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.
function wd.chronoSort( claims, sorttype )
for _, claim in ipairs( claims ) do
if not claim.dateSortKey then
if sorttype and (sorttype == 'age' or sorttype == 'ageinverted') then
claim.dateSortKey = wd.compare.get_claim_date(claim, 'personbirthdate')
else
claim.dateSortKey = wd.compare.get_claim_date(claim)
end
if sorttype and (sorttype == 'inverted' or sorttype == 'ageinverted') and claim.dateSortKey == math.huge then
claim.dateSortKey = -math.huge -- quand la donnée est manquante on lui assigne la valeur qui entraîne le classement en fin de liste
end
end
end
table.sort(
claims,
function ( c1, c2 )
if sorttype and (sorttype == 'inverted' or sorttype == 'ageinverted') then
return c2.dateSortKey < c1.dateSortKey
end
return c1.dateSortKey < c2.dateSortKey
end
)
return claims
end
local function get_numeric_claim_value(claim, propertySort)
local val
local claimqualifs = claim.qualifiers
if claimqualifs then
local vals = claimqualifs[propertySort]
if vals and vals[1].snaktype == 'value' then
val = vals[1].datavalue.value
end
end
return tonumber(val or 0)
end
function wd.compare.numeric(propertySort)
return function(c1, c2)
return get_numeric_claim_value(c1, propertySort) < get_numeric_claim_value(c2, propertySort)
end
end
-- Fonction qui trie des Claims de type value selon l'ordre de la propriété fournit
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.
function wd.numericPropertySort( claims, propertySort )
for _, claim in ipairs( claims ) do
if not claim.dateSortKey then
local val = get_numeric_claim_value(claim, propertySort)
claim.dateSortKey = tonumber(val or 0)
end
end
table.sort(
claims,
function ( c1, c2 )
return c1.dateSortKey < c2.dateSortKey
end
)
return claims
end
--[[
test possible en console pour la fonction précédente :
= p.formatStatements{entity = "Q375946", property = 'P50', sorttype = 'P1545', linkback = "true"}
--]]
-- ===================
function wd.getReferences(statement)
local refdata = statement.references
if not refdata then
return nil
end
local refs = {}
local hashes = {}
for i, ref in pairs(refdata) do
local s
local function hasValue(prop) -- checks that the prop is here with valid value
if ref.snaks[prop] and ref.snaks[prop][1].snaktype == 'value' then
return true
end
return false
end
if ref.snaks.P248 then -- cas lorsque P248 (affirmé dans) est utilisé
for j, source in pairs(ref.snaks.P248) do
if source.snaktype == 'value' then
local page, accessdate, quotation
if hasValue('P304') then -- page
page = wd.formatSnak(ref.snaks.P304[1])
end
if hasValue('P813') then -- date de consultation
accessdate = wd.formatSnak(ref.snaks.P813[1])
end
if hasValue('P1683') then -- citation
quotation = wd.formatSnak(ref.snaks.P1683[1])
end
local sourceId = wd.getId(source)
s = modules.reference.citeitem(sourceId, {['page'] = page, ['accessdate'] = accessdate, ['citation'] = quotation})
table.insert(refs, s)
table.insert(hashes, ref.hash .. sourceId)
end
end
elseif hasValue('P8091') or hasValue('P854') then -- cas lorsque P8091 (Archival Resource Key) ou P854 (URL de la référence)est utilisé
local arkKey, url, title, author, publisher, accessdate, publishdate, publishlang, quotation, description
if hasValue('P8091') then
arkKey = wd.formatSnak(ref.snaks.P8091[1], {text = "-"})
url = 'https://n2t.net/' .. arkKey
if hasValue('P1476') then
title = wd.formatSnak(ref.snaks.P1476[1])
else
title = arkKey
end
elseif hasValue('P854') then
url = wd.formatSnak(ref.snaks.P854[1], {text = "-"})
if hasValue('P1476') then
title = wd.formatSnak(ref.snaks.P1476[1])
else
title = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
end
end
--todo : handle multiple values for author, etc.
if hasValue('P1810') then -- sou non
description = 'sou non ' .. wd.formatSnak(ref.snaks.P1810[1])
end
if hasValue('P813') then -- dat konsiltasyon
accessdate = wd.formatSnak(ref.snaks.P813[1])
end
if hasValue('P50') then -- author (item type)
author = wd.formatSnak(ref.snaks.P50[1])
elseif hasValue('P2093') then -- author (string type)
author = wd.formatSnak(ref.snaks.P2093[1])
end
if hasValue('P123') then -- éditeur
publisher = wd.formatSnak(ref.snaks.P123[1])
end
if hasValue('P1683') then -- citation
quotation = wd.formatSnak(ref.snaks.P1683[1])
end
if hasValue('P577') then -- date de publication
publishdate = wd.formatSnak(ref.snaks.P577[1])
end
if hasValue('P407') then -- langue de l'œuvre
local id = wd.getId(ref.snaks.P407[1])
publishlang = getLangCode(id)
end
s = modules.cite.lienWeb{titre = title, url = url, auteur = author, editeur = publisher, langue = publishlang, ['en ligne le'] = publishdate, ['consulté le'] = accessdate, ['citation'] = quotation, ['description'] = description}
table.insert(hashes, ref.hash)
table.insert(refs, s)
elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then
s = wd.formatSnak(ref.snaks.P854[1], {text = "-"})
table.insert(hashes, ref.snaks.P854[1].hash)
table.insert(refs, s)
end
end
if #refs > 0 then
if #hashes == #refs then
return refs, hashes
end
return refs
end
end
function wd.sourceStr(sources, hashes)
if not sources or (#sources == 0) then
return nil
end
local useHashes = hashes and #hashes == #sources
for i, j in ipairs(sources) do
local refArgs = {name = 'ref', content = j}
if useHashes and hashes[i] ~= '-' then
refArgs.args = {name = 'wikidata-' .. hashes[i]}
end
sources[i] = mw.getCurrentFrame():extensionTag(refArgs)
end
return table.concat(sources, '<sup class="reference cite_virgule">,</sup>')
end
function wd.getDataValue(snak, params)
if not params then
params = {}
end
local speciallabels = params.speciallabels -- parfois on a besoin de faire une liste d'éléments pour lequel le libellé doit être changé, pas très pratique d'utiliser une fonction pour ça
if snak.snaktype ~= 'value' then
return nil
end
local datatype = snak.datatype
local value = snak.datavalue.value
local displayformat = params.displayformat
if type(displayformat) == 'function' then
return displayformat(snak, params)
end
if datatype == 'wikibase-item' then
return wd.formatEntity(wd.getId(snak), params)
end
if datatype == 'url' then
if params.displayformat == 'raw' then
return value
else
return modules.weblink.makelink(value, params.text)
end
end
if datatype == 'math' then
return mw.getCurrentFrame():extensionTag( "math", value)
end
if datatype == 'tabular-data' then
return mw.ustring.sub(value, 6, 100) -- returns the name of the file, without the "Data:" prefix
end
if (datatype == 'string') or (datatype == 'external-id') or (datatype == 'commonsMedia') then -- toutes les données de type string sauf "math"
if params.urlpattern then
local urlpattern = params.urlpattern
if type(urlpattern) == 'function' then
urlpattern = urlpattern(value)
end
-- encodage de l'identifiant qui se retrouve dans le path de l'URL, à l'exception des slashes parfois rencontrés, qui sont des séparateurs à ne pas encoder
local encodedValue = mw.uri.encode(value, 'PATH'):gsub('%%2F', '/')
-- les parenthèses autour du encodedValue:gsub() sont nécessaires, sinon sa 2e valeur de retour est aussi passée en argument au mw.ustring.gsub() parent
local url = mw.ustring.gsub(urlpattern, '$1', (encodedValue:gsub('%%', '%%%%')))
value = '[' .. url .. ' ' .. (params.text or value) .. ']'
end
return value
end
if datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z
if displayformat == 'raw' then
return value.time
else
local dateobject = dateObject(value, {precision = params.precision})
return objectToText(dateobject, params)
end
end
if datatype == 'globe-coordinate' then
-- retourne une table avec clés latitude, longitude, précision et globe à formater par un autre module (à changer ?)
if displayformat == 'latitude' then
return value.latitude
elseif displayformat == 'longitude' then
return value.longitude
else
local coordvalue = mw.clone( value )
coordvalue.globe = databases.globes[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack
return coordvalue -- note : les coordonnées Wikidata peuvent être utilisée depuis Module:Coordinates. Faut-il aussi autoriser à appeler Module:Coordiantes ici ?
end
end
if datatype == 'quantity' then -- todo : gérer les paramètres précision
local amount, unit = value.amount, value.unit
if unit then
unit = unit:match('Q%d+')
end
if not unit then
unit = 'dimensionless'
end
local raw
if displayformat == "raw" then
raw = true
end
return modules.formatNum.displayvalue(amount, unit,
{targetunit = params.targetunit, raw = raw, rounding = params.rounding, showunit = params.showunit or 'short', showlink = params.showlink}
)
end
if datatype == 'monolingualtext' then
if value.language == defaultlang then
return value.text
else
return modules.langmodule.langue({value.language, value.text, nocat=true})
end
end
return formatError('unknown-datavalue-type' )
end
function wd.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation
local claims = args.claims
local cat = ''
if not claims then
claims = wd.getClaims(args)
end
if not claims or claims == {} then
return {}, {}, cat
end
if args.removedupesdate and (args.removedupesdate ~= '-') then
claims, cat = removeDupesDate(claims, args.removedupesdate)
end
local props = {} -- liste des propriétés associété à chaque string pour catégorisation et linkback
for i, j in pairs(claims) do
claims[i] = wd.formatStatement(j, args)
table.insert(props, j.mainsnak.property)
end
if args.removedupes and (args.removedupes ~= '-') then
claims = wd.addNewValues({}, claims) -- devrait aussi supprimer de props celles qui ne sont pas utilisées
end
return claims, props, cat
end
function wd.getQualifiers(statement, qualifs, params)
if not statement.qualifiers then
return nil
end
local vals = {}
if type(qualifs) == 'string' then
qualifs = wd.splitStr(qualifs)
end
for i, j in pairs(qualifs) do
if statement.qualifiers[j] then
for k, l in pairs(statement.qualifiers[j]) do
table.insert(vals, l)
end
end
end
if #vals == 0 then
return nil
end
return vals
end
function wd.getFormattedQualifiers(statement, qualifs, params)
if not params then params = {} end
local qualiftable = wd.getQualifiers(statement, qualifs)
if not qualiftable then
return nil
end
qualiftable = wd.filterClaims(qualiftable, params) or {}
for i, j in pairs(qualiftable) do
qualiftable[i] = wd.formatSnak(j, params)
end
return modules.linguistic.conj(qualiftable, params.conjtype)
end
function wd.showQualifiers(str, statement, args)
local qualifs = args.showqualifiers
if not qualifs then
return str -- or error ?
end
if type(qualifs) == 'string' then
qualifs = wd.splitStr(qualifs)
end
local qualifargs = args.qualifargs or {}
-- formatage des qualificatifs = args commençant par "qualif", ou à défaut, les mêmes que pour la valeur principale
qualifargs.displayformat = args.qualifdisplayformat or args.displayformat
qualifargs.labelformat = args.qualiflabelformat or args.labelformat
qualifargs.labelformat2 = args.qualiflabelformat2 or args.labelformat2
qualifargs.link = args.qualiflink or args.link
qualifargs.linktopic = args.qualiflinktopic or args.linktopic
qualifargs.conjtype = args.qualifconjtype
qualifargs.precision = args.qualifprecision
qualifargs.targetunit = args.qualiftargetunit
qualifargs.defaultlink = args.qualifdefaultlink or args.defaultlink
qualifargs.defaultlinkquery = args.qualifdefaultlinkquery or args.defaultlinkquery
local formattedqualifs
if args.qualifformat and type (args.qualifformat) == 'function' then
formattedqualifs = args.qualifformat(statement, qualifs, qualifargs)
else
formattedqualifs = wd.getFormattedQualifiers(statement, qualifs, qualifargs)
end
if formattedqualifs and formattedqualifs ~= "" then
str = str .. " (" .. formattedqualifs .. ")"
end
return str
end
function wd.formatSnak( snak, params )
if not params then params = {} end -- pour faciliter l'appel depuis d'autres modules
if snak.snaktype == 'somevalue' then
return unknownValue(snak, params.unknownlabel)
elseif snak.snaktype == 'novalue' then
return noValue(params.novaluelabel)
elseif snak.snaktype == 'value' then
return wd.getDataValue( snak, params)
else
return formatError( 'unknown-snak-type' )
end
end
function wd.formatStatement( statement, args ) -- FONCTION A REORGANISER (pas très lisible)
if not args then
args = {}
end
if not statement.type or statement.type ~= 'statement' then
return formatError( 'unknown-claim-type' )
end
local prop = statement.mainsnak.property
local str
-- special displayformat f
if args.statementformat and (type(args.statementformat) == 'function') then
str = args.statementformat(statement, args)
elseif (statement.mainsnak.datatype == 'time') and (statement.mainsnak.dateformat ~= '-') then
if args.displayformat == 'raw' and statement.mainsnak.snaktype == 'value' then
str = statement.mainsnak.datavalue.value.time
else
str = wd.getFormattedDate(statement, args)
end
elseif args.showonlyqualifier and (args.showonlyqualifier ~= '') then
str = wd.getFormattedQualifiers(statement, args.showonlyqualifier, args)
if not str then
return nil
end
if args.addstandardqualifs ~= '-' then
str = wd.addStandardQualifs(str, statement)
end
else
str = wd.formatSnak( statement.mainsnak, args )
if (args.addstandardqualifs ~= '-') and (args.displayformat ~= 'raw') then
str = wd.addStandardQualifs(str, statement)
end
end
-- ajouts divers
if args.showlang == true then
local indicateur = showLang(statement, args.maxLang)
if indicateur then
str = indicateur .. ' ' .. str
end
end
if args.showqualifiers then
str = wd.showQualifiers(str, statement, args)
end
if args.showdate then -- when "showdate and chronosort are both set, date retrieval is performed twice
local period = wd.getFormattedDate(statement, args, "-") -- 3 arguments indicate the we should not use additional qualifiers, already added by wd.formatStatement
if period then
str = str .. " <small>(" .. period .. ")</small>"
end
end
if args.showsource and args.showsource ~= '-' then
local sources, hashes = wd.getReferences(statement)
if sources then
local source = wd.sourceStr(sources, hashes)
if source then
str = str .. source
end
end
end
return str
end
function wd.addLinkBack(str, id, property)
if not id or id == '' then
id = wd.getEntityIdForCurrentPage()
end
if not id then
return str
end
if type(property) == 'table' then
property = property[1]
end
id = wd.entityId(id)
local class = ''
if property then
class = 'wd_' .. string.lower(property)
end
local icon = '[[File:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]'
local title = wd.translate('see-wikidata-value')
local url = mw.uri.fullUrl('d:' .. id, 'uselang=fr')
url.fragment = property -- ajoute une #ancre si paramètre "property" défini
url = tostring(url)
local v = mw.html.create('span')
:addClass(class)
:wikitext(str)
:tag('span')
:addClass('noprint wikidata-linkback')
:wikitext(icon:format(title, url))
:allDone()
return tostring(v)
end
function wd.addRefAnchor(str, id)
--[[
Insère une ancre pour une référence générée à partir d'un élément wd.
L'id Wikidata sert d'identifiant à l'ancre, à utiliser dans les modèles type "harvsp"
--]]
return tostring(
mw.html.create('span')
:attr('id', id)
:attr('class', "ouvrage")
:wikitext(str)
)
end
--=== FUNCTIONS USING AN ENTITY AS ARGUMENT ===
local function formatStatementsGrouped(args, type)
-- regroupe les affirmations ayant la même valeur en mainsnak, mais des qualificatifs différents
-- (seulement pour les propriétés de type élément)
local claims = wd.getClaims(args)
if not claims then
return nil
end
local groupedClaims = {}
-- regroupe les affirmations par valeur de mainsnak
local function addClaim(claim)
local id = wd.getMainId(claim)
for i, j in pairs(groupedClaims) do
if (j.id == id) then
table.insert(groupedClaims[i].claims, claim)
return
end
end
table.insert(groupedClaims, {id = id, claims = {claim}})
end
for i, claim in pairs(claims) do
addClaim(claim)
end
local stringTable = {}
-- instructions ad hoc pour les paramètres concernant la mise en forme d'une déclaration individuelle
local funs = {
{param = "showqualifiers", fun = function(str, claims)
local qualifs = {}
for i, claim in pairs(claims) do
local news = wd.getFormattedQualifiers(claim, args.showqualifiers, args)
if news then
table.insert(qualifs, news)
end
end
local qualifstr = modules.linguistic.conj(qualifs, wd.translate("qualif-separator"))
if qualifstr and qualifstr ~= "" then
str = str .. " (" .. qualifstr .. ")"
end
return str
end
},
{param = "showdate", fun = function(str, claims)
-- toutes les dates sont regroupées à l'intérieur des mêmes parenthèses ex "médaille d'or (1922, 1924)"
local dates = {}
for i, statement in pairs(claims) do
local s = wd.getFormattedDate(statement, args, true)
if statement then table.insert(dates, s) end
end
local datestr = modules.linguistic.conj(dates)
if datestr and datestr ~= "" then
str = str .. " <small>(" .. datestr .. ")</small>"
end
return str
end
},
{param = "showsource", fun = function(str, claims)
-- les sources sont toutes affichées au même endroit, à la fin
-- si deux affirmations ont la même source, on ne l'affiche qu'une fois
local sources = {}
local hashes = {}
local function dupeRef(old, new)
for i, j in pairs(old) do
if j == new then
return true
end
end
end
for i, claim in pairs(claims) do
local refs, refHashes = wd.getReferences(claim)
if refs then
for i, j in pairs(refs) do
if not dupeRef(sources, j) then
table.insert(sources, j)
local hash = (refHashes and refHashes[i]) or '-'
table.insert(hashes, hash)
end
end
end
end
return str .. (wd.sourceStr(sources, hashes) or "")
end
}
}
for i, group in pairs(groupedClaims) do -- bricolage pour utiliser les arguments de formatStatements
local str = wd.formatEntity(group.id, args)
if not str then
str = '???' -- pour éviter erreur Lua si formatEntity a retourné nil
end
for i, fun in pairs(funs) do
if args[fun.param] then
str = fun.fun(str, group.claims, args)
end
end
table.insert(stringTable, str)
end
args.valuetable = stringTable
return wd.formatStatements(args)
end
function wd.formatStatements( args )--Format statement and concat them cleanly
if args.value == '-' then
return nil
end
-- If a value is already set: use it, except if it's the special value {{WD}} (use wikidata)
if args.value and args.value ~= '' then
local valueexpl = wd.translate("activate-query")
if args.value ~= valueexpl then
return args.value
end
-- There is no value set, and args.expl disables wikidata on empty values
elseif args.expl then
return nil
end
if args.grouped and args.grouped ~= '' then
args.grouped = false
return formatStatementsGrouped(args)
end
local valuetable = args.valuetable -- dans le cas où les valeurs sont déjà formatées
local props -- les propriétés réellement utilisées (dans certains cas, ce ne sont pas toutes celles de args.property
local cat = ''
if not valuetable then -- cas le plus courant
valuetable, props, cat = wd.stringTable(args)
end
if args.ucfirst == '-' and args.conjtype == 'new line' then args.conjtype = 'lowercase new line' end
local str = modules.linguistic.conj(valuetable, args.conjtype)
if not str then
return args.default
end
if not props then
props = wd.splitStr(args.property)[1]
end
if args.ucfirst ~= '-' then
str = modules.linguistic.ucfirst(str)
end
if args.addcat and (args.addcat ~= '-') then
str = str .. wd.addTrackingCat(props) .. cat
end
if args.linkback and (args.linkback ~= '-') then
str = wd.addLinkBack(str, args.entity, props)
end
if args.returnnumberofvalues then
return str, #valuetable
end
return str
end
function wd.formatAndCat(args)
if not args then
return nil
end
args.linkback = args.linkback or true
args.addcat = true
if args.value then -- do not ignore linkback and addcat, as formatStatements do
if args.value == '-' then
return nil
end
local val = args.value .. wd.addTrackingCat(args.property)
val = wd.addLinkBack(val, args.entity, args.property)
return val
end
return wd.formatStatements( args )
end
function wd.getTheDate(args)
local claims = wd.getClaims(args)
if not claims then
return nil
end
local formattedvalues = {}
for i, j in pairs(claims) do
local v = wd.getFormattedDate(j, args)
if v then
table.insert(formattedvalues, v )
end
end
local val = modules.linguistic.conj(formattedvalues)
if not val then
return nil
end
if args.addcat == true then
val = val .. wd.addTrackingCat(args.property)
end
val = wd.addLinkBack(val, args.entity, args.property)
return val
end
function wd.keyDate (event, item, params)
params = params or {}
params.entity = item
if type(event) == 'table' then
for i, j in pairs(event) do
params.targetvalue = nil -- réinitialisation barbare des paramètres modifiés
local s = wd.keyDate(j, item, params)
if s then
return s
end
end
elseif type(event) ~= 'string' then
return formatError('invalid-datatype', type(event), 'string')
elseif string.sub(event, 1, 1) == 'Q' then -- on demande un élément utilisé dans P:P793 (événement clé)
params.property = 'P793'
params.targetvalue = event
params.addcat = params.addcat or true
return wd.getTheDate(params)
elseif string.sub(event, 1, 1) == 'P' then -- on demande une propriété
params.property = event
return wd.formatAndCat(params)
else
return formatError('invalid-entity-id', event)
end
end
function wd.mainDate(entity)
-- essaye P580/P582
local args = {entity = entity, addcat = true}
args.property = 'P580'
local startpoint = wd.formatStatements(args)
args.property = 'P582'
local endpoint = wd.formatStatements(args)
local str
if (startpoint or endpoint) then
str = modules.formatDate.daterange(startpoint, endpoint, params)
str = wd.addLinkBack(str, entity, 'P582')
return str
end
-- défaut : P585
args.property = {'P585', 'P571'}
args.linkback = true
return wd.formatStatements(args)
end
-- ==== Fonctions sur le genre ====
function wd.getgender(id)
local vals = {
['Q6581072'] = 'f', -- féminin
['Q6581097'] = 'm', -- masculin
['Q1052281'] = 'f', -- femme transgenre
['Q2449503'] = 'm', -- homme transgenre
['Q17148251'] = 'f', -- en:Travesti (gender identity)
['Q43445'] = 'f', -- femelle
['Q44148'] = 'm', -- mâle
default = '?'
}
local gender = wd.formatStatements{entity = id, property = 'P21', displayformat = 'raw', numval = 1}
return vals[gender] or vals.default
end
-- catégories de genre/nombre
function wd.getgendernum(claims)
local personid, gender
local anym = false
local anyf = false
local anyunknown = false
for i, claim in pairs(claims) do
local snak = claim.mainsnak or claim
if(snak.snaktype == 'value') and (snak.datatype == 'wikibase-item') then
personid = wd.getId(snak)
gender = wd.getgender(personid)
anym = anym or (gender == 'm')
anyf = anyf or (gender == 'f')
anyunknown = anyunknown or (gender == '?')
else
anyunknown = true
end
end
local gendernum
if #claims > 1 then
if anyunknown then
gendernum = 'p'
else
if anym and not anyf then gendernum = 'mp' end
if anyf and not anym then gendernum = 'fp' end
if anym and anyf then gendernum = 'mixtep' end
end
else
gendernum = 's'
if anym then gendernum = 'ms' end
if anyf then gendernum = 'fs' end
end
return gendernum
end
-- récupération des libellés genrés de Wikidata
function wd.genderedlabel(id, labelgender)
local label
if not labelgender then return nil end
if labelgender == 'f' then -- femme : chercher le libellé dans P2521 (libellé féminin)
label = wd.formatStatements{entity = id, property = 'P2521', isinlang = 'ht', numval = 1, ucfirst = '-'}
elseif labelgender == 'm' then -- homme : chercher le libellé dans P3321 (libellé masculin)
label = wd.formatStatements{entity = id, property = 'P3321', isinlang = 'ht', numval = 1, ucfirst = '-'}
end
if not label then
label = wd.getLabel(id)
end
return label
end
-- === FUNCTIONS FOR TRANSITIVE PROPERTIES ===
function wd.getIds(item, query)
query.excludespecial = true
query.displayformat = 'raw'
query.entity = item
query.addstandardqualifs = '-'
return wd.stringTable(query)
end
-- recursively adds a list of qid to an existing list, based on the results of a query
function wd.addVals(list, query, maxdepth, maxnodes, stopval)
maxdepth = tonumber(maxdepth) or 10
maxnodes = tonumber(maxnodes) or 100
if (maxdepth < 0) then
return list
end
if stopval and wd.isHere(list, stopval) then
return list
end
local origsize = #list
for i = 1, origsize do
-- tried a "checkpos" param instead of starting to 1 each time, but no impact on performance
local candidates = wd.getIds(list[i], query)
list = wd.addNewValues(list, candidates, maxnodes, stopval)
if list[#list] == stopval then
return list
end
if #list >= maxnodes then
return list
end
end
if (#list == origsize) then
return list
end
return wd.addVals(list, query, maxdepth - 1, maxnodes, stopval, origsize + 1)
end
-- returns a list of items transitively matching a query (orig item is not included in the list)
function wd.transitiveVals(item, query, maxdepth, maxnodes, stopval)
maxdepth = tonumber(maxdepth) or 5
if type(query) == "string" then
query = {property = query}
end
-- récupération des valeurs
local vals = wd.getIds(item, query)
if not vals then
return nil
end
local v = wd.addVals(vals, query, maxdepth - 1, maxnodes, stopval)
if not v then
return nil
end
-- réarrangement des valeurs
if query.valorder == "inverted" then
local a = {}
for i = #v, 1, -1 do
a[#a+1] = v[i]
end
v = a
end
return v
end
-- returns true if an item is the value of a query, transitively
function wd.inTransitiveVals(searchedval, sourceval, query, maxdepth, maxnodes )
local vals = wd.transitiveVals(sourceval, query, maxdepth, maxnodes, searchedval )
if (not vals) then
return false
end
for _, val in ipairs(vals) do
if (val == searchedval) then
return true
end
end
return false
end
-- returns true if an item is a superclass of another, based on P279
function wd.isSubclass(class, item, maxdepth)
local query = {property = 'P279'}
if class == item then -- item is a subclass of itself iff it is a class
if wd.getIds(item, query) then
return true
end
return false
end
return wd.inTransitiveVals(class, item, query, maxdepth )
end
-- returns true if one of the best ranked P31 values of an item is the target or a subclass of the target
-- rank = 'valid' would seem to make sense, but it would need to check for date qualifiers as some P31 values have begin or end date
function wd.isInstance(targetclass, item, maxdepth)
maxdepth = maxdepth or 10
local directclasses = wd.transitiveVals(item, {property = 'P31'}, 1)
if not directclasses then
return false
end
for i, class in pairs(directclasses) do
if wd.isSubclass(targetclass, class, maxdepth - 1) then
return true
end
end
return false
end
-- return the first value in a transitive query that belongs to a particular class. For instance find a value of P131 that is a province of Canada
function wd.findVal(sourceitem, targetclass, query, recursion, instancedepth)
if type(query) == "string" then
query = {property = query}
end
local candidates = wd.getIds(sourceitem, query)
if candidates then
for i, j in pairs(candidates) do
if wd.isInstance(targetclass, j, instancedepth) then
return j
end
end
if not recursion then
recursion = 3
else
recursion = recursion - 1
end
if recursion < 0 then
return nil
end
for i, candidate in pairs(candidates) do
return wd.findVal(candidate, targetclass, query, recursion, instancedepth)
end
end
end
-- === VARIA ===
function wd.getDescription(entity, lang)
lang = lang or defaultlang
local description
if lang == defaultlang then
return mw.wikibase.description(qid)
end
if not entity.descriptions then
return wd.translate('no description')
end
local descriptions = entity.descriptions
if not descriptions then
return nil
end
if descriptions[lang] then
return descriptions[delang].value
end
return entity.id
end
function wd.Dump(entity)
entity = wd.getEntity(entity)
if not entity then
return formatError("entity-param-not-provided")
end
return "<pre>"..mw.dumpObject(entity).."</pre>"
end
function wd.frameFun(frame)
local args = frame.args
local funname = args[1]
table.remove(args, 1)
return wd[funname](args)
end
return wd
edckxp6ck6fsx8x6xxbuklihbymyt50
855594
855593
2024-11-12T16:25:49Z
BwaKajou
31668
855594
Scribunto
text/plain
--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
local wd = {}
-- creation of a subobject to store comparison funtions, used for sorting claims
-- to be able to build more complex sorts like topological sorts
wd.compare = {}
local databases = { }
local modules = { }
local databasesNames = { -- modules de données statiques pouvant être appelés avec mw.loadData(), ne nécessitant pas require()
i18n = 'Module:Wikidata/I18n',
globes = 'Module:Wikidata/Globes',
langhierarchy = 'Module:Wikidata/Hiérarchie des langues',
langcodes = 'Module:Dictionnaire Wikidata/Codes langue', -- big, infrequently useda
invertedlangcodes = 'Module:Dictionnaire Wikidata/Codes langue/inversé'
}
local modulesNames = {
reference = 'Module:Wikidata/Références',
linguistic = 'Module:Linguistique',
datemodule = 'Module:Date',
formatDate = 'Module:Date complexe',
formatNum = 'Module:Conversion',
langmodule = 'Module:Langue',
cite = 'Module:Biblio',
weblink = 'Module:Weblink'
}
local function loadDatabase( t, key )
if databasesNames[key] then
local m = mw.loadData( databasesNames[key] )
t[key] = m
return m
end
end
local function loadModule( t, key )
if modulesNames[key] then
local m = require( modulesNames[key] )
t[key] = m
return m
end
end
setmetatable( databases, { __index = loadDatabase } )
setmetatable( modules, { __index = loadModule } ) -- ainsi le require() sera opéré seulement si nécessaire par modules.(nom du module)
local datequalifiers = {'P585', 'P571', 'P580', 'P582', 'P1319', 'P1326'}
-- === I18n ===
local defaultlang = mw.getContentLanguage():getCode()
function wd.translate(str, rep1, rep2)
str = databases.i18n[str] or str
if rep1 and (type (rep1) == 'string') then
str = str:gsub('$1', rep1)
end
if rep2 and (type (rep2) == 'string')then
str = str:gsub('$2', rep2)
end
return str
end
local function addCat(cat, sortkey)
if sortkey then
return '[[Category:' .. cat .. '|' .. sortkey .. ']]'
end
return '[[Category:' .. cat .. ']]'
end
local function formatError( key , category, debug)
if debug then
return error(databases.i18n[key] or key)
end
if category then
return addCat(category, key)
else
return addCat('cat-unsorted-issue', key)
end
end
--
function wd.isSpecial(snak)
return (snak.snaktype ~= 'value')
end
function wd.getId(snak)
if (snak.snaktype == 'value') then
return 'Q' .. snak.datavalue.value['numeric-id']
end
end
function wd.getNumericId(snak)
if (snak.snaktype == 'value') then
return snak.datavalue.value['numeric-id']
end
end
function wd.getMainId(claim)
return wd.getId(claim.mainsnak)
end
function wd.entityId(entity)
if type(entity) == 'string' then
return entity
elseif type(entity) == 'table' then
return entity.id
end
end
function wd.getEntityIdForCurrentPage()
return mw.wikibase.getEntityIdForCurrentPage()
end
-- function that returns true if the "qid" parameter is the qid
-- of the item that is linked to the calling page
function wd.isPageOfQId(qid)
local self_id = mw.wikibase.getEntityIdForCurrentPage()
return self_id ~= nil and qid == self_id
end
function wd.getEntity( val )
if type(val) == 'table' then
return val
end
if val == '-' then
return nil
end
if val == '' then
val = nil
end
return mw.wikibase.getEntity(val)
end
function wd.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparation
if type(val) == 'string' then
val = mw.text.split(val, ",")
end
return val
end
function wd.isHere(searchset, val, matchfunction)
for i, j in pairs(searchset) do
if matchfunction then
if matchfunction(val,j) then
return true
end
else
if val == j then
return true
end
end
end
return false
end
local function wikidataLink(entity)
local name =':d:'
if type(entity) == 'string' then
if entity:match("P[0-9+]") then
entity = "Property:" .. entity
end
return name .. entity
elseif type(entity) == 'table' then
if entity["tip"] == "property" then
name = ":d:Property:"
end
return name .. entity.id
elseif type(entity) == nil then
return formatError('entity-not-found')
end
end
function wd.siteLink(entity, project, lang)
-- returns 3 values: a sitelink (with the relevant prefix) a project name and a language
lang = lang or defaultlang
if (type(project) ~= 'string') then
project = 'wiki'
end
project = project:lower()
if project == 'wikipedia' then
project = 'wiki'
end
if type(entity) == 'string' and (project == 'wiki') and ( (not lang or lang == defaultlang) ) then -- évite de charger l'élément entier
local link = mw.wikibase.getSitelink(entity)
if link then
local test_redirect = mw.title.new(link) -- remplacement des redirections (retirer si trop coûteux)
if test_redirect.isRedirect and test_redirect.redirectTarget then
link = test_redirect.redirectTarget.fullText
end
end
return link, 'wiki', defaultlang
end
if project == 'wikidata' then
return wikidataLink(entity), 'wikidata'
end
local projects = {
-- nom = {préfixe sur Wikidata, préfix pour les liens sur Wikipédia, ajouter préfixe de langue}
wiki = {'wiki', nil, true}, -- wikipedia
commons = {'commonswiki', 'commons', false},
commonswiki = {'commonswiki', 'commons', false},
wikiquote = {'wikiquote', 'q', true},
wikivoyage = {'wikivoyage', 'voy', true},
wikibooks = {'wikibooks', 'b', true},
wikinews = {'wikinews', 'n', true},
wikiversity = {'wikiversity', 'v', true},
wikisource = {'wikisource', 's', true},
wiktionary = {'wiktionary', 'wikt', true},
specieswiki = {'specieswiki', 'species', false},
metawiki = {'metawiki', 'm', false},
incubator = {'incubator', 'incubator', false},
outreach = {'outreach', 'outreach', false},
mediawiki = {'mediawiki', 'mw', false}
}
local entityid = entity.id or entity
local projectdata = projects[project:lower()]
if not projectdata then -- defaultlink might be in the form "dewiki" rather than "project: 'wiki', lang: 'de' "
for k, v in pairs(projects) do
if project:match( k .. '$' )
and mw.language.isKnownLanguageTag(project:sub(1, #project-#k))
then
lang = project:sub(1, #project-#k)
project = project:sub(#lang + 1, #project)
projectdata = projects[project]
break
end
end
if not mw.language.isKnownLanguageTag(lang) then
return --formatError('invalid-project-code', projet or 'nil')
end
end
if not projectdata then
return -- formatError('invalid-project-code', projet or 'nil')
end
local linkcode = projectdata[1]
local prefix = projectdata[2]
local multiversion = projectdata[3]
if multiversion then
linkcode = lang .. linkcode
end
local link = mw.wikibase.getSitelink(entityid, linkcode)
if not link then
return nil
end
if prefix then
link = prefix .. ':' .. link
end
if multiversion then
link = ':' .. lang .. ':' .. link
end
return link, project, lang
end
-- add new values to a list, avoiding duplicates
function wd.addNewValues(olditems, newitems, maxnum, stopval)
if not newitems then
return olditems
end
for _, qid in pairs(newitems) do
if stopval and (qid == stopval) then
table.insert(olditems, qid)
return olditems
end
if maxnum and (#olditems >= maxnum) then
return olditems
end
if not wd.isHere(olditems, qid) then
table.insert(olditems, qid)
end
end
return olditems
end
--=== FILTER CLAIMS ACCORDING TO VARIOUS CRITERIA : FUNCTION GETCLAIMS et alii ===
local function notSpecial(claim)
local type
if claim.mainsnak ~= nil then
type = claim.mainsnak.snaktype
else
-- condition respectée quand showonlyqualifier est un paramètre renseigné
-- dans ce cas, claim n'est pas une déclaration entière, mais UNE snak qualifiée du main snak
type = claim.snaktype
end
return type == 'value'
end
local function hasTargetValue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
return wd.isHere(targets, id) or wd.isSpecial(claim.mainsnak)
end
local function excludeValues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetValue(claim, values) )
end
local function hasTargetClass(claim, targets, maxdepth) -- retourne true si la valeur est une instance d'une classe dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
local maxdepth = maxdepth or 10
local matchfunction = function(value, target) return wd.isInstance(target, value, maxdepth) end
return wd.isHere(targets, id, matchfunction) or wd.isSpecial(claim.mainsnak)
end
local function excludeClasses(claim, classes) -- true si la valeur n'est pas une instance d'une classe dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetClass(claim, classes, maxdepth) )
end
local function hasTargetSuperclass(claim, targets, maxdepth) -- retourne true si la valeur est une sous-classe d'une classe dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
local maxdepth = maxdepth or 10
local matchfunction = function(value, target) return wd.isSubclass(target, value, maxdepth) end
return wd.isHere(targets, id, matchfunction) or wd.isSpecial(claim.mainsnak)
end
local function excludeSuperclasses(claim, classes) -- true si la valeur n'est pas une sous-classe d'une classe dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetSuperclass(claim, classes, maxdepth) )
end
local function bestRanked(claims)
if not claims then
return nil
end
local preferred, normal = {}, {}
for i, j in pairs(claims) do
if j.rank == 'preferred' then
table.insert(preferred, j)
elseif j.rank == 'normal' then
table.insert(normal, j)
end
end
if #preferred > 0 then
return preferred
else
return normal
end
end
local function withRank(claims, target)
if target == 'best' then
return bestRanked(claims)
end
local newclaims = {}
for pos, claim in pairs(claims) do
if target == 'valid' then
if claim.rank ~= 'deprecated' then
table.insert(newclaims, claim)
end
elseif claim.rank == target then
table.insert(newclaims, claim)
end
end
return newclaims
end
function wd.hasQualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = wd.splitStr(acceptedqualifs)
acceptedvals = wd.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if wd.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
function wd.hasQualifierNumber(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = wd.splitStr(acceptedqualifs)
acceptedvals = wd.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if mw.wikibase.renderSnak(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
local function hasSource(claim, targetsource, sourceproperty)
sourceproperty = sourceproperty or 'P248'
if targetsource == "-" then
return true
end
if (not claim.references) then return
false
end
local candidates = claim.references[1].snaks[sourceproperty] -- les snaks utilisant la propriété demandée
if (not candidates) then
return false
end
if (targetsource == "any") then -- si n'importe quelle valeur est acceptée tant qu'elle utilise en ref la propriété demandée
return true
end
targetsource = wd.splitStr(targetsource)
for _, source in pairs(candidates) do
local s = wd.getId(source)
for i, target in pairs(targetsource) do
if s == target then return true end
end
end
return false
end
local function excludeQualifier(claim, qualifier, qualifiervalues)
return not wd.hasQualifier(claim, qualifier, qualifiervalues)
end
function wd.hasDate(claim)
if not claim then
return false --error() ?
end
if wd.getDateFromQualif(claim, 'P585') or wd.getDateFromQualif(claim, 'P580') or wd.getDateFromQualif(claim, 'P582') then
return true
end
return false
end
local function hasLink(claim, site, lang)
if (claim.mainsnak.snaktype ~= 'value') then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça
return true
end
local id = wd.getMainId(claim)
local link = wd.siteLink(id, site, lang)
if link then
return true
end
end
local function isInLanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?
if type(lang) == 'table' then -- si c'est une table de language séparées par des virgules, on les accepte toutes
for i, l in pairs(lang) do
local v = isInLanguage(claim, l)
if v then
return true
end
end
end
if type(lang) ~= ('string') then
return --?
end
if (lang == '-') then
return true
end
if (lang == 'locallang') then
lang = mw.getContentLanguage():getCode()
end
-- pour les monolingual text
local snak = claim.mainsnak or claim
if snak.snaktype == 'value' and snak.datavalue.type == 'monolingualtext' then
if snak.datavalue.value.language == lang then
return true
end
return false
end
-- pour les autres types de données : recherche dans les qualificatifs
if (lang == 'ht') then
lang = 'Q33491'
elseif (lang == 'en') then
lang = 'Q1860'
else
lang = databases.invertedlangcodes[lang]
end
if claim.qualifiers and claim.qualifiers.P407 then
if wd.hasQualifier(claim, {'P407'}, {lang}) then
return true
else
return false
end
end
return true -- si on ne ne sait pas la langue, on condière que c'est bon
end
local function firstVals(claims, numval) -- retourn les numval premières valeurs de la table claims
local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
while (#claims > numval) do
table.remove(claims)
end
return claims
end
local function lastVals(claims, numval2) -- retourn les valeurs de la table claims à partir de numval2
local numval2 = tonumber(numval2) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
for i=1,numval2 do
table.remove(claims, 1)
end
return claims
end
-- retourne les valeurs de la table claims à partir de removedupesdate,
-- sans les dates en doublons avec conversion entre les calendrier julien et grégorien,
-- ou uniquement en catégorisant si le paramètre removedupesdate est égale à 'cat'
local function removeDupesDate(claims, removedupesdate)
if not claims or #claims < 2 then
return claims, ''
end
local cat = ''
local newClaims = {}
local newIsos = {}
local function findIndex(searchset, val) -- similaire à wd.isHere mais retourne l'index de la valeur trouvée
for i, j in pairs(searchset) do
if val == j then
return i
end
end
return -1
end
for _, claim in ipairs( claims ) do
local snak = claim.mainsnak or claim
if (snak.snaktype == 'value') and (snak.datatype == 'time') and snak.datavalue.value.precision >= 11 then -- s'il s'agit d'un time et que la précision est au moins l'année
local iso = snak.datavalue.value.time
_, _, iso = string.find(iso, "(+%d+-%d+-%d+T)")
local deleteIfDuplicate = false
if snak.datavalue.value.calendarmodel == 'http://www.wikidata.org/entity/Q1985727' then -- si la date est grégorienne
if modules.formatDate.before('+1582', iso) then -- si avant 1582 on calcule la date julienne
_, _, y, m, d = string.find(iso, "+(%d+)-(%d+)-(%d+)T")
y, m , d = modules.datemodule.gregorianToJulian(y, m , d)
if m < 10 then m = '0' .. m end
if d < 10 then d = '0' .. d end
iso = '+' .. y .. '-' .. m .. '-' .. d .. 'T'
deleteIfDuplicate = true
end
local index = findIndex(newIsos, iso)
if index >= 0 then -- si la date est déjà présente
cat = cat .. '[[Catégorie:Article avec des dates identiques venant de wikidata dans le code de l\'infobox]]'
if removedupesdate == "cat" then -- ne faire que catégoriser
table.insert(newIsos, iso)
table.insert(newClaims, claim)
elseif not deleteIfDuplicate then -- supprimer l'autre date si la date courante n'a pas été convertie
newClaims[index] = claim
end -- sinon supprimer la date courante
else -- pas de doublon
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
elseif snak.datavalue.value.calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then -- si date julienne
if not modules.formatDate.before('+1582', iso) then -- si après 1582 on calcule la date grégorienne
_, _, y, m, d = string.find(iso, "+(%d+)-(%d+)-(%d+)T")
y, m , d = modules.datemodule.julianToGregorian(y, m , d)
if m < 10 then m = '0' .. m end
if d < 10 then d = '0' .. d end
iso = '+' .. y .. '-' .. m .. '-' .. d .. 'T'
deleteIfDuplicate = true
end
local index = findIndex(newIsos, iso)
if index >= 0 then -- si date déjà présente
cat = cat .. '[[Catégorie:Article avec des dates identiques venant de wikidata dans le code de l\'infobox]]'
if removedupesdate == "cat" then -- ne faire que catégoriser
table.insert(newIsos, iso)
table.insert(newClaims, claim)
elseif not deleteIfDuplicate then -- supprimer l'autre date si la date courante n'a pas été convertie
newClaims[index] = claim
end -- sinon supprimer la date courante
else -- pas de doublon
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
else -- autre calendrier
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
else -- précision insuffisante
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
end
return newClaims, cat
end
local function timeFromQualifs(claim, qualifs)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return nil
end
for i, qualif in ipairs(qualifs or datequalifiers) do
local vals = claimqualifs[qualif]
if vals and (vals[1].snaktype == 'value') then
return vals[1].datavalue.value.time, vals[1].datavalue.value.precision
end
end
end
local function atDate(claim, mydate)
if mydate == "today" then
mydate = os.date("!%Y-%m-%dT%TZ")
end
-- determines required precision depending on the atdate format
local d = mw.text.split(mydate, "-")
local myprecision
if d[3] then
myprecision = 11 -- day
elseif d[2] then
myprecision = 10 -- month
else
myprecision = 9 -- year
end
-- with point in time
local d, storedprecision = timeFromQualifs(claim, {'P585'})
if d then
return modules.formatDate.equal(mydate, d, math.min(myprecision, storedprecision))
end
-- with start or end date -- TODO: precision
local mindate = timeFromQualifs(claim, {'P580'})
local maxdate = timeFromQualifs(claim, {'P582'})
if modules.formatDate.before(mydate, mindate) and modules.formatDate.before(maxdate, mydate) then
return true
end
return false
end
local function check(claim, condition)
if type(condition) == 'function' then -- cas standard
return condition(claim)
end
return formatError('invalid type', 'function', type(condition))
end
local function minPrecision(claim, minprecision)
local snak
if claim.qualifiers then -- si une date est donnée en qualificatif, c'est elle qu'on utilise de préférence au mainsnak
for i, j in ipairs(datequalifiers) do
if claim.qualifiers[j] then
snak = claim.qualifiers[j][1]
break
end
end
end
if not snak then
snak = claim.mainsnak or claim
end
if (snak.snaktype == 'value') and (snak.datatype == 'time') and (snak.datavalue.value.precision < minprecision) then
return false
end
return true
end
function wd.sortClaims(claims, sorttype)
if not claims then
return nil
end
if wd.isHere({'chronological', 'order', 'inverted', 'age', 'ageinverted'}, sorttype) then
return wd.chronoSort(claims, sorttype)
elseif sorttype == 'ascending' then
return wd.quantitySort(claims)
elseif sorttype == 'descending' then
return wd.quantitySort(claims, true)
elseif type(sorttype) == 'function' then
table.sort(claims, sorttype)
return claims
elseif type(sorttype) == 'string' and sorttype:sub(1, 1) == 'P' then
return wd.numericPropertySort(claims, sorttype)
end
return claims
end
function wd.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters
local function filter(condition, filterfunction, funargs)
if not args[condition] then
return
end
for i = #claims, 1, -1 do
if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then
table.remove(claims, i)
end
end
end
filter('isinlang', isInLanguage, {'isinlang'} )
filter('excludespecial', notSpecial, {} )
filter('condition', check, {'condition'} )
if claims[1] and claims[1].mainsnak then
filter('targetvalue', hasTargetValue, {'targetvalue'} )
filter('targetclass', hasTargetClass, {'targetclass'} )
filter('targetsuperclass', hasTargetSuperclass, {'targetsuperclass'} )
filter('atdate', atDate, {'atdate'} )
filter('qualifier', wd.hasQualifier, {'qualifier', 'qualifiervalue'} )
filter('qualifiernumber', wd.hasQualifierNumber, {'qualifiernumber', 'qualifiernumbervalue'} )
filter('excludequalifier', excludeQualifier, {'excludequalifier', 'excludequalifiervalue'} )
filter('withsource', hasSource, {'withsource', 'sourceproperty'} )
filter('withdate', wd.hasDate, {} )
filter('excludevalues', excludeValues, {'excludevalues'})
filter('excludeclasses', excludeClasses, {'excludeclasses'})
filter('excludesuperclasses', excludeSuperclasses, {'excludesuperclasses'})
filter('withlink', hasLink, {'withlink', 'linklang'} )
filter('minprecision', minPrecision, {'minprecision'} )
claims = withRank(claims, args.rank or 'best')
end
if #claims == 0 then
return nil
end
if args.sorttype then
claims = wd.sortClaims(claims, args.sorttype)
end
if args.numval2 then
claims = lastVals(claims, args.numval2)
end
if args.numval then
claims = firstVals(claims, args.numval)
end
return claims
end
function wd.loadEntity(entity, cache)
if type(entity) ~= 'table' then
if cache then
if not cache[entity] then
cache[entity] = mw.wikibase.getEntity(entity)
mw.log("cached")
end
return cache[entity]
else
if entity == '' or (entity == '-') then
entity = nil
end
return mw.wikibase.getEntity(entity)
end
else
return entity
end
end
function wd.getClaims( args ) -- returns a table of the claims matching some conditions given in args
if args.claims then -- if claims have already been set, return them
return args.claims
end
local properties = args.property
if type(properties) == 'string' then
properties = wd.splitStr(string.upper(args.property))
end
if not properties then
return formatError( 'property-param-not-provided' )
end
--Get entity
local entity = args.entity
if type(entity) == 'string' then
if entity == '' then
entity = nil
end
elseif type(entity) == 'table' then
entity = entity.id
end
if (not entity) then
entity = mw.wikibase.getEntityIdForCurrentPage()
end
if (not entity) or (entity == '-') or (entity == wd.translate('somevalue')) or (entity == modules.linguistic.ucfirst(wd.translate('somevalue'))) then
return nil
end
if args.labelformat and args.labelformat == 'gendered' then
local longgender = {m = 'male', f = 'female'}
args.labelformat = longgender[wd.getgender(entity)]
end
local claims = {}
if #properties == 1 then
claims = mw.wikibase.getAllStatements(entity, properties[1]) -- do not use mw.wikibase.getBestStatements at this stage, as it may remove the best ranked values that match other criteria in the query
else
for i, prop in ipairs(properties) do
local newclaims = mw.wikibase.getAllStatements(entity, prop)
if newclaims and #newclaims > 0 then
for j, claim in ipairs(newclaims) do
table.insert(claims, claim)
end
end
end
end
if (not claims) or (#claims == 0) then
return nil
end
return wd.filterClaims(claims, args)
end
--=== ENTITY FORMATTING ===
function wd.getLabel(entity, lang1, lang2)
if (not entity) then
return nil -- ou option de gestion des erreurs ?
end
entity = entity.id or ( type(entity) == "string" and entity)
if not(type(entity) == 'string') then return nil end
lang1 = lang1 or defaultlang
local str, lang --str : texte rendu, lang : langue de celui-ci
if lang1 == defaultlang then -- le plus économique
str, lang = mw.wikibase.getLabelWithLang(entity) -- le libellé peut être en français ou en anglais
else
str = mw.wikibase.getLabelByLang(entity, lang1)
if str then lang = lang1 end
end
if str and (lang == lang1) then --pas de catégorie "à traduire" si on a obtenu un texte dans la langue désirée (normalement fr)
return str
end
if lang2 then -- langue secondaire, avec catégorie "à traduire"
str2 = mw.wikibase.getLabelByLang(entity, lang2)
if str2 then
lang = lang2
str = str2
end
end
if not str then --si ni lang1, ni lang2 ni l'anglais ne sont présents, parcours de la hiérarchie des langues
for _, trylang in ipairs(databases.langhierarchy.codes) do
str = mw.wikibase.getLabelByLang(entity, trylang)
if str then
lang = trylang
break
end
end
end
if str then
local translationCat = databases.i18n['to translate']
translationCat = translationCat .. (databases.langhierarchy.cattext[lang] or '')
translationCat = addCat(translationCat)
return str, translationCat
end
end
function wd.formatEntity( entity, params )
if (not entity) then
return nil --formatError('entity-not-found')
end
local id = entity
if type(id) == 'table' then
id = id.id
end
params = params or {}
local lang = params.lang or defaultlang
local speciallabels = params.speciallabels
local displayformat = params.displayformat
local labelformat = params.labelformat
local labelformat2 = params.labelformat2
local defaultlabel = params.defaultlabel or id
local linktype = params.link
local defaultlink = params.defaultlink
local defaultlinkquery = params.defaultlinkquery
if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
return speciallabels[id]
end
if params.displayformat == 'raw' then
return id
end
if params.labelformat == 'male' then
labelformat = function(objectid) return wd.genderedlabel(objectid, 'm') end
end
if params.labelformat == 'female' then
labelformat = function(objectid) return wd.genderedlabel(objectid, 'f') end
end
local label, translationCat
if type(labelformat) == 'function' then -- sert à des cas particuliers
label, translationCat = labelformat(entity)
end
if not label then
label, translationCat = wd.getLabel(entity, lang, params.wikidatalang)
end
if type(labelformat2) == 'function' and label then -- sert à des cas particuliers
label = labelformat2(label)
end
translationCat = translationCat or "" -- sera toujours ajoutée au résultat mais sera vide si la catégorie de maintenance n'est pas nécessaire
if not label then
if (defaultlabel == '-') then
return nil
end
local link = wd.siteLink(id, 'wikidata')
return '[[' .. link .. '|' .. id .. ']]' .. translationCat
-- si pas de libellé, on met un lien vers Wikidata pour qu'on comprenne à quoi ça fait référence
end
-- détermination du fait qu'on soit ou non en train de rendre l'élément sur la page de son article
local rendering_entity_on_its_page = wd.isPageOfQId(id)
if (linktype == '-') or rendering_entity_on_its_page then
return label .. translationCat
end
local link = wd.siteLink(entity, linktype, lang)
-- defaultlinkquery will try to link to another page on this Wiki
if (not link) and defaultlinkquery then
if type(defaultlinkquery) == 'string' then
defaultlinkquery = {property = defaultlinkquery}
end
defaultlinkquery.excludespecial = true
defaultlinkquery.entity = entity
local claims = wd.getClaims(defaultlinkquery)
if claims then
for i, j in pairs(claims) do
local id = wd.getMainId(j)
link = wd.siteLink(id, linktype, lang)
if link then
break
end
end
end
end
if link then
if link:match('^Category:') or link:match('^Catégorie:') then -- attention, le « é » est multibyte
-- lier vers une catégorie au lieu de catégoriser
link = ':' .. link
end
return '[[' .. link .. '|' .. label .. ']]' .. translationCat
end
-- if not link, you can use defaultlink: a sidelink to another Wikimedia project
if (not defaultlink) then
defaultlink = {'enwiki'}
end
if defaultlink and (defaultlink ~= '-') then
local linktype
local sidelink, site, langcode
if type(defaultlink) == 'string' then
defaultlink = {defaultlink}
end
for i, j in ipairs(defaultlink) do
sidelink, site, langcode = wd.siteLink(entity, j, lang)
if sidelink then
break
end
end
if not sidelink then
sidelink, site = wd.siteLink(entity, 'wikidata')
end
local icon, class, title = site, nil, nil -- le texte affiché du lien
if site == 'wiki' then
icon, class, title = langcode, "indicateur-langue", wd.translate('see-another-language', mw.language.fetchLanguageName(langcode, defaultlang))
elseif site == 'wikidata' then
icon, class, title = 'd', "indicateur-langue", wd.translate('see-wikidata')
else
title = wd.translate('see-another-project', site)
end
local val = '[[' .. sidelink .. '|' .. '<span class = "' .. (class or '').. '" title = "' .. (title or '') .. '">' .. icon .. '</span>]]'
return label .. ' <small>(' .. val .. ')</small>' .. translationCat
end
return label .. translationCat
end
function wd.addTrackingCat(prop, cat) -- doit parfois être appelé par d'autres modules
if type(prop) == 'table' then
prop = prop[1] -- devrait logiquement toutes les ajouter
end
if not prop and not cat then
return formatError("property-param-not-provided")
end
if not cat then
cat = wd.translate('trackingcat', prop or 'P??')
end
return addCat(cat )
end
local function unknownValue(snak, label)
local str = label
if type(str) == "function" then
str = str(snak)
end
if (not str) then
if snak.datatype == 'time' then
str = wd.translate('sometime')
else
str = wd.translate('somevalue')
end
end
if type(str) ~= "string" then
return formatError(snak.datatype)
end
return str
end
local function noValue(displayformat)
if not displayformat then
return wd.translate('novalue')
end
if type(displayformat) == 'string' then
return displayformat
end
return formatError()
end
local function getLangCode(entityid)
return databases.langcodes[tonumber(entityid:sub(2))]
end
local function showLang(statement, maxLang) -- retourne le code langue entre paranthèse avant la valeur (par exemple pour les biblios et liens externes)
local mainsnak = statement.mainsnak
if mainsnak.snaktype ~= 'value' then
return nil
end
local langlist = {}
if mainsnak.datavalue.type == 'monolingualtext' then
langlist = {mainsnak.datavalue.value.language}
elseif (not statement.qualifiers) or (not statement.qualifiers.P407) then
return
else
for i, j in pairs( statement.qualifiers.P407 ) do
if j.snaktype == 'value' then
local langentity = wd.getId(j)
local langcode = getLangCode(langentity)
table.insert(langlist, langcode)
end
end
end
if (#langlist > 1) or (#langlist == 1 and langlist[1] ~= defaultlang) then -- si c'est en français, pas besoin de le dire
langlist.maxLang = maxLang
return modules.langmodule.indicationMultilingue(langlist)
end
end
-- === DATE HANDLING ===
local function fuzzydate(str, precision) -- ajoute le qualificatif "vers" à une date
if not str then
return nil
end
if (precision >= 11) or (precision == 7) or (precision == 6) then --dates avec jour, siècles, millénaires
return "vers le " .. str
end
if (precision == 8) then --deseni ("ane ...")
return "alantou " .. str
end
return "alantou " .. str
end
function wd.addStandardQualifs(str, statement)
if (not statement) or (not statement.qualifiers) then
return str
end
if not str then
return error()-- what's that ?
end
if statement.qualifiers.P1480 then
for i, j in pairs(statement.qualifiers.P1480) do
local v = wd.getId(j)
if (v == "Q21818619") then
str = wd.translate('approximate-place', str)
elseif (v == "Q18122778") or (v == "Q18912752") or (v == "Q56644435") or (v == "Q30230067") then
str = wd.translate('uncertain-information', str)
elseif (v == "Q5727902") then
if (statement.mainsnak.datatype == 'time') then
local datevalue = statement.mainsnak.datavalue
if datevalue then str = fuzzydate(str, datevalue.value.precision) end
else
str = wd.translate('approximate-value', str)
end
end
end
end
return str
end
local function rangeObject(begin, ending, params)
--[[
objet comportant un timestamp pour le classement chronologique et deux dateobject (begin et ending)
]]--
local timestamp
if begin then
timestamp = begin.timestamp
else
timestamp = ending.timestamp
end
return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}
end
local function dateObject(orig, params)
--[[ transforme un snak en un nouvel objet utilisable par Module:Date complexe
{type = 'dateobject', timestamp = str, era = '+' ou '-', year = number, month = number, day = number, calendar = calendar}
]]--
if not params then
params = {}
end
local newobj = modules.formatDate.splitDate(orig.time, orig.calendarmodel)
newobj.precision = params.precision or orig.precision
newobj.type = 'dateobject'
return newobj
end
local function objectToText(obj, params)
if obj.type == 'dateobject' then
return modules.formatDate.simplestring(obj, params)
elseif obj.type == 'rangeobject' then
return modules.formatDate.daterange(obj.begin, obj.ending, params)
end
end
function wd.getDateFromQualif(statement, qualif)
if (not statement) or (not statement.qualifiers) or not (statement.qualifiers[qualif]) then
return nil
end
local v = statement.qualifiers[qualif][1]
if v.snaktype ~= 'value' then -- que faire dans ce cas ?
return nil
end
return dateObject(v.datavalue.value)
end
function wd.getDate(statement)
local period = wd.getDateFromQualif(statement, 'P585') -- retourne un dateobject
if period then
return period
end
local begin, ending = wd.getDateFromQualif(statement, 'P580'), wd.getDateFromQualif(statement, 'P582')
if begin or ending then
return rangeObject(begin, ending) -- retourne un rangeobject fait de deux dateobject
end
return nil
end
function wd.getFormattedDate(statement, params)
if not statement then
return nil
end
local str
--cherche la date avec les qualifs P580/P582
local datetable = wd.getDate(statement)
if datetable then
str = objectToText(datetable, params)
end
-- puis limite intérieur / supérieur
if not str then
local start, ending = wd.getDateFromQualif(statement, 'P1319'), wd.getDateFromQualif(statement, 'P1326')
str = modules.formatDate.between(start, ending, params)
end
-- sinon, le mainsnak, pour les données de type time
if (not str) and (statement.mainsnak.datatype == 'time') then
local mainsnak = statement.mainsnak
if (mainsnak.snaktype == 'value') or (mainsnak.snaktype == 'somevalue') then
str = wd.formatSnak(mainsnak, params)
end
end
if str and params and (params.addstandardqualifs ~= '-') then
str = wd.addStandardQualifs(str, statement)
end
return str
end
wd.compare.by_quantity = function(c1, c2)
local v1 = wd.getDataValue(c1.mainsnak)
local v2 = wd.getDataValue(c2.mainsnak)
if not (v1 and v2) then
return true
end
return v1 < v2
end
--[[ tri chronologique générique :
retourne une fonction de tri de liste de déclaration
en fonction d’une fonction qui calcule la clé de tri
et d’une fonction qui compare les clés de tri
paramètres nommés: (appel type wikidata.compare.chrono_key_sort{sortKey="nom clé"})
sortKey (optionnel) : chaine, le nom de la clé utilisée pour un tri
(pour éviter de rentrer en collision avec "dateSortKey"
utilisé par chronoSort au besoin)
snak_key_get_function : fonction qui calcule la valeur de la clé à partir d’un snak ou d’une déclaration,
(obligatoire) le résultat n’est calculé qu’une fois et est stocké en cache dans claim[sortKey]
key_compare_function : fonction de comparaison des clés calculées par snak_key_get_function
(optionnel)
--]]
function wd.chrono_key_sort(arg)
local snak_key_get_function = arg.snak_key_get_function
local sortKey = arg.sortKey or "dateSortKey"
local key_compare_function = arg.key_compare_function or
function(c1, c2) return c1 < c2 end
return function(claims)
for _, claim in ipairs( claims ) do
if not claim[sortKey] then
local key = snak_key_get_function(claim)
if key then
claim[sortKey] = wd.compare.get_claim_date(key)
else
claim[sortKey] = 0
end
end
end
table.sort(
claims,
function(c1, c2)
return key_compare_function(c1[sortKey], c2[sortKey])
end
)
return claims
end
end
function wd.quantitySort(claims, inverted)
local function sort(c1, c2)
local v1 = wd.getDataValue(c1.mainsnak)
local v2 = wd.getDataValue(c2.mainsnak)
if not (v1 and v2) then
return true
end
if inverted then
return v2 < v1
end
return v1 < v2
end
table.sort(claims, sort )
return claims
end
function wd.compare.get_claim_date(claim, datetype) -- rend une date au format numérique pour faire des comparaisons
local snak = claim.mainsnak or claim
if datetype and datetype == 'personbirthdate' then -- fonctionne avec un claim dont la valeur est une personne dont on va rendre la date de naissance
if (snak.snaktype == 'value') and (snak.datatype == 'wikibase-item') then
local personid = wd.getId(snak)
local birthclaims = wd.getClaims({ entity = personid, property = 'P569', numval = 1})
if birthclaims then
return wd.compare.get_claim_date(birthclaims[1] or birthclaims)
else return math.huge end
else return math.huge end -- en cas de donnée manquante, valeur infinie qui entraîne le classement en fin de liste
end
local iso, datequalif, isonumber
if (snak.snaktype == 'value') and (snak.datatype == 'time') then
iso = snak.datavalue.value.time
else
for i, dqualif in ipairs(datequalifiers) do
iso = timeFromQualifs(claim, {dqualif})
if iso then
datequalif = dqualif
break
end
end
if not iso then return math.huge end
end
-- transformation en nombre (indication de la base car gsub retourne deux valeurs)
isonumber = tonumber( iso:gsub( '(%d)%D', '%1' ), 10 )
-- ajustement de la date tenant compte du qualificatif dont elle est issue : un fait se terminant à une date est antérieur à un autre commençant à cette date
if datequalif == 'P582' then --date de fin
isonumber = isonumber - 2
elseif datequalif == 'P1326' then -- date au plus tard
isonumber = isonumber - 1
elseif datequalif == 'P1319' then -- date au plus tôt
isonumber = isonumber + 1
elseif datequalif == 'P571' or datequalif == 'P580' then -- date de début et date de création
isonumber = isonumber + 2
end
return isonumber
end
function wd.compare.chronoCompare(c1, c2)
return wd.compare.get_claim_date(c1) < wd.compare.get_claim_date(c2)
end
-- fonction pour renverser l’ordre d’une autre fonction
function wd.compare.rev(comp_criteria)
return function(c1, c2)
-- attention les tris en lua attendent des fonctions de comparaison strictement inférieur, on doit
-- vérifier la non égalité quand on inverse l’ordre d’un critère, d’ou "and comp_criteria(c2,c1)"
return not(comp_criteria(c1,c2)) and comp_criteria(c2,c1)
end
end
-- Fonction qui trie des Claims de type time selon l'ordre chronologique
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.
function wd.chronoSort( claims, sorttype )
for _, claim in ipairs( claims ) do
if not claim.dateSortKey then
if sorttype and (sorttype == 'age' or sorttype == 'ageinverted') then
claim.dateSortKey = wd.compare.get_claim_date(claim, 'personbirthdate')
else
claim.dateSortKey = wd.compare.get_claim_date(claim)
end
if sorttype and (sorttype == 'inverted' or sorttype == 'ageinverted') and claim.dateSortKey == math.huge then
claim.dateSortKey = -math.huge -- quand la donnée est manquante on lui assigne la valeur qui entraîne le classement en fin de liste
end
end
end
table.sort(
claims,
function ( c1, c2 )
if sorttype and (sorttype == 'inverted' or sorttype == 'ageinverted') then
return c2.dateSortKey < c1.dateSortKey
end
return c1.dateSortKey < c2.dateSortKey
end
)
return claims
end
local function get_numeric_claim_value(claim, propertySort)
local val
local claimqualifs = claim.qualifiers
if claimqualifs then
local vals = claimqualifs[propertySort]
if vals and vals[1].snaktype == 'value' then
val = vals[1].datavalue.value
end
end
return tonumber(val or 0)
end
function wd.compare.numeric(propertySort)
return function(c1, c2)
return get_numeric_claim_value(c1, propertySort) < get_numeric_claim_value(c2, propertySort)
end
end
-- Fonction qui trie des Claims de type value selon l'ordre de la propriété fournit
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.
function wd.numericPropertySort( claims, propertySort )
for _, claim in ipairs( claims ) do
if not claim.dateSortKey then
local val = get_numeric_claim_value(claim, propertySort)
claim.dateSortKey = tonumber(val or 0)
end
end
table.sort(
claims,
function ( c1, c2 )
return c1.dateSortKey < c2.dateSortKey
end
)
return claims
end
--[[
test possible en console pour la fonction précédente :
= p.formatStatements{entity = "Q375946", property = 'P50', sorttype = 'P1545', linkback = "true"}
--]]
-- ===================
function wd.getReferences(statement)
local refdata = statement.references
if not refdata then
return nil
end
local refs = {}
local hashes = {}
for i, ref in pairs(refdata) do
local s
local function hasValue(prop) -- checks that the prop is here with valid value
if ref.snaks[prop] and ref.snaks[prop][1].snaktype == 'value' then
return true
end
return false
end
if ref.snaks.P248 then -- cas lorsque P248 (affirmé dans) est utilisé
for j, source in pairs(ref.snaks.P248) do
if source.snaktype == 'value' then
local page, accessdate, quotation
if hasValue('P304') then -- page
page = wd.formatSnak(ref.snaks.P304[1])
end
if hasValue('P813') then -- date de consultation
accessdate = wd.formatSnak(ref.snaks.P813[1])
end
if hasValue('P1683') then -- citation
quotation = wd.formatSnak(ref.snaks.P1683[1])
end
local sourceId = wd.getId(source)
s = modules.reference.citeitem(sourceId, {['page'] = page, ['accessdate'] = accessdate, ['citation'] = quotation})
table.insert(refs, s)
table.insert(hashes, ref.hash .. sourceId)
end
end
elseif hasValue('P8091') or hasValue('P854') then -- cas lorsque P8091 (Archival Resource Key) ou P854 (URL de la référence)est utilisé
local arkKey, url, title, author, publisher, accessdate, publishdate, publishlang, quotation, description
if hasValue('P8091') then
arkKey = wd.formatSnak(ref.snaks.P8091[1], {text = "-"})
url = 'https://n2t.net/' .. arkKey
if hasValue('P1476') then
title = wd.formatSnak(ref.snaks.P1476[1])
else
title = arkKey
end
elseif hasValue('P854') then
url = wd.formatSnak(ref.snaks.P854[1], {text = "-"})
if hasValue('P1476') then
title = wd.formatSnak(ref.snaks.P1476[1])
else
title = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
end
end
--todo : handle multiple values for author, etc.
if hasValue('P1810') then -- sou non
description = 'sou non ' .. wd.formatSnak(ref.snaks.P1810[1])
end
if hasValue('P813') then -- dat konsiltasyon
accessdate = wd.formatSnak(ref.snaks.P813[1])
end
if hasValue('P50') then -- author (item type)
author = wd.formatSnak(ref.snaks.P50[1])
elseif hasValue('P2093') then -- author (string type)
author = wd.formatSnak(ref.snaks.P2093[1])
end
if hasValue('P123') then -- éditeur
publisher = wd.formatSnak(ref.snaks.P123[1])
end
if hasValue('P1683') then -- citation
quotation = wd.formatSnak(ref.snaks.P1683[1])
end
if hasValue('P577') then -- date de publication
publishdate = wd.formatSnak(ref.snaks.P577[1])
end
if hasValue('P407') then -- langue de l'œuvre
local id = wd.getId(ref.snaks.P407[1])
publishlang = getLangCode(id)
end
s = modules.cite.lienWeb{titre = title, url = url, auteur = author, editeur = publisher, langue = publishlang, ['en ligne le'] = publishdate, ['consulté le'] = accessdate, ['citation'] = quotation, ['description'] = description}
table.insert(hashes, ref.hash)
table.insert(refs, s)
elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then
s = wd.formatSnak(ref.snaks.P854[1], {text = "-"})
table.insert(hashes, ref.snaks.P854[1].hash)
table.insert(refs, s)
end
end
if #refs > 0 then
if #hashes == #refs then
return refs, hashes
end
return refs
end
end
function wd.sourceStr(sources, hashes)
if not sources or (#sources == 0) then
return nil
end
local useHashes = hashes and #hashes == #sources
for i, j in ipairs(sources) do
local refArgs = {name = 'ref', content = j}
if useHashes and hashes[i] ~= '-' then
refArgs.args = {name = 'wikidata-' .. hashes[i]}
end
sources[i] = mw.getCurrentFrame():extensionTag(refArgs)
end
return table.concat(sources, '<sup class="reference cite_virgule">,</sup>')
end
function wd.getDataValue(snak, params)
if not params then
params = {}
end
local speciallabels = params.speciallabels -- parfois on a besoin de faire une liste d'éléments pour lequel le libellé doit être changé, pas très pratique d'utiliser une fonction pour ça
if snak.snaktype ~= 'value' then
return nil
end
local datatype = snak.datatype
local value = snak.datavalue.value
local displayformat = params.displayformat
if type(displayformat) == 'function' then
return displayformat(snak, params)
end
if datatype == 'wikibase-item' then
return wd.formatEntity(wd.getId(snak), params)
end
if datatype == 'url' then
if params.displayformat == 'raw' then
return value
else
return modules.weblink.makelink(value, params.text)
end
end
if datatype == 'math' then
return mw.getCurrentFrame():extensionTag( "math", value)
end
if datatype == 'tabular-data' then
return mw.ustring.sub(value, 6, 100) -- returns the name of the file, without the "Data:" prefix
end
if (datatype == 'string') or (datatype == 'external-id') or (datatype == 'commonsMedia') then -- toutes les données de type string sauf "math"
if params.urlpattern then
local urlpattern = params.urlpattern
if type(urlpattern) == 'function' then
urlpattern = urlpattern(value)
end
-- encodage de l'identifiant qui se retrouve dans le path de l'URL, à l'exception des slashes parfois rencontrés, qui sont des séparateurs à ne pas encoder
local encodedValue = mw.uri.encode(value, 'PATH'):gsub('%%2F', '/')
-- les parenthèses autour du encodedValue:gsub() sont nécessaires, sinon sa 2e valeur de retour est aussi passée en argument au mw.ustring.gsub() parent
local url = mw.ustring.gsub(urlpattern, '$1', (encodedValue:gsub('%%', '%%%%')))
value = '[' .. url .. ' ' .. (params.text or value) .. ']'
end
return value
end
if datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z
if displayformat == 'raw' then
return value.time
else
local dateobject = dateObject(value, {precision = params.precision})
return objectToText(dateobject, params)
end
end
if datatype == 'globe-coordinate' then
-- retourne une table avec clés latitude, longitude, précision et globe à formater par un autre module (à changer ?)
if displayformat == 'latitude' then
return value.latitude
elseif displayformat == 'longitude' then
return value.longitude
else
local coordvalue = mw.clone( value )
coordvalue.globe = databases.globes[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack
return coordvalue -- note : les coordonnées Wikidata peuvent être utilisée depuis Module:Coordinates. Faut-il aussi autoriser à appeler Module:Coordiantes ici ?
end
end
if datatype == 'quantity' then -- todo : gérer les paramètres précision
local amount, unit = value.amount, value.unit
if unit then
unit = unit:match('Q%d+')
end
if not unit then
unit = 'dimensionless'
end
local raw
if displayformat == "raw" then
raw = true
end
return modules.formatNum.displayvalue(amount, unit,
{targetunit = params.targetunit, raw = raw, rounding = params.rounding, showunit = params.showunit or 'short', showlink = params.showlink}
)
end
if datatype == 'monolingualtext' then
if value.language == defaultlang then
return value.text
else
return modules.langmodule.langue({value.language, value.text, nocat=true})
end
end
return formatError('unknown-datavalue-type' )
end
function wd.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation
local claims = args.claims
local cat = ''
if not claims then
claims = wd.getClaims(args)
end
if not claims or claims == {} then
return {}, {}, cat
end
if args.removedupesdate and (args.removedupesdate ~= '-') then
claims, cat = removeDupesDate(claims, args.removedupesdate)
end
local props = {} -- liste des propriétés associété à chaque string pour catégorisation et linkback
for i, j in pairs(claims) do
claims[i] = wd.formatStatement(j, args)
table.insert(props, j.mainsnak.property)
end
if args.removedupes and (args.removedupes ~= '-') then
claims = wd.addNewValues({}, claims) -- devrait aussi supprimer de props celles qui ne sont pas utilisées
end
return claims, props, cat
end
function wd.getQualifiers(statement, qualifs, params)
if not statement.qualifiers then
return nil
end
local vals = {}
if type(qualifs) == 'string' then
qualifs = wd.splitStr(qualifs)
end
for i, j in pairs(qualifs) do
if statement.qualifiers[j] then
for k, l in pairs(statement.qualifiers[j]) do
table.insert(vals, l)
end
end
end
if #vals == 0 then
return nil
end
return vals
end
function wd.getFormattedQualifiers(statement, qualifs, params)
if not params then params = {} end
local qualiftable = wd.getQualifiers(statement, qualifs)
if not qualiftable then
return nil
end
qualiftable = wd.filterClaims(qualiftable, params) or {}
for i, j in pairs(qualiftable) do
qualiftable[i] = wd.formatSnak(j, params)
end
return modules.linguistic.conj(qualiftable, params.conjtype)
end
function wd.showQualifiers(str, statement, args)
local qualifs = args.showqualifiers
if not qualifs then
return str -- or error ?
end
if type(qualifs) == 'string' then
qualifs = wd.splitStr(qualifs)
end
local qualifargs = args.qualifargs or {}
-- formatage des qualificatifs = args commençant par "qualif", ou à défaut, les mêmes que pour la valeur principale
qualifargs.displayformat = args.qualifdisplayformat or args.displayformat
qualifargs.labelformat = args.qualiflabelformat or args.labelformat
qualifargs.labelformat2 = args.qualiflabelformat2 or args.labelformat2
qualifargs.link = args.qualiflink or args.link
qualifargs.linktopic = args.qualiflinktopic or args.linktopic
qualifargs.conjtype = args.qualifconjtype
qualifargs.precision = args.qualifprecision
qualifargs.targetunit = args.qualiftargetunit
qualifargs.defaultlink = args.qualifdefaultlink or args.defaultlink
qualifargs.defaultlinkquery = args.qualifdefaultlinkquery or args.defaultlinkquery
local formattedqualifs
if args.qualifformat and type (args.qualifformat) == 'function' then
formattedqualifs = args.qualifformat(statement, qualifs, qualifargs)
else
formattedqualifs = wd.getFormattedQualifiers(statement, qualifs, qualifargs)
end
if formattedqualifs and formattedqualifs ~= "" then
str = str .. " (" .. formattedqualifs .. ")"
end
return str
end
function wd.formatSnak( snak, params )
if not params then params = {} end -- pour faciliter l'appel depuis d'autres modules
if snak.snaktype == 'somevalue' then
return unknownValue(snak, params.unknownlabel)
elseif snak.snaktype == 'novalue' then
return noValue(params.novaluelabel)
elseif snak.snaktype == 'value' then
return wd.getDataValue( snak, params)
else
return formatError( 'unknown-snak-type' )
end
end
function wd.formatStatement( statement, args ) -- FONCTION A REORGANISER (pas très lisible)
if not args then
args = {}
end
if not statement.type or statement.type ~= 'statement' then
return formatError( 'unknown-claim-type' )
end
local prop = statement.mainsnak.property
local str
-- special displayformat f
if args.statementformat and (type(args.statementformat) == 'function') then
str = args.statementformat(statement, args)
elseif (statement.mainsnak.datatype == 'time') and (statement.mainsnak.dateformat ~= '-') then
if args.displayformat == 'raw' and statement.mainsnak.snaktype == 'value' then
str = statement.mainsnak.datavalue.value.time
else
str = wd.getFormattedDate(statement, args)
end
elseif args.showonlyqualifier and (args.showonlyqualifier ~= '') then
str = wd.getFormattedQualifiers(statement, args.showonlyqualifier, args)
if not str then
return nil
end
if args.addstandardqualifs ~= '-' then
str = wd.addStandardQualifs(str, statement)
end
else
str = wd.formatSnak( statement.mainsnak, args )
if (args.addstandardqualifs ~= '-') and (args.displayformat ~= 'raw') then
str = wd.addStandardQualifs(str, statement)
end
end
-- ajouts divers
if args.showlang == true then
local indicateur = showLang(statement, args.maxLang)
if indicateur then
str = indicateur .. ' ' .. str
end
end
if args.showqualifiers then
str = wd.showQualifiers(str, statement, args)
end
if args.showdate then -- when "showdate and chronosort are both set, date retrieval is performed twice
local period = wd.getFormattedDate(statement, args, "-") -- 3 arguments indicate the we should not use additional qualifiers, already added by wd.formatStatement
if period then
str = str .. " <small>(" .. period .. ")</small>"
end
end
if args.showsource and args.showsource ~= '-' then
local sources, hashes = wd.getReferences(statement)
if sources then
local source = wd.sourceStr(sources, hashes)
if source then
str = str .. source
end
end
end
return str
end
function wd.addLinkBack(str, id, property)
if not id or id == '' then
id = wd.getEntityIdForCurrentPage()
end
if not id then
return str
end
if type(property) == 'table' then
property = property[1]
end
id = wd.entityId(id)
local class = ''
if property then
class = 'wd_' .. string.lower(property)
end
local icon = '[[File:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]'
local title = wd.translate('see-wikidata-value')
local url = mw.uri.fullUrl('d:' .. id, 'uselang=fr')
url.fragment = property -- ajoute une #ancre si paramètre "property" défini
url = tostring(url)
local v = mw.html.create('span')
:addClass(class)
:wikitext(str)
:tag('span')
:addClass('noprint wikidata-linkback')
:wikitext(icon:format(title, url))
:allDone()
return tostring(v)
end
function wd.addRefAnchor(str, id)
--[[
Insère une ancre pour une référence générée à partir d'un élément wd.
L'id Wikidata sert d'identifiant à l'ancre, à utiliser dans les modèles type "harvsp"
--]]
return tostring(
mw.html.create('span')
:attr('id', id)
:attr('class', "ouvrage")
:wikitext(str)
)
end
--=== FUNCTIONS USING AN ENTITY AS ARGUMENT ===
local function formatStatementsGrouped(args, type)
-- regroupe les affirmations ayant la même valeur en mainsnak, mais des qualificatifs différents
-- (seulement pour les propriétés de type élément)
local claims = wd.getClaims(args)
if not claims then
return nil
end
local groupedClaims = {}
-- regroupe les affirmations par valeur de mainsnak
local function addClaim(claim)
local id = wd.getMainId(claim)
for i, j in pairs(groupedClaims) do
if (j.id == id) then
table.insert(groupedClaims[i].claims, claim)
return
end
end
table.insert(groupedClaims, {id = id, claims = {claim}})
end
for i, claim in pairs(claims) do
addClaim(claim)
end
local stringTable = {}
-- instructions ad hoc pour les paramètres concernant la mise en forme d'une déclaration individuelle
local funs = {
{param = "showqualifiers", fun = function(str, claims)
local qualifs = {}
for i, claim in pairs(claims) do
local news = wd.getFormattedQualifiers(claim, args.showqualifiers, args)
if news then
table.insert(qualifs, news)
end
end
local qualifstr = modules.linguistic.conj(qualifs, wd.translate("qualif-separator"))
if qualifstr and qualifstr ~= "" then
str = str .. " (" .. qualifstr .. ")"
end
return str
end
},
{param = "showdate", fun = function(str, claims)
-- toutes les dates sont regroupées à l'intérieur des mêmes parenthèses ex "médaille d'or (1922, 1924)"
local dates = {}
for i, statement in pairs(claims) do
local s = wd.getFormattedDate(statement, args, true)
if statement then table.insert(dates, s) end
end
local datestr = modules.linguistic.conj(dates)
if datestr and datestr ~= "" then
str = str .. " <small>(" .. datestr .. ")</small>"
end
return str
end
},
{param = "showsource", fun = function(str, claims)
-- les sources sont toutes affichées au même endroit, à la fin
-- si deux affirmations ont la même source, on ne l'affiche qu'une fois
local sources = {}
local hashes = {}
local function dupeRef(old, new)
for i, j in pairs(old) do
if j == new then
return true
end
end
end
for i, claim in pairs(claims) do
local refs, refHashes = wd.getReferences(claim)
if refs then
for i, j in pairs(refs) do
if not dupeRef(sources, j) then
table.insert(sources, j)
local hash = (refHashes and refHashes[i]) or '-'
table.insert(hashes, hash)
end
end
end
end
return str .. (wd.sourceStr(sources, hashes) or "")
end
}
}
for i, group in pairs(groupedClaims) do -- bricolage pour utiliser les arguments de formatStatements
local str = wd.formatEntity(group.id, args)
if not str then
str = '???' -- pour éviter erreur Lua si formatEntity a retourné nil
end
for i, fun in pairs(funs) do
if args[fun.param] then
str = fun.fun(str, group.claims, args)
end
end
table.insert(stringTable, str)
end
args.valuetable = stringTable
return wd.formatStatements(args)
end
function wd.formatStatements( args )--Format statement and concat them cleanly
if args.value == '-' then
return nil
end
-- If a value is already set: use it, except if it's the special value {{WD}} (use wikidata)
if args.value and args.value ~= '' then
local valueexpl = wd.translate("activate-query")
if args.value ~= valueexpl then
return args.value
end
-- There is no value set, and args.expl disables wikidata on empty values
elseif args.expl then
return nil
end
if args.grouped and args.grouped ~= '' then
args.grouped = false
return formatStatementsGrouped(args)
end
local valuetable = args.valuetable -- dans le cas où les valeurs sont déjà formatées
local props -- les propriétés réellement utilisées (dans certains cas, ce ne sont pas toutes celles de args.property
local cat = ''
if not valuetable then -- cas le plus courant
valuetable, props, cat = wd.stringTable(args)
end
if args.ucfirst == '-' and args.conjtype == 'new line' then args.conjtype = 'lowercase new line' end
local str = modules.linguistic.conj(valuetable, args.conjtype)
if not str then
return args.default
end
if not props then
props = wd.splitStr(args.property)[1]
end
if args.ucfirst ~= '-' then
str = modules.linguistic.ucfirst(str)
end
if args.addcat and (args.addcat ~= '-') then
str = str .. wd.addTrackingCat(props) .. cat
end
if args.linkback and (args.linkback ~= '-') then
str = wd.addLinkBack(str, args.entity, props)
end
if args.returnnumberofvalues then
return str, #valuetable
end
return str
end
function wd.formatAndCat(args)
if not args then
return nil
end
args.linkback = args.linkback or true
args.addcat = true
if args.value then -- do not ignore linkback and addcat, as formatStatements do
if args.value == '-' then
return nil
end
local val = args.value .. wd.addTrackingCat(args.property)
val = wd.addLinkBack(val, args.entity, args.property)
return val
end
return wd.formatStatements( args )
end
function wd.getTheDate(args)
local claims = wd.getClaims(args)
if not claims then
return nil
end
local formattedvalues = {}
for i, j in pairs(claims) do
local v = wd.getFormattedDate(j, args)
if v then
table.insert(formattedvalues, v )
end
end
local val = modules.linguistic.conj(formattedvalues)
if not val then
return nil
end
if args.addcat == true then
val = val .. wd.addTrackingCat(args.property)
end
val = wd.addLinkBack(val, args.entity, args.property)
return val
end
function wd.keyDate (event, item, params)
params = params or {}
params.entity = item
if type(event) == 'table' then
for i, j in pairs(event) do
params.targetvalue = nil -- réinitialisation barbare des paramètres modifiés
local s = wd.keyDate(j, item, params)
if s then
return s
end
end
elseif type(event) ~= 'string' then
return formatError('invalid-datatype', type(event), 'string')
elseif string.sub(event, 1, 1) == 'Q' then -- on demande un élément utilisé dans P:P793 (événement clé)
params.property = 'P793'
params.targetvalue = event
params.addcat = params.addcat or true
return wd.getTheDate(params)
elseif string.sub(event, 1, 1) == 'P' then -- on demande une propriété
params.property = event
return wd.formatAndCat(params)
else
return formatError('invalid-entity-id', event)
end
end
function wd.mainDate(entity)
-- essaye P580/P582
local args = {entity = entity, addcat = true}
args.property = 'P580'
local startpoint = wd.formatStatements(args)
args.property = 'P582'
local endpoint = wd.formatStatements(args)
local str
if (startpoint or endpoint) then
str = modules.formatDate.daterange(startpoint, endpoint, params)
str = wd.addLinkBack(str, entity, 'P582')
return str
end
-- défaut : P585
args.property = {'P585', 'P571'}
args.linkback = true
return wd.formatStatements(args)
end
-- ==== Fonctions sur le genre ====
function wd.getgender(id)
local vals = {
['Q6581072'] = 'f', -- féminin
['Q6581097'] = 'm', -- masculin
['Q1052281'] = 'f', -- femme transgenre
['Q2449503'] = 'm', -- homme transgenre
['Q17148251'] = 'f', -- en:Travesti (gender identity)
['Q43445'] = 'f', -- femelle
['Q44148'] = 'm', -- mâle
default = '?'
}
local gender = wd.formatStatements{entity = id, property = 'P21', displayformat = 'raw', numval = 1}
return vals[gender] or vals.default
end
-- catégories de genre/nombre
function wd.getgendernum(claims)
local personid, gender
local anym = false
local anyf = false
local anyunknown = false
for i, claim in pairs(claims) do
local snak = claim.mainsnak or claim
if(snak.snaktype == 'value') and (snak.datatype == 'wikibase-item') then
personid = wd.getId(snak)
gender = wd.getgender(personid)
anym = anym or (gender == 'm')
anyf = anyf or (gender == 'f')
anyunknown = anyunknown or (gender == '?')
else
anyunknown = true
end
end
local gendernum
if #claims > 1 then
if anyunknown then
gendernum = 'p'
else
if anym and not anyf then gendernum = 'mp' end
if anyf and not anym then gendernum = 'fp' end
if anym and anyf then gendernum = 'mixtep' end
end
else
gendernum = 's'
if anym then gendernum = 'ms' end
if anyf then gendernum = 'fs' end
end
return gendernum
end
-- récupération des libellés genrés de Wikidata
function wd.genderedlabel(id, labelgender)
local label
if not labelgender then return nil end
if labelgender == 'f' then -- femme : chercher le libellé dans P2521 (libellé féminin)
label = wd.formatStatements{entity = id, property = 'P2521', isinlang = 'ht', numval = 1, ucfirst = '-'}
elseif labelgender == 'm' then -- homme : chercher le libellé dans P3321 (libellé masculin)
label = wd.formatStatements{entity = id, property = 'P3321', isinlang = 'ht', numval = 1, ucfirst = '-'}
end
if not label then
label = wd.getLabel(id)
end
return label
end
-- === FUNCTIONS FOR TRANSITIVE PROPERTIES ===
function wd.getIds(item, query)
query.excludespecial = true
query.displayformat = 'raw'
query.entity = item
query.addstandardqualifs = '-'
return wd.stringTable(query)
end
-- recursively adds a list of qid to an existing list, based on the results of a query
function wd.addVals(list, query, maxdepth, maxnodes, stopval)
maxdepth = tonumber(maxdepth) or 10
maxnodes = tonumber(maxnodes) or 100
if (maxdepth < 0) then
return list
end
if stopval and wd.isHere(list, stopval) then
return list
end
local origsize = #list
for i = 1, origsize do
-- tried a "checkpos" param instead of starting to 1 each time, but no impact on performance
local candidates = wd.getIds(list[i], query)
list = wd.addNewValues(list, candidates, maxnodes, stopval)
if list[#list] == stopval then
return list
end
if #list >= maxnodes then
return list
end
end
if (#list == origsize) then
return list
end
return wd.addVals(list, query, maxdepth - 1, maxnodes, stopval, origsize + 1)
end
-- returns a list of items transitively matching a query (orig item is not included in the list)
function wd.transitiveVals(item, query, maxdepth, maxnodes, stopval)
maxdepth = tonumber(maxdepth) or 5
if type(query) == "string" then
query = {property = query}
end
-- récupération des valeurs
local vals = wd.getIds(item, query)
if not vals then
return nil
end
local v = wd.addVals(vals, query, maxdepth - 1, maxnodes, stopval)
if not v then
return nil
end
-- réarrangement des valeurs
if query.valorder == "inverted" then
local a = {}
for i = #v, 1, -1 do
a[#a+1] = v[i]
end
v = a
end
return v
end
-- returns true if an item is the value of a query, transitively
function wd.inTransitiveVals(searchedval, sourceval, query, maxdepth, maxnodes )
local vals = wd.transitiveVals(sourceval, query, maxdepth, maxnodes, searchedval )
if (not vals) then
return false
end
for _, val in ipairs(vals) do
if (val == searchedval) then
return true
end
end
return false
end
-- returns true if an item is a superclass of another, based on P279
function wd.isSubclass(class, item, maxdepth)
local query = {property = 'P279'}
if class == item then -- item is a subclass of itself iff it is a class
if wd.getIds(item, query) then
return true
end
return false
end
return wd.inTransitiveVals(class, item, query, maxdepth )
end
-- returns true if one of the best ranked P31 values of an item is the target or a subclass of the target
-- rank = 'valid' would seem to make sense, but it would need to check for date qualifiers as some P31 values have begin or end date
function wd.isInstance(targetclass, item, maxdepth)
maxdepth = maxdepth or 10
local directclasses = wd.transitiveVals(item, {property = 'P31'}, 1)
if not directclasses then
return false
end
for i, class in pairs(directclasses) do
if wd.isSubclass(targetclass, class, maxdepth - 1) then
return true
end
end
return false
end
-- return the first value in a transitive query that belongs to a particular class. For instance find a value of P131 that is a province of Canada
function wd.findVal(sourceitem, targetclass, query, recursion, instancedepth)
if type(query) == "string" then
query = {property = query}
end
local candidates = wd.getIds(sourceitem, query)
if candidates then
for i, j in pairs(candidates) do
if wd.isInstance(targetclass, j, instancedepth) then
return j
end
end
if not recursion then
recursion = 3
else
recursion = recursion - 1
end
if recursion < 0 then
return nil
end
for i, candidate in pairs(candidates) do
return wd.findVal(candidate, targetclass, query, recursion, instancedepth)
end
end
end
-- === VARIA ===
function wd.getDescription(entity, lang)
lang = lang or defaultlang
local description
if lang == defaultlang then
return mw.wikibase.description(qid)
end
if not entity.descriptions then
return wd.translate('no description')
end
local descriptions = entity.descriptions
if not descriptions then
return nil
end
if descriptions[lang] then
return descriptions[delang].value
end
return entity.id
end
function wd.Dump(entity)
entity = wd.getEntity(entity)
if not entity then
return formatError("entity-param-not-provided")
end
return "<pre>"..mw.dumpObject(entity).."</pre>"
end
function wd.frameFun(frame)
local args = frame.args
local funname = args[1]
table.remove(args, 1)
return wd[funname](args)
end
return wd
l680m4j62edehkk2088mwdrai6ra7wu
855595
855594
2024-11-12T16:47:43Z
BwaKajou
31668
855595
Scribunto
text/plain
--script that retrieves basic data stored in Wikidata, for the datamodel, see https://www.mediawiki.org/wiki/Extension:Wikibase_Client/Lua
local wd = {}
-- creation of a subobject to store comparison funtions, used for sorting claims
-- to be able to build more complex sorts like topological sorts
wd.compare = {}
local databases = { }
local modules = { }
local databasesNames = { -- modules de données statiques pouvant être appelés avec mw.loadData(), ne nécessitant pas require()
i18n = 'Module:Wikidata/I18n',
globes = 'Module:Wikidata/Globes',
langhierarchy = 'Module:Wikidata/Hiérarchie des langues',
langcodes = 'Module:Dictionnaire Wikidata/Codes langue', -- big, infrequently useda
invertedlangcodes = 'Module:Dictionnaire Wikidata/Codes langue/inversé'
}
local modulesNames = {
reference = 'Module:Wikidata/Références',
linguistic = 'Module:Linguistique',
datemodule = 'Module:Date',
formatDate = 'Module:Date complexe',
formatNum = 'Module:Conversion',
langmodule = 'Module:Langue',
cite = 'Module:Biblio',
weblink = 'Module:Weblink'
}
local function loadDatabase( t, key )
if databasesNames[key] then
local m = mw.loadData( databasesNames[key] )
t[key] = m
return m
end
end
local function loadModule( t, key )
if modulesNames[key] then
local m = require( modulesNames[key] )
t[key] = m
return m
end
end
setmetatable( databases, { __index = loadDatabase } )
setmetatable( modules, { __index = loadModule } ) -- ainsi le require() sera opéré seulement si nécessaire par modules.(nom du module)
local datequalifiers = {'P585', 'P571', 'P580', 'P582', 'P1319', 'P1326'}
-- === I18n ===
local defaultlang = mw.getContentLanguage():getCode()
function wd.translate(str, rep1, rep2)
str = databases.i18n[str] or str
if rep1 and (type (rep1) == 'string') then
str = str:gsub('$1', rep1)
end
if rep2 and (type (rep2) == 'string')then
str = str:gsub('$2', rep2)
end
return str
end
local function addCat(cat, sortkey)
if sortkey then
return '[[Category:' .. cat .. '|' .. sortkey .. ']]'
end
return '[[Category:' .. cat .. ']]'
end
local function formatError( key , category, debug)
if debug then
return error(databases.i18n[key] or key)
end
if category then
return addCat(category, key)
else
return addCat('cat-unsorted-issue', key)
end
end
--
function wd.isSpecial(snak)
return (snak.snaktype ~= 'value')
end
function wd.getId(snak)
if (snak.snaktype == 'value') then
return 'Q' .. snak.datavalue.value['numeric-id']
end
end
function wd.getNumericId(snak)
if (snak.snaktype == 'value') then
return snak.datavalue.value['numeric-id']
end
end
function wd.getMainId(claim)
return wd.getId(claim.mainsnak)
end
function wd.entityId(entity)
if type(entity) == 'string' then
return entity
elseif type(entity) == 'table' then
return entity.id
end
end
function wd.getEntityIdForCurrentPage()
return mw.wikibase.getEntityIdForCurrentPage()
end
-- function that returns true if the "qid" parameter is the qid
-- of the item that is linked to the calling page
function wd.isPageOfQId(qid)
local self_id = mw.wikibase.getEntityIdForCurrentPage()
return self_id ~= nil and qid == self_id
end
function wd.getEntity( val )
if type(val) == 'table' then
return val
end
if val == '-' then
return nil
end
if val == '' then
val = nil
end
return mw.wikibase.getEntity(val)
end
function wd.splitStr(val) -- transforme en table les chaînes venant du Wikitexte qui utilisent des virgules de séparation
if type(val) == 'string' then
val = mw.text.split(val, ",")
end
return val
end
function wd.isHere(searchset, val, matchfunction)
for i, j in pairs(searchset) do
if matchfunction then
if matchfunction(val,j) then
return true
end
else
if val == j then
return true
end
end
end
return false
end
local function wikidataLink(entity)
local name =':d:'
if type(entity) == 'string' then
if entity:match("P[0-9+]") then
entity = "Property:" .. entity
end
return name .. entity
elseif type(entity) == 'table' then
if entity["tip"] == "property" then
name = ":d:Property:"
end
return name .. entity.id
elseif type(entity) == nil then
return formatError('entity-not-found')
end
end
function wd.siteLink(entity, project, lang)
-- returns 3 values: a sitelink (with the relevant prefix) a project name and a language
lang = lang or defaultlang
if (type(project) ~= 'string') then
project = 'wiki'
end
project = project:lower()
if project == 'wikipedia' then
project = 'wiki'
end
if type(entity) == 'string' and (project == 'wiki') and ( (not lang or lang == defaultlang) ) then -- évite de charger l'élément entier
local link = mw.wikibase.getSitelink(entity)
if link then
local test_redirect = mw.title.new(link) -- remplacement des redirections (retirer si trop coûteux)
if test_redirect.isRedirect and test_redirect.redirectTarget then
link = test_redirect.redirectTarget.fullText
end
end
return link, 'wiki', defaultlang
end
if project == 'wikidata' then
return wikidataLink(entity), 'wikidata'
end
local projects = {
-- nom = {préfixe sur Wikidata, préfix pour les liens sur Wikipédia, ajouter préfixe de langue}
wiki = {'wiki', nil, true}, -- wikipedia
commons = {'commonswiki', 'commons', false},
commonswiki = {'commonswiki', 'commons', false},
wikiquote = {'wikiquote', 'q', true},
wikivoyage = {'wikivoyage', 'voy', true},
wikibooks = {'wikibooks', 'b', true},
wikinews = {'wikinews', 'n', true},
wikiversity = {'wikiversity', 'v', true},
wikisource = {'wikisource', 's', true},
wiktionary = {'wiktionary', 'wikt', true},
specieswiki = {'specieswiki', 'species', false},
metawiki = {'metawiki', 'm', false},
incubator = {'incubator', 'incubator', false},
outreach = {'outreach', 'outreach', false},
mediawiki = {'mediawiki', 'mw', false}
}
local entityid = entity.id or entity
local projectdata = projects[project:lower()]
if not projectdata then -- defaultlink might be in the form "dewiki" rather than "project: 'wiki', lang: 'de' "
for k, v in pairs(projects) do
if project:match( k .. '$' )
and mw.language.isKnownLanguageTag(project:sub(1, #project-#k))
then
lang = project:sub(1, #project-#k)
project = project:sub(#lang + 1, #project)
projectdata = projects[project]
break
end
end
if not mw.language.isKnownLanguageTag(lang) then
return --formatError('invalid-project-code', projet or 'nil')
end
end
if not projectdata then
return -- formatError('invalid-project-code', projet or 'nil')
end
local linkcode = projectdata[1]
local prefix = projectdata[2]
local multiversion = projectdata[3]
if multiversion then
linkcode = lang .. linkcode
end
local link = mw.wikibase.getSitelink(entityid, linkcode)
if not link then
return nil
end
if prefix then
link = prefix .. ':' .. link
end
if multiversion then
link = ':' .. lang .. ':' .. link
end
return link, project, lang
end
-- add new values to a list, avoiding duplicates
function wd.addNewValues(olditems, newitems, maxnum, stopval)
if not newitems then
return olditems
end
for _, qid in pairs(newitems) do
if stopval and (qid == stopval) then
table.insert(olditems, qid)
return olditems
end
if maxnum and (#olditems >= maxnum) then
return olditems
end
if not wd.isHere(olditems, qid) then
table.insert(olditems, qid)
end
end
return olditems
end
--=== FILTER CLAIMS ACCORDING TO VARIOUS CRITERIA : FUNCTION GETCLAIMS et alii ===
local function notSpecial(claim)
local type
if claim.mainsnak ~= nil then
type = claim.mainsnak.snaktype
else
-- condition respectée quand showonlyqualifier est un paramètre renseigné
-- dans ce cas, claim n'est pas une déclaration entière, mais UNE snak qualifiée du main snak
type = claim.snaktype
end
return type == 'value'
end
local function hasTargetValue(claim, targets) -- retourne true si la valeur est dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
return wd.isHere(targets, id) or wd.isSpecial(claim.mainsnak)
end
local function excludeValues(claim, values) -- true si la valeur n'est pas dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetValue(claim, values) )
end
local function hasTargetClass(claim, targets, maxdepth) -- retourne true si la valeur est une instance d'une classe dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
local maxdepth = maxdepth or 10
local matchfunction = function(value, target) return wd.isInstance(target, value, maxdepth) end
return wd.isHere(targets, id, matchfunction) or wd.isSpecial(claim.mainsnak)
end
local function excludeClasses(claim, classes) -- true si la valeur n'est pas une instance d'une classe dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetClass(claim, classes, maxdepth) )
end
local function hasTargetSuperclass(claim, targets, maxdepth) -- retourne true si la valeur est une sous-classe d'une classe dans la liste des target, ou si c'est une valeur spéciale filtrée séparément par excludespecial
local id = wd.getMainId(claim)
local targets = wd.splitStr(targets)
local maxdepth = maxdepth or 10
local matchfunction = function(value, target) return wd.isSubclass(target, value, maxdepth) end
return wd.isHere(targets, id, matchfunction) or wd.isSpecial(claim.mainsnak)
end
local function excludeSuperclasses(claim, classes) -- true si la valeur n'est pas une sous-classe d'une classe dans la liste, ou si c'est une valeur spéciale (filtrée à part par excludespecial)
return wd.isSpecial(claim.mainsnak) or not ( hasTargetSuperclass(claim, classes, maxdepth) )
end
local function bestRanked(claims)
if not claims then
return nil
end
local preferred, normal = {}, {}
for i, j in pairs(claims) do
if j.rank == 'preferred' then
table.insert(preferred, j)
elseif j.rank == 'normal' then
table.insert(normal, j)
end
end
if #preferred > 0 then
return preferred
else
return normal
end
end
local function withRank(claims, target)
if target == 'best' then
return bestRanked(claims)
end
local newclaims = {}
for pos, claim in pairs(claims) do
if target == 'valid' then
if claim.rank ~= 'deprecated' then
table.insert(newclaims, claim)
end
elseif claim.rank == target then
table.insert(newclaims, claim)
end
end
return newclaims
end
function wd.hasQualifier(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = wd.splitStr(acceptedqualifs)
acceptedvals = wd.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if wd.getId(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
function wd.hasQualifierNumber(claim, acceptedqualifs, acceptedvals, excludequalifiervalues)
local claimqualifs = claim.qualifiers
if (not claimqualifs) then
return false
end
acceptedqualifs = wd.splitStr(acceptedqualifs)
acceptedvals = wd.splitStr( acceptedvals)
local function ok(qualif) -- vérification pour un qualificatif individuel
if not claimqualifs[qualif] then
return false
end
if not (acceptedvals) then -- si aucune valeur spécifique n'est demandée, OK
return true
end
for i, wanted in pairs(acceptedvals) do
for j, actual in pairs(claimqualifs[qualif]) do
if mw.wikibase.renderSnak(actual) == wanted then
return true
end
end
end
end
for i, qualif in pairs(acceptedqualifs) do
if ok(qualif) then
return true
end
end
return false
end
local function hasSource(claim, targetsource, sourceproperty)
sourceproperty = sourceproperty or 'P248'
if targetsource == "-" then
return true
end
if (not claim.references) then return
false
end
local candidates = claim.references[1].snaks[sourceproperty] -- les snaks utilisant la propriété demandée
if (not candidates) then
return false
end
if (targetsource == "any") then -- si n'importe quelle valeur est acceptée tant qu'elle utilise en ref la propriété demandée
return true
end
targetsource = wd.splitStr(targetsource)
for _, source in pairs(candidates) do
local s = wd.getId(source)
for i, target in pairs(targetsource) do
if s == target then return true end
end
end
return false
end
local function excludeQualifier(claim, qualifier, qualifiervalues)
return not wd.hasQualifier(claim, qualifier, qualifiervalues)
end
function wd.hasDate(claim)
if not claim then
return false --error() ?
end
if wd.getDateFromQualif(claim, 'P585') or wd.getDateFromQualif(claim, 'P580') or wd.getDateFromQualif(claim, 'P582') then
return true
end
return false
end
local function hasLink(claim, site, lang)
if (claim.mainsnak.snaktype ~= 'value') then -- ne pas supprimer les valeurs spéciales, il y a une fonction dédiée pour ça
return true
end
local id = wd.getMainId(claim)
local link = wd.siteLink(id, site, lang)
if link then
return true
end
end
local function isInLanguage(claim, lang) -- ne fonctionne que pour les monolingualtext / étendre aux autres types en utilisant les qualifiers ?
if type(lang) == 'table' then -- si c'est une table de language séparées par des virgules, on les accepte toutes
for i, l in pairs(lang) do
local v = isInLanguage(claim, l)
if v then
return true
end
end
end
if type(lang) ~= ('string') then
return --?
end
if (lang == '-') then
return true
end
if (lang == 'locallang') then
lang = mw.getContentLanguage():getCode()
end
-- pour les monolingual text
local snak = claim.mainsnak or claim
if snak.snaktype == 'value' and snak.datavalue.type == 'monolingualtext' then
if snak.datavalue.value.language == lang then
return true
end
return false
end
-- pour les autres types de données : recherche dans les qualificatifs
if (lang == 'ht') then
lang = 'Q33491'
elseif (lang == 'en') then
lang = 'Q1860'
else
lang = databases.invertedlangcodes[lang]
end
if claim.qualifiers and claim.qualifiers.P407 then
if wd.hasQualifier(claim, {'P407'}, {lang}) then
return true
else
return false
end
end
return true -- si on ne ne sait pas la langue, on condière que c'est bon
end
local function firstVals(claims, numval) -- retourn les numval premières valeurs de la table claims
local numval = tonumber(numval) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
while (#claims > numval) do
table.remove(claims)
end
return claims
end
local function lastVals(claims, numval2) -- retourn les valeurs de la table claims à partir de numval2
local numval2 = tonumber(numval2) or 0 -- raise a error if numval is not a positive integer ?
if not claims then
return nil
end
for i=1,numval2 do
table.remove(claims, 1)
end
return claims
end
-- retourne les valeurs de la table claims à partir de removedupesdate,
-- sans les dates en doublons avec conversion entre les calendrier julien et grégorien,
-- ou uniquement en catégorisant si le paramètre removedupesdate est égale à 'cat'
local function removeDupesDate(claims, removedupesdate)
if not claims or #claims < 2 then
return claims, ''
end
local cat = ''
local newClaims = {}
local newIsos = {}
local function findIndex(searchset, val) -- similaire à wd.isHere mais retourne l'index de la valeur trouvée
for i, j in pairs(searchset) do
if val == j then
return i
end
end
return -1
end
for _, claim in ipairs( claims ) do
local snak = claim.mainsnak or claim
if (snak.snaktype == 'value') and (snak.datatype == 'time') and snak.datavalue.value.precision >= 11 then -- s'il s'agit d'un time et que la précision est au moins l'année
local iso = snak.datavalue.value.time
_, _, iso = string.find(iso, "(+%d+-%d+-%d+T)")
local deleteIfDuplicate = false
if snak.datavalue.value.calendarmodel == 'http://www.wikidata.org/entity/Q1985727' then -- si la date est grégorienne
if modules.formatDate.before('+1582', iso) then -- si avant 1582 on calcule la date julienne
_, _, y, m, d = string.find(iso, "+(%d+)-(%d+)-(%d+)T")
y, m , d = modules.datemodule.gregorianToJulian(y, m , d)
if m < 10 then m = '0' .. m end
if d < 10 then d = '0' .. d end
iso = '+' .. y .. '-' .. m .. '-' .. d .. 'T'
deleteIfDuplicate = true
end
local index = findIndex(newIsos, iso)
if index >= 0 then -- si la date est déjà présente
cat = cat .. '[[Catégorie:Article avec des dates identiques venant de wikidata dans le code de l\'infobox]]'
if removedupesdate == "cat" then -- ne faire que catégoriser
table.insert(newIsos, iso)
table.insert(newClaims, claim)
elseif not deleteIfDuplicate then -- supprimer l'autre date si la date courante n'a pas été convertie
newClaims[index] = claim
end -- sinon supprimer la date courante
else -- pas de doublon
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
elseif snak.datavalue.value.calendarmodel == 'http://www.wikidata.org/entity/Q1985786' then -- si date julienne
if not modules.formatDate.before('+1582', iso) then -- si après 1582 on calcule la date grégorienne
_, _, y, m, d = string.find(iso, "+(%d+)-(%d+)-(%d+)T")
y, m , d = modules.datemodule.julianToGregorian(y, m , d)
if m < 10 then m = '0' .. m end
if d < 10 then d = '0' .. d end
iso = '+' .. y .. '-' .. m .. '-' .. d .. 'T'
deleteIfDuplicate = true
end
local index = findIndex(newIsos, iso)
if index >= 0 then -- si date déjà présente
cat = cat .. '[[Catégorie:Article avec des dates identiques venant de wikidata dans le code de l\'infobox]]'
if removedupesdate == "cat" then -- ne faire que catégoriser
table.insert(newIsos, iso)
table.insert(newClaims, claim)
elseif not deleteIfDuplicate then -- supprimer l'autre date si la date courante n'a pas été convertie
newClaims[index] = claim
end -- sinon supprimer la date courante
else -- pas de doublon
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
else -- autre calendrier
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
else -- précision insuffisante
table.insert(newIsos, iso)
table.insert(newClaims, claim)
end
end
return newClaims, cat
end
local function timeFromQualifs(claim, qualifs)
local claimqualifs = claim.qualifiers
if not claimqualifs then
return nil
end
for i, qualif in ipairs(qualifs or datequalifiers) do
local vals = claimqualifs[qualif]
if vals and (vals[1].snaktype == 'value') then
return vals[1].datavalue.value.time, vals[1].datavalue.value.precision
end
end
end
local function atDate(claim, mydate)
if mydate == "today" then
mydate = os.date("!%Y-%m-%dT%TZ")
end
-- determines required precision depending on the atdate format
local d = mw.text.split(mydate, "-")
local myprecision
if d[3] then
myprecision = 11 -- day
elseif d[2] then
myprecision = 10 -- month
else
myprecision = 9 -- year
end
-- with point in time
local d, storedprecision = timeFromQualifs(claim, {'P585'})
if d then
return modules.formatDate.equal(mydate, d, math.min(myprecision, storedprecision))
end
-- with start or end date -- TODO: precision
local mindate = timeFromQualifs(claim, {'P580'})
local maxdate = timeFromQualifs(claim, {'P582'})
if modules.formatDate.before(mydate, mindate) and modules.formatDate.before(maxdate, mydate) then
return true
end
return false
end
local function check(claim, condition)
if type(condition) == 'function' then -- cas standard
return condition(claim)
end
return formatError('invalid type', 'function', type(condition))
end
local function minPrecision(claim, minprecision)
local snak
if claim.qualifiers then -- si une date est donnée en qualificatif, c'est elle qu'on utilise de préférence au mainsnak
for i, j in ipairs(datequalifiers) do
if claim.qualifiers[j] then
snak = claim.qualifiers[j][1]
break
end
end
end
if not snak then
snak = claim.mainsnak or claim
end
if (snak.snaktype == 'value') and (snak.datatype == 'time') and (snak.datavalue.value.precision < minprecision) then
return false
end
return true
end
function wd.sortClaims(claims, sorttype)
if not claims then
return nil
end
if wd.isHere({'chronological', 'order', 'inverted', 'age', 'ageinverted'}, sorttype) then
return wd.chronoSort(claims, sorttype)
elseif sorttype == 'ascending' then
return wd.quantitySort(claims)
elseif sorttype == 'descending' then
return wd.quantitySort(claims, true)
elseif type(sorttype) == 'function' then
table.sort(claims, sorttype)
return claims
elseif type(sorttype) == 'string' and sorttype:sub(1, 1) == 'P' then
return wd.numericPropertySort(claims, sorttype)
end
return claims
end
function wd.filterClaims(claims, args) --retire de la tables de claims celles qui sont éliminés par un des filters de la table des filters
local function filter(condition, filterfunction, funargs)
if not args[condition] then
return
end
for i = #claims, 1, -1 do
if not( filterfunction(claims[i], args[funargs[1]], args[funargs[2]], args[funargs[3]]) ) then
table.remove(claims, i)
end
end
end
filter('isinlang', isInLanguage, {'isinlang'} )
filter('excludespecial', notSpecial, {} )
filter('condition', check, {'condition'} )
if claims[1] and claims[1].mainsnak then
filter('targetvalue', hasTargetValue, {'targetvalue'} )
filter('targetclass', hasTargetClass, {'targetclass'} )
filter('targetsuperclass', hasTargetSuperclass, {'targetsuperclass'} )
filter('atdate', atDate, {'atdate'} )
filter('qualifier', wd.hasQualifier, {'qualifier', 'qualifiervalue'} )
filter('qualifiernumber', wd.hasQualifierNumber, {'qualifiernumber', 'qualifiernumbervalue'} )
filter('excludequalifier', excludeQualifier, {'excludequalifier', 'excludequalifiervalue'} )
filter('withsource', hasSource, {'withsource', 'sourceproperty'} )
filter('withdate', wd.hasDate, {} )
filter('excludevalues', excludeValues, {'excludevalues'})
filter('excludeclasses', excludeClasses, {'excludeclasses'})
filter('excludesuperclasses', excludeSuperclasses, {'excludesuperclasses'})
filter('withlink', hasLink, {'withlink', 'linklang'} )
filter('minprecision', minPrecision, {'minprecision'} )
claims = withRank(claims, args.rank or 'best')
end
if #claims == 0 then
return nil
end
if args.sorttype then
claims = wd.sortClaims(claims, args.sorttype)
end
if args.numval2 then
claims = lastVals(claims, args.numval2)
end
if args.numval then
claims = firstVals(claims, args.numval)
end
return claims
end
function wd.loadEntity(entity, cache)
if type(entity) ~= 'table' then
if cache then
if not cache[entity] then
cache[entity] = mw.wikibase.getEntity(entity)
mw.log("cached")
end
return cache[entity]
else
if entity == '' or (entity == '-') then
entity = nil
end
return mw.wikibase.getEntity(entity)
end
else
return entity
end
end
function wd.getClaims( args ) -- returns a table of the claims matching some conditions given in args
if args.claims then -- if claims have already been set, return them
return args.claims
end
local properties = args.property
if type(properties) == 'string' then
properties = wd.splitStr(string.upper(args.property))
end
if not properties then
return formatError( 'property-param-not-provided' )
end
--Get entity
local entity = args.entity
if type(entity) == 'string' then
if entity == '' then
entity = nil
end
elseif type(entity) == 'table' then
entity = entity.id
end
if (not entity) then
entity = mw.wikibase.getEntityIdForCurrentPage()
end
if (not entity) or (entity == '-') or (entity == wd.translate('somevalue')) or (entity == modules.linguistic.ucfirst(wd.translate('somevalue'))) then
return nil
end
if args.labelformat and args.labelformat == 'gendered' then
local longgender = {m = 'male', f = 'female'}
args.labelformat = longgender[wd.getgender(entity)]
end
local claims = {}
if #properties == 1 then
claims = mw.wikibase.getAllStatements(entity, properties[1]) -- do not use mw.wikibase.getBestStatements at this stage, as it may remove the best ranked values that match other criteria in the query
else
for i, prop in ipairs(properties) do
local newclaims = mw.wikibase.getAllStatements(entity, prop)
if newclaims and #newclaims > 0 then
for j, claim in ipairs(newclaims) do
table.insert(claims, claim)
end
end
end
end
if (not claims) or (#claims == 0) then
return nil
end
return wd.filterClaims(claims, args)
end
--=== ENTITY FORMATTING ===
function wd.getLabel(entity, lang1, lang2)
if (not entity) then
return nil -- ou option de gestion des erreurs ?
end
entity = entity.id or ( type(entity) == "string" and entity)
if not(type(entity) == 'string') then return nil end
lang1 = lang1 or defaultlang
local str, lang --str : texte rendu, lang : langue de celui-ci
if lang1 == defaultlang then -- le plus économique
str, lang = mw.wikibase.getLabelWithLang(entity) -- le libellé peut être en français ou en anglais
else
str = mw.wikibase.getLabelByLang(entity, lang1)
if str then lang = lang1 end
end
if str and (lang == lang1) then --pas de catégorie "à traduire" si on a obtenu un texte dans la langue désirée (normalement fr)
return str
end
if lang2 then -- langue secondaire, avec catégorie "à traduire"
str2 = mw.wikibase.getLabelByLang(entity, lang2)
if str2 then
lang = lang2
str = str2
end
end
if not str then --si ni lang1, ni lang2 ni l'anglais ne sont présents, parcours de la hiérarchie des langues
for _, trylang in ipairs(databases.langhierarchy.codes) do
str = mw.wikibase.getLabelByLang(entity, trylang)
if str then
lang = trylang
break
end
end
end
if str then
local translationCat = databases.i18n['to translate']
translationCat = translationCat .. (databases.langhierarchy.cattext[lang] or '')
translationCat = addCat(translationCat)
return str, translationCat
end
end
function wd.formatEntity( entity, params )
if (not entity) then
return nil --formatError('entity-not-found')
end
local id = entity
if type(id) == 'table' then
id = id.id
end
params = params or {}
local lang = params.lang or defaultlang
local speciallabels = params.speciallabels
local displayformat = params.displayformat
local labelformat = params.labelformat
local labelformat2 = params.labelformat2
local defaultlabel = params.defaultlabel or id
local linktype = params.link
local defaultlink = params.defaultlink
local defaultlinkquery = params.defaultlinkquery
if speciallabels and speciallabels[id] then --speciallabels override the standard label + link combination
return speciallabels[id]
end
if params.displayformat == 'raw' then
return id
end
if params.labelformat == 'male' then
labelformat = function(objectid) return wd.genderedlabel(objectid, 'm') end
end
if params.labelformat == 'female' then
labelformat = function(objectid) return wd.genderedlabel(objectid, 'f') end
end
local label, translationCat
if type(labelformat) == 'function' then -- sert à des cas particuliers
label, translationCat = labelformat(entity)
end
if not label then
label, translationCat = wd.getLabel(entity, lang, params.wikidatalang)
end
if type(labelformat2) == 'function' and label then -- sert à des cas particuliers
label = labelformat2(label)
end
translationCat = translationCat or "" -- sera toujours ajoutée au résultat mais sera vide si la catégorie de maintenance n'est pas nécessaire
if not label then
if (defaultlabel == '-') then
return nil
end
local link = wd.siteLink(id, 'wikidata')
return '[[' .. link .. '|' .. id .. ']]' .. translationCat
-- si pas de libellé, on met un lien vers Wikidata pour qu'on comprenne à quoi ça fait référence
end
-- détermination du fait qu'on soit ou non en train de rendre l'élément sur la page de son article
local rendering_entity_on_its_page = wd.isPageOfQId(id)
if (linktype == '-') or rendering_entity_on_its_page then
return label .. translationCat
end
local link = wd.siteLink(entity, linktype, lang)
-- defaultlinkquery will try to link to another page on this Wiki
if (not link) and defaultlinkquery then
if type(defaultlinkquery) == 'string' then
defaultlinkquery = {property = defaultlinkquery}
end
defaultlinkquery.excludespecial = true
defaultlinkquery.entity = entity
local claims = wd.getClaims(defaultlinkquery)
if claims then
for i, j in pairs(claims) do
local id = wd.getMainId(j)
link = wd.siteLink(id, linktype, lang)
if link then
break
end
end
end
end
if link then
if link:match('^Category:') or link:match('^Catégorie:') then -- attention, le « é » est multibyte
-- lier vers une catégorie au lieu de catégoriser
link = ':' .. link
end
return '[[' .. link .. '|' .. label .. ']]' .. translationCat
end
-- if not link, you can use defaultlink: a sidelink to another Wikimedia project
if (not defaultlink) then
defaultlink = {'enwiki'}
end
if defaultlink and (defaultlink ~= '-') then
local linktype
local sidelink, site, langcode
if type(defaultlink) == 'string' then
defaultlink = {defaultlink}
end
for i, j in ipairs(defaultlink) do
sidelink, site, langcode = wd.siteLink(entity, j, lang)
if sidelink then
break
end
end
if not sidelink then
sidelink, site = wd.siteLink(entity, 'wikidata')
end
local icon, class, title = site, nil, nil -- le texte affiché du lien
if site == 'wiki' then
icon, class, title = langcode, "indicateur-langue", wd.translate('see-another-language', mw.language.fetchLanguageName(langcode, defaultlang))
elseif site == 'wikidata' then
icon, class, title = 'd', "indicateur-langue", wd.translate('see-wikidata')
else
title = wd.translate('see-another-project', site)
end
local val = '[[' .. sidelink .. '|' .. '<span class = "' .. (class or '').. '" title = "' .. (title or '') .. '">' .. icon .. '</span>]]'
return label .. ' <small>(' .. val .. ')</small>' .. translationCat
end
return label .. translationCat
end
function wd.addTrackingCat(prop, cat) -- doit parfois être appelé par d'autres modules
if type(prop) == 'table' then
prop = prop[1] -- devrait logiquement toutes les ajouter
end
if not prop and not cat then
return formatError("property-param-not-provided")
end
if not cat then
cat = wd.translate('trackingcat', prop or 'P??')
end
return addCat(cat )
end
local function unknownValue(snak, label)
local str = label
if type(str) == "function" then
str = str(snak)
end
if (not str) then
if snak.datatype == 'time' then
str = wd.translate('sometime')
else
str = wd.translate('somevalue')
end
end
if type(str) ~= "string" then
return formatError(snak.datatype)
end
return str
end
local function noValue(displayformat)
if not displayformat then
return wd.translate('novalue')
end
if type(displayformat) == 'string' then
return displayformat
end
return formatError()
end
local function getLangCode(entityid)
return databases.langcodes[tonumber(entityid:sub(2))]
end
local function showLang(statement, maxLang) -- retourne le code langue entre paranthèse avant la valeur (par exemple pour les biblios et liens externes)
local mainsnak = statement.mainsnak
if mainsnak.snaktype ~= 'value' then
return nil
end
local langlist = {}
if mainsnak.datavalue.type == 'monolingualtext' then
langlist = {mainsnak.datavalue.value.language}
elseif (not statement.qualifiers) or (not statement.qualifiers.P407) then
return
else
for i, j in pairs( statement.qualifiers.P407 ) do
if j.snaktype == 'value' then
local langentity = wd.getId(j)
local langcode = getLangCode(langentity)
table.insert(langlist, langcode)
end
end
end
if (#langlist > 1) or (#langlist == 1 and langlist[1] ~= defaultlang) then -- si c'est en français, pas besoin de le dire
langlist.maxLang = maxLang
return modules.langmodule.indicationMultilingue(langlist)
end
end
-- === DATE HANDLING ===
local function fuzzydate(str, precision) -- ajoute le qualificatif "vers" à une date
if not str then
return nil
end
if (precision >= 11) or (precision == 7) or (precision == 6) then --dates avec jour, siècles, millénaires
return "vers le " .. str
end
if (precision == 8) then --deseni ("ane ...")
return "alantou " .. str
end
return "alantou " .. str
end
function wd.addStandardQualifs(str, statement)
if (not statement) or (not statement.qualifiers) then
return str
end
if not str then
return error()-- what's that ?
end
if statement.qualifiers.P1480 then
for i, j in pairs(statement.qualifiers.P1480) do
local v = wd.getId(j)
if (v == "Q21818619") then
str = wd.translate('approximate-place', str)
elseif (v == "Q18122778") or (v == "Q18912752") or (v == "Q56644435") or (v == "Q30230067") then
str = wd.translate('uncertain-information', str)
elseif (v == "Q5727902") then
if (statement.mainsnak.datatype == 'time') then
local datevalue = statement.mainsnak.datavalue
if datevalue then str = fuzzydate(str, datevalue.value.precision) end
else
str = wd.translate('approximate-value', str)
end
end
end
end
return str
end
local function rangeObject(begin, ending, params)
--[[
objet comportant un timestamp pour le classement chronologique et deux dateobject (begin et ending)
]]--
local timestamp
if begin then
timestamp = begin.timestamp
else
timestamp = ending.timestamp
end
return {begin = begin, ending = ending, timestamp = timestamp, type = 'rangeobject'}
end
local function dateObject(orig, params)
--[[ transforme un snak en un nouvel objet utilisable par Module:Date complexe
{type = 'dateobject', timestamp = str, era = '+' ou '-', year = number, month = number, day = number, calendar = calendar}
]]--
if not params then
params = {}
end
local newobj = modules.formatDate.splitDate(orig.time, orig.calendarmodel)
newobj.precision = params.precision or orig.precision
newobj.type = 'dateobject'
return newobj
end
local function objectToText(obj, params)
if obj.type == 'dateobject' then
return modules.formatDate.simplestring(obj, params)
elseif obj.type == 'rangeobject' then
return modules.formatDate.daterange(obj.begin, obj.ending, params)
end
end
function wd.getDateFromQualif(statement, qualif)
if (not statement) or (not statement.qualifiers) or not (statement.qualifiers[qualif]) then
return nil
end
local v = statement.qualifiers[qualif][1]
if v.snaktype ~= 'value' then -- que faire dans ce cas ?
return nil
end
return dateObject(v.datavalue.value)
end
function wd.getDate(statement)
local period = wd.getDateFromQualif(statement, 'P585') -- retourne un dateobject
if period then
return period
end
local begin, ending = wd.getDateFromQualif(statement, 'P580'), wd.getDateFromQualif(statement, 'P582')
if begin or ending then
return rangeObject(begin, ending) -- retourne un rangeobject fait de deux dateobject
end
return nil
end
function wd.getFormattedDate(statement, params)
if not statement then
return nil
end
local str
--cherche la date avec les qualifs P580/P582
local datetable = wd.getDate(statement)
if datetable then
str = objectToText(datetable, params)
end
-- puis limite intérieur / supérieur
if not str then
local start, ending = wd.getDateFromQualif(statement, 'P1319'), wd.getDateFromQualif(statement, 'P1326')
str = modules.formatDate.between(start, ending, params)
end
-- sinon, le mainsnak, pour les données de type time
if (not str) and (statement.mainsnak.datatype == 'time') then
local mainsnak = statement.mainsnak
if (mainsnak.snaktype == 'value') or (mainsnak.snaktype == 'somevalue') then
str = wd.formatSnak(mainsnak, params)
end
end
if str and params and (params.addstandardqualifs ~= '-') then
str = wd.addStandardQualifs(str, statement)
end
return str
end
wd.compare.by_quantity = function(c1, c2)
local v1 = wd.getDataValue(c1.mainsnak)
local v2 = wd.getDataValue(c2.mainsnak)
if not (v1 and v2) then
return true
end
return v1 < v2
end
--[[ tri chronologique générique :
retourne une fonction de tri de liste de déclaration
en fonction d’une fonction qui calcule la clé de tri
et d’une fonction qui compare les clés de tri
paramètres nommés: (appel type wikidata.compare.chrono_key_sort{sortKey="nom clé"})
sortKey (optionnel) : chaine, le nom de la clé utilisée pour un tri
(pour éviter de rentrer en collision avec "dateSortKey"
utilisé par chronoSort au besoin)
snak_key_get_function : fonction qui calcule la valeur de la clé à partir d’un snak ou d’une déclaration,
(obligatoire) le résultat n’est calculé qu’une fois et est stocké en cache dans claim[sortKey]
key_compare_function : fonction de comparaison des clés calculées par snak_key_get_function
(optionnel)
--]]
function wd.chrono_key_sort(arg)
local snak_key_get_function = arg.snak_key_get_function
local sortKey = arg.sortKey or "dateSortKey"
local key_compare_function = arg.key_compare_function or
function(c1, c2) return c1 < c2 end
return function(claims)
for _, claim in ipairs( claims ) do
if not claim[sortKey] then
local key = snak_key_get_function(claim)
if key then
claim[sortKey] = wd.compare.get_claim_date(key)
else
claim[sortKey] = 0
end
end
end
table.sort(
claims,
function(c1, c2)
return key_compare_function(c1[sortKey], c2[sortKey])
end
)
return claims
end
end
function wd.quantitySort(claims, inverted)
local function sort(c1, c2)
local v1 = wd.getDataValue(c1.mainsnak)
local v2 = wd.getDataValue(c2.mainsnak)
if not (v1 and v2) then
return true
end
if inverted then
return v2 < v1
end
return v1 < v2
end
table.sort(claims, sort )
return claims
end
function wd.compare.get_claim_date(claim, datetype) -- rend une date au format numérique pour faire des comparaisons
local snak = claim.mainsnak or claim
if datetype and datetype == 'personbirthdate' then -- fonctionne avec un claim dont la valeur est une personne dont on va rendre la date de naissance
if (snak.snaktype == 'value') and (snak.datatype == 'wikibase-item') then
local personid = wd.getId(snak)
local birthclaims = wd.getClaims({ entity = personid, property = 'P569', numval = 1})
if birthclaims then
return wd.compare.get_claim_date(birthclaims[1] or birthclaims)
else return math.huge end
else return math.huge end -- en cas de donnée manquante, valeur infinie qui entraîne le classement en fin de liste
end
local iso, datequalif, isonumber
if (snak.snaktype == 'value') and (snak.datatype == 'time') then
iso = snak.datavalue.value.time
else
for i, dqualif in ipairs(datequalifiers) do
iso = timeFromQualifs(claim, {dqualif})
if iso then
datequalif = dqualif
break
end
end
if not iso then return math.huge end
end
-- transformation en nombre (indication de la base car gsub retourne deux valeurs)
isonumber = tonumber( iso:gsub( '(%d)%D', '%1' ), 10 )
-- ajustement de la date tenant compte du qualificatif dont elle est issue : un fait se terminant à une date est antérieur à un autre commençant à cette date
if datequalif == 'P582' then --date de fin
isonumber = isonumber - 2
elseif datequalif == 'P1326' then -- date au plus tard
isonumber = isonumber - 1
elseif datequalif == 'P1319' then -- date au plus tôt
isonumber = isonumber + 1
elseif datequalif == 'P571' or datequalif == 'P580' then -- date de début et date de création
isonumber = isonumber + 2
end
return isonumber
end
function wd.compare.chronoCompare(c1, c2)
return wd.compare.get_claim_date(c1) < wd.compare.get_claim_date(c2)
end
-- fonction pour renverser l’ordre d’une autre fonction
function wd.compare.rev(comp_criteria)
return function(c1, c2)
-- attention les tris en lua attendent des fonctions de comparaison strictement inférieur, on doit
-- vérifier la non égalité quand on inverse l’ordre d’un critère, d’ou "and comp_criteria(c2,c1)"
return not(comp_criteria(c1,c2)) and comp_criteria(c2,c1)
end
end
-- Fonction qui trie des Claims de type time selon l'ordre chronologique
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.
function wd.chronoSort( claims, sorttype )
for _, claim in ipairs( claims ) do
if not claim.dateSortKey then
if sorttype and (sorttype == 'age' or sorttype == 'ageinverted') then
claim.dateSortKey = wd.compare.get_claim_date(claim, 'personbirthdate')
else
claim.dateSortKey = wd.compare.get_claim_date(claim)
end
if sorttype and (sorttype == 'inverted' or sorttype == 'ageinverted') and claim.dateSortKey == math.huge then
claim.dateSortKey = -math.huge -- quand la donnée est manquante on lui assigne la valeur qui entraîne le classement en fin de liste
end
end
end
table.sort(
claims,
function ( c1, c2 )
if sorttype and (sorttype == 'inverted' or sorttype == 'ageinverted') then
return c2.dateSortKey < c1.dateSortKey
end
return c1.dateSortKey < c2.dateSortKey
end
)
return claims
end
local function get_numeric_claim_value(claim, propertySort)
local val
local claimqualifs = claim.qualifiers
if claimqualifs then
local vals = claimqualifs[propertySort]
if vals and vals[1].snaktype == 'value' then
val = vals[1].datavalue.value
end
end
return tonumber(val or 0)
end
function wd.compare.numeric(propertySort)
return function(c1, c2)
return get_numeric_claim_value(c1, propertySort) < get_numeric_claim_value(c2, propertySort)
end
end
-- Fonction qui trie des Claims de type value selon l'ordre de la propriété fournit
-- Une clé de tri nomée « dateSortKey » est ajouté à chaque claim.
-- Si des clés de tri de ce nom existent déjà, elles sont utilisées sans modification.
function wd.numericPropertySort( claims, propertySort )
for _, claim in ipairs( claims ) do
if not claim.dateSortKey then
local val = get_numeric_claim_value(claim, propertySort)
claim.dateSortKey = tonumber(val or 0)
end
end
table.sort(
claims,
function ( c1, c2 )
return c1.dateSortKey < c2.dateSortKey
end
)
return claims
end
--[[
test possible en console pour la fonction précédente :
= p.formatStatements{entity = "Q375946", property = 'P50', sorttype = 'P1545', linkback = "true"}
--]]
-- ===================
function wd.getReferences(statement)
local refdata = statement.references
if not refdata then
return nil
end
local refs = {}
local hashes = {}
for i, ref in pairs(refdata) do
local s
local function hasValue(prop) -- checks that the prop is here with valid value
if ref.snaks[prop] and ref.snaks[prop][1].snaktype == 'value' then
return true
end
return false
end
if ref.snaks.P248 then -- cas lorsque P248 (affirmé dans) est utilisé
for j, source in pairs(ref.snaks.P248) do
if source.snaktype == 'value' then
local page, accessdate, quotation
if hasValue('P304') then -- page
page = wd.formatSnak(ref.snaks.P304[1])
end
if hasValue('P813') then -- date de consultation
accessdate = wd.formatSnak(ref.snaks.P813[1])
end
if hasValue('P1683') then -- citation
quotation = wd.formatSnak(ref.snaks.P1683[1])
end
local sourceId = wd.getId(source)
s = modules.reference.citeitem(sourceId, {['page'] = page, ['accessdate'] = accessdate, ['citation'] = quotation})
table.insert(refs, s)
table.insert(hashes, ref.hash .. sourceId)
end
end
elseif hasValue('P8091') or hasValue('P854') then -- cas lorsque P8091 (Archival Resource Key) ou P854 (URL de la référence)est utilisé
local arkKey, url, title, author, publisher, accessdate, publishdate, publishlang, quotation, description
if hasValue('P8091') then
arkKey = wd.formatSnak(ref.snaks.P8091[1], {text = "-"})
url = 'https://n2t.net/' .. arkKey
if hasValue('P1476') then
title = wd.formatSnak(ref.snaks.P1476[1])
else
title = arkKey
end
elseif hasValue('P854') then
url = wd.formatSnak(ref.snaks.P854[1], {text = "-"})
if hasValue('P1476') then
title = wd.formatSnak(ref.snaks.P1476[1])
else
title = mw.ustring.gsub(url, '^[Hh][Tt][Tt][Pp]([Ss]?):(/?)([^/])', 'http%1://%3')
end
end
--todo : handle multiple values for author, etc.
if hasValue('P1810') then -- sou non
description = 'sou non ' .. wd.formatSnak(ref.snaks.P1810[1])
end
if hasValue('P813') then -- dat konsiltasyon
accessdate = wd.formatSnak(ref.snaks.P813[1])
end
if hasValue('P50') then -- author (item type)
author = wd.formatSnak(ref.snaks.P50[1])
elseif hasValue('P2093') then -- author (string type)
author = wd.formatSnak(ref.snaks.P2093[1])
end
if hasValue('P123') then -- éditeur
publisher = wd.formatSnak(ref.snaks.P123[1])
end
if hasValue('P1683') then -- citation
quotation = wd.formatSnak(ref.snaks.P1683[1])
end
if hasValue('P577') then -- date de publication
publishdate = wd.formatSnak(ref.snaks.P577[1])
end
if hasValue('P407') then -- langue de l'œuvre
local id = wd.getId(ref.snaks.P407[1])
publishlang = getLangCode(id)
end
s = modules.cite.lienWeb{titre = title, url = url, auteur = author, editeur = publisher, langue = publishlang, ['en ligne le'] = publishdate, ['consulté le'] = accessdate, ['citation'] = quotation, ['description'] = description}
table.insert(hashes, ref.hash)
table.insert(refs, s)
elseif ref.snaks.P854 and ref.snaks.P854[1].snaktype == 'value' then
s = wd.formatSnak(ref.snaks.P854[1], {text = "-"})
table.insert(hashes, ref.snaks.P854[1].hash)
table.insert(refs, s)
end
end
if #refs > 0 then
if #hashes == #refs then
return refs, hashes
end
return refs
end
end
function wd.sourceStr(sources, hashes)
if not sources or (#sources == 0) then
return nil
end
local useHashes = hashes and #hashes == #sources
for i, j in ipairs(sources) do
local refArgs = {name = 'ref', content = j}
if useHashes and hashes[i] ~= '-' then
refArgs.args = {name = 'wikidata-' .. hashes[i]}
end
sources[i] = mw.getCurrentFrame():extensionTag(refArgs)
end
return table.concat(sources, '<sup class="reference cite_virgule">,</sup>')
end
function wd.getDataValue(snak, params)
if not params then
params = {}
end
local speciallabels = params.speciallabels -- parfois on a besoin de faire une liste d'éléments pour lequel le libellé doit être changé, pas très pratique d'utiliser une fonction pour ça
if snak.snaktype ~= 'value' then
return nil
end
local datatype = snak.datatype
local value = snak.datavalue.value
local displayformat = params.displayformat
if type(displayformat) == 'function' then
return displayformat(snak, params)
end
if datatype == 'wikibase-item' then
return wd.formatEntity(wd.getId(snak), params)
end
if datatype == 'url' then
if params.displayformat == 'raw' then
return value
else
return modules.weblink.makelink(value, params.text)
end
end
if datatype == 'math' then
return mw.getCurrentFrame():extensionTag( "math", value)
end
if datatype == 'tabular-data' then
return mw.ustring.sub(value, 6, 100) -- returns the name of the file, without the "Data:" prefix
end
if (datatype == 'string') or (datatype == 'external-id') or (datatype == 'commonsMedia') then -- toutes les données de type string sauf "math"
if params.urlpattern then
local urlpattern = params.urlpattern
if type(urlpattern) == 'function' then
urlpattern = urlpattern(value)
end
-- encodage de l'identifiant qui se retrouve dans le path de l'URL, à l'exception des slashes parfois rencontrés, qui sont des séparateurs à ne pas encoder
local encodedValue = mw.uri.encode(value, 'PATH'):gsub('%%2F', '/')
-- les parenthèses autour du encodedValue:gsub() sont nécessaires, sinon sa 2e valeur de retour est aussi passée en argument au mw.ustring.gsub() parent
local url = mw.ustring.gsub(urlpattern, '$1', (encodedValue:gsub('%%', '%%%%')))
value = '[' .. url .. ' ' .. (params.text or value) .. ']'
end
return value
end
if datatype == 'time' then -- format example: +00000001809-02-12T00:00:00Z
if displayformat == 'raw' then
return value.time
else
local dateobject = dateObject(value, {precision = params.precision})
return objectToText(dateobject, params)
end
end
if datatype == 'globe-coordinate' then
-- retourne une table avec clés latitude, longitude, précision et globe à formater par un autre module (à changer ?)
if displayformat == 'latitude' then
return value.latitude
elseif displayformat == 'longitude' then
return value.longitude
else
local coordvalue = mw.clone( value )
coordvalue.globe = databases.globes[value.globe] -- transforme l'ID du globe en nom anglais utilisable par geohack
return coordvalue -- note : les coordonnées Wikidata peuvent être utilisée depuis Module:Coordinates. Faut-il aussi autoriser à appeler Module:Coordiantes ici ?
end
end
if datatype == 'quantity' then -- todo : gérer les paramètres précision
local amount, unit = value.amount, value.unit
if unit then
unit = unit:match('Q%d+')
end
if not unit then
unit = 'dimensionless'
end
local raw
if displayformat == "raw" then
raw = true
end
return modules.formatNum.displayvalue(amount, unit,
{targetunit = params.targetunit, raw = raw, rounding = params.rounding, showunit = params.showunit or 'short', showlink = params.showlink}
)
end
if datatype == 'monolingualtext' then
if value.language == defaultlang then
return value.text
else
return modules.langmodule.langue({value.language, value.text, nocat=true})
end
end
return formatError('unknown-datavalue-type' )
end
function wd.stringTable(args) -- like getClaims, but get a list of string rather than a list of snaks, for easier manipulation
local claims = args.claims
local cat = ''
if not claims then
claims = wd.getClaims(args)
end
if not claims or claims == {} then
return {}, {}, cat
end
if args.removedupesdate and (args.removedupesdate ~= '-') then
claims, cat = removeDupesDate(claims, args.removedupesdate)
end
local props = {} -- liste des propriétés associété à chaque string pour catégorisation et linkback
for i, j in pairs(claims) do
claims[i] = wd.formatStatement(j, args)
table.insert(props, j.mainsnak.property)
end
if args.removedupes and (args.removedupes ~= '-') then
claims = wd.addNewValues({}, claims) -- devrait aussi supprimer de props celles qui ne sont pas utilisées
end
return claims, props, cat
end
function wd.getQualifiers(statement, qualifs, params)
if not statement.qualifiers then
return nil
end
local vals = {}
if type(qualifs) == 'string' then
qualifs = wd.splitStr(qualifs)
end
for i, j in pairs(qualifs) do
if statement.qualifiers[j] then
for k, l in pairs(statement.qualifiers[j]) do
table.insert(vals, l)
end
end
end
if #vals == 0 then
return nil
end
return vals
end
function wd.getFormattedQualifiers(statement, qualifs, params)
if not params then params = {} end
local qualiftable = wd.getQualifiers(statement, qualifs)
if not qualiftable then
return nil
end
qualiftable = wd.filterClaims(qualiftable, params) or {}
for i, j in pairs(qualiftable) do
qualiftable[i] = wd.formatSnak(j, params)
end
return modules.linguistic.conj(qualiftable, params.conjtype)
end
function wd.showQualifiers(str, statement, args)
local qualifs = args.showqualifiers
if not qualifs then
return str -- or error ?
end
if type(qualifs) == 'string' then
qualifs = wd.splitStr(qualifs)
end
local qualifargs = args.qualifargs or {}
-- formatage des qualificatifs = args commençant par "qualif", ou à défaut, les mêmes que pour la valeur principale
qualifargs.displayformat = args.qualifdisplayformat or args.displayformat
qualifargs.labelformat = args.qualiflabelformat or args.labelformat
qualifargs.labelformat2 = args.qualiflabelformat2 or args.labelformat2
qualifargs.link = args.qualiflink or args.link
qualifargs.linktopic = args.qualiflinktopic or args.linktopic
qualifargs.conjtype = args.qualifconjtype
qualifargs.precision = args.qualifprecision
qualifargs.targetunit = args.qualiftargetunit
qualifargs.defaultlink = args.qualifdefaultlink or args.defaultlink
qualifargs.defaultlinkquery = args.qualifdefaultlinkquery or args.defaultlinkquery
local formattedqualifs
if args.qualifformat and type (args.qualifformat) == 'function' then
formattedqualifs = args.qualifformat(statement, qualifs, qualifargs)
else
formattedqualifs = wd.getFormattedQualifiers(statement, qualifs, qualifargs)
end
if formattedqualifs and formattedqualifs ~= "" then
str = str .. " (" .. formattedqualifs .. ")"
end
return str
end
function wd.formatSnak( snak, params )
if not params then params = {} end -- pour faciliter l'appel depuis d'autres modules
if snak.snaktype == 'somevalue' then
return unknownValue(snak, params.unknownlabel)
elseif snak.snaktype == 'novalue' then
return noValue(params.novaluelabel)
elseif snak.snaktype == 'value' then
return wd.getDataValue( snak, params)
else
return formatError( 'unknown-snak-type' )
end
end
function wd.formatStatement( statement, args ) -- FONCTION A REORGANISER (pas très lisible)
if not args then
args = {}
end
if not statement.type or statement.type ~= 'statement' then
return formatError( 'unknown-claim-type' )
end
local prop = statement.mainsnak.property
local str
-- special displayformat f
if args.statementformat and (type(args.statementformat) == 'function') then
str = args.statementformat(statement, args)
elseif (statement.mainsnak.datatype == 'time') and (statement.mainsnak.dateformat ~= '-') then
if args.displayformat == 'raw' and statement.mainsnak.snaktype == 'value' then
str = statement.mainsnak.datavalue.value.time
else
str = wd.getFormattedDate(statement, args)
end
elseif args.showonlyqualifier and (args.showonlyqualifier ~= '') then
str = wd.getFormattedQualifiers(statement, args.showonlyqualifier, args)
if not str then
return nil
end
if args.addstandardqualifs ~= '-' then
str = wd.addStandardQualifs(str, statement)
end
else
str = wd.formatSnak( statement.mainsnak, args )
if (args.addstandardqualifs ~= '-') and (args.displayformat ~= 'raw') then
str = wd.addStandardQualifs(str, statement)
end
end
-- ajouts divers
if args.showlang == true then
local indicateur = showLang(statement, args.maxLang)
if indicateur then
str = indicateur .. ' ' .. str
end
end
if args.showqualifiers then
str = wd.showQualifiers(str, statement, args)
end
if args.showdate then -- when "showdate and chronosort are both set, date retrieval is performed twice
local period = wd.getFormattedDate(statement, args, "-") -- 3 arguments indicate the we should not use additional qualifiers, already added by wd.formatStatement
if period then
str = str .. " <small>(" .. period .. ")</small>"
end
end
if args.showsource and args.showsource ~= '-' then
local sources, hashes = wd.getReferences(statement)
if sources then
local source = wd.sourceStr(sources, hashes)
if source then
str = str .. source
end
end
end
return str
end
function wd.addLinkBack(str, id, property)
if not id or id == '' then
id = wd.getEntityIdForCurrentPage()
end
if not id then
return str
end
if type(property) == 'table' then
property = property[1]
end
id = wd.entityId(id)
local class = ''
if property then
class = 'wd_' .. string.lower(property)
end
local icon = '[[File:Blue pencil.svg|%s|10px|baseline|class=noviewer|link=%s]]'
local title = wd.translate('see-wikidata-value')
local url = mw.uri.fullUrl('d:' .. id, 'uselang=ht')
url.fragment = property -- ajoute une #ancre si paramètre "property" défini
url = tostring(url)
local v = mw.html.create('span')
:addClass(class)
:wikitext(str)
:tag('span')
:addClass('noprint wikidata-linkback')
:wikitext(icon:format(title, url))
:allDone()
return tostring(v)
end
function wd.addRefAnchor(str, id)
--[[
Insère une ancre pour une référence générée à partir d'un élément wd.
L'id Wikidata sert d'identifiant à l'ancre, à utiliser dans les modèles type "harvsp"
--]]
return tostring(
mw.html.create('span')
:attr('id', id)
:attr('class', "ouvrage")
:wikitext(str)
)
end
--=== FUNCTIONS USING AN ENTITY AS ARGUMENT ===
local function formatStatementsGrouped(args, type)
-- regroupe les affirmations ayant la même valeur en mainsnak, mais des qualificatifs différents
-- (seulement pour les propriétés de type élément)
local claims = wd.getClaims(args)
if not claims then
return nil
end
local groupedClaims = {}
-- regroupe les affirmations par valeur de mainsnak
local function addClaim(claim)
local id = wd.getMainId(claim)
for i, j in pairs(groupedClaims) do
if (j.id == id) then
table.insert(groupedClaims[i].claims, claim)
return
end
end
table.insert(groupedClaims, {id = id, claims = {claim}})
end
for i, claim in pairs(claims) do
addClaim(claim)
end
local stringTable = {}
-- instructions ad hoc pour les paramètres concernant la mise en forme d'une déclaration individuelle
local funs = {
{param = "showqualifiers", fun = function(str, claims)
local qualifs = {}
for i, claim in pairs(claims) do
local news = wd.getFormattedQualifiers(claim, args.showqualifiers, args)
if news then
table.insert(qualifs, news)
end
end
local qualifstr = modules.linguistic.conj(qualifs, wd.translate("qualif-separator"))
if qualifstr and qualifstr ~= "" then
str = str .. " (" .. qualifstr .. ")"
end
return str
end
},
{param = "showdate", fun = function(str, claims)
-- toutes les dates sont regroupées à l'intérieur des mêmes parenthèses ex "médaille d'or (1922, 1924)"
local dates = {}
for i, statement in pairs(claims) do
local s = wd.getFormattedDate(statement, args, true)
if statement then table.insert(dates, s) end
end
local datestr = modules.linguistic.conj(dates)
if datestr and datestr ~= "" then
str = str .. " <small>(" .. datestr .. ")</small>"
end
return str
end
},
{param = "showsource", fun = function(str, claims)
-- les sources sont toutes affichées au même endroit, à la fin
-- si deux affirmations ont la même source, on ne l'affiche qu'une fois
local sources = {}
local hashes = {}
local function dupeRef(old, new)
for i, j in pairs(old) do
if j == new then
return true
end
end
end
for i, claim in pairs(claims) do
local refs, refHashes = wd.getReferences(claim)
if refs then
for i, j in pairs(refs) do
if not dupeRef(sources, j) then
table.insert(sources, j)
local hash = (refHashes and refHashes[i]) or '-'
table.insert(hashes, hash)
end
end
end
end
return str .. (wd.sourceStr(sources, hashes) or "")
end
}
}
for i, group in pairs(groupedClaims) do -- bricolage pour utiliser les arguments de formatStatements
local str = wd.formatEntity(group.id, args)
if not str then
str = '???' -- pour éviter erreur Lua si formatEntity a retourné nil
end
for i, fun in pairs(funs) do
if args[fun.param] then
str = fun.fun(str, group.claims, args)
end
end
table.insert(stringTable, str)
end
args.valuetable = stringTable
return wd.formatStatements(args)
end
function wd.formatStatements( args )--Format statement and concat them cleanly
if args.value == '-' then
return nil
end
-- If a value is already set: use it, except if it's the special value {{WD}} (use wikidata)
if args.value and args.value ~= '' then
local valueexpl = wd.translate("activate-query")
if args.value ~= valueexpl then
return args.value
end
-- There is no value set, and args.expl disables wikidata on empty values
elseif args.expl then
return nil
end
if args.grouped and args.grouped ~= '' then
args.grouped = false
return formatStatementsGrouped(args)
end
local valuetable = args.valuetable -- dans le cas où les valeurs sont déjà formatées
local props -- les propriétés réellement utilisées (dans certains cas, ce ne sont pas toutes celles de args.property
local cat = ''
if not valuetable then -- cas le plus courant
valuetable, props, cat = wd.stringTable(args)
end
if args.ucfirst == '-' and args.conjtype == 'new line' then args.conjtype = 'lowercase new line' end
local str = modules.linguistic.conj(valuetable, args.conjtype)
if not str then
return args.default
end
if not props then
props = wd.splitStr(args.property)[1]
end
if args.ucfirst ~= '-' then
str = modules.linguistic.ucfirst(str)
end
if args.addcat and (args.addcat ~= '-') then
str = str .. wd.addTrackingCat(props) .. cat
end
if args.linkback and (args.linkback ~= '-') then
str = wd.addLinkBack(str, args.entity, props)
end
if args.returnnumberofvalues then
return str, #valuetable
end
return str
end
function wd.formatAndCat(args)
if not args then
return nil
end
args.linkback = args.linkback or true
args.addcat = true
if args.value then -- do not ignore linkback and addcat, as formatStatements do
if args.value == '-' then
return nil
end
local val = args.value .. wd.addTrackingCat(args.property)
val = wd.addLinkBack(val, args.entity, args.property)
return val
end
return wd.formatStatements( args )
end
function wd.getTheDate(args)
local claims = wd.getClaims(args)
if not claims then
return nil
end
local formattedvalues = {}
for i, j in pairs(claims) do
local v = wd.getFormattedDate(j, args)
if v then
table.insert(formattedvalues, v )
end
end
local val = modules.linguistic.conj(formattedvalues)
if not val then
return nil
end
if args.addcat == true then
val = val .. wd.addTrackingCat(args.property)
end
val = wd.addLinkBack(val, args.entity, args.property)
return val
end
function wd.keyDate (event, item, params)
params = params or {}
params.entity = item
if type(event) == 'table' then
for i, j in pairs(event) do
params.targetvalue = nil -- réinitialisation barbare des paramètres modifiés
local s = wd.keyDate(j, item, params)
if s then
return s
end
end
elseif type(event) ~= 'string' then
return formatError('invalid-datatype', type(event), 'string')
elseif string.sub(event, 1, 1) == 'Q' then -- on demande un élément utilisé dans P:P793 (événement clé)
params.property = 'P793'
params.targetvalue = event
params.addcat = params.addcat or true
return wd.getTheDate(params)
elseif string.sub(event, 1, 1) == 'P' then -- on demande une propriété
params.property = event
return wd.formatAndCat(params)
else
return formatError('invalid-entity-id', event)
end
end
function wd.mainDate(entity)
-- essaye P580/P582
local args = {entity = entity, addcat = true}
args.property = 'P580'
local startpoint = wd.formatStatements(args)
args.property = 'P582'
local endpoint = wd.formatStatements(args)
local str
if (startpoint or endpoint) then
str = modules.formatDate.daterange(startpoint, endpoint, params)
str = wd.addLinkBack(str, entity, 'P582')
return str
end
-- défaut : P585
args.property = {'P585', 'P571'}
args.linkback = true
return wd.formatStatements(args)
end
-- ==== Fonctions sur le genre ====
function wd.getgender(id)
local vals = {
['Q6581072'] = 'f', -- féminin
['Q6581097'] = 'm', -- masculin
['Q1052281'] = 'f', -- femme transgenre
['Q2449503'] = 'm', -- homme transgenre
['Q17148251'] = 'f', -- en:Travesti (gender identity)
['Q43445'] = 'f', -- femelle
['Q44148'] = 'm', -- mâle
default = '?'
}
local gender = wd.formatStatements{entity = id, property = 'P21', displayformat = 'raw', numval = 1}
return vals[gender] or vals.default
end
-- catégories de genre/nombre
function wd.getgendernum(claims)
local personid, gender
local anym = false
local anyf = false
local anyunknown = false
for i, claim in pairs(claims) do
local snak = claim.mainsnak or claim
if(snak.snaktype == 'value') and (snak.datatype == 'wikibase-item') then
personid = wd.getId(snak)
gender = wd.getgender(personid)
anym = anym or (gender == 'm')
anyf = anyf or (gender == 'f')
anyunknown = anyunknown or (gender == '?')
else
anyunknown = true
end
end
local gendernum
if #claims > 1 then
if anyunknown then
gendernum = 'p'
else
if anym and not anyf then gendernum = 'mp' end
if anyf and not anym then gendernum = 'fp' end
if anym and anyf then gendernum = 'mixtep' end
end
else
gendernum = 's'
if anym then gendernum = 'ms' end
if anyf then gendernum = 'fs' end
end
return gendernum
end
-- récupération des libellés genrés de Wikidata
function wd.genderedlabel(id, labelgender)
local label
if not labelgender then return nil end
if labelgender == 'f' then -- femme : chercher le libellé dans P2521 (libellé féminin)
label = wd.formatStatements{entity = id, property = 'P2521', isinlang = 'ht', numval = 1, ucfirst = '-'}
elseif labelgender == 'm' then -- homme : chercher le libellé dans P3321 (libellé masculin)
label = wd.formatStatements{entity = id, property = 'P3321', isinlang = 'ht', numval = 1, ucfirst = '-'}
end
if not label then
label = wd.getLabel(id)
end
return label
end
-- === FUNCTIONS FOR TRANSITIVE PROPERTIES ===
function wd.getIds(item, query)
query.excludespecial = true
query.displayformat = 'raw'
query.entity = item
query.addstandardqualifs = '-'
return wd.stringTable(query)
end
-- recursively adds a list of qid to an existing list, based on the results of a query
function wd.addVals(list, query, maxdepth, maxnodes, stopval)
maxdepth = tonumber(maxdepth) or 10
maxnodes = tonumber(maxnodes) or 100
if (maxdepth < 0) then
return list
end
if stopval and wd.isHere(list, stopval) then
return list
end
local origsize = #list
for i = 1, origsize do
-- tried a "checkpos" param instead of starting to 1 each time, but no impact on performance
local candidates = wd.getIds(list[i], query)
list = wd.addNewValues(list, candidates, maxnodes, stopval)
if list[#list] == stopval then
return list
end
if #list >= maxnodes then
return list
end
end
if (#list == origsize) then
return list
end
return wd.addVals(list, query, maxdepth - 1, maxnodes, stopval, origsize + 1)
end
-- returns a list of items transitively matching a query (orig item is not included in the list)
function wd.transitiveVals(item, query, maxdepth, maxnodes, stopval)
maxdepth = tonumber(maxdepth) or 5
if type(query) == "string" then
query = {property = query}
end
-- récupération des valeurs
local vals = wd.getIds(item, query)
if not vals then
return nil
end
local v = wd.addVals(vals, query, maxdepth - 1, maxnodes, stopval)
if not v then
return nil
end
-- réarrangement des valeurs
if query.valorder == "inverted" then
local a = {}
for i = #v, 1, -1 do
a[#a+1] = v[i]
end
v = a
end
return v
end
-- returns true if an item is the value of a query, transitively
function wd.inTransitiveVals(searchedval, sourceval, query, maxdepth, maxnodes )
local vals = wd.transitiveVals(sourceval, query, maxdepth, maxnodes, searchedval )
if (not vals) then
return false
end
for _, val in ipairs(vals) do
if (val == searchedval) then
return true
end
end
return false
end
-- returns true if an item is a superclass of another, based on P279
function wd.isSubclass(class, item, maxdepth)
local query = {property = 'P279'}
if class == item then -- item is a subclass of itself iff it is a class
if wd.getIds(item, query) then
return true
end
return false
end
return wd.inTransitiveVals(class, item, query, maxdepth )
end
-- returns true if one of the best ranked P31 values of an item is the target or a subclass of the target
-- rank = 'valid' would seem to make sense, but it would need to check for date qualifiers as some P31 values have begin or end date
function wd.isInstance(targetclass, item, maxdepth)
maxdepth = maxdepth or 10
local directclasses = wd.transitiveVals(item, {property = 'P31'}, 1)
if not directclasses then
return false
end
for i, class in pairs(directclasses) do
if wd.isSubclass(targetclass, class, maxdepth - 1) then
return true
end
end
return false
end
-- return the first value in a transitive query that belongs to a particular class. For instance find a value of P131 that is a province of Canada
function wd.findVal(sourceitem, targetclass, query, recursion, instancedepth)
if type(query) == "string" then
query = {property = query}
end
local candidates = wd.getIds(sourceitem, query)
if candidates then
for i, j in pairs(candidates) do
if wd.isInstance(targetclass, j, instancedepth) then
return j
end
end
if not recursion then
recursion = 3
else
recursion = recursion - 1
end
if recursion < 0 then
return nil
end
for i, candidate in pairs(candidates) do
return wd.findVal(candidate, targetclass, query, recursion, instancedepth)
end
end
end
-- === VARIA ===
function wd.getDescription(entity, lang)
lang = lang or defaultlang
local description
if lang == defaultlang then
return mw.wikibase.description(qid)
end
if not entity.descriptions then
return wd.translate('no description')
end
local descriptions = entity.descriptions
if not descriptions then
return nil
end
if descriptions[lang] then
return descriptions[delang].value
end
return entity.id
end
function wd.Dump(entity)
entity = wd.getEntity(entity)
if not entity then
return formatError("entity-param-not-provided")
end
return "<pre>"..mw.dumpObject(entity).."</pre>"
end
function wd.frameFun(frame)
local args = frame.args
local funname = args[1]
table.remove(args, 1)
return wd[funname](args)
end
return wd
56l0vqgdlghuun529hya3ipw1cnnbqu
Module:Wikidata/I18n
828
64457
855588
853455
2024-11-12T15:39:40Z
BwaKajou
31668
855588
Scribunto
text/plain
return {
-- Messages d'erreurs
["property-param-not-provided"] = "paramèt 'property' manke",
["qualifier-param-not-provided"] = "paramèt 'qualifier' manke",
["entity-param-not-provided"] = "paramèt 'entity' manket",
["entity-not-found"] = "entité non trouvée",
["unknown-claim-type"] = "type d'affirmation inconnu",
["unknown-snak-typeg"] = "unknown snak type",
["unknown-datavalue-type"] = "unknown datavalue type.",
["unknown-entity-type"] = "unknown entity type",
["invalid-id"] = "identifiant inconnu",
["invalid-datatype"] = "type de données inconnu",
["invalid-linktype"] = "type de lien inconnu",
["invalid-event-type"] = "l'événement devrait être une chaîne, est $1",
["invalid-entity-id"] = "identifiant d'entité invalide : $1",
["invalid-project-code"] = "identifiant de project Wikimédia invalide : $1",
["cat-unsorted-issue"] = "Page avec un problème de codage Wikidata",
-- Autres messages
["no-label"] = "pas de libellé",
['no description'] = "pas description",
["novalue"] = "-",
["somevalue"] = "inconnu",
["sometime"] = "date inconnue",
['to translate'] = 'Paj ki itilize done Wikidata pou tradui',
["trackingcat"] = 'Paj ki itilize $1',
['see-wikidata-value'] = "Gade epi modifye done yo sou Wikidata", -- lien vers des valeurs sur une propriété Wikidata
['see-wikidata'] = "Gade eleman Wikidata ki koresponn", -- utilisé sur les liens Wikidata par défaut en l'absence de lien interne disponible
['see-another-project'] = "Atik sou $1",
['see-another-language'] = "Atik sou Wikipedya an $1",
['activate-query'] = "<div class='par wikidata'></div>" -- activates an on-demand-only query
}
qsn308bwppggo5hqnwmzf7uz9e3ra32
855589
855588
2024-11-12T15:42:09Z
BwaKajou
31668
855589
Scribunto
text/plain
return {
-- Messages d'erreurs
["property-param-not-provided"] = "paramèt 'property' manke",
["qualifier-param-not-provided"] = "paramèt 'qualifier' manke",
["entity-param-not-provided"] = "paramèt 'entity' manket",
["entity-not-found"] = "entité non trouvée",
["unknown-claim-type"] = "type d'affirmation inconnu",
["unknown-snak-typeg"] = "unknown snak type",
["unknown-datavalue-type"] = "unknown datavalue type.",
["unknown-entity-type"] = "unknown entity type",
["invalid-id"] = "identifiant inconnu",
["invalid-datatype"] = "type de données inconnu",
["invalid-linktype"] = "type de lien inconnu",
["invalid-event-type"] = "l'événement devrait être une chaîne, est $1",
["invalid-entity-id"] = "identifiant d'entité invalide : $1",
["invalid-project-code"] = "identifiant de project Wikimédia invalide : $1",
["cat-unsorted-issue"] = "Page avec un problème de codage Wikidata",
-- Autres messages
["no-label"] = "pas de libellé",
['no description'] = "pas description",
["novalue"] = "-",
["somevalue"] = "inconnu",
["sometime"] = "date inconnue",
['to translate'] = 'Paj ki itilize done Wikidata pou tradui',
["trackingcat"] = 'Paj ki itilize $1',
['see-wikidata-value'] = "Gade epi modifye done yo sou Wikidata", -- lien vers des valeurs sur une propriété Wikidata
['see-wikidata'] = "Gade eleman Wikidata ki koresponn", -- utilisé sur les liens Wikidata par défaut en l'absence de lien interne disponible
['see-another-project'] = "Atik sou $1",
['see-another-language'] = "Atik sou Wikipedya an $1",
['activate-query'] = '<div class="par_wikidata"></div>', -- activates an on-demand-only query
['qualif-separator'] = " ; ", -- separate qualifiers shown next to a standard statement
['approximate-value'] = "environ $1",
['approximate-place'] = "$1 (ou environs)",
['uncertain-information'] = "$1 (?)",
}
6yp55zmpq5ybk4mdkec4vtp5p3rlypk
Module:Date
828
64464
855611
854317
2024-11-12T17:44:25Z
BwaKajou
31668
855611
Scribunto
text/plain
-- luacheck: globals mw, no max line length
local fun = {}
local Outils = require 'Module:Outils'
local Duree = require 'Module:Durée'
-- chargement de la base de données répertoriant certaines pages existant ou n'existant pas pour éviter les "ifexist".
local dataLiens
local success, resultat = pcall ( mw.loadData, 'Module:Date/Data' )
if success then
dataLiens = resultat
else
-- protection au cas où le sous-module serait mal modifié
dataLiens = { [''] = { mois = { aucun = 1000, tous = { 1773, 2014 } }, } }
end
-- nettoie un paramètre non nommé (vire les espaces au début et à la fin)
-- retourne nil si le texte est vide ou n'est pas du texte. Attention c'est important pour les fonctions qui l'utilisent.
local trim = Outils.trim
-- Fonction destinée à mettre la première lettre du mois en majuscule :
-- utilisation de string car aucun mois ne commence par une lettre non ascii en français ou anglais.
local function ucfirst( str )
return str:sub( 1, 1 ):upper() .. str:sub( 2 )
end
local modelePremier = '<abbr class="abbr" title="premye">1<sup>e</sup></abbr>'
-- liste des mois, écriture exacte et alias, en minuscule
local listeMois = {
{ num = 1, nJour = 31, abrev = 'janv.', nom = 'janvye', alias = { 'janvier', 'jan.', 'janv.', 'jan', 'janv', 'january' } },
{ num = 2, nJour = 29, abrev = 'fév.', nom = 'fevriye', alias = { 'février', 'fev.', 'fev', 'fév.', 'fév', 'févr', 'févr.', 'february', 'feb', 'feb.' } },
{ num = 3, nJour = 31, abrev = 'mas', nom = 'mas', alias = { 'mars', 'mar.', 'mar', 'march' } },
{ num = 4, nJour = 30, abrev = 'avr.', nom = 'avril', alias = { 'avr.', 'avr', 'apr', 'april'} },
{ num = 5, nJour = 31, abrev = 'me', nom = 'me', alias = { 'mai','may' } },
{ num = 6, nJour = 30, abrev = 'jen', nom = 'jen', alias = {'juin', 'jun', 'june' } },
{ num = 7, nJour = 31, abrev = 'jiyè', nom = 'jiyè', alias = { 'juillet','juil.', 'juil', 'juill.', 'juill', 'jul', 'july' } },
{ num = 8, nJour = 31, abrev = 'out', nom = 'out', alias = { 'août', 'aoû', 'aug', 'august' } },
{ num = 9, nJour = 30, abrev = 'sept.', nom = 'septanm', alias = { 'septembre', 'sept.', 'sept', 'sep.', 'sep', 'september' } },
{ num = 10, nJour = 31, abrev = 'okt.', nom = 'oktòb', alias = { 'octobre', 'oct.', 'oct', 'october' } },
{ num = 11, nJour = 30, abrev = 'nov.', nom = 'novanm', alias = { 'novembre','nov.', 'nov', 'november' } },
{ num = 12, nJour = 31, abrev = 'déc.', nom = 'desanm', alias = {'décembre', 'decembre', 'déc.', 'dec.', 'dec', 'déc', 'december' } },
aout = { num = 8, nJour = 31, abrev = 'aout', nom = 'out', alias = { 'aou' } },
}
-- ajoute les noms, abréviations et alias en tant que clés de listeMois
for i = 1, 12 do
local mois = listeMois[i]
listeMois[tostring( i )] = mois
if i < 10 then
listeMois['0' .. i] = mois
end
listeMois[mois.nom] = mois
listeMois[mois.abrev] = mois
for j = 1, #mois.alias do
listeMois[mois.alias[j]] = mois
end
end
for i = 1, #listeMois.aout.alias do
listeMois[listeMois.aout.alias[i]] = listeMois.aout
end
local liste_saisons = {
{ 'prentan', 'printemps', 'spring', },
{ 'ete','lete', 'été', 'summer', },
{ 'otòn', 'lotòn', 'automne', 'autumn', },
{ 'ivè', 'livè', 'hiver', 'winter', },
}
-- à partir d'un nom de saison (en français ou en anglais),
-- retourne son nom canonique (exemple : "été")
-- si non reconnu, retourne nil
function fun.determinationSaison( saison )
local s = trim( saison )
if s then
s = s:gsub( 'ò', 'è' ):lower()
for i = 1, 4 do
for j = 1, #liste_saisons[i] do
if s == liste_saisons[i][j] then
return liste_saisons[i][1]
end
end
end
end
end
---
-- à partir d'un nom de mois (en français ou en anglais), de son numéro ou d'une abréviation,
-- retourne son nom canonique (exemple : "juin") et son numéro (exemple : 6)
-- si non reconnu, retourne nil, nil
function fun.determinationMois( mois )
local result
local num = tonumber( mois )
if num then
result = listeMois[num]
else
local str = trim( mois )
if str then
result = listeMois[str]
if not result then
result = listeMois[str:gsub( 'ò', 'è' ):gsub( 'ò', 'è' ):lower()]
end
end
end
if result then
return result.nom, result.num
else
return nil, nil
end
end
-- fonction interne à modeleDate, pour déterminer si on peut se passer de faire un ifexist
local function existDate( dataQualificatif, annee, mois )
local data
if mois then
data = dataQualificatif.mois
else
data = dataQualificatif.annee
end
if type( data ) ~= 'table' then
-- si data n'existe pas c'est que l'on considère qu'il n'y a pas de lien.
return
end
-- le qualificatif est remplacé par celui de la base de données, ce qui permet des alias.
local lien = annee
if dataQualificatif.qualificatif ~= '' then
lien = lien .. ' ' .. dataQualificatif.qualificatif
end
local seul = annee
if mois then
lien = mois .. ' ' .. lien
seul = ucfirst( mois ) .. ' ' .. annee
end
local aucun = tonumber( data.aucun )
if aucun and annee <= aucun then
-- si l'année est dans la partie 'aucun' on teste s'il y a malgré tout un lien isolé
if type( data.seul ) == 'table' then
for i, v in ipairs( data.seul ) do
if seul == v or seul == tonumber( v ) then
return lien
end
end
end
-- partie aucun et pas de lien => nil
return nil
elseif type( data.tous ) == 'table' then
local tous1, tous2 = tonumber( data.tous[1] ), tonumber( data.tous[2] )
if tous1 and tous2 and annee >= tous1 and annee <= tous2 then
-- l'année est dans la partie 'tous' donc on retourne le lien
return lien
end
end
-- l'année n'est ni dans la partie aucun, ni dans la partie tous donc il faut tester si la page existe.
local cibleLien = mw.title.new( lien )
if cibleLien and cibleLien.exists then
return lien
end
end
---
-- Supprime le jour de la semaine, et "le" avant une date
function fun.nettoyageJour( jour )
if type( jour ) == 'string' then
local nomJour = { '[Ll]=endi', '[Mm]adi', '[Mm]èkredi', '[Jj]edi', '[Vv]andredi',
'[Ss]amed', '[Dd]imanch', '^ *[Jj]ou' }
local premier = { '<abbr class="abbr ?" title="[Pp]remye" ?>1<sup>e</sup></abbr>', '1<sup>e</sup>', '1e' }
for i = 1, #nomJour do
jour = jour:gsub( nomJour[i], '' )
end
for i = 1, #premier do
jour = jour:gsub( premier[i], '1' )
end
jour = trim( jour )
end
return jour
end
---
-- Sépare une chaine date en une table contenant les champs jour, mois et annee.
-- la date doit contenir le mois.
function fun.separationJourMoisAnnee( date )
date = trim( date )
if date then
local function erreur( periode, valeur )
return false, '<span class="error">' .. periode .. ' invalide (' .. valeur .. ')</span>'
end
local dateAvantCleanup = date
local jour, mois, annee, masquerMois, masquerAnnee, separateur
-- variable pour construire les regex
local j = '([0-3]?%d)' -- jour
local m = '([01]?%d)' -- mois numérique
local mmm = '([^%s%p%d]+[.]?)' -- mois en toute lettre
local mmm2 = '([^%s%p%d]+[.]?[-/][^%s%p%d]+[.]?)' -- mois-mois en toute lettre
local aj = '(%-?%d+)' -- année ou jour
local s = '[ ./-]+' -- séparateur simple
local sep = '([ ./-]+)' -- séparateur avec capture, pour le détecter deux fois
local moins = '(%-?)' -- signe moins pour signifier qu'il ne faut pas afficher cette donnée
date = fun.nettoyageJour( date )
if date:find( '[[', nil, true ) then
date = date
-- suppression catégories (doit être exécuté avant le code de suppression des liens)
:gsub( '%[%[[Kk]ategori:.-%]%]', '' )
:gsub( '%[%[[Cc]ategory:.-%]%]', '' )
-- suppression liens
:gsub( '%[%[([^%[%]|]*)|?([^%[%]]*)%]%]', function ( l, t ) return trim( t ) or l end )
end
date = date
-- suppression balises
:gsub( '%b<>', '' )
-- suppression des espaces insécables
-- nbsp
:gsub( '\194\160', ' ' )
:gsub( ' ', ' ' )
:gsub( ' ', ' ' )
-- narrow nbsp
:gsub( '\226\128\175', ' ' )
:gsub( ' ', ' ' )
-- thin space
:gsub( '\226\128\137', ' ' )
:gsub( ' ', ' ' )
:gsub( ' ', ' ' )
-- simple space
:gsub( ' ', ' ' )
-- plusieurs espaces
:gsub( ' +', ' ' )
-- réduction av. J-C pour simplifier un peu les regex :
:gsub( '(%d+) ?[Aa][Vv]%.? ?[Jj][ .-]*[Kk]%.?', '-%1' )
-- suppression de l'heure dans les dates ISO
:gsub( '^+?([%d-]*%d%d%-%d%d)T%d%d[%d:,.+-]*Z?$' , '%1')
-- test année seule
if date:match( '^'..aj..'$' ) then
annee = date:match( '^'..aj..'$' )
elseif date:match( '^'..aj..s..aj..moins..'$' ) then
-- jj/mm, mm/aaaa ou aaaa/mm
local a, separateur, b, sb = date:match( '^'..aj..sep..aj..moins..'$' )
a, b = tonumber( a ), tonumber( b )
if separateur:match( '^.+%-$' ) then
-- probablement mm/-aaaa, ane av.JK
b = 0 - b
end
if a > 12 and ( b < 1 or b > 31 ) or
b > 12 and ( a < 1 or a > 31 ) then
return erreur( 'Date', dateAvantCleanup )
elseif b < 1 or b > 31 then
mois, annee, masquerAnnee = a, b, sb
elseif a < 1 or a > 31 then
annee, mois = a, b
elseif b > 12 then
return erreur( 'Mois', b )
else
jour, mois, masquerMois = a, b, sb
end
elseif date:match( '^'..aj..sep..m..moins..'%2'..aj..moins..'$' ) then
-- jj/mm/aaaa ou aaaa/mm/jj
jour, separateur, mois, masquerMois, annee, masquerAnnee = date:match( '^'..aj..sep..m..moins..'%2'..aj..moins..'$' )
if separateur == '-' and masquerMois == '-' and masquerAnnee == '' and tonumber( annee ) > 0 then
-- date au format jj-mm--aaaa type 17-06--44 pour 17 jen 44 av. JK
masquerMois = nil
annee = 0 - annee
end
elseif date:match( '^'..j..sep..mmm..moins..'%2'..aj..moins..'$' ) then
-- jj mmm aaaa
jour, separateur, mois, masquerMois, annee, masquerAnnee = date:match( '^'..j..sep..mmm..moins..'%2'..aj..moins..'$' )
elseif date:match( '^'..mmm..s..aj..moins..'$' ) then
-- mmm aaaa
mois, separateur, annee, masquerAnnee = date:match( '^'..mmm..sep..aj..moins..'$' )
if separateur:match( '^.+%-$' ) then
annee = '-' .. annee
end
elseif date:match( '^'..mmm2..s..aj..moins..'$' ) then
-- mmm-mmm aaaa
mois, separateur, annee, masquerAnnee = date:match( '^'..mmm2..sep..aj..moins..'$' )
if separateur:match( '^.+%-$' ) then
annee = '-' .. annee
end
elseif date:match( '^'..j..s..mmm..moins..'$' ) then
-- jj mmm
jour, mois, masquerMois = date:match( '^'..j..s..mmm..moins..'$' )
elseif date:match( '^'..mmm..s..j..', ?'..aj..'$') then
-- mmm jj, aaaa (format anglo-saxon)
mois, jour, annee = date:match( '^'..mmm..s..j..', ?'..aj..'$')
elseif date:match( '^'..mmm..'$' ) then
mois = date
else
return erreur( 'Date', dateAvantCleanup )
end
local jn, an = tonumber( jour ), tonumber( annee )
if jn and an and ( jn > 31 or jn < 0 or #jour >= 3 ) and an <= 31 then
-- cas notamment des date ISO 2015-06-17, -0044-06-17 et -0002-06-17
-- inversion du jour et de l'année
local temp = annee
annee = jour
jour = temp
end
return fun.validationJourMoisAnnee{
jour, mois, annee,
masquerAnnee = trim( masquerAnnee ) and true or nil,
masquerMois = ( trim( masquerAnnee ) or not annee ) and trim( masquerMois ) and true or nil,
-- or nil sert juste à éviter de trainer une valeur false dans tous les tests unitaires.
}
else
return true, {}
end
end
---
-- validationJourMoisAnnee vérifie que les paramètres correspondent à une date valide.
-- la date peut être dans les paramètres 1 à 3, ou dans des paramètres jour, mois et annee.
-- La fonction retourne true suivi d'une table avec la date en paramètres nommés (sans accent sur année)
-- ou false suivi d'un message d'erreur.
function fun.validationJourMoisAnnee( frame )
local args = Outils.extractArgs( frame )
local jour, mois, numMois, annee
local bjour = args[1] or args['jou'] or ''
local bmois = tostring( args[2] or args['mwa'] or '' )
local bannee = args[3] or args['annee'] or args['ane'] or ''
local function erreur( periode, valeur )
return false, '<span class="error">' .. periode .. ' invalide (' .. valeur .. ')</span>'
end
-- on traite l'année
if Outils.notEmpty( bannee ) then
annee = tonumber( bannee )
if annee == nil and type( bannee ) == 'string' then
-- test si l'année contient av. J.-K.
annee = bannee:match( '^(%d+) ?[Aa][Vv]%.? ?[Jj][ .-]*[Kk]%.?' )
annee = tonumber( annee )
if annee then
annee = 0 - annee
else
return erreur( 'Ane', bannee )
end
elseif annee == 0 then
return erreur( 'Ane', 0 )
end
else
annee = nil
end
-- on traite le mois
if Outils.notEmpty( bmois ) then
mois, numMois = fun.determinationMois( bmois )
if mois == nil then
mois = fun.determinationSaison( bmois )
if mois == nil then
local mois1, sep, mois2 = bmois:match( '^([^%s%p%d]+[.]?)([-/])([^%s%p%d]+[.]?)$' )
if mois1 then
mois1 = fun.determinationMois( mois1 )
mois2 = fun.determinationMois( mois2 )
if mois1 == nil or mois2 == nil then
return erreur( 'Mwa', bmois )
end
mois = mois1 .. sep .. mois2
else
return erreur( 'Mwa', bmois )
end
end
end
-- on traite le jour si présent
if Outils.notEmpty( bjour ) then
if not numMois then
erreur( 'Date', 'jour avec saison ou plusieurs mois' )
end
jour = tonumber( bjour )
if jour == nil then
jour = tonumber( fun.nettoyageJour( bjour ) )
end
if jour == nil then
return erreur( 'Jour', bjour )
end
-- on valide que le jour est correct
if jour < 1 or jour > 31 then
return erreur( 'Jour', bjour )
elseif jour > listeMois[numMois].nJour then
return erreur( 'Jour', bjour .. ' ' .. mois )
elseif jour == 29 and numMois == 2 and annee and ( math.fmod( annee, 4 ) ~= 0 ) then
-- l'année bisextile sur les siècles est toujours acceptée pour être compatible avec les dates juliennes.
return erreur( 'Jour', '29 février ' .. annee )
end
else
-- S'il n'y a pas de jour on regarde si la première lettre du mois est en majuscule
if bmois:match( '^%u' ) then
-- oui, on passe la première lettre en majuscule
mois = ucfirst( mois )
end
-- s'il n'y a pas d'année non plus on retourne le mois simple
end
else
-- on teste le jour si présent
if Outils.notEmpty( bjour ) then
if annee then
return erreur( 'Mois', 'absent' )
else
bjour = fun.nettoyageJour( bjour )
jour = tonumber( bjour )
if jour then
if jour > 31 or jour < 1 then
annee = jour
jour = nil
else
return erreur( 'Date', 'jour seul : ' .. bjour )
end
else
return erreur( 'Jour', bjour )
end
end
end
end
-- vérification de l'absence d'un décalage
if annee and annee < 13 and annee > 0 and not jour and ( tonumber( bmois ) or ( not mois and tonumber( args[4] ) ) ) then
return false, '<span class="error">année improbable (' .. annee .. ')</span>'
end
local resultat = {
jour = jour,
mois = mois,
numMois = numMois,
annee = annee,
masquerAnnee = args.masquerAnnee,
masquerMois = args.masquerMois,
}
return true, resultat
end
---
-- émule le modèle {{m|Date}}.
-- Paramètres :
-- 1 : jour (numéro ou "1er") ou la date complète
-- 2 : mois (en toutes lettres) ou spécialité de l'année
-- 3 : année (nombre)
-- 4 : spécialité de l'année
-- julien : date dans le calendrier julien
-- compact : affiche le mois sous forme d'abréviation
-- avJC : non pour désactiver l'affichage de « av. J.-C. » pour les dates négatives
-- âge : ajoute la durée depuis cette date
-- agePrefix : préfixe pour l'age, 'à ' par défaut pour les décès
-- liens : active les liens par défaut
-- nolinks : ne met pas de lien sur la date (a précédence sur le paramètre "liens")
-- afficherErreurs : en cas d'erreur, si défini à "non" ne retourne pas un message d'erreur, mais le 1er argument inchangé
-- categoriserErreurs : en cas d'erreur, si défini à "non" ne catégorise pas ; peut aussi être défini avec une catégorie à utiliser à la place de celle par défaut
-- naissance : ajoute la class "bday"
-- mort : ajoute la class "dday"
function fun.modeleDate( frame )
local Yesno = require 'Module:Yesno'
local args = Outils.extractArgs( frame )
local resultat
local dateNaissanceMort
-- analyse des paramètres non nommés (ou paramètres de la date jour, mois, annee)
local test, params
local arg1, arg2, arg3 = fun.nettoyageJour( args[1] ), trim( args[2] ), trim( args[3] )
if type( arg1 ) == 'string' and arg3 == nil and ( arg1:match( '[^ ./-][ ./-]+[^ ./-]' ) or arg2 == nil or dataLiens[arg2] or mw.ustring.match( arg2, '%a %a' ) ) then
-- la date est dans le premier paramètre
test, params = fun.separationJourMoisAnnee( arg1 )
if test then
dateNaissanceMort = trim( arg2 )
if dataLiens[trim( arg2 )] then
params.qualificatif = trim( arg2 )
end
end
elseif type( arg1 ) == 'string' and type( arg2 ) == 'string' and arg3 ~= nil and ( arg1:match( '[^ ./-][ ./-]+[^ ./-]' ) or dataLiens[arg3] or mw.ustring.match( arg3, '%a %a' ) ) then
-- la date est dans le premier paramètre
test, params = fun.separationJourMoisAnnee( arg1 )
if test then
dateNaissanceMort = trim( arg2 )
if dataLiens[trim( arg3 )] then
params.qualificatif = trim( arg3 )
end
end
else
local function masquerParam( p )
-- sépare le signe moins final éventuel signifiant que le paramètre ne doit pas être affiché.
if type( p ) ~= 'string' then
return p, nil
end
local value, mask = p:match( '^%s*(.-)(%-?)%s*$' )
return value, ( mask == '-' or nil )
end
local cleanArgs = { arg1 or args.jour }
cleanArgs[2], cleanArgs.masquerMois = masquerParam( args[2] or args.mois )
cleanArgs[3], cleanArgs.masquerAnnee = masquerParam( args[3] or args.annee or args['année'] )
-- Si les paramètres ont été envoyés directement, ils ont précédence
if args.masquerMois then cleanArgs.masquerMois = args.masquerMois end
if args.masquerAnnee then cleanArgs.masquerAnnee = args.masquerAnnee end
test, params = fun.validationJourMoisAnnee( cleanArgs )
if test and dataLiens[trim( args[4] )] then
params.qualificatif = trim( args[4] )
end
end
-- analyse des paramètres nommés
if test then
params.agePrefix = args.agePrefix
if args.qualificatif and dataLiens[args.qualificatif] then
params.qualificatif = args.qualificatif
end
-- julien peut avoir trois valeurs : inactif, format standard (true), format court
params.julien = Yesno( args.julien, 'court', false )
params.avJC = Yesno( args.avJC )
if args['républicain'] and args['républicain'] ~= '' then
if args['républicain'] == 'liens' then
params.republicain = 'liens'
else
params.republicain = Yesno( args['républicain'], false )
end
else
params.republicain = false
end
if args.dateNaissanceMort and args.dateNaissanceMort ~= '' then
dateNaissanceMort = args.dateNaissanceMort
elseif args['dateNaissanceÉvénement'] and args['dateNaissanceÉvénement'] ~= '' then
dateNaissanceMort = args['dateNaissanceÉvénement']
end
if dateNaissanceMort then
local testNaissanceMort, paramsNaissanceMort = fun.separationJourMoisAnnee( dateNaissanceMort )
if testNaissanceMort then
params.anneeNaissanceMort, params.moisNaissanceMort, params.numMoisNaissanceMort, params.jourNaissanceMort = paramsNaissanceMort.annee, paramsNaissanceMort.mois, paramsNaissanceMort.numMois, paramsNaissanceMort.jour
end
end
local listeParam = {
age = 'âge',
['âge'] = 'âge',
naissance = 'naissance',
mort = 'mort',
['événement'] = 'événement',
evenement = 'evenement',
['décès'] = 'mort',
apJC = 'apJC',
nolinks = 'nolinks',
compact = 'compact',
compacte = 'compact',
}
for n, v in pairs( listeParam ) do
params[v] = params[v] or Yesno( args[n], true, false ) or nil
end
if not params.nolinks then
local liens = Yesno( args.liens )
if liens == nil then
-- liens actifs par défaut si qualificatif
liens = params.qualificatif and params.qualificatif ~= "" and true or false
end
params.nolinks = not liens
end
-- sortie pour les tests unitaire, ou pour débugger
if args.debug then
return params
end
resultat = fun._modeleDate( params )
else
local yn_afficherErreurs = Yesno( args.afficherErreurs )
if yn_afficherErreurs == nil or yn_afficherErreurs == true then
resultat = params
else
resultat = args[1]
end
local currentTitle = mw.title.getCurrentTitle()
if currentTitle:inNamespaces( 0, 4, 10, 14, 100 )
and not Outils.notEmpty( args.nocat )
and not currentTitle.prefixedText:match( '^Modèl:.+/Test$' ) then
local categorie
local yn_categoriserErreurs = Yesno( args.categoriserErreurs, 'custom', true )
if yn_categoriserErreurs == nil or yn_categoriserErreurs == true then
categorie = '[[Kategori:Paj ki itilize modèl dat ak sentaks ki pa kòrèk]]'
elseif yn_categoriserErreurs == false then
categorie = ''
else
local nomCategorie = args.categoriserErreurs
:gsub( '^%[%[', '' )
:gsub( '%]%]$', '' )
:gsub( '^:?[Cc]atégorie:', '' )
:gsub( '^:?[Cc]atégory:', '' )
categorie = '[[Kategori:' .. nomCategorie .. ']]'
end
resultat = resultat .. categorie
end
end
return resultat or ''
end
function fun._modeleDate( args )
local annee, mois, numMois, jour = args.annee, args.mois, args.numMois, args.jour
local qualificatif = args.qualificatif
if ( annee or mois or jour ) == nil then
return
end
-- on traite l'âge, naissance et mort
local agePrefix = args.agePrefix
local age = args['âge'] and fun.age( annee, numMois, jour )
local naissance = args.naissance
local mort = args.mort
local evenement = args['événement'] or args.evenement
if mort and args.anneeNaissanceMort then
age = fun.age( args.anneeNaissanceMort, args.numMoisNaissanceMort, args.jourNaissanceMort, annee, numMois, jour )
agePrefix = agePrefix or 'à ' -- faut-il mettre \194\160 ?
elseif evenement and args.anneeNaissanceMort then
if naissance then
age = fun.age( annee, numMois, jour, args.anneeNaissanceMort, args.numMoisNaissanceMort, args.jourNaissanceMort )
else
age = fun.age(args.anneeNaissanceMort, args.numMoisNaissanceMort, args.jourNaissanceMort, annee, numMois, jour )
end
end
agePrefix = agePrefix or ''
-- on traite le calendrier
local gannee, gmois, gjour = annee, numMois, jour -- date suivant le calendrier grégorien pour <time>
local jannee, jmois, jjour = annee, mois, jour -- date suivant le calendrier julien si necessaire
local julienDate, julienSup, julienSep -- servira éventuellement à afficher la date selon le calendrier julien
local gregAprMois, gregAprAn, gregFin -- message de calendrier grégorien lorsque la date est selon le calendrier julien
local dateRepublicaine
if annee and jour then
local amj = annee * 10000 + numMois * 100 + jour
if amj < 15821014 then
if annee > 0 then
gannee, gmois, gjour = fun.julianToGregorian( annee, numMois, jour )
else
-- calendrier grégorien proleptique avec année 0.
gannee, gmois, gjour = fun.julianToGregorian( annee + 1, numMois, jour )
end
args.julien = false
elseif args.julien then
gannee, gmois, gjour = fun.julianToGregorian( annee, numMois, jour )
annee, mois, jour = gannee, listeMois[gmois].nom, gjour
if jjour == 1 then
jjour = modelePremier
end
if args.compact then
jmois = listeMois[jmois].abrev
end
if args.julien == 'court' then
julienDate = jjour .. ' ' .. jmois .. ' '
julienSup = '<sup>[[almanak jilyen|jil.]]</sup>'
if jannee == annee then
gregAprMois = '<sup>[[almanak gregoryen|greg.]]</sup>'
else
julienDate = julienDate .. jannee .. ' '
gregAprAn = '<sup>[[almanak gregoryen|greg.]]</sup>'
end
julienSep = ' / '
else
julienDate = jjour .. ' ' .. jmois .. ' ' .. jannee
julienSep = ' ('
gregFin = ' [[Passage du calendrier julien au calendrier grégorien|dans le calendrier grégorien]])'
end
elseif args.republicain then
local DateRep = require 'Module:Date républicaine'
local RepSansLiens
if args.republicain == 'liens' then
RepSansLiens = false
else
RepSansLiens = true
end
dateRepublicaine = DateRep._date_republicaine(
RepSansLiens,
{ fun.formatRepCal( fun.do_toRepCal{gannee, gmois, gjour} ) }
)
end
else
if annee and annee < 0 then
gannee = gannee + 1
end
args.julien = false
args.republicain = false
end
-- on génère le résultat
-- Déclarations des variables
local wikiListe = {} -- reçoit le texte affiché pour chaque paramètre
local iso = {} -- reçoit le format date ISO de ce paramètre
local texteMois = mois -- texte du mois qui sera affiché (éventuellement l'abréviation)
if args.compact then
if not numMois then
-- mois est autre chose qu'un simple mois : saison, mois-mois... auquel cas, pas d'abréviation (provoquait erreur Lua)
-- (les abréviations pour le cas "mois[-/]mois" seraient théoriquement possibles, mais ça reste à implémenter)
else
if args.nolinks then
texteMois = '<abbr class="abbr" title="' .. mois .. '">' .. listeMois[mois].abrev .. '</abbr>'
else
texteMois = listeMois[mois].abrev
end
end
end
mois = mois and mois:gsub( 'out', 'août' )
local dataQualificatif, dataCat
if not args.nolinks then
dataQualificatif = dataLiens[qualificatif or '']
if type( dataQualificatif ) ~= 'table' then
-- si le qualificatif n'est pas dans la base de données, on crée une table minimum,
-- qui imposera un test sur l'année, mais considère qu'il n'y a pas de lien sur le jour ou le mois
dataQualificatif = { qualificatif = qualificatif, annee = { } }
end
dataCat = dataLiens[dataQualificatif.cat]
if type( dataCat ) ~= 'table' or dataCat == dataQualificatif then
dataCat = { qualificatif = '' }
end
end
local function wikiLien( lien, texte )
if lien == texte then
return '[[' .. texte .. ']]'
else
return '[[' .. lien .. '|' .. texte .. ']]'
end
end
-- le jour si présent
local qualifJour = ''
if jour then
if args.nolinks then
if jour == 1 then
jour = modelePremier
end
table.insert( wikiListe, jour )
else
qualifJour = dataQualificatif.jour and dataQualificatif.qualificatif
or dataCat.jour and dataCat.qualificatif
or ''
local texteJour, lien
if jour == 1 then
texteJour = '1<sup>e</sup>'
lien = '1e ' .. mois
else
texteJour = jour
lien = jour .. ' ' .. mois
end
if qualifJour ~= '' then
lien = lien .. ' ' .. qualifJour
end
-- s'il n'y a pas de lien sur le mois, il sera affiché avec le jour.
table.insert( wikiListe, wikiLien( lien, texteJour ) )
table.insert( wikiListe, wikiLien( lien, texteJour .. ' '.. texteMois ) )
end
table.insert( iso, 1, string.sub( '0' .. gjour, -2 ) )
end
-- le mois
if mois then
if #wikiListe == 0 and annee == nil then
return texteMois
end
if args.nolinks then
if not args.masquerMois then
table.insert( wikiListe, texteMois )
end
else
local lien
if annee then
if not numMois then
-- mois est autre chose qu'un simple mois : saison, mois-mois... auquel cas, pas de lien
else
lien = existDate( dataQualificatif, annee, mois ) or existDate( dataCat, annee, mois )
if lien == nil and qualificatif and qualifJour == '' then
-- nouveau test sans le qualificatif uniquement s'il n'y a pas d'éphémérides pour ce qualificatif.
lien = existDate( dataLiens[''], annee, mois )
end
end
end
if lien or args.masquerMois then
-- s'il y a un lien on retire le lien affichant 'jour mois' pour ajouter '[[mois annee|mois]]'
table.remove( wikiListe )
if not args.masquerMois then
table.insert( wikiListe, wikiLien( lien, texteMois ) )
end
elseif #wikiListe > 0 then
-- sinon on retire le lien affichant 'jour' pour ne garder que le lien 'jour mois'
table.remove( wikiListe, #wikiListe - 1 )
elseif args.masquerAnnee then
-- s'il n'y a pas de jour et que l'année n'est pas affichée, on insère le mois seul.
table.insert( wikiListe, texteMois )
end
end
if gmois then
table.insert( iso, 1, string.sub( '0' .. gmois, -2 ) )
end
table.insert( wikiListe, gregAprMois )
end
-- l'année
if annee and not (args.julien == true and args.nolinks and jannee == annee ) then
if not args.masquerAnnee then
local texteAnnee = annee
if annee < 0 then
local anneeAvJc = 0 - annee
if args.avJC == false then
texteAnnee = anneeAvJc
else
texteAnnee = anneeAvJc .. ' <abbr class="abbr" title="'
.. anneeAvJc .. ' avan Jezi-Kris">av. J.-K.</abbr>'
end
elseif args.apJC then
texteAnnee = texteAnnee .. ' <abbr class="abbr" title="'
.. texteAnnee .. ' aprè Jezi-Kris">apr. J.-K.</abbr>'
end
if args.nolinks then -- seulement si on doit l'afficher
table.insert( wikiListe, texteAnnee )
else
local lien = existDate( dataQualificatif, annee ) or existDate( dataCat, annee )
if not lien then
if annee < 0 then
local anneeAvJc = 0 - annee
lien = anneeAvJc .. ' av. J.-K.'
else
lien = annee
end
end
if mois and #wikiListe == 0 then
-- si le mois n'a pas de lien et n'est pas affiché avec le jour, il est affiché avec l'année.
texteAnnee = texteMois .. ' ' .. texteAnnee
end
table.insert( wikiListe, wikiLien( lien, texteAnnee ) )
end
end
end
if annee then
if gannee > 999 then
table.insert( iso, 1, gannee )
elseif gannee > -1 then
table.insert( iso, 1, string.sub( '000' .. gannee , -4 ) )
elseif gannee > -999 then
-- calendrier grégorien proleptique avec année 0.
table.insert( iso, 1, 'U-' .. string.sub( '000' .. ( 0 - gannee ), -4 ) )
else
table.insert( iso, 1, 'U' .. gannee )
end
end
table.insert( wikiListe, gregAprAn )
-- l'age
if type( age ) == 'number' and age >= 0 and ( not naissance or age < 120 ) then
if age == 0 then
age = '(' .. agePrefix .. 'mwens ke\194\160ane)'
elseif age == 1 then
age = '(' .. agePrefix .. '1\194\160ane)'
else
age = '('.. agePrefix .. age .. '\194\160ane)'
end
else
age = false
end
-- compilation du résultat
local wikiTexte = table.concat( wikiListe, ' ' )
local isoTexte = table.concat( iso, '-' )
-- On ajoute un peu de sémantique.
local wikiHtml = mw.html.create( '' )
if julienDate then
wikiHtml:tag( 'span')
:addClass( 'nowrap' )
:attr( 'data-sort-value', isoTexte )
:wikitext( julienDate )
:node( julienSup )
:done()
:wikitext( julienSep )
end
local dateHtml = wikiHtml:tag( 'time' )
:wikitext( wikiTexte )
if wikiTexte:match( ' ' ) then
dateHtml:addClass( 'nowrap' )
end
if isoTexte ~= wikiTexte then
dateHtml:attr( 'datetime', isoTexte )
:attr( 'data-sort-value', isoTexte )
end
if not args.nolinks then
dateHtml:addClass( 'date-lien' )
end
if naissance then
dateHtml:addClass( 'bday' )
elseif mort then
dateHtml:addClass( 'dday' )
end
wikiHtml:wikitext( gregFin )
if dateRepublicaine then
wikiHtml:wikitext( ' (', dateRepublicaine, ')' )
end
if age then
wikiHtml:wikitext( ' ' )
:tag( 'span' )
:addClass( 'noprint')
:wikitext( age )
:done()
end
return tostring( wikiHtml )
end
-- isoJourMoisAnnee transforme une date iso en un tableau équivalent à celui retourné par separationJourMoisAnnee
local function isoJourMoisAnnee( dateiso )
if dateiso and dateiso:sub( 1, 2 ) == 'U-' then
dateiso = dateiso:sub( 2 )
end
local annee, mois, jour = dateiso:match( '^(%-?%d%d%d%d+)%-(%d+)%-(%d+)$' )
if not annee then
annee, mois = dateiso:match( '^(%-?%d%d%d%d+)%-(%d+)$' )
end
if not annee then
annee = dateiso:match( '^(%-?%d%d%d%d+)$' )
end
if annee and tonumber( annee ) <= 0 then
-- la date iso utilise une année 0
annee = tonumber( annee ) - 1
end
if not annee then
mois, jour = dateiso:match( '^(%d+)%-(%d+)$' )
end
return fun.validationJourMoisAnnee{ jour, mois, annee }
end
-- analyseDate sépare la date du contenu qui précède et suit, supprime les liens, et retourne si possible une table avec jour mois année
local function analyseDate( d )
if trim( d ) then
local datesMultiples = d:match( ' ou ' ) or d:match( '^[Aa]nt ' ) or d:match( '<time.->.-<time.->' )
if datesMultiples then
return d
end
local approx = d:match( '^[Aa]lantou ' ) or d:match( '^[Aa]prè ' ) or d:match( '^[Aa]van ' )
-- booléen qui indique que la date est approximative, empêchant l'affichage de l'âge ou de la durée
approx = approx and true or false
local analyse = d
-- s'il s'agit d'une date formattée avec {{date}}, on utilisera la valeur du datetime pour reconstruire la date
local dateiso = d:match( 'datetime="([U%d-]+)"' ) or d:match( '<time>(.-)</time>' )
local debut, strDate, fin
if dateiso then
-- supprime le formatage créé par {{date}}
debut, strDate, fin = analyse:match( '(.-)<time.->(.-)</time>(.*)' )
end
if not strDate then
-- sépare une date av. J.-C. du contenu qui suit
strDate, fin = analyse:match( '(.-%d av%. J%.%-C%.]*%-?)(.*)' )
end
if not strDate then
-- sépare la date (avec ses liens) d'une référence ou contenu commençant par un espace
strDate, fin = analyse:match( '(.-%d%d%d%]*%-?)([\127 ].+)' )
end
if not strDate then
-- sépare la date du contenu commençant par <br>
strDate, fin = analyse:match( '(.-%d%d%d%]*%-?)(<br ?/?>.+)' )
end
analyse = strDate or analyse
-- supprime les liens
analyse = analyse:gsub(
'%[%[([^%[%]|]*)|?([^%[%]]*)%]%]',
function ( l, t )
return trim( t ) or l
end
)
local t, r
if dateiso then
-- Si la date était formatée avec {{date}}, on la reconstruit à partir de la valeur de datetime
t, r = isoJourMoisAnnee( dateiso )
end
if t then
local tTexte, rTexte = fun.separationJourMoisAnnee( analyse )
if r.annee and r.jour then
local amj = r.annee * 10000 + r.numMois * 100 + r.jour
-- Les dates avant le 14 octobre 1582 sont dans le calendrier julien mais utilisent un datetime grégorien
local gregToJul = amj < 15821014
if not gregToJul and amj < 15821024 then
-- Entre le 14 et le 23 octobre, on ne peut pas différencier entre julien et grégorien sans comparer avec le texte
gregToJul = tTexte and rTexte.jour ~= r.jour
end
if gregToJul then
local jannee, jmois, jjour = fun.gregorianToJulian( r.annee, r.numMois, r.jour )
r = {
annee = jannee,
numMois = jmois,
mois = listeMois[jmois].nom,
jour = jjour
}
end
end
if tTexte then
-- On analyse le texte de la date pour repérer les dates partiellement masquées
-- Si seul le jour est affiché, separationJourMoisAnnee l'interprète comme une année
if not rTexte.jour and not rTexte.mois and rTexte.annee == r.jour then
r.masquerMois = true
r.masquerAnnee = true
elseif rTexte.jour == r.jour and rTexte.mois == r.mois and not rTexte.annee then
r.masquerAnnee = true
end
end
else
t, r = fun.separationJourMoisAnnee( analyse )
end
if t then
return r, fin, debut, approx
else
return d, fin, debut, approx
end
end
end
---
-- fonction destinée aux infobox, notamment pour afficher les dates de naissance et de mort
-- les liens présent dans les dates fournies sont automatiquement supprimés pour gérer les cas où
-- le paramètre contient déjà un modèle date.
-- Paramètres :
-- 1 : type de date à afficher (naissance / n, mort / m, ou date / d)
-- 2 : Date ou date de naissance
-- 3 : Date de mort si type n ou m
-- qualificatif = suffixe des page de date à lier (exemple : en musique)
-- nolinks : n'affiche pas de lien
-- préfixe : préfixe à afficher s'il y a un jour (par défaut '')
-- préfixe sans jour : préfixe à afficher s'il n'y a pas de jour (par défaut : '')
function fun.dateInfobox( frame )
local args = frame.args
if type( args ) ~= 'table' or not ( args[1] and args[2] ) then
return
end
-- prefix ajoute un préfixe en fonction de la présence ou non du jour si le paramètre "préfixe sans jour" est défini
local function prefix( dateString )
if dateString then
local datetime = dateString:match( 'datetime="([U%d%-]+)"' )
if datetime and datetime:match('%-%d%d%-%d%d') and trim( args['préfixe'] ) then
return args['préfixe'] .. ' ' .. dateString
end
if trim( args['préfixe sans jour'] ) then
return args['préfixe sans jour'] .. ' ' .. dateString
end
end
return dateString
end
local naissance = args[1]:match( '^n' ) == 'n'
local mort = args[1]:match( '^m' ) or args[1]:match( 'décès' )
local evenement = args[1]:match( '^é' )
local affichageDate, qualificatif = args[2], args[4]
local affichageDateTab, resultatDate, complementDate, prefixeDate, approxDate
local dateNaissance, dateMort, approxNaissance, approxMort
if mort or evenement then
affichageDate = args[3]
end
if not trim( affichageDate ) then
return
end
if affichageDate:match( ']]</time>' ) or affichageDate:match( '</time>]]' ) then
-- S'il y a des liens il y a probablement déjà un modèle date, évitons de l'exécuter une 2e fois
if ( naissance or mort or evenement ) and ( affichageDate:match( 'wikidata%-linkback' )) then
local _
dateNaissance, _, _, approxNaissance = analyseDate( args[2] )
dateMort, _, _, approxMort = analyseDate( args[3] )
resultatDate = affichageDate
else
return prefix( affichageDate )
end
else
affichageDateTab, complementDate, prefixeDate, approxDate = analyseDate( affichageDate )
if type( affichageDateTab ) ~= 'table' then
return affichageDateTab
else
if naissance then
local _
dateNaissance, approxNaissance = affichageDateTab, approxDate
dateMort, _, _, approxMort = analyseDate( args[3] )
elseif mort then
local _
dateNaissance, _, _, approxNaissance = analyseDate( args[2] )
dateMort, approxMort = affichageDateTab, approxDate
else
qualificatif = args[3]
end
affichageDateTab.naissance = not approxNaissance and naissance
affichageDateTab.mort = not approxMort and mort
affichageDateTab.evenement = evenement
affichageDateTab.qualificatif = args.qualificatif or qualificatif
affichageDateTab.liens = true -- Dans les infobox, liens activés par défaut
affichageDateTab.nolinks = args.nolinks
affichageDateTab.nocat = args.nocat
affichageDateTab.julien = args.julien
end
end
resultatDate = resultatDate or fun.modeleDate( affichageDateTab )
local age, prefixAge, suffixAge, calculAge = '', ' <span class="noprint">(', ')</span>', nil
if naissance and
dateNaissance and
not approxNaissance and
not dateMort and
type( dateNaissance ) == 'table'
then
calculAge = fun.age( dateNaissance.annee, dateNaissance.numMois, dateNaissance.jour )
if calculAge and calculAge > 120 then
calculAge = nil
end
elseif ( mort or evenement ) and
dateNaissance and
dateMort and
not approxNaissance and
not approxMort and
type( dateNaissance ) == 'table'
and type( dateMort ) == 'table'
then
calculAge = fun.age(
dateNaissance.annee,
dateNaissance.numMois,
dateNaissance.jour,
dateMort.annee,
dateMort.numMois,
dateMort.jour
)
prefixAge = ' (ak '
suffixAge = ')'
end
if tonumber( calculAge ) then
if calculAge > 1 then
age = prefixAge .. calculAge .. '\194\160ane' .. suffixAge
elseif calculAge == 1 then
age = prefixAge .. 'en\194\160ane' .. suffixAge
elseif calculAge == 0 then
age = prefixAge .. 'mwens ke yon\194\160ane' .. suffixAge
end
if complementDate and complementDate:match( 'ane?%)' ) then
complementDate = ''
end
end
return ( prefixeDate or '' ) .. prefix( resultatDate ) .. ( complementDate or '' ) .. age
end
function fun.dureeInfobox( frame )
local args = frame.args
if type( args ) ~= 'table' or not args[1] then
return
end
-- vérifie si une chaîne semble contenir une durée
local function contientDuree( chaine )
return chaine and (
mw.ustring.match( chaine, '%f[%w]ane?%f[^%w]' ) or
mw.ustring.match( chaine, '%f[%w]mwa%f[^%w]' ) or
mw.ustring.match( chaine, '%f[%w]jou?%f[^%w]' )
)
end
local jour1, mois1, annee1, jour2, mois2, annee2 = '', '', '', '', '', ''
local t1, fin1, _, approx1 = analyseDate( args[1] )
if approx1 or type( t1 ) ~= 'table' then
return
end
jour1 = t1.jour or ''
mois1 = t1.numMois or ''
annee1 = t1.annee or ''
if args[2] and args[2] ~= "" then
local t2, fin2, _, approx2 = analyseDate( args[2] )
if approx2 or type( t2 ) ~= 'table' then
return
end
if contientDuree( fin2 ) then
-- La durée semble déjà renseignée manuellement
return
end
jour2 = t2.jour or ''
mois2 = t2.numMois or ''
annee2 = t2.annee or ''
if annee1 == '' or annee2 == '' then
-- Mieux vaut ne pas extrapoler l'année
return
end
if ( jour1 ~= '' and jour2 == '' ) or
( mois1 ~= '' and mois2 == '' ) then
-- Si la deuxième date est moins précise que la première, mieux vaut ne rien afficher
return
end
elseif annee1 == '' or contientDuree( fin1 ) then
-- L'année n'est pas spécifiée ou la durée semble déjà renseignée
return
end
local duree = Duree._duree({ jour1, mois1, annee1, jour2, mois2, annee2, noerror = true })
if duree then
return '<br /><small>(' .. duree .. ')</small>'
end
end
---
-- la fonction dateISO renvoie un date au format aaaa-mm-jj (sans liens)
-- l'année peut être sous la forme 2013 ou [[2013 en litérature|2013]]
-- le mois peut être en lettres ou en chiffres
-- le jour peut être sous la forme '05', '{{1er}}' ou 'vendredi 13'
function fun.dateISO( frame )
local args = Outils.extractArgs( frame )
local annee = Outils.notEmpty( args['année'], args.annee, args.year, args.date )
-- extraction de l'année
if type( annee ) == 'string' then
annee = ( tonumber( annee ) -- match '2013'
or string.match ( annee, '%D(%d%d%d%d)%D' ) -- match '[[2013 nan mizik|2013]]'
or string.match ( annee, '%D(%d%d%d%d)$' ) -- match '17 septanm 2013'
or string.match ( annee, '^(%d%d%d%d)%D' ) -- match '2013-09-17'
)
end
annee = tonumber( annee )
-- le format de date iso est défini suivant le calendrier grégorien.
-- Avant l'année 1583 la date est calendrier est probablement du calendrier julien,
-- donc autant s'abstenir.
if annee and annee > 1582 then
local mois = Outils.notEmpty( args.mois, args.month )
-- num mois trouve le numéro du mois, qu'il soit numérique ou texte, complet ou abrégé.
local nomMois, numMois = fun.determinationMois( mois )
if numMois then
mois = '-' .. string.sub( '0' .. numMois, -2 )
local jour = Outils.notEmpty( args.jour, args.day, args['quantième'] )
if type( jour ) == 'string' then
jour = tonumber( jour ) or tonumber( string.match ( jour, '%d+') )
end
jour = tonumber( jour )
if jour and jour <= listeMois[numMois].nJour then
jour = '-' .. string.sub( '0' .. jour, -2 )
return annee .. mois .. jour
else
return annee .. mois
end
else
return tostring( annee )
end
end
end
---
-- Rang du jour dans l'année
-- Usage : do_dayRank{année,mois,jour}
function fun.do_dayRank(arguments)
local yr = tonumber(arguments.year or arguments[1]) or 1
local mt = tonumber(arguments.month or arguments[2]) or 1
local dy = tonumber(arguments.day or arguments[3]) or 1
-- Rangs des premiers des mois
local ranks = {0,31,59,90,120,151,181,212,243,273,304,334}
local rank = (ranks[mt] or 0) + dy - 1
if(fun.isLeapYear(yr) and (mt >= 3)) then
rank = rank+1
end
return rank
end
-- Nombre de jours entre deux années (du 1er janvier au 1er janvier)
-- Suit le calendrier grégorien
function fun.do_daysBetween(arguments)
local yr1 = tonumber(arguments[1]) or 0
local yr2 = tonumber(arguments[2]) or 0
return fun.daysSinceOrigin(yr2) - fun.daysSinceOrigin(yr1)
end
-- Nombre de jours depuis l'année 1 (du 1er janvier au 1er janvier)
function fun.daysSinceOrigin(year)
local yr = year-1
return 365*yr + math.floor(yr/4) - math.floor(yr/100) + math.floor(yr/400)
end
-- Test d'année bissextile (Suit le calendrier grégorien)
function fun.isLeapYear(year)
local yr = tonumber(year) or 1
return (yr%4 == 0) and ((yr%100 ~= 0) or (yr%400 == 0))
end
-- Conversion d'un nombre en chiffres romains
function fun.toRoman(number)
local n = math.floor(number)
local letters = {"I","V","X","L","C","D","M","",""}
local pattern = {"","0","00","000","01","1","10","100","1000","02"}
local result = ""
if(n<=0 or n>=4000) then
result = "---"
else
for i=1,7,2 do
local p = pattern[n%10 + 1]
for j=0,2 do
p = string.gsub(p,tostring(j),letters[i+j])
end
result = p .. result
n = math.floor(n/10)
end
end
return result
end
-- Conversion et affichage d'une date dans le calendrier républicain
function fun.dateRepublicain(frame)
local pframe = frame:getParent()
local arguments = pframe.args
return fun.formatRepCal(fun.do_toRepCal(arguments))
end
---
-- Calcul d'une date dans le calendrier républicain
-- On suppose que les années 4n+3 sont sextiles (3, 7, 11...)
function fun.do_toRepCal(arguments)
local yr = tonumber(arguments.year or arguments[1]) or 2000
-- rang absolu du jour demandé, le jour 0 étant le 22 septembre 1792 (1er jour de l'an I)
local repDays = fun.do_dayRank(arguments) + fun.do_daysBetween{1792,yr} - fun.do_dayRank{1792,9,22}
local repYear = math.floor((repDays+731)/365.25) - 1
local repDayRank = repDays - 365*(repYear-1) - math.floor(repYear/4)
local repMonth, repDay = math.floor(repDayRank/30)+1, (repDayRank%30)+1
return {repYear, repMonth, repDay}
end
---
-- Formatage d'une date selon le calendrier républicain
-- Usage : fun.formatRepCal{année,mois,jour}
function fun.formatRepCal(arguments)
local months = {"Vendémiaire","Brumaire","Frimaire","Nivôse","Pluviôse","Ventôse","Germinal","Floréal","Prairial","Messidor","Thermidor","Fructidor"}
local extras = {"de la vertu","du génie","du travail","des récompenses","de l'opinion","de la Révolution"}
local result = ""
if(arguments[2] < 13) then
result = result .. tostring(arguments[3]) .. "\194\160" .. months[arguments[2]]
else
result = result .. "jou " .. extras[arguments[3]]
end
result = result .. " ane a " .. fun.toRoman(arguments[1])
return result
end
---
-- Voir Modèle:Âge
-- retourne l'âge en fonction de la ou les dates fournies. La valeur retournée est de type 'number'
-- Paramètres :
-- 1, 2, 3 : année, mois jour de naissance (supposé dans le calendrier grégorien)
-- 4, 5, 6 : année, mois, jour du calcul (facultatif, par défaut la date UTC courante).
function fun.age( an, mn, jn, ac, mc, jc )
if ac == nil then
local today = os.date( '!*t' )
ac = today.year
mc = today.month
jc = today.day
else
ac = tonumber( ac )
mc = tonumber( mc )
jc = tonumber( jc )
end
an = tonumber( an )
mn = tonumber( mn )
jn = tonumber( jn )
if an == nil or ac == nil or mn == nil or mc == nil then
-- pas de message d'erreur qui risque de faire planter la fonction appelante
-- à elle de gérer ce retour.
return
end
local age = ac - an
-- si l'intervalle traverse l'année zéro, il faut soustraire une année
-- parce que cette année n'existe pas dans les calendriers chrétiens
if an < 0 and ac > 0 then
age = age - 1
end
if mc == mn then
if jc == nil or jn == nil then
return
end
return age - ( jc < jn and 1 or 0 )
else
return age - ( mc < mn and 1 or 0 )
end
end
function fun.modeleAge( frame )
local args = Outils.extractArgs( frame )
local age = fun.age(
args[1] or args['ane'],
args[2] or args['mwa'],
args[3] or args['jou'],
args[4],
args[5],
args[6]
)
if age then
return age
else
return '<span class="error">Paramètres incorrects ou insuffisants pour calculer l\'âge précis</span>'
end
end
---
-- calcul du jour julien à partir d'une date du calendrier grégorien
function fun.julianDay( year, month, day, hour, min, sec )
local julian
julian = math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) * 1461 / 4 )
- math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) / 100 )
+ math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) / 400 )
+ math.floor( ( math.fmod( month + 57609, 12 ) + 4 ) * 153 / 5 )
+ day + ( hour or 12 ) / 24 + ( min or 0 ) / 1440 + ( sec or 0 ) / 86400
- 32167.5
return julian
end
---
-- calcul du jour julien à partir d'une date du calendrier julien
function fun.julianDayJulian( year, month, day, hour, min, sec )
local julian
julian = math.floor( math.floor( ( year * 12 + month + 57609 ) / 12 - 1 ) * 1461 / 4 )
+ math.floor( ( math.fmod( month + 57609, 12 ) + 4 ) * 153 / 5 )
+ day + ( hour or 12 ) / 24 + ( min or 0 ) / 1440 + ( sec or 0 ) / 86400
- 32205.5
return julian
end
---
-- calcul d'une date dans le calendrier grégorien à partir du jour julien
function fun.julianDayToGregorian( julianDay )
local base = math.floor( julianDay + 32044.5 ) -- 1 March -4800 (proleptic Gregorian date)
local nCentury = math.floor( ( base * 4 + 3 ) / 146097 )
local sinceCentury = base - math.floor( nCentury * 146097 / 4 )
local nYear = math.floor( ( sinceCentury * 4 + 3 ) / 1461 )
local sinceYear = sinceCentury - math.floor( nYear * 1461 / 4 )
local nMonth = math.floor( ( sinceYear * 5 + 2 ) / 153 )
local day = sinceYear - math.floor( ( nMonth * 153 + 2 ) / 5 ) + 1
local month = nMonth - math.floor( nMonth / 10 ) * 12 + 3
local year = math.floor( sinceYear / 306 ) + nYear + 100 * nCentury - 4800
return year, month, day
end
---
-- calcul d'une date dans le calendrier julien à partir du jour julien
-- calcul basé sur l'algorithme de la page https://en.wikipedia.org/wiki/Julian_day#Julian_or_Gregorian_calendar_from_Julian_day_number
function fun.julianDayToJulian( julianDay )
local y = 4716
local v = 3
local j = 1401
local u = 5
local m = 2
local s = 153
local n = 12
local w = 2
local r = 4
local B = 274277
local p = 1461
local C = -38
local f = julianDay + j
local e = r * f + v
local g = math.modf( math.fmod( e, p ) / r )
local h = u * g + w
local D = math.modf( math.fmod( h, s ) / u ) + 1
local M = math.fmod( math.modf( h / s ) + m, n ) + 1
local Y = math.modf( e / p ) - y + math.modf( ( n + m - M ) / n )
return Y, M, D
end
---
-- calcul d'une date dans le calendrier grégorien à partir d'une date dans le calendrier julien
function fun.julianToGregorian( year, month, day )
return fun.julianDayToGregorian( fun.julianDayJulian( year, month, day ) )
end
---
-- calcul d'une date dans le calendrier julien à partir d'une date dans le calendrier grégorien
function fun.gregorianToJulian( year, month, day )
year = tonumber(year)
if month then month = tonumber(month) else month = 6 end --prend une valeur centrale pour donner un best "guess"
if day then day = tonumber(day) else day = 15 end
return fun.julianDayToJulian( fun.julianDay( year, month, day ) )
end
--[[
Cette fonction retourne "CET" ou "CEST" selon que dans la pseudo-timezone en cours
c'est l'heure d'été ou l'heure d'hiver.
Cette fonction n'a de sens a priori que pour des modèles utilisés en Europe
Paramètre optionnel non nommé : "sans lien" : retourne le texte CET/CEST. sinon
retourne ce même texte avec un wikilien vers les articles correspondants
--]]
function fun.CEST(frame)
-- option : ne pas créer de wikilien
local opt = trim(frame.args[1] or frame:getParent().args[1])
-- on récupère l'information dans la zone courante
local t = mw.getContentLanguage():formatDate("I", nil, true)
if (t == "1") then -- heure d'été
if (opt == "sans lien") then
return "CEST"
elseif (opt == "décalage") then
return "2"
else
return "[[Heure d'été d'Europe centrale|CEST]]"
end
else -- heure d'hiver (ou autre zone où ça ne s'applique pas)
if (opt == "sans lien") then
return "CET"
elseif (opt == "décalage") then
return "1"
else
return "[[Heure normale d'Europe centrale|CET]]"
end
end
end
return fun
2hemyoiif9coefba46ipzebh6nxztpz
Module:Linguistique
828
64467
855577
825208
2024-11-12T13:58:43Z
BwaKajou
31668
855577
Scribunto
text/plain
-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.
local p = {}
local lang = 'fr'
local langobj = mw.language.new(lang)
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
-- i18n
local wordor = ' ou '
local wordand = ' et '
local comma = ', '
local fullstop = '. '
local wordsep = ' '
local function isin(str, pattern)
if str and pattern and mw.ustring.find(str, pattern, 1, true ) then
return true
end
end
local function processgender(str)
if (str == 'f') or (str == 'fem') or (str == 'feminine') then
return 'feminine'
elseif (str == 'n') or (str == 'neutral') then
return 'neutral'
else
return 'masculine'
end
end
local function processnumber(str)
if (str == 'p') or (str == 'plural') then
return 'plural'
else
return 'singular'
end
end
function p.vowelfirst (str)
if str and #str > 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end
end
function p.inparentheses(str, lang, space)
if (not str) or str == '' then
return str
end
str = '(' .. str .. ')'
if not space then
space = ' '
end
return space .. str
end
function p.of(word, gender, number, determiner, raw)
if not word then
word = ''
end
word = mw.text.trim( word )
if not raw then --texte non mis en forme pour gérer les élisions
raw = p.texteLien(word) or word
end
gender = processgender(gender)
number = processnumber(number)
local vowel = p.vowelfirst(raw)
local feminine = (gender== 'feminine')
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if number == 'plural' then
return 'des ' .. word
elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide
if vowel then
return 'de l’' .. word
elseif feminine then
return 'de la ' .. word
else
return 'du ' .. word
end
else
if vowel then
return 'd’' .. word
else
return 'de ' .. word
end
end
end
function p.noungroup(noun, adj)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
return noun .. wordsep(lang) .. adj -- lorsque c'est en français
end
function p.quickconj(args, conjtype)
local separator, conjunction
-- cas où separator ~= conj
if type(conjtype) == 'function' then
conjtype = conjtype()
end
if (not conjtype) or conjtype == 'and' then
separator, conjunction = comma, wordand
elseif conjtype == 'or' then
separator, conjunction = comma, wordor
end
if (separator and conjunction) then
return mw.text.listToText(args, separator, conjunction)
end
-- autres cas
if conjtype == 'comma' then
separator = comma
elseif conjtype == 'new line' or conjtype == 'lowercase new line' then
separator = '<br />'
if conjtype == 'new line' then
for i, j in pairs(args) do -- ajoute une majuscule
args[i] = p.ucfirst(j)
end
end
else
separator = conjtype
end
return table.concat(args, separator)
end
function p.conj(args, conjtype)
if (not args) then
return nil
end
local newargs = {}
for i, j in pairs(args) do
table.insert(newargs, j)
end
if #newargs == 0 then
return nil
end
return p.quickconj(newargs, conjtype)
end
function p.conjfromWiki(frame)
args = frame.args
if not args or not args[1] then
args = mw.getCurrentFrame():getParent().args
end
local conjtype = args.type
newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, conjtype)
end
local function findcomplement(str, beginswith) -- retourne le nom principal et le complément du nom ou nil et nil si échec
local particles = {" de la ", " de l'", " des ", " de l’", " de ", " d’", " d'", " du "," en "," à "," au "," aux "}
if beginswith and (not mw.ustring.find(str, "^" .. beginswith)) then
return nil
end
for i, pattern in pairs(particles) do
local pos = mw.ustring.find(str, pattern)
if pos then
local main = mw.ustring.sub(str, 1, pos -1)
local comp = mw.ustring.sub(str, pos + string.len(pattern))
return main, comp
end
end
return nil
end
function p.keepcomplement(str, beginswith) -- par exemple "gare de Lyon" -> "Lyon"
local main, compl = findcomplement(str, beginswith)
if compl then
return compl
end
return str
end
function p.removecomplement(str, beginswith) -- par exemple "gare de Lyon" -> "gare"
local main, compl = findcomplement(str, beginswith)
if main then
return main
end
return str
end
--[=[
texteLien le lien intere initial '^[[lien|texte]]' de str et retourne : texte, lien
Si le lien est '[[texte]]', retourne : texte, texte.
Si str ne commence pas par un lien interwiki, retourne : nil
]=]
function p.texteLien( str )
if type( str ) == 'string' then
local lien, texte = str:match( '^%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
if not lien then
lien, texte = str:match( '^%b<>%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
end
if lien then
local testlien = string.lower( lien )
local fichier = string.match( testlien, '^fichier:' )
or string.match( testlien, '^image:' )
or string.match( testlien, '^file:' )
if not fichier then
texte = ( texte ~= '' and texte ) or lien
return texte, lien
end
end
end
return nil
end
function p.ucfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.ucfirst( texte ), 1 )
else
str = tag .. langobj:ucfirst( strTemp )
end
return str
end
function p.ucfirstE(frame)
return p.ucfirst(frame.args[1])
end
function p.lcfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.lcfirst( texte ), 1 )
else
str = tag .. langobj:lcfirst( strTemp )
end
return str
end
function p.lcfirstE(frame)
return p.lcfirst(frame.args[1])
end
--[[
function p.toascii(str)
local convtable = mw.loadData("Module:Linguistique/ASCII")
for i, j in pairs(convtable) do -- manquent les majuscules
str = mw.ustring.gsub(str, '[' .. i .. ']', j)
end
return str
end
]]--
return p
pt7x9r3231pcj5jbeh3vf4y90ozx7gt
855578
855577
2024-11-12T13:59:24Z
BwaKajou
31668
855578
Scribunto
text/plain
-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.
local p = {}
local lang = 'ht'
local langobj = mw.language.new(lang)
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
-- i18n
local wordor = ' ou '
local wordand = ' et '
local comma = ', '
local fullstop = '. '
local wordsep = ' '
local function isin(str, pattern)
if str and pattern and mw.ustring.find(str, pattern, 1, true ) then
return true
end
end
local function processgender(str)
if (str == 'f') or (str == 'fem') or (str == 'feminine') then
return 'feminine'
elseif (str == 'n') or (str == 'neutral') then
return 'neutral'
else
return 'masculine'
end
end
local function processnumber(str)
if (str == 'p') or (str == 'plural') then
return 'plural'
else
return 'singular'
end
end
function p.vowelfirst (str)
if str and #str > 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end
end
function p.inparentheses(str, lang, space)
if (not str) or str == '' then
return str
end
str = '(' .. str .. ')'
if not space then
space = ' '
end
return space .. str
end
function p.of(word, gender, number, determiner, raw)
if not word then
word = ''
end
word = mw.text.trim( word )
if not raw then --texte non mis en forme pour gérer les élisions
raw = p.texteLien(word) or word
end
gender = processgender(gender)
number = processnumber(number)
local vowel = p.vowelfirst(raw)
local feminine = (gender== 'feminine')
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if number == 'plural' then
return 'des ' .. word
elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide
if vowel then
return 'de l’' .. word
elseif feminine then
return 'de la ' .. word
else
return 'du ' .. word
end
else
if vowel then
return 'd’' .. word
else
return 'de ' .. word
end
end
end
function p.noungroup(noun, adj)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
return noun .. wordsep(lang) .. adj -- lorsque c'est en français
end
function p.quickconj(args, conjtype)
local separator, conjunction
-- cas où separator ~= conj
if type(conjtype) == 'function' then
conjtype = conjtype()
end
if (not conjtype) or conjtype == 'and' then
separator, conjunction = comma, wordand
elseif conjtype == 'or' then
separator, conjunction = comma, wordor
end
if (separator and conjunction) then
return mw.text.listToText(args, separator, conjunction)
end
-- autres cas
if conjtype == 'comma' then
separator = comma
elseif conjtype == 'new line' or conjtype == 'lowercase new line' then
separator = '<br />'
if conjtype == 'new line' then
for i, j in pairs(args) do -- ajoute une majuscule
args[i] = p.ucfirst(j)
end
end
else
separator = conjtype
end
return table.concat(args, separator)
end
function p.conj(args, conjtype)
if (not args) then
return nil
end
local newargs = {}
for i, j in pairs(args) do
table.insert(newargs, j)
end
if #newargs == 0 then
return nil
end
return p.quickconj(newargs, conjtype)
end
function p.conjfromWiki(frame)
args = frame.args
if not args or not args[1] then
args = mw.getCurrentFrame():getParent().args
end
local conjtype = args.type
newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, conjtype)
end
local function findcomplement(str, beginswith) -- retourne le nom principal et le complément du nom ou nil et nil si échec
local particles = {" de la ", " de l'", " des ", " de l’", " de ", " d’", " d'", " du "," en "," à "," au "," aux "}
if beginswith and (not mw.ustring.find(str, "^" .. beginswith)) then
return nil
end
for i, pattern in pairs(particles) do
local pos = mw.ustring.find(str, pattern)
if pos then
local main = mw.ustring.sub(str, 1, pos -1)
local comp = mw.ustring.sub(str, pos + string.len(pattern))
return main, comp
end
end
return nil
end
function p.keepcomplement(str, beginswith) -- par exemple "gare de Lyon" -> "Lyon"
local main, compl = findcomplement(str, beginswith)
if compl then
return compl
end
return str
end
function p.removecomplement(str, beginswith) -- par exemple "gare de Lyon" -> "gare"
local main, compl = findcomplement(str, beginswith)
if main then
return main
end
return str
end
--[=[
texteLien le lien intere initial '^[[lien|texte]]' de str et retourne : texte, lien
Si le lien est '[[texte]]', retourne : texte, texte.
Si str ne commence pas par un lien interwiki, retourne : nil
]=]
function p.texteLien( str )
if type( str ) == 'string' then
local lien, texte = str:match( '^%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
if not lien then
lien, texte = str:match( '^%b<>%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
end
if lien then
local testlien = string.lower( lien )
local fichier = string.match( testlien, '^fichier:' )
or string.match( testlien, '^image:' )
or string.match( testlien, '^file:' )
if not fichier then
texte = ( texte ~= '' and texte ) or lien
return texte, lien
end
end
end
return nil
end
function p.ucfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.ucfirst( texte ), 1 )
else
str = tag .. langobj:ucfirst( strTemp )
end
return str
end
function p.ucfirstE(frame)
return p.ucfirst(frame.args[1])
end
function p.lcfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.lcfirst( texte ), 1 )
else
str = tag .. langobj:lcfirst( strTemp )
end
return str
end
function p.lcfirstE(frame)
return p.lcfirst(frame.args[1])
end
--[[
function p.toascii(str)
local convtable = mw.loadData("Module:Linguistique/ASCII")
for i, j in pairs(convtable) do -- manquent les majuscules
str = mw.ustring.gsub(str, '[' .. i .. ']', j)
end
return str
end
]]--
return p
2r8mb2pxh72m6zb258461kklp966z0f
855579
855578
2024-11-12T14:01:05Z
BwaKajou
31668
855579
Scribunto
text/plain
-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.
local p = {}
local lang = 'ht'
local langobj = mw.language.new(lang)
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
-- i18n
local wordor = ' oswa '
local wordand = ' ak '
local comma = ', '
local fullstop = '. '
local wordsep = ' '
local function isin(str, pattern)
if str and pattern and mw.ustring.find(str, pattern, 1, true ) then
return true
end
end
local function processgender(str)
if (str == 'f') or (str == 'fem') or (str == 'feminine') then
return 'feminine'
elseif (str == 'n') or (str == 'neutral') then
return 'neutral'
else
return 'masculine'
end
end
local function processnumber(str)
if (str == 'p') or (str == 'plural') then
return 'plural'
else
return 'singular'
end
end
function p.vowelfirst (str)
if str and #str > 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end
end
function p.inparentheses(str, lang, space)
if (not str) or str == '' then
return str
end
str = '(' .. str .. ')'
if not space then
space = ' '
end
return space .. str
end
function p.of(word, gender, number, determiner, raw)
if not word then
word = ''
end
word = mw.text.trim( word )
if not raw then --texte non mis en forme pour gérer les élisions
raw = p.texteLien(word) or word
end
gender = processgender(gender)
number = processnumber(number)
local vowel = p.vowelfirst(raw)
local feminine = (gender== 'feminine')
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if number == 'plural' then
return 'des ' .. word
elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide
if vowel then
return 'de l’' .. word
elseif feminine then
return 'de la ' .. word
else
return 'du ' .. word
end
else
if vowel then
return 'd’' .. word
else
return 'de ' .. word
end
end
end
function p.noungroup(noun, adj)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
return noun .. wordsep(lang) .. adj -- lorsque c'est en français
end
function p.quickconj(args, conjtype)
local separator, conjunction
-- cas où separator ~= conj
if type(conjtype) == 'function' then
conjtype = conjtype()
end
if (not conjtype) or conjtype == 'and' then
separator, conjunction = comma, wordand
elseif conjtype == 'or' then
separator, conjunction = comma, wordor
end
if (separator and conjunction) then
return mw.text.listToText(args, separator, conjunction)
end
-- autres cas
if conjtype == 'comma' then
separator = comma
elseif conjtype == 'new line' or conjtype == 'lowercase new line' then
separator = '<br />'
if conjtype == 'new line' then
for i, j in pairs(args) do -- ajoute une majuscule
args[i] = p.ucfirst(j)
end
end
else
separator = conjtype
end
return table.concat(args, separator)
end
function p.conj(args, conjtype)
if (not args) then
return nil
end
local newargs = {}
for i, j in pairs(args) do
table.insert(newargs, j)
end
if #newargs == 0 then
return nil
end
return p.quickconj(newargs, conjtype)
end
function p.conjfromWiki(frame)
args = frame.args
if not args or not args[1] then
args = mw.getCurrentFrame():getParent().args
end
local conjtype = args.type
newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, conjtype)
end
local function findcomplement(str, beginswith) -- retourne le nom principal et le complément du nom ou nil et nil si échec
local particles = {" de la ", " de l'", " des ", " de l’", " de ", " d’", " d'", " du "," en "," à "," au "," aux "}
if beginswith and (not mw.ustring.find(str, "^" .. beginswith)) then
return nil
end
for i, pattern in pairs(particles) do
local pos = mw.ustring.find(str, pattern)
if pos then
local main = mw.ustring.sub(str, 1, pos -1)
local comp = mw.ustring.sub(str, pos + string.len(pattern))
return main, comp
end
end
return nil
end
function p.keepcomplement(str, beginswith) -- par exemple "gare de Lyon" -> "Lyon"
local main, compl = findcomplement(str, beginswith)
if compl then
return compl
end
return str
end
function p.removecomplement(str, beginswith) -- par exemple "gare de Lyon" -> "gare"
local main, compl = findcomplement(str, beginswith)
if main then
return main
end
return str
end
--[=[
texteLien le lien intere initial '^[[lien|texte]]' de str et retourne : texte, lien
Si le lien est '[[texte]]', retourne : texte, texte.
Si str ne commence pas par un lien interwiki, retourne : nil
]=]
function p.texteLien( str )
if type( str ) == 'string' then
local lien, texte = str:match( '^%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
if not lien then
lien, texte = str:match( '^%b<>%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
end
if lien then
local testlien = string.lower( lien )
local fichier = string.match( testlien, '^fichier:' )
or string.match( testlien, '^image:' )
or string.match( testlien, '^file:' )
if not fichier then
texte = ( texte ~= '' and texte ) or lien
return texte, lien
end
end
end
return nil
end
function p.ucfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.ucfirst( texte ), 1 )
else
str = tag .. langobj:ucfirst( strTemp )
end
return str
end
function p.ucfirstE(frame)
return p.ucfirst(frame.args[1])
end
function p.lcfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.lcfirst( texte ), 1 )
else
str = tag .. langobj:lcfirst( strTemp )
end
return str
end
function p.lcfirstE(frame)
return p.lcfirst(frame.args[1])
end
--[[
function p.toascii(str)
local convtable = mw.loadData("Module:Linguistique/ASCII")
for i, j in pairs(convtable) do -- manquent les majuscules
str = mw.ustring.gsub(str, '[' .. i .. ']', j)
end
return str
end
]]--
return p
n6sfs86fj954omgtwkkoomco1ppydql
855598
855579
2024-11-12T17:00:04Z
BwaKajou
31668
855598
Scribunto
text/plain
-- Ne fonctionne qu'en français. Si besoin est, on peut s'inspirer de [[wikidata:Module:Linguistic]] pour ajouter d'autres langues.
local p = {}
local lang = 'ht'
local langobj = mw.language.new(lang)
local vowels = 'aeiouyąăẵằẳặȃắâẫấầẩậãäǟāáàȁǎảẚåǻḁạǡæǣǽĕȇêễếềểệḙẽḛëēḕéḗèȅěẻẹęȩḝǝĭȋîĩḭïḯīíìȉǐỉịįıŏȏôỗốồổộõṏṍöōṑóṓòȍǒỏọǫǭơỡớờởợøǿŭȗûṷũṻṹṵüǖǘǜǚṳūúùȕǔủůụųưữứừửựŷỹÿȳýỳỷẙỵ'
-- i18n
local wordor = ' oswa '
local wordand = ' ak '
local comma = ', '
local fullstop = '. '
local wordsep = ' '
local function isin(str, pattern)
if str and pattern and mw.ustring.find(str, pattern, 1, true ) then
return true
end
end
local function processgender(str)
if (str == 'f') or (str == 'fem') or (str == 'feminine') then
return 'feminine'
elseif (str == 'n') or (str == 'neutral') then
return 'neutral'
else
return 'masculine'
end
end
local function processnumber(str)
if (str == 'p') or (str == 'plural') then
return 'plural'
else
return 'singular'
end
end
function p.vowelfirst (str)
if str and #str > 0 then return isin(vowels, mw.ustring.lower(mw.ustring.sub(str, 1, 1))) end
end
function p.inparentheses(str, lang, space)
if (not str) or str == '' then
return str
end
str = '(' .. str .. ')'
if not space then
space = ' '
end
return space .. str
end
function p.of(word, gender, number, determiner, raw)
if not word then
word = ''
end
word = mw.text.trim( word )
if not raw then --texte non mis en forme pour gérer les élisions
raw = p.texteLien(word) or word
end
gender = processgender(gender)
number = processnumber(number)
local vowel = p.vowelfirst(raw)
local feminine = (gender== 'feminine')
-- raw is the string without the Wikiformatting so that it correctly analyses the string that is [[:fr:Italie|Italie]] -> 'italie'
-- any way to automate this ?
if number == 'plural' then
return 'des ' .. word
elseif determiner and (determiner ~= '-') then-- de la, du // determiner ~= '-' veut dire renseigné comme vide
if vowel then
return 'de l’' .. word
elseif feminine then
return 'de la ' .. word
else
return 'du ' .. word
end
else
if vowel then
return 'd’' .. word
else
return 'de ' .. word
end
end
end
function p.noungroup(noun, adj)
if not noun or noun == '' then
return nil -- not '' so that it is not counted as a string by mw.listToText
end
return noun .. wordsep(lang) .. adj -- lorsque c'est en français
end
function p.quickconj(args, conjtype)
local separator, conjunction
-- cas où separator ~= conj
if type(conjtype) == 'function' then
conjtype = conjtype()
end
if (not conjtype) or conjtype == 'and' then
separator, conjunction = comma, wordand
elseif conjtype == 'or' then
separator, conjunction = comma, wordor
end
if (separator and conjunction) then
return mw.text.listToText(args, separator, conjunction)
end
-- autres cas
if conjtype == 'comma' then
separator = comma
elseif conjtype == 'new line' or conjtype == 'lowercase new line' then
separator = '<br />'
if conjtype == 'new line' then
for i, j in pairs(args) do -- ajoute une majuscule
args[i] = p.ucfirst(j)
end
end
else
separator = conjtype
end
return table.concat(args, separator)
end
function p.conj(args, conjtype)
if (not args) then
return nil
end
local newargs = {}
for i, j in pairs(args) do
table.insert(newargs, j)
end
if #newargs == 0 then
return nil
end
return p.quickconj(newargs, conjtype)
end
function p.conjfromWiki(frame)
args = frame.args
if not args or not args[1] then
args = mw.getCurrentFrame():getParent().args
end
local conjtype = args.type
newargs = {} -- transform args metatable into a table so it can be concetenated
for i, j in pairs(args) do
if type(i) == 'number' then
j = mw.text.trim(j)
if j ~= '' then
table.insert(newargs, j)
end
else
if i ~= 'type' and i ~= 'lang' then
return error('bad parameter in template:Conj:' .. i), '[[Category:Pages with incorrect template usage/Conj|A]]'
end
end
end
return p.conj(newargs, conjtype)
end
local function findcomplement(str, beginswith) -- retourne le nom principal et le complément du nom ou nil et nil si échec
local particles = {" de la ", " de l'", " des ", " de l’", " de ", " d’", " d'", " du "," en "," à "," au "," aux "}
if beginswith and (not mw.ustring.find(str, "^" .. beginswith)) then
return nil
end
for i, pattern in pairs(particles) do
local pos = mw.ustring.find(str, pattern)
if pos then
local main = mw.ustring.sub(str, 1, pos -1)
local comp = mw.ustring.sub(str, pos + string.len(pattern))
return main, comp
end
end
return nil
end
function p.keepcomplement(str, beginswith) -- par exemple "gare de Lyon" -> "Lyon"
local main, compl = findcomplement(str, beginswith)
if compl then
return compl
end
return str
end
function p.removecomplement(str, beginswith) -- par exemple "gare de Lyon" -> "gare"
local main, compl = findcomplement(str, beginswith)
if main then
return main
end
return str
end
--[=[
texteLien le lien intere initial '^[[lien|texte]]' de str et retourne : texte, lien
Si le lien est '[[texte]]', retourne : texte, texte.
Si str ne commence pas par un lien interwiki, retourne : nil
]=]
function p.texteLien( str )
if type( str ) == 'string' then
local lien, texte = str:match( '^%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
if not lien then
lien, texte = str:match( '^%b<>%[%[ *([^%[%]|]*)|? *([^%[%]]*)%]%]' )
end
if lien then
local testlien = string.lower( lien )
local fichye = string.match( testlien, '^fichye:' )
or string.match( testlien, '^imaj:' )
or string.match( testlien, '^file:' )
if not fichye then
texte = ( texte ~= '' and texte ) or lien
return texte, lien
end
end
end
return nil
end
function p.ucfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.ucfirst( texte ), 1 )
else
str = tag .. langobj:ucfirst( strTemp )
end
return str
end
function p.ucfirstE(frame)
return p.ucfirst(frame.args[1])
end
function p.lcfirst(str)
if (type (str ) ~= 'string') or (string == "") then
return str
end
local strTemp, tag, tagTemp = str, ''
-- sépare les balises html initiales (span ou autres)
while strTemp:match( '^%b<>' ) do
tagTemp, strTemp = strTemp:match( '^(%b<>)(.*)$' )
tag = tag .. tagTemp
end
local texte = p.texteLien( strTemp )
if texte then
-- ajoute les crochets de fin de lien pour être sur de ne remplacer que le texte du lien
texte = texte .. ']]'
-- échappe les caractère magique
local pattern = texte:gsub( '([$%%()*+%-.?()^])', '%%%1' )
-- ajoute la majuscule au texte du lien
str = str:gsub( pattern, p.lcfirst( texte ), 1 )
else
str = tag .. langobj:lcfirst( strTemp )
end
return str
end
function p.lcfirstE(frame)
return p.lcfirst(frame.args[1])
end
--[[
function p.toascii(str)
local convtable = mw.loadData("Module:Linguistique/ASCII")
for i, j in pairs(convtable) do -- manquent les majuscules
str = mw.ustring.gsub(str, '[' .. i .. ']', j)
end
return str
end
]]--
return p
gsyaxzeh2kwdlyxpi4ox2k5kthed2wy
Diskite:Lang kreyòl
1
64710
855649
805301
2024-11-13T01:10:49Z
Naraht
10345
855649
wikitext
text/x-wiki
mon che
== Mispelling ==
The reference that says "John Hopkins" should say "Johns Hopkins". Please change. [[Itilizatè:Naraht|Naraht]] ([[Diskisyon Itilizatè:Naraht|discussion]]) 16 out 2022 à 13:31 (UTC)
:Hello, I made the correction. [[Itilizatè:Gilles2014|Gilles2014]] ([[Diskisyon Itilizatè:Gilles2014|diskisyon]]) 21 out 2022 à 17:28 (UTC)
::John Hopkins has been restored, please correct again.[[Itilizatè:Naraht|Naraht]] ([[Diskisyon Itilizatè:Naraht|diskisyon]]) 13 novanm 2024 à 01:10 (UTC)
76pt33qsx7krf6lbgk9lzh5t9t5rezg
Jean Ray (ekriven)
0
66191
855560
811217
2024-11-12T13:21:17Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855560
wikitext
text/x-wiki
{{moun
|non= Jean Ray
|foto=
|tèks=
|fonksyon=ekriven
|domèn=Literati
|diplòm=
|etid=
|dat nesans= [[8 jiyè]] [[1887]]
|lye nesans= Gand
|peyi nesans=[[Bèljik]]
|dat lanmò= [[17 septanm]] [[1964]]
|lye lanmò= Gand
|peyi lanmò= [[Bèljik]]
|nasyonalite= bèlj
|relijyon=
|rezidans=
|kontak=
|Biyografi=
|zèv=
|omaj=
|rekonpans=
|remak=
|fim=
}}
'''Raymond Jean Marie De Kremer''' (ki fèt 8 jiyè 1887 epi ki mouri 17 septanm 1964 nan Gand) se yon ekriven bèlj.
Li ekri nan lang franse tankou '''Jean Ray''' ak nan lang neèlande souvan tankou '''John Flanders'''.
== Biyografi ==
== Zèv li yo ==
=== Tankou Jean Ray ===
* [[1925]] : ''[[Les Contes du whisky]]''
* [[1929]]-[[1938]] : ''[[Histoires de Harry Dickson|Les Aventures de Harry Dickson]]'', nouvèl, Edisyon Marabout 16 tom - Librairie des champs Elysées 9 tom - Entegral nan 21 tom Edisyon Néo 1984-1986, La ''Guillotine ensorcelée'' chez Lefrancq (attitudes-mystère), 1993.
* [[1932]] : ''Jack de minuit'', Edisyon Lefrancq 1991, ilistre pa [[René Follet]]
* [[1932]] : ''La Croisière des ombres'', Edisyon Néo, n 106
* [[1942]] : ''[[Le Grand Nocturne]]''
* [[1943]] : ''[[Les Cercles de l'épouvante]]''
* [[1943]] : ''[[Malpertuis]]'', Présence du futur, n 7 1954 - Edisyon Marabout 1962
* [[1943]] : ''[[La Cité de l'indicible peur (woman)|La Cité de l'indicible peur]]'', Edisyon Marabout 1965, Edisyon Néo n 130
* [[1944]] : ''[[Les Derniers Contes de Canterbury]]'', Edisyon Marabout 1963, Edisyon Néo n 156
* [[1947]] : ''[[Le Livre des fantômes]]'', Edisyon Néo {{numéro|135}}]])
* [[1947]] : ''La Gerbe noire'', Edisyon Néo {{numéro|96}}]]) anthologie
* [[1947]] : ''La Choucroute'', (Aventure Fantastique)
* [[1961]] : ''Les 25 Meilleures Histoires noires et fantastiques'', Edisyon Marabout
* [[1964]] : ''[[Saint-Judas-de-la-nuit]]''
* [[1964]] : ''Les Contes noirs du golf'', Edisyon Marabout 1964, Edisyon Néo {{numéro|159}}]])
* [[1964]] : ''[[Le Carrousel des maléfices]]'', Edisyon Marabout 1964) ([[Néo (éditions)|Éditions Néo {{numéro|150}}]])
* [[1982]] : ''Visages et choses crépusculaires'', Edisyon Néo {{numéro|63}}]])
* [[1992]] : ''Les Joyeux Contes d'Ingoldsby'', Edisyon Lefrancq ilistre pa [[René Follet]]
* [[1996]] : ''Les Histoires étranges de la Biloque'', Edisyon Lefrancq
=== Tankou John Flanders ===
* ''Bestiaire fantastique'' ([[Marabout (éditions)| Ed. Marabout {{numéro |500}}]])
* ''Visions nocturnes'' ([[Néo (éditions)|Ed. Néo {{numéro|100}}]])
* ''Visions infernales'' ([[Néo (éditions)|Ed. Néo {{numéro|103}}]])
* ''La Malédiction de Machrood'' ([[Néo (éditions)|Ed. Néo {{numéro|122}}]])
* ''La Neuvaine d'épouvante'' ([[Néo (éditions)|Ed. Néo {{numéro|134}}]])
* ''La Brume verte'' ([[Néo (éditions)|Ed. Néo {{numéro|151}}]]) Également publié sous le titre ''Le secret des sargasses'' ([[10/18]] {{numéro|960}}, 1975).
* ''Les Feux follets de Satan'' ([[Néo (éditions)|Ed. Néo {{numéro|160}}]])
* ''Les Contes du Fulmar'' ([[Néo (éditions)|Ed. Néo {{numéro|171}}]])
* ''L'Île noire'' ([[Néo (éditions)|Ed. Néo {{numéro|182}}]])
* ''La Nef des bourreaux'' ([[Néo (éditions)|Ed. Néo {{numéro|193}}]])
* ''Le Monstre de Borough'' ([[Casterman]])
* [[1985]] : ''Edmund Bell : L'Élève invisible'' ([[Lefrancq (maison d'édition)|Lefrancq]]) illustré par [[René Follet]]
* [[1987]] : ''Edmund Bell : L'Ombre rouge'' ([[Lefrancq (maison d'édition)|Lefrancq]]) illustré par [[René Follet]]
[[Fichye:John Flanders gedenkplaat Rooigemlaan 539 Gent.png|thumb| Plak Souveni tankou John Flanders nan numero 539 de Rooigemlaan nan Gand.]]
== Referans ==
{{referans}}
== Lyen deyò ==
* [https://web.archive.org/web/20100727013904/http://noosfere.org/heberg/jeanray/ Pajwèb ofisyel Jean Ray]
* [https://web.archive.org/web/20091227191032/http://www.bibliopoche.com/auteur/Ray-Jean/1616.html Bibliopoche : Tout piblikasyon zèv Jean Ray]
* [http://www.romanpopulaire.com/livres/ray/ray_jean.shtml Analiz woman, diksyonè pèsonaj]
* [https://web.archive.org/web/20110706230351/http://www.lefantastique.net/litterature/dossiers/litt_belge/ray/ray1.htm Jean Ray] sou lefantastique.net
* [http://www.reading-everyday.com/283/Text/content0002.html Gade ''Croisière des Ombres'']
{{DEFAULTSORT:Ray, Jean}}
[[Kategori:Moun]]
[[Kategori:Ekriven bèlj]]
[[Kategori:Nesans nan lane 1887]]
[[Kategori:lanmò 1964]]
qlz9tku4b6l43csgs89imbqcn465qgq
Wikipedya:REJEBECSS-HAITI/BNH/Liste
4
67009
855587
853653
2024-11-12T15:35:06Z
ListeriaBot
19489
Wikidata list updated [V2]
855587
wikitext
text/x-wiki
{{Wikidata list
|sparql=SELECT ?linkcount ?item ?itemLabel WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],fr" }
{?item wdt:P17 wd:Q790.}
UNION {?item wdt:P131/wdt:P279* wd:Q790 .} UNION {?item wdt:P27 wd:Q790}
?item wikibase:sitelinks ?linkcount .
OPTIONAL {?article schema:about ?item ; schema:isPartOf <https://ht.wikipedia.org/> .}
FILTER (!BOUND(?article))
}
ORDER BY DESC(?linkcount)
LIMIT 200
|sort=
|columns=NUMBER:numéro,P18:Image,label:Nom,P625:Géolocalisation,P131:Lieu
|thumb=128
}}
{| class='wikitable sortable'
! numéro
! Image
! Nom
! Géolocalisation
! Lieu
|-
| style='text-align:right'| 1
| [[Fichye:Sandy 2012-10-25 0320Z.png|center|128px]]
| ''[[:d:Q264|Hurricane Sandy]]''
|
|
|-
| style='text-align:right'| 2
| [[Fichye:Rene-Theophile-Hyacinthe Laennec.jpg|center|128px]]
| ''[[:d:Q219621|René Laennec]]''
|
|
|-
| style='text-align:right'| 3
| [[Fichye:Monkeypox By Country.svg|center|128px]]
| ''[[:d:Q112070734|2022 monkeypox outbreak]]''
|
|
|-
| style='text-align:right'| 4
|
| ''[[:d:Q273894|Order of Poor Clerks Regular of the Mother of God of the Pious Schools]]''
| {{Coord|41.89736111|12.473425|display=inline}}
|
|-
| style='text-align:right'| 5
|
| ''[[:d:Q207701|Coat of Arms of Haiti]]''
|
|
|-
| style='text-align:right'| 6
| [[Fichye:Map-Francophone World.svg|center|128px]]
| ''[[:d:Q1003588|Francophonie]]''
|
|
|-
| style='text-align:right'| 7
|
| ''[[:d:Q140265|Windward Passage]]''
| {{Coord|20|-74|display=inline}}
|
|-
| style='text-align:right'| 8
| [[Fichye:John baptist de la salle 1.jpg|center|128px]]
| ''[[:d:Q138579|Institute of the Brothers of the Christian Schools]]''
| {{Coord|41.899|12.423|display=inline}}
|
|-
| style='text-align:right'| 9
|
| ''[[:d:Q916809|Haiti women's national association football team]]''
|
|
|-
| style='text-align:right'| 10
| [[Fichye:Andrés Muschietti.jpg|center|128px]]
| ''[[:d:Q6385039|Andy Muschietti]]''
|
|
|-
| style='text-align:right'| 11
|
| ''[[:d:Q594254|1973 CONCACAF Championship]]''
| {{Coord|18.5425|-72.3386|display=inline}}
|
|-
| style='text-align:right'| 12
|
| ''[[:d:Q4131845|Ayisyen]]''
|
| [[Ayiti]]
|-
| style='text-align:right'| 13
| [[Fichye:Maracanã, 5 de agosto de 2016- onde o Egito encontra o Haiti... -rio2016 (28778328632).jpg|center|128px]]
| ''[[:d:Q20113758|Haiti at the 2016 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 14
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q107472171|Haiti at the 2022 Winter Olympics]]''
|
|
|-
| style='text-align:right'| 15
|
| ''[[:d:Q20986|ISO 3166-2:HT]]''
|
|
|-
| style='text-align:right'| 16
|
| ''[[:d:Q1256655|20th parallel north]]''
| {{Coord|20|0|display=inline}}
|
|-
| style='text-align:right'| 17
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q141217|Haiti at the 2012 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 18
| [[Fichye:Haiti at the opening ceremony of the 1928 Summer Olympics.jpg|center|128px]]
| ''[[:d:Q147174|Haiti at the 1928 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 19
|
| ''[[:d:Q4435409|list of World Heritage Sites in Haiti]]''
|
|
|-
| style='text-align:right'| 20
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q42914391|Haiti at the 2020 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 21
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q144034|Haiti at the 1900 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 22
|
| ''[[:d:Q3439047|independencia dominicana venaty]]''
|
|
|-
| style='text-align:right'| 23
| [[Fichye:Flag of Haiti (civil).svg|center|128px]]
| ''[[:d:Q2297885|Haiti at the 1924 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 24
|
| ''[[:d:Q2467445|Ligue Haïtienne]]''
|
|
|-
| style='text-align:right'| 25
| [[Fichye:Jimmy "Barbecue" Cherizier 2024.png|center|128px]]
| ''[[:d:Q101440369|Jimmy Chérizier]]''
|
|
|-
| style='text-align:right'| 26
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q141075|Haiti at the 2008 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 27
| [[Fichye:Vida y viajes de Cristobal Colón, 1851 Construcción de la fortaleza de La Navidad (3819531625).jpg|center|128px]]
| ''[[:d:Q1798978|La Navidad]]''
| {{Coord|19.690555555556|-72.015833333333|display=inline}}
| [[Ayiti]]
|-
| style='text-align:right'| 28
| [[Fichye:Bennedict Mathurin (cropped).jpg|center|128px]]
| ''[[:d:Q105013647|Bennedict Mathurin]]''
|
|
|-
| style='text-align:right'| 29
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q143063|Haiti at the 2000 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 30
|
| ''[[:d:Q1024083|1991 CONCACAF Women's Championship]]''
|
|
|-
| style='text-align:right'| 31
|
| ''[[:d:Q1254997|19th parallel north]]''
| {{Coord|19|0|display=inline}}
|
|-
| style='text-align:right'| 32
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q2194097|Haiti at the 1960 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 33
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q1986870|Haiti at the 1988 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 34
| [[Fichye:Flag of Haiti (1964–1986).svg|center|128px]]
| ''[[:d:Q2291898|Haiti at the 1984 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 35
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q126284599|Haiti at the 2024 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 36
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q145152|Haiti at the 2004 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 37
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q150527|Haiti at the 1996 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 38
| [[Fichye:Flag of Haiti (1964–1986).svg|center|128px]]
| ''[[:d:Q168379|Haiti at the 1972 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 39
| [[Fichye:Flag of Haiti (1964–1986).svg|center|128px]]
| ''[[:d:Q2489822|Haiti at the 1976 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 40
| [[Fichye:Flag of Haiti (civil).svg|center|128px]]
| ''[[:d:Q2651878|Haiti at the 1932 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 41
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q2666070|Haiti at the 1992 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 42
| [[Fichye:Lens B - Dieppe (15-08-2015) 86.JPG|center|128px]]
| ''[[:d:Q26251605|Jean-Kévin Duverne]]''
|
|
|-
| style='text-align:right'| 43
| [[Fichye:Cap-Haitien seen from Morne Jean Explosion.jpg|center|128px]]
| ''[[:d:Q110106709|Cap-Haïtien fuel tanker explosion]]''
| {{Coord|19.75138888888889|-72.20555555555555|display=inline}}
| [[Kap Ayisyen (komin)|Kap Ayisyen]]
|-
| style='text-align:right'| 44
|
| ''[[:d:Q667038|United Nations Mission in Haiti]]''
|
|
|-
| style='text-align:right'| 45
|
| ''[[:d:Q3207215|Lake Miragoâne]]''
| {{Coord|18.403888888889|-73.049722222222|display=inline}}
| [[Miragwàn (komin)|Miragwàn]]
|-
| style='text-align:right'| 46
|
| ''[[:d:Q4124963|Armed Forces of Haiti]]''
|
|
|-
| style='text-align:right'| 47
| [[Fichye:Michel Patrick Boisvert 2023 (cropped).jpg|center|128px]]
| ''[[:d:Q114735638|Michel Patrick Boisvert]]''
|
|
|-
| style='text-align:right'| 48
|
| ''[[:d:Q861844|André Corvington]]''
|
|
|-
| style='text-align:right'| 49
|
| ''[[:d:Q1857436|2010–11 Haitian general election]]''
|
|
|-
| style='text-align:right'| 50
| [[Fichye:Trou Caïman.jpg|center|128px]]
| ''[[:d:Q2805779|Trou Caïman]]''
| {{Coord|18.642804|-72.146336|display=inline}}
| [[Tomazo (komin)|Tomazo]]
|-
| style='text-align:right'| 51
|
| ''[[:d:Q2992378|demographics of Haiti]]''
|
|
|-
| style='text-align:right'| 52
|
| ''[[:d:Q5421623|Exposition internationale du bicentenaire de Port-au-Prince]]''
| {{Coord|18.549368|-72.348376|display=inline}}
|
|-
| style='text-align:right'| 53
|
| ''[[:d:Q10530123|Max Hilaire]]''
|
|
|-
| style='text-align:right'| 54
| [[Fichye:Nerilia Mondesir.jpg|center|128px]]
| ''[[:d:Q21622103|Nérilia Mondésir]]''
|
|
|-
| style='text-align:right'| 55
| [[Fichye:Lens - Evian (29-02-2016) 17.jpg|center|128px]]
| ''[[:d:Q22280180|Dylan Saint-Louis]]''
|
|
|-
| style='text-align:right'| 56
| [[Fichye:Order of Merit of the Republic of Haiti (Grade of Commander) - IMG 4985.JPG|center|128px]]
| ''[[:d:Q112390|National Order of Honour and Merit]]''
|
|
|-
| style='text-align:right'| 57
| [[Fichye:Hotel Montana.jpg|center|128px]]
| ''[[:d:Q3121455|Hôtel Montana]]''
| {{Coord|18.527222|-72.297778|display=inline}}
| [[Petyonvil (komin)|Petyonvil]]
|-
| style='text-align:right'| 58
| [[Fichye:Danish Air Transport ATR-42-300.jpg|center|128px]]
| ''[[:d:Q7641058|Sunrise Airways]]''
|
|
|-
| style='text-align:right'| 59
|
| ''[[:d:Q11821998|Polish Haitian]]''
|
|
|-
| style='text-align:right'| 60
| [[Fichye:2019-07-17 SG Dynamo Dresden vs. Paris Saint-Germain by Sandro Halank–054 (cropped).jpg|center|128px]]
| ''[[:d:Q69948832|Garissone Innocent]]''
|
|
|-
| style='text-align:right'| 61
| [[Fichye:UN Haiti - MINUSTAH HQ after 2010 earthquake.jpg|center|128px]]
| ''[[:d:Q166484|Christopher Hotel]]''
| {{Coord|18.5391|-72.3121|display=inline}}
| [[Pòtoprens (komin)|Pòtoprens]]
|-
| style='text-align:right'| 62
|
| ''[[:d:Q2202375|Catholic Church in Haiti]]''
|
|
|-
| style='text-align:right'| 63
|
| ''[[:d:Q2581074|Coupe d'Haïti]]''
|
|
|-
| style='text-align:right'| 64
|
| ''[[:d:Q3094730|Racing FC]]''
|
|
|-
| style='text-align:right'| 65
| [[Fichye:Hotel Oloffson mars 2007.JPG|center|128px]]
| ''[[:d:Q3365701|Hotel Oloffson]]''
| {{Coord|18.529444|-72.3375|display=inline}}
|
|-
| style='text-align:right'| 66
|
| ''[[:d:Q3623880|La Gonâve Arrondissement]]''
| {{Coord|18.8322|-72.8658|display=inline}}
| [[Lwès (depatman)|Lwès]]
|-
| style='text-align:right'| 67
|
| ''[[:d:Q4116369|Islam in Haiti]]''
|
|
|-
| style='text-align:right'| 68
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q5639707|Haiti at the Paralympics]]''
|
|
|-
| style='text-align:right'| 69
| [[Fichye:Cathedral of Cap-Haitien.jpg|center|128px]]
| ''[[:d:Q11737318|Our Lady of the Assumption Cathedral, Cap-Haïtien]]''
| {{Coord|19.761|-72.2007|display=inline}}
| [[Kap Ayisyen (komin)|Kap Ayisyen]]
|-
| style='text-align:right'| 70
|
| ''[[:d:Q60853298|Arcahaie FC]]''
|
|
|-
| style='text-align:right'| 71
| [[Fichye:Grace 2021-08-21 0610Z.jpg|center|128px]]
| ''[[:d:Q108141536|Hurricane Grace]]''
|
|
|-
| style='text-align:right'| 72
|
| ''[[:d:Q124742130|2024 Haitian jailbreak]]''
|
|
|-
| style='text-align:right'| 73
|
| ''[[:d:Q258171|Águilas Cibaeñas]]''
|
|
|-
| style='text-align:right'| 74
|
| ''[[:d:Q1449569|Lee Holdridge]]''
|
|
|-
| style='text-align:right'| 75
|
| ''[[:d:Q1626302|LGBT rights in Haiti]]''
|
|
|-
| style='text-align:right'| 76
| [[Fichye:Citadelle Laferrière terrace 2.jpg|center|128px]]
| ''[[:d:Q2305026|Ramiers]]''
| {{Coord|19.5736|-72.2442|display=inline}}
|
|-
| style='text-align:right'| 77
|
| ''[[:d:Q3043219|deforestation in Haiti]]''
|
|
|-
| style='text-align:right'| 78
| [[Fichye:St. Alexander Nevsky Cathedral - Howell, New Jersey 02.JPG|center|128px]]
| ''[[:d:Q4126487|Russian Orthodox Eparchy of Eastern America and New York]]''
|
|
|-
| style='text-align:right'| 79
| [[Fichye:Michelle Obama and Jill Biden in Haiti 2010.jpg|center|128px]]
| ''[[:d:Q5361449|Elisabeth Delatour Préval]]''
|
|
|-
| style='text-align:right'| 80
|
| ''[[:d:Q19702717|Jeppe Simonsen]]''
|
|
|-
| style='text-align:right'| 81
|
| ''[[:d:Q19881628|2015–16 Haitian parliamentary election]]''
|
|
|-
| style='text-align:right'| 82
|
| ''[[:d:Q26225095|Caye Sable]]''
| {{Coord|18.7|-72.76667|display=inline}}
| [[Lwès (depatman)|Lwès]]
|-
| style='text-align:right'| 83
|
| ''[[:d:Q5715358|Henri Caesar]]''
|
|
|-
| style='text-align:right'| 84
|
| ''[[:d:Q26837183|Mulern Jean]]''
|
|
|-
| style='text-align:right'| 85
|
| ''[[:d:Q60677605|Benji Michel]]''
|
|
|-
| style='text-align:right'| 86
| [[Fichye:Shan Borgelin (cropped).jpg|center|128px]]
| ''[[:d:Q62078453|Shanyder Borgelin]]''
|
|
|-
| style='text-align:right'| 87
|
| ''[[:d:Q107122118|Carnejy Antoine]]''
|
|
|-
| style='text-align:right'| 88
|
| ''[[:d:Q111536396|Dany Jean]]''
|
|
|-
| style='text-align:right'| 89
|
| ''[[:d:Q113003310|Haiti at the 2022 World Athletics Championships]]''
|
|
|-
| style='text-align:right'| 90
|
| ''[[:d:Q121461135|Haiti at the 2023 World Athletics Championships]]''
|
|
|-
| style='text-align:right'| 91
|
| ''[[:d:Q125707608|Fritz Bélizaire]]''
|
|
|-
| style='text-align:right'| 92
|
| ''[[:d:Q131140314|Alix Didier Fils-Aimé]]''
|
|
|-
| style='text-align:right'| 93
|
| ''[[:d:Q655961|United Nations Transition Mission in Haiti]]''
|
|
|-
| style='text-align:right'| 94
|
| ''[[:d:Q1060772|list of Roman Catholic dioceses in Haiti]]''
|
|
|-
| style='text-align:right'| 95
|
| ''[[:d:Q1353457|Haiti at the 2012 Summer Paralympics]]''
|
|
|-
| style='text-align:right'| 96
|
| ''[[:d:Q1531692|Raboteau Massacre]]''
| {{Coord|19.45|-72.68333333|display=inline}}
| [[Gonayiv (awondisman)|Gonayiv]]
|-
| style='text-align:right'| 97
|
| ''[[:d:Q1569605|Haiti Davis Cup team]]''
|
|
|-
| style='text-align:right'| 98
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q2497054|Haiti at the 2010 Summer Youth Olympics]]''
|
|
|-
| style='text-align:right'| 99
|
| ''[[:d:Q3163953|Janbatis Chavàn]]''
|
|
|-
| style='text-align:right'| 100
|
| ''[[:d:Q3297666|Massif des Montagnes Noires]]''
| {{Coord|19.0833|-72.25|display=inline}}
|
|-
| style='text-align:right'| 101
|
| ''[[:d:Q3366221|Haitian Communist Party]]''
|
|
|-
| style='text-align:right'| 102
|
| ''[[:d:Q3504239|Haitian Vodoun Culture Language]]''
|
|
|-
| style='text-align:right'| 103
|
| ''[[:d:Q3589794|Haiti national under-17 football team]]''
|
|
|-
| style='text-align:right'| 104
| [[Fichye:Daniele Battaglia.jpg|center|128px]]
| ''[[:d:Q3701868|Daniele Battaglia]]''
|
|
|-
| style='text-align:right'| 105
|
| ''[[:d:Q3873766|Ekip baskètbòl Ayiti]]''
|
|
|-
| style='text-align:right'| 106
|
| ''[[:d:Q7136383|Parc St. Victor]]''
| {{Coord|19.753611|-72.2075|display=inline}}
| [[Kap Ayisyen (komin)|Kap Ayisyen]]
|-
| style='text-align:right'| 107
|
| ''[[:d:Q16587373|National Unity Party]]''
|
|
|-
| style='text-align:right'| 108
| [[Fichye:Cathédrale Jérémie Haïti.JPG|center|128px]]
| ''[[:d:Q17608165|St. Louis King of France Cathedral]]''
| {{Coord|18.6447|-74.1146|display=inline}}
| [[Jeremi (komin)|Jeremi]]
|-
| style='text-align:right'| 109
|
| ''[[:d:Q19895065|French Haitian]]''
|
|
|-
| style='text-align:right'| 110
| [[Fichye:Bayyinah Bello 1.png|center|128px]]
| ''[[:d:Q20090268|Bayyinah Bello]]''
|
|
|-
| style='text-align:right'| 111
|
| ''[[:d:Q24744408|2016–17 Haitian Senate election]]''
|
|
|-
| style='text-align:right'| 112
| [[Fichye:Sophia Martelly.jpg|center|128px]]
| ''[[:d:Q24951046|Sofia Sen Remy Mately]]''
|
|
|-
| style='text-align:right'| 113
| [[Fichye:Bassin Bleu, Haiti.jpg|center|128px]]
| ''[[:d:Q2887443|Bassin Bleu]]''
| {{Coord|18.23416667|-72.58805556|display=inline}}
|
|-
| style='text-align:right'| 114
|
| ''[[:d:Q16728171|Monuma Constant Jr.]]''
|
|
|-
| style='text-align:right'| 115
|
| ''[[:d:Q26704937|Frantz Dorsainvil]]''
|
|
|-
| style='text-align:right'| 116
|
| ''[[:d:Q34383826|Haiti at the 2017 World Championships in Athletics]]''
|
|
|-
| style='text-align:right'| 117
|
| ''[[:d:Q57037767|Ángel Orelién]]''
|
|
|-
| style='text-align:right'| 118
|
| ''[[:d:Q68166407|Haiti at the 2019 World Championships in Athletics]]''
|
|
|-
| style='text-align:right'| 119
| [[Fichye:Danielle Etienne .jpg|center|128px]]
| ''[[:d:Q69803071|Danielle Etienne]]''
|
|
|-
| style='text-align:right'| 120
|
| ''[[:d:Q100792937|Josué Casimir]]''
|
|
|-
| style='text-align:right'| 121
|
| ''[[:d:Q107476272|Sabiana Anestor]]''
|
|
|-
| style='text-align:right'| 122
|
| ''[[:d:Q112623666|Alexandre Pierre]]''
|
|
|-
| style='text-align:right'| 123
|
| ''[[:d:Q119952811|Jayro Jean]]''
|
|
|-
| style='text-align:right'| 124
|
| ''[[:d:Q110664|Léonard Pétion Laroche]]''
|
|
|-
| style='text-align:right'| 125
| [[Fichye:Hispaniolanpineforest.jpg|center|128px]]
| ''[[:d:Q287885|Hispaniolan pine forests]]''
| {{Coord|18.33|-71.78|display=inline}}
|
|-
| style='text-align:right'| 126
|
| ''[[:d:Q1089416|Andre Pascal]]''
|
|
|-
| style='text-align:right'| 127
|
| ''[[:d:Q1149808|Brother Voodoo]]''
|
|
|-
| style='text-align:right'| 128
|
| ''[[:d:Q1654386|Inivèsite Notre Dame Ayiti]]''
| {{Coord|18.5286889|-72.3353421|display=inline}}
| [[Pòtoprens (komin)|Pòtoprens]]
|-
| style='text-align:right'| 129
| [[Fichye:Les Trois-Rivières en Haïti.jpg|center|128px]]
| ''[[:d:Q1952095|Les Trois Rivières]]''
| {{Coord|19.95|-72.866666666667|display=inline}}
|
|-
| style='text-align:right'| 130
|
| ''[[:d:Q2036275|Osvaldo Jeanty]]''
|
|
|-
| style='text-align:right'| 131
|
| ''[[:d:Q2069340|rail transport in Haiti]]''
|
|
|-
| style='text-align:right'| 132
|
| ''[[:d:Q2299927|Haiti at the 2008 Summer Paralympics]]''
|
|
|-
| style='text-align:right'| 133
| [[Fichye:Lecture-scenique-iphigenie jr-lemoine.jpg|center|128px]]
| ''[[:d:Q3169917|Jean-René Lemoine]]''
|
|
|-
| style='text-align:right'| 134
|
| ''[[:d:Q3208335|Montagne Terrible]]''
| {{Coord|18.8897|-72.4008|display=inline}}<br/>{{Coord|18.88972|-72.40028|display=inline}}
| [[Sen Mak (awondisman)|Sen Mak]]
|-
| style='text-align:right'| 135
|
| ''[[:d:Q3316510|Miss Haiti]]''
|
|
|-
| style='text-align:right'| 136
|
| ''[[:d:Q3366461|Fusion of Haitian Social Democrats]]''
|
|
|-
| style='text-align:right'| 137
|
| ''[[:d:Q3419888|Rally of Progressive National Democrats]]''
|
|
|-
| style='text-align:right'| 138
|
| ''[[:d:Q3509515|education in Haiti]]''
|
|
|-
| style='text-align:right'| 139
|
| ''[[:d:Q3532552|Tortug' Air]]''
|
|
|-
| style='text-align:right'| 140
|
| ''[[:d:Q3539909|Francophone]]''
|
|
|-
| style='text-align:right'| 141
|
| ''[[:d:Q3589796|équipe d'Haïti de volley-ball féminin]]''
|
|
|-
| style='text-align:right'| 142
| [[Fichye:Alix Pasquet.jpg|center|128px]]
| ''[[:d:Q4727515|Alix Pasquet]]''
|
|
|-
| style='text-align:right'| 143
|
| ''[[:d:Q4895878|Bertrand Madsen]]''
|
|
|-
| style='text-align:right'| 144
| [[Fichye:Fight of the Poursuivante mp3h9427.jpg|center|128px]]
| ''[[:d:Q4927230|Blockade of Saint-Domingue]]''
|
|
|-
| style='text-align:right'| 145
|
| ''[[:d:Q5354703|elections in Haiti]]''
|
|
|-
| style='text-align:right'| 146
|
| ''[[:d:Q5468493|Foreign relations of Haiti]]''
|
|
|-
| style='text-align:right'| 147
|
| ''[[:d:Q5639691|Haiti Billie Jean King Cup team]]''
|
|
|-
| style='text-align:right'| 148
|
| ''[[:d:Q5856947|Fe y Alegría]]''
|
|
|-
| style='text-align:right'| 149
|
| ''[[:d:Q5938282|human rights in Haiti]]''
|
|
|-
| style='text-align:right'| 150
|
| ''[[:d:Q6726315|Madame Max Adolphe]]''
|
|
|-
| style='text-align:right'| 151
|
| ''[[:d:Q6771722|Marlena Wesh]]''
|
|
|-
| style='text-align:right'| 152
|
| ''[[:d:Q7251035|prostitution in Haiti]]''
|
|
|-
| style='text-align:right'| 153
|
| ''[[:d:Q7279930|Rada loa]]''
|
|
|-
| style='text-align:right'| 154
|
| ''[[:d:Q7935364|visa policy of Haiti]]''
|
|
|-
| style='text-align:right'| 155
| [[Fichye:Central Market, Port-au-Prince.jpg|center|128px]]
| ''[[:d:Q16303839|Marché en Fer]]''
| {{Coord|18.5515|-72.3431|display=inline}}
| [[Pòtoprens (komin)|Pòtoprens]]
|-
| style='text-align:right'| 156
|
| ''[[:d:Q16360378|2014 Kosovo vs Haiti football match]]''
|
|
|-
| style='text-align:right'| 157
|
| ''[[:d:Q17006910|July 1958 Haitian coup d'état attempt]]''
|
|
|-
| style='text-align:right'| 158
|
| ''[[:d:Q17636553|Petite Rivière de Jacmel]]''
| {{Coord|18.23|-72.55111111|display=inline}}
|
|-
| style='text-align:right'| 159
|
| ''[[:d:Q19331319|2015 Haiti Carnival stampede]]''
|
|
|-
| style='text-align:right'| 160
|
| ''[[:d:Q19666225|Marie-Denise Douyon]]''
|
|
|-
| style='text-align:right'| 161
| [[Fichye:Port-au-Prince Haiti Temple - Pierre.jpg|center|128px]]
| ''[[:d:Q20714931|Port-au-Prince Haiti Temple]]''
| {{Coord|18.528651|-72.267999|display=inline}}
| [[Pòtoprens (komin)|Pòtoprens]]
|-
| style='text-align:right'| 162
|
| ''[[:d:Q20807714|Haiti national under-20 football team]]''
|
|
|-
| style='text-align:right'| 163
|
| ''[[:d:Q20872224|Haiti at the 2015 World Championships in Athletics]]''
|
|
|-
| style='text-align:right'| 164
|
| ''[[:d:Q23687393|February 2016 Haitian presidential election]]''
|
|
|-
| style='text-align:right'| 165
|
| ''[[:d:Q24910664|2016 Ligue Haïtienne season]]''
|
|
|-
| style='text-align:right'| 166
| [[Fichye:Tropical Storm Matthew Sept 24 2010.jpg|center|128px]]
| ''[[:d:Q4353265|Tropical Storm Matthew]]''
|
|
|-
| style='text-align:right'| 167
|
| ''[[:d:Q26226528|Ilet a Brouee]]''
| {{Coord|18.128333333333|-73.590555555556|display=inline}}
| [[Sid (depatman)|Sid]]
|-
| style='text-align:right'| 168
|
| ''[[:d:Q26834029|Haiti at the 2016 Summer Paralympics]]''
|
|
|-
| style='text-align:right'| 169
|
| ''[[:d:Q28941174|FC Juventus des Cayes]]''
|
|
|-
| style='text-align:right'| 170
|
| ''[[:d:Q28944080|Haitian Aviation Corps]]''
|
|
|-
| style='text-align:right'| 171
|
| ''[[:d:Q48609821|Haiti at the 2018 Summer Youth Olympics]]''
|
|
|-
| style='text-align:right'| 172
|
| ''[[:d:Q51120334|Myrlande Constant]]''
|
|
|-
| style='text-align:right'| 173
|
| ''[[:d:Q57315177|Germany–Haiti relations]]''
|
|
|-
| style='text-align:right'| 174
|
| ''[[:d:Q60776533|2018 Port-au-Prince massacre]]''
| {{Coord|18.56|-72.34|display=inline}}
|
|-
| style='text-align:right'| 175
|
| ''[[:d:Q62653313|Ronaldo Damus]]''
|
|
|-
| style='text-align:right'| 176
|
| ''[[:d:Q70531330|Mikerline Saint-Félix]]''
|
|
|-
| style='text-align:right'| 177
|
| ''[[:d:Q72697581|Louicius Don Deedson]]''
|
|
|-
| style='text-align:right'| 178
|
| ''[[:d:Q81330435|Haiti at the 2020 Winter Youth Olympics]]''
|
|
|-
| style='text-align:right'| 179
|
| ''[[:d:Q83887546|Kethna Louis]]''
|
|
|-
| style='text-align:right'| 180
|
| ''[[:d:Q106205592|Lise-Marie Dejean]]''
|
|
|-
| style='text-align:right'| 181
| [[Fichye:Flag of Haiti.svg|center|128px]]
| ''[[:d:Q108197251|Haiti at the 2020 Summer Paralympics]]''
|
|
|-
| style='text-align:right'| 182
|
| ''[[:d:Q110855814|Richardson Viano]]''
|
|
|-
| style='text-align:right'| 183
| [[Fichye:Flag of Haiti (civil).svg|center|128px]]
| ''[[:d:Q113397434|Haiti at the 1936 Summer Olympics]]''
|
|
|-
| style='text-align:right'| 184
|
| ''[[:d:Q766764|Dieudonné LaMothe]]''
|
|
|-
| style='text-align:right'| 185
|
| ''[[:d:Q1956676|Morne Degas]]''
| {{Coord|19.59583|-72.81861|display=inline}}<br/>{{Coord|19.594444444444|-72.821388888889|display=inline}}
| [[Latibonit (depatman)|Latibonit]]
|-
| style='text-align:right'| 186
|
| ''[[:d:Q2010761|Montagnes du Trou d'Eau]]''
| {{Coord|18.7167|-72|display=inline}}<br/>{{Coord|18.7|-72.05|display=inline}}
|
|-
| style='text-align:right'| 187
|
| ''[[:d:Q2265677|MICAH]]''
|
|
|-
| style='text-align:right'| 188
|
| ''[[:d:Q2310187|Parc Levelt]]''
| {{Coord|19.1081|-72.6959|display=inline}}
| [[Sen Mak (komin)|Sen Mak]]
|-
| style='text-align:right'| 189
|
| ''[[:d:Q2752222|Grande Caye]]''
| {{Coord|18.0875|-73.81222222|display=inline}}<br/>{{Coord|18.0875|-73.81222|display=inline}}
| [[Sid (depatman)|Sid]]
|}
{{Wikidata list end}}
hunqqmh4qrp6w5klz9ae7jdtplburj8
Les Morts-vivants
0
70441
855655
725425
2024-11-13T11:43:28Z
Túrelio
19595
([[c:GR|GR]]) [[c:COM:Duplicate|Duplicate]]: [[File:White Zombie (1932).webm]] → [[File:White Zombie (1932) by Victor Hugo Halperin HR.webm]] Exact or scaled-down duplicate: [[c::File:White Zombie (1932) by Victor Hugo Halperin HR.webm]]
855655
wikitext
text/x-wiki
[[Fichye:Poster - White Zombie 01 Crisco restoration.jpg|right|thumb|Afich ''White Zombie'']]
[[Fichye:White Zombie (1932) by Victor Hugo Halperin HR.webm|thumb|thumbtime=22|''White Zombie'']]
[[Fichye:White Zombie lobby card.JPG|right|thumb|Yon sèn nan fim]]
'''''Les Morts-vivants''''' (nan angle ː ''White Zombie'') se yon [[fim laterè]] [[Etazini|ameriken]] reyalize pa [[Victor Halperin]], sòti an [[1932]].
Sa a se premye fim ki prezante [[zonbi]].
== Ekip teknik ==
* Tit orijinal : ''White Zombie''
* Tit franse : ''Les Morts-vivants''
* Reyalizatè : [[Victor Halperin]]
* Senaryoo : [[Garnett Weston]]
* Pwodiktè : [[Edward Halperin]]
* Mizik : [[Guy Bevier]], [[Xavier Cugat]], [[Gaston Borch]], [[Robert Nathaniel Dett|Nathaniel Dett]], [[Nem Herkin]], [[H. Maurice Jacquet]], [[Leo Kempinski]], [[Hugo Riesenfeld]]
* Fotografi : [[Arthur Martinelli]]
* Montaj : [[Harold McLernon]]
* Peyu orijin : [[Etazini]]
* Lang : [[angle]]
* Bidjè : 50000 $ (estimasyon)
* Fòma : nwa ak blan - Fòma projeksyon 1,37:1]] - Mono
* Jan : dram, laterè
* Dire : 67 minit
* Sosyete distribisyon : United Artists
* Sòti : 4 out 1932
* Lisans : Domèn piblik
== Aktè ==
* [[Béla Lugosi]] : Legendre
* [[Madge Bellamy]] : Madeleine Short Parker
* [[Joseph Cawthorn]] : Doktè Bruner, missionnaire
* [[Robert Frazer]] : Charles Beaumont
* [[John Harron]] : Neil Parker
== Referans ==
{{referans}}
== Lyen deyò ==
* [https://www.imdb.com/title/tt0023694/ Les Morts-vivants] sou IMDb
* {{en}} [https://archive.org/details/white_zombie ''Les Morts-vivants''] sou Internet Archive
[[Kategori:1932]]
[[Kategori:Sinema]]
[[Kategori:Fim]]
[[Kategori:Fim ameriken]]
guv6d4ry5p5o75qt7yqihs77q6tqbxo
Lee Sang-yoon
0
75426
855619
781474
2024-11-12T21:01:22Z
Nathavaskie
31718
/* Lyen deyò */ ajoute lyen
855619
wikitext
text/x-wiki
{{moun
|non=Lee Sang-yoon
|foto= Lee Sang-yoon.jpg
|tèks=Lee Sang-yoon
|fonksyon=Aktè
|domèn=Sinema, televizyon
|diplòm=
|etid=
|dat nesans=[[15 out]] [[1981]]
|lye nesans=[[Seoul]]
|peyi nesans=[[Kore disid]]
|dat lanmò=
|lye lanmò=
|peyi lanmò=
|nasyonalite= sidkoreyen
|relijyon=
|rezidans=
|kontak=
|Biyografi=
|zèv=
|omaj=
|rekonpans=
|remak=
|fim=
}}
'''Lee Sang-yoon''' (an [[lang kore|koreyen]] : ko-hhrm|이상윤) ki fèt [[15 out]] [[1981]] nan [[Seoul]] ([[Kore disid]]), se yon [[aktè]] [[Kore disid|sidkoreyen]].
== Biyografi ==
== Zèv li yo ==
=== Fim ===
* 2007 : ''[[Sex Is Zero 2]]'' : Gi-jo
* 2014 : ''[[Santa Barbara (fim)|Santa Barbara]]'' : Jung-woo
* 2016 : ''[[Insane (fim)|Insane]]'' : Na Nam-soo
* 2020 : ''Okay Madam'' : Chul Seung
=== Seri elevizyon ===
* 2007 : ''[[Drama City]]'' "Transformation" : Charles ([[KBS2]])
* 2007 : ''[[Air City]]'' : Kim Jung-min ([[Munhwa Broadcasting Corporation|MBC]])
* 2007 : ''[[Drama City]]'' "Sky Lovers" : Moon Ui-sik (KBS2)
* 2007 : ''[[Likeable or Not]]'' : Seo Woo-jin ([[KBS1]])
* 2008 : ''The Scale of Providence'' : Kim Woo-bin ([[Seoul Broadcasting System|SBS]])
* 2008 : ''[[Don't Cry My Love (seri)|Don't Cry My Love]]'' : Jang Hyun-woo (MBC)
* 2009 : ''Heading to the Ground'' : Jang Seung-woo
* 2010 : ''[[Jejungwon (seri)|Jejungwon]]'' : Ji Seok-young ([[Seoul Broadcasting System|SBS]])
* 2010 : ''[[Life Is Beautiful (seri, 2010)|Life Is Beautiful]]'' : Yang Ho-sub
* 2010 : ''[[Home Sweet Home (seri, 2010)|Home Sweet Home]]'' : Kang Shin-woo (MBC)
* 2011 : ''[[The Duo]]'' : Gwi-dong (MBC)
* 2012 : ''[[My Daughter Seo-young]]'' : Kang Woo-jae (KBS2)
* 2013 : ''[[Goddess of Fire]]'' : [[Gwanghaegun of Joseon|Prince Gwanghae]] (MBC)
* 2014 : ''[[Angel Eyes (seri)|Angel Eyes]]'' : Park Dong-joo/Dylan Park ([[Seoul Broadcasting System|SBS]])
* 2014 : ''[[Liar Game (seri, 2014)|Liar Game]]'' : Ha Woo-jin ([[TVN (South Korea)|tvN]])
* 2015 : ''[[Unkind Ladies]]'' : Top star (KBS2)
* 2015 : ''[[Second 20s]]'' : Cha Hyun-seok (tvN)
* 2016 : ''[[On the Way to the Airport]]'' : Seo Do-woo ([[Korean Broadcasting System|KBS2]])
* 2017 : ''[[Whisper (seri)|Whisper]]'' : Lee Dong-joon ([[Seoul Broadcasting System|SBS]])
* 2018 : ''[[About Time (seri)|About Time]]'' : Lee Do-ha ([[tvN]])
* 2019 : ''[[VIP (seri, 2019)|VIP]]'' : Park Sung-joon ([[Seoul Broadcasting System|SBS]])
== Referans ==
{{referans}}
== Lyen deyò ==
* [https://www.imdb.com/name/nm3718915/ Lee Sang-yoon] sou IMDb
* https://mydramalist-com.translate.goog/people/694-lee-sang-yoon?_x_tr_sl=en&_x_tr_tl=fr&_x_tr_hl=fr&_x_tr_pto=sc
{{DEFAULTSORT:Lee, Sang-yoon}}
[[Kategori:Moun]]
[[Kategori:Aktè]]
[[Kategori:Aktè sinema]]
[[Kategori:Aktè televizyon]]
[[Kategori:Aktè sidkoreyen]]
[[Kategori:Nesans nan lane 1981]]
ji8hts70b51ai3s449lrsuqrcfyu7m3
Athena: Goddess of War
0
75563
855618
770718
2024-11-12T20:57:39Z
Nathavaskie
31718
/* Lyen deyò */ ajoute lyen
855618
wikitext
text/x-wiki
'''''Athena: Goddess of War''''' (an [[Lang kore|koreyen]] : 아테나: 전쟁의 여신, ''Atena: Jeonjaeng-ui Yeoshin'') se yon [[seri televizyon]] [[Kore disid|sidkoreyèn]] difize an [[2010]] ak [[2011]] sou [[Seoul Broadcasting System|SBS]].
== Aktè ==
* [[Jung Woo-sung]] kòm Lee Jung-woo
* [[Cha Seung-won]] kòm Son-hyuk
* [[Soo Ae]] kòm Yoon Hye-in
* [[Lee Ji-ah]] kòm Han Jae-hee
== Referans ==
{{referans}}
== Lyen deyò ==
* [https://www.imdb.com/title/tt1942171/ Athena: Goddess of War sou IMDb]
* [https://programs.sbs.co.kr/drama/athena/about/53742 Sitwèb ofisyèl Athena: Goddess of War] sou sbs.co.kr
* https://www.senscritique.com/serie/athena_goddess_of_war/439124
[[Kategori:2010]]
[[Kategori:Televizyon]]
[[Kategori:Seri televizyon]]
[[Kategori:Seri sidkoreyèn]]
en9uhothhb7xqoewlpevttcz71wqs6n
Lis zòn pwoteje ann Ayiti
0
76613
855592
840638
2024-11-12T16:11:54Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855592
wikitext
text/x-wiki
Zòn pwoteje ann Ayiti se sitou pak nasyonal. Sepandan, kèk inisyativ prive tou te reyisi nan prezève biyodivèsite la nan zòn plis oswa mwens gwo.
== Pak nasyonal yo ==
Pak nasyonal Lavizit ak Pik Makaya yo te de (2) premye pak nasyonal yo ki te kreye an 1983, sitou gras a efò Charles A. Woods ak kòlèg li yo. <ref>Woods CA, Ottenwalder JA. The natural history of southern Haiti. Florida Museum of Natural History, University of Florida; 1992</ref> {{,}} <ref>Woods CA, Sergile FE, Ottenwalder JA. Stewardship plan for the national parks and natural areas of Haiti. Florida Museum of Natural History, University of Florida; 1992.</ref>
Twa (3) pak resan se sitou rezilta efò S. Blair Hedges ak Philippe Bayard :<ref>{{Cite web|url=http://articles.philly.com/2011-09-13/news/30149741_1_rare-animals-frogs-forest|title=A search for rare animals before Haiti's forests - and the animals - disappear|website=articles.philly.com|access-date=2016-03-25|archive-date=2016-04-06|archive-url=https://web.archive.org/web/20160406054350/http://articles.philly.com/2011-09-13/news/30149741_1_rare-animals-frogs-forest|dead-url=yes}}</ref> {{,}} <ref name="HNT">{{Cite web|url=http://www.haititrust.org|title=Haiti National Trust|last=Haiti National Trust|access-date=2016-03-25}}</ref> Pak nasyonal Grann Kolin (23 jiyè 2014), <ref>Le Moniteur, Journal Officiel de la République d’Haiti, No. 158, 21 August 2014</ref> Granbwa ak De Manmèl (23 septanm 2015). <ref name="LM10-8">Le Moniteur, Journal Officiel de la République d’Haiti, No. 193, 8 October 2015</ref>
=== Lis pak ===
* [[Pak nasyonal Lavizit]]
* [[Pak nasyonal Makaya]]
* [[Pak nasyonal Grann Kolin|Pak nasyonal natirèl Grann Kolin]]<ref>{{Cite web |url=http://ciat.bach.anaphore.org/archives/search?filter_field=cCorpname&filter_value=Parc+National+Naturel+de+Grande+Colline+%28PNN-GC%29 |title=CIAT |access-date=2020-10-20 |archive-date=2020-08-13 |archive-url=https://web.archive.org/web/20200813203859/http://ciat.bach.anaphore.org/archives/search?filter_field=cCorpname&filter_value=Parc+National+Naturel+de+Grande+Colline+%28PNN-GC%29 |dead-url=yes }}</ref>
* [[Pak nasyonal Granbwa]]
* [[Pak nasyonal De Manmèl]]<ref name="Moniteur 10">Le Moniteur, Journal Officiel de la République d’Haiti, No. 10, 16 January 2014</ref>
* [[Pak nasyonal Forè Pen|Pak nasyonal natirèl Forè Pen]]
* [[Pak nasyonal Twa Bè]]<ref>Le Moniteur, Journal Officiel de la République d’Haiti, No. 230, 11 December 2013</ref>
* Lilavach <ref>Le Moniteur, Journal Officiel de la République d’Haiti, No. 156, 26 August 2013</ref>
=== Rezèv maritim ===
* Abakou
* Konplèks Kap-Kan Lwiz
* Kòt Bèlans ak Gran Gozye
* Dam Mari
* La Cahoune
* Lanavaz
* Pak Maren Baradè / Kayemit
* Pak Maren Bè Akil
* Pak Maren Akaden
* Pak Maren Wochelwa
* Zòn Pwoteje nan Resous Natirèl jere nan Twa Bè yo
* Pak Maren Gonayiv / Gran Salin
* Pak Maren Lilavach / Aken
* Pak Maren Lagonav-Nò
* Pak Maren Lagonav-Sid
* Ti paradi
* Penensil Mòl-Sen-Nikola
== Zòn pwoteje ki soti nan inisyativ prive ==
=== Haïti National Trust ===
* Pak Natirèl Granbwa <ref>{{Cite web|url=https://lenouvelliste.com/article/197710/une-premiere-reserve-naturelle-privee-voit-le-jour-en-haiti|title=Une première réserve naturelle privée voit le jour en Haïti|last=Patrick Saint-Pré|date=18 janvye 2019|website=lenouvelliste.com|access-date=}}</ref>
=== Pak Natirèl Kiskeya ===
Pak la sitiye nan koridò Biyolojik Karayib la (CBC) ki kouvri [[Chèn Lasèl]], Lak Azweyi, pak nasyonal Forè Pen ak Lavizit osi byen ke [[Masif dinò]] Santral la. Nan Repiblik Dominikèn, antite sa a pwolonje sou rezèv biyosfè Jaragua-Baworiko-Enriquillo ak Kodilè Santral nan zòn fwontyè a avèk Ayiti pandan ke nan [[Kiba]] li etabli sitou sou Sierra Maestra, Baracoa, Nipe ak Sagua.
== Referans ==
{{referans}}
== Lyen deyò ==
* [http://www.haititrust.org/ Haiti National Trust]
* [https://parcnaturelquisqueya.com Pak Natirèl Kiskeya]
{{Palèt Ayiti}}
1elr4hfzzgota3hzhj7onl1tc912rqr
Pak nasyonal Grann Kolin
0
76614
855612
813246
2024-11-12T18:20:43Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855612
wikitext
text/x-wiki
{{Coord|18|24|15|N|74|06|10|W|type:landmark_region:HT_dim:10000}}
[[Fichye:Grand_Colline.jpg|right|thumb|400x400px|Forè ak foujè pyebwa jeyan nan Grann Kolin (S. Blair Hedges)]]
'''Pak nasyonal Grann Kolin''' (an [[Lang franse|franse]] : Parc National Naturel de Grande Colline) se yon pak nasyonal ann [[Ayiti|Ayiti ki]] etabli 23 jiyè 2014 ak yon sifas 1.510 ekta.<ref name="LM">Le Moniteur, Journal Officiel de la Republique d’Haiti, No. 158, 21 August 2014</ref> Pak la gen chèn montay Grann Kolin (Chaîne de la Grande Colline) nan nwayo [[Masif Lawòt]] (Massif de la Hotte) nan sidwès Ayiti, nan lwès [[Pik Makaya]]. Gen senk (5) mòn yo rele : Mòn Debaryè (1843 m), Mòn Grann Kolin (2025 m), Mòn Pitit Kolin (1860 m), Mòn Grenouy (2006 m), ak Mòn Leza (1854 m). <ref name="HNT">{{Cite web|url=http://www.haititrust.org|title=Haiti National Trust|last=Haiti National Trust|access-date=2016-03-16}}</ref>
[[Fichye:Grande_Colline_National_Park_topographic_map.jpg|droite|vignette|400x400px|Limit pak nasyonal Grann Kolin sou yon kat topografik Ayiti <ref name="HNT">{{Cite web|url=http://www.haititrust.org|title=Haiti National Trust|last=Haiti National Trust|access-date=2016-03-16}}</ref>]]
[[Fichye:Grande_Colline_detail_topographic_map_.jpg|droite|vignette|400x400px|Kat topografik detaye pak nasyonal Grann Kolin ak pik li yo <ref name="HNT">{{Cite web|url=http://www.haititrust.org|title=Haiti National Trust|last=Haiti National Trust|access-date=2016-03-16}}</ref>]]
Pak sa a se youn nan zòn ki pi lwen ak difisil pou rive an Ayiti. Li te eksplore pa fondatè yo nan Haiti National Trust la an 2011-2015, avèk asistans yon elikoptè ak sipòte pa Fondasyon an Syans Nasyonal ak kritik Ekosistèm Patenarya Fon . <ref name="HNT"/> <ref>{{Cite web|url=http://articles.philly.com/2011-09-13/news/30149741_1_rare-animals-frogs-forest|title=A search for rare animals before Haiti's forests - and the animals - disappear|website=articles.philly.com|access-date=2016-03-25|archive-date=2016-04-06|archive-url=https://web.archive.org/web/20160406054350/http://articles.philly.com/2011-09-13/news/30149741_1_rare-animals-frogs-forest|dead-url=yes}}</ref> Nouvo espès yo te dekouvri ak enfòmasyon ki kapab lakòz sou ekosistèm lan ak menas mennen nan kreyasyon pak nasyonal la nan lane 2014.
== Biyodivèsite ==
Nan pak nasyonal, nou ap jwenn 20 espès krapo (kèk ladan yo se la sèlman nou ka wè yo), 17 espès reptil, plis 19 espès zwazo tou.
Izole kanpe nan forè orijinal ki gen foujè pyebwa jeyan ak bwa di rete nan elevasyon ki anwo 1800 mèt, men debwazman kontinye nan pak la, pou materyèl bilding, agrikilti, ak pwodiksyon chabon.
== Gade tou ==
* [[Lis zòn pwoteje ann Ayiti]]
* Haiti National Trust
== Referans ==
{{referans}}
== Lyen deyò ==
* [https://web.archive.org/web/20210119054820/https://haititrust.org/pdf/Haiti_Calendar_2020.pdf kalandriye 2020] sou haititrust.org
* [http://www.haititrust.org/grande-colline Pak nasyonal Grann Kolin] sou haititrust.org
[[Kategori:Pak nasyonal]]
[[Kategori:Pak nasyonal Ayiti]]
mwxtkboxwjobcbvcym5b7n6gkc1lvlk
Diskisyon Itilizatè:Dade70
3
82575
855573
833299
2024-11-12T13:53:40Z
105.113.65.124
855573
wikitext
text/x-wiki
{{byenveni}}
--[[Itilizatè:Gilles2014|Gilles2014]] ([[Diskisyon Itilizatè:Gilles2014|discussion]]) 13 jen 2022 à 16:08 (UTC)
:Mèsi ampil . [[Itilizatè:Dade70|Dade70]] ([[Diskisyon Itilizatè:Dade70|diskisyon]]) 13 oktòb 2022 à 17:11 (UTC)
== mwa wikikreyolo ==
mwen wè li enpòtan poou tout moun ki pale kreyòl patisipe nan mwa wikikreyolo , yon mannyè pou nou valorize lang kreyòl Ayisyen patou nan mond nan. [[Itilizatè:Dade70|Dade70]] ([[Diskisyon Itilizatè:Dade70|diskisyon]]) 13 oktòb 2022 à 17:16 (UTC)
:W sa w di a se sa {{thank you}} @[[Itilizatè:Dade70|Dade70]] [[Itilizatè:Kitanago|Kitanago]] ([[Diskisyon Itilizatè:Kitanago|diskisyon]]) 13 oktòb 2022 à 17:18 (UTC)
== Administrasyon Wikipedya ayisyen ==
Tanpri li [[Wikipedya:Kafe#Administrasyon Wikipedya ayisyen]]. Ou elijib pou vote.
Please see [[Wikipedya:Kafe#Administrasyon Wikipedya ayisyen]]. You are eligible to vote. [[Itilizatè:WhatamIdoing|WhatamIdoing]] ([[Diskisyon Itilizatè:WhatamIdoing|diskisyon]]) 23 novanm 2023 à 20:49 (UTC)
Allah kabanini karkin karya dukanma wanini azalimi albarkaci madayancin da kadayanta tukafin kaQagidayanta
Allah kanaganin azalumai burunsu
Suga mundaina bautaka gakibamuda qarki toalla kaqarfafamu aqarfin dayaqarfafa aqarfin daqarfinka
qqxmisxtdmffgemxjse35eewjpnsvzd
Modèl:Infobox en Lua
10
86182
855574
844698
2024-11-12T13:54:27Z
BwaKajou
31668
855574
wikitext
text/x-wiki
<includeonly><!--
Catégorisation
-->{{#if:{{{nocat|}}}||{{#ifeq:{{NAMESPACE}}|{{ns:0}}|{{#if:{{{1|}}}|[[Kategori:Atik ki itilize infobox en Lua {{{1|}}}]]|[[Kategori:Atik ki itilize infobox en Lua]]}}[[Kategori:Atik ki itilize yon infobox]]|}}}}</includeonly><noinclude>{{Documentation|contenu=
<templatedata>
{
"params": {
"1": {
"description": "Nom du module en Lua.",
"example": "Musée",
"type": "string"
},
"nocat": {
"description": "Permet de ne pas catégoriser les articles.",
"example": "oui",
"type": "string"
}
},
"description": "Modèle permettant de catégoriser les articles utilisant une infobox en Lua."
}
</templatedata>
{{kategorize|Kategori:Atik ki itilize infobox en Lua|sauf s'il existe une catégorie de la forme « Article utilisant l'infobox <1> »}}
== Exemple ==
<pre>{{Infobox en Lua|Mize}}</pre>
}}
[[Kategori:Modèl infobox Lua| ]]
</noinclude>
p60wyz4jwrgsoqutxecw4bb267ecejs
855581
855574
2024-11-12T15:14:04Z
BwaKajou
31668
855581
wikitext
text/x-wiki
<includeonly><!--
Catégorisation
-->
<templateStyles src="Modèl:Common/Style.css" />
{{#if:{{{nocat|}}}||{{#ifeq:{{NAMESPACE}}|{{ns:0}}|{{#if:{{{1|}}}|[[Kategori:Atik ki itilize infobox en Lua {{{1|}}}]]|[[Kategori:Atik ki itilize infobox en Lua]]}}[[Kategori:Atik ki itilize yon infobox]]|}}}}</includeonly><noinclude>{{Documentation|contenu=
<templatedata>
{
"params": {
"1": {
"description": "Nom du module en Lua.",
"example": "Musée",
"type": "string"
},
"nocat": {
"description": "Permet de ne pas catégoriser les articles.",
"example": "oui",
"type": "string"
}
},
"description": "Modèle permettant de catégoriser les articles utilisant une infobox en Lua."
}
</templatedata>
{{kategorize|Kategori:Atik ki itilize infobox en Lua|sauf s'il existe une catégorie de la forme « Article utilisant l'infobox <1> »}}
== Exemple ==
<pre>{{Infobox en Lua|Mize}}</pre>
}}
[[Kategori:Modèl infobox Lua| ]]
</noinclude>
oxjt3bhj42schoewy5jmnfaafp4n9ks
Module:Infobox/Titre
828
86340
855624
814781
2024-11-12T22:48:54Z
BwaKajou
31668
855624
Scribunto
text/plain
local p = {}
local trim = require( 'Module:Outils' ).trim
local _moduleYesno
local function yesno( ... )
if not _moduleYesno then
_moduleYesno = require( 'Module:Yesno' )
end
return _moduleYesno( ... )
end
function p.templatestyles( pictogramme )
pictogramme = trim( pictogramme )
if not pictogramme then
return ''
end
pictogramme = pictogramme
:gsub( '^entete +', '' )
:gsub( '^entete$', '' )
:gsub( ' +entete$', '' )
:gsub( ' +entete +', ' ' )
if pictogramme ~= '' and pictogramme ~= 'defaut' then
if pictogramme:match( '%s' ) then
return '[[Kategori:Infobox avèk plizyè klass]]'
else
return mw.getCurrentFrame():extensionTag(
'templatestyles',
'',
{ src = 'Infobox/Pictogramme/' .. pictogramme .. '.css' }
)
end
end
return ''
end
function p.couleurs( background, color )
local couleur = require( 'Module:Dièse couleur web' ).couleur
background = trim( background ) or '#E1E1E1'
color = trim( color ) or 'black'
return 'background-color:' .. couleur( background ) .. ';'
.. 'color:' .. couleur( color ) .. ';'
end
function p.V2( frame )
local args = frame.getParent and frame:getParent().args or frame
local colspan = trim( args[ 5 ] ) or '2'
local texte = trim( args[ 1 ] ) or mw.title.getCurrentTitle().text
local classes = trim( args[ 3 ] ) or 'defaut'
local lang = args[ 'lang' ] or ''
local italic = args[ 'italic' ] or ''
local setDisplayTitle = args[ 'setdisplaytitle' ] or ''
if lang ~= '' then
local langueFunction = require( 'Module:Langue' ).langue
texte = langueFunction( { lang, texte } )
end
if italic ~= '' and yesno( italic ) then
classes = classes .. ' italique'
end
local displayTitleEval = ''
if setDisplayTitle ~= '' and yesno( setDisplayTitle ) then
local setDisplayTitleFunction = require( 'Module:Formatage du titre' ).setDisplayTitle
displayTitleEval = setDisplayTitleFunction( { args = { lang = lang, italic = italic, options = 'noreplace' } } )
end
return 'colspan="' .. colspan .. '" '
.. 'class="entete ' .. classes .. '" '
.. 'style="' .. p.couleurs( args[ 2 ], args[ 4 ] ) .. '" '
.. ' | '
.. texte
.. p.templatestyles( args[ 3 ] )
.. displayTitleEval
end
return p
ndd8mklpto1mxa3uj5sau06myaetv5k
Modèl:Infobox Biographie/Pied
10
87001
855559
820353
2024-11-12T13:00:09Z
BwaKajou
31668
855559
wikitext
text/x-wiki
<includeonly><!-- NOTES
-->{{#if:{{{nòt|}}}|
{{Infobox V3/Titre Bloc|background=#{{#invoke:Chartes|charte|infobox=biographie|type={{{charte|}}}|catégorie=secondaire}}|text=Compléments}}
<div style="font-size: 90%;">
{{{nòt|}}}
</div>
}}<!-- SIGNATURE
-->{{#if:{{{siyati|}}}|
{{Infobox V3/Séparateur|height=1|background=#{{#invoke:Chartes|charte|infobox=biographie|type={{{charte|}}}|catégorie=secondaire}} }}
{{Infobox V3/Imaj|imaj={{{siyati|}}}|upright=0.75|alt=Siyati {{{non|{{PAGENAME}}}}}}}
}}<!-- EMBLEME
-->{{#if:{{{anblèm|}}}|
{{Infobox V3/Séparateur|height=1|background=#{{#invoke:Chartes|charte|infobox=biographie|type={{{charte|}}}|catégorie=secondaire}} }}
{{Infobox V3/Imaj|imaj={{{anblèm|}}}|lejand={{{lejand anblèm|}}}|upright=0.6 }}
}}
{{Infobox V3/Fin|Modèl:Infobox {{non vide|{{{modèl|}}}|Biyografi}}|border-color=#{{#invoke:Chartes|charte|infobox=biographie|type={{{charte|}}}|catégorie=secondaire}} }}</includeonly><noinclude>{{Documentation}}</noinclude>
19p6lobuwgbow90eyyg4ol3r3oo6c9c
Modèl:Kategori antretyen pou vide
10
87682
855638
839767
2024-11-12T23:32:49Z
BwaKajou
31668
855638
wikitext
text/x-wiki
<includeonly>{{Icône de titre|id=kategori-pou-vide|lyen=:Kategori:kategori pou vide|tèks=Tout kategori pou vide yo.|imaj=Gnome-fs-regular.svg}}
{{Kategori pou antretyen|{{{1|}}}}}
{{Méta bandeau d'avertissement
| niveau = modéré
| icône = Sheet icon.svg
| titre = Kategori sa dwe {{#if: {{{delta sous-catégories|}}} {{{delta pages|}}} {{{delta|}}}
| gen ladan l sèlman {{Kategori antretyen pou vide/affiche delta |delta sous-catégories={{{delta sous-catégories|}}} |delta pages={{{delta pages|}}} |delta={{{delta|}}} }}
| vide
}}.
| texte = Sa ki ladan l yo kreye ak [[:Kategori:Modèl ki klase nan kategori|modèl ki klase nan kategori]] paj ki chaje ak pwoblèm yo:
{{#if: {{{delta sous-catégories|}}} {{{delta pages|}}} {{{delta|}}}
|* si gen ladan l plis {{Kategori antretyen pou vide/affiche delta |delta sous-catégories={{{delta sous-catégories|}}} |delta pages={{{delta pages|}}} |delta={{{delta|}}} }}, fè entèvasyon sou paj li montre yo pou vide li.
|
* si li pa vid, fè entèvasyon sou paj li montre yo pou vide li;
* si li vid, pa efase li menm si li parèt pami[[Espesyal:KategoriPaItilize| Kategori ki pa itilize yo]].
}}}}</div><includeonly>{{#if: {{{nocat|}}}
|
| {{#ifeq: {{PAGESINCATEGORY:{{#titleparts:/{{NOMPAGE}}|2|2}}}} | {{Kategori antretyen pou vide/total delta |delta sous-catégories={{{delta sous-catégories|}}} |delta pages={{{delta pages|}}} |delta={{{delta|}}} }}
| [[Kategori: Kategori pou antretyen vid ]]
| [[Kategori:Kategori pou vide]]{{{kategori espesyal|}}}
}}
}}{{Kategori ki kapab vid}}</includeonly><noinclude>
{{Documentation}}
</noinclude>
ki6emknutix0516yfmej4gd669yummt
Modèl:Kategori pou antretyen
10
87683
855639
835189
2024-11-12T23:33:14Z
BwaKajou
31668
855639
wikitext
text/x-wiki
<includeonly>{{Méta bandeau d'avertissement
|icône={{{icône|Circle-icons-tools.svg}}}
|niveau=information
|titre={{{titre|Kategori sa la pou fè antretyen pou Wikipedya.}}}
|texte={{{texte|[[Èd:Kategori|Kategori]] sa a pa fè pati [[Èd:Espas Ansiklopedik|espas ansiklopedik]] Wikipedya a, paj li montre yo pa [[Èd:Jagon Wikipedya#Atik|atik ansiklopedi]] oswa yo ka òganize pa kritè (eta avansman, kantite lyen {{elatriye}}) olye de tit. {{
#if: {{{racine|}}}
| <br/>Kategori sa a se youn nan kategori rasin yo, kidonk li ta dwe genyen sèlman sou-kategori e petèt kèk paj ki asosye e ki pa ansiklopedik.
}}}}}
|supplément={{{1|}}}
}}</div></includeonly><noinclude><!--
Pou limite kantite chanjman nan paj sa a, tanpri mete a
meta-enfòmasyon (kategori, entèwiki) konsènan modèl sa a nan yon
<includeonly> seksyon sou paj dokimantasyon li yo, olye ke isit la.
-->{{Documentation}}
</noinclude>
bs9djbii1yv7ffyv0gqwvndz815ge27
Modèl:Kategorize pa
10
87687
855644
839770
2024-11-13T00:17:39Z
BwaKajou
31668
855644
wikitext
text/x-wiki
{{#if: {{{1|}}}
| {{Icône de titre
| id = kategorize-pa-{{PAGEID:Modèl:{{{1}}}}}
| imaj = Template-info.svg
| taille = 32
| lyen = Modèl:{{{1}}}
| tèks = Kategori sa a ranpli otomatikman ak itilizasyon modèl {{{{trim|{{{1}}}}}}}<!--
-->{{#if: {{{2|}}} |  ({{{2}}}) }}<!--
-->.
}}<!--
-->{{#if: {{{note|}}}
| Kategori sa a ranpli otomatikman ak itilizasyon modèl {{M|{{trim|{{{1}}}}}}}<!--
-->{{#if: {{{2|}}} |  ({{{2}}}) }}<!--
-->.
}}
| <span class="error">Erreur de paramétrage de {{M|Kategorize pa|2=''non modèl la''}} : non modèl la(paramètre <code>'''1'''</code>) obligatwa.</span><!--
-->{{#ifeq: {{NAMESPACE}} | Kategori | [[Kategori:Paj ki itilize modèl ak sentaks ki pa kòrèk||Kategorize pa]] }}
}}</div><!--
--></includeonly><noinclude><!--
Pour limiter le nombre de changements de cette page merci de placer les
métadonnées (catégories, interwikis) concernant ce modèle dans une
section <includeonly> de sa sous-page de documentation, plutôt qu'ici.
-->{{Documentation}}</noinclude>
bsbj24u7uos0src9itvjf04jnrwbxmy
855645
855644
2024-11-13T00:17:56Z
BwaKajou
31668
855645
wikitext
text/x-wiki
<includeonly>{{#if: {{{1|}}}
| {{Icône de titre
| id = kategorize-pa-{{PAGEID:Modèl:{{{1}}}}}
| imaj = Template-info.svg
| taille = 32
| lyen = Modèl:{{{1}}}
| tèks = Kategori sa a ranpli otomatikman ak itilizasyon modèl {{{{trim|{{{1}}}}}}}<!--
-->{{#if: {{{2|}}} |  ({{{2}}}) }}<!--
-->.
}}<!--
-->{{#if: {{{note|}}}
| Kategori sa a ranpli otomatikman ak itilizasyon modèl {{M|{{trim|{{{1}}}}}}}<!--
-->{{#if: {{{2|}}} |  ({{{2}}}) }}<!--
-->.
}}
| <span class="error">Erreur de paramétrage de {{M|Kategorize pa|2=''non modèl la''}} : non modèl la(paramètre <code>'''1'''</code>) obligatwa.</span><!--
-->{{#ifeq: {{NAMESPACE}} | Kategori | [[Kategori:Paj ki itilize modèl ak sentaks ki pa kòrèk||Kategorize pa]] }}
}}</div><!--
--></includeonly><noinclude><!--
Pour limiter le nombre de changements de cette page merci de placer les
métadonnées (catégories, interwikis) concernant ce modèle dans une
section <includeonly> de sa sous-page de documentation, plutôt qu'ici.
-->{{Documentation}}</noinclude>
76aogln5vnhud6nixycz20zxbwzd9tl
Module:Infobox/Fonctions/Personne
828
87759
855613
825262
2024-11-12T18:29:58Z
BwaKajou
31668
855613
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- mis en place des tests dans au moins une des pages de test d'un des modèles utilisant la fonction ?
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
-- Functions utilisées par les infobox personnes
local p = {}
local localdata = require 'Module:Infobox/Localdata'
local item = localdata.item
local wikidata = require 'Module:Wikidata'
local general = require 'Module:Infobox/Fonctions'
local datemodule = require 'Module:Date'
local complexdate = require 'Module:Date complexe'
local linguistic = require 'Module:Linguistique'
local militaryranks = require 'Module:Dictionnaire Wikidata/Grades militaires'
local ppath = require 'Module:Wikidata/Chemin'
local noble = require 'Module:Noble'
-- == Accord en genre
local gender = wikidata.getgender(item) -- genre de la personne dont c'est l'infobox
-- Version locale de wikidata.genderedlabel où si le genre n'est pas indiqué, c'est celui de la personne dont c'est l'infobox
local function genderedlabel(id, labelgender)
if not labelgender then labelgender = gender end
return wikidata.genderedlabel(id, labelgender)
end
-- === Gestion des dates
-- Liens thématiques vers les dates
local datelinks = { -- lien vers le domaine d'activité approprié
Q483501 = 'en arts plastiques', -- artiste
Q1028181 = 'en arts plastiques', -- peintre
Q1281618 = 'en arts plastiques', -- sculpteur
Q2309784 = 'en cyclisme', -- cycliste
Q16947657 = 'en arts plastiques', -- lithographe
Q11569986 = 'en arts plastiques', -- graveur
Q13365770 = 'en arts plastiques', -- graveur sur cuivre
Q21925567 = 'en arts plastiques', -- sérigraphe
Q10862983 = 'en arts plastiques', -- aquafortiste
Q36180 = 'en littérature', -- écrivain
}
local function getdatetopic() -- obtient le lien le plus approprié pour une date en fonction de la profession
local claims = wikidata.stringTable{entity = item, property = 'P106', excludespecial = true, displayformat = 'raw'}
if not claims then
return nil
end
for i, j in pairs(claims) do
if datelinks[j] then
return datelinks[j]
end
end
end
local linktopic = getdatetopic()
local unknowndatelabel = 'date inconnue'
local birthdate = localdata['naissance'] or
localdata['date de naissance'] or
wikidata.formatAndCat{
entity = item,
property = 'P569',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
minprecision = 8, --précision minimale pour être affichée : décennie
}
local dead = wikidata.getClaims{entity = item, property = 'P570'} --utilisé comme booléen qui dit si une personne est morte pour modifier certaines élément d'affichage
local stillvalid
if dead then
stillvalid = "?" -- permet de remplacer des "depuis" par des "à partir de"
end
local deathdate = localdata['décès'] or localdata['date de décès']
local wddeathdate = wikidata.formatAndCat{
entity = item,
property = 'P570',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
minprecision = 8,
}
local disappeardate = localdata['disparition']
local wddisappeardate = wikidata.formatAndCat{
entity = item,
property = 'P746',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
showqualifiers = 'P276',
minprecision = 8,
}
local function format1(event, period, predecessor, together, successor, displayformat)
local mainstr = event
if predecessor then
local s = 'précédé par ' .. predecessor
if gender == 'f' then
s = 'précédée par ' .. predecessor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if together then
local s = 'avec ' .. together
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if successor then
local s = 'suivi par ' .. successor
if gender == 'f' then
s = 'suivie par ' .. successor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
return {type = 'row', label = period or '', value = function() return mainstr end}
end
-----------------
local function format2(event, period, predecessor, together, successor, displayformat)
if (not event) then
return nil
end
local rows = {}
local eventrow = {type = 'row1col', color = 'secondcolor', value = event }
table.insert(rows, eventrow)
if period then
period = '<span style="font-weight:normal">' .. period .. '</span>'
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
table.insert(rows, periodrow)
end
if predecessor then
local prederow = {type = 'row', label = 'Prédécesseur', value = function() return predecessor end}
table.insert(rows, prederow)
end
if together then
local succrow = {type = 'row', label = 'Avec', value = function() return together end}
table.insert(rows, succrow)
end
if successor then
local succrow = {type = 'row', label = 'Successeur', value = function() return successor end}
table.insert(rows, succrow)
end
return {type = 'multi', rows = rows}
end
local function format3(event, period, predecessor, together, successor, displayformat, details)
if details then
details = '<span style="font-weight:normal">' .. details .. '</span>'
event = linguistic.conj({event, details}, 'new line')
end
local mainrow = {type = 'row1col', color = 'secondcolor', value = event }
if period then
period = '<span style="font-weight:normal">' .. period .. '</span>'
end
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
local successionrow = {
style = {['background-color'] = '#F9F9F9', ['padding-bottom'] = '2%'},
type = 'navigator',
inner = true,
previousval = function() return predecessor end,
nextval = function() return successor end,
}
return {type = 'multi', rows = {mainrow, periodrow, successionrow}}
end
local function timeline(localparam, wdconf, timelineformat, title, singtitle, details) -- affiche date : événement (suppose les événements déjà triés)
local rows = {}
local function returnTable()
return {
type = 'table',
title = title,
rows = rows
}
end
-- avec données locales
local val = localdata[localparam]
if val == '-' then
return nil
elseif val then
table.insert(rows, {type = 'row1col', color = 'secondcolor', value = val})
return returnTable()
end
-- avec données wikidata
if not wdconf then
return nil
end
wdconf.entity = wdconf.entity or item
wdconf.sorttype = wdconf.sorttype or 'chronological'
wdconf.labelformat = wdconf.labelformat or genderedlabel
wdconf.linktopic = wdconf.linktopic or '-'
local statements = wikidata.getClaims(wdconf)
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
local displayformats = {
A = format1,
B = format2,
C = format3,
}
local applyformat = displayformats[timelineformat] or displayformats['A']
rows = {}
for i, statement in pairs(statements) do
local event = linguistic.ucfirst(wikidata.formatStatement(statement, wdconf))
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'}, {labelformat2 = noble.labelInfobox})
local together = wikidata.getFormattedQualifiers(statement, {'P1706', ''}, {labelformat2 = noble.labelInfobox})
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'}, {labelformat2 = noble.labelInfobox})
local period = wikidata.getFormattedDate(statement, {linktopic = wdconf.linktopic, stilltrue = stillvalid } ) -- dont pass all wdconf or else qualifiers will show up
local detailstr
if type(details) == 'function' then
detailstr = details(statement)
end
local row = applyformat(event, period, predecessor, together, successor, wdconf, detailstr)
if row then
table.insert(rows, row)
end
end
table.insert(rows, {type = 'external text', value = function() return wikidata.addTrackingCat(wdconf.property) end})
return returnTable()
end
local function dateandplace(thedate, theplace)
if thedate and theplace and mw.ustring.find(thedate, 'inconnu') and mw.ustring.find(theplace, 'inconnu') then
theplace = nil
thedate = mw.ustring.gsub(thedate, linguistic.ucfirst(unknowndatelabel), 'Date et lieu inconnus')
end
return linguistic.conj({thedate, theplace}, 'new line')
end
--Titre
function p.title(icon, style)
local title = general.title(icon, style)
title.value = function()
return localdata['nom'] or localdata['association_nom'] or localdata['nom_think'] or localdata['acronymelaboratoire'] or localdata['titre']
or wikidata.getLabel(localdata.item) and noble.labelInfobox( mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) ) )
or noble.labelInfobox( mw.title.getCurrentTitle().text )
end
return title
end
--Image
function p.mainimage(cat)
-- demande d'illustration que si la personne est née ou morte après 1900, sinon c'est souvent impossible à trouver
local defaultimage = 'Defaut 2.svg'
local age = wikidata.stringTable{property = 'P569,P570', entity = item, displayformat = 'raw', excludespecial = true}
if age and age[1] then
local pattern = '(%W)(%d+)%-(%d+)%-(%d+)'
local era, year = age[1]:match(pattern)
if (era == '-') or (tonumber(year)) < 1900 then
defaultimage = nil
end
end
return general.mainimage({cat = cat or 'Article à illustrer Biographie', altparameter = 'alt'}, defaultimage)
end
-- Noms
function p.othernames()
local names = {
{'P1477', 'Nom de naissance', 'Noms de naissance', 'nom de naissance'},
{'P1448', 'Nom officiel', 'Noms officiels', 'nom officiel'},
{'P1449', 'Surnom', 'Surnoms', 'surnom'},
{'P2001', 'Romanisation révisée', 'Romanisation révisée', 'romanisation révisée'},
{'P1942', 'McCune-Reischauer', 'McCune-Reischauer', 'McCune-Reischauer'},
{'P742', 'Pseudonyme', 'Pseudonymes', 'pseudonyme'},
{'P1782', 'Prénom social', 'Prénoms sociaux', 'prénom social'},
{'P1786', 'Nom posthume', 'Noms posthumes', 'nom posthume'},
{'P1785', 'Nom de temple', 'Noms de temple', 'nom de temple'},
{'P1787', 'Nom de pinceau', 'Noms de pinceau', 'nom de pinceau'},
{'P1813', 'Nom court', 'Noms courts', 'nom court'},
{nil, 'Autres noms', 'Autres noms', 'autres noms'},
}
local nativelangnamerow = { -- un peu particulier, donc à part
type = 'row',
wikidata = function()
local s = wikidata.formatAndCat{entity = item, property = 'P1559', showqualifiers = 'P1721', conjtype = 'or'}
if (not s) then
return nil
end
-- regarde si le nom de la valeur ressemble au libellé (en tenant compte de la pollution des marqueures de langue
local label = mw.ustring.lower(wikidata.getLabel(item) or '')
local useless
if mw.ustring.find(mw.ustring.lower(s), mw.ustring.lower(label), 1, true) then
useless = true
end
if wikidata.formatStatements{entity = item, property = 'P1559'} == wikidata.formatStatements{entity = item, property = 'P1477'} then
useless = true --inutile si duplique le "nom de naissance"
end
if useless then
return nil
end
return s
end,
label = 'Nom dans la langue maternelle',
plurallabel = 'Noms dans la langue maternelle',
value = 'nom dans la langue maternelle',
}
local rows = {type = 'multi', rows = {nativelangnamerow}}
for i, j in pairs(names) do
local query
if j[1] and not localdata['autres noms'] then -- lorsqu'il y a un paramètre "autres noms", Wikidata est désactivée pour éviter risques de doublon
query = {property = j[1], showqualifiers = {'P1721'}, conjtype = 'comma'}
end
table.insert(rows.rows, {type = 'row', value = j[4], wikidata = query, label = j[2], plurallabel = j[3]})
end
return rows
end
-- NAISSANCE ET MORT
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième
return {
type = 'row',
label = 'Naissance',
value =
function()
local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = birthdate or '', [3] = deathdate or wddeathdate or disappeardate or wddisappeardate or '', qualificatif = linktopic}}
local theplace = localdata['lieu de naissance'] or
wikidata.formatAndCat({entity =item, -- affichage du nom du lieu de naissance en vigueur à la date de naissance
property= 'P19',
rank = 'best',
labelformat = function(val) return wikidata.getLabel(val) end,
conjtype= ' ou ',
defaultlinkquery = {property = {'P361'}}, -- liens par défaut : "partie de",
unknownlabel = "lieu inconnu",
showqualifiers = {'P131', 'P17'},
qualifconjtype = 'comma'
}
)
return dateandplace(thedate, theplace)
end
}
end
function p.death() -- même fonctionnement que la fonction p.birth
-- date de disparition
local ldisappeardate = disappeardate
if (not ldisappeardate ) and (not deathdate) then -- récupérée de Wikidata seulement si la date de décès n'est pas fournie en locale
ldisappeardate = wddisappeardate
end
if ldisappeardate and birthdate then
ldisappeardate = datemodule.dateInfobox{args = {[1] = 'événement', [2] = birthdate or '', [3] = ldisappeardate or '', qualificatif = linktopic, unknownlabel = 'date inconnue'}}
end
-- date de décès
local ddate = deathdate --déclarée pour l'ensemble du module
if (not ddate) and (not ldisappeardate) then
deathdate = wddeathdate -- récupérée de Wikidata seulement si la date de disparition n'est pas fournie en locale
end
local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = birthdate or '', [3] = deathdate or '', qualificatif = linktopic, unknownlabel = 'date inconnue'}}
local theplace = localdata['lieu de décès'] or
wikidata.formatAndCat{entity =item,
property= 'P20',
rank = 'best',
-- affichage du nom du lieu de décès en vigueur à la date de décès
labelformat = function(val) return wikidata.getLabel(val) end,
conjtype= ' ou ',
defaultlinkquery = {property = {'P361'}}, -- liens par défaut : "partie de",
unknownlabel = "lieu inconnu",
showqualifiers = {'P131', 'P17'},
qualifconjtype = 'comma'
}
local val = dateandplace(thedate, theplace)
return
{type = 'multi', rows = {
{ -- disparition
type = 'row',
label = 'Disparition',
value = function() return ldisappeardate end
},
{ -- décès
type = 'row',
label = 'Décès',
value = function() return val end,
}
}}
end
function p.floruit()
return {
type = 'row',
label = "Période d'activité",
value = "période d'activité",
wikidata = function()
local startDate = wikidata.formatAndCat{entity = item, property = 'P2031', conjtype = 'or', sorttype = 'chronological', linkback = '-'}
local endDate = wikidata.formatAndCat{entity = item, property = 'P2032', conjtype = 'or', sorttype = 'chronological'}
if not (startDate or endDate) then
return wikidata.formatAndCat{entity = item, property = 'P1317', conjtype = 'or', sorttype = 'chronological'}
end
if startDate and not endDate then
startDate = wikidata.formatAndCat{entity = item, property = 'P2031', conjtype = 'or', sorttype = 'chronological'}
end
return complexdate.daterange(startDate, endDate, {precision = 11, stilltrue = stillvalid})
end
}
end
function p.placeofburial()
return
{type = 'row', label = 'Sépulture', value = 'sépulture', wikidata = {property = "P119", showdate = true, novaluelabel = 'aucune'}}
end
function table.slice(tbl, first, last, step)
local sliced = {}
for i = first or 1, last or #tbl, step or 1 do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
-- function that creates a filter function
-- if the main country "base_country_item" is (replaced by)+
-- the subsequent statement main value that the function will receive as a parameter
-- then the created function will return true for this statement to be filtered out
local function filter_replaces_builder(base_country_item)
-- P1365 = remplace
-- P1366 = remplacé par
local replaced_query = {property = 'P1365'}
return function(may_be_replacing_stmt)
local may_be_replacing_item = wikidata.getMainId(may_be_replacing_stmt)
local replaces = wikidata.inTransitiveVals(may_be_replacing_item, base_country_item, replaced_query)
return not(wikidata.inTransitiveVals(may_be_replacing_item, base_country_item, replaced_query))
end
end
-- filter parameterized by each of the values of the claims, in the order
-- « filter_function_builder » will be called by all the values (remaining after filtering) in « claims »
-- to filter the rest of the claims, starting from the first one in the list.
local function iterated_filter(claims, filter_function_builder)
-- the first country in the list, if any of the following value replaces this one
-- we remove them. So we split the list
local first_country_claim = claims[1]
local to_test = table.slice(claims, 2, #claims)
if #to_test > 0 then
-- building the filter function with the first country as base value
-- (a closure)
local condition = filter_function_builder(wikidata.getMainId(first_country_claim))
-- keeping the number of values before the filter
local nb_before = #to_test
to_test = wikidata.filterClaims(to_test, {condition = condition}) or {}
local nb_after = #to_test
-- if some country was filtered out, we remove the dates of the main statement to avoid showing incomplete dates
if (nb_before ~= nb_after and first_country_claim.qualifiers) then
first_country_claim.qualifiers["P580"] = nil
first_country_claim.qualifiers["P582"] = nil
end
-- if there still exists candidate countries, filter them recursively
if #to_test > 0 then
to_test = iterated_filter(to_test, filter_function_builder)
end
-- reconstruct the list of statement by readding our first country to the filtered list
to_test = to_test or {}
table.insert(to_test, 1, first_country_claim)
return to_test
end
-- if there were nothing to filter, just return the first statement
return {first_country_claim}
end
function p.nationality()
local cmp = wikidata.compare
-- à améliorer étant donnée les mœurs Wikidata comme nationalité : Empire allemand (1901-1918) République de Weimar (1918-1933)
local function wdDate()
local nation = require 'Module:Country data'.nationality
-- désactivation si date de naissance avant l'Ère contemporaine : trop d'imprécisions et d'anachronismes
local mindate = '1789'
local birthdate = wikidata.formatStatements{entity = item, property = 'P569', displayformat = 'raw', numval = 1}
local deathdate = wikidata.formatStatements{entity = item, property = 'P570', displayformat = 'raw', numval = 1}
if ((not birthdate) or complexdate.before(mindate, birthdate)) and ((not deathdate) or complexdate.before(mindate, deathdate)) then
return nil
end
-- preprocessing the "P27" statements
-- if there is statements about a country that changed its regime, like France before and after the french Revolution
-- then we just want to show "France" and not "France and France" because there is two statement (or worse)
-- so we take advantage of the fact that the French Kingdom was "replaced by" French Republic (P1366)
-- to detect and filter out such «redundant» values
-- (we also remove the begin/end dates of statements in such cases to avoid wrong dating)
local statements = wikidata.getClaims{entity = item, property = 'P27', rank='best', excludespecial=true} or {}
-- sort nationality statements by statement dates or regime creation date if statement is not dated
local sort_by_statement_or_regime = wikidata.chrono_key_sort{
sort_key="RegimeKey", -- use another key than « chronosort »
snak_key_get_function = ppath.snak_key_by_paths{">P580","P571"}, --[[ either by « begin date » qualifier or « inception » of the nationality
if the statement is not dated ]]
key_compare_function = cmp.rev(function(v1, v2) return v1 < v2 end) -- sort in reverse chronological order to remove all values the first nationalities replaces
}
-- ordering statement by dates so that we can test only "A replaces B" and not "B replaces A" because A is an older regime than B
statements = sort_by_statement_or_regime(statements)
-- actual statement filtering
statements = iterated_filter(statements, filter_replaces_builder)
-- re-sorting in chronological ordering
statements = wikidata.sortClaims(statements, cmp.chronoCompare)
return {
property = 'P27',
claims = statements, -- our filtered statement as claims instead of the regular query
showdate = true,
entity = item,
conjtype = 'new line',
removedupes = true,
linktopic = '-',
sorttype = 'chronological',
ucfirst = '-',
stilltrue = not dead,
displayformat =
function(snak)
-- local g = gender -- genre de la personne, pour affichage du gentilé
-- if g == '?' then -- si inconnu, au masculin
-- g = 'm'
-- end
local val, success = nation(wikidata.getId(snak), 'f') -- au féminin pour accorder au mot nationalité
if not success then
val = wikidata.formatSnak(snak)
end
return val
end
}
end
return {
type = 'row',
label = 'Nationalité',
plurallabel = 'Nationalités',
value = 'nationalité',
wikidata = wdDate() -- wdDate() retourne une table
}
end
function p.nativelanguage()
return
{type = 'row', label = 'Langue maternelle', value = 'langue maternelle', property = 'P103'}
end
function p.writinglanguage()
return
{type = 'row', label = "Langue d\'écriture", value = 'langue d\'écriture', plurallabel = "Langues d\'écriture" , wikidata = {property = 'P6886' , expl = true}}
end
-- Domiciles
function p.places()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Dème',
plurallabel = 'Dèmes',
value = 'dème',
wikidata = {property = 'P2462', showdate = true, sorttype= 'chronological', stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Domicile',
plurallabel = 'Domiciles',
value = 'domicile',
wikidata = {property = 'P551', showdate = true, sorttype= 'chronological', stilltrue = not dead, precision = 'year'},
},
}}
end
-- parcours professionel
function p.education()
local query = {sorttype= 'chronological', property = 'P69', showdate = true, stilltrue = '?', showqualifiers = 'P512', conjtype = 'new line', linktopic = '-'}
return {
type = 'row',
value = {'éducation', 'formation'},
wikidata = query,
label = 'Formation',
}
end
function p.occupation()
local speciallabels = {
f = {
['Q33999'] = '[[Acteur|actrice]]',
['Q10798782'] = '[[Acteur|actrice]]',
['Q10800557'] = '[[Acteur|actrice]]',
['Q2405480'] = '[[Acteur|actrice]]',
['Q2259451'] = '[[Acteur|actrice]]',
['Q948329'] = '[[Acteur|actrice]]'
},
m = {
['Q33999'] = '[[acteur]]',
['Q10798782'] = '[[acteur]]',
['Q10800557'] = '[[acteur]]',
['Q10798782'] = '[[acteur]]',
['Q2405480'] = '[[acteur]]',
['Q2259451'] = '[[acteur]]',
['Q948329'] = '[[acteur]]'
}
}
return {
type = 'row',
value = {'activité', 'activités'},
wikidata = {
property = 'P106',
defaultlink = '-',
defaultlinkquery = {property = {'P425','P1056'}},
labelformat = genderedlabel,
speciallabels = speciallabels[gender] or speciallabels['m'],
removedupes = true,
showdate = true,
sorttype = 'chronological',
stilltrue = not dead,
excludevalues = { -- les occupations qui ne méritent pas d'être affichées
'Q482980', -- auteur
'Q15980158', --"auteur de non-fiction"
'Q12144794', --prosateur
'Q18814623', -- autobiographe
'Q1209498', -- juriste-poète
'Q1097498', -- "dirigeant"
'Q2478141', -- aristocrate
'Q116', -- monarque
'Q115088092', -- participant à un forum international
}
},
label = 'Activité',
plurallabel = 'Activités'
}
end
function p.haswrittenfor()
local valueStyle = {}
valueStyle['font-style'] = 'italic'
return
{type = 'row', label =
function(localdata, item)
if gender == 'f' then
return 'Rédactrice à'
else
return 'Rédacteur à'
end
end, value = 'rédacteur à', wikidata = {property = "P6872", showdate = true}, valueStyle = valueStyle}
end
function p.employer()
return {
type = 'row',
value = 'employeur',
wikidata = {property = 'P108', showdate = true, linktopic = '-', sorttype= 'inverted', stilltrue = not dead, conjtype = 'new line'},
label = function() return localdata['intitulé employeur'] or 'A travaillé pour' end,
}
end
function p.victories()
local title, singtitle = 'Victoires', 'Victoire'
local localparam = 'victoire'
local wdconf = {property = 'P2522'}
local displayformat = 'B'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.officialposition()
local title, singtitle = 'Fonctions', 'Fonction'
local localparam = 'fonction'
local wdconf = {
property = 'P39',
rank = 'valid',
sorttype = 'inverted',
defaultlinkquery = {property = {'P2354', 'P2389', 'P453', 'P361', 'P108', 'P276', 'P1001'}}, -- liens par défaut : liste, puise organisme dirigé, "membre de", "partie de", employeur, ressort territorial
}
-- sur une ligne séparée : gouvernement, législature, juridiction, "de", circonsription, diocèse, affiliation, assemblée, parti, employeur
local details = function(statement) return wikidata.getFormattedQualifiers(statement, {'P5054', 'P2937', 'P1001', 'P642', 'P2389', 'P768', 'P708', 'P1416', 'P194', 'P108', 'P937' , 'P1268'}, {conjtype = 'new line'}) end
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat, title, singtitle, details)
end
function p.specialrole()
local localparam = 'statut notable'
local wdconf = {
property = 'P2868',
rank = 'valid',
sorttype = 'inverted',
targetsuperclass = 'Q254917',
defaultlinkquery = {property = {'P2354'}}, -- lien par défaut : liste d'éléments
}
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat)
end
function p.nobilitytitle()
local title, singtitle = 'Titres de noblesse', 'Titre de noblesse'
local localparam = 'titre de noblesse'
local wdconf = {
property = 'P97',
entity = item, rank = 'valid',
showqualifiers = {'P642'},
defaultlinkquery = {property = {'P2354', 'P361'}}, -- liens par défaut : liste, puise organisme dirigé, "membre de" et "partie de"
}
local displayformat = 'B'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.honorifictitle()
local title, singtitle = 'Titres honorifiques', 'Titre honorifique'
local localparam = 'titre honorifique'
local wdconf = {property = 'P511', entity = item, rank = 'valid'}
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.tombe()
return {
type = 'images',
imageparameters = {'tombe'},
defaultimages = nil,
defaultupright = 1,
uprightparameter = 'upright tombe',
sizeparameter = 'taille tombe', -- obsolète
captionparameter = 'légende tombe',
defaultcaption = 'Vue de la sépulture.',
property = 'P1442',
numval = 1,
}
end
function p.plaque()
return {
type = 'images',
imageparameters = {'plaque'},
defaultimages = nil,
defaultupright = 1,
uprightparameter = 'upright plaque',
sizeparameter = 'taille plaque', -- obsolète
captionparameter = 'légende plaque',
defaultcaption = 'Plaque commémorative',
property = 'P1801',
numval = 1,
}
end
function p.blason()
return {
type = 'images',
imageparameters = {'blason'},
defaultimages = nil,
defaultupright = 0.5,
uprightparameter = 'upright blason',
sizeparameter = 'taille blason', -- obsolète
captionparameter = 'légende blason',
defaultcaption = 'Blason',
property = 'P94',
numval = 1,
}
end
function p.sceau()
return {
type = 'images',
imageparameters = {'sceau'},
defaultimages = nil,
defaultupright = 0.7,
uprightparameter = 'upright sceau',
sizeparameter = 'taille sceau', -- obsolète
captionparameter = 'légende sceau',
defaultcaption = 'Sceau',
property = 'P158',
numval = 1,
}
end
function p.monogram()
return {
type = 'images',
imageparameters = {'monogramme'},
defaultimages = nil,
defaultsize = '100px',
sizeparameter = 'taille monogramme',
captionparameter = 'légende monogramme',
defaultcaption = 'Monogramme',
property = 'P1543',
numval = 1,
}
end
function p.flag()
return {
type = 'images',
imageparameters = {'drapeau'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille drapeau',
captionparameter = 'légende drapeau',
defaultcaption = 'Drapeau',
property = 'P41',
numval = 1,
}
end
function p.logo()
return {
type = 'images',
imageparameters = {'logo'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille logo',
captionparameter = 'légende logo',
defaultcaption = 'Marque ou logotype',
property = 'P154',
numval = 1,
}
end
function p.politicalparty()
return {
type = 'row',
value = 'parti politique',
label = 'Parti politique',
plurallabel = 'Partis politiques',
wikidata = { property = 'P102', sorttype= 'chronological', showdate = true, conjtype = 'new line', excludespecial = true,
labelformat = function(id) if id == 'Q327591' and gender == 'f' then return 'indépendante' end end}
}
end
function p.memberof()
return {type = 'multi', rows = {
{
type = 'row',
value = 'ordre de chevalerie',
label = 'Ordre de chevalerie',
plurallabel = 'Ordres de chevalerie',
wikidata = {property = 'P550', sorttype= 'chronological', showdate = true, stilltrue = not dead},
},
{
type = 'row',
label = 'Membre de',
value = 'membre de',
wikidata = {property = 'P463', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year', linktopic = '-', textformat = 'minimum', conjtype = 'new line'},
},
}}
end
local masclabelitems = {a='Q10855271', b='Q10855195', c='Q10855212', d='Q10855216', e='Q13422138', f='Q13422140', g='Q13422141', h='Q13452524', i='Q13452528', j='Q13452531', k='Q14637182', l='Q14637176', m='Q14637188',}
-- grades de la légion d'Honneur, de l'ordre national du Mérite, de l'ordre des Palmes académiques et de l'ordre des Arts et Lettres en France, de genre grammatical masculin y compris pour les femmes
function p.awards()
local function awardsList()
local majorawards = require 'Module:Dictionnaire Wikidata/Distinctions'
local query = {
entity = item,
property= 'P166',
sorttype= 'chronological',
grouped = true,
showqualifiers = 'P642',
showdate= true,
precision = 'year',
conjtype = 'new line',
textformat = 'minimum',
linktopic = '-',
defaultlinkquery = {property = {'P2354', 'P361' , 'P1027'}},
excludevalues = majorawards.exclude, -- membre de la Royal Society, redondance avec le champ « membre de » (P463)
speciallabels = majorawards,
labelformat = function(id)
masclabel = false
for _, item in pairs(masclabelitems) do
if id == item then masclabel = true end
end
if masclabel then
return genderedlabel(id, 'm')
else
return genderedlabel(id)
end
end,
}
local claims = wikidata.getClaims(query)
if (not claims) then
return nil
end
local str = wikidata.formatAndCat(query)
if #claims < 4 then
return str, #claims
end
--si trop de valeurs, n'afficher que les importantes de [[Module:Dictionnaire Wikidata/Distinctions]], et mettre les autrs dans un menu pliant
--- récupération des importantes
local majorStr
local targetvalues = {}
for i, j in pairs(majorawards) do
table.insert(targetvalues, i)
end
query.targetvalue = targetvalues
query.value, query.claims, query.valuetable = nil, nil, nil -- apparemment sinon ce n'est pas le cas, pourquoi ? BUG IMPORTANT
majorStr = wikidata.formatAndCat(query)
--- repliage des autres
local message = "'''Liste détaillée'''"
local allAwardsTable = mw.html.create('div')
:addClass('toccolours mw-collapsible mw-collapsed')
:wikitext(message)
:css{border = 'none'}
:tag('div')
:addClass('mw-collapsible-content')
:css{['line-height'] = '150%'} -- sinon c'est vraiment serré
:wikitext( str)
:done()
:allDone()
return linguistic.conj({majorStr, tostring(allAwardsTable)}, '<br>'), #claims
end
return {
type = 'row',
value = {'prix', 'récompenses', 'distinction', 'distinctions'},
label = 'Distinctions',
singularlabel = 'Distinction',
wikidata = function() return awardsList() end
}
end
-- Influences
function p.influencedby()
return {
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Influencée par'
else
return 'Influencé par'
end
end,
value = 'influencé par',
wikidata = {property = 'P737'},
}
end
function p.influenced()
return {
type = 'row',
label = 'A influencé',
value = {'a influencé', 'influence de'},
}
end
-- Appartenances
function p.movement()
return
{
type = 'row',
label = 'Mouvement',
value = 'mouvement',
plurallabel = 'Mouvements',
wikidata = {property = 'P135', sorttype= 'chronological', showdate = true, precision = 'year'},
}
end
-- Religion
function p.religion()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Religion',
value = 'religion',
},
{
type = 'row',
label = 'Date de baptême',
value = 'date de baptême',
property = 'P1636',
},
--{
-- type = 'row', En l'état, afficherait "parrain" y compris pour la marraine. Quoi qu'il en soit, pertinence douteuse.
-- label = 'Parrain',
-- plurallabel = 'Parrains',
-- value = 'parrain',
-- property = 'P1290',
--},
{
type = 'row',
label = 'Nom en religion',
plurallabel = 'Noms en religion',
value = 'nom en religion',
property = 'P1635',
},
{
type = 'row',
label = 'Ordre religieux',
plurallabel = 'Ordres religieux',
value = 'ordre religieux',
wikidata = {property = 'P611', showdate = true, sorttype= 'chronological', precision = 'year', stilltrue = not dead},
},
{
type = 'row',
label = 'Consécrateur',
plurallabel = 'Consécrateurs',
value = 'consécrateur',
property = 'P1598',
},
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Vénérée par'
elseif gender == 'm' then
return 'Vénéré par'
else
return 'Vénéré par'
end
end,
value = 'vénéré par',
property = 'P1049',
},
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Vénérée à'
elseif gender == 'm' then
return 'Vénéré à'
else
return 'Vénéré à'
end
end,
value = 'vénéré à',
-- property = ,
},
{
type = 'row',
label = 'Étape de canonisation',
value = 'étape de canonisation',
wikidata = {
property = 'P411',
labelformat = genderedlabel,
},
},
}}
end
-- Carrière militaire
function p.military()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Arme',
plurallabel = 'Armes',
value = 'arme',
wikidata = {property = 'P241', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year'},
},
{
type = 'row',
label = 'Unité',
plurallabel = 'Unités',
value = 'unité',
wikidata = {property = 'P7779', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year', conjtype = 'new line'},
},
{
type = 'row',
label = 'Grade militaire',
plurallabel = 'Grades militaires',
value = 'grade militaire',
blockers = {'grade'}, -- paramètre théoriquement dédié aux arts martiaux et au go mais souvent rempli avec des grades militaires
wikidata = {
property = 'P410',
showdate = true, sorttype= 'chronological', precision = 'year',
speciallabels = militaryranks,
conjtype ='new line',
labelformat = genderedlabel,
stilltrue = not dead
},
},
{
type = 'row',
label = 'Conflit',
plurallabel = 'Conflits',
value = 'conflit',
wikidata = {property = 'P607', conjtype = 'new line', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year'},
},
}}
end
-- Carrière de torero
function p.torero()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Alternative',
value = 'alternative',
wikidata = function() return wikidata.keyDate('Q2840411', item) end
},
{
type = 'row',
label = "Confirmation d'alternative",
value = 'confirmation alt',
wikidata = function() return wikidata.keyDate('Q23308805', item) end
},
}}
end
-- Sport
function p.sport()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Sport',
plurallabel = 'Sports',
value = {'sport', 'sport pratiqué'},
wikidata = {property = 'P641'},
},
{
type = 'row',
label = 'Équipe',
plurallabel = 'Équipes',
value = 'équipe',
wikidata = {
property = 'P54',
sorttype= 'chronological',
conjtype = 'new line',
statementformat = function(statement)
local str = wikidata.formatStatement(statement, {showdate = true})
local compets = wikidata.getFormattedQualifiers(statement, {'P1350'})
if tonumber(compets) and (tonumber(compets) > 1) then
compets = compets .. ' matchs joués'
elseif compets then
compets = compets .. ' match joué'
end
local points = wikidata.getFormattedQualifiers(statement, {'P1351'})
if tonumber(points) and (tonumber(points) > 1) then
points = points .. ' points marqués'
elseif points then
points = points .. 'point marqué'
end
local qualifiers = linguistic.conj{compets, points}
if qualifiers then
str= str .. ' <small> – ' .. qualifiers .. ' </small>'
end
return str
end
}
},
{
type = 'row',
label = 'Position',
plurallabel = 'Positions',
value = {'position', 'poste', 'spécialité'},
wikidata = {property = 'P413',
labelformat = genderedlabel,
},
},
{
type = 'row',
label = 'Discipline sportive',
plurallabel = 'Disciplines sportives',
value = 'discipline sportive',
wikidata = {property = 'P2416'},
},
{
type = 'row',
label = 'Prise de raquette',
value = 'prise de raquette',
wikidata = {property = 'P741'},
},
{
type = 'row',
label = 'Tire de la',
value = 'tire',
wikidata = {property = 'P423'},
},
{
type = 'row',
label = 'Repêchage par',
plurallabel = 'Repêchages par',
value = 'repêchage',
wikidata = {
property = 'P647',
statementformat = function(statement)
local team = wikidata.formatStatement(statement)
local moment = wikidata.getFormattedQualifiers(statement, {'P793'}) or wikidata.getFormattedQualifiers(statement, {'P585'})
local rank = wikidata.getFormattedQualifiers(statement, {'P1836'})
if rank then
rank = require 'Module:Nombre2texte'.ordinal(rank) .. ' choix'
end
local qualifs = linguistic.conj({moment, rank}, ' – ')
if not qualifs then
return team
end
return team .. ' <small>(' .. qualifs .. ')</small>'
end
},
},
{
type = 'row',
label = 'Capes internationales',
value = 'capes',
wikidata = {property = 'P1129', numval = 1},
},
{
type = 'row',
label = 'Titre aux échecs',
plurallabel = 'Titres aux échecs',
value = 'titre aux échecs',
wikidata = {property = 'P2962', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Classement Elo',
value = 'classement elo',
wikidata = {property = 'P1087', numval = '1', sorttype = 'inverted', showdate = true, precision = 'year', removedupes = true},
},
{
type = 'row',
label = 'Record détenu',
plurallabel = 'Records détenus',
value = 'record détenu',
wikidata = {property = 'P1000', sorttype= 'chronological', showdate = true},
},
{
type = 'row',
label = 'Entraîneur',
plurallabel = 'Entraîneurs',
value = 'entraîneur',
wikidata = {property = 'P286', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Copilote',
plurallabel = 'Copilotes',
value = 'copilote',
wikidata = {property = 'P2095', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Mécène',
plurallabel = 'Mécènes',
value = {'mécène', 'mécènes', 'sponsor', 'sponsors'},
wikidata = {property = 'P859', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
}}
end
-- Contacts
function p.contacts()
return {type = 'multi', rows = {
{
type = 'row',
label = localdata['intitulé maître'] or 'Maître',
plurallabel = 'Maîtres',
value = {'maître', 'maîtres'},
wikidata = {property = 'P1066', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = {
ms = 'Directeur de thèse',
fs = 'Directrice de thèse',
mp = 'Directeurs de thèse',
fp = 'Directrices de thèse',
default = '<abbr class="abbr" title="Direction">Dir.</abbr> de thèse'
},
value = {'directeur de thèse', 'dir. de thèse'},
wikidata = {property = 'P184', sorttype= 'chronological', showdate = true, precision = 'year'},
},
{
type = 'row',
label = 'Agent',
label =
function(localdata, item)
if gender == 'f' then
return 'Représentée par'
elseif gender == 'm' then
return 'Représenté par'
else
return 'Représenté par'
end
end,
value = 'représenté par',
wikidata = {property = 'P1875'},
},
{ -- Partenaire professionnel ou sportif
type = 'row',
label = 'Partenaire',
plurallabel = 'Partenaires',
value = 'partenaire',
wikidata = {property = 'P1327', showdate = true, sorttype= 'chronological'},
},
{
type = 'row',
label = localdata['intitulé élève'] or 'Élève',
plurallabel = 'Élèves',
value = {'élève', 'élèves'},
wikidata = {property = 'P802', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year', numval = '5', expl = ''},
},
{
type = 'row',
label = 'Étudiant de thèse',
plurallabel = 'Étudiants de thèse',
value = 'étudiant de thèse',
wikidata = {property = 'P185', sorttype= 'chronological', showdate = true, precision = 'year', numval = '5', expl = ''},
},
{
type = 'row',
label = 'Personne liée',
plurallabel = 'Personnes liées',
value = 'personne liée',
wikidata = {property = 'P3342', numval = 5, showqualifiers = 'P3831',qualiflink="-",qualiflabelformat="objectgender"}, --objectgender à créer dans Module:Wikidata
},
}}
end
-- Mécénat
function p.patron()
return {
type = 'row',
label = '[[Mécénat|Mécènes]]',
singularlabel = '[[Mécénat|Mécène]]',
plurallabel = '[[Mécénat|Mécènes]]',
value = 'mécènes',
wikidata = {property = 'P859', showdate = true, stilltrue = not dead, sorttype = 'chronological', conjtype = 'comma'},
}
end
-- Musique
function p.music()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Tessiture',
value = 'tessiture',
property = 'P412',
},
{
type = 'row',
label = 'Fach',
value = 'fach',
property = 'P1731',
},
{
type = 'row',
label = 'Instrument',
plurallabel = 'Instruments',
value = 'instrument',
wikidata = {property = 'P1303', sorttype= 'chronological', excludevalues='Q17172850'}, --probablement jugée redondante avec l'occupation "chanteur"
},
{
type = 'row',
label = 'Label',
plurallabel = 'Labels',
value = 'label',
wikidata = {property = 'P264', sorttype= 'chronological', showdate = true, precision = 'year'},
},
}}
end
-- Victimes
function p.victims()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Victimes',
value = 'victimes',
wikidata = {property = 'P1345'},
},
}}
end
-- Condamnations
function p.penalties()
return {type = 'multi', rows = {
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Condamnée pour'
elseif gender == 'm' then
return 'Condamné pour'
else
return 'Condamné pour'
end
end,
value = 'condamné pour',
wikidata = {property = 'P1399', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
{
type = 'row',
label = 'Condamnation',
plurallabel = 'Condamnations',
value = 'condamnation',
wikidata = {property = 'P1596', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
{
type = 'row',
label = 'Lieu de détention',
plurallabel = 'Lieux de détention',
value = 'lieu de détention',
wikidata = {property = 'P2632', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
}}
end
-- Physique
function p.appearance()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Taille',
value = 'taille',
wikidata = {property = 'P2048', targetunit = 'metre', rounding = '2'},
},
{
type = 'row',
label = '[[masse corporelle|Poids]]',
value = {'poids','masse'},
wikidata = {property = 'P2067', targetunit = 'kilogram', conjtype = 'new line', showdate=true, rounding = '1'},
},
{
type = 'row',
label = 'Cheveux',
value = 'cheveux',
wikidata = {property = 'P1884'},
},
{
type = 'row',
label = 'Yeux',
value = 'yeux',
wikidata = {property = 'P1340'},
},
}}
end
-- Famille
function p.gens()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Gens',
value = 'gens',
wikidata = {property = 'P5025'},
},
}}
end
function p.family()
local function showkinship(statement)
local personid = wikidata.getMainId(statement)
local personlabel = wikidata.formatEntity(personid, {
labelformat2 = noble.labelInfobox
})
local persongender = wikidata.getgender(personid)
local kintype = wikidata.getFormattedQualifiers(
statement,
'P1039',
{
labelformat = function(id) return genderedlabel(id, persongender) end,
link = '-'
}
)
if kintype then
return personlabel .. ' ' .. linguistic.inparentheses(kintype)
end
return personlabel
end
return {type = 'multi', rows = {
{
type = 'row',
label = 'Famille',
plurallabels = 'Familles',
value = 'famille',
property = 'P53',
},
{
type = 'row',
label = 'Père',
value = 'père',
wikidata = {
property = 'P22',
showqualifiers = "P1039",
conjtype = ' ou ',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Mère',
value = 'mère',
wikidata = {property = 'P25',
showqualifiers = "P1039",
unknownlabel = 'Inconnue',
conjtype = ' ou ',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Beau-parent',
plurallabel = 'Beaux-parents',
value = {'beau-parent', 'beau-père', 'belle-mère'},
wikidata = {
property = 'P3448',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Fratrie',
value = 'fratrie',
wikidata = {
property = 'P3373',
sorttype = 'age',
conjtype = 'new line',
textformat = 'long',
precision = 'year',
stilltrue = not dead,
statementformat = showkinship,
excludespecial = true,
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = 'Conjoint', -- todo : adapter le libellé en genre ?
plurallabel = 'Conjoints',
value = 'conjoint',
wikidata = {
property = 'P26',
showdate = true,
linktopic = '-',
sorttype = 'chronological',
conjtype = 'new line',
textformat = 'long',
precision = 'year',
stilltrue = not dead,
precision = 'year',
excludespecial = true,
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = localdata['intitulé enfant'] or 'Enfant',-- todo : adapter le libellé en genre ?
plurallabel = 'Enfants',
value = 'enfant',
wikidata = {
property = 'P40',
conjtype = 'new line',
showdate = false,
sorttype = 'age',
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = 'Parentèle',
value = 'parentèle',
wikidata = {
property = 'P1038',
excludespecial = true,
conjtype = 'new line',
statementformat = showkinship
}
},
}}
end
-- Esclavage
function p.slavery()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Statut',
plurallabel = 'Statuts',
value = 'statut',
wikidata = {property = 'P3716',
showdate = true,
labelformat = genderedlabel,
excludevalues = {'Q11573099','Q10076267'}, --membre de la famille royale (doublon avec les propriétés familiales) et propriétaire d'esclaves (pas vraiment un statut)
defaultlinkquery = 'P425'},
},
{
type = 'row',
label = 'Propriétaire',
plurallabels = 'Propriétaires',
value = 'propriétaire',
wikidata = {property = 'P127'},
},
}}
end
-- Œuvres
function p.works(params)
params = params or {}
local title = params.title or 'Œuvres principales'
params.title = nil
local wikidata = {
excludespecial = true,
numval = 5,
property = 'P800',
defaultlink = 'image',
showdate= true,
labelformat = function(id)
local label = wikidata.getLabel(id)
if label then
if wikidata.isInstance('Q386724', id, 6) then --italique pour les instances d' "œuvre" ou ses sous-classes
if wikidata.isInstance('Q14897293', id, 5) or wikidata.isInstance('Q13226383', id, 5) or wikidata.isInstance('Q3622126', id, 5) or wikidata.isInstance('Q12894677', id, 5) then
--sauf les instances d'"entité fictionnelle", "équipement", "système de concepts", "moyen pour une fin" ou leurs sous-classes
return label
else
return '<i>' .. label .. '</i>'
end
else
return label
end
end
end,
}
for i, j in pairs(params) do
wikidata[i] = j
end
return
{type = 'table', title = title, singulartitle = singulartitle, rows =
{
{
type = 'row',
value = 'œuvres principales',
wikidata = wikidata
}
}
}
end
function p.filmography()
local title = 'Films notables'
return
{type = 'row', label = 'Films notables', value = 'films notables', property = 'P1283'}
end
function p.discography()
local title = 'Discographie'
return
{type = 'row', label = 'Discographie', value = 'discographie', property = 'P358'}
end
-- Signature
function p.signature(default)
local nom = localdata.nom or mw.title.getCurrentTitle().text
local alt = 'siyati ' .. nom
if mw.ustring.match( nom, '^[AEÈÉIOUY]' ) then
alt = "siyati" .. nom
end
return {
type = 'images',
imageparameters = {'siyati'},
defaultimage = default,
captionparameter = 'lejand siyati',
defaultcaption = 'Siyati',
uprightparameter = 'upright signature',
defaultupright = 0.75,
defaultalt = alt,
property = 'P109',
numval = 1
}
end
-- Enregistrement vocal
function p.voice()
return {
type = 'images',
style = {['padding-top'] = '25px'},--{['border-width'] = '10px', ['border-style'] = 'solid'},
defaultcaption = 'Enregistrement vocal',
captionparameter = 'légende voix',
imageparameters = 'voix',
defaultsize = '280',
wikidata = general.selectSound('P990'),
numval = 1,
}
end
-- Site web
p.website = general.website
-- Prononciation
p.prononciation = general.prononciation
-- fête du saint
function p.feast()
local title = 'Fête'
return {type = 'row', label = 'Fête', value = 'fête', wikidata = {property = 'P841' , showqualifiers = 'P276'}}
end
-- archivé par
function p.archivesat()
return {type = 'row', label = 'Archives conservées par', value = "archivé par",
wikidata = {
property = 'P485', conjtype = 'new line',
showqualifiers = {'P217','P7328','P585','P7103','P7104'}, qualifprecision = 'year',
qualifformat = function(statement, qualifs, params) -- basé sur wikidata.getFormattedQualifiers dans [[Module:Wikidata]]
local str = ''
if not params then params = {} end
local qualiftable = wikidata.getQualifiers(statement, qualifs)
if not qualiftable then
return nil
end
qualiftable = wikidata.filterClaims(qualiftable, params) or {}
for i, snak in pairs(qualiftable) do
if (snak.datatype == 'time' and snak.property == 'P7104') then -- fin de période couverte
str = str .. '-'
elseif i > 1 then
str = str .. ', '
end
qualiftable[i] = wikidata.formatSnak(snak, params)
if snak.datatype == 'quantity' and tonumber(snak.datavalue.value.amount) > 1 then -- pluriel
qualiftable[i] = qualiftable[i] .. 's'
end
str = str .. qualiftable[i]
end
return str
end,
showsource = true
}
}
end
return p
b5l23hh58pxaawrui9wm2hyst98ixhc
855626
855613
2024-11-12T22:58:38Z
BwaKajou
31668
855626
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- mis en place des tests dans au moins une des pages de test d'un des modèles utilisant la fonction ?
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
-- Functions utilisées par les infobox personnes
local p = {}
local localdata = require 'Module:Infobox/Localdata'
local item = localdata.item
local wikidata = require 'Module:Wikidata'
local general = require 'Module:Infobox/Fonctions'
local datemodule = require 'Module:Date'
local complexdate = require 'Module:Date complexe'
local linguistic = require 'Module:Linguistique'
local militaryranks = require 'Module:Dictionnaire Wikidata/Grades militaires'
local ppath = require 'Module:Wikidata/Chemin'
local noble = require 'Module:Noble'
-- == Accord en genre
local gender = wikidata.getgender(item) -- genre de la personne dont c'est l'infobox
-- Version locale de wikidata.genderedlabel où si le genre n'est pas indiqué, c'est celui de la personne dont c'est l'infobox
local function genderedlabel(id, labelgender)
if not labelgender then labelgender = gender end
return wikidata.genderedlabel(id, labelgender)
end
-- === Gestion des dates
-- Liens thématiques vers les dates
local datelinks = { -- lien vers le domaine d'activité approprié
Q483501 = 'nan atizay plastik', -- artiste
Q1028181 = 'nan atizay plastik', -- peintre
Q1281618 = 'nan atizay plastik', -- sculpteur
Q2309784 = 'nan siklis', -- cycliste
Q16947657 = 'nan atizay plastik', -- lithographe
Q11569986 = 'nan atizay plastik', -- graveur
Q13365770 = 'nan atizay plastik', -- graveur sur cuivre
Q21925567 = 'nan atizay plastik', -- sérigraphe
Q10862983 = 'nan atizay plastik', -- aquafortiste
Q36180 = 'nan literati', -- écrivain
}
local function getdatetopic() -- obtient le lien le plus approprié pour une date en fonction de la profession
local claims = wikidata.stringTable{entity = item, property = 'P106', excludespecial = true, displayformat = 'raw'}
if not claims then
return nil
end
for i, j in pairs(claims) do
if datelinks[j] then
return datelinks[j]
end
end
end
local linktopic = getdatetopic()
local unknowndatelabel = 'date inconnue'
local birthdate = localdata['naissance'] or
localdata['date de naissance'] or
wikidata.formatAndCat{
entity = item,
property = 'P569',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
minprecision = 8, --précision minimale pour être affichée : décennie
}
local dead = wikidata.getClaims{entity = item, property = 'P570'} --utilisé comme booléen qui dit si une personne est morte pour modifier certaines élément d'affichage
local stillvalid
if dead then
stillvalid = "?" -- permet de remplacer des "depuis" par des "à partir de"
end
local deathdate = localdata['décès'] or localdata['date de décès']
local wddeathdate = wikidata.formatAndCat{
entity = item,
property = 'P570',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
minprecision = 8,
}
local disappeardate = localdata['disparition']
local wddisappeardate = wikidata.formatAndCat{
entity = item,
property = 'P746',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
showqualifiers = 'P276',
minprecision = 8,
}
local function format1(event, period, predecessor, together, successor, displayformat)
local mainstr = event
if predecessor then
local s = 'précédé par ' .. predecessor
if gender == 'f' then
s = 'précédée par ' .. predecessor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if together then
local s = 'avec ' .. together
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if successor then
local s = 'suivi par ' .. successor
if gender == 'f' then
s = 'suivie par ' .. successor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
return {type = 'row', label = period or '', value = function() return mainstr end}
end
-----------------
local function format2(event, period, predecessor, together, successor, displayformat)
if (not event) then
return nil
end
local rows = {}
local eventrow = {type = 'row1col', color = 'secondcolor', value = event }
table.insert(rows, eventrow)
if period then
period = '<span style="font-weight:normal">' .. period .. '</span>'
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
table.insert(rows, periodrow)
end
if predecessor then
local prederow = {type = 'row', label = 'Prédécesseur', value = function() return predecessor end}
table.insert(rows, prederow)
end
if together then
local succrow = {type = 'row', label = 'Avec', value = function() return together end}
table.insert(rows, succrow)
end
if successor then
local succrow = {type = 'row', label = 'Successeur', value = function() return successor end}
table.insert(rows, succrow)
end
return {type = 'multi', rows = rows}
end
local function format3(event, period, predecessor, together, successor, displayformat, details)
if details then
details = '<span style="font-weight:normal">' .. details .. '</span>'
event = linguistic.conj({event, details}, 'new line')
end
local mainrow = {type = 'row1col', color = 'secondcolor', value = event }
if period then
period = '<span style="font-weight:normal">' .. period .. '</span>'
end
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
local successionrow = {
style = {['background-color'] = '#F9F9F9', ['padding-bottom'] = '2%'},
type = 'navigator',
inner = true,
previousval = function() return predecessor end,
nextval = function() return successor end,
}
return {type = 'multi', rows = {mainrow, periodrow, successionrow}}
end
local function timeline(localparam, wdconf, timelineformat, title, singtitle, details) -- affiche date : événement (suppose les événements déjà triés)
local rows = {}
local function returnTable()
return {
type = 'table',
title = title,
rows = rows
}
end
-- avec données locales
local val = localdata[localparam]
if val == '-' then
return nil
elseif val then
table.insert(rows, {type = 'row1col', color = 'secondcolor', value = val})
return returnTable()
end
-- avec données wikidata
if not wdconf then
return nil
end
wdconf.entity = wdconf.entity or item
wdconf.sorttype = wdconf.sorttype or 'chronological'
wdconf.labelformat = wdconf.labelformat or genderedlabel
wdconf.linktopic = wdconf.linktopic or '-'
local statements = wikidata.getClaims(wdconf)
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
local displayformats = {
A = format1,
B = format2,
C = format3,
}
local applyformat = displayformats[timelineformat] or displayformats['A']
rows = {}
for i, statement in pairs(statements) do
local event = linguistic.ucfirst(wikidata.formatStatement(statement, wdconf))
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'}, {labelformat2 = noble.labelInfobox})
local together = wikidata.getFormattedQualifiers(statement, {'P1706', ''}, {labelformat2 = noble.labelInfobox})
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'}, {labelformat2 = noble.labelInfobox})
local period = wikidata.getFormattedDate(statement, {linktopic = wdconf.linktopic, stilltrue = stillvalid } ) -- dont pass all wdconf or else qualifiers will show up
local detailstr
if type(details) == 'function' then
detailstr = details(statement)
end
local row = applyformat(event, period, predecessor, together, successor, wdconf, detailstr)
if row then
table.insert(rows, row)
end
end
table.insert(rows, {type = 'external text', value = function() return wikidata.addTrackingCat(wdconf.property) end})
return returnTable()
end
local function dateandplace(thedate, theplace)
if thedate and theplace and mw.ustring.find(thedate, 'inconnu') and mw.ustring.find(theplace, 'inconnu') then
theplace = nil
thedate = mw.ustring.gsub(thedate, linguistic.ucfirst(unknowndatelabel), 'Date et lieu inconnus')
end
return linguistic.conj({thedate, theplace}, 'new line')
end
--Titre
function p.title(icon, style)
local title = general.title(icon, style)
title.value = function()
return localdata['nom'] or localdata['association_nom'] or localdata['nom_think'] or localdata['acronymelaboratoire'] or localdata['titre']
or wikidata.getLabel(localdata.item) and noble.labelInfobox( mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) ) )
or noble.labelInfobox( mw.title.getCurrentTitle().text )
end
return title
end
--Image
function p.mainimage(cat)
-- demande d'illustration que si la personne est née ou morte après 1900, sinon c'est souvent impossible à trouver
local defaultimage = 'Defaut 2.svg'
local age = wikidata.stringTable{property = 'P569,P570', entity = item, displayformat = 'raw', excludespecial = true}
if age and age[1] then
local pattern = '(%W)(%d+)%-(%d+)%-(%d+)'
local era, year = age[1]:match(pattern)
if (era == '-') or (tonumber(year)) < 1900 then
defaultimage = nil
end
end
return general.mainimage({cat = cat or 'Article à illustrer Biographie', altparameter = 'alt'}, defaultimage)
end
-- Noms
function p.othernames()
local names = {
{'P1477', 'Nom de naissance', 'Noms de naissance', 'nom de naissance'},
{'P1448', 'Nom officiel', 'Noms officiels', 'nom officiel'},
{'P1449', 'Surnom', 'Surnoms', 'surnom'},
{'P2001', 'Romanisation révisée', 'Romanisation révisée', 'romanisation révisée'},
{'P1942', 'McCune-Reischauer', 'McCune-Reischauer', 'McCune-Reischauer'},
{'P742', 'Pseudonyme', 'Pseudonymes', 'pseudonyme'},
{'P1782', 'Prénom social', 'Prénoms sociaux', 'prénom social'},
{'P1786', 'Nom posthume', 'Noms posthumes', 'nom posthume'},
{'P1785', 'Nom de temple', 'Noms de temple', 'nom de temple'},
{'P1787', 'Nom de pinceau', 'Noms de pinceau', 'nom de pinceau'},
{'P1813', 'Nom court', 'Noms courts', 'nom court'},
{nil, 'Autres noms', 'Autres noms', 'autres noms'},
}
local nativelangnamerow = { -- un peu particulier, donc à part
type = 'row',
wikidata = function()
local s = wikidata.formatAndCat{entity = item, property = 'P1559', showqualifiers = 'P1721', conjtype = 'or'}
if (not s) then
return nil
end
-- regarde si le nom de la valeur ressemble au libellé (en tenant compte de la pollution des marqueures de langue
local label = mw.ustring.lower(wikidata.getLabel(item) or '')
local useless
if mw.ustring.find(mw.ustring.lower(s), mw.ustring.lower(label), 1, true) then
useless = true
end
if wikidata.formatStatements{entity = item, property = 'P1559'} == wikidata.formatStatements{entity = item, property = 'P1477'} then
useless = true --inutile si duplique le "nom de naissance"
end
if useless then
return nil
end
return s
end,
label = 'Nom dans la langue maternelle',
plurallabel = 'Noms dans la langue maternelle',
value = 'nom dans la langue maternelle',
}
local rows = {type = 'multi', rows = {nativelangnamerow}}
for i, j in pairs(names) do
local query
if j[1] and not localdata['autres noms'] then -- lorsqu'il y a un paramètre "autres noms", Wikidata est désactivée pour éviter risques de doublon
query = {property = j[1], showqualifiers = {'P1721'}, conjtype = 'comma'}
end
table.insert(rows.rows, {type = 'row', value = j[4], wikidata = query, label = j[2], plurallabel = j[3]})
end
return rows
end
-- NAISSANCE ET MORT
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième
return {
type = 'row',
label = 'Naissance',
value =
function()
local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = birthdate or '', [3] = deathdate or wddeathdate or disappeardate or wddisappeardate or '', qualificatif = linktopic}}
local theplace = localdata['lieu de naissance'] or
wikidata.formatAndCat({entity =item, -- affichage du nom du lieu de naissance en vigueur à la date de naissance
property= 'P19',
rank = 'best',
labelformat = function(val) return wikidata.getLabel(val) end,
conjtype= ' ou ',
defaultlinkquery = {property = {'P361'}}, -- liens par défaut : "partie de",
unknownlabel = "lieu inconnu",
showqualifiers = {'P131', 'P17'},
qualifconjtype = 'comma'
}
)
return dateandplace(thedate, theplace)
end
}
end
function p.death() -- même fonctionnement que la fonction p.birth
-- date de disparition
local ldisappeardate = disappeardate
if (not ldisappeardate ) and (not deathdate) then -- récupérée de Wikidata seulement si la date de décès n'est pas fournie en locale
ldisappeardate = wddisappeardate
end
if ldisappeardate and birthdate then
ldisappeardate = datemodule.dateInfobox{args = {[1] = 'événement', [2] = birthdate or '', [3] = ldisappeardate or '', qualificatif = linktopic, unknownlabel = 'date inconnue'}}
end
-- date de décès
local ddate = deathdate --déclarée pour l'ensemble du module
if (not ddate) and (not ldisappeardate) then
deathdate = wddeathdate -- récupérée de Wikidata seulement si la date de disparition n'est pas fournie en locale
end
local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = birthdate or '', [3] = deathdate or '', qualificatif = linktopic, unknownlabel = 'date inconnue'}}
local theplace = localdata['lieu de décès'] or
wikidata.formatAndCat{entity =item,
property= 'P20',
rank = 'best',
-- affichage du nom du lieu de décès en vigueur à la date de décès
labelformat = function(val) return wikidata.getLabel(val) end,
conjtype= ' ou ',
defaultlinkquery = {property = {'P361'}}, -- liens par défaut : "partie de",
unknownlabel = "lieu inconnu",
showqualifiers = {'P131', 'P17'},
qualifconjtype = 'comma'
}
local val = dateandplace(thedate, theplace)
return
{type = 'multi', rows = {
{ -- disparition
type = 'row',
label = 'Disparition',
value = function() return ldisappeardate end
},
{ -- décès
type = 'row',
label = 'Décès',
value = function() return val end,
}
}}
end
function p.floruit()
return {
type = 'row',
label = "Période d'activité",
value = "période d'activité",
wikidata = function()
local startDate = wikidata.formatAndCat{entity = item, property = 'P2031', conjtype = 'or', sorttype = 'chronological', linkback = '-'}
local endDate = wikidata.formatAndCat{entity = item, property = 'P2032', conjtype = 'or', sorttype = 'chronological'}
if not (startDate or endDate) then
return wikidata.formatAndCat{entity = item, property = 'P1317', conjtype = 'or', sorttype = 'chronological'}
end
if startDate and not endDate then
startDate = wikidata.formatAndCat{entity = item, property = 'P2031', conjtype = 'or', sorttype = 'chronological'}
end
return complexdate.daterange(startDate, endDate, {precision = 11, stilltrue = stillvalid})
end
}
end
function p.placeofburial()
return
{type = 'row', label = 'Sépulture', value = 'sépulture', wikidata = {property = "P119", showdate = true, novaluelabel = 'aucune'}}
end
function table.slice(tbl, first, last, step)
local sliced = {}
for i = first or 1, last or #tbl, step or 1 do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
-- function that creates a filter function
-- if the main country "base_country_item" is (replaced by)+
-- the subsequent statement main value that the function will receive as a parameter
-- then the created function will return true for this statement to be filtered out
local function filter_replaces_builder(base_country_item)
-- P1365 = remplace
-- P1366 = remplacé par
local replaced_query = {property = 'P1365'}
return function(may_be_replacing_stmt)
local may_be_replacing_item = wikidata.getMainId(may_be_replacing_stmt)
local replaces = wikidata.inTransitiveVals(may_be_replacing_item, base_country_item, replaced_query)
return not(wikidata.inTransitiveVals(may_be_replacing_item, base_country_item, replaced_query))
end
end
-- filter parameterized by each of the values of the claims, in the order
-- « filter_function_builder » will be called by all the values (remaining after filtering) in « claims »
-- to filter the rest of the claims, starting from the first one in the list.
local function iterated_filter(claims, filter_function_builder)
-- the first country in the list, if any of the following value replaces this one
-- we remove them. So we split the list
local first_country_claim = claims[1]
local to_test = table.slice(claims, 2, #claims)
if #to_test > 0 then
-- building the filter function with the first country as base value
-- (a closure)
local condition = filter_function_builder(wikidata.getMainId(first_country_claim))
-- keeping the number of values before the filter
local nb_before = #to_test
to_test = wikidata.filterClaims(to_test, {condition = condition}) or {}
local nb_after = #to_test
-- if some country was filtered out, we remove the dates of the main statement to avoid showing incomplete dates
if (nb_before ~= nb_after and first_country_claim.qualifiers) then
first_country_claim.qualifiers["P580"] = nil
first_country_claim.qualifiers["P582"] = nil
end
-- if there still exists candidate countries, filter them recursively
if #to_test > 0 then
to_test = iterated_filter(to_test, filter_function_builder)
end
-- reconstruct the list of statement by readding our first country to the filtered list
to_test = to_test or {}
table.insert(to_test, 1, first_country_claim)
return to_test
end
-- if there were nothing to filter, just return the first statement
return {first_country_claim}
end
function p.nationality()
local cmp = wikidata.compare
-- à améliorer étant donnée les mœurs Wikidata comme nationalité : Empire allemand (1901-1918) République de Weimar (1918-1933)
local function wdDate()
local nation = require 'Module:Country data'.nationality
-- désactivation si date de naissance avant l'Ère contemporaine : trop d'imprécisions et d'anachronismes
local mindate = '1789'
local birthdate = wikidata.formatStatements{entity = item, property = 'P569', displayformat = 'raw', numval = 1}
local deathdate = wikidata.formatStatements{entity = item, property = 'P570', displayformat = 'raw', numval = 1}
if ((not birthdate) or complexdate.before(mindate, birthdate)) and ((not deathdate) or complexdate.before(mindate, deathdate)) then
return nil
end
-- preprocessing the "P27" statements
-- if there is statements about a country that changed its regime, like France before and after the french Revolution
-- then we just want to show "France" and not "France and France" because there is two statement (or worse)
-- so we take advantage of the fact that the French Kingdom was "replaced by" French Republic (P1366)
-- to detect and filter out such «redundant» values
-- (we also remove the begin/end dates of statements in such cases to avoid wrong dating)
local statements = wikidata.getClaims{entity = item, property = 'P27', rank='best', excludespecial=true} or {}
-- sort nationality statements by statement dates or regime creation date if statement is not dated
local sort_by_statement_or_regime = wikidata.chrono_key_sort{
sort_key="RegimeKey", -- use another key than « chronosort »
snak_key_get_function = ppath.snak_key_by_paths{">P580","P571"}, --[[ either by « begin date » qualifier or « inception » of the nationality
if the statement is not dated ]]
key_compare_function = cmp.rev(function(v1, v2) return v1 < v2 end) -- sort in reverse chronological order to remove all values the first nationalities replaces
}
-- ordering statement by dates so that we can test only "A replaces B" and not "B replaces A" because A is an older regime than B
statements = sort_by_statement_or_regime(statements)
-- actual statement filtering
statements = iterated_filter(statements, filter_replaces_builder)
-- re-sorting in chronological ordering
statements = wikidata.sortClaims(statements, cmp.chronoCompare)
return {
property = 'P27',
claims = statements, -- our filtered statement as claims instead of the regular query
showdate = true,
entity = item,
conjtype = 'new line',
removedupes = true,
linktopic = '-',
sorttype = 'chronological',
ucfirst = '-',
stilltrue = not dead,
displayformat =
function(snak)
-- local g = gender -- genre de la personne, pour affichage du gentilé
-- if g == '?' then -- si inconnu, au masculin
-- g = 'm'
-- end
local val, success = nation(wikidata.getId(snak), 'f') -- au féminin pour accorder au mot nationalité
if not success then
val = wikidata.formatSnak(snak)
end
return val
end
}
end
return {
type = 'row',
label = 'Nationalité',
plurallabel = 'Nationalités',
value = 'nationalité',
wikidata = wdDate() -- wdDate() retourne une table
}
end
function p.nativelanguage()
return
{type = 'row', label = 'Langue maternelle', value = 'langue maternelle', property = 'P103'}
end
function p.writinglanguage()
return
{type = 'row', label = "Langue d\'écriture", value = 'langue d\'écriture', plurallabel = "Langues d\'écriture" , wikidata = {property = 'P6886' , expl = true}}
end
-- Domiciles
function p.places()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Dème',
plurallabel = 'Dèmes',
value = 'dème',
wikidata = {property = 'P2462', showdate = true, sorttype= 'chronological', stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Domicile',
plurallabel = 'Domiciles',
value = 'domicile',
wikidata = {property = 'P551', showdate = true, sorttype= 'chronological', stilltrue = not dead, precision = 'year'},
},
}}
end
-- parcours professionel
function p.education()
local query = {sorttype= 'chronological', property = 'P69', showdate = true, stilltrue = '?', showqualifiers = 'P512', conjtype = 'new line', linktopic = '-'}
return {
type = 'row',
value = {'éducation', 'formation'},
wikidata = query,
label = 'Formation',
}
end
function p.occupation()
local speciallabels = {
f = {
['Q33999'] = '[[Acteur|actrice]]',
['Q10798782'] = '[[Acteur|actrice]]',
['Q10800557'] = '[[Acteur|actrice]]',
['Q2405480'] = '[[Acteur|actrice]]',
['Q2259451'] = '[[Acteur|actrice]]',
['Q948329'] = '[[Acteur|actrice]]'
},
m = {
['Q33999'] = '[[acteur]]',
['Q10798782'] = '[[acteur]]',
['Q10800557'] = '[[acteur]]',
['Q10798782'] = '[[acteur]]',
['Q2405480'] = '[[acteur]]',
['Q2259451'] = '[[acteur]]',
['Q948329'] = '[[acteur]]'
}
}
return {
type = 'row',
value = {'activité', 'activités'},
wikidata = {
property = 'P106',
defaultlink = '-',
defaultlinkquery = {property = {'P425','P1056'}},
labelformat = genderedlabel,
speciallabels = speciallabels[gender] or speciallabels['m'],
removedupes = true,
showdate = true,
sorttype = 'chronological',
stilltrue = not dead,
excludevalues = { -- les occupations qui ne méritent pas d'être affichées
'Q482980', -- auteur
'Q15980158', --"auteur de non-fiction"
'Q12144794', --prosateur
'Q18814623', -- autobiographe
'Q1209498', -- juriste-poète
'Q1097498', -- "dirigeant"
'Q2478141', -- aristocrate
'Q116', -- monarque
'Q115088092', -- participant à un forum international
}
},
label = 'Activité',
plurallabel = 'Activités'
}
end
function p.haswrittenfor()
local valueStyle = {}
valueStyle['font-style'] = 'italic'
return
{type = 'row', label =
function(localdata, item)
if gender == 'f' then
return 'Rédactrice à'
else
return 'Rédacteur à'
end
end, value = 'rédacteur à', wikidata = {property = "P6872", showdate = true}, valueStyle = valueStyle}
end
function p.employer()
return {
type = 'row',
value = 'employeur',
wikidata = {property = 'P108', showdate = true, linktopic = '-', sorttype= 'inverted', stilltrue = not dead, conjtype = 'new line'},
label = function() return localdata['intitulé employeur'] or 'A travaillé pour' end,
}
end
function p.victories()
local title, singtitle = 'Victoires', 'Victoire'
local localparam = 'victoire'
local wdconf = {property = 'P2522'}
local displayformat = 'B'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.officialposition()
local title, singtitle = 'Fonctions', 'Fonction'
local localparam = 'fonction'
local wdconf = {
property = 'P39',
rank = 'valid',
sorttype = 'inverted',
defaultlinkquery = {property = {'P2354', 'P2389', 'P453', 'P361', 'P108', 'P276', 'P1001'}}, -- liens par défaut : liste, puise organisme dirigé, "membre de", "partie de", employeur, ressort territorial
}
-- sur une ligne séparée : gouvernement, législature, juridiction, "de", circonsription, diocèse, affiliation, assemblée, parti, employeur
local details = function(statement) return wikidata.getFormattedQualifiers(statement, {'P5054', 'P2937', 'P1001', 'P642', 'P2389', 'P768', 'P708', 'P1416', 'P194', 'P108', 'P937' , 'P1268'}, {conjtype = 'new line'}) end
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat, title, singtitle, details)
end
function p.specialrole()
local localparam = 'statut notable'
local wdconf = {
property = 'P2868',
rank = 'valid',
sorttype = 'inverted',
targetsuperclass = 'Q254917',
defaultlinkquery = {property = {'P2354'}}, -- lien par défaut : liste d'éléments
}
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat)
end
function p.nobilitytitle()
local title, singtitle = 'Titres de noblesse', 'Titre de noblesse'
local localparam = 'titre de noblesse'
local wdconf = {
property = 'P97',
entity = item, rank = 'valid',
showqualifiers = {'P642'},
defaultlinkquery = {property = {'P2354', 'P361'}}, -- liens par défaut : liste, puise organisme dirigé, "membre de" et "partie de"
}
local displayformat = 'B'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.honorifictitle()
local title, singtitle = 'Titres honorifiques', 'Titre honorifique'
local localparam = 'titre honorifique'
local wdconf = {property = 'P511', entity = item, rank = 'valid'}
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.tombe()
return {
type = 'images',
imageparameters = {'tombe'},
defaultimages = nil,
defaultupright = 1,
uprightparameter = 'upright tombe',
sizeparameter = 'taille tombe', -- obsolète
captionparameter = 'légende tombe',
defaultcaption = 'Vue de la sépulture.',
property = 'P1442',
numval = 1,
}
end
function p.plaque()
return {
type = 'images',
imageparameters = {'plaque'},
defaultimages = nil,
defaultupright = 1,
uprightparameter = 'upright plaque',
sizeparameter = 'taille plaque', -- obsolète
captionparameter = 'légende plaque',
defaultcaption = 'Plaque commémorative',
property = 'P1801',
numval = 1,
}
end
function p.blason()
return {
type = 'images',
imageparameters = {'blason'},
defaultimages = nil,
defaultupright = 0.5,
uprightparameter = 'upright blason',
sizeparameter = 'taille blason', -- obsolète
captionparameter = 'légende blason',
defaultcaption = 'Blason',
property = 'P94',
numval = 1,
}
end
function p.sceau()
return {
type = 'images',
imageparameters = {'sceau'},
defaultimages = nil,
defaultupright = 0.7,
uprightparameter = 'upright sceau',
sizeparameter = 'taille sceau', -- obsolète
captionparameter = 'légende sceau',
defaultcaption = 'Sceau',
property = 'P158',
numval = 1,
}
end
function p.monogram()
return {
type = 'images',
imageparameters = {'monogramme'},
defaultimages = nil,
defaultsize = '100px',
sizeparameter = 'taille monogramme',
captionparameter = 'légende monogramme',
defaultcaption = 'Monogramme',
property = 'P1543',
numval = 1,
}
end
function p.flag()
return {
type = 'images',
imageparameters = {'drapeau'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille drapeau',
captionparameter = 'légende drapeau',
defaultcaption = 'Drapeau',
property = 'P41',
numval = 1,
}
end
function p.logo()
return {
type = 'images',
imageparameters = {'logo'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille logo',
captionparameter = 'légende logo',
defaultcaption = 'Marque ou logotype',
property = 'P154',
numval = 1,
}
end
function p.politicalparty()
return {
type = 'row',
value = 'parti politique',
label = 'Parti politique',
plurallabel = 'Partis politiques',
wikidata = { property = 'P102', sorttype= 'chronological', showdate = true, conjtype = 'new line', excludespecial = true,
labelformat = function(id) if id == 'Q327591' and gender == 'f' then return 'indépendante' end end}
}
end
function p.memberof()
return {type = 'multi', rows = {
{
type = 'row',
value = 'ordre de chevalerie',
label = 'Ordre de chevalerie',
plurallabel = 'Ordres de chevalerie',
wikidata = {property = 'P550', sorttype= 'chronological', showdate = true, stilltrue = not dead},
},
{
type = 'row',
label = 'Membre de',
value = 'membre de',
wikidata = {property = 'P463', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year', linktopic = '-', textformat = 'minimum', conjtype = 'new line'},
},
}}
end
local masclabelitems = {a='Q10855271', b='Q10855195', c='Q10855212', d='Q10855216', e='Q13422138', f='Q13422140', g='Q13422141', h='Q13452524', i='Q13452528', j='Q13452531', k='Q14637182', l='Q14637176', m='Q14637188',}
-- grades de la légion d'Honneur, de l'ordre national du Mérite, de l'ordre des Palmes académiques et de l'ordre des Arts et Lettres en France, de genre grammatical masculin y compris pour les femmes
function p.awards()
local function awardsList()
local majorawards = require 'Module:Dictionnaire Wikidata/Distinctions'
local query = {
entity = item,
property= 'P166',
sorttype= 'chronological',
grouped = true,
showqualifiers = 'P642',
showdate= true,
precision = 'year',
conjtype = 'new line',
textformat = 'minimum',
linktopic = '-',
defaultlinkquery = {property = {'P2354', 'P361' , 'P1027'}},
excludevalues = majorawards.exclude, -- membre de la Royal Society, redondance avec le champ « membre de » (P463)
speciallabels = majorawards,
labelformat = function(id)
masclabel = false
for _, item in pairs(masclabelitems) do
if id == item then masclabel = true end
end
if masclabel then
return genderedlabel(id, 'm')
else
return genderedlabel(id)
end
end,
}
local claims = wikidata.getClaims(query)
if (not claims) then
return nil
end
local str = wikidata.formatAndCat(query)
if #claims < 4 then
return str, #claims
end
--si trop de valeurs, n'afficher que les importantes de [[Module:Dictionnaire Wikidata/Distinctions]], et mettre les autrs dans un menu pliant
--- récupération des importantes
local majorStr
local targetvalues = {}
for i, j in pairs(majorawards) do
table.insert(targetvalues, i)
end
query.targetvalue = targetvalues
query.value, query.claims, query.valuetable = nil, nil, nil -- apparemment sinon ce n'est pas le cas, pourquoi ? BUG IMPORTANT
majorStr = wikidata.formatAndCat(query)
--- repliage des autres
local message = "'''Liste détaillée'''"
local allAwardsTable = mw.html.create('div')
:addClass('toccolours mw-collapsible mw-collapsed')
:wikitext(message)
:css{border = 'none'}
:tag('div')
:addClass('mw-collapsible-content')
:css{['line-height'] = '150%'} -- sinon c'est vraiment serré
:wikitext( str)
:done()
:allDone()
return linguistic.conj({majorStr, tostring(allAwardsTable)}, '<br>'), #claims
end
return {
type = 'row',
value = {'prix', 'récompenses', 'distinction', 'distinctions'},
label = 'Distinctions',
singularlabel = 'Distinction',
wikidata = function() return awardsList() end
}
end
-- Influences
function p.influencedby()
return {
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Influencée par'
else
return 'Influencé par'
end
end,
value = 'influencé par',
wikidata = {property = 'P737'},
}
end
function p.influenced()
return {
type = 'row',
label = 'A influencé',
value = {'a influencé', 'influence de'},
}
end
-- Appartenances
function p.movement()
return
{
type = 'row',
label = 'Mouvement',
value = 'mouvement',
plurallabel = 'Mouvements',
wikidata = {property = 'P135', sorttype= 'chronological', showdate = true, precision = 'year'},
}
end
-- Religion
function p.religion()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Religion',
value = 'religion',
},
{
type = 'row',
label = 'Date de baptême',
value = 'date de baptême',
property = 'P1636',
},
--{
-- type = 'row', En l'état, afficherait "parrain" y compris pour la marraine. Quoi qu'il en soit, pertinence douteuse.
-- label = 'Parrain',
-- plurallabel = 'Parrains',
-- value = 'parrain',
-- property = 'P1290',
--},
{
type = 'row',
label = 'Nom en religion',
plurallabel = 'Noms en religion',
value = 'nom en religion',
property = 'P1635',
},
{
type = 'row',
label = 'Ordre religieux',
plurallabel = 'Ordres religieux',
value = 'ordre religieux',
wikidata = {property = 'P611', showdate = true, sorttype= 'chronological', precision = 'year', stilltrue = not dead},
},
{
type = 'row',
label = 'Consécrateur',
plurallabel = 'Consécrateurs',
value = 'consécrateur',
property = 'P1598',
},
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Vénérée par'
elseif gender == 'm' then
return 'Vénéré par'
else
return 'Vénéré par'
end
end,
value = 'vénéré par',
property = 'P1049',
},
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Vénérée à'
elseif gender == 'm' then
return 'Vénéré à'
else
return 'Vénéré à'
end
end,
value = 'vénéré à',
-- property = ,
},
{
type = 'row',
label = 'Étape de canonisation',
value = 'étape de canonisation',
wikidata = {
property = 'P411',
labelformat = genderedlabel,
},
},
}}
end
-- Carrière militaire
function p.military()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Arme',
plurallabel = 'Armes',
value = 'arme',
wikidata = {property = 'P241', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year'},
},
{
type = 'row',
label = 'Unité',
plurallabel = 'Unités',
value = 'unité',
wikidata = {property = 'P7779', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year', conjtype = 'new line'},
},
{
type = 'row',
label = 'Grade militaire',
plurallabel = 'Grades militaires',
value = 'grade militaire',
blockers = {'grade'}, -- paramètre théoriquement dédié aux arts martiaux et au go mais souvent rempli avec des grades militaires
wikidata = {
property = 'P410',
showdate = true, sorttype= 'chronological', precision = 'year',
speciallabels = militaryranks,
conjtype ='new line',
labelformat = genderedlabel,
stilltrue = not dead
},
},
{
type = 'row',
label = 'Conflit',
plurallabel = 'Conflits',
value = 'conflit',
wikidata = {property = 'P607', conjtype = 'new line', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year'},
},
}}
end
-- Carrière de torero
function p.torero()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Alternative',
value = 'alternative',
wikidata = function() return wikidata.keyDate('Q2840411', item) end
},
{
type = 'row',
label = "Confirmation d'alternative",
value = 'confirmation alt',
wikidata = function() return wikidata.keyDate('Q23308805', item) end
},
}}
end
-- Sport
function p.sport()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Sport',
plurallabel = 'Sports',
value = {'sport', 'sport pratiqué'},
wikidata = {property = 'P641'},
},
{
type = 'row',
label = 'Équipe',
plurallabel = 'Équipes',
value = 'équipe',
wikidata = {
property = 'P54',
sorttype= 'chronological',
conjtype = 'new line',
statementformat = function(statement)
local str = wikidata.formatStatement(statement, {showdate = true})
local compets = wikidata.getFormattedQualifiers(statement, {'P1350'})
if tonumber(compets) and (tonumber(compets) > 1) then
compets = compets .. ' matchs joués'
elseif compets then
compets = compets .. ' match joué'
end
local points = wikidata.getFormattedQualifiers(statement, {'P1351'})
if tonumber(points) and (tonumber(points) > 1) then
points = points .. ' points marqués'
elseif points then
points = points .. 'point marqué'
end
local qualifiers = linguistic.conj{compets, points}
if qualifiers then
str= str .. ' <small> – ' .. qualifiers .. ' </small>'
end
return str
end
}
},
{
type = 'row',
label = 'Position',
plurallabel = 'Positions',
value = {'position', 'poste', 'spécialité'},
wikidata = {property = 'P413',
labelformat = genderedlabel,
},
},
{
type = 'row',
label = 'Discipline sportive',
plurallabel = 'Disciplines sportives',
value = 'discipline sportive',
wikidata = {property = 'P2416'},
},
{
type = 'row',
label = 'Prise de raquette',
value = 'prise de raquette',
wikidata = {property = 'P741'},
},
{
type = 'row',
label = 'Tire de la',
value = 'tire',
wikidata = {property = 'P423'},
},
{
type = 'row',
label = 'Repêchage par',
plurallabel = 'Repêchages par',
value = 'repêchage',
wikidata = {
property = 'P647',
statementformat = function(statement)
local team = wikidata.formatStatement(statement)
local moment = wikidata.getFormattedQualifiers(statement, {'P793'}) or wikidata.getFormattedQualifiers(statement, {'P585'})
local rank = wikidata.getFormattedQualifiers(statement, {'P1836'})
if rank then
rank = require 'Module:Nombre2texte'.ordinal(rank) .. ' choix'
end
local qualifs = linguistic.conj({moment, rank}, ' – ')
if not qualifs then
return team
end
return team .. ' <small>(' .. qualifs .. ')</small>'
end
},
},
{
type = 'row',
label = 'Capes internationales',
value = 'capes',
wikidata = {property = 'P1129', numval = 1},
},
{
type = 'row',
label = 'Titre aux échecs',
plurallabel = 'Titres aux échecs',
value = 'titre aux échecs',
wikidata = {property = 'P2962', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Classement Elo',
value = 'classement elo',
wikidata = {property = 'P1087', numval = '1', sorttype = 'inverted', showdate = true, precision = 'year', removedupes = true},
},
{
type = 'row',
label = 'Record détenu',
plurallabel = 'Records détenus',
value = 'record détenu',
wikidata = {property = 'P1000', sorttype= 'chronological', showdate = true},
},
{
type = 'row',
label = 'Entraîneur',
plurallabel = 'Entraîneurs',
value = 'entraîneur',
wikidata = {property = 'P286', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Copilote',
plurallabel = 'Copilotes',
value = 'copilote',
wikidata = {property = 'P2095', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Mécène',
plurallabel = 'Mécènes',
value = {'mécène', 'mécènes', 'sponsor', 'sponsors'},
wikidata = {property = 'P859', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
}}
end
-- Contacts
function p.contacts()
return {type = 'multi', rows = {
{
type = 'row',
label = localdata['intitulé maître'] or 'Maître',
plurallabel = 'Maîtres',
value = {'maître', 'maîtres'},
wikidata = {property = 'P1066', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = {
ms = 'Directeur de thèse',
fs = 'Directrice de thèse',
mp = 'Directeurs de thèse',
fp = 'Directrices de thèse',
default = '<abbr class="abbr" title="Direction">Dir.</abbr> de thèse'
},
value = {'directeur de thèse', 'dir. de thèse'},
wikidata = {property = 'P184', sorttype= 'chronological', showdate = true, precision = 'year'},
},
{
type = 'row',
label = 'Agent',
label =
function(localdata, item)
if gender == 'f' then
return 'Représentée par'
elseif gender == 'm' then
return 'Représenté par'
else
return 'Représenté par'
end
end,
value = 'représenté par',
wikidata = {property = 'P1875'},
},
{ -- Partenaire professionnel ou sportif
type = 'row',
label = 'Partenaire',
plurallabel = 'Partenaires',
value = 'partenaire',
wikidata = {property = 'P1327', showdate = true, sorttype= 'chronological'},
},
{
type = 'row',
label = localdata['intitulé élève'] or 'Élève',
plurallabel = 'Élèves',
value = {'élève', 'élèves'},
wikidata = {property = 'P802', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year', numval = '5', expl = ''},
},
{
type = 'row',
label = 'Étudiant de thèse',
plurallabel = 'Étudiants de thèse',
value = 'étudiant de thèse',
wikidata = {property = 'P185', sorttype= 'chronological', showdate = true, precision = 'year', numval = '5', expl = ''},
},
{
type = 'row',
label = 'Personne liée',
plurallabel = 'Personnes liées',
value = 'personne liée',
wikidata = {property = 'P3342', numval = 5, showqualifiers = 'P3831',qualiflink="-",qualiflabelformat="objectgender"}, --objectgender à créer dans Module:Wikidata
},
}}
end
-- Mécénat
function p.patron()
return {
type = 'row',
label = '[[Mécénat|Mécènes]]',
singularlabel = '[[Mécénat|Mécène]]',
plurallabel = '[[Mécénat|Mécènes]]',
value = 'mécènes',
wikidata = {property = 'P859', showdate = true, stilltrue = not dead, sorttype = 'chronological', conjtype = 'comma'},
}
end
-- Musique
function p.music()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Tessiture',
value = 'tessiture',
property = 'P412',
},
{
type = 'row',
label = 'Fach',
value = 'fach',
property = 'P1731',
},
{
type = 'row',
label = 'Instrument',
plurallabel = 'Instruments',
value = 'instrument',
wikidata = {property = 'P1303', sorttype= 'chronological', excludevalues='Q17172850'}, --probablement jugée redondante avec l'occupation "chanteur"
},
{
type = 'row',
label = 'Label',
plurallabel = 'Labels',
value = 'label',
wikidata = {property = 'P264', sorttype= 'chronological', showdate = true, precision = 'year'},
},
}}
end
-- Victimes
function p.victims()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Victimes',
value = 'victimes',
wikidata = {property = 'P1345'},
},
}}
end
-- Condamnations
function p.penalties()
return {type = 'multi', rows = {
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Condamnée pour'
elseif gender == 'm' then
return 'Condamné pour'
else
return 'Condamné pour'
end
end,
value = 'condamné pour',
wikidata = {property = 'P1399', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
{
type = 'row',
label = 'Condamnation',
plurallabel = 'Condamnations',
value = 'condamnation',
wikidata = {property = 'P1596', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
{
type = 'row',
label = 'Lieu de détention',
plurallabel = 'Lieux de détention',
value = 'lieu de détention',
wikidata = {property = 'P2632', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
}}
end
-- Physique
function p.appearance()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Taille',
value = 'taille',
wikidata = {property = 'P2048', targetunit = 'metre', rounding = '2'},
},
{
type = 'row',
label = '[[masse corporelle|Poids]]',
value = {'poids','masse'},
wikidata = {property = 'P2067', targetunit = 'kilogram', conjtype = 'new line', showdate=true, rounding = '1'},
},
{
type = 'row',
label = 'Cheveux',
value = 'cheveux',
wikidata = {property = 'P1884'},
},
{
type = 'row',
label = 'Yeux',
value = 'yeux',
wikidata = {property = 'P1340'},
},
}}
end
-- Famille
function p.gens()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Gens',
value = 'gens',
wikidata = {property = 'P5025'},
},
}}
end
function p.family()
local function showkinship(statement)
local personid = wikidata.getMainId(statement)
local personlabel = wikidata.formatEntity(personid, {
labelformat2 = noble.labelInfobox
})
local persongender = wikidata.getgender(personid)
local kintype = wikidata.getFormattedQualifiers(
statement,
'P1039',
{
labelformat = function(id) return genderedlabel(id, persongender) end,
link = '-'
}
)
if kintype then
return personlabel .. ' ' .. linguistic.inparentheses(kintype)
end
return personlabel
end
return {type = 'multi', rows = {
{
type = 'row',
label = 'Famille',
plurallabels = 'Familles',
value = 'famille',
property = 'P53',
},
{
type = 'row',
label = 'Père',
value = 'père',
wikidata = {
property = 'P22',
showqualifiers = "P1039",
conjtype = ' ou ',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Mère',
value = 'mère',
wikidata = {property = 'P25',
showqualifiers = "P1039",
unknownlabel = 'Inconnue',
conjtype = ' ou ',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Beau-parent',
plurallabel = 'Beaux-parents',
value = {'beau-parent', 'beau-père', 'belle-mère'},
wikidata = {
property = 'P3448',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Fratrie',
value = 'fratrie',
wikidata = {
property = 'P3373',
sorttype = 'age',
conjtype = 'new line',
textformat = 'long',
precision = 'year',
stilltrue = not dead,
statementformat = showkinship,
excludespecial = true,
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = 'Conjoint', -- todo : adapter le libellé en genre ?
plurallabel = 'Conjoints',
value = 'conjoint',
wikidata = {
property = 'P26',
showdate = true,
linktopic = '-',
sorttype = 'chronological',
conjtype = 'new line',
textformat = 'long',
precision = 'year',
stilltrue = not dead,
precision = 'year',
excludespecial = true,
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = localdata['intitulé enfant'] or 'Enfant',-- todo : adapter le libellé en genre ?
plurallabel = 'Enfants',
value = 'enfant',
wikidata = {
property = 'P40',
conjtype = 'new line',
showdate = false,
sorttype = 'age',
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = 'Parentèle',
value = 'parentèle',
wikidata = {
property = 'P1038',
excludespecial = true,
conjtype = 'new line',
statementformat = showkinship
}
},
}}
end
-- Esclavage
function p.slavery()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Statut',
plurallabel = 'Statuts',
value = 'statut',
wikidata = {property = 'P3716',
showdate = true,
labelformat = genderedlabel,
excludevalues = {'Q11573099','Q10076267'}, --membre de la famille royale (doublon avec les propriétés familiales) et propriétaire d'esclaves (pas vraiment un statut)
defaultlinkquery = 'P425'},
},
{
type = 'row',
label = 'Propriétaire',
plurallabels = 'Propriétaires',
value = 'propriétaire',
wikidata = {property = 'P127'},
},
}}
end
-- Œuvres
function p.works(params)
params = params or {}
local title = params.title or 'Œuvres principales'
params.title = nil
local wikidata = {
excludespecial = true,
numval = 5,
property = 'P800',
defaultlink = 'image',
showdate= true,
labelformat = function(id)
local label = wikidata.getLabel(id)
if label then
if wikidata.isInstance('Q386724', id, 6) then --italique pour les instances d' "œuvre" ou ses sous-classes
if wikidata.isInstance('Q14897293', id, 5) or wikidata.isInstance('Q13226383', id, 5) or wikidata.isInstance('Q3622126', id, 5) or wikidata.isInstance('Q12894677', id, 5) then
--sauf les instances d'"entité fictionnelle", "équipement", "système de concepts", "moyen pour une fin" ou leurs sous-classes
return label
else
return '<i>' .. label .. '</i>'
end
else
return label
end
end
end,
}
for i, j in pairs(params) do
wikidata[i] = j
end
return
{type = 'table', title = title, singulartitle = singulartitle, rows =
{
{
type = 'row',
value = 'œuvres principales',
wikidata = wikidata
}
}
}
end
function p.filmography()
local title = 'Films notables'
return
{type = 'row', label = 'Films notables', value = 'films notables', property = 'P1283'}
end
function p.discography()
local title = 'Discographie'
return
{type = 'row', label = 'Discographie', value = 'discographie', property = 'P358'}
end
-- Signature
function p.signature(default)
local nom = localdata.nom or mw.title.getCurrentTitle().text
local alt = 'siyati ' .. nom
if mw.ustring.match( nom, '^[AEÈÉIOUY]' ) then
alt = "siyati" .. nom
end
return {
type = 'images',
imageparameters = {'siyati'},
defaultimage = default,
captionparameter = 'lejand siyati',
defaultcaption = 'Siyati',
uprightparameter = 'upright signature',
defaultupright = 0.75,
defaultalt = alt,
property = 'P109',
numval = 1
}
end
-- Enregistrement vocal
function p.voice()
return {
type = 'images',
style = {['padding-top'] = '25px'},--{['border-width'] = '10px', ['border-style'] = 'solid'},
defaultcaption = 'Enregistrement vocal',
captionparameter = 'légende voix',
imageparameters = 'voix',
defaultsize = '280',
wikidata = general.selectSound('P990'),
numval = 1,
}
end
-- Site web
p.website = general.website
-- Prononciation
p.prononciation = general.prononciation
-- fête du saint
function p.feast()
local title = 'Fête'
return {type = 'row', label = 'Fête', value = 'fête', wikidata = {property = 'P841' , showqualifiers = 'P276'}}
end
-- archivé par
function p.archivesat()
return {type = 'row', label = 'Archives conservées par', value = "archivé par",
wikidata = {
property = 'P485', conjtype = 'new line',
showqualifiers = {'P217','P7328','P585','P7103','P7104'}, qualifprecision = 'year',
qualifformat = function(statement, qualifs, params) -- basé sur wikidata.getFormattedQualifiers dans [[Module:Wikidata]]
local str = ''
if not params then params = {} end
local qualiftable = wikidata.getQualifiers(statement, qualifs)
if not qualiftable then
return nil
end
qualiftable = wikidata.filterClaims(qualiftable, params) or {}
for i, snak in pairs(qualiftable) do
if (snak.datatype == 'time' and snak.property == 'P7104') then -- fin de période couverte
str = str .. '-'
elseif i > 1 then
str = str .. ', '
end
qualiftable[i] = wikidata.formatSnak(snak, params)
if snak.datatype == 'quantity' and tonumber(snak.datavalue.value.amount) > 1 then -- pluriel
qualiftable[i] = qualiftable[i] .. 's'
end
str = str .. qualiftable[i]
end
return str
end,
showsource = true
}
}
end
return p
f1gerbhqorpaeshfvplwjv0ygbaaehm
855627
855626
2024-11-12T23:03:49Z
BwaKajou
31668
855627
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- mis en place des tests dans au moins une des pages de test d'un des modèles utilisant la fonction ?
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
-- Functions utilisées par les infobox personnes
local p = {}
local localdata = require 'Module:Infobox/Localdata'
local item = localdata.item
local wikidata = require 'Module:Wikidata'
local general = require 'Module:Infobox/Fonctions'
local datemodule = require 'Module:Date'
local complexdate = require 'Module:Date complexe'
local linguistic = require 'Module:Linguistique'
local militaryranks = require 'Module:Dictionnaire Wikidata/Grades militaires'
local ppath = require 'Module:Wikidata/Chemin'
local noble = require 'Module:Noble'
-- == Accord en genre
local gender = wikidata.getgender(item) -- genre de la personne dont c'est l'infobox
-- Version locale de wikidata.genderedlabel où si le genre n'est pas indiqué, c'est celui de la personne dont c'est l'infobox
local function genderedlabel(id, labelgender)
if not labelgender then labelgender = gender end
return wikidata.genderedlabel(id, labelgender)
end
-- === Gestion des dates
-- Liens thématiques vers les dates
local datelinks = { -- lien vers le domaine d'activité approprié
Q483501 = 'nan atizay plastik', -- artiste
Q1028181 = 'nan atizay plastik', -- peintre
Q1281618 = 'nan atizay plastik', -- sculpteur
Q2309784 = 'nan siklis', -- cycliste
Q16947657 = 'nan atizay plastik', -- lithographe
Q11569986 = 'nan atizay plastik', -- graveur
Q13365770 = 'nan atizay plastik', -- graveur sur cuivre
Q21925567 = 'nan atizay plastik', -- sérigraphe
Q10862983 = 'nan atizay plastik', -- aquafortiste
Q36180 = 'nan literati', -- écrivain
}
local function getdatetopic() -- obtient le lien le plus approprié pour une date en fonction de la profession
local claims = wikidata.stringTable{entity = item, property = 'P106', excludespecial = true, displayformat = 'raw'}
if not claims then
return nil
end
for i, j in pairs(claims) do
if datelinks[j] then
return datelinks[j]
end
end
end
local linktopic = getdatetopic()
local unknowndatelabel = 'date inconnue'
local birthdate = localdata['naissance'] or
localdata['date de naissance'] or
wikidata.formatAndCat{
entity = item,
property = 'P569',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
minprecision = 8, --précision minimale pour être affichée : décennie
}
local dead = wikidata.getClaims{entity = item, property = 'P570'} --utilisé comme booléen qui dit si une personne est morte pour modifier certaines élément d'affichage
local stillvalid
if dead then
stillvalid = "?" -- permet de remplacer des "depuis" par des "à partir de"
end
local deathdate = localdata['décès'] or localdata['date de décès']
local wddeathdate = wikidata.formatAndCat{
entity = item,
property = 'P570',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
minprecision = 8,
}
local disappeardate = localdata['disparition']
local wddisappeardate = wikidata.formatAndCat{
entity = item,
property = 'P746',
unknownlabel = unknowndatelabel,
conjtype = 'or',
sorttype = 'chronological',
removedupesdate = 'cat',
showqualifiers = 'P276',
minprecision = 8,
}
local function format1(event, period, predecessor, together, successor, displayformat)
local mainstr = event
if predecessor then
local s = 'précédé par ' .. predecessor
if gender == 'f' then
s = 'précédée par ' .. predecessor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if together then
local s = 'avec ' .. together
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
if successor then
local s = 'suivi par ' .. successor
if gender == 'f' then
s = 'suivie par ' .. successor
end
mainstr = mainstr .. '<small><br /> ' .. s .. '</small>'
end
return {type = 'row', label = period or '', value = function() return mainstr end}
end
-----------------
local function format2(event, period, predecessor, together, successor, displayformat)
if (not event) then
return nil
end
local rows = {}
local eventrow = {type = 'row1col', color = 'secondcolor', value = event }
table.insert(rows, eventrow)
if period then
period = '<span style="font-weight:normal">' .. period .. '</span>'
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
table.insert(rows, periodrow)
end
if predecessor then
local prederow = {type = 'row', label = 'Prédécesseur', value = function() return predecessor end}
table.insert(rows, prederow)
end
if together then
local succrow = {type = 'row', label = 'Avec', value = function() return together end}
table.insert(rows, succrow)
end
if successor then
local succrow = {type = 'row', label = 'Successeur', value = function() return successor end}
table.insert(rows, succrow)
end
return {type = 'multi', rows = rows}
end
local function format3(event, period, predecessor, together, successor, displayformat, details)
if details then
details = '<span style="font-weight:normal">' .. details .. '</span>'
event = linguistic.conj({event, details}, 'new line')
end
local mainrow = {type = 'row1col', color = 'secondcolor', value = event }
if period then
period = '<span style="font-weight:normal">' .. period .. '</span>'
end
local periodrow = {type = 'row1col', color = '#F9F9F9', value = period }
local successionrow = {
style = {['background-color'] = '#F9F9F9', ['padding-bottom'] = '2%'},
type = 'navigator',
inner = true,
previousval = function() return predecessor end,
nextval = function() return successor end,
}
return {type = 'multi', rows = {mainrow, periodrow, successionrow}}
end
local function timeline(localparam, wdconf, timelineformat, title, singtitle, details) -- affiche date : événement (suppose les événements déjà triés)
local rows = {}
local function returnTable()
return {
type = 'table',
title = title,
rows = rows
}
end
-- avec données locales
local val = localdata[localparam]
if val == '-' then
return nil
elseif val then
table.insert(rows, {type = 'row1col', color = 'secondcolor', value = val})
return returnTable()
end
-- avec données wikidata
if not wdconf then
return nil
end
wdconf.entity = wdconf.entity or item
wdconf.sorttype = wdconf.sorttype or 'chronological'
wdconf.labelformat = wdconf.labelformat or genderedlabel
wdconf.linktopic = wdconf.linktopic or '-'
local statements = wikidata.getClaims(wdconf)
if not statements then
return nil
end
if #statements == 1 then
title = singtitle
end
local displayformats = {
A = format1,
B = format2,
C = format3,
}
local applyformat = displayformats[timelineformat] or displayformats['A']
rows = {}
for i, statement in pairs(statements) do
local event = linguistic.ucfirst(wikidata.formatStatement(statement, wdconf))
local predecessor = wikidata.getFormattedQualifiers(statement, {'P155', 'P1365'}, {labelformat2 = noble.labelInfobox})
local together = wikidata.getFormattedQualifiers(statement, {'P1706', ''}, {labelformat2 = noble.labelInfobox})
local successor = wikidata.getFormattedQualifiers(statement, {'P156', 'P1366'}, {labelformat2 = noble.labelInfobox})
local period = wikidata.getFormattedDate(statement, {linktopic = wdconf.linktopic, stilltrue = stillvalid } ) -- dont pass all wdconf or else qualifiers will show up
local detailstr
if type(details) == 'function' then
detailstr = details(statement)
end
local row = applyformat(event, period, predecessor, together, successor, wdconf, detailstr)
if row then
table.insert(rows, row)
end
end
table.insert(rows, {type = 'external text', value = function() return wikidata.addTrackingCat(wdconf.property) end})
return returnTable()
end
local function dateandplace(thedate, theplace)
if thedate and theplace and mw.ustring.find(thedate, 'inconnu') and mw.ustring.find(theplace, 'inconnu') then
theplace = nil
thedate = mw.ustring.gsub(thedate, linguistic.ucfirst(unknowndatelabel), 'Date et lieu inconnus')
end
return linguistic.conj({thedate, theplace}, 'new line')
end
--Titre
function p.title(icon, style)
local title = general.title(icon, style)
title.value = function()
return localdata['nom'] or localdata['association_nom'] or localdata['nom_think'] or localdata['acronymelaboratoire'] or localdata['titre']
or wikidata.getLabel(localdata.item) and noble.labelInfobox( mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) ) )
or noble.labelInfobox( mw.title.getCurrentTitle().text )
end
return title
end
--Image
function p.mainimage(cat)
-- demande d'illustration que si la personne est née ou morte après 1900, sinon c'est souvent impossible à trouver
local defaultimage = 'Defaut 2.svg'
local age = wikidata.stringTable{property = 'P569,P570', entity = item, displayformat = 'raw', excludespecial = true}
if age and age[1] then
local pattern = '(%W)(%d+)%-(%d+)%-(%d+)'
local era, year = age[1]:match(pattern)
if (era == '-') or (tonumber(year)) < 1900 then
defaultimage = nil
end
end
return general.mainimage({cat = cat or 'Article à illustrer Biographie', altparameter = 'alt'}, defaultimage)
end
-- Noms
function p.othernames()
local names = {
{'P1477', 'Nom de naissance', 'Noms de naissance', 'nom de naissance'},
{'P1448', 'Nom officiel', 'Noms officiels', 'nom officiel'},
{'P1449', 'Surnom', 'Surnoms', 'surnom'},
{'P2001', 'Romanisation révisée', 'Romanisation révisée', 'romanisation révisée'},
{'P1942', 'McCune-Reischauer', 'McCune-Reischauer', 'McCune-Reischauer'},
{'P742', 'Pseudonyme', 'Pseudonymes', 'pseudonyme'},
{'P1782', 'Prénom social', 'Prénoms sociaux', 'prénom social'},
{'P1786', 'Nom posthume', 'Noms posthumes', 'nom posthume'},
{'P1785', 'Nom de temple', 'Noms de temple', 'nom de temple'},
{'P1787', 'Nom de pinceau', 'Noms de pinceau', 'nom de pinceau'},
{'P1813', 'Nom court', 'Noms courts', 'nom court'},
{nil, 'Autres noms', 'Autres noms', 'autres noms'},
}
local nativelangnamerow = { -- un peu particulier, donc à part
type = 'row',
wikidata = function()
local s = wikidata.formatAndCat{entity = item, property = 'P1559', showqualifiers = 'P1721', conjtype = 'or'}
if (not s) then
return nil
end
-- regarde si le nom de la valeur ressemble au libellé (en tenant compte de la pollution des marqueures de langue
local label = mw.ustring.lower(wikidata.getLabel(item) or '')
local useless
if mw.ustring.find(mw.ustring.lower(s), mw.ustring.lower(label), 1, true) then
useless = true
end
if wikidata.formatStatements{entity = item, property = 'P1559'} == wikidata.formatStatements{entity = item, property = 'P1477'} then
useless = true --inutile si duplique le "nom de naissance"
end
if useless then
return nil
end
return s
end,
label = 'Nom dans la langue maternelle',
plurallabel = 'Noms dans la langue maternelle',
value = 'nom dans la langue maternelle',
}
local rows = {type = 'multi', rows = {nativelangnamerow}}
for i, j in pairs(names) do
local query
if j[1] and not localdata['autres noms'] then -- lorsqu'il y a un paramètre "autres noms", Wikidata est désactivée pour éviter risques de doublon
query = {property = j[1], showqualifiers = {'P1721'}, conjtype = 'comma'}
end
table.insert(rows.rows, {type = 'row', value = j[4], wikidata = query, label = j[2], plurallabel = j[3]})
end
return rows
end
-- NAISSANCE ET MORT
function p.birth() -- date de naissance en première ligne, lieu de naissance en deuxième
return {
type = 'row',
label = 'Naissance',
value =
function()
local thedate = datemodule.dateInfobox{args = {[1] = 'naissance', [2] = birthdate or '', [3] = deathdate or wddeathdate or disappeardate or wddisappeardate or '', qualificatif = linktopic}}
local theplace = localdata['lieu de naissance'] or
wikidata.formatAndCat({entity =item, -- affichage du nom du lieu de naissance en vigueur à la date de naissance
property= 'P19',
rank = 'best',
labelformat = function(val) return wikidata.getLabel(val) end,
conjtype= ' ou ',
defaultlinkquery = {property = {'P361'}}, -- liens par défaut : "partie de",
unknownlabel = "lieu inconnu",
showqualifiers = {'P131', 'P17'},
qualifconjtype = 'comma'
}
)
return dateandplace(thedate, theplace)
end
}
end
function p.death() -- même fonctionnement que la fonction p.birth
-- date de disparition
local ldisappeardate = disappeardate
if (not ldisappeardate ) and (not deathdate) then -- récupérée de Wikidata seulement si la date de décès n'est pas fournie en locale
ldisappeardate = wddisappeardate
end
if ldisappeardate and birthdate then
ldisappeardate = datemodule.dateInfobox{args = {[1] = 'événement', [2] = birthdate or '', [3] = ldisappeardate or '', qualificatif = linktopic, unknownlabel = 'date inconnue'}}
end
-- date de décès
local ddate = deathdate --déclarée pour l'ensemble du module
if (not ddate) and (not ldisappeardate) then
deathdate = wddeathdate -- récupérée de Wikidata seulement si la date de disparition n'est pas fournie en locale
end
local thedate = datemodule.dateInfobox{args = {[1] = 'mort', [2] = birthdate or '', [3] = deathdate or '', qualificatif = linktopic, unknownlabel = 'date inconnue'}}
local theplace = localdata['lieu de décès'] or
wikidata.formatAndCat{entity =item,
property= 'P20',
rank = 'best',
-- affichage du nom du lieu de décès en vigueur à la date de décès
labelformat = function(val) return wikidata.getLabel(val) end,
conjtype= ' ou ',
defaultlinkquery = {property = {'P361'}}, -- liens par défaut : "partie de",
unknownlabel = "lieu inconnu",
showqualifiers = {'P131', 'P17'},
qualifconjtype = 'comma'
}
local val = dateandplace(thedate, theplace)
return
{type = 'multi', rows = {
{ -- disparition
type = 'row',
label = 'Disparition',
value = function() return ldisappeardate end
},
{ -- décès
type = 'row',
label = 'Décès',
value = function() return val end,
}
}}
end
function p.floruit()
return {
type = 'row',
label = "Période d'activité",
value = "période d'activité",
wikidata = function()
local startDate = wikidata.formatAndCat{entity = item, property = 'P2031', conjtype = 'or', sorttype = 'chronological', linkback = '-'}
local endDate = wikidata.formatAndCat{entity = item, property = 'P2032', conjtype = 'or', sorttype = 'chronological'}
if not (startDate or endDate) then
return wikidata.formatAndCat{entity = item, property = 'P1317', conjtype = 'or', sorttype = 'chronological'}
end
if startDate and not endDate then
startDate = wikidata.formatAndCat{entity = item, property = 'P2031', conjtype = 'or', sorttype = 'chronological'}
end
return complexdate.daterange(startDate, endDate, {precision = 11, stilltrue = stillvalid})
end
}
end
function p.placeofburial()
return
{type = 'row', label = 'Sépulture', value = 'sépulture', wikidata = {property = "P119", showdate = true, novaluelabel = 'aucune'}}
end
function table.slice(tbl, first, last, step)
local sliced = {}
for i = first or 1, last or #tbl, step or 1 do
sliced[#sliced+1] = tbl[i]
end
return sliced
end
-- function that creates a filter function
-- if the main country "base_country_item" is (replaced by)+
-- the subsequent statement main value that the function will receive as a parameter
-- then the created function will return true for this statement to be filtered out
local function filter_replaces_builder(base_country_item)
-- P1365 = remplace
-- P1366 = remplacé par
local replaced_query = {property = 'P1365'}
return function(may_be_replacing_stmt)
local may_be_replacing_item = wikidata.getMainId(may_be_replacing_stmt)
local replaces = wikidata.inTransitiveVals(may_be_replacing_item, base_country_item, replaced_query)
return not(wikidata.inTransitiveVals(may_be_replacing_item, base_country_item, replaced_query))
end
end
-- filter parameterized by each of the values of the claims, in the order
-- « filter_function_builder » will be called by all the values (remaining after filtering) in « claims »
-- to filter the rest of the claims, starting from the first one in the list.
local function iterated_filter(claims, filter_function_builder)
-- the first country in the list, if any of the following value replaces this one
-- we remove them. So we split the list
local first_country_claim = claims[1]
local to_test = table.slice(claims, 2, #claims)
if #to_test > 0 then
-- building the filter function with the first country as base value
-- (a closure)
local condition = filter_function_builder(wikidata.getMainId(first_country_claim))
-- keeping the number of values before the filter
local nb_before = #to_test
to_test = wikidata.filterClaims(to_test, {condition = condition}) or {}
local nb_after = #to_test
-- if some country was filtered out, we remove the dates of the main statement to avoid showing incomplete dates
if (nb_before ~= nb_after and first_country_claim.qualifiers) then
first_country_claim.qualifiers["P580"] = nil
first_country_claim.qualifiers["P582"] = nil
end
-- if there still exists candidate countries, filter them recursively
if #to_test > 0 then
to_test = iterated_filter(to_test, filter_function_builder)
end
-- reconstruct the list of statement by readding our first country to the filtered list
to_test = to_test or {}
table.insert(to_test, 1, first_country_claim)
return to_test
end
-- if there were nothing to filter, just return the first statement
return {first_country_claim}
end
function p.nationality()
local cmp = wikidata.compare
-- à améliorer étant donnée les mœurs Wikidata comme nationalité : Empire allemand (1901-1918) République de Weimar (1918-1933)
local function wdDate()
local nation = require 'Module:Country data'.nationality
-- désactivation si date de naissance avant l'Ère contemporaine : trop d'imprécisions et d'anachronismes
local mindate = '1789'
local birthdate = wikidata.formatStatements{entity = item, property = 'P569', displayformat = 'raw', numval = 1}
local deathdate = wikidata.formatStatements{entity = item, property = 'P570', displayformat = 'raw', numval = 1}
if ((not birthdate) or complexdate.before(mindate, birthdate)) and ((not deathdate) or complexdate.before(mindate, deathdate)) then
return nil
end
-- preprocessing the "P27" statements
-- if there is statements about a country that changed its regime, like France before and after the french Revolution
-- then we just want to show "France" and not "France and France" because there is two statement (or worse)
-- so we take advantage of the fact that the French Kingdom was "replaced by" French Republic (P1366)
-- to detect and filter out such «redundant» values
-- (we also remove the begin/end dates of statements in such cases to avoid wrong dating)
local statements = wikidata.getClaims{entity = item, property = 'P27', rank='best', excludespecial=true} or {}
-- sort nationality statements by statement dates or regime creation date if statement is not dated
local sort_by_statement_or_regime = wikidata.chrono_key_sort{
sort_key="RegimeKey", -- use another key than « chronosort »
snak_key_get_function = ppath.snak_key_by_paths{">P580","P571"}, --[[ either by « begin date » qualifier or « inception » of the nationality
if the statement is not dated ]]
key_compare_function = cmp.rev(function(v1, v2) return v1 < v2 end) -- sort in reverse chronological order to remove all values the first nationalities replaces
}
-- ordering statement by dates so that we can test only "A replaces B" and not "B replaces A" because A is an older regime than B
statements = sort_by_statement_or_regime(statements)
-- actual statement filtering
statements = iterated_filter(statements, filter_replaces_builder)
-- re-sorting in chronological ordering
statements = wikidata.sortClaims(statements, cmp.chronoCompare)
return {
property = 'P27',
claims = statements, -- our filtered statement as claims instead of the regular query
showdate = true,
entity = item,
conjtype = 'new line',
removedupes = true,
linktopic = '-',
sorttype = 'chronological',
ucfirst = '-',
stilltrue = not dead,
displayformat =
function(snak)
-- local g = gender -- genre de la personne, pour affichage du gentilé
-- if g == '?' then -- si inconnu, au masculin
-- g = 'm'
-- end
local val, success = nation(wikidata.getId(snak), 'f') -- au féminin pour accorder au mot nationalité
if not success then
val = wikidata.formatSnak(snak)
end
return val
end
}
end
return {
type = 'row',
label = 'Nationalité',
plurallabel = 'Nationalités',
value = 'nationalité',
wikidata = wdDate() -- wdDate() retourne une table
}
end
function p.nativelanguage()
return
{type = 'row', label = 'Langue maternelle', value = 'langue maternelle', property = 'P103'}
end
function p.writinglanguage()
return
{type = 'row', label = "Langue d\'écriture", value = 'langue d\'écriture', plurallabel = "Langues d\'écriture" , wikidata = {property = 'P6886' , expl = true}}
end
-- Domiciles
function p.places()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Dème',
plurallabel = 'Dèmes',
value = 'dème',
wikidata = {property = 'P2462', showdate = true, sorttype= 'chronological', stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Domicile',
plurallabel = 'Domiciles',
value = 'domicile',
wikidata = {property = 'P551', showdate = true, sorttype= 'chronological', stilltrue = not dead, precision = 'year'},
},
}}
end
-- parcours professionel
function p.education()
local query = {sorttype= 'chronological', property = 'P69', showdate = true, stilltrue = '?', showqualifiers = 'P512', conjtype = 'new line', linktopic = '-'}
return {
type = 'row',
value = {'éducation', 'formation'},
wikidata = query,
label = 'Formation',
}
end
function p.occupation()
local speciallabels = {
f = {
['Q33999'] = '[[Acteur|actrice]]',
['Q10798782'] = '[[Acteur|actrice]]',
['Q10800557'] = '[[Acteur|actrice]]',
['Q2405480'] = '[[Acteur|actrice]]',
['Q2259451'] = '[[Acteur|actrice]]',
['Q948329'] = '[[Acteur|actrice]]'
},
m = {
['Q33999'] = '[[acteur]]',
['Q10798782'] = '[[acteur]]',
['Q10800557'] = '[[acteur]]',
['Q10798782'] = '[[acteur]]',
['Q2405480'] = '[[acteur]]',
['Q2259451'] = '[[acteur]]',
['Q948329'] = '[[acteur]]'
}
}
return {
type = 'row',
value = {'activité', 'activités'},
wikidata = {
property = 'P106',
defaultlink = '-',
defaultlinkquery = {property = {'P425','P1056'}},
labelformat = genderedlabel,
speciallabels = speciallabels[gender] or speciallabels['m'],
removedupes = true,
showdate = true,
sorttype = 'chronological',
stilltrue = not dead,
excludevalues = { -- les occupations qui ne méritent pas d'être affichées
'Q482980', -- auteur
'Q15980158', --"auteur de non-fiction"
'Q12144794', --prosateur
'Q18814623', -- autobiographe
'Q1209498', -- juriste-poète
'Q1097498', -- "dirigeant"
'Q2478141', -- aristocrate
'Q116', -- monarque
'Q115088092', -- participant à un forum international
}
},
label = 'Activité',
plurallabel = 'Activités'
}
end
function p.haswrittenfor()
local valueStyle = {}
valueStyle['font-style'] = 'italic'
return
{type = 'row', label =
function(localdata, item)
if gender == 'f' then
return 'Rédactrice à'
else
return 'Rédacteur à'
end
end, value = 'rédacteur à', wikidata = {property = "P6872", showdate = true}, valueStyle = valueStyle}
end
function p.employer()
return {
type = 'row',
value = 'employeur',
wikidata = {property = 'P108', showdate = true, linktopic = '-', sorttype= 'inverted', stilltrue = not dead, conjtype = 'new line'},
label = function() return localdata['intitulé employeur'] or 'A travaillé pour' end,
}
end
function p.victories()
local title, singtitle = 'Victoires', 'Victoire'
local localparam = 'victoire'
local wdconf = {property = 'P2522'}
local displayformat = 'B'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.officialposition()
local title, singtitle = 'Fonctions', 'Fonction'
local localparam = 'fonction'
local wdconf = {
property = 'P39',
rank = 'valid',
sorttype = 'inverted',
defaultlinkquery = {property = {'P2354', 'P2389', 'P453', 'P361', 'P108', 'P276', 'P1001'}}, -- liens par défaut : liste, puise organisme dirigé, "membre de", "partie de", employeur, ressort territorial
}
-- sur une ligne séparée : gouvernement, législature, juridiction, "de", circonsription, diocèse, affiliation, assemblée, parti, employeur
local details = function(statement) return wikidata.getFormattedQualifiers(statement, {'P5054', 'P2937', 'P1001', 'P642', 'P2389', 'P768', 'P708', 'P1416', 'P194', 'P108', 'P937' , 'P1268'}, {conjtype = 'new line'}) end
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat, title, singtitle, details)
end
function p.specialrole()
local localparam = 'statut notable'
local wdconf = {
property = 'P2868',
rank = 'valid',
sorttype = 'inverted',
targetsuperclass = 'Q254917',
defaultlinkquery = {property = {'P2354'}}, -- lien par défaut : liste d'éléments
}
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat)
end
function p.nobilitytitle()
local title, singtitle = 'Titres de noblesse', 'Titre de noblesse'
local localparam = 'titre de noblesse'
local wdconf = {
property = 'P97',
entity = item, rank = 'valid',
showqualifiers = {'P642'},
defaultlinkquery = {property = {'P2354', 'P361'}}, -- liens par défaut : liste, puise organisme dirigé, "membre de" et "partie de"
}
local displayformat = 'B'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.honorifictitle()
local title, singtitle = 'Titres honorifiques', 'Titre honorifique'
local localparam = 'titre honorifique'
local wdconf = {property = 'P511', entity = item, rank = 'valid'}
local displayformat = 'C'
return timeline(localparam, wdconf, displayformat, title, singtitle)
end
function p.tombe()
return {
type = 'images',
imageparameters = {'tombe'},
defaultimages = nil,
defaultupright = 1,
uprightparameter = 'upright tombe',
sizeparameter = 'taille tombe', -- obsolète
captionparameter = 'légende tombe',
defaultcaption = 'Vue de la sépulture.',
property = 'P1442',
numval = 1,
}
end
function p.plaque()
return {
type = 'images',
imageparameters = {'plaque'},
defaultimages = nil,
defaultupright = 1,
uprightparameter = 'upright plaque',
sizeparameter = 'taille plaque', -- obsolète
captionparameter = 'légende plaque',
defaultcaption = 'Plaque commémorative',
property = 'P1801',
numval = 1,
}
end
function p.blason()
return {
type = 'images',
imageparameters = {'blason'},
defaultimages = nil,
defaultupright = 0.5,
uprightparameter = 'upright blason',
sizeparameter = 'taille blason', -- obsolète
captionparameter = 'légende blason',
defaultcaption = 'Blason',
property = 'P94',
numval = 1,
}
end
function p.sceau()
return {
type = 'images',
imageparameters = {'sceau'},
defaultimages = nil,
defaultupright = 0.7,
uprightparameter = 'upright sceau',
sizeparameter = 'taille sceau', -- obsolète
captionparameter = 'légende sceau',
defaultcaption = 'Sceau',
property = 'P158',
numval = 1,
}
end
function p.monogram()
return {
type = 'images',
imageparameters = {'monogramme'},
defaultimages = nil,
defaultsize = '100px',
sizeparameter = 'taille monogramme',
captionparameter = 'légende monogramme',
defaultcaption = 'Monogramme',
property = 'P1543',
numval = 1,
}
end
function p.flag()
return {
type = 'images',
imageparameters = {'drapeau'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille drapeau',
captionparameter = 'légende drapeau',
defaultcaption = 'Drapeau',
property = 'P41',
numval = 1,
}
end
function p.logo()
return {
type = 'images',
imageparameters = {'logo'},
defaultimages = nil,
defaultsize = '150px',
sizeparameter = 'taille logo',
captionparameter = 'légende logo',
defaultcaption = 'Marque ou logotype',
property = 'P154',
numval = 1,
}
end
function p.politicalparty()
return {
type = 'row',
value = 'parti politique',
label = 'Parti politique',
plurallabel = 'Partis politiques',
wikidata = { property = 'P102', sorttype= 'chronological', showdate = true, conjtype = 'new line', excludespecial = true,
labelformat = function(id) if id == 'Q327591' and gender == 'f' then return 'indépendante' end end}
}
end
function p.memberof()
return {type = 'multi', rows = {
{
type = 'row',
value = 'ordre de chevalerie',
label = 'Ordre de chevalerie',
plurallabel = 'Ordres de chevalerie',
wikidata = {property = 'P550', sorttype= 'chronological', showdate = true, stilltrue = not dead},
},
{
type = 'row',
label = 'Membre de',
value = 'membre de',
wikidata = {property = 'P463', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year', linktopic = '-', textformat = 'minimum', conjtype = 'new line'},
},
}}
end
local masclabelitems = {a='Q10855271', b='Q10855195', c='Q10855212', d='Q10855216', e='Q13422138', f='Q13422140', g='Q13422141', h='Q13452524', i='Q13452528', j='Q13452531', k='Q14637182', l='Q14637176', m='Q14637188',}
-- grades de la légion d'Honneur, de l'ordre national du Mérite, de l'ordre des Palmes académiques et de l'ordre des Arts et Lettres en France, de genre grammatical masculin y compris pour les femmes
function p.awards()
local function awardsList()
local majorawards = require 'Module:Dictionnaire Wikidata/Distinctions'
local query = {
entity = item,
property= 'P166',
sorttype= 'chronological',
grouped = true,
showqualifiers = 'P642',
showdate= true,
precision = 'year',
conjtype = 'new line',
textformat = 'minimum',
linktopic = '-',
defaultlinkquery = {property = {'P2354', 'P361' , 'P1027'}},
excludevalues = majorawards.exclude, -- membre de la Royal Society, redondance avec le champ « membre de » (P463)
speciallabels = majorawards,
labelformat = function(id)
masclabel = false
for _, item in pairs(masclabelitems) do
if id == item then masclabel = true end
end
if masclabel then
return genderedlabel(id, 'm')
else
return genderedlabel(id)
end
end,
}
local claims = wikidata.getClaims(query)
if (not claims) then
return nil
end
local str = wikidata.formatAndCat(query)
if #claims < 4 then
return str, #claims
end
--si trop de valeurs, n'afficher que les importantes de [[Module:Dictionnaire Wikidata/Distinctions]], et mettre les autrs dans un menu pliant
--- récupération des importantes
local majorStr
local targetvalues = {}
for i, j in pairs(majorawards) do
table.insert(targetvalues, i)
end
query.targetvalue = targetvalues
query.value, query.claims, query.valuetable = nil, nil, nil -- apparemment sinon ce n'est pas le cas, pourquoi ? BUG IMPORTANT
majorStr = wikidata.formatAndCat(query)
--- repliage des autres
local message = "'''Liste détaillée'''"
local allAwardsTable = mw.html.create('div')
:addClass('toccolours mw-collapsible mw-collapsed')
:wikitext(message)
:css{border = 'none'}
:tag('div')
:addClass('mw-collapsible-content')
:css{['line-height'] = '150%'} -- sinon c'est vraiment serré
:wikitext( str)
:done()
:allDone()
return linguistic.conj({majorStr, tostring(allAwardsTable)}, '<br>'), #claims
end
return {
type = 'row',
value = {'prix', 'récompenses', 'distinction', 'distinctions'},
label = 'Distinctions',
singularlabel = 'Distinction',
wikidata = function() return awardsList() end
}
end
-- Influences
function p.influencedby()
return {
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Influencée par'
else
return 'Influencé par'
end
end,
value = 'influencé par',
wikidata = {property = 'P737'},
}
end
function p.influenced()
return {
type = 'row',
label = 'A influencé',
value = {'a influencé', 'influence de'},
}
end
-- Appartenances
function p.movement()
return
{
type = 'row',
label = 'Mouvement',
value = 'mouvement',
plurallabel = 'Mouvements',
wikidata = {property = 'P135', sorttype= 'chronological', showdate = true, precision = 'year'},
}
end
-- Religion
function p.religion()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Religion',
value = 'religion',
},
{
type = 'row',
label = 'Date de baptême',
value = 'date de baptême',
property = 'P1636',
},
--{
-- type = 'row', En l'état, afficherait "parrain" y compris pour la marraine. Quoi qu'il en soit, pertinence douteuse.
-- label = 'Parrain',
-- plurallabel = 'Parrains',
-- value = 'parrain',
-- property = 'P1290',
--},
{
type = 'row',
label = 'Nom en religion',
plurallabel = 'Noms en religion',
value = 'nom en religion',
property = 'P1635',
},
{
type = 'row',
label = 'Ordre religieux',
plurallabel = 'Ordres religieux',
value = 'ordre religieux',
wikidata = {property = 'P611', showdate = true, sorttype= 'chronological', precision = 'year', stilltrue = not dead},
},
{
type = 'row',
label = 'Consécrateur',
plurallabel = 'Consécrateurs',
value = 'consécrateur',
property = 'P1598',
},
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Vénérée par'
elseif gender == 'm' then
return 'Vénéré par'
else
return 'Vénéré par'
end
end,
value = 'vénéré par',
property = 'P1049',
},
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Vénérée à'
elseif gender == 'm' then
return 'Vénéré à'
else
return 'Vénéré à'
end
end,
value = 'vénéré à',
-- property = ,
},
{
type = 'row',
label = 'Étape de canonisation',
value = 'étape de canonisation',
wikidata = {
property = 'P411',
labelformat = genderedlabel,
},
},
}}
end
-- Carrière militaire
function p.military()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Arme',
plurallabel = 'Armes',
value = 'arme',
wikidata = {property = 'P241', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year'},
},
{
type = 'row',
label = 'Unité',
plurallabel = 'Unités',
value = 'unité',
wikidata = {property = 'P7779', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year', conjtype = 'new line'},
},
{
type = 'row',
label = 'Grade militaire',
plurallabel = 'Grades militaires',
value = 'grade militaire',
blockers = {'grade'}, -- paramètre théoriquement dédié aux arts martiaux et au go mais souvent rempli avec des grades militaires
wikidata = {
property = 'P410',
showdate = true, sorttype= 'chronological', precision = 'year',
speciallabels = militaryranks,
conjtype ='new line',
labelformat = genderedlabel,
stilltrue = not dead
},
},
{
type = 'row',
label = 'Conflit',
plurallabel = 'Conflits',
value = 'conflit',
wikidata = {property = 'P607', conjtype = 'new line', showdate = true, stilltrue = not dead, sorttype= 'chronological', precision = 'year'},
},
}}
end
-- Carrière de torero
function p.torero()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Alternative',
value = 'alternative',
wikidata = function() return wikidata.keyDate('Q2840411', item) end
},
{
type = 'row',
label = "Confirmation d'alternative",
value = 'confirmation alt',
wikidata = function() return wikidata.keyDate('Q23308805', item) end
},
}}
end
-- Sport
function p.sport()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Sport',
plurallabel = 'Sports',
value = {'sport', 'sport pratiqué'},
wikidata = {property = 'P641'},
},
{
type = 'row',
label = 'Équipe',
plurallabel = 'Équipes',
value = 'équipe',
wikidata = {
property = 'P54',
sorttype= 'chronological',
conjtype = 'new line',
statementformat = function(statement)
local str = wikidata.formatStatement(statement, {showdate = true})
local compets = wikidata.getFormattedQualifiers(statement, {'P1350'})
if tonumber(compets) and (tonumber(compets) > 1) then
compets = compets .. ' matchs joués'
elseif compets then
compets = compets .. ' match joué'
end
local points = wikidata.getFormattedQualifiers(statement, {'P1351'})
if tonumber(points) and (tonumber(points) > 1) then
points = points .. ' points marqués'
elseif points then
points = points .. 'point marqué'
end
local qualifiers = linguistic.conj{compets, points}
if qualifiers then
str= str .. ' <small> – ' .. qualifiers .. ' </small>'
end
return str
end
}
},
{
type = 'row',
label = 'Position',
plurallabel = 'Positions',
value = {'position', 'poste', 'spécialité'},
wikidata = {property = 'P413',
labelformat = genderedlabel,
},
},
{
type = 'row',
label = 'Discipline sportive',
plurallabel = 'Disciplines sportives',
value = 'discipline sportive',
wikidata = {property = 'P2416'},
},
{
type = 'row',
label = 'Prise de raquette',
value = 'prise de raquette',
wikidata = {property = 'P741'},
},
{
type = 'row',
label = 'Tire de la',
value = 'tire',
wikidata = {property = 'P423'},
},
{
type = 'row',
label = 'Repêchage par',
plurallabel = 'Repêchages par',
value = 'repêchage',
wikidata = {
property = 'P647',
statementformat = function(statement)
local team = wikidata.formatStatement(statement)
local moment = wikidata.getFormattedQualifiers(statement, {'P793'}) or wikidata.getFormattedQualifiers(statement, {'P585'})
local rank = wikidata.getFormattedQualifiers(statement, {'P1836'})
if rank then
rank = require 'Module:Nombre2texte'.ordinal(rank) .. ' choix'
end
local qualifs = linguistic.conj({moment, rank}, ' – ')
if not qualifs then
return team
end
return team .. ' <small>(' .. qualifs .. ')</small>'
end
},
},
{
type = 'row',
label = 'Capes internationales',
value = 'capes',
wikidata = {property = 'P1129', numval = 1},
},
{
type = 'row',
label = 'Titre aux échecs',
plurallabel = 'Titres aux échecs',
value = 'titre aux échecs',
wikidata = {property = 'P2962', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Classement Elo',
value = 'classement elo',
wikidata = {property = 'P1087', numval = '1', sorttype = 'inverted', showdate = true, precision = 'year', removedupes = true},
},
{
type = 'row',
label = 'Record détenu',
plurallabel = 'Records détenus',
value = 'record détenu',
wikidata = {property = 'P1000', sorttype= 'chronological', showdate = true},
},
{
type = 'row',
label = 'Entraîneur',
plurallabel = 'Entraîneurs',
value = 'entraîneur',
wikidata = {property = 'P286', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Copilote',
plurallabel = 'Copilotes',
value = 'copilote',
wikidata = {property = 'P2095', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = 'Mécène',
plurallabel = 'Mécènes',
value = {'mécène', 'mécènes', 'sponsor', 'sponsors'},
wikidata = {property = 'P859', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
}}
end
-- Contacts
function p.contacts()
return {type = 'multi', rows = {
{
type = 'row',
label = localdata['intitulé maître'] or 'Maître',
plurallabel = 'Maîtres',
value = {'maître', 'maîtres'},
wikidata = {property = 'P1066', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year'},
},
{
type = 'row',
label = {
ms = 'Directeur de thèse',
fs = 'Directrice de thèse',
mp = 'Directeurs de thèse',
fp = 'Directrices de thèse',
default = '<abbr class="abbr" title="Direction">Dir.</abbr> de thèse'
},
value = {'directeur de thèse', 'dir. de thèse'},
wikidata = {property = 'P184', sorttype= 'chronological', showdate = true, precision = 'year'},
},
{
type = 'row',
label = 'Agent',
label =
function(localdata, item)
if gender == 'f' then
return 'Représentée par'
elseif gender == 'm' then
return 'Représenté par'
else
return 'Représenté par'
end
end,
value = 'représenté par',
wikidata = {property = 'P1875'},
},
{ -- Partenaire professionnel ou sportif
type = 'row',
label = 'Partenaire',
plurallabel = 'Partenaires',
value = 'partenaire',
wikidata = {property = 'P1327', showdate = true, sorttype= 'chronological'},
},
{
type = 'row',
label = localdata['intitulé élève'] or 'Élève',
plurallabel = 'Élèves',
value = {'élève', 'élèves'},
wikidata = {property = 'P802', sorttype= 'chronological', showdate = true, stilltrue = not dead, precision = 'year', numval = '5', expl = ''},
},
{
type = 'row',
label = 'Étudiant de thèse',
plurallabel = 'Étudiants de thèse',
value = 'étudiant de thèse',
wikidata = {property = 'P185', sorttype= 'chronological', showdate = true, precision = 'year', numval = '5', expl = ''},
},
{
type = 'row',
label = 'Personne liée',
plurallabel = 'Personnes liées',
value = 'personne liée',
wikidata = {property = 'P3342', numval = 5, showqualifiers = 'P3831',qualiflink="-",qualiflabelformat="objectgender"}, --objectgender à créer dans Module:Wikidata
},
}}
end
-- Mécénat
function p.patron()
return {
type = 'row',
label = '[[Mécénat|Mécènes]]',
singularlabel = '[[Mécénat|Mécène]]',
plurallabel = '[[Mécénat|Mécènes]]',
value = 'mécènes',
wikidata = {property = 'P859', showdate = true, stilltrue = not dead, sorttype = 'chronological', conjtype = 'comma'},
}
end
-- Musique
function p.music()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Tessiture',
value = 'tessiture',
property = 'P412',
},
{
type = 'row',
label = 'Fach',
value = 'fach',
property = 'P1731',
},
{
type = 'row',
label = 'Instrument',
plurallabel = 'Instruments',
value = 'instrument',
wikidata = {property = 'P1303', sorttype= 'chronological', excludevalues='Q17172850'}, --probablement jugée redondante avec l'occupation "chanteur"
},
{
type = 'row',
label = 'Label',
plurallabel = 'Labels',
value = 'label',
wikidata = {property = 'P264', sorttype= 'chronological', showdate = true, precision = 'year'},
},
}}
end
-- Victimes
function p.victims()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Victimes',
value = 'victimes',
wikidata = {property = 'P1345'},
},
}}
end
-- Condamnations
function p.penalties()
return {type = 'multi', rows = {
{
type = 'row',
label =
function(localdata, item)
if gender == 'f' then
return 'Condamnée pour'
elseif gender == 'm' then
return 'Condamné pour'
else
return 'Condamné pour'
end
end,
value = 'condamné pour',
wikidata = {property = 'P1399', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
{
type = 'row',
label = 'Condamnation',
plurallabel = 'Condamnations',
value = 'condamnation',
wikidata = {property = 'P1596', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
{
type = 'row',
label = 'Lieu de détention',
plurallabel = 'Lieux de détention',
value = 'lieu de détention',
wikidata = {property = 'P2632', showdate = true, sorttype = 'chronological', precision = 'year', conjtype = 'comma'},
},
}}
end
-- Physique
function p.appearance()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Taille',
value = 'taille',
wikidata = {property = 'P2048', targetunit = 'metre', rounding = '2'},
},
{
type = 'row',
label = '[[masse corporelle|Poids]]',
value = {'poids','masse'},
wikidata = {property = 'P2067', targetunit = 'kilogram', conjtype = 'new line', showdate=true, rounding = '1'},
},
{
type = 'row',
label = 'Cheveux',
value = 'cheveux',
wikidata = {property = 'P1884'},
},
{
type = 'row',
label = 'Yeux',
value = 'yeux',
wikidata = {property = 'P1340'},
},
}}
end
-- Famille
function p.gens()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Gens',
value = 'gens',
wikidata = {property = 'P5025'},
},
}}
end
function p.family()
local function showkinship(statement)
local personid = wikidata.getMainId(statement)
local personlabel = wikidata.formatEntity(personid, {
labelformat2 = noble.labelInfobox
})
local persongender = wikidata.getgender(personid)
local kintype = wikidata.getFormattedQualifiers(
statement,
'P1039',
{
labelformat = function(id) return genderedlabel(id, persongender) end,
link = '-'
}
)
if kintype then
return personlabel .. ' ' .. linguistic.inparentheses(kintype)
end
return personlabel
end
return {type = 'multi', rows = {
{
type = 'row',
label = 'Famille',
plurallabels = 'Familles',
value = 'famille',
property = 'P53',
},
{
type = 'row',
label = 'Père',
value = 'père',
wikidata = {
property = 'P22',
showqualifiers = "P1039",
conjtype = ' ou ',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Mère',
value = 'mère',
wikidata = {property = 'P25',
showqualifiers = "P1039",
unknownlabel = 'Inconnue',
conjtype = ' ou ',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Beau-parent',
plurallabel = 'Beaux-parents',
value = {'beau-parent', 'beau-père', 'belle-mère'},
wikidata = {
property = 'P3448',
labelformat2 = noble.labelInfobox
},
},
{
type = 'row',
label = 'Fratrie',
value = 'fratrie',
wikidata = {
property = 'P3373',
sorttype = 'age',
conjtype = 'new line',
textformat = 'long',
precision = 'year',
stilltrue = not dead,
statementformat = showkinship,
excludespecial = true,
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = 'Conjoint', -- todo : adapter le libellé en genre ?
plurallabel = 'Conjoints',
value = 'conjoint',
wikidata = {
property = 'P26',
showdate = true,
linktopic = '-',
sorttype = 'chronological',
conjtype = 'new line',
textformat = 'long',
precision = 'year',
stilltrue = not dead,
precision = 'year',
excludespecial = true,
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = localdata['intitulé enfant'] or 'Enfant',-- todo : adapter le libellé en genre ?
plurallabel = 'Enfants',
value = 'enfant',
wikidata = {
property = 'P40',
conjtype = 'new line',
showdate = false,
sorttype = 'age',
labelformat2 = noble.labelInfobox,
}
},
{
type = 'row',
label = 'Parentèle',
value = 'parentèle',
wikidata = {
property = 'P1038',
excludespecial = true,
conjtype = 'new line',
statementformat = showkinship
}
},
}}
end
-- Esclavage
function p.slavery()
return {type = 'multi', rows = {
{
type = 'row',
label = 'Statut',
plurallabel = 'Statuts',
value = 'statut',
wikidata = {property = 'P3716',
showdate = true,
labelformat = genderedlabel,
excludevalues = {'Q11573099','Q10076267'}, --membre de la famille royale (doublon avec les propriétés familiales) et propriétaire d'esclaves (pas vraiment un statut)
defaultlinkquery = 'P425'},
},
{
type = 'row',
label = 'Propriétaire',
plurallabels = 'Propriétaires',
value = 'propriétaire',
wikidata = {property = 'P127'},
},
}}
end
-- Œuvres
function p.works(params)
params = params or {}
local title = params.title or 'Œuvres principales'
params.title = nil
local wikidata = {
excludespecial = true,
numval = 5,
property = 'P800',
defaultlink = 'image',
showdate= true,
labelformat = function(id)
local label = wikidata.getLabel(id)
if label then
if wikidata.isInstance('Q386724', id, 6) then --italique pour les instances d' "œuvre" ou ses sous-classes
if wikidata.isInstance('Q14897293', id, 5) or wikidata.isInstance('Q13226383', id, 5) or wikidata.isInstance('Q3622126', id, 5) or wikidata.isInstance('Q12894677', id, 5) then
--sauf les instances d'"entité fictionnelle", "équipement", "système de concepts", "moyen pour une fin" ou leurs sous-classes
return label
else
return '<i>' .. label .. '</i>'
end
else
return label
end
end
end,
}
for i, j in pairs(params) do
wikidata[i] = j
end
return
{type = 'table', title = title, singulartitle = singulartitle, rows =
{
{
type = 'row',
value = 'œuvres principales',
wikidata = wikidata
}
}
}
end
function p.filmography()
local title = 'Films notables'
return
{type = 'row', label = 'Films notables', value = 'films notables', property = 'P1283'}
end
function p.discography()
local title = 'Discographie'
return
{type = 'row', label = 'Discographie', value = 'discographie', property = 'P358'}
end
-- Signature
function p.signature(default)
local nom = localdata.nom or mw.title.getCurrentTitle().text
local alt = 'siyati ' .. nom
if mw.ustring.match( nom, '^[AEÈÉIOUY]' ) then
alt = "siyati" .. nom
end
return {
type = 'images',
imageparameters = {'siyati'},
defaultimage = default,
captionparameter = 'lejand siyati',
defaultcaption = 'Siyati',
uprightparameter = 'upright signature',
defaultupright = 0.75,
defaultalt = alt,
property = 'P109',
numval = 1
}
end
-- Enregistrement vocal
function p.voice()
return {
type = 'imaj',
style = {['padding-top'] = '25px'},--{['border-width'] = '10px', ['border-style'] = 'solid'},
defaultcaption = 'Anrejistreman vokal',
captionparameter = 'lejand vwa',
imageparameters = 'vwa',
defaultsize = '280',
wikidata = general.selectSound('P990'),
numval = 1,
}
end
-- Site web
p.website = general.website
-- Prononciation
p.prononciation = general.prononciation
-- fête du saint
function p.feast()
local title = 'Fête'
return {type = 'row', label = 'Fête', value = 'fête', wikidata = {property = 'P841' , showqualifiers = 'P276'}}
end
-- archivé par
function p.archivesat()
return {type = 'row', label = 'Archives conservées par', value = "archivé par",
wikidata = {
property = 'P485', conjtype = 'new line',
showqualifiers = {'P217','P7328','P585','P7103','P7104'}, qualifprecision = 'year',
qualifformat = function(statement, qualifs, params) -- basé sur wikidata.getFormattedQualifiers dans [[Module:Wikidata]]
local str = ''
if not params then params = {} end
local qualiftable = wikidata.getQualifiers(statement, qualifs)
if not qualiftable then
return nil
end
qualiftable = wikidata.filterClaims(qualiftable, params) or {}
for i, snak in pairs(qualiftable) do
if (snak.datatype == 'time' and snak.property == 'P7104') then -- fin de période couverte
str = str .. '-'
elseif i > 1 then
str = str .. ', '
end
qualiftable[i] = wikidata.formatSnak(snak, params)
if snak.datatype == 'quantity' and tonumber(snak.datavalue.value.amount) > 1 then -- pluriel
qualiftable[i] = qualiftable[i] .. 's'
end
str = str .. qualiftable[i]
end
return str
end,
showsource = true
}
}
end
return p
3z0howpzozsudtf93jgpirhno6sey07
Module:Infobox/Atis
828
87839
855625
825515
2024-11-12T22:55:42Z
BwaKajou
31668
855625
Scribunto
text/plain
local person = require "Module:Infobox/Fonctions/Personne"
local wikidata = require "Module:Wikidata"
return {
maincolor = '#7DA7D9',
parts = {
person.title('atis'),
person.mainimage('Atik pou ilistre Atis'),
{type = 'table', rows = {
person.birth(),
person.death(),
person.placeofburial(),
person.floruit(),
person.othernames(),
person.nationality(),
--- arrangemement pour le paramètre "autres activités" (obsolète ?)
function ( localdata )
if localdata['lòt aktivite'] then
return {type = 'row', label = 'Aktivite', value = 'aktivite'}
else
return person.occupation()
end
end,
{type = 'row', label = 'lòt aktivite', value = 'lòt aktivite'},
----
person.education(),
person.contacts(),
{type = 'row', label = 'Lye travay', singularlabel = 'Lye travay', plurallabel = 'Lye travay', value = 'lye travay', wikidata = {property = 'P937', showdate = true, sorttype = 'chronological', conjtype = 'comma'}
},
person.movement(),
person.patron(),
person.influencedby(),
person.influenced(),
person.family(),
person.awards(),
person.archivesat(),
person.website(),
}},
person.works({withlink = 'htwiki'}),
{type = 'table', title = 'Konpleman', rows = {
{type = 'row', value = 'konpleman'},
}},
person.signature(),
person.tombe(),
}
}
bim7wl8bnpv7rwqkgbbklx2l1i89u5u
Penti ak lwil
0
88348
855650
828740
2024-11-13T03:03:41Z
Kitanago
19629
855650
wikitext
text/x-wiki
[[Image:Mona_Lisa,_by_Leonardo_da_Vinci,_from_C2RMF_retouched.jpg|vignette|''[[La Joconde]]'', lwil sou panèl bwa, [[Leonardo da Vinci]], anviwon 1503-06, [[Louvre Museum]] ]]
'''Pinti ak lwil''' se yon [[Penti (matyè)|penti]] ki gen [[lyan]] oswa machin ki se yon [[lwil]] [[Sikatif|sikatif]] ki anvlope nèt patikil [[pigman]].
Nou rele tou "penti" travay la nan kouch yon sifas ak sa a kalite pwodwi. Otorite normatif franse yo mande pou nou di ''penti'', men tèm sa a pa janm pran<ref>AFNOR dapre {{harvsp|Béguin|1990|p=348}}.</ref>. "Pinti ak lwil" se pou sa tou aktivite a nan anpil [[pent|atis penti]] pase ak prezan, osi byen ke yon [[teknik imaj]].
Finalman, yon "penti ak lwil" se yon [[Tablo (boza)|tablo]] ki pentire ak teknik sa a.
== Istwa ==
Malgre jodi a, penti ak lwil refere sèlman a sa a {{sitasyon|ki gen lyan ki konpoze sèlman ak lwil gra<ref>Fransè estanda T 30.001 te site pa {{harvsp|Béguin|1990|p=348 "Lwil (penti dlo)"}} .</ref>}}, nan tan lontan, mo "lwil" te deziyen tou de "fiks" oswa lwil gra ak sa yo rele "esansyèl" oswa temèt lwil ke nou rele [[Esans (chimi)|esans]]. "Lwil" nan penti a ta ka nenpòt kalite lyan ki pa akeuz<ref>{{harvsp|Pracontal|2008|p=168}}; wè ankò {{Ouvraj|prenon1=Antoine|ti non1=Furetière|otè lyen1=Antoine Furetière|title=Diksyonè Universal|volume=2|editè=|ane=1701|li sou entènèt=https://gallica.bnf.fr/ ark:/12148/bpt6k5542578m/f531}}.</ref>. Enterè lwil oliv gra ak divès kalite [[Resin (penti)|rezin]] pou penti yo te konnen osi bonè ke {{s-|X}} la, men itilizasyon difisil li yo, konsistans nan penti a, nesesite pou tann yon anpil tan ant chak kouch, yo te opoze ak itilizasyon li yo.
[[Giorgio Vasari|Vasari]] atribiye envansyon penti lwil oliv ak pent Flamand [[Jan van Eyck]] (1390-1441)<ref>''Lavi'', 1550, apre {{ harvsp|Béguin|1990| p=350sq}}.</ref>, ki te swiv pa anpil lòt otè<ref>{{harvsp|Pil|1766|p=15}} (1684); {{harvsp|Mérimée|1830|p=1}} deja gen dout, gade tou {{harvsp|Béguin|1990|p=351}}.</ref>. Li sèten ke pwosesis la te egziste anvan li. Mwàn [[Theophilus Presbyter]] mansyone difikilte li nan {{s-|XI}}. Van Eyck te amelyore li nan konbine rezin transparan, dirab ak fleksib ak lwil oliv, ki mennen nan adopsyon toupatou li yo<ref>{{harvsp|Langlais|2011|p=29}}</ref>. Pwosesis sa a te fè li posib pou sèvi ak lwil oliv pou komisyon alontèm, epi pita pou pentire sou twal lonje sou yon ankadreman epi yo pa sou panèl ankò<ref name="Langlais">{{harvsp|Langlais|2011|p={{ refins}}}}</ref>. Li posib ke modèl oriental lak Chinwa te enfliyanse atis Ewopeyen yo<ref>{{harvsp|Béguin|1990|p=351}}.</ref>.
Aparisyon penti lwil oliv nan Lwès la te gradyèl. Pent medyeval yo te itilize [[tanpera]] ke yo pafwa kouvri ak yon kouch lwil pwoteksyon. Pandan jenerasyon yo, kouch lwil oliv sa a piti piti te vin chaje ak pigman, bay sa ki ka dekri kòm premye glase a. Nou jwenn tou "tanpera" sa a nan penti frè Van Eyck yo, anba kouch inonbrabl nan glase. Panno yo te gen entansyon pentire yo te enpreye ak plizyè kouch lakòl ak kouch, lè bwa a te enpafè, ki te souvan ka a nan peyi sid yo (Itali, Espay); yo te deja [[Marouflage|marouflage]] ak yon twal fin pou yo limite efè ekspansyon oswa retraksyon bwa a.
== Konpozisyon ==
[[Image:Oil painting palette.jpg|vignette|150px|Palèt pentire ak lwil la]]
Koulè lwil yo konpoze de pigman ki fòme materyèl ki gen koulè pal ak yon lyan ki konpoze de grenn len pirifye oswa lwil popsicle ki mare ak aglomera yo. Mens oswa sòlvan pou penti ak lwil se [[terebantin]] oswa [[gazolin sentetik|espri petwòl]] (oswa ekivalan modèn ki pa alèjik).
Lwil yo itilize se jeneralman [[lwil len]] oswa [[lwil len|lwil oeillete]], oswa menm [[lwil carthame]] oswa [[lwil zanmann|lwil nwa]]. Ki sa nou rele "seche" se an reyalite yon fenomèn sikativasyon oswa [[Oksidasyon-rediksyon|reyaksyon oksidasyon]] nan lwil la, ki polymerize ak vin di, san yo pa chanje aparans nan travay la, epi nan kèk fason, pyèj pigman yo. epi li pèmèt konsèvasyon penti<ref>{{harvsp|Langlais||2011|p=150}}.</ref>.
Penti lwil oliv se yon teknik siye dousman (nou ta dwe di siccative), kontrèman ak [[penti akrilik]] oswa [[akwarèl]], ki se teknik akeuz. Espesyalite sa a pèmèt atis la pran tan pou melanje koulè li yo, refè yon erè epi retravay modèl li pandan plizyè jou jiskaske li jwenn melanj la, fòm nan fòm, manyen li anvi.
Sibstans ki vize pou akselere siye, pafwa toksik tankou plon blan, ta ka ajoute nan lwil natirèl siye. Frè van Eyck yo te kreye<ref name=":0">{{Ouvraj|prenon1=Gombrich, Ernst Hans,|ti non1=1909-|title=Istwa atizay|piblikatè=Phaidon|ane=2001|isbn=0 -7148-9207-6|oclc=300468076|li sou entènèt=https://www.worldcat.org/oclc/300468076}}</ref> teknik ki konbine rezin transparan, dirab ak fleksib ak lwil oliv.
Li posib tou pou jwenn efè materyèl oswa soulajman ak yon keratin san patipri konsistan. Sèvi ak yon [[Spatula (penti)|spatula]] yo rele tou [[kouto penti|kouto]] pèmèt ou jwenn soulajman epi konsa ogmante materyèl travay la.
Konsistans nan keratin nan ka amelyore lè yo ajoute medyòm penti, tèt yo te fè soti nan lyan an (lwil oliv) ak sòlvan (petrol) nan ki, si sa nesesè, yo ajoute yon résine amelyore fleksibilite nan fim nan. Mwayen an fè materyèl la pi pèrmeabl ak Se poutèt sa pi fasil yo gaye. Prezans rezin pa chanje non komen "penti ak lwil"<ref>{{harvsp|Béguin|1990|p=348 "lwil(penti ak lwil)"}}.</ref >.
== Travay ==
[[File:Las_Meninas,_by_Diego_Velázquez,_from_Prado_in_Google_Earth.jpg|vignette|dwat|''[[Las Meninas]]'' ([[Diego Vélasquez|Velasquez]]) [[1656]]-[[1657]] ({{dunité|318|276|cm}}) [[Prado Museum]], [[Madrid]].]]
Teknik la te rete san okenn chanjman pou yon tan long: pent la te trase konpozisyon li sou twal la oswa sou panèl an kwiv oswa an bwa ki prepare epi apre yon posib [[gri]], te monte sijè li a ak koulè lwil oliv, nan kouch mens , bay efè a. nan limyè atravè jwèt la nan lonbraj ak refleksyon. Lè sa a, yon fwa premye kouch sa yo te fin sèk, li kouvri yo ak tente, ekla transparan, ki amonize koloran jeneral la. Tout bagay la te fòme yon sifas ki trè lis, tankou yon twal lwil.
Lè sa a, teknik la evolye, depi nan fen Renesans la, pent kòmanse fè eksperyans ak keratin yo nan lòd yo aksantué limyè yo pa ba yo, pou egzanp, plis epesè. Pwosesis sa a te vin jeneral ak nouvo teknik te fèt: penti nan keratin konplè, pa manyen, pa manyen separe, avèk oswa san trase preparasyon. Pent [[barok]] yo ([[Pierre Paul Rubens|Rubens]], [[Antoine van Dyck|Van Dyck]]) answit [[rokoko]] ([[François Boucher|Boucher]], [[Jean- Honoré Fragonard|Fragonard]]) ak Romantik yo ([[Eugène Delacroix|Delacroix]], [[Théodore Géricault|Géricault]]) te konnen kòman pou yo byen eksplwate ekriti lespri sa a ki opoze yon fason ki pi dous ak "poli" pou trete sijè a ( [[penti neo-klasik]], [[style ponpye]], [[Surrealism|surrealis]]). Penti lwil oliv gen patikilye nan pèmèt tou de apwòch, nan mitan lòt moun.
== Bibliyografi ==
=== Liv modèn ===
<!-- Nan lòd alphabétique otè yo -->
* {{Ouvraj|prénom1=André|nom1=Béguin|lien auteur1=André Béguin|titre=Dictionnaire technique de la peinture|éditeur=|année=1990|isbn=}} notamment « Huile (peinture à l'~) », pp. 348~380.
* {{Ouvraj|prénom1=Xavier de|nom1=Langlais|lien auteur1=Xavier de Langlais|titre=La technique de la peinture à l'huile : histoire du procédé à l'huile, de Van Eyck à nos jours : éléments, recettes et manipulations : pratique du métier : suivie d'une étude sur la peinture acrylique|éditeur=[[Groupe Flammarion|Flammarion]]|année=|année première édition=1959|réimpression=2011|isbn=978-2-08-125821-1|isbn2=2-08-125821-8|oclc=800485280|présentation en ligne=https://www.worldcat.org/oclc/800485280}}
* {{Ouvraj|prénom1=Jacques|nom1=Maroger|lien auteur1=Jacques Maroger|préface=Marc Havel|titre=À la recherche des secrets des grands peintres|lieu=Paris|éditeur=Dessain et Tolra|année=1986|année première édition=1948|isbn=}}
* {{Ouvraj |prénom1=Jean |nom1=Petit |prénom2=Jacques |nom2=Roire |prénom3=Henri |nom3=Valot |titre=Encyclopédie de la peinture |sous-titre=formuler, fabriquer, appliquer |tome=1 |lieu=Puteaux |éditeur=EREC |année=1999 |isbn= |id=PRV1}}
* {{Ouvraj|prénom1=Jean |nom1=Petit |prénom2=Jacques |nom2=Roire |prénom3=Henri |nom3=Valot |titre=Encyclopédie de la peinture |sous-titre=formuler, fabriquer, appliquer |tome=2 |lieu=Puteaux |éditeur=EREC |année=2001 |isbn= |id=PRV2}}
* {{Ouvraj|prénom1=Jean |nom1=Petit |prénom2=Jacques |nom2=Roire |prénom3=Henri |nom3=Valot |titre=Encyclopédie de la peinture |sous-titre=formuler, fabriquer, appliquer |tome=3 |lieu=Puteaux |éditeur=EREC |année=2005 |isbn= |id=PRV3}}
* {{Ouvraj|prénom1=Patrice de|nom1=Pracontal|titre=Lumiere, matiere et pigment : Principes et techniques des procédés picturaux|éditeur=Gourcuff-Gradenigo|année=2008|isbn=}}
=== Liv istorik ===
<!-- pa ane premye [piblikasyon yo -->
* {{Ouvraj|prénom1=Roger de|nom1=Piles|lien auteur1=Roger de Piles|titre=Elemens de peinture pratique|sous-titre=Nouvelle édition entièrement refondue et augmentée considérablement par [[Charles-Antoine Jombert]]|lieu=Paris|éditeur=|année=1766|lire en ligne=https://gallica.bnf.fr/ark:/12148/bpt6k6554237r?rk=386268}}
* {{Ouvraj|prénom1=Jean Félix|nom1=Watin|titre=L'art du peintre|sous-titre=doreur, vernisseur , ouvrage utile aux artistes et aux amateurs qui veulent entreprendre de peindre, dorer et vernir toutes sortes de sujets en bâtimens, meubles, bijoux, equipages,{{elatriye}} |lieu=Paris|éditeur=|année=1773|numéro d'édition=2|année première édition=1772|lire en ligne=https://gallica.bnf.fr/ark:/12148/bpt6k841821?rk=64378;0}}
* {{Ouvraj|prénom1=Jean-François-Léonor|nom1=Mérimée|lien auteur1=Léonor Mérimée|titre=De la peinture à l'huile, ou Des procédés matériels employés dans ce genre de peinture, depuis Hubert et Jean Van-Eyck jusqu'à nos jours|lieu=Paris|éditeur=Mme Huzard|année=1830|lire en ligne=https://gallica.bnf.fr/ark:/12148/bpt6k6552355d}}.
* {{atik|prénom=Michel-Eugène|nom=Chevreul |lien auteur1=Michel-Eugène Chevreul |titre=Recherches expérimentales sur la peinture à l'huile |périodique=Mémoires de l'Académie des sciences de l'Institut de France |lieu=Paris |année=1850 |lire en ligne=https://gallica.bnf.fr/ark:/12148/bpt6k3236r/f841}}.
=== Lyen deyò===
{{Lòt pwojè
|Commons=Category:Oil paint
|wiktionary=peinture à l’huile
}}
* {{Lien web |prénom1=Hélène |nom1=Pasco |titre=Expérimentations en peinture à l’huile : l’exemple des médiums gels au {{s-|XIX}} |url=https://culturesciences.chimie.ens.fr/thematiques/chimie-analytique/spectroscopies/experimentations-en-peinture-a-l-huile-l-exemple-des |accès url=libre |site=Culture Sciences Chimie |date=20 janvye 2018 |consulté le=25 janvye 2022}}
==Referans==
{{Références}}
[[Kategori:Teknik penti]]
[[Kategori:Pwojè:Krepisaj Wikipedya]]
sl0la4l4ti0l0p7plwy55ds0gajju2o
Modèl:Langue de titre
10
89458
855599
838889
2024-11-12T17:28:12Z
BwaKajou
31668
855599
wikitext
text/x-wiki
<includeonly>{{DISPLAYTITLE:<span lang="{{{langue|{{{1|}}}}}}">{{FULLPAGENAME}}</span>|noerror}}{{#if:{{NAMESPACE}}||{{#switch:{{{langue|{{{1|}}}}}}||lat|mul|und|gr|gr-Latn|gr-latn|lu|jp|dk|oci=[[Kategori:Page avec code de langue invalide|T]]|ht=[[Kategori:Page avec modèle Langue du titre inutile]]}}}}<nowiki /></includeonly><noinclude>{{Documentation}}</noinclude>
huo8jjj97lq8bun3x1hklh62yduvanr
Natacha Ratto
0
93528
855614
854715
2024-11-12T18:49:23Z
BwaKajou
31668
855614
wikitext
text/x-wiki
{{Infobox Biyografi}}Apre li te etidye achitekti, Natacha Ratto pibliye kèk bann sou Instagram ki te mete aksan sou aplikasyon an. Piblikatè a Webtoon remake yo, ki gen plan pou yo rete an Frans epi kontakte li. Natacha Ratto<ref>{{Cite web|url=https://www.ouest-france.fr/pays-de-la-loire/les-sables-dolonne-85100/les-sables-d-olonne-a-26-ans-sa-premiere-bande-dessinee-seduit-sur-la-plateforme-webtoon-7083458|title=Les Sables-d’Olonne. À 26 ans, sa première bande dessinée séduit sur la plateforme Webtoon|last=BURBAN|first=Thibault|date=2020-12-12|website=Ouest-France.fr|language=fr|access-date=2024-09-23}}</ref>, ap devlope seri li ''[[wikidata:Q120728189|Sex, Drugs & RER]]'', ki pibliye sou Webtoon apati mwa mas 2020 epi ki gen 138 epizòd. Se yon siksè : mitan-2023, li gen 21 milyon opinyon.
== Nòt ak referans yo ==
=== Nòt yo ===
{{Referans}}
* {{Cite web|url=https://www.webtoons.com/fr/comedy/sexdrugsrer/list?title_no=1937|title=Sex, drugs & RER|last=Natacha Ratto|publisher=[[Webtoon (plateforme)|Webtoon]]|language=fr|access-date=18 juillet 2023}}
* Thelma Susbielle, « Sex Drugs et RER - Par Natacha Ratto - Webtoon.com », ActuaBD, 14 janvier 2022 (lire en ligne, consulté le 21 juillet 2023).
* Tessa Lanney, « "Sex, drugs & RER" sur Webtoon, une BD inclusive et nuancée », Têtu, 23 juin 2021 (ISSN 1265-3578, lire en ligne, consulté le 21 juillet 2023).
t0k10upiu0v2k2z13yoclinm3h1uo9z
Modèl:Infobox atizay
10
93547
855576
854818
2024-11-12T13:54:52Z
BwaKajou
31668
855576
wikitext
text/x-wiki
<templateStyles src="Common/Style.css">
{{#invoke:Infobox|build|nom=Art}}{{Infobox en Lua|Art}}</includeonly><noinclude>{{Documentation}}</noinclude>
6lq49v8n2rndoezlw03c0fx9coztr8n
855585
855576
2024-11-12T15:20:00Z
BwaKajou
31668
855585
wikitext
text/x-wiki
{{#invoke:Infobox|build|nom=Art}}{{Infobox en Lua|Art}}</includeonly><noinclude>{{Documentation}}</noinclude>
eitlwfnqwjovrfcftwamgof6271qr0f
Module:Infobox/Art
828
93548
855628
854819
2024-11-12T23:07:15Z
BwaKajou
31668
855628
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
local geoloc = require 'Module:Infobox/Fonctions/Géolocalisation'
local general = require 'Module:Infobox/Fonctions'
local owner = require 'Module:Propriétaire'
local material = require 'Module:Matériau'
local linguistic = require 'Module:Linguistique'
local protected = require 'Module:Classement'
local wikidata = require 'Module:Wikidata'
local linktopic = 'nan atizay plastik'
local function dimensions( localdata )
local dimensions = {
-- paramètre, abréviation à afficher dans l'en tête, propriété Wikidata, nom complet à afficher dans l'entête
{'dyamèt', 'Diam', 'P2386', 'Dyamèt'},
{ 'hauteur', 'H', 'P2048', 'Wotè'},
{'lajè', 'L', 'P2049', 'Lajè'},
{'pwofondè', 'l', 'P2610' , 'Pwofondè'},
}
local data, dims = {}, {}
local label = 'Dimansyon'
local unit = localdata['unité'] or 'cm'
local wikidataval = function(d)
return wikidata.formatStatements{
entity = localdata.item,
showunit = '-',
targetunit = unit,
addcat = true,
property = d
}
end
local propertyused = nil
for i, j in pairs(dimensions) do
local val = localdata[j[1]]
if localdata.item and j[3] and not val then
val = wikidataval(j[3])
if val then
propertyused = j[3]
end
end
if val then
table.insert(data, val)
table.insert(dims, i)
end
end
if #data == 0 then
return nil
end
if #data == 1 then
label = dimensions[dims[1]][4]
else
for i, j in pairs(dims) do dims[i] = dimensions[j][2] end
label = label .. linguistic.inparentheses(linguistic.conj(dims, ' × '))
end
local val = linguistic.conj(data, ' × ') .. ' ' .. unit
if propertyused then
val = wikidata.formatAndCat{entity = localdata.item, property = propertyused, value = val}
end
return {
type = 'row',
label = label,
value = function() return val end
}
end
return {
maincolor = '#f9f9f9',
parts = {
{
type = 'title',
value = function(localdata)
return localdata['titre']
or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
or mw.title.getCurrentTitle().text
end,
subtitle = 'titre original',
italic = true,
setdisplaytitle = true,
},
general.mainimage( { cat = "Article à illustrer Art",
defaultimage = nil,
wikidata = {property = {'P18', 'P5252', 'P7420'}}
} ),
{type = 'table', rows = {
{
type = 'row',
label = 'Artiste',
plurallabel = 'Artistes',
value = 'artiste',
wikidata = {
property = 'P170',
statementformat = function(statement)
local str
-- On commence par les qualificatifs (attribué à, atelier etc.)
local possiblequalifiers = {
P1773 = "attribué $to $creator",
P1774 = "atelier $of $creator",
P1775 = "suiveur $of $creator",
P1776 = "cercle $of $creator",
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1778 = "faux d'après $creator",
P1779 = "$creator (?)",
P1780 = "école $of",
P1877 = "d'après une œuvre $of $creator",
}
if statement.qualifiers then
for qualif, text in pairs(possiblequalifiers) do
local creator = wikidata.getFormattedQualifiers(statement, {qualif})
if creator then
str = text
str = mw.ustring.gsub(str, '$to $creator', "à ".. creator)
str = mw.ustring.gsub(str, '$of $creator', linguistic.of(creator))
str = mw.ustring.gsub(str, '$creator', creator)
break
end
end
end
-- TODO : prendre en compte tous les qualificatifs pour une même déclaration, exemple [[Galate mourant]]
-- Sinon, la voie normale
if not str then
str = wikidata.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
end
return str
end
}
},
{
type = 'row',
label = 'Date',
value = 'année',
wikidata = {
property = 'P571',
showqualifiers = {'P518'},
linktopic = linktopic,
sorttype = 'chronological',
conjtype = function()
if wikidata.getClaims{entity = item, property = 'P571', qualifier = {'P518'}} then
return "new line"
else
return "or"
end
end
}
},
{
type = 'row',
label = 'Civilisation',
plurallabel = 'Civilisations',
value = 'civilisation',
property = 'P2596'
},
{
type = 'row',
label = 'Commanditaire',
plurallabel = 'Commanditaires',
value = 'commanditaire',
property = 'P88'
},
{
type = 'row',
label = 'Type',
value = 'type',
property = 'P136',
},
{
type = 'row',
label = 'Technique',
plurallabel= 'Techniques',
value = 'technique',
property = 'P2079'
},
{
type = 'row',
label = 'Matériau',
value = function( localdata )
if localdata['type'] or localdata['technique'] then -- la matériau est parfois contenu dans le paramètre "type", ne pas utiliser wikidata dans ce cas
return nil
end
return material.formatFromItem(localdata.item)
end
},
{
type = 'row',
label = 'Point de vue',
plurallabel = 'Points de vue',
value = 'point de vue',
property = 'P7108'
},
{
type = 'row',
label = 'Lieu de création',
plurallabel = 'Lieux de création',
value = 'lieu de création',
property = 'P1071'
},
dimensions,
{
type = 'row',
label = 'Format',
value = 'format',
property = 'P1419',
},
{
type = 'row',
label = 'Étude pour',
value = 'étude pour',
property = 'P6606',
valueClass = 'italique',
},
{
type = 'row',
label = 'Inspiration',
value = 'inspiration',
wikidata ={property = 'P941' , conjtype="new line"},
},
{
type = 'row',
label = 'Série',
plurallabel = 'Séries',
value = 'série',
property = 'P179',
valueClass = 'italique',
},
{
type = 'row',
label = 'Pendant',
plurallabel = 'Pendants',
value = 'pendant',
property = 'P1639',
valueClass = 'italique',
},
{
type = 'row',
label = 'Verso',
value = 'verso',
wikidata = {property = {'P2681', 'P2682'}},
valueClass = 'italique',
},
{
type = 'row',
label = 'Mouvement',
plurallabel = 'Mouvements',
value = function(localdata) return localdata['mouvement'] or localdata['style'] end,
property = 'P135',
},
{
type = 'row',
label = 'Propriétaire',
plurallabel = 'Propriétaires',
value = 'propriétaire',
wikidata = function() return owner.formatFromItem(item, {atdate = 'today'}) end
},
{
type = 'row',
label = 'Collection',
plurallabel = 'Collections',
value = 'collection'
},
{
type = 'row',
label = '<abbr class="abbr" title="Numéro">N<sup>o</sup></abbr> d’inventaire',
value = 'inventaire',
property = 'P217'
},
{
type = 'row',
label = 'Localisation',
value = function(localdata)
local museum, location, city, country = localdata['musée'], localdata['localisation'], localdata['ville'], localdata['pays']
location = linguistic.conj({museum, location, city}, 'comma')
if location == '-' then
-- désactivation de l'utilisation de wikidata (car il ne faut pas d'espace après)
return '-'
end
country = linguistic.inparentheses(country)
if country then country = '<span class="nowrap">' .. country .. '</span>' end
if location or country then
return (location or '') .. ' ' .. (country or '')
end
return nil
end,
property = 'P276' -- devrait croiser P195 et utiliser l'arbitrary access pour le lieu
},
{
type = 'row',
label = 'Modèle',
plurallabel = 'Modèles',
value = 'modèle',
property = 'P2634'
},
--[[
{
type = 'row',
label = 'Représente',
value = 'représente',
wikidata = {property = 'P180', numval = '4', rank = 'best'}
},
]]--
{
type = 'row',
label = 'Inscription',
plurallabel = 'Inscriptions',
value = 'inscription',
wikidata = {property = 'P1684', conjtype = '<br />', numval = '3', rank = 'best'}
},
{
type = 'row',
label = 'Commentaire',
value = 'commentaire',
},
{
type = 'row',
label = 'Protection',
value = function(localdata) return localdata['protection'] or localdata['classement'] end,
wikidata = function(item) return protected.formattedList(item)end
},
geoloc.coordinates{maintenancecat = "Œuvre d'art géolocalisable sans coordonnées paramétrées"},
}},
geoloc.geoloc('default', '-'), -- le '-' indique de ne pas chercher automatiquement une carte si aucune n'est fournie dans |géolocalisation=
}
}
bdsgtj0d6fhiefy3u5o37in0b0iprro
855629
855628
2024-11-12T23:09:41Z
BwaKajou
31668
855629
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
local geoloc = require 'Module:Infobox/Fonctions/Géolocalisation'
local general = require 'Module:Infobox/Fonctions'
local owner = require 'Module:Propriétaire'
local material = require 'Module:Matériau'
local linguistic = require 'Module:Linguistique'
local protected = require 'Module:Classement'
local wikidata = require 'Module:Wikidata'
local linktopic = 'nan atizay plastik'
local function dimensions( localdata )
local dimensions = {
-- paramètre, abréviation à afficher dans l'en tête, propriété Wikidata, nom complet à afficher dans l'entête
{'dyamèt', 'Diam', 'P2386', 'Dyamèt'},
{ 'wotè', 'H', 'P2048', 'Wotè'},
{'lajè', 'L', 'P2049', 'Lajè'},
{'pwofondè', 'l', 'P2610' , 'Pwofondè'},
}
local data, dims = {}, {}
local label = 'Dimansyon'
local unit = localdata['unité'] or 'cm'
local wikidataval = function(d)
return wikidata.formatStatements{
entity = localdata.item,
showunit = '-',
targetunit = unit,
addcat = true,
property = d
}
end
local propertyused = nil
for i, j in pairs(dimensions) do
local val = localdata[j[1]]
if localdata.item and j[3] and not val then
val = wikidataval(j[3])
if val then
propertyused = j[3]
end
end
if val then
table.insert(data, val)
table.insert(dims, i)
end
end
if #data == 0 then
return nil
end
if #data == 1 then
label = dimensions[dims[1]][4]
else
for i, j in pairs(dims) do dims[i] = dimensions[j][2] end
label = label .. linguistic.inparentheses(linguistic.conj(dims, ' × '))
end
local val = linguistic.conj(data, ' × ') .. ' ' .. unit
if propertyused then
val = wikidata.formatAndCat{entity = localdata.item, property = propertyused, value = val}
end
return {
type = 'row',
label = label,
value = function() return val end
}
end
return {
maincolor = '#f9f9f9',
parts = {
{
type = 'title',
value = function(localdata)
return localdata['tit']
or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
or mw.title.getCurrentTitle().text
end,
subtitle = 'tit orijinal',
italic = true,
setdisplaytitle = true,
},
general.mainimage( { cat = "Atik pou ilistre Atizay",
defaultimage = nil,
wikidata = {property = {'P18', 'P5252', 'P7420'}}
} ),
{type = 'table', rows = {
{
type = 'row',
label = 'Atis',
plurallabel = 'Atis',
value = 'atis',
wikidata = {
property = 'P170',
statementformat = function(statement)
local str
-- On commence par les qualificatifs (attribué à, atelier etc.)
local possiblequalifiers = {
P1773 = "attribué $to $creator",
P1774 = "atelier $of $creator",
P1775 = "suiveur $of $creator",
P1776 = "cercle $of $creator",
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1778 = "faux d'après $creator",
P1779 = "$creator (?)",
P1780 = "école $of",
P1877 = "d'après une œuvre $of $creator",
}
if statement.qualifiers then
for qualif, text in pairs(possiblequalifiers) do
local creator = wikidata.getFormattedQualifiers(statement, {qualif})
if creator then
str = text
str = mw.ustring.gsub(str, '$to $creator', "à ".. creator)
str = mw.ustring.gsub(str, '$of $creator', linguistic.of(creator))
str = mw.ustring.gsub(str, '$creator', creator)
break
end
end
end
-- TODO : prendre en compte tous les qualificatifs pour une même déclaration, exemple [[Galate mourant]]
-- Sinon, la voie normale
if not str then
str = wikidata.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
end
return str
end
}
},
{
type = 'row',
label = 'Dat',
value = 'ane',
wikidata = {
property = 'P571',
showqualifiers = {'P518'},
linktopic = linktopic,
sorttype = 'chronological',
conjtype = function()
if wikidata.getClaims{entity = item, property = 'P571', qualifier = {'P518'}} then
return "new line"
else
return "or"
end
end
}
},
{
type = 'row',
label = 'Civilisation',
plurallabel = 'Civilisations',
value = 'civilisation',
property = 'P2596'
},
{
type = 'row',
label = 'Commanditaire',
plurallabel = 'Commanditaires',
value = 'commanditaire',
property = 'P88'
},
{
type = 'row',
label = 'Type',
value = 'type',
property = 'P136',
},
{
type = 'row',
label = 'Technique',
plurallabel= 'Techniques',
value = 'technique',
property = 'P2079'
},
{
type = 'row',
label = 'Matériau',
value = function( localdata )
if localdata['type'] or localdata['technique'] then -- la matériau est parfois contenu dans le paramètre "type", ne pas utiliser wikidata dans ce cas
return nil
end
return material.formatFromItem(localdata.item)
end
},
{
type = 'row',
label = 'Point de vue',
plurallabel = 'Points de vue',
value = 'point de vue',
property = 'P7108'
},
{
type = 'row',
label = 'Lieu de création',
plurallabel = 'Lieux de création',
value = 'lieu de création',
property = 'P1071'
},
dimensions,
{
type = 'row',
label = 'Format',
value = 'format',
property = 'P1419',
},
{
type = 'row',
label = 'Étude pour',
value = 'étude pour',
property = 'P6606',
valueClass = 'italique',
},
{
type = 'row',
label = 'Inspiration',
value = 'inspiration',
wikidata ={property = 'P941' , conjtype="new line"},
},
{
type = 'row',
label = 'Série',
plurallabel = 'Séries',
value = 'série',
property = 'P179',
valueClass = 'italique',
},
{
type = 'row',
label = 'Pendant',
plurallabel = 'Pendants',
value = 'pendant',
property = 'P1639',
valueClass = 'italique',
},
{
type = 'row',
label = 'Verso',
value = 'verso',
wikidata = {property = {'P2681', 'P2682'}},
valueClass = 'italique',
},
{
type = 'row',
label = 'Mouvement',
plurallabel = 'Mouvements',
value = function(localdata) return localdata['mouvement'] or localdata['style'] end,
property = 'P135',
},
{
type = 'row',
label = 'Propriétaire',
plurallabel = 'Propriétaires',
value = 'propriétaire',
wikidata = function() return owner.formatFromItem(item, {atdate = 'today'}) end
},
{
type = 'row',
label = 'Collection',
plurallabel = 'Collections',
value = 'collection'
},
{
type = 'row',
label = '<abbr class="abbr" title="Numéro">N<sup>o</sup></abbr> d’inventaire',
value = 'inventaire',
property = 'P217'
},
{
type = 'row',
label = 'Localisation',
value = function(localdata)
local museum, location, city, country = localdata['musée'], localdata['localisation'], localdata['ville'], localdata['pays']
location = linguistic.conj({museum, location, city}, 'comma')
if location == '-' then
-- désactivation de l'utilisation de wikidata (car il ne faut pas d'espace après)
return '-'
end
country = linguistic.inparentheses(country)
if country then country = '<span class="nowrap">' .. country .. '</span>' end
if location or country then
return (location or '') .. ' ' .. (country or '')
end
return nil
end,
property = 'P276' -- devrait croiser P195 et utiliser l'arbitrary access pour le lieu
},
{
type = 'row',
label = 'Modèle',
plurallabel = 'Modèles',
value = 'modèle',
property = 'P2634'
},
--[[
{
type = 'row',
label = 'Représente',
value = 'représente',
wikidata = {property = 'P180', numval = '4', rank = 'best'}
},
]]--
{
type = 'row',
label = 'Inscription',
plurallabel = 'Inscriptions',
value = 'inscription',
wikidata = {property = 'P1684', conjtype = '<br />', numval = '3', rank = 'best'}
},
{
type = 'row',
label = 'Commentaire',
value = 'commentaire',
},
{
type = 'row',
label = 'Protection',
value = function(localdata) return localdata['protection'] or localdata['classement'] end,
wikidata = function(item) return protected.formattedList(item)end
},
geoloc.coordinates{maintenancecat = "Œuvre d'art géolocalisable sans coordonnées paramétrées"},
}},
geoloc.geoloc('default', '-'), -- le '-' indique de ne pas chercher automatiquement une carte si aucune n'est fournie dans |géolocalisation=
}
}
75u6vxpba1nfjtkapfmn6ahfy44ouae
855630
855629
2024-11-12T23:13:47Z
BwaKajou
31668
855630
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
local geoloc = require 'Module:Infobox/Fonctions/Géolocalisation'
local general = require 'Module:Infobox/Fonctions'
local owner = require 'Module:Propriétaire'
local material = require 'Module:Matériau'
local linguistic = require 'Module:Linguistique'
local protected = require 'Module:Classement'
local wikidata = require 'Module:Wikidata'
local linktopic = 'nan atizay plastik'
local function dimensions( localdata )
local dimensions = {
-- paramètre, abréviation à afficher dans l'en tête, propriété Wikidata, nom complet à afficher dans l'entête
{'dyamèt', 'Diam', 'P2386', 'Dyamèt'},
{ 'wotè', 'H', 'P2048', 'Wotè'},
{'lajè', 'L', 'P2049', 'Lajè'},
{'pwofondè', 'l', 'P2610' , 'Pwofondè'},
}
local data, dims = {}, {}
local label = 'Dimansyon'
local unit = localdata['unité'] or 'cm'
local wikidataval = function(d)
return wikidata.formatStatements{
entity = localdata.item,
showunit = '-',
targetunit = unit,
addcat = true,
property = d
}
end
local propertyused = nil
for i, j in pairs(dimensions) do
local val = localdata[j[1]]
if localdata.item and j[3] and not val then
val = wikidataval(j[3])
if val then
propertyused = j[3]
end
end
if val then
table.insert(data, val)
table.insert(dims, i)
end
end
if #data == 0 then
return nil
end
if #data == 1 then
label = dimensions[dims[1]][4]
else
for i, j in pairs(dims) do dims[i] = dimensions[j][2] end
label = label .. linguistic.inparentheses(linguistic.conj(dims, ' × '))
end
local val = linguistic.conj(data, ' × ') .. ' ' .. unit
if propertyused then
val = wikidata.formatAndCat{entity = localdata.item, property = propertyused, value = val}
end
return {
type = 'row',
label = label,
value = function() return val end
}
end
return {
maincolor = '#f9f9f9',
parts = {
{
type = 'title',
value = function(localdata)
return localdata['tit']
or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
or mw.title.getCurrentTitle().text
end,
subtitle = 'tit orijinal',
italic = true,
setdisplaytitle = true,
},
general.mainimage( { cat = "Atik pou ilistre Atizay",
defaultimage = nil,
wikidata = {property = {'P18', 'P5252', 'P7420'}}
} ),
{type = 'table', rows = {
{
type = 'row',
label = 'Atis',
plurallabel = 'Atis',
value = 'atis',
wikidata = {
property = 'P170',
statementformat = function(statement)
local str
-- On commence par les qualificatifs (attribué à, atelier etc.)
local possiblequalifiers = {
P1773 = "attribué $to $creator",
P1774 = "atelier $of $creator",
P1775 = "suiveur $of $creator",
P1776 = "cercle $of $creator",
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1778 = "faux d'après $creator",
P1779 = "$creator (?)",
P1780 = "école $of",
P1877 = "d'après une œuvre $of $creator",
}
if statement.qualifiers then
for qualif, text in pairs(possiblequalifiers) do
local creator = wikidata.getFormattedQualifiers(statement, {qualif})
if creator then
str = text
str = mw.ustring.gsub(str, '$to $creator', "à ".. creator)
str = mw.ustring.gsub(str, '$of $creator', linguistic.of(creator))
str = mw.ustring.gsub(str, '$creator', creator)
break
end
end
end
-- TODO : prendre en compte tous les qualificatifs pour une même déclaration, exemple [[Galate mourant]]
-- Sinon, la voie normale
if not str then
str = wikidata.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
end
return str
end
}
},
{
type = 'row',
label = 'Dat',
value = 'ane',
wikidata = {
property = 'P571',
showqualifiers = {'P518'},
linktopic = linktopic,
sorttype = 'chronological',
conjtype = function()
if wikidata.getClaims{entity = item, property = 'P571', qualifier = {'P518'}} then
return "new line"
else
return "or"
end
end
}
},
{
type = 'row',
label = 'Sivilizasyon',
plurallabel = 'Sivilizasyon',
value = 'sivilizasyon',
property = 'P2596'
},
{
type = 'row',
label = 'Kòmanditè',
plurallabel = 'Kòmanditè',
value = 'kòmanditè',
property = 'P88'
},
{
type = 'row',
label = 'Type',
value = 'type',
property = 'P136',
},
{
type = 'row',
label = 'Teknik',
plurallabel= 'Teknik',
value = 'teknik',
property = 'P2079'
},
{
type = 'row',
label = 'Materyo',
value = function( localdata )
if localdata['type'] or localdata['teknik'] then -- la matériau est parfois contenu dans le paramètre "type", ne pas utiliser wikidata dans ce cas
return nil
end
return material.formatFromItem(localdata.item)
end
},
{
type = 'row',
label = 'Pwennvi',
plurallabel = 'Pwennvi',
value = 'pwennvi',
property = 'P7108'
},
{
type = 'row',
label = 'Lye kreyasyon',
plurallabel = 'Lye kreyasyon',
value = 'lye kreyasyon',
property = 'P1071'
},
dimensions,
{
type = 'row',
label = 'Fòma',
value = 'fòma',
property = 'P1419',
},
{
type = 'row',
label = 'Edidye pou',
value = 'etidye pou',
property = 'P6606',
valueClass = 'italique',
},
{
type = 'row',
label = 'Inspiration',
value = 'inspiration',
wikidata ={property = 'P941' , conjtype="new line"},
},
{
type = 'row',
label = 'Série',
plurallabel = 'Séries',
value = 'série',
property = 'P179',
valueClass = 'italique',
},
{
type = 'row',
label = 'Pendant',
plurallabel = 'Pendants',
value = 'pendant',
property = 'P1639',
valueClass = 'italique',
},
{
type = 'row',
label = 'Verso',
value = 'verso',
wikidata = {property = {'P2681', 'P2682'}},
valueClass = 'italique',
},
{
type = 'row',
label = 'Mouvement',
plurallabel = 'Mouvements',
value = function(localdata) return localdata['mouvement'] or localdata['style'] end,
property = 'P135',
},
{
type = 'row',
label = 'Propriétaire',
plurallabel = 'Propriétaires',
value = 'propriétaire',
wikidata = function() return owner.formatFromItem(item, {atdate = 'today'}) end
},
{
type = 'row',
label = 'Collection',
plurallabel = 'Collections',
value = 'collection'
},
{
type = 'row',
label = '<abbr class="abbr" title="Numéro">N<sup>o</sup></abbr> d’inventaire',
value = 'inventaire',
property = 'P217'
},
{
type = 'row',
label = 'Localisation',
value = function(localdata)
local museum, location, city, country = localdata['musée'], localdata['localisation'], localdata['ville'], localdata['pays']
location = linguistic.conj({museum, location, city}, 'comma')
if location == '-' then
-- désactivation de l'utilisation de wikidata (car il ne faut pas d'espace après)
return '-'
end
country = linguistic.inparentheses(country)
if country then country = '<span class="nowrap">' .. country .. '</span>' end
if location or country then
return (location or '') .. ' ' .. (country or '')
end
return nil
end,
property = 'P276' -- devrait croiser P195 et utiliser l'arbitrary access pour le lieu
},
{
type = 'row',
label = 'Modèle',
plurallabel = 'Modèles',
value = 'modèle',
property = 'P2634'
},
--[[
{
type = 'row',
label = 'Représente',
value = 'représente',
wikidata = {property = 'P180', numval = '4', rank = 'best'}
},
]]--
{
type = 'row',
label = 'Inscription',
plurallabel = 'Inscriptions',
value = 'inscription',
wikidata = {property = 'P1684', conjtype = '<br />', numval = '3', rank = 'best'}
},
{
type = 'row',
label = 'Commentaire',
value = 'commentaire',
},
{
type = 'row',
label = 'Protection',
value = function(localdata) return localdata['protection'] or localdata['classement'] end,
wikidata = function(item) return protected.formattedList(item)end
},
geoloc.coordinates{maintenancecat = "Œuvre d'art géolocalisable sans coordonnées paramétrées"},
}},
geoloc.geoloc('default', '-'), -- le '-' indique de ne pas chercher automatiquement une carte si aucune n'est fournie dans |géolocalisation=
}
}
3uvtz5i01af0cdzub3toj474w4nge6t
855631
855630
2024-11-12T23:22:52Z
BwaKajou
31668
855631
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
local geoloc = require 'Module:Infobox/Fonctions/Géolocalisation'
local general = require 'Module:Infobox/Fonctions'
local owner = require 'Module:Propriétaire'
local material = require 'Module:Matériau'
local linguistic = require 'Module:Linguistique'
local protected = require 'Module:Classement'
local wikidata = require 'Module:Wikidata'
local linktopic = 'nan atizay plastik'
local function dimensions( localdata )
local dimensions = {
-- paramètre, abréviation à afficher dans l'en tête, propriété Wikidata, nom complet à afficher dans l'entête
{'dyamèt', 'Diam', 'P2386', 'Dyamèt'},
{ 'wotè', 'H', 'P2048', 'Wotè'},
{'lajè', 'L', 'P2049', 'Lajè'},
{'pwofondè', 'l', 'P2610' , 'Pwofondè'},
}
local data, dims = {}, {}
local label = 'Dimansyon'
local unit = localdata['inite'] or 'cm'
local wikidataval = function(d)
return wikidata.formatStatements{
entity = localdata.item,
showunit = '-',
targetunit = unit,
addcat = true,
property = d
}
end
local propertyused = nil
for i, j in pairs(dimensions) do
local val = localdata[j[1]]
if localdata.item and j[3] and not val then
val = wikidataval(j[3])
if val then
propertyused = j[3]
end
end
if val then
table.insert(data, val)
table.insert(dims, i)
end
end
if #data == 0 then
return nil
end
if #data == 1 then
label = dimensions[dims[1]][4]
else
for i, j in pairs(dims) do dims[i] = dimensions[j][2] end
label = label .. linguistic.inparentheses(linguistic.conj(dims, ' × '))
end
local val = linguistic.conj(data, ' × ') .. ' ' .. unit
if propertyused then
val = wikidata.formatAndCat{entity = localdata.item, property = propertyused, value = val}
end
return {
type = 'row',
label = label,
value = function() return val end
}
end
return {
maincolor = '#f9f9f9',
parts = {
{
type = 'title',
value = function(localdata)
return localdata['tit']
or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
or mw.title.getCurrentTitle().text
end,
subtitle = 'tit orijinal',
italic = true,
setdisplaytitle = true,
},
general.mainimage( { cat = "Atik pou ilistre Atizay",
defaultimage = nil,
wikidata = {property = {'P18', 'P5252', 'P7420'}}
} ),
{type = 'table', rows = {
{
type = 'row',
label = 'Atis',
plurallabel = 'Atis',
value = 'atis',
wikidata = {
property = 'P170',
statementformat = function(statement)
local str
-- On commence par les qualificatifs (attribué à, atelier etc.)
local possiblequalifiers = {
P1773 = "attribué $to $creator",
P1774 = "atelier $of $creator",
P1775 = "suiveur $of $creator",
P1776 = "cercle $of $creator",
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1778 = "faux d'après $creator",
P1779 = "$creator (?)",
P1780 = "école $of",
P1877 = "d'après une œuvre $of $creator",
}
if statement.qualifiers then
for qualif, text in pairs(possiblequalifiers) do
local creator = wikidata.getFormattedQualifiers(statement, {qualif})
if creator then
str = text
str = mw.ustring.gsub(str, '$to $creator', "à ".. creator)
str = mw.ustring.gsub(str, '$of $creator', linguistic.of(creator))
str = mw.ustring.gsub(str, '$creator', creator)
break
end
end
end
-- TODO : prendre en compte tous les qualificatifs pour une même déclaration, exemple [[Galate mourant]]
-- Sinon, la voie normale
if not str then
str = wikidata.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
end
return str
end
}
},
{
type = 'row',
label = 'Dat',
value = 'ane',
wikidata = {
property = 'P571',
showqualifiers = {'P518'},
linktopic = linktopic,
sorttype = 'chronological',
conjtype = function()
if wikidata.getClaims{entity = item, property = 'P571', qualifier = {'P518'}} then
return "new line"
else
return "or"
end
end
}
},
{
type = 'row',
label = 'Sivilizasyon',
plurallabel = 'Sivilizasyon',
value = 'sivilizasyon',
property = 'P2596'
},
{
type = 'row',
label = 'Kòmanditè',
plurallabel = 'Kòmanditè',
value = 'kòmanditè',
property = 'P88'
},
{
type = 'row',
label = 'Type',
value = 'type',
property = 'P136',
},
{
type = 'row',
label = 'Teknik',
plurallabel= 'Teknik',
value = 'teknik',
property = 'P2079'
},
{
type = 'row',
label = 'Materyo',
value = function( localdata )
if localdata['type'] or localdata['teknik'] then -- la matériau est parfois contenu dans le paramètre "type", ne pas utiliser wikidata dans ce cas
return nil
end
return material.formatFromItem(localdata.item)
end
},
{
type = 'row',
label = 'Pwennvi',
plurallabel = 'Pwennvi',
value = 'pwennvi',
property = 'P7108'
},
{
type = 'row',
label = 'Lye kreyasyon',
plurallabel = 'Lye kreyasyon',
value = 'lye kreyasyon',
property = 'P1071'
},
dimensions,
{
type = 'row',
label = 'Fòma',
value = 'fòma',
property = 'P1419',
},
{
type = 'row',
label = 'Edidye pou',
value = 'etidye pou',
property = 'P6606',
valueClass = 'italique',
},
{
type = 'row',
label = 'Enspirasyon',
value = 'enspirasyon',
wikidata ={property = 'P941' , conjtype="new line"},
},
{
type = 'row',
label = 'Seri',
plurallabel = 'Seri',
value = 'seri',
property = 'P179',
valueClass = 'italique',
},
{
type = 'row',
label = 'Pandan',
plurallabel = 'Pandan',
value = 'pandan',
property = 'P1639',
valueClass = 'italique',
},
{
type = 'row',
label = 'Vèso',
value = 'vèso',
wikidata = {property = {'P2681', 'P2682'}},
valueClass = 'italique',
},
{
type = 'row',
label = 'Mouvman',
plurallabel = 'Mouvman',
value = function(localdata) return localdata['mouvman'] or localdata['style'] end,
property = 'P135',
},
{
type = 'row',
label = 'Pwopriyetè',
plurallabel = 'Pwopriyetè',
value = 'pwopriyetè',
wikidata = function() return owner.formatFromItem(item, {atdate = 'today'}) end
},
{
type = 'row',
label = 'Koleksyonon',
plurallabel = 'Koleksyon',
value = 'koleksyon'
},
{
type = 'row',
label = '<abbr class="abbr" title="Nimewo">N<sup>o</sup></abbr> envantè',
value = 'envantè',
property = 'P217'
},
{
type = 'row',
label = 'Lokalizasyon',
value = function(localdata)
local museum, location, city, country = localdata['mize'], localdata['lokalizasyon'], localdata['vil'], localdata['peyi']
location = linguistic.conj({museum, location, city}, 'comma')
if location == '-' then
-- désactivation de l'utilisation de wikidata (car il ne faut pas d'espace après)
return '-'
end
country = linguistic.inparentheses(country)
if country then country = '<span class="nowrap">' .. country .. '</span>' end
if location or country then
return (location or '') .. ' ' .. (country or '')
end
return nil
end,
property = 'P276' -- devrait croiser P195 et utiliser l'arbitrary access pour le lieu
},
{
type = 'row',
label = 'Modèl',
plurallabel = 'Modèl',
value = 'modèl',
property = 'P2634'
},
--[[
{
type = 'row',
label = 'Reprezante',
value = 'reprezante',
wikidata = {property = 'P180', numval = '4', rank = 'best'}
},
]]--
{
type = 'row',
label = 'Enskripsyon',
plurallabel = 'Enskripsyon',
value = 'enskripsyon',
wikidata = {property = 'P1684', conjtype = '<br />', numval = '3', rank = 'best'}
},
{
type = 'row',
label = 'Kòmantè',
value = 'kòmantè',
},
{
type = 'row',
label = 'Pwoteksyon',
value = function(localdata) return localdata['pwoteksyon'] or localdata['klasman'] end,
wikidata = function(item) return protected.formattedList(item)end
},
geoloc.coordinates{maintenancecat = "Zèv da jewolokalize san kowòdone parametre"},
}},
geoloc.geoloc('default', '-'), -- le '-' indique de ne pas chercher automatiquement une carte si aucune n'est fournie dans |géolocalisation=
}
}
8m5nzxtlbv8pi7vot8779rc1yy3julf
855641
855631
2024-11-12T23:42:45Z
BwaKajou
31668
855641
Scribunto
text/plain
--[[
Avant de mettre en production une nouvelle version avez-vous :
- testé avec la version bac à sable ?
- modifié la documentation ?
]]
local geoloc = require 'Module:Infobox/Fonctions/Géolocalisation'
local general = require 'Module:Infobox/Fonctions'
local owner = require 'Module:Propriétaire'
local material = require 'Module:Matériau'
local linguistic = require 'Module:Linguistique'
local protected = require 'Module:Classement'
local wikidata = require 'Module:Wikidata'
local linktopic = 'nan atizay plastik'
local function dimensions( localdata )
local dimensions = {
-- paramètre, abréviation à afficher dans l'en tête, propriété Wikidata, nom complet à afficher dans l'entête
{'dyamèt', 'Diam', 'P2386', 'Dyamèt'},
{ 'wotè', 'H', 'P2048', 'Wotè'},
{'lajè', 'L', 'P2049', 'Lajè'},
{'pwofondè', 'l', 'P2610' , 'Pwofondè'},
}
local data, dims = {}, {}
local label = 'Dimansyon'
local unit = localdata['inite'] or 'cm'
local wikidataval = function(d)
return wikidata.formatStatements{
entity = localdata.item,
showunit = '-',
targetunit = unit,
addcat = true,
property = d
}
end
local propertyused = nil
for i, j in pairs(dimensions) do
local val = localdata[j[1]]
if localdata.item and j[3] and not val then
val = wikidataval(j[3])
if val then
propertyused = j[3]
end
end
if val then
table.insert(data, val)
table.insert(dims, i)
end
end
if #data == 0 then
return nil
end
if #data == 1 then
label = dimensions[dims[1]][4]
else
for i, j in pairs(dims) do dims[i] = dimensions[j][2] end
label = label .. linguistic.inparentheses(linguistic.conj(dims, ' × '))
end
local val = linguistic.conj(data, ' × ') .. ' ' .. unit
if propertyused then
val = wikidata.formatAndCat{entity = localdata.item, property = propertyused, value = val}
end
return {
type = 'row',
label = label,
value = function() return val end
}
end
return {
maincolor = '#f9f9f9',
parts = {
{
type = 'title',
value = function(localdata)
return localdata['tit']
or wikidata.getLabel(localdata.item) and mw.language.getContentLanguage():ucfirst( wikidata.getLabel(localdata.item) )
or mw.title.getCurrentTitle().text
end,
subtitle = 'tit orijinal',
italic = true,
setdisplaytitle = true,
},
general.mainimage( { cat = "Atik pou ilistre Atizay",
defaultimage = nil,
wikidata = {property = {'P18', 'P5252', 'P7420'}}
} ),
{type = 'table', rows = {
{
type = 'row',
label = 'Atis',
plurallabel = 'Atis',
value = 'atis',
wikidata = {
property = 'P170',
statementformat = function(statement)
local str
-- On commence par les qualificatifs (attribué à, atelier etc.)
local possiblequalifiers = {
P1773 = "attribué $to $creator",
P1774 = "atelier $of $creator",
P1775 = "suiveur $of $creator",
P1776 = "cercle $of $creator",
P1777 = "d'après $creator", -- TODO : d'après LE Maître X
P1778 = "faux d'après $creator",
P1779 = "$creator (?)",
P1780 = "école $of",
P1877 = "d'après une œuvre $of $creator",
}
if statement.qualifiers then
for qualif, text in pairs(possiblequalifiers) do
local creator = wikidata.getFormattedQualifiers(statement, {qualif})
if creator then
str = text
str = mw.ustring.gsub(str, '$to $creator', "à ".. creator)
str = mw.ustring.gsub(str, '$of $creator', linguistic.of(creator))
str = mw.ustring.gsub(str, '$creator', creator)
break
end
end
end
-- TODO : prendre en compte tous les qualificatifs pour une même déclaration, exemple [[Galate mourant]]
-- Sinon, la voie normale
if not str then
str = wikidata.formatStatement(statement, {speciallabels = {Q4233718 = "anonyme"}}) -- speciallabels pour éviter le lien par défaut
end
return str
end
}
},
{
type = 'row',
label = 'Dat',
value = 'ane',
wikidata = {
property = 'P571',
showqualifiers = {'P518'},
linktopic = linktopic,
sorttype = 'chronological',
conjtype = function()
if wikidata.getClaims{entity = item, property = 'P571', qualifier = {'P518'}} then
return "new line"
else
return "or"
end
end
}
},
{
type = 'row',
label = 'Sivilizasyon',
plurallabel = 'Sivilizasyon',
value = 'sivilizasyon',
property = 'P2596'
},
{
type = 'row',
label = 'Kòmanditè',
plurallabel = 'Kòmanditè',
value = 'kòmanditè',
property = 'P88'
},
{
type = 'row',
label = 'Tip',
value = 'tip',
property = 'P136',
},
{
type = 'row',
label = 'Teknik',
plurallabel= 'Teknik',
value = 'teknik',
property = 'P2079'
},
{
type = 'row',
label = 'Materyo',
value = function( localdata )
if localdata['type'] or localdata['teknik'] then -- la matériau est parfois contenu dans le paramètre "type", ne pas utiliser wikidata dans ce cas
return nil
end
return material.formatFromItem(localdata.item)
end
},
{
type = 'row',
label = 'Pwennvi',
plurallabel = 'Pwennvi',
value = 'pwennvi',
property = 'P7108'
},
{
type = 'row',
label = 'Lye kreyasyon',
plurallabel = 'Lye kreyasyon',
value = 'lye kreyasyon',
property = 'P1071'
},
dimensions,
{
type = 'row',
label = 'Fòma',
value = 'fòma',
property = 'P1419',
},
{
type = 'row',
label = 'Edidye pou',
value = 'etidye pou',
property = 'P6606',
valueClass = 'italique',
},
{
type = 'row',
label = 'Enspirasyon',
value = 'enspirasyon',
wikidata ={property = 'P941' , conjtype="new line"},
},
{
type = 'row',
label = 'Seri',
plurallabel = 'Seri',
value = 'seri',
property = 'P179',
valueClass = 'italique',
},
{
type = 'row',
label = 'Pandan',
plurallabel = 'Pandan',
value = 'pandan',
property = 'P1639',
valueClass = 'italique',
},
{
type = 'row',
label = 'Vèso',
value = 'vèso',
wikidata = {property = {'P2681', 'P2682'}},
valueClass = 'italique',
},
{
type = 'row',
label = 'Mouvman',
plurallabel = 'Mouvman',
value = function(localdata) return localdata['mouvman'] or localdata['style'] end,
property = 'P135',
},
{
type = 'row',
label = 'Pwopriyetè',
plurallabel = 'Pwopriyetè',
value = 'pwopriyetè',
wikidata = function() return owner.formatFromItem(item, {atdate = 'today'}) end
},
{
type = 'row',
label = 'Koleksyonon',
plurallabel = 'Koleksyon',
value = 'koleksyon'
},
{
type = 'row',
label = '<abbr class="abbr" title="Nimewo">N<sup>o</sup></abbr> envantè',
value = 'envantè',
property = 'P217'
},
{
type = 'row',
label = 'Lokalizasyon',
value = function(localdata)
local museum, location, city, country = localdata['mize'], localdata['lokalizasyon'], localdata['vil'], localdata['peyi']
location = linguistic.conj({museum, location, city}, 'comma')
if location == '-' then
-- désactivation de l'utilisation de wikidata (car il ne faut pas d'espace après)
return '-'
end
country = linguistic.inparentheses(country)
if country then country = '<span class="nowrap">' .. country .. '</span>' end
if location or country then
return (location or '') .. ' ' .. (country or '')
end
return nil
end,
property = 'P276' -- devrait croiser P195 et utiliser l'arbitrary access pour le lieu
},
{
type = 'row',
label = 'Modèl',
plurallabel = 'Modèl',
value = 'modèl',
property = 'P2634'
},
--[[
{
type = 'row',
label = 'Reprezante',
value = 'reprezante',
wikidata = {property = 'P180', numval = '4', rank = 'best'}
},
]]--
{
type = 'row',
label = 'Enskripsyon',
plurallabel = 'Enskripsyon',
value = 'enskripsyon',
wikidata = {property = 'P1684', conjtype = '<br />', numval = '3', rank = 'best'}
},
{
type = 'row',
label = 'Kòmantè',
value = 'kòmantè',
},
{
type = 'row',
label = 'Pwoteksyon',
value = function(localdata) return localdata['pwoteksyon'] or localdata['klasman'] end,
wikidata = function(item) return protected.formattedList(item)end
},
geoloc.coordinates{maintenancecat = "Zèv da jewolokalize san kowòdone parametre"},
}},
geoloc.geoloc('default', '-'), -- le '-' indique de ne pas chercher automatiquement une carte si aucune n'est fournie dans |géolocalisation=
}
}
6gjpa45n1mgxcjzqv4az1y9velzagb4
Jules Breton
0
93634
855575
855270
2024-11-12T13:54:39Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855575
wikitext
text/x-wiki
{{Infobox atis|imaj=Jules Breton - Autoportrait (KMSKA).jpg|lejand=Jules Breton, ''Otopòtrè'' ([[1895]]),<br>[[mize wayal boza nan Anvè]].}}
'''Jules Adolphe Aimé Louis Breton''', fèt nan Courrières ( Pas-de-Calais ) 1ye me 1827 e li te mouri Pari 5 jiyè 1906, se te yon pent ak powèt fransè.
== Biyografi ==
[[Fichye:Lille_jules_Breton_calvaire.JPG|vignette| ''Plante yon kalvè'' (1858), [[Lil (vil)|Lille]], Palè Fine Arts .]]
[[Fichye:Jules_Breton_-_Le_rappel_des_glaneuses.jpg|vignette| ''Rapèl Gleaners yo'' (1859), [[Pari|Paris]], Musée d'Orsay .]]
[[Fichye:The_Feast_of_Saint_John.jpg|vignette| ''Fèt Sen Jan'' ( [[1875 (almanak gregoryen)|1875]] ), Philadelphia Museum of Art .]]
[[Fichye:Brooklyn_Museum_-_Fin_du_travail_(The_End_of_the_Working_Day)_-_Jules_Breton.jpg|vignette| ''Across Fields'' (1887), [[Nouyòk|New York]], Brooklyn Museum .]]
Papa l, Marie-Louis Breton, se majistra Courrières. Manman l te mouri an 1831. Jules Breton te etidye dabò nan kolèj Saint-Bertin nan Saint-Omer kote li te yon pensyonè, answit nan lekòl segondè Enperial nan Douai <ref>''Annuaire 1933-1934 de l'Association des Anciens Élèves du Lycée de Douai'', Imprimerie Lefebvre-Lévêque et Cie. </ref>. Li fè apranti ak Félix De Vigne nan Ghent ak Gustave Wappers nan [[Anvè|Antwerp]] nan [[Bèljik]], answit li kontinye fòmasyon li nan [[Pari]] nan swiv kou Ingres ak Horace Vernet.
Ti frè l Émile Breton (1831-1902) se te yon pent peyizajis nan enspirasyon rèv.
=== Galeri ===
<gallery mode="packed" heights="160" caption="Zèv Jules Breton">
Fichye:Jules_Adolphe_Aimé_Louis_Breton,_The_Gleaners,_1854._National_Gallery_of_Ireland.jpg|lien=Fichier:Jules_Adolphe_Aimé_Louis_Breton,_The_Gleaners,_1854._National_Gallery_of_Ireland.jpg|alt=Les Glaneuses (1854), Dublin, Galerie nationale d'Irlande.| ''The Gleaners'' (1854), [[Diblen|Dublin]], Galeri Nasyonal Iland .
Fichye:Jules_Breton_-_'The_Weeders',_oil_on_canvas,_1868,_Metropolitan_Museum_of_Art.jpg|lien=Fichier:Jules_Breton_-_'The_Weeders',_oil_on_canvas,_1868,_Metropolitan_Museum_of_Art.jpg|alt=Les Sarcleuses (1860), New York, Metropolitan Museum of Art.| ''The Weeders'' (1860), [[Nouyòk|New York]], Metropolitan Museum of Art .
Fichye:Jules_Adolphe_Breton_-_Jeune_fille_tricotant.jpg|lien=Fichier:Jules_Adolphe_Breton_-_Jeune_fille_tricotant.jpg|alt=Jeune fille tricotant' (1860), localisation inconnue.| ''Young Girl Knitting' (1860), kote yo pa konnen.''
Fichye:Jules_Breton_-_Deux_jeune_femme_dans_le_vintage_(1862).jpg|lien=Fichier:Jules_Breton_-_Deux_jeune_femme_dans_le_vintage_(1862).jpg|alt=Étude de deux vendangeuses (vers 1862), localisation inconnue.| ''Etid sou de rekòt rezen'' (alantou 1862), kote enkoni.
Fichye:Jules_Breton_La_femme_a_l'ombrelle_1871.jpg|lien=Fichier:Jules_Breton_La_femme_a_l'ombrelle_1871.jpg|alt=Femme à l'ombrelle (Élodie de Vigne) (1871), localisation inconnue.| ''Fanm ak yon parasol'' (Élodie de Vigne) (1871), kote yo pa konnen.
Fichye:Jules_Adolphe_Aimé_Louis_Breton_-_Returning_from_the_Fields_-_Walters_3758.jpg|lien=Fichier:Jules_Adolphe_Aimé_Louis_Breton_-_Returning_from_the_Fields_-_Walters_3758.jpg|alt=Le Retour des champs (1871), Baltimore, Walters Art Museum.| ''The Return of the Fields'' (1871), Baltimore, Walters Art Museum .
Fichye:Jules_Breton_-_The_Flax_Spinner_-_Google_Art_Project.jpg|lien=Fichier:Jules_Breton_-_The_Flax_Spinner_-_Google_Art_Project.jpg|alt=Fileuse (1872), Tulsa, Philbrook Museum of Art.| ''Spinner'' (1872), [[Tulsa, Oklahoma|Tulsa]], Philbrook Museum of Art .
Fichye:Jules_Breton_-_La_glaneuse_lasse.jpg|lien=Fichier:Jules_Breton_-_La_glaneuse_lasse.jpg|alt=La Glaneuse lasse (1880), Cleveland Museum of Art.| ''The Weary Gleaner'' (1880), Cleveland Museum of Art .
Fichye:Song_of_the_Lark_-_Jules_Breton.png|lien=Fichier:Song_of_the_Lark_-_Jules_Breton.png|alt=Le Chant de l'alouette (1884), Art Institute of Chicago.| ''The Song of the Lark'' (1884), Enstiti Art nan Chicago .
Fichye:Jules_Breton_Young_Women_Going_to_a_Procession.jpg|lien=Fichier:Jules_Breton_Young_Women_Going_to_a_Procession.jpg|alt=Jeunes filles se rendant à la procession (1890), Utica, Munson-Williams-Proctor Arts Institute.| ''Young Girls Going to Procession'' (1890), [[Utica, New York|Utica]], Munson-Williams-Proctor Arts Institute .
Fichye:Breton_Jules_Summer.jpg|lien=Fichier:Breton_Jules_Summer.jpg|alt=Été (1891), localisation inconnue.| ''Ete'' (1891), kote enkoni.
Fichye:Le_pardon_de_Kergoat_en_Quéménéven_en_1891_Jules_Noël.JPG|lien=Fichier:Le_pardon_de_Kergoat_en_Quéménéven_en_1891_Jules_Noël.JPG|alt=Le Pardon de Kergoat (1891), musée des Beaux-Arts de Quimper.| ''The Pardon of Kergoat'' (1891), Mize Fine Arts nan Quimper .
Fichye:Sacramentsprocessie.jpg|lien=Fichier:Sacramentsprocessie.jpg|alt=La Bénédiction des blés en Artois (1857), Musée des Beaux-Arts d'Arras.| ''Benediksyon ble a nan Artois'' (1857), Arras Museum of Fine Arts .
Fichye:La_Falaise,_Jules_Breton,_1874_(1).jpg|lien=Fichier:La_Falaise,_Jules_Breton,_1874_(1).jpg|alt=La Falaise (1874), Collection Eric Weider| ''The Cliff'' (1874), Koleksyon Eric Weider
</gallery>
== Omaj ==
Depi 1912, yon liy nan 13e awondisman [[Pari|Paris]] pote non li, ri Jules-Breton .
Plizyè vil nan Bretay pote non li nan yon ri, sitou Douarnenez, Quéménéven ak Quimper <ref name="NomsHistBret">{{Référence Harvard sans parenthèses|texte=''Les noms qui ont fait l'histoire de Bretagne''|id=NomsHistBret}}.</ref> .
== Distenksyon ==
* Kómandè Lejyon donè an 1889;
* Ofisye lòd Léopold an 1888 (Bèljik).
== Gade tou ==
{{Lòt pwojè|commons=Category:Jules Breton|wikisource=Jules Breton}}
=== Lyen ekstèn ===
{{Liens}}
* [http://www.artcyclopedia.com/artists/breton_jules.html « Jules Breton »] sur Artcyclopédia.
* [https://web.archive.org/web/20070527171854/http://poesie.webnet.fr/auteurs/breton.html Poèmes de Jules Breton], sur poesie.webnet.fr.
* [http://musee-beauxarts.quimper.fr/htcoib/fjbreto.htm « Jules Breton »], sur le site du musée des Beaux-Arts de Quimper.
[[Kategori:Atik Wikipedya avèk dosye otorite]]
<references />
[[Kategori:Pent peyizan]]
[[Kategori:Pent fransè nan XIXe syèk]]
[[Kategori:Pent fransè XIXe syèk]]
bmsjlzz34lhivpyfpcfqdihrsi26vv0
Manjè pòmdetè yo
0
93724
855596
855451
2024-11-12T16:52:32Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855596
wikitext
text/x-wiki
'''''Manjè pòmdetè yo''''' ( an {{Lang-fr|Les mangeurs de pomme de terre}} oswa an neyèlandè, {{Lang|nl|''De Aardappeleters''}} ) se yon tablo [[Vincent van Gogh]] te pentire an avril 1885 nan [[Nuenen]], [[Peyiba]] .
== Vèsyon ==
<gallery mode="packed" heights="200">
Fichye:Van_Gogh_-_Vier_Bauern_beim_Essen_(Erste_Studie_zu_den_"Karoffelessern").jpeg|lien=Fichier:Van_Gogh_-_Vier_Bauern_beim_Essen_(Erste_Studie_zu_den_"Karoffelessern").jpeg|alt=Première étude pour Les Mangeurs de pommes de terre, fév.-mars 1885. Musée Van-Gogh (s0135V1962r).| Premye etid pou ''The Potato Eaters'', fevriye-mas 1885. Van-Gogh Museum (s0135V1962r).
Fichye:Vincent_van_Gogh_(1853-1890)_De_aardappeleters_(tweede_voorstudie)_Kröller-Müller_Museum_Otterlo_23-8-2016_13-40-54.JPG|lien=Fichier:Vincent_van_Gogh_(1853-1890)_De_aardappeleters_(tweede_voorstudie)_Kröller-Müller_Museum_Otterlo_23-8-2016_13-40-54.JPG|alt=Deuxième étude pour Les Mangeurs de pommes de terre, avril 1885. Musée Kröller-Müller (KM 109.982).| Dezyèm etid pou ''The Potato Eaters'', Avril 1885. Kröller-Müller Museum (KM 109.982).
</gallery>
[[Fichye:Van-willem-vincent-gogh-die-kartoffelesser-03850.jpg|centré|vignette| ''The Potato Eaters'', Avril 1885, vèsyon final la. Mize Van Gogh (s0005V1962).]]
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|Category:Vincent van Gogh}}
* [[Lis penti Vincent van Gogh]]
* [[Lèt Vincent pou Théo]]
* [[Mize Van-Gogh|Van Gogh mize]]
=== Lyen ekstèn ===
{{Liens}}
* [https://web.archive.org/web/20080925213205/http://www3.vangoghmuseum.nl/vgm/index.jsp?page=1303&collection=619&lang=fr Le tableau sur le site officiel du musée Van Gogh]
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Tablo reyalize an 1885]]
[[Kategori:Tablo Vincent van Gogh]]
[[Kategori:Pages avec des traductions non relues]]
3vtryvxit24ojbsydd968t042z6vfvu
Mize wayal Boza Bèljik
0
93725
855609
855454
2024-11-12T17:38:20Z
InternetArchiveBot
25431
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
855609
wikitext
text/x-wiki
[[Fichye:0_Le_Massacre_des_Innocents_d'après_P.P._Rubens_-_Musées_royaux_des_beaux-arts_de_Belgique_(2).JPG|vignette| ''Masak inosan yo'' (1611-1612) apre [[Peter Paul Rubens|Rubens]] .]]
[[Fichye:0_La_Sagesse_victorieuse_de_la_guerre_et_de_la_discorde_-_Rubens_-_Musée_royaux_des_Beaux-Arts_de_Belgique_(2).JPG|vignette| ''Sajès viktorye sou lagè ak dezakò anba gouvènman Jacques I nan Angletè'' (1632-1633) pa [[Peter Paul Rubens|Rubens]] .]]
'''Mize wayal Boza Bèljik (an''' {{Lang-fr|musées royaux des Beaux-Arts de Belgique (MRBAB)}}), ki sitiye nan [[Briksèl]], prezève kèk ven mil zèv, penti, eskilti ak desen. Yo genyen sis mize: mize Oldmasters, ki te deja rele "mize wayal atizay ansyen ({{Sp-|XV|-|XVIII}}); mize Magritte; Mize Wiertz la; mize Meunier; mize Fin de syèk la; Mize a XIX Atizay modèn ({{Sp-|XIX|-|XX}}).
== Lyen ekstèn ==
{{Lòt pwojè|commons=Category:Royal Museums of Fine Arts of Belgium|commons titre=Les musées royaux des Beaux-Arts de Belgique}}
* Site officiel
* [https://web.archive.org/web/20090323015614/http://www.opac-fabritius.be/fr/F_database.htm Catalogue des musées royaux des Beaux-Arts de Belgique]
== Nòt ak referans ==
{{Referans}}
[[Kategori:Mize fonde an 1803]]
34werxa91r7vykrphfcic0tcwu0ytrl
Ferrari Land
0
93742
855545
2024-11-12T12:22:23Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/214938547|Ferrari Land]] »
855545
wikitext
text/x-wiki
'''Ferrari Land''' se yon pak ak tèm espanyòl ki sitiye nan sidwès [[Baselòn]] nan komin Salou, nan pwovens Tarragona, sou Costa Daurada. Li louvri pòt li yo 7 avril 2017. Li fè pati konplèks lwazi PortAventura World.
== Istorik ==
Premye pak la tematik la dedye a mak Italyen an [[Ferrari (antrepriz)|Ferrari]] te inogire an 2010. Se Ferrari World Abu Dhabi ki plase toupre sikwi Yas Marina nan [[Emira Arab Ini]] <ref name="positive">{{Cite web|url=https://www.hosteltur.com/142420_ferrari-abrira-parque-tematico-portaventura.html|title=Ferrari abrirá un parque temático en PortAventura|date=13 mars 2014|website=hosteltur.com|language=es|access-date=12 octobre 2018}}.</ref>.
Apre inogirasyon sa a, konpayi Italyen an te resevwa anpil demand pou konstwi nouvo pak lwazi <ref group="alpha">La [[Généralité valencienne]] propose d'ailleurs la réalisation d'un parc Ferrari aux alentours de [[Valence (Espagne)|Valence]]. Après plusieurs démarches, cette idée est abandonnée. </ref> {{,}} <ref name="pais">{{Cite web|url=https://elpais.com/ccaa/2014/03/13/catalunya/1394711022_331793.html|title=Port Aventura invertirá 100 millones en un nuevo parque dedicado a Ferrari|last=Clara Blanchar|date=13 mars 2014|website=El País|language=es|access-date=12 octobre 2018}}.</ref>. Domèn espanyòl la fè yon pwopozisyon konsa. Pwojè a nan kataloy sanble pwomèt ak lidè yo nan mak otomobil la dakò ak sa a <ref name="positive">{{Cite web|url=https://www.hosteltur.com/142420_ferrari-abrira-parque-tematico-portaventura.html|title=Ferrari abrirá un parque temático en PortAventura|date=13 mars 2014|website=hosteltur.com|language=es|access-date=12 octobre 2018}}.</ref>.
[[Fichye:Batiment_de_ferrari_experience.jpg|vignette| Eksperyans Ferrari.]]
== Nòt ak referans ==
=== Nòt ===
{{Referans}}
=== Referans ===
{{Referans}}
== Apendis ==
{{Autres projets|commons=Category:Ferrari Land}}
=== Lyen ekstèn ===
{{liens}}
[[Kategori:Ferrari]]
hslvai7whcplqdysdpe3uk6wvrqfcc5
855546
855545
2024-11-12T12:24:29Z
BwaKajou
31668
/* Nòt ak referans */
855546
wikitext
text/x-wiki
'''Ferrari Land''' se yon pak ak tèm espanyòl ki sitiye nan sidwès [[Baselòn]] nan komin Salou, nan pwovens Tarragona, sou Costa Daurada. Li louvri pòt li yo 7 avril 2017. Li fè pati konplèks lwazi PortAventura World.
== Istorik ==
Premye pak la tematik la dedye a mak Italyen an [[Ferrari (antrepriz)|Ferrari]] te inogire an 2010. Se Ferrari World Abu Dhabi ki plase toupre sikwi Yas Marina nan [[Emira Arab Ini]] <ref name="positive">{{Cite web|url=https://www.hosteltur.com/142420_ferrari-abrira-parque-tematico-portaventura.html|title=Ferrari abrirá un parque temático en PortAventura|date=13 mars 2014|website=hosteltur.com|language=es|access-date=12 octobre 2018}}.</ref>.
Apre inogirasyon sa a, konpayi Italyen an te resevwa anpil demand pou konstwi nouvo pak lwazi <ref group="alpha">La [[Généralité valencienne]] propose d'ailleurs la réalisation d'un parc Ferrari aux alentours de [[Valence (Espagne)|Valence]]. Après plusieurs démarches, cette idée est abandonnée. </ref> {{,}} <ref name="pais">{{Cite web|url=https://elpais.com/ccaa/2014/03/13/catalunya/1394711022_331793.html|title=Port Aventura invertirá 100 millones en un nuevo parque dedicado a Ferrari|last=Clara Blanchar|date=13 mars 2014|website=El País|language=es|access-date=12 octobre 2018}}.</ref>. Domèn espanyòl la fè yon pwopozisyon konsa. Pwojè a nan kataloy sanble pwomèt ak lidè yo nan mak otomobil la dakò ak sa a <ref name="positive">{{Cite web|url=https://www.hosteltur.com/142420_ferrari-abrira-parque-tematico-portaventura.html|title=Ferrari abrirá un parque temático en PortAventura|date=13 mars 2014|website=hosteltur.com|language=es|access-date=12 octobre 2018}}.</ref>.
[[Fichye:Batiment_de_ferrari_experience.jpg|vignette| Eksperyans Ferrari.]]
<gallery mode="packed">
Fichye:Vu de dessous.jpg|''[[Red Force]]''
Fichye:Thrill towers vue de dessous.jpg|''Thrill Towers''
</gallery>
== Nòt ak referans ==
=== Nòt ===
{{Références|groupe=alpha}}
=== Referans ===
{{Referans}}
== Apendis ==
{{Autres projets|commons=Category:Ferrari Land}}
=== Lyen ekstèn ===
{{liens}}
[[Kategori:Ferrari]]
omheugxjihte3mkez8ad2mi323u0x80
855547
855546
2024-11-12T12:24:48Z
BwaKajou
31668
855547
wikitext
text/x-wiki
[[File:Logo ferrari land 2017.jpg|thumb|]]
'''Ferrari Land''' se yon pak ak tèm espanyòl ki sitiye nan sidwès [[Baselòn]] nan komin Salou, nan pwovens Tarragona, sou Costa Daurada. Li louvri pòt li yo 7 avril 2017. Li fè pati konplèks lwazi PortAventura World.
== Istorik ==
Premye pak la tematik la dedye a mak Italyen an [[Ferrari (antrepriz)|Ferrari]] te inogire an 2010. Se Ferrari World Abu Dhabi ki plase toupre sikwi Yas Marina nan [[Emira Arab Ini]] <ref name="positive">{{Cite web|url=https://www.hosteltur.com/142420_ferrari-abrira-parque-tematico-portaventura.html|title=Ferrari abrirá un parque temático en PortAventura|date=13 mars 2014|website=hosteltur.com|language=es|access-date=12 octobre 2018}}.</ref>.
Apre inogirasyon sa a, konpayi Italyen an te resevwa anpil demand pou konstwi nouvo pak lwazi <ref group="alpha">La [[Généralité valencienne]] propose d'ailleurs la réalisation d'un parc Ferrari aux alentours de [[Valence (Espagne)|Valence]]. Après plusieurs démarches, cette idée est abandonnée. </ref> {{,}} <ref name="pais">{{Cite web|url=https://elpais.com/ccaa/2014/03/13/catalunya/1394711022_331793.html|title=Port Aventura invertirá 100 millones en un nuevo parque dedicado a Ferrari|last=Clara Blanchar|date=13 mars 2014|website=El País|language=es|access-date=12 octobre 2018}}.</ref>. Domèn espanyòl la fè yon pwopozisyon konsa. Pwojè a nan kataloy sanble pwomèt ak lidè yo nan mak otomobil la dakò ak sa a <ref name="positive">{{Cite web|url=https://www.hosteltur.com/142420_ferrari-abrira-parque-tematico-portaventura.html|title=Ferrari abrirá un parque temático en PortAventura|date=13 mars 2014|website=hosteltur.com|language=es|access-date=12 octobre 2018}}.</ref>.
[[Fichye:Batiment_de_ferrari_experience.jpg|vignette| Eksperyans Ferrari.]]
<gallery mode="packed">
Fichye:Vu de dessous.jpg|''[[Red Force]]''
Fichye:Thrill towers vue de dessous.jpg|''Thrill Towers''
</gallery>
== Nòt ak referans ==
=== Nòt ===
{{Références|groupe=alpha}}
=== Referans ===
{{Referans}}
== Apendis ==
{{Autres projets|commons=Category:Ferrari Land}}
=== Lyen ekstèn ===
{{liens}}
[[Kategori:Ferrari]]
ifigadcfhhzagmkywjj8j24m96lwnc4
Kategori:Paj ki itilize P2751
14
93743
855548
2024-11-12T12:25:11Z
BwaKajou
31668
Paj ki kreye ak " {{kategori yon pwopriyete}} "
855548
wikitext
text/x-wiki
{{kategori yon pwopriyete}}
iolp85gdz69o8pxx123lkm762a7rdtk
Ferrari (konpayi)
0
93744
855549
2024-11-12T12:30:49Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/219939309|Ferrari (entreprise)]] »
855549
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Années
! colspan="121" |Nombres d'exemplaires vendus
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
bmmk8zw5rdfl8mbumtpr84sad2mvcvh
855550
855549
2024-11-12T12:31:41Z
BwaKajou
31668
/* Chif lavant */
855550
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Ane
! colspan="121" |Kantite egzanplè ki vann
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
58rdivi5qe4820yhw9d2emxrv66uk2r
855551
855550
2024-11-12T12:33:27Z
BwaKajou
31668
855551
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
==Istwa==
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
Konpayi an sitiye nan [[Maranello]], nan [[Emilia-Romagna]], {{unit|35|km}} soti nan [[Bologna]]. Enzo Ferrari te fè bati nouvo enstalasyon la, apre [[Dezyèm Gè Mondyal la]], sou tè li te pran pandan lagè a nan gwo vil sa a ki sitiye {{unit|18|km}} nan sid [[Modena]] , kote premye machin ki te pote non "[[Lis otomobil Ferrari|Ferrari]]] yo te bati. Ferrari depi kòmansman ane 2016 la pa fè pati gwoup [[Fiat]] ankò. Li te founi motè - apeprè {{formatnum:7500}} chak ane - ak penti pou kadav [[Maserati]], ansyen yon lòt sipòtè gwoup la. Nan [[Jen 2002]], Fiat, ki te chaje ak dèt kolosal, te oblije revann 34% Ferrari bay gwoup finansye Italyen [[Mediobanca]] pou yon montan {{unit|775|milyon}} ero.
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Ane
! colspan="121" |Kantite egzanplè ki vann
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
k8u7an75bhto1oov4kmc0gnqcdbwbx3
855552
855551
2024-11-12T12:34:03Z
BwaKajou
31668
/* Istwa */
855552
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
==Istwa==
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
Konpayi an sitiye nan [[Maranello]], nan [[Emilia-Romagna]], {{unit|35|km}} soti nan [[Bologna]]. Enzo Ferrari te fè bati nouvo enstalasyon la, apre [[Dezyèm Gè Mondyal la]], sou tè li te pran pandan lagè a nan gwo vil sa a ki sitiye {{unit|18|km}} nan sid [[Modena]] , kote premye machin ki te pote non "[[Lis otomobil Ferrari|Ferrari]]] yo te bati. Ferrari depi kòmansman ane 2016 la pa fè pati gwoup [[Fiat]] ankò. Li te founi motè - apeprè {{formatnum:7500}} chak ane - ak penti pou kadav [[Maserati]], ansyen yon lòt sipòtè gwoup la. Nan [[Jen 2002]], Fiat, ki te chaje ak dèt kolosal, te oblije revann 34% Ferrari bay gwoup finansye Italyen [[Mediobanca]] pou yon montan {{unit|775|milyon}} ero.
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Ane
! colspan="121" |Kantite egzanplè ki vann
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
ifxwkjbhv6vyz52dcjjbkd9rbqhue58
855553
855552
2024-11-12T12:34:42Z
BwaKajou
31668
855553
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
==Istwa==
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
Konpayi an sitiye nan [[Maranello]], nan [[Emilia-Romagna]], {{unit|35|km}} soti nan [[Bologna]]. Enzo Ferrari te fè bati nouvo enstalasyon la, apre [[Dezyèm Gè mondyal|Dezyèm Gè Mondyal la]], sou tè li te pran pandan lagè a nan gwo vil sa a ki sitiye {{unit|18|km}} nan sid [[Modena]] , kote premye machin ki te pote non "[[Lis otomobil Ferrari|Ferrari]] yo te bati. Ferrari depi kòmansman ane 2016 la pa fè pati gwoup [[Fiat]] ankò. Li te founi motè - apeprè {{formatnum:7500}} chak ane - ak penti pou kadav [[Maserati]], ansyen yon lòt sipòtè gwoup la. Nan [[Jen 2002]], Fiat, ki te chaje ak dèt kolosal, te oblije revann 34% Ferrari bay gwoup finansye Italyen [[Mediobanca]] pou yon montan {{unit|775|milyon}} ero.
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Ane
! colspan="121" |Kantite egzanplè ki vann
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
ep1k6lj1zlq8hvkqds15kfrvp817liz
855554
855553
2024-11-12T12:35:58Z
BwaKajou
31668
/* Istwa */
855554
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
==Istwa==
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
Konpayi an sitiye nan [[Maranello]], nan [[Emilia-Romagna]], {{unit|35|km}} soti nan [[Bologna]]. Enzo Ferrari te fè bati nouvo enstalasyon la, apre [[Dezyèm Gè mondyal|Dezyèm Gè Mondyal la]], sou tè li te pran pandan lagè a nan gwo vil sa a ki sitiye {{unit|18|km}} nan sid [[Modena]] , kote premye machin ki te pote non "[[Lis otomobil Ferrari|Ferrari]] yo te bati. Ferrari depi kòmansman ane 2016 la pa fè pati gwoup [[Fiat]] ankò. Li te founi motè - apeprè {{formatnum:7500}} chak ane - ak penti pou kadav [[Maserati]], ansyen yon lòt sipòtè gwoup la. Nan [[Jen 2002]], Fiat, ki te chaje ak dèt kolosal, te oblije revann 34% Ferrari bay gwoup finansye Italyen [[Mediobanca]] pou yon montan {{unit|775|milyon}} ero.
Eslogan {{foreign quote|lang=it|Formula Uomo}} ("Formula Man" an Italyen) rezime an de mo estrateji endistriyèl la te lanse nan [[1997]] pa [[Luca di Montezemolo]]. Estrateji sa a, ki mete moun nan mitan konsiderasyon manifakti a, gen entansyon "optimize espas travay, pran swen fòmasyon kontinyèl ak pran an kont lavi pèsonèl yo nan anplwaye yo"<ref>{{Web link|url =http:// www.motorlegend.com/actualite-automobile/travailler-chez-ferrari/1927.html|title=Li bon pou travay nan Ferrari|site=Motorlegend|online sou=4 me 2007|accessed on=29 novanm 2009}}</ref>. Finansman 200 milyon ero sou dizan, pwogram sa a dwe tou renove tout faktori Ferrari yo nan lòd yo amelyore anviwònman k ap viv anplwaye yo<ref name="autohebdo" />{{,}}<ref name="cbd" >{{en}} {{Lien Web|url=http://www.carbodydesign.com/archive/2008/07/06-ferrari-formula-uomo/|title=Ferrari Formula Uomo|sit =Car Body Design| aksè=30 Novanm 2009}}</ref>.
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Ane
! colspan="121" |Kantite egzanplè ki vann
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
go3hpdvro3fo89navqm8w440vd1n6rc
855555
855554
2024-11-12T12:40:14Z
BwaKajou
31668
/* Istwa */
855555
wikitext
text/x-wiki
'''Ferrari S.p.A.''' se yon konstriktè otomobil italyen ki baze nan Maranello, Itali, ki te fonde pa Enzo Ferrari an 1947.
==Istwa==
[[Fichye:Piloti_Alfa_Romeo_2.JPG|vignette| Enzo Ferrari (agòch) ak lòt chofè Alfa Romeo nan kòmansman ane 1930 yo .]]
[[Fichye:Ferrari_250_GTO_R_-_001.jpg|gauche|vignette| Ferrari 250 GTO imedyatman depase tout rival li yo.]]
[[Fichye:Ferrari-250-GT-Berlinetta-1.jpg|vignette| Ferrari 250 GT Berlinetta (1961).]]
[[Fichye:Luca_Cordero_di_Montezemolo.jpg|vignette| Luca di Montezemolo nan 2008.]]
Konpayi an sitiye nan [[Maranello]], nan [[Emilia-Romagna]], {{unit|35|km}} soti nan [[Bologna]]. Enzo Ferrari te fè bati nouvo enstalasyon la, apre [[Dezyèm Gè mondyal|Dezyèm Gè Mondyal la]], sou tè li te pran pandan lagè a nan gwo vil sa a ki sitiye {{unit|18|km}} nan sid [[Modena]] , kote premye machin ki te pote non "[[Lis otomobil Ferrari|Ferrari]] yo te bati. Ferrari depi kòmansman ane 2016 la pa fè pati gwoup [[Fiat]] ankò. Li te founi motè - apeprè {{formatnum:7500}} chak ane - ak penti pou kadav [[Maserati]], ansyen yon lòt sipòtè gwoup la. Nan [[Jen 2002]], Fiat, ki te chaje ak dèt kolosal, te oblije revann 34% Ferrari bay gwoup finansye Italyen [[Mediobanca]] pou yon montan {{unit|775|milyon}} ewo.
Eslogan {{foreign quote|lang=it|Formula Uomo}} ("Formula Man" an Italyen) rezime an de mo estrateji endistriyèl la te lanse nan [[1997]] pa [[Luca di Montezemolo]]. Estrateji sa a, ki mete moun nan mitan konsiderasyon manifakti a, gen entansyon "optimize espas travay, pran swen fòmasyon kontinyèl ak pran an kont lavi pèsonèl yo nan anplwaye yo"<ref>{{Web link|url =http:// www.motorlegend.com/actualite-automobile/travailler-chez-ferrari/1927.html|title=Li bon pou travay nan Ferrari|site=Motorlegend|online sou=4 me 2007|accessed on=29 novanm 2009}}</ref>. Finansman 200 milyon ero sou dizan, pwogram sa a dwe tou renove tout faktori Ferrari yo nan lòd yo amelyore anviwònman k ap viv anplwaye yo<ref name="autohebdo">{{Atik|prénom1=Romain|nom1=Bernard|titre=Formula Uomo|périodique=Auto Hebdo|numéro=Hors Série|jour=25|mois=septembre|année=2009|pages=60-67|consulté le=30 novembre 2009}}</ref>.{{,}}<ref name="cbd" >{{en}} {{Lien web|url=http://www.carbodydesign.com/archive/2008/07/06-ferrari-formula-uomo/|title=Ferrari Formula Uomo|sit =Car Body Design| aksè=30 Novanm 2009}}</ref>.
== Chif lavant ==
{| class="wikitable" border="1" style="font-size:95%;"
! rowspan="2" |Ane
! colspan="121" |Kantite egzanplè ki vann
|- style="font-size:65%; text-align:right;"
! colspan="1" style="background:#FFFFFF" width="10" |2000
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#FFFFFF" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |3000
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#C0C0C0" width="10" |
! colspan="1" style="background:#FF8000" width="10" |4000
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FF8000" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |5000
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#FFFF00" width="10" |
! colspan="1" style="background:#32CD32" width="10" |6000
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#32CD32" width="10" |
! colspan="1" style="background:#0000FF" width="10" |7000
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#0000FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |8000
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF00FF" width="10" |
! colspan="1" style="background:#FF0080" width="10" |9000
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0080" width="10" |
! colspan="1" style="background:#FF0000" width="10" |10000
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#FF0000" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |11000
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#CC66B2" width="10" |
! colspan="1" style="background:#804000" width="10" |<span style="color:white">'''12000'''</span>
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#804000" width="10" |
! colspan="1" style="background:#0000A0" width="10" |<span style="color:white">'''13000'''</span>
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#0000A0" width="10" |
! colspan="1" style="background:#800000" width="10" |<span style="color:white">'''14000'''</span>
|-
!1999
| colspan="18" align="right" bgcolor="cornsilk" style="background:#C0C0C0" |'''{{formatnum:3775}}'''
| colspan="103" bgcolor="whitesmoke" |
|-
!2000
| colspan="20" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4070}}'''
| colspan="101" bgcolor="whitesmoke" |
|-
!2001
| colspan="23" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4289}}'''
| colspan="98" bgcolor="whitesmoke" |
|-
!2002
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4236}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2003
| colspan="22" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4238}}'''
| colspan="99" bgcolor="whitesmoke" |
|-
!2004
| colspan="30" align="right" bgcolor="cornsilk" style="background:#FF8000" |'''{{formatnum:4975}}'''
| colspan="91" bgcolor="whitesmoke" |
|-
!2005
| colspan="34" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5409}}'''
| colspan="87" bgcolor="whitesmoke" |
|-
!2006
| colspan="37" align="right" bgcolor="cornsilk" style="background:#FFFF00" |'''{{formatnum:5671}}'''
| colspan="84" bgcolor="whitesmoke" |
|-
!2007
| colspan="45" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6465}}'''
| colspan="76" bgcolor="whitesmoke" |
|-
!2008
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6587}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2009<ref>{{En}} {{Cite web|url=http://www.usinenouvelle.com/article/les-ventes-de-ferrari-ont-marque-le-pas-en-2009.N126376|title=Les ventes de Ferrari ont marqué le pas en 2009|website=Usine Nouvelle}}</ref>
| colspan="43" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6250}}'''
| colspan="78" bgcolor="whitesmoke" |
|-
!2010<ref>{{En}} {{Cite web|url=http://news.sportauto.fr/news/1436058/599-GTO-Ferrari-FF-California-Ferrari-458-Italia|title=Une bonne année 2010 pour Ferrari|website=Sport Auto}}</ref>
| colspan="46" align="right" bgcolor="cornsilk" style="background:#32CD32" |'''{{formatnum:6573}}'''
| colspan="75" bgcolor="whitesmoke" |
|-
!2011
| colspan="52" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7195}}'''
| colspan="69" bgcolor="whitesmoke" |
|-
!2012
| colspan="54" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7405}}'''
| colspan="67" bgcolor="whitesmoke" |
|-
!2013<ref>{{En}} {{Cite web|url=http://2013interactiveannualreport.fiatspa.com/en/report-operations/commercial-performance-operating-segment/luxury-brands#start|title=Performance commerciale par segment d'exploitation:Les marques de luxe|website=Groupe Fiat}}</ref>
| colspan="50" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7000}}'''
| colspan="71" bgcolor="whitesmoke" |
|-
!2014<ref name="Rapport annuel 2015 Ferrari">{{En}} {{Cite web|url=http://corporate.ferrari.com/sites/ferrari15ipo/files/ferrari_nv_-_2015_annual_report_feb_25_final.pdf|title=Rapport annuel 2015|website=Ferrari corporate}}</ref>
| colspan="53" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7255}}'''
| colspan="68" bgcolor="whitesmoke" |
|-
!2015<ref name="Rapport annuel 2015 Ferrari" />
| colspan="57" align="right" bgcolor="cornsilk" style="background:#0000FF" |'''{{formatnum:7664}}'''
| colspan="64" bgcolor="whitesmoke" |
|-
!2016<ref>{{Cite web|url=http://www.motorlegend.com/actualite-automobile/ventes-2016-annee-record-pour-ferrari/15396.html|title=Ventes : nouveau record pour Ferrari en 2016|last=Samuel Morand|date=03 février 2017|publisher=''Motor Legend''}}</ref>
| colspan="60" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8014}}'''
| colspan="61" bgcolor="whitesmoke" |
|-
!2017<ref>{{Cite web|url=https://www.lesechos.fr/monde/europe/0301239647675-ferrari-avance-sur-les-chapeaux-de-roues-2150106.php|title=Ferrari avance sur les chapeaux de roues|last=Julien Dupont-Calbo|date=2018|publisher=''[[Les Échos]]''}}</ref>
| colspan="64" align="right" bgcolor="cornsilk" style="background:#FF00FF" |'''{{formatnum:8398}}'''
| colspan="57" bgcolor="whitesmoke" |
|-
!2018<ref>{{Cite web|url=http://corporate.ferrari.com/en/another-year-sustained-growth|title=Another year of sustained growth|last=Communiqué de presse Ferrari|date=31 janvier 2019|publisher=''ferrari''|language=en}}</ref>
| colspan="73" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9251}}'''
| colspan="48" bgcolor="whitesmoke" |
|-
!2019<ref>{{Cite web|url=https://www.turbo.fr/actualite-automobile/ferrari-depasse-les-10000-ventes-en-2019-156925|title=Ferrari dépasse les 10.000 ventes en 2019|last=Arnaud Peytier|date=4 février 2020}}</ref>
| colspan="83" align="right" bgcolor="cornsilk" style="background:#FF0000" |<span style="color:white">'''{{formatnum:10131}}'''</span>
| colspan="38" bgcolor="whitesmoke" |
|-
!2020<ref>{{Cite web|url=https://www.lepoint.fr/automobile/pour-ferrari-tout-va-bien-merci-03-08-2021-2437609_646.php|title=Pour Ferrari, tout va bien, merci|last=Jacques Chevalier|date=Août 2021}}</ref>
| colspan="72" align="right" bgcolor="cornsilk" style="background:#FF0080" |'''{{formatnum:9119}}'''
| colspan="49" bgcolor="whitesmoke" |
|-
!2021<ref>{{Cite web|url=https://www.caradisiac.com/ferrari-bat-son-record-de-ventes-194433.htm|title=Ferrari bat son record de ventes|last=Florent Ferrière|date=2 Février 2022}}</ref>
| colspan="92" align="right" bgcolor="cornsilk" style="background:#CC66B2" |<span style="color:white">'''{{formatnum:11155}}'''</span>
| colspan="39" bgcolor="whitesmoke" |
|-
!2022<ref>{{Cite web|url=https://www.moniteurautomobile.be/actu-auto/industrie-et-economie/ferrari-ventes-record-2022.html|title=Ferrari bat également tous les records en 2022|last=Yeelen Möller|date=3 février 2023}}</ref>
| colspan="113" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13221}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
!2023<ref>{{Cite web|url=https://www.italpassion.fr/ferrari/ferrari-chiffre-daffaires-record-en-2023-tout-en-limitant-ses-ventes/|title=Ferrari : chiffre d’affaires record en 2023, tout en limitant ses ventes|last=Alexandre|date=1 février 2024}}</ref>
| colspan="117" align="right" bgcolor="cornsilk" style="background:#0000A0" |<span style="color:white">'''{{formatnum:13663}}'''</span>
| colspan="8" bgcolor="whitesmoke" |
|-
|}
== Nòt ak referans ==
{{Referans}}
== Gade tou ==
{{Lòt pwojè|commons=Category:Ferrari}}{{Kategori prensipal|Ferrari}}
[[Kategori:Ferrari]]
[[Kategori:Mak italyèn]]
[[Kategori:Antrepriz fonde an 1947]]
9qynrbekpgfcoia0dlti0wj4eomr12h
Enzo Ferrari
0
93745
855556
2024-11-12T12:45:49Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/219747443|Enzo Ferrari]] »
855556
wikitext
text/x-wiki
{{Infobox Biographie2|entete=|charte=entrepreneur|nom=Enzo Ferrari|image=Enzo Ferrari Monza 1967.jpg|légende=Enzo Ferrari à Monza en 1967.|nom de naissance=|surnom=''Il Commendatore''|date de naissance={{Date de naissance|18|février|1898}}|lieu de naissance=[[Modène]] ([[Royaume d'Italie (1861-1946)|Italie]])|date de décès={{Date de décès|14|août|1988|18|2|1898}}|lieu de décès=[[Modène]] ([[Italie]])|nationalité={{drapeau2|Italie|domaine=Gentilé|genre=féminin}}|paysorigine=|pays de résidence=|profession=[[Industrie]]l, [[Ferrari (entreprise)|Ferrari]] <br /> ancien [[pilote automobile]]|occupation=|formation=|hommage=[[Ordre du Mérite de la République italienne]]|activités autres=|notes=|signature=Enzoferrari-signature.svg|famille=|IMHoF=2001}}'''Enzo Ferrari''', fèt 18 févriye 1898 nan Modena ([[Wayòm Itali (1861-1946)|Itali]]), kote li te mouri 14 out 1988, se yon chofè kous [[Itali|Italyen]] ak endistriyalis. Fondatè an [[1929 (almanak gregoryen)|1929]] nan Scuderia Ferrari, yon ekip kous ki ta vin yon pyonye epi, yon pilye nan Fòmil 1 chanpyona mondyal la, nan [[1947 (almanak gregoryen)|1947]] li te kreye konpayi an [[Ferrari (konpayi)|{{Lang|it|Ferrari Automobili}}]], ki konsepsyon, fabrike ak mache trè wo-fen machin espò . Surnom "''li kòmandan''» ("kòmandan an), Enzo Ferrari te konsakre lavi l nan konpayi li a, nan pwen nan vin tounen yon gwo figi istorik, entènasyonalman li te ye, nan motorsport. Enzo Ferrari te toujou mete kous motè anvan konstriksyon endistriyèl la nan [[machin]] wout epi li se atravè konpetisyon ke Ferrari te vin youn nan kreyatè ki pi popilè nan machin prestijye nan mond lan.
== Nòt ak referans ==
{{Referans}}
== Apendis ==
{{Lòt pwojè|commons=Category:Enzo Ferrari}}
* [[Konstriktè otomobil]]
* [[Ferrari (konpayi)]]
* Scuderia Ferrari
[[Kategori:Biznisman italyen]]
[[Kategori:Nesans an fevriye 1898]]
sr6kr0qkugfv11llr55f9dvbwlig2vs
855557
855556
2024-11-12T12:51:55Z
BwaKajou
31668
855557
wikitext
text/x-wiki
{{Infobox Biyografi|entete=|charte=entrepreneur|nom=Enzo Ferrari|imaj=Enzo Ferrari Monza 1967.jpg|lejand=Enzo Ferrari à Monza en 1967.|non nesans=|ti non=''Il Commendatore''|dat nesans={{Dat nesans|18|fevriye|1898}}|lye nesans=[[Modèn]] ([[Wayòm Itali (1861-1946)|Itali]])|dat lanmò={{Dat lanmò|14|out|1988|18|2|1898}}|lye lanmò=[[Modèn]] ([[Itali]])|nasyonalite={{drapo2|Itali|domèn=Jantile|jan=feminen}}|paysorigine=|pays de résidence=|pwofesyon=[[Endistri]]yèl, [[Ferrari (konpayi)|Ferrari]] <br /> ansyen [[pilòt otomobil]]|occupation=|formation=|omaj=[[Lòd merit Repiblik italyèn]]|activités autres=|notes=|siyati=Enzoferrari-signature.svg|famille=|IMHoF=2001}}
'''Enzo Ferrari''', fèt 18 févriye 1898 nan Modena ([[Wayòm Itali (1861-1946)|Itali]]), kote li te mouri 14 out 1988, se yon chofè kous [[Itali|Italyen]] ak endistriyalis. Fondatè an [[1929 (almanak gregoryen)|1929]] nan Scuderia Ferrari, yon ekip kous ki ta vin yon pyonye epi, yon pilye nan Fòmil 1 chanpyona mondyal la, nan [[1947 (almanak gregoryen)|1947]] li te kreye konpayi an [[Ferrari (konpayi)|{{Lang|it|Ferrari Automobili}}]], ki konsepsyon, fabrike ak mache trè wo-fen machin espò . Surnom "''li kòmandan''» ("kòmandan an), Enzo Ferrari te konsakre lavi l nan konpayi li a, nan pwen nan vin tounen yon gwo figi istorik, entènasyonalman li te ye, nan motorsport. Enzo Ferrari te toujou mete kous motè anvan konstriksyon endistriyèl la nan [[machin]] wout epi li se atravè konpetisyon ke Ferrari te vin youn nan kreyatè ki pi popilè nan machin prestijye nan mond lan.
== Nòt ak referans ==
{{Referans}}
== Apendis ==
{{Lòt pwojè|commons=Category:Enzo Ferrari}}
* [[Konstriktè otomobil]]
* [[Ferrari (konpayi)]]
* Scuderia Ferrari
[[Kategori:Biznisman italyen]]
[[Kategori:Nesans an fevriye 1898]]
dejmn3dszy4gzsuo0jasa37zhsjaoto
855558
855557
2024-11-12T12:56:06Z
BwaKajou
31668
855558
wikitext
text/x-wiki
{{Infobox Biyografi|entete=|charte=entrepreneur|nom=Enzo Ferrari|imaj=Enzo Ferrari Monza 1967.jpg|lejand=Enzo Ferrari à Monza en 1967.|non nesans=|ti non=''Il Commendatore''|dat nesans={{Dat nesans|18|fevriye|1898}}|lye nesans=[[Modèn]] ([[Wayòm Itali (1861-1946)|Itali]])|dat lanmò={{Dat lanmò|14|out|1988|18|2|1898}}|lye lanmò=[[Modèn]] ([[Itali]])|nasyonalite=[[Itali|italyèn]]|paysorigine=|pays de résidence=|pwofesyon=[[Endistri]]yèl, [[Ferrari (konpayi)|Ferrari]] <br /> ansyen [[pilòt otomobil]]|occupation=|formation=|omaj=[[Lòd merit Repiblik italyèn]]|activités autres=|notes=|siyati=Enzoferrari-signature.svg|famille=|IMHoF=2001}}
'''Enzo Ferrari''', fèt 18 févriye 1898 nan Modena ([[Wayòm Itali (1861-1946)|Itali]]), kote li te mouri 14 out 1988, se yon chofè kous [[Itali|Italyen]] ak endistriyalis. Fondatè an [[1929 (almanak gregoryen)|1929]] nan Scuderia Ferrari, yon ekip kous ki ta vin yon pyonye epi, yon pilye nan Fòmil 1 chanpyona mondyal la, nan [[1947 (almanak gregoryen)|1947]] li te kreye konpayi an [[Ferrari (konpayi)|{{Lang|it|Ferrari Automobili}}]], ki konsepsyon, fabrike ak mache trè wo-fen machin espò . Surnom "''li kòmandan''» ("kòmandan an), Enzo Ferrari te konsakre lavi l nan konpayi li a, nan pwen nan vin tounen yon gwo figi istorik, entènasyonalman li te ye, nan motorsport. Enzo Ferrari te toujou mete kous motè anvan konstriksyon endistriyèl la nan [[machin]] wout epi li se atravè konpetisyon ke Ferrari te vin youn nan kreyatè ki pi popilè nan machin prestijye nan mond lan.
== Nòt ak referans ==
{{Referans}}
== Apendis ==
{{Lòt pwojè|commons=Category:Enzo Ferrari}}
* [[Konstriktè otomobil]]
* [[Ferrari (konpayi)]]
* Scuderia Ferrari
[[Kategori:Biznisman italyen]]
[[Kategori:Nesans an fevriye 1898]]
gzfhmvd0orotcjhl2wcjhvmq0okb50x
Konstriktè otomobil
0
93746
855561
2024-11-12T13:27:27Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/220173706|Constructeur automobile]] »
855561
wikitext
text/x-wiki
[[Fichye:Kansas_City_Assembly.png|vignette| Yon liy asanblaj (izin [[Ford]] nan [[Kansas City, Missouri|Kansas City]] ).]]
[[Fichye:Cars_parked_on_the_pier_in_Barcelona_1997.jpg|vignette| Otomobil ap tann transpò (pò [[Baselòn|Barcelona]] ).]]
Yon '''konstriktè otomobil''' se yon konpayi nan sektè konstriksyon otomobil ki gen aktivite sitou nan konsepsyon, fabrikasyon ak kòmès [[Machin|otomobil]].
Remake byen konsantrasyon pifò konstriktè yo nan gwo gwoup entènasyonal ki gen orijin yo se swa nan [[Etazini|Ozetazini]], an [[Ewòp]] oksidantal ( [[Almay]], [[Frans|Lafrans]], [[Itali]] ), oswa nan [[Ekstrèm-Oryan|Ekstrèm Oryan an]] ( [[Japon]], [[Kore disid|Kore di Sid]], [[Chin|Lachin]] ). [[End]] sitou rasanble anba lisans men gen yon kèk konstriktè nasyonal ak endepandan ki ap pran fòs.
Se pa tout konstriktè ki fè tout pwodiksyon yo nan peyi kote syèj sosyal yo ye <ref group="Notes">Dans les tableaux, la nationalité est déterminée par le lieu d'implantation du siège social et les lieux de production ne sont pas précisés. </ref>. Gen kèk konstriktè ki baze nan peyi ki te gen pwodiksyon machin trè wo pou yon tan long. Gen lòt ki baze nan peyi sa yo rele emèjan", sa vle di ki piti piti ranfòse kapasite pwodiksyon yo, swa nan lanse nan aktivite sa a nan grafouyen oswa nan ogmante kapasite istorik yo. Pa "emèjan» Nou vle di sitou ki kalite pwodiksyon otomobil, osi byen ke matirite nan mache nasyonal peyi konsène yo (kritè sa a trè souvan sipèpoze ak sa ki nan kalifikasyon an "emèjan» yo itilize nan ekonomi).
=== Pwodiksyon mondyal otomobil depi 1999 ===
Pwodiksyon machin, eksepte machin itilitè, atravè lemond, depi 1999 <ref>{{En}} [http://www.worldometers.info/cars/ How many cars are produced in the world every year?]</ref>:
* 2018 : 79 333 306
* 2017 : 80 063 544
* 2016 : 72 105 435
* 2015 : 68 539 516
* 2014 : 67 782 035
* 2013 : 65 745 403
* 2012 : 63 081 024
* 2011 : 59 929 016
* 2010 : 58 264 852
* 2009 : 47 772 598
* 2008 : 52 940 559
* 2007 : 54 920 317
* 2006 : 49 886 549
* 2005 : 46 862 978
* 2004 : 44 554 268
* 2003 : 41 968 666
* 2002 : 41 358 394
* 2001 : 39 825 888
* 2000 : 41 215 653
* 1999 : 39 759 847
=== Klasman gwoup otomobil yo dapre lavant yo an Ewòp ===
==== 2016 ====
Top dis gwoup otomobil yo nan Ewòp yo, an 2016, selon pati nan mache yo <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
(klas, non gwoup, pati nan mache, ogmantasyon/diminye nan pataje konpare ak 2015)
# Volkswagen : 24.19 % (</img> )
# Renault-Nissan : 13.50 % (</img> )
# Gwoup PSA : 9.78 % (</img> )
# [[Ford]] : 6.93 % (</img> )
# BMW Group : 6.85 % (</img> )
# General Motors : 6.62 % (</img> )
# Fiat Chrysler Automobiles : 6.59 % (</img> )
# Daimler : 6.28 % (</img> )
# Gwoup motè Hyundai : 6.25 % (</img> )
# [[Toyota]] : 4.33 % (</img> )
==== 2009 ====
Sis gwo gwoup otomobil yo an Ewòp an 2009 (nan pati nan mache) :
# Volkswagen AG : 18.6 %
# PSA Peugeot Citroën : 13.7 %
# [[Ford]] : 10 %
# Renault-Nissan : 9.1 %
# Gwoup Fiat : 9.1 %
# General Motors : 8.8 %
=== Classement de fabricants machin selon lavant yo an Ewòp ===
==== 2016 ====
Pi gwo dis konstriktè otomobil yo nan Ewòp yo, nan 2016 <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
# [[Volkswagen]] : 1 720 829, 11,43 % (</img> )
# [[Renault]] : 1 100 880, 7,31 % (</img> )
# [[Ford]] : 1 043 294, 6,93 % (</img> )
# Opel / Vauxhall : 993 494, 6,60 % (</img> )
# Peugeot : 865 374, 5,75 % (</img> )
# Mercedes : 839 779, 5,58 % (</img> )
# Audi : 830 956, 5,52 % (</img> )
# BMW : 821 525, 5,46 % (</img> )
# Fiat : 746 126, 4,96 % (</img> )
# Skoda : 663 230, 4,41 % (</img> )
Pi gwo dis konstriktè otomobil yo an Ewòp (kantite anrejistreman an 2009) <ref>[http://www.7sur7.be/7s7/fr/1784/Auto/article/detail/1054437/2010/01/15/Baisse-des-nouvelles-immatriculations-en-Europe-en-2009.dhtml 7s7 Auto - Baisse des nouvelles immatriculations en Europe en 2009 (1054437)] </ref>:
# [[Volkswagen]] : 1 649 931
# [[Ford]] : 1 283 602
# [[Renault]] : 1 097 854
# Opel : 1 064 723
# Fiat : 1 016 340
# Peugeot : 995 130
# Citroën : 870 133
# [[Toyota]] : 710 369
# Audi : 612 293
# Mercedes-Benz : 593 088
== Nòt ak referans ==
=== Nòt ===
<references group="Notes" />
=== Referans ===
{{Referans}}
== Apendis ==
{{Kategori prensipal}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Konstriksyon otomobil]]
[[Kategori:Konstriktè otomobil]]
92juobqmkq3bdpb5glgwpbz7we7bn6g
855562
855561
2024-11-12T13:29:19Z
BwaKajou
31668
/* 2016 */
855562
wikitext
text/x-wiki
[[Fichye:Kansas_City_Assembly.png|vignette| Yon liy asanblaj (izin [[Ford]] nan [[Kansas City, Missouri|Kansas City]] ).]]
[[Fichye:Cars_parked_on_the_pier_in_Barcelona_1997.jpg|vignette| Otomobil ap tann transpò (pò [[Baselòn|Barcelona]] ).]]
Yon '''konstriktè otomobil''' se yon konpayi nan sektè konstriksyon otomobil ki gen aktivite sitou nan konsepsyon, fabrikasyon ak kòmès [[Machin|otomobil]].
Remake byen konsantrasyon pifò konstriktè yo nan gwo gwoup entènasyonal ki gen orijin yo se swa nan [[Etazini|Ozetazini]], an [[Ewòp]] oksidantal ( [[Almay]], [[Frans|Lafrans]], [[Itali]] ), oswa nan [[Ekstrèm-Oryan|Ekstrèm Oryan an]] ( [[Japon]], [[Kore disid|Kore di Sid]], [[Chin|Lachin]] ). [[End]] sitou rasanble anba lisans men gen yon kèk konstriktè nasyonal ak endepandan ki ap pran fòs.
Se pa tout konstriktè ki fè tout pwodiksyon yo nan peyi kote syèj sosyal yo ye <ref group="Notes">Dans les tableaux, la nationalité est déterminée par le lieu d'implantation du siège social et les lieux de production ne sont pas précisés. </ref>. Gen kèk konstriktè ki baze nan peyi ki te gen pwodiksyon machin trè wo pou yon tan long. Gen lòt ki baze nan peyi sa yo rele emèjan", sa vle di ki piti piti ranfòse kapasite pwodiksyon yo, swa nan lanse nan aktivite sa a nan grafouyen oswa nan ogmante kapasite istorik yo. Pa "emèjan» Nou vle di sitou ki kalite pwodiksyon otomobil, osi byen ke matirite nan mache nasyonal peyi konsène yo (kritè sa a trè souvan sipèpoze ak sa ki nan kalifikasyon an "emèjan» yo itilize nan ekonomi).
=== Pwodiksyon mondyal otomobil depi 1999 ===
Pwodiksyon machin, eksepte machin itilitè, atravè lemond, depi 1999 <ref>{{En}} [http://www.worldometers.info/cars/ How many cars are produced in the world every year?]</ref>:
* 2018 : 79 333 306
* 2017 : 80 063 544
* 2016 : 72 105 435
* 2015 : 68 539 516
* 2014 : 67 782 035
* 2013 : 65 745 403
* 2012 : 63 081 024
* 2011 : 59 929 016
* 2010 : 58 264 852
* 2009 : 47 772 598
* 2008 : 52 940 559
* 2007 : 54 920 317
* 2006 : 49 886 549
* 2005 : 46 862 978
* 2004 : 44 554 268
* 2003 : 41 968 666
* 2002 : 41 358 394
* 2001 : 39 825 888
* 2000 : 41 215 653
* 1999 : 39 759 847
=== Klasman gwoup otomobil yo dapre lavant yo an Ewòp ===
==== 2016 ====
Top dis gwoup otomobil yo nan Ewòp yo, an 2016, selon pati nan mache yo <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
(klas, non gwoup, pati nan mache, ogmantasyon/diminye nan pataje konpare ak 2015)
# Volkswagen : 24.19 % (</img> )
# Renault-Nissan : 13.50 % (</img> )
# Gwoup PSA : 9.78 % (</img> )
# [[Ford]] : 6.93 % (</img> )
# BMW Group : 6.85 % (</img> )
# General Motors : 6.62 % (</img> )
# Fiat Chrysler Automobiles : 6.59 % (</img> )
# Daimler : 6.28 % (</img> )
# Gwoup motè Hyundai : 6.25 % (</img> )
# [[Toyota]] : 4.33 % (</img> )
==== 2009 ====
Sis gwo gwoup otomobil yo an Ewòp an 2009 (nan pati nan mache) :
# Volkswagen AG : 18.6 %
# PSA Peugeot Citroën : 13.7 %
# [[Ford]] : 10 %
# Renault-Nissan : 9.1 %
# Gwoup Fiat : 9.1 %
# General Motors : 8.8 %
=== Classement de fabricants machin selon lavant yo an Ewòp ===
==== 2016 ====
Pi gwo dis konstriktè otomobil yo nan Ewòp yo, nan 2016 <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
({{Diminution}})
# [[Renault]] : {{formatnum:1100880}}, 7,31 % ({{augmentation}})
# [[Ford]] : {{formatnum:1043294}}, 6,93 % ({{Diminution}})
# [[Opel]]/[[Vauxhall]] : {{formatnum:993494}}, 6,60 % ({{Diminution}})
# [[Peugeot]] : {{formatnum:865374}}, 5,75 % ({{Diminution}})
# [[Mercedes-Benz|Mercedes]] : {{formatnum:839779}}, 5,58 % ({{augmentation}})
# [[Audi]] : {{formatnum:830956}}, 5,52 % ({{augmentation}})
# [[BMW]] : {{formatnum:821525}}, 5,46 % ({{augmentation}})
# [[Fiat]] : {{formatnum:746126}}, 4,96 % ({{augmentation}})
# [[Škoda Auto|Škoda]] : {{formatnum:663230}}, 4,41 % ({{augmentation}})
Pi gwo dis konstriktè otomobil yo an Ewòp (kantite anrejistreman an 2009) <ref>[http://www.7sur7.be/7s7/fr/1784/Auto/article/detail/1054437/2010/01/15/Baisse-des-nouvelles-immatriculations-en-Europe-en-2009.dhtml 7s7 Auto - Baisse des nouvelles immatriculations en Europe en 2009 (1054437)] </ref>:
# [[Volkswagen]] : 1 649 931
# [[Ford]] : 1 283 602
# [[Renault]] : 1 097 854
# Opel : 1 064 723
# Fiat : 1 016 340
# Peugeot : 995 130
# Citroën : 870 133
# [[Toyota]] : 710 369
# Audi : 612 293
# Mercedes-Benz : 593 088
== Nòt ak referans ==
=== Nòt ===
<references group="Notes" />
=== Referans ===
{{Referans}}
== Apendis ==
{{Kategori prensipal}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Konstriksyon otomobil]]
[[Kategori:Konstriktè otomobil]]
3rdeamfme30iiu8kbryykm183fpbpx2
855563
855562
2024-11-12T13:30:29Z
BwaKajou
31668
/* 2016 */
855563
wikitext
text/x-wiki
[[Fichye:Kansas_City_Assembly.png|vignette| Yon liy asanblaj (izin [[Ford]] nan [[Kansas City, Missouri|Kansas City]] ).]]
[[Fichye:Cars_parked_on_the_pier_in_Barcelona_1997.jpg|vignette| Otomobil ap tann transpò (pò [[Baselòn|Barcelona]] ).]]
Yon '''konstriktè otomobil''' se yon konpayi nan sektè konstriksyon otomobil ki gen aktivite sitou nan konsepsyon, fabrikasyon ak kòmès [[Machin|otomobil]].
Remake byen konsantrasyon pifò konstriktè yo nan gwo gwoup entènasyonal ki gen orijin yo se swa nan [[Etazini|Ozetazini]], an [[Ewòp]] oksidantal ( [[Almay]], [[Frans|Lafrans]], [[Itali]] ), oswa nan [[Ekstrèm-Oryan|Ekstrèm Oryan an]] ( [[Japon]], [[Kore disid|Kore di Sid]], [[Chin|Lachin]] ). [[End]] sitou rasanble anba lisans men gen yon kèk konstriktè nasyonal ak endepandan ki ap pran fòs.
Se pa tout konstriktè ki fè tout pwodiksyon yo nan peyi kote syèj sosyal yo ye <ref group="Notes">Dans les tableaux, la nationalité est déterminée par le lieu d'implantation du siège social et les lieux de production ne sont pas précisés. </ref>. Gen kèk konstriktè ki baze nan peyi ki te gen pwodiksyon machin trè wo pou yon tan long. Gen lòt ki baze nan peyi sa yo rele emèjan", sa vle di ki piti piti ranfòse kapasite pwodiksyon yo, swa nan lanse nan aktivite sa a nan grafouyen oswa nan ogmante kapasite istorik yo. Pa "emèjan» Nou vle di sitou ki kalite pwodiksyon otomobil, osi byen ke matirite nan mache nasyonal peyi konsène yo (kritè sa a trè souvan sipèpoze ak sa ki nan kalifikasyon an "emèjan» yo itilize nan ekonomi).
=== Pwodiksyon mondyal otomobil depi 1999 ===
Pwodiksyon machin, eksepte machin itilitè, atravè lemond, depi 1999 <ref>{{En}} [http://www.worldometers.info/cars/ How many cars are produced in the world every year?]</ref>:
* 2018 : 79 333 306
* 2017 : 80 063 544
* 2016 : 72 105 435
* 2015 : 68 539 516
* 2014 : 67 782 035
* 2013 : 65 745 403
* 2012 : 63 081 024
* 2011 : 59 929 016
* 2010 : 58 264 852
* 2009 : 47 772 598
* 2008 : 52 940 559
* 2007 : 54 920 317
* 2006 : 49 886 549
* 2005 : 46 862 978
* 2004 : 44 554 268
* 2003 : 41 968 666
* 2002 : 41 358 394
* 2001 : 39 825 888
* 2000 : 41 215 653
* 1999 : 39 759 847
=== Klasman gwoup otomobil yo dapre lavant yo an Ewòp ===
==== 2016 ====
Top dis gwoup otomobil yo nan Ewòp yo, an 2016, selon pati nan mache yo <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
(klas, non gwoup, pati nan mache, ogmantasyon/diminye nan pataje konpare ak 2015)
# Volkswagen : 24.19 % (</img> )
# Renault-Nissan : 13.50 % (</img> )
# Gwoup PSA : 9.78 % (</img> )
# [[Ford]] : 6.93 % (</img> )
# BMW Group : 6.85 % (</img> )
# General Motors : 6.62 % (</img> )
# Fiat Chrysler Automobiles : 6.59 % (</img> )
# Daimler : 6.28 % (</img> )
# Gwoup motè Hyundai : 6.25 % (</img> )
# [[Toyota]] : 4.33 % (</img> )
==== 2009 ====
Sis gwo gwoup otomobil yo an Ewòp an 2009 (nan pati nan mache) :
# Volkswagen AG : 18.6 %
# PSA Peugeot Citroën : 13.7 %
# [[Ford]] : 10 %
# Renault-Nissan : 9.1 %
# Gwoup Fiat : 9.1 %
# General Motors : 8.8 %
=== Classement de fabricants machin selon lavant yo an Ewòp ===
==== 2016 ====
Pi gwo dis konstriktè otomobil yo nan Ewòp yo, nan 2016 <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
# [[Volkswagen]] : {{formatnum:1720829}}, 11,43 % ({{Diminution}})
# [[Renault]] : {{formatnum:1100880}}, 7,31 % ({{augmentation}})
# [[Ford]] : {{formatnum:1043294}}, 6,93 % ({{Diminution}})
# [[Opel]]/[[Vauxhall]] : {{formatnum:993494}}, 6,60 % ({{Diminution}})
# [[Peugeot]] : {{formatnum:865374}}, 5,75 % ({{Diminution}})
# [[Mercedes-Benz|Mercedes]] : {{formatnum:839779}}, 5,58 % ({{augmentation}})
# [[Audi]] : {{formatnum:830956}}, 5,52 % ({{augmentation}})
# [[BMW]] : {{formatnum:821525}}, 5,46 % ({{augmentation}})
# [[Fiat]] : {{formatnum:746126}}, 4,96 % ({{augmentation}})
# [[Škoda Auto|Škoda]] : {{formatnum:663230}}, 4,41 % ({{augmentation}})
Pi gwo dis konstriktè otomobil yo an Ewòp (kantite anrejistreman an 2009) <ref>[http://www.7sur7.be/7s7/fr/1784/Auto/article/detail/1054437/2010/01/15/Baisse-des-nouvelles-immatriculations-en-Europe-en-2009.dhtml 7s7 Auto - Baisse des nouvelles immatriculations en Europe en 2009 (1054437)] </ref>:
# [[Volkswagen]] : 1 649 931
# [[Ford]] : 1 283 602
# [[Renault]] : 1 097 854
# Opel : 1 064 723
# Fiat : 1 016 340
# Peugeot : 995 130
# Citroën : 870 133
# [[Toyota]] : 710 369
# Audi : 612 293
# Mercedes-Benz : 593 088
== Nòt ak referans ==
=== Nòt ===
<references group="Notes" />
=== Referans ===
{{Referans}}
== Apendis ==
{{Kategori prensipal}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Konstriksyon otomobil]]
[[Kategori:Konstriktè otomobil]]
424gm3eyndekexwpb1795ojnem07gf9
855564
855563
2024-11-12T13:32:18Z
BwaKajou
31668
/* Klasman gwoup otomobil yo dapre lavant yo an Ewòp */
855564
wikitext
text/x-wiki
[[Fichye:Kansas_City_Assembly.png|vignette| Yon liy asanblaj (izin [[Ford]] nan [[Kansas City, Missouri|Kansas City]] ).]]
[[Fichye:Cars_parked_on_the_pier_in_Barcelona_1997.jpg|vignette| Otomobil ap tann transpò (pò [[Baselòn|Barcelona]] ).]]
Yon '''konstriktè otomobil''' se yon konpayi nan sektè konstriksyon otomobil ki gen aktivite sitou nan konsepsyon, fabrikasyon ak kòmès [[Machin|otomobil]].
Remake byen konsantrasyon pifò konstriktè yo nan gwo gwoup entènasyonal ki gen orijin yo se swa nan [[Etazini|Ozetazini]], an [[Ewòp]] oksidantal ( [[Almay]], [[Frans|Lafrans]], [[Itali]] ), oswa nan [[Ekstrèm-Oryan|Ekstrèm Oryan an]] ( [[Japon]], [[Kore disid|Kore di Sid]], [[Chin|Lachin]] ). [[End]] sitou rasanble anba lisans men gen yon kèk konstriktè nasyonal ak endepandan ki ap pran fòs.
Se pa tout konstriktè ki fè tout pwodiksyon yo nan peyi kote syèj sosyal yo ye <ref group="Notes">Dans les tableaux, la nationalité est déterminée par le lieu d'implantation du siège social et les lieux de production ne sont pas précisés. </ref>. Gen kèk konstriktè ki baze nan peyi ki te gen pwodiksyon machin trè wo pou yon tan long. Gen lòt ki baze nan peyi sa yo rele emèjan", sa vle di ki piti piti ranfòse kapasite pwodiksyon yo, swa nan lanse nan aktivite sa a nan grafouyen oswa nan ogmante kapasite istorik yo. Pa "emèjan» Nou vle di sitou ki kalite pwodiksyon otomobil, osi byen ke matirite nan mache nasyonal peyi konsène yo (kritè sa a trè souvan sipèpoze ak sa ki nan kalifikasyon an "emèjan» yo itilize nan ekonomi).
=== Pwodiksyon mondyal otomobil depi 1999 ===
Pwodiksyon machin, eksepte machin itilitè, atravè lemond, depi 1999 <ref>{{En}} [http://www.worldometers.info/cars/ How many cars are produced in the world every year?]</ref>:
* 2018 : 79 333 306
* 2017 : 80 063 544
* 2016 : 72 105 435
* 2015 : 68 539 516
* 2014 : 67 782 035
* 2013 : 65 745 403
* 2012 : 63 081 024
* 2011 : 59 929 016
* 2010 : 58 264 852
* 2009 : 47 772 598
* 2008 : 52 940 559
* 2007 : 54 920 317
* 2006 : 49 886 549
* 2005 : 46 862 978
* 2004 : 44 554 268
* 2003 : 41 968 666
* 2002 : 41 358 394
* 2001 : 39 825 888
* 2000 : 41 215 653
* 1999 : 39 759 847
=== Classement de fabricants machin selon lavant yo an Ewòp ===
==== 2016 ====
Pi gwo dis konstriktè otomobil yo nan Ewòp yo, nan 2016 <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
# [[Volkswagen]] : {{formatnum:1720829}}, 11,43 % ({{Diminution}})
# [[Renault]] : {{formatnum:1100880}}, 7,31 % ({{augmentation}})
# [[Ford]] : {{formatnum:1043294}}, 6,93 % ({{Diminution}})
# [[Opel]]/[[Vauxhall]] : {{formatnum:993494}}, 6,60 % ({{Diminution}})
# [[Peugeot]] : {{formatnum:865374}}, 5,75 % ({{Diminution}})
# [[Mercedes-Benz|Mercedes]] : {{formatnum:839779}}, 5,58 % ({{augmentation}})
# [[Audi]] : {{formatnum:830956}}, 5,52 % ({{augmentation}})
# [[BMW]] : {{formatnum:821525}}, 5,46 % ({{augmentation}})
# [[Fiat]] : {{formatnum:746126}}, 4,96 % ({{augmentation}})
# [[Škoda Auto|Škoda]] : {{formatnum:663230}}, 4,41 % ({{augmentation}})
Pi gwo dis konstriktè otomobil yo an Ewòp (kantite anrejistreman an 2009) <ref>[http://www.7sur7.be/7s7/fr/1784/Auto/article/detail/1054437/2010/01/15/Baisse-des-nouvelles-immatriculations-en-Europe-en-2009.dhtml 7s7 Auto - Baisse des nouvelles immatriculations en Europe en 2009 (1054437)] </ref>:
# [[Volkswagen]] : 1 649 931
# [[Ford]] : 1 283 602
# [[Renault]] : 1 097 854
# Opel : 1 064 723
# Fiat : 1 016 340
# Peugeot : 995 130
# Citroën : 870 133
# [[Toyota]] : 710 369
# Audi : 612 293
# Mercedes-Benz : 593 088
== Nòt ak referans ==
=== Nòt ===
<references group="Notes" />
=== Referans ===
{{Referans}}
== Apendis ==
{{Kategori prensipal}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Konstriksyon otomobil]]
[[Kategori:Konstriktè otomobil]]
j2d2k7figr03sat171byyptyhwo3ja0
855565
855564
2024-11-12T13:32:39Z
BwaKajou
31668
/* 2016 */
855565
wikitext
text/x-wiki
[[Fichye:Kansas_City_Assembly.png|vignette| Yon liy asanblaj (izin [[Ford]] nan [[Kansas City, Missouri|Kansas City]] ).]]
[[Fichye:Cars_parked_on_the_pier_in_Barcelona_1997.jpg|vignette| Otomobil ap tann transpò (pò [[Baselòn|Barcelona]] ).]]
Yon '''konstriktè otomobil''' se yon konpayi nan sektè konstriksyon otomobil ki gen aktivite sitou nan konsepsyon, fabrikasyon ak kòmès [[Machin|otomobil]].
Remake byen konsantrasyon pifò konstriktè yo nan gwo gwoup entènasyonal ki gen orijin yo se swa nan [[Etazini|Ozetazini]], an [[Ewòp]] oksidantal ( [[Almay]], [[Frans|Lafrans]], [[Itali]] ), oswa nan [[Ekstrèm-Oryan|Ekstrèm Oryan an]] ( [[Japon]], [[Kore disid|Kore di Sid]], [[Chin|Lachin]] ). [[End]] sitou rasanble anba lisans men gen yon kèk konstriktè nasyonal ak endepandan ki ap pran fòs.
Se pa tout konstriktè ki fè tout pwodiksyon yo nan peyi kote syèj sosyal yo ye <ref group="Notes">Dans les tableaux, la nationalité est déterminée par le lieu d'implantation du siège social et les lieux de production ne sont pas précisés. </ref>. Gen kèk konstriktè ki baze nan peyi ki te gen pwodiksyon machin trè wo pou yon tan long. Gen lòt ki baze nan peyi sa yo rele emèjan", sa vle di ki piti piti ranfòse kapasite pwodiksyon yo, swa nan lanse nan aktivite sa a nan grafouyen oswa nan ogmante kapasite istorik yo. Pa "emèjan» Nou vle di sitou ki kalite pwodiksyon otomobil, osi byen ke matirite nan mache nasyonal peyi konsène yo (kritè sa a trè souvan sipèpoze ak sa ki nan kalifikasyon an "emèjan» yo itilize nan ekonomi).
=== Pwodiksyon mondyal otomobil depi 1999 ===
Pwodiksyon machin, eksepte machin itilitè, atravè lemond, depi 1999 <ref>{{En}} [http://www.worldometers.info/cars/ How many cars are produced in the world every year?]</ref>:
* 2018 : 79 333 306
* 2017 : 80 063 544
* 2016 : 72 105 435
* 2015 : 68 539 516
* 2014 : 67 782 035
* 2013 : 65 745 403
* 2012 : 63 081 024
* 2011 : 59 929 016
* 2010 : 58 264 852
* 2009 : 47 772 598
* 2008 : 52 940 559
* 2007 : 54 920 317
* 2006 : 49 886 549
* 2005 : 46 862 978
* 2004 : 44 554 268
* 2003 : 41 968 666
* 2002 : 41 358 394
* 2001 : 39 825 888
* 2000 : 41 215 653
* 1999 : 39 759 847
=== Classement de fabricants machin selon lavant yo an Ewòp ===
==== 2016 ====
Pi gwo dis konstriktè otomobil yo nan Ewòp yo, nan 2016 <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
# [[Volkswagen]] : {{formatnum:1720829}}, 11,43 % ({{Diminution}})
# [[Renault]] : {{formatnum:1100880}}, 7,31 % ({{augmentation}})
# [[Ford]] : {{formatnum:1043294}}, 6,93 % ({{Diminution}})
# [[Opel]]/[[Vauxhall]] : {{formatnum:993494}}, 6,60 % ({{Diminution}})
# [[Peugeot]] : {{formatnum:865374}}, 5,75 % ({{Diminution}})
# [[Mercedes-Benz|Mercedes]] : {{formatnum:839779}}, 5,58 % ({{augmentation}})
# [[Audi]] : {{formatnum:830956}}, 5,52 % ({{augmentation}})
# [[BMW]] : {{formatnum:821525}}, 5,46 % ({{augmentation}})
# [[Fiat]] : {{formatnum:746126}}, 4,96 % ({{augmentation}})
# [[Škoda Auto|Škoda]] : {{formatnum:663230}}, 4,41 % ({{augmentation}})
==== 2009 ====
Pi gwo dis konstriktè otomobil yo an Ewòp (kantite anrejistreman an 2009) <ref>[http://www.7sur7.be/7s7/fr/1784/Auto/article/detail/1054437/2010/01/15/Baisse-des-nouvelles-immatriculations-en-Europe-en-2009.dhtml 7s7 Auto - Baisse des nouvelles immatriculations en Europe en 2009 (1054437)] </ref>:
# [[Volkswagen]] : 1 649 931
# [[Ford]] : 1 283 602
# [[Renault]] : 1 097 854
# Opel : 1 064 723
# Fiat : 1 016 340
# Peugeot : 995 130
# Citroën : 870 133
# [[Toyota]] : 710 369
# Audi : 612 293
# Mercedes-Benz : 593 088
== Nòt ak referans ==
=== Nòt ===
<references group="Notes" />
=== Referans ===
{{Referans}}
== Apendis ==
{{Kategori prensipal}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Konstriksyon otomobil]]
[[Kategori:Konstriktè otomobil]]
mwfsso35n3qatuny656dp9i5ex2chzb
855569
855565
2024-11-12T13:35:32Z
BwaKajou
31668
/* 2016 */
855569
wikitext
text/x-wiki
[[Fichye:Kansas_City_Assembly.png|vignette| Yon liy asanblaj (izin [[Ford]] nan [[Kansas City, Missouri|Kansas City]] ).]]
[[Fichye:Cars_parked_on_the_pier_in_Barcelona_1997.jpg|vignette| Otomobil ap tann transpò (pò [[Baselòn|Barcelona]] ).]]
Yon '''konstriktè otomobil''' se yon konpayi nan sektè konstriksyon otomobil ki gen aktivite sitou nan konsepsyon, fabrikasyon ak kòmès [[Machin|otomobil]].
Remake byen konsantrasyon pifò konstriktè yo nan gwo gwoup entènasyonal ki gen orijin yo se swa nan [[Etazini|Ozetazini]], an [[Ewòp]] oksidantal ( [[Almay]], [[Frans|Lafrans]], [[Itali]] ), oswa nan [[Ekstrèm-Oryan|Ekstrèm Oryan an]] ( [[Japon]], [[Kore disid|Kore di Sid]], [[Chin|Lachin]] ). [[End]] sitou rasanble anba lisans men gen yon kèk konstriktè nasyonal ak endepandan ki ap pran fòs.
Se pa tout konstriktè ki fè tout pwodiksyon yo nan peyi kote syèj sosyal yo ye <ref group="Notes">Dans les tableaux, la nationalité est déterminée par le lieu d'implantation du siège social et les lieux de production ne sont pas précisés. </ref>. Gen kèk konstriktè ki baze nan peyi ki te gen pwodiksyon machin trè wo pou yon tan long. Gen lòt ki baze nan peyi sa yo rele emèjan", sa vle di ki piti piti ranfòse kapasite pwodiksyon yo, swa nan lanse nan aktivite sa a nan grafouyen oswa nan ogmante kapasite istorik yo. Pa "emèjan» Nou vle di sitou ki kalite pwodiksyon otomobil, osi byen ke matirite nan mache nasyonal peyi konsène yo (kritè sa a trè souvan sipèpoze ak sa ki nan kalifikasyon an "emèjan» yo itilize nan ekonomi).
=== Pwodiksyon mondyal otomobil depi 1999 ===
Pwodiksyon machin, eksepte machin itilitè, atravè lemond, depi 1999 <ref>{{En}} [http://www.worldometers.info/cars/ How many cars are produced in the world every year?]</ref>:
* 2018 : 79 333 306
* 2017 : 80 063 544
* 2016 : 72 105 435
* 2015 : 68 539 516
* 2014 : 67 782 035
* 2013 : 65 745 403
* 2012 : 63 081 024
* 2011 : 59 929 016
* 2010 : 58 264 852
* 2009 : 47 772 598
* 2008 : 52 940 559
* 2007 : 54 920 317
* 2006 : 49 886 549
* 2005 : 46 862 978
* 2004 : 44 554 268
* 2003 : 41 968 666
* 2002 : 41 358 394
* 2001 : 39 825 888
* 2000 : 41 215 653
* 1999 : 39 759 847
=== Classement de fabricants machin selon lavant yo an Ewòp ===
==== 2016 ====
Pi gwo dis konstriktè otomobil yo nan Ewòp yo, nan 2016 <ref name="Bilan_2016_Europe">{{Cite web|url=http://www.leblogauto.com/2017/01/bilan-2016-europe.html|title=Bilan 2016 : Europe|last=G. Bottet|year=23 janvier 2017|website=leblogauto.com|language=fr|access-date=20 février 2017}}.</ref>:
# [[Volkswagen]] : {{formatnum:1720829}}, 11,43 % ({{Diminution}})
# [[Renault]] : {{formatnum:1100880}}, 7,31 % ({{augmentation}})
# [[Ford]] : {{formatnum:1043294}}, 6,93 % ({{Diminution}})
# [[Opel]]/[[Vauxhall]] : {{formatnum:993494}}, 6,60 % ({{Diminution}})
# [[Peugeot]] : {{formatnum:865374}}, 5,75 % ({{Diminution}})
# [[Mercedes-Benz|Mercedes]] : {{formatnum:839779}}, 5,58 % ({{augmentation}})
# [[Audi]] : {{formatnum:830956}}, 5,52 % ({{augmentation}})
# [[BMW]] : {{formatnum:821525}}, 5,46 % ({{augmentation}})
# [[Fiat]] : {{formatnum:746126}}, 4,96 % ({{augmentation}})
# [[Škoda Auto|Škoda]] : {{formatnum:663230}}, 4,41 % ({{augmentation}})
==== 2009 ====
Pi gwo dis konstriktè otomobil yo an Ewòp (kantite anrejistreman an 2009) <ref>[http://www.7sur7.be/7s7/fr/1784/Auto/article/detail/1054437/2010/01/15/Baisse-des-nouvelles-immatriculations-en-Europe-en-2009.dhtml 7s7 Auto - Baisse des nouvelles immatriculations en Europe en 2009 (1054437)] </ref>:
# [[Volkswagen]] : 1 649 931
# [[Ford]] : 1 283 602
# [[Renault]] : 1 097 854
# Opel : 1 064 723
# Fiat : 1 016 340
# Peugeot : 995 130
# Citroën : 870 133
# [[Toyota]] : 710 369
# Audi : 612 293
# Mercedes-Benz : 593 088
== Nòt ak referans ==
=== Nòt ===
<references group="Notes" />
=== Referans ===
{{Referans}}
== Apendis ==
{{Kategori prensipal}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Konstriksyon otomobil]]
[[Kategori:Konstriktè otomobil]]
t5p99e04dm5ke1kdc5yn4f1nu25i4jh
Modèl:Diminution
10
93747
855566
2024-11-12T13:33:17Z
BwaKajou
31668
Redireksyon sou [[Modèl:Diminisyon]]
855566
wikitext
text/x-wiki
#redirect[[Modèl:Diminisyon]]
e6csxw2acgbzt8xnoycnfxyecmpguda
Modèl:Augmentation
10
93748
855567
2024-11-12T13:33:56Z
BwaKajou
31668
Redireksyon sou [[Modèl:Ogmantasyon]]
855567
wikitext
text/x-wiki
#Redirect[[Modèl:Ogmantasyon]]
nqn5j1yoszahnyapueph9vm1qhlgyik
Modèl:Diminisyon
10
93749
855568
2024-11-12T13:35:10Z
BwaKajou
31668
Paj ki kreye ak " {{#ifeq: {{{1|}}} | tri | <span data-sort-value="−">[[Fichye:Decrease2.svg|{{{2|11px}}}|an diminisyon|alt=−|link=]]</span> | <span data-sort-value="">[[Fichye:Decrease2.svg|{{{2|11px}}}|{{#if:{{{1|}}}|{{{1}}}|an diminisyon}}|link=]]</span> }}<noinclude>{{Documentation}}</noinclude> "
855568
wikitext
text/x-wiki
{{#ifeq: {{{1|}}} | tri
| <span data-sort-value="−">[[Fichye:Decrease2.svg|{{{2|11px}}}|an diminisyon|alt=−|link=]]</span>
| <span data-sort-value="">[[Fichye:Decrease2.svg|{{{2|11px}}}|{{#if:{{{1|}}}|{{{1}}}|an diminisyon}}|link=]]</span>
}}<noinclude>{{Documentation}}</noinclude>
kq67bzor6er1t601uhoo0z2g8ryjzza
J. Paul Getty Museum
0
93750
855571
2024-11-12T13:41:07Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/218936364|J. Paul Getty Museum]] »
855571
wikitext
text/x-wiki
'''J.''' '''Paul Getty Museum''' se yon mize atizay [[Etazini|ameriken]] nan [[Los Angeles, Kalifòni|Los Angeles]], [[Kalifòni]]. Souvan yo rele l '''Gettty''', li deplwaye sou de kanpis: Villa Getty ak Getty Center <ref name="visitors">{{Cite web|url=https://www.museus.gov.br/wp-content/uploads/2017/04/20170406-CPAI-Ranking2016Pub-Comp-.pdf|title=Visitor Figures 2016|date=April 2017|publisher=[[The Art Newspaper]] Review|page=14|access-date=23 mars 2018}}</ref>.
Mize Getty orijinal la, Villa Getty, sitiye nan katye Pacific Palisades. Li prezante zèv atistik ki soti nan [[Grès antik|ansyen Lagrès]], [[Wòm ansyen|Wòm]] ak Etruria <ref>{{Cite web|url=http://getty.edu/visit/|title=Visit the Getty|publisher=Getty.edu|access-date=26 janvier 2012}}</ref>. Getty Center a sitiye nan katye Brentwood. Li prezante penti, desen, maniskri eklere, eskilti, atizay dekoratif ak foto <ref>{{Cite web|url=http://www.getty.edu/museum/about.html|title=About the Museum (Getty Museum)|website=www.getty.edu|access-date=16 mars 2018}}</ref> {{,}} <ref>{{Cite web|url=http://www.getty.edu/art/photographs/|title=Photographs | the J. Paul Getty Museum|website=www.getty.edu|access-date=16 mars 2018}}</ref>
[[Fichye:Getty_villa,_peristilio_esterno_10.JPG|centré|vignette| Peristil nan Geti Villa a, gwo lakou jaden an 2010.]]
== Nòt ak referans ==
<references />
== Apendis ==
{{Lòt pwojè|commons=Getty Museum}}
=== Lyen ekstèn ===
{{Liens}}
[[Kategori:Atik Wikipedya avèk dosye otorite]]
[[Kategori:Fanmi Getty]]
7xkij6bj42hj2zxky33jm6byr00eja0
Lila (Van Gogh)
0
93751
855572
2024-11-12T13:47:24Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/218914707|Lilas (Van Gogh)]] »
855572
wikitext
text/x-wiki
'''''Lila''''' a se yon tablo [[Vincent van Gogh]] nan Mize Èmitaj nan [[Sen Pitèboug|Saint Petersburg]].
== Istwa ==
Van Gogh te pentire tablo sa a nan mwa me 1889, pandan atis la t ap resevwa tretman nan [[Saint-Rémy-de-Provence]] nan lopital pou moun fou [[Théophile Peyron|Doktè Peyron]] a. Lilas sa a te nan jaden lopital kote Van Gogh te trete. Ekspresyon an dramatik nan moman sa yo transkri nan mouvman an nan ti pyebwa a flè. Lè li rive nan azil la, yo te entèdi l mache nan peyi a pou premye mwa a, se nan jaden sa a ke li konpoze etid flè ki pi popilè <ref>Ralph Skea, ''Les Arbres de Vincent van Gogh'', Londres, éd. Thames & Hudson, traduction française de Lydie Échasseriaud, 2013 </ref> . Li te kwè ke kominyon ak lanati - kèlkeswa fòm li - ta dwe pèmèt yon moun antre an kontak ak sa ki pi wo a, « ak [...] yon bagay sa a ki anwo a [...] enkonpreyansib. » <ref>Lettre n°403 à son frère [[Théodore van Gogh (négociant en art)|Théo]], in ''Vincent van Gogh - Les Lettres'' 6 volumes, Arles, Actes Sud, 2009 </ref>
== Nòt ak referans ==
{{Referans}}
== Bibliyografi ==
* [[Jacob Baart de la Faille]], ''Zèv Vincent van Gogh, katalòg rezone, Ouvraj ki te akonpaye pa repwodiksyon de plis pase 1,600 penti, desen, aquarelle ak engraving pa mèt la'', 6 volim, edisyon G. van Oest, Pari & [[Briksèl]], 1928
== Lyen ekstèn ==
* {{En}} [http://www.vangoghgallery.com/catalog/Painting/305/Lilacs.html ''Lilas''] (Van Gogh Gallery)
* {{En}} [http://www.hermitagemuseum.org/fcgi-bin/db2www/descrPage.mac/descrPage?selLang=English&indexClass=PICTURE_EN&PID=GJ-6511&numView=1&ID_NUM=1&thumbFile=%2Ftmplobs%2FVFO5BKQYYRT_234N216.jpg&embViewVer=noEmb&comeFrom=quick&sorting=no&thumbId=6&numResults=9&tmCond=van+Gogh&searchIndex=TAGFILEN&author=Van%26%2332%3BGogh%2C%26%2332%3BVincent ''Lilas'' (site officiel du musée de l'Ermitage)]
[[Kategori:Me 1889]]
[[Kategori:1889 an Frans]]
[[Kategori:Tablo reyalize an 1889]]
[[Kategori:Tablo Vincent van Gogh]]
j4rb7bwctsk1f00jxb7b00vw9papbhm
855590
855572
2024-11-12T15:51:37Z
BwaKajou
31668
855590
wikitext
text/x-wiki
{{infobox atizay}}
'''''Lila''''' a se yon tablo [[Vincent van Gogh]] nan Mize Èmitaj nan [[Sen Pitèboug|Saint Petersburg]].
== Istwa ==
Van Gogh te pentire tablo sa a nan mwa me 1889, pandan atis la t ap resevwa tretman nan [[Saint-Rémy-de-Provence]] nan lopital pou moun fou [[Théophile Peyron|Doktè Peyron]] a. Lilas sa a te nan jaden lopital kote Van Gogh te trete. Ekspresyon an dramatik nan moman sa yo transkri nan mouvman an nan ti pyebwa a flè. Lè li rive nan azil la, yo te entèdi l mache nan peyi a pou premye mwa a, se nan jaden sa a ke li konpoze etid flè ki pi popilè <ref>Ralph Skea, ''Les Arbres de Vincent van Gogh'', Londres, éd. Thames & Hudson, traduction française de Lydie Échasseriaud, 2013 </ref> . Li te kwè ke kominyon ak lanati - kèlkeswa fòm li - ta dwe pèmèt yon moun antre an kontak ak sa ki pi wo a, « ak [...] yon bagay sa a ki anwo a [...] enkonpreyansib. » <ref>Lettre n°403 à son frère [[Théodore van Gogh (négociant en art)|Théo]], in ''Vincent van Gogh - Les Lettres'' 6 volumes, Arles, Actes Sud, 2009 </ref>
== Nòt ak referans ==
{{Referans}}
== Bibliyografi ==
* [[Jacob Baart de la Faille]], ''Zèv Vincent van Gogh, katalòg rezone, Ouvraj ki te akonpaye pa repwodiksyon de plis pase 1,600 penti, desen, aquarelle ak engraving pa mèt la'', 6 volim, edisyon G. van Oest, Pari & [[Briksèl]], 1928
== Lyen ekstèn ==
* {{En}} [http://www.vangoghgallery.com/catalog/Painting/305/Lilacs.html ''Lilas''] (Van Gogh Gallery)
* {{En}} [http://www.hermitagemuseum.org/fcgi-bin/db2www/descrPage.mac/descrPage?selLang=English&indexClass=PICTURE_EN&PID=GJ-6511&numView=1&ID_NUM=1&thumbFile=%2Ftmplobs%2FVFO5BKQYYRT_234N216.jpg&embViewVer=noEmb&comeFrom=quick&sorting=no&thumbId=6&numResults=9&tmCond=van+Gogh&searchIndex=TAGFILEN&author=Van%26%2332%3BGogh%2C%26%2332%3BVincent ''Lilas'' (site officiel du musée de l'Ermitage)]
[[Kategori:Me 1889]]
[[Kategori:1889 an Frans]]
[[Kategori:Tablo reyalize an 1889]]
[[Kategori:Tablo Vincent van Gogh]]
d484nnqylwaj7742kfq0lrbavjkdlvu
855597
855590
2024-11-12T16:54:15Z
BwaKajou
31668
855597
wikitext
text/x-wiki
{{infobox atizay}}
'''''Lila''''' a se yon tablo [[Vincent van Gogh]] nan Mize Èmitaj nan [[Sen Pitèboug|Saint Petersburg]].
== Istwa ==
Van Gogh te pentire tablo sa a nan mwa me 1889, pandan atis la t ap resevwa tretman nan [[Saint-Rémy-de-Provence]] nan lopital pou moun fou [[Théophile Peyron|Doktè Peyron]] a. Lilas sa a te nan jaden lopital kote Van Gogh te trete. Ekspresyon an dramatik nan moman sa yo transkri nan mouvman an nan ti pyebwa a flè. Lè li rive nan azil la, yo te entèdi l mache nan peyi a pou premye mwa a, se nan jaden sa a ke li konpoze etid flè ki pi popilè <ref>Ralph Skea, ''Les Arbres de Vincent van Gogh'', Londres, éd. Thames & Hudson, traduction française de Lydie Échasseriaud, 2013 </ref> . Li te kwè ke kominyon ak lanati - kèlkeswa fòm li - ta dwe pèmèt yon moun antre an kontak ak sa ki pi wo a, « ak [...] yon bagay sa a ki anwo a [...] enkonpreyansib. » <ref>Lettre n°403 à son frère [[Théodore van Gogh (négociant en art)|Théo]], in ''Vincent van Gogh - Les Lettres'' 6 volumes, Arles, Actes Sud, 2009 </ref>
== Nòt ak referans ==
{{Referans}}
== Bibliyografi ==
* [[Jacob Baart de la Faille]], ''Zèv Vincent van Gogh, katalòg rezone, Ouvraj ki te akonpaye pa repwodiksyon de plis pase 1,600 penti, desen, aquarelle ak engraving pa mèt la'', 6 volim, edisyon G. van Oest, Pari & [[Briksèl]], 1928
== Lyen ekstèn ==
* {{En}} [http://www.vangoghgallery.com/catalog/Painting/305/Lilacs.html ''Lilas''] (Van Gogh Gallery)
* {{En}} [http://www.hermitagemuseum.org/fcgi-bin/db2www/descrPage.mac/descrPage?selLang=English&indexClass=PICTURE_EN&PID=GJ-6511&numView=1&ID_NUM=1&thumbFile=%2Ftmplobs%2FVFO5BKQYYRT_234N216.jpg&embViewVer=noEmb&comeFrom=quick&sorting=no&thumbId=6&numResults=9&tmCond=van+Gogh&searchIndex=TAGFILEN&author=Van%26%2332%3BGogh%2C%26%2332%3BVincent ''Lilas'' (site officiel du musée de l'Ermitage)]
[[Kategori:Me 1889]]
[[Kategori:1889 an Frans]]
[[Kategori:Tablo reyalize an 1889]]
[[Kategori:Tablo Vincent van Gogh]]
pqo00xxdnuf100hbnomuzfx436s28sx
855600
855597
2024-11-12T17:29:36Z
BwaKajou
31668
855600
wikitext
text/x-wiki
{{infobox atizay}}
'''''Lila''''' a se yon tablo [[Vincent van Gogh]] nan Mize Èmitaj nan [[Sen Pitèboug|Saint Petersburg]].
== Istwa ==
Van Gogh te pentire tablo sa a nan mwa me 1889, pandan atis la t ap resevwa tretman nan [[Saint-Rémy-de-Provence]] nan lopital pou moun fou [[Théophile Peyron|Doktè Peyron]] a. Lilas sa a te nan jaden lopital kote Van Gogh te trete. Ekspresyon an dramatik nan moman sa yo transkri nan mouvman an nan ti pyebwa a flè. Lè li rive nan azil la, yo te entèdi l mache nan peyi a pou premye mwa a, se nan jaden sa a ke li konpoze etid flè ki pi popilè <ref>Ralph Skea, ''Les Arbres de Vincent van Gogh'', Londres, éd. Thames & Hudson, traduction française de Lydie Échasseriaud, 2013 </ref> . Li te kwè ke kominyon ak lanati - kèlkeswa fòm li - ta dwe pèmèt yon moun antre an kontak ak sa ki pi wo a, « ak [...] yon bagay sa a ki anwo a [...] enkonpreyansib. » <ref>Lettre n°403 à son frère [[Théodore van Gogh (négociant en art)|Théo]], in ''Vincent van Gogh - Les Lettres'' 6 volumes, Arles, Actes Sud, 2009 </ref>
== Nòt ak referans ==
{{Referans}}
== Bibliyografi ==
* [[Jacob Baart de la Faille]], ''Zèv Vincent van Gogh, katalòg rezone, Ouvraj ki te akonpaye pa repwodiksyon de plis pase 1,600 penti, desen, aquarelle ak engraving pa mèt la'', 6 volim, edisyon G. van Oest, Pari & [[Briksèl]], 1928
== Lyen ekstèn ==
* {{En}} [http://www.vangoghgallery.com/catalog/Painting/305/Lilacs.html ''Lilas''] (Van Gogh Gallery)
* {{En}} [http://www.hermitagemuseum.org/fcgi-bin/db2www/descrPage.mac/descrPage?selLang=English&indexClass=PICTURE_EN&PID=GJ-6511&numView=1&ID_NUM=1&thumbFile=%2Ftmplobs%2FVFO5BKQYYRT_234N216.jpg&embViewVer=noEmb&comeFrom=quick&sorting=no&thumbId=6&numResults=9&tmCond=van+Gogh&searchIndex=TAGFILEN&author=Van%26%2332%3BGogh%2C%26%2332%3BVincent ''Lilas'' (site officiel du musée de l'Ermitage)]
[[Kategori:Me 1889]]
[[Kategori:1889 an Frans]]
[[Kategori:Tablo reyalize an 1889]]
[[Kategori:Tablo Vincent van Gogh]]
asrxdhj7ost4c4qwgf8r7l4u7talkha
Kategori:Paj ki itilize P31
14
93752
855583
2024-11-12T15:17:34Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855583
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P366
14
93753
855584
2024-11-12T15:17:57Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855584
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P170
14
93754
855601
2024-11-12T17:30:09Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855601
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P136
14
93755
855602
2024-11-12T17:30:35Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855602
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P186
14
93756
855603
2024-11-12T17:30:45Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855603
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P1071
14
93757
855604
2024-11-12T17:30:59Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855604
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P2048
14
93758
855605
2024-11-12T17:31:10Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855605
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P2049
14
93759
855606
2024-11-12T17:31:40Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855606
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P217
14
93760
855607
2024-11-12T17:31:53Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855607
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P276
14
93761
855608
2024-11-12T17:32:04Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855608
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Legliz Auvers-sur-Oise
0
93762
855620
2024-11-12T22:40:12Z
BwaKajou
31668
Li kreye pa tradui paj « [[:fr:Special:Redirect/revision/218922895|L'Église d'Auvers-sur-Oise]] »
855620
wikitext
text/x-wiki
<references responsive="1"></references>
'''''Legliz Auvers-sur-Oise''''' se yon [[penti ak lwil]] sou yon twal ki mezire 74 × 94 cm. Li te reyalize pa pent [[Vincent van Gogh]] an [[1890 (almanak gregoryen)|1890]] e li ekspoze nan [[Mize Orsay|Mize d'Orsay]], Pari. Li fè pati [[Pòs-enpresyonis|mouvman pòs-enpresyonist]] la.
== Istorik ==
Nan mwa me 1890, Van Gogh te ale Auvers-sur-Oise, nan tout savann Pari. Travay sa a se youn nan katreven penti ke pent la te kreye pandan de dènye mwa nan lavi l, pandan tan li te pase nan vilaj Auvers-sur-Oise {{Sfn|Hodge|2018|p=13|id=}}.
{{Lòt pwojè|commons=Category:The Church at Auvers by Vincent van Gogh}}
== Referans ==
{{Liens}}
=== Atik ki gen rapò ===
=== Lyen ekstèn ===
[[Kategori:1890 an Frans]]
[[Kategori:Tablo reyalize an 1890]]
[[Kategori:Tablo Vincent van Gogh]]
f15ugn0vyv8457actmjn80kpt42kjs6
855623
855620
2024-11-12T22:47:20Z
BwaKajou
31668
855623
wikitext
text/x-wiki
{{Infobox atizay
| tit = Legliz Auvers-sur-Oise
| imaj = Vincent van Gogh - The Church in Auvers-sur-Oise, View from the Chevet - Google Art Project.jpg
| taille =
| alt = Legliz Auvers
| légende = ''Legliz Auvers-sur-Oise, depi chevet''
| atis = [[Vincent van Gogh]]
| ane = 16 me 1890
| teknik = [[lwil sou twal]]
| tip =
| wotè = 940
| lajè = 740
| pwofondè =
| dyamèt =
| inite = mm
| fòma =
| mize = [[Mize Orsay]]
| lokalizasyon =
| vil = Pari
| peyi = Frans
| pwopriyete =
| kòmantè = F789 / JH2006 - Reyalize Auvers-sur-Oise
| jewolokalizasyon = pas pertinent
}}
<references responsive="1"></references>
'''''Legliz Auvers-sur-Oise''''' se yon [[penti ak lwil]] sou yon twal ki mezire 74 × 94 cm. Li te reyalize pa pent [[Vincent van Gogh]] an [[1890 (almanak gregoryen)|1890]] e li ekspoze nan [[Mize Orsay|Mize d'Orsay]], Pari. Li fè pati [[Pòs-enpresyonis|mouvman pòs-enpresyonist]] la.
== Istorik ==
Nan mwa me 1890, Van Gogh te ale Auvers-sur-Oise, nan tout savann Pari. Travay sa a se youn nan katreven penti ke pent la te kreye pandan de dènye mwa nan lavi l, pandan tan li te pase nan vilaj Auvers-sur-Oise {{Sfn|Hodge|2018|p=13|id=}}.
{{Lòt pwojè|commons=Category:The Church at Auvers by Vincent van Gogh}}
== Referans ==
{{Liens}}
=== Atik ki gen rapò ===
=== Lyen ekstèn ===
[[Kategori:1890 an Frans]]
[[Kategori:Tablo reyalize an 1890]]
[[Kategori:Tablo Vincent van Gogh]]
pi4twj58s6w98fcfrciyqaz34p3tp04
855635
855623
2024-11-12T23:25:10Z
BwaKajou
31668
855635
wikitext
text/x-wiki
{{Infobox atizay
| tit = Legliz Auvers-sur-Oise
| imaj = Vincent van Gogh - The Church in Auvers-sur-Oise, View from the Chevet - Google Art Project.jpg
| taille =
| alt = Legliz Auvers
| légende = ''Legliz Auvers-sur-Oise, depi chevet''
| atis = [[Vincent van Gogh]]
| ane = 16 me 1890
| teknik = [[lwil sou twal]]
| tip =
| wotè = 940
| lajè = 740
| pwofondè =
| dyamèt =
| inite = mm
| fòma =
| mize = [[Mize Orsay]]
| lokalizasyon =
| vil = Pari
| peyi = Frans
| pwopriyete =
| kòmantè = F789 / JH2006 - Reyalize Auvers-sur-Oise
| jewolokalizasyon = pas pertinent
}}
<references responsive="1"></references>
'''''Legliz Auvers-sur-Oise''''' se yon [[penti ak lwil]] sou yon twal ki mezire 74 × 94 cm. Li te reyalize pa pent [[Vincent van Gogh]] an [[1890 (almanak gregoryen)|1890]] e li ekspoze nan [[Mize Orsay|Mize d'Orsay]], Pari. Li fè pati [[Pòs-enpresyonis|mouvman pòs-enpresyonist]] la.
== Istorik ==
Nan mwa me 1890, Van Gogh te ale Auvers-sur-Oise, nan tout savann Pari. Travay sa a se youn nan katreven penti ke pent la te kreye pandan de dènye mwa nan lavi l, pandan tan li te pase nan vilaj Auvers-sur-Oise {{Sfn|Hodge|2018|p=13|id=}}.
{{Lòt pwojè|commons=Category:The Church at Auvers by Vincent van Gogh}}
== Referans ==
{{Liens}}
=== Atik ki gen rapò ===
=== Lyen ekstèn ===
[[Kategori:1890 an Frans]]
[[Kategori:Tablo reyalize an 1890]]
[[Kategori:Tablo Vincent van Gogh]]
okkpdf9t148jwdrvk3whz6s97hayi73
855642
855635
2024-11-12T23:43:24Z
BwaKajou
31668
855642
wikitext
text/x-wiki
{{Infobox atizay
| tit = Legliz Auvers-sur-Oise
| imaj = Vincent van Gogh - The Church in Auvers-sur-Oise, View from the Chevet - Google Art Project.jpg
| taille =
| alt = Legliz Auvers
| légende = ''Legliz Auvers-sur-Oise, depi chevet''
| atis = [[Vincent van Gogh]]
| ane = 16 me 1890
| teknik = [[lwil sou twal]]
| tip =
| wotè = 940
| lajè = 740
| pwofondè =
| dyamèt =
| inite = mm
| fòma =
| mize = [[Mize Orsay]]
| lokalizasyon =
| vil = Pari
| peyi = Frans
| pwopriyete =
| kòmantè = F789 / JH2006 - Reyalize Auvers-sur-Oise
| jewolokalizasyon = pas pertinent
}}
<references responsive="1"></references>
'''''Legliz Auvers-sur-Oise''''' se yon [[penti ak lwil]] sou yon twal ki mezire 74 × 94 cm. Li te reyalize pa pent [[Vincent van Gogh]] an [[1890 (almanak gregoryen)|1890]] e li ekspoze nan [[Mize Orsay|Mize d'Orsay]], Pari. Li fè pati [[Pòs-enpresyonis|mouvman pòs-enpresyonist]] la.
== Istorik ==
Nan mwa me 1890, Van Gogh te ale Auvers-sur-Oise, nan tout savann Pari. Travay sa a se youn nan katreven penti ke pent la te kreye pandan de dènye mwa nan lavi l, pandan tan li te pase nan vilaj Auvers-sur-Oise {{Sfn|Hodge|2018|p=13|id=}}.
{{Lòt pwojè|commons=Category:The Church at Auvers by Vincent van Gogh}}
== Referans ==
{{Liens}}
=== Atik ki gen rapò ===
=== Lyen ekstèn ===
[[Kategori:1890 an Frans]]
[[Kategori:Tablo reyalize an 1890]]
[[Kategori:Tablo Vincent van Gogh]]
8zug7estxxi0w7u7dll3bodg02r46rc
Kategori:Paj ki itilize P347
14
93763
855621
2024-11-12T22:41:00Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855621
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P4659
14
93764
855622
2024-11-12T22:41:14Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855622
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P135
14
93765
855632
2024-11-12T23:23:38Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855632
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P127
14
93766
855633
2024-11-12T23:23:55Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855633
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Kategori:Paj ki itilize P154
14
93767
855634
2024-11-12T23:24:35Z
BwaKajou
31668
Paj ki kreye ak " {{Kategori yon pwopriyete}} "
855634
wikitext
text/x-wiki
{{Kategori yon pwopriyete}}
6kt630uq9qbt3m2blhq5zh6ftm5nla1
Lwil sou twal
0
93768
855636
2024-11-12T23:26:51Z
BwaKajou
31668
Redireksyon sou [[Penti ak lwil]]
855636
wikitext
text/x-wiki
#REDIRECTION [[Penti ak lwil]]
rejavvxf6ylvrs2wgyksry9ii7u39ls
Kategori:Zèv da jewolokalize san kowòdone parametre
14
93769
855637
2024-11-12T23:30:53Z
BwaKajou
31668
Paj ki kreye ak " __HIDDENCAT__ {{Kategori Wikipedya pou vide|nocat=wi}} {{kategorize pa|pou jewokalize}} Lè w mete banyè {{m|pou jewolokalize}} la sou yon atik, sa ap fè banyè sa a parèt epi ajoute li nan kategori sa a: {{pou jewolokalize|nocat=wi}} Kategori sa a tou ranpli pa {{m|Infobox atizay}} lè kowòdone jeyografik yo absan. {{DEFAULTSORT: Zèv da jewolokalize san kowòdone parametre}} [[Kategori:Paj jewolokalize san kowòdone parametre]] "
855637
wikitext
text/x-wiki
__HIDDENCAT__
{{Kategori Wikipedya pou vide|nocat=wi}}
{{kategorize pa|pou jewokalize}}
Lè w mete banyè {{m|pou jewolokalize}} la sou yon atik, sa ap fè banyè sa a parèt epi ajoute li nan kategori sa a:
{{pou jewolokalize|nocat=wi}}
Kategori sa a tou ranpli pa {{m|Infobox atizay}} lè kowòdone jeyografik yo absan.
{{DEFAULTSORT: Zèv da jewolokalize san kowòdone parametre}}
[[Kategori:Paj jewolokalize san kowòdone parametre]]
4each6nivd7x6h2pu3d150ikzhq5bqc
Modèl:Pou jewolokalize
10
93770
855640
2024-11-12T23:39:14Z
BwaKajou
31668
Paj ki kreye ak " {{Méta bandeau d'avertissement | niveau = modéré | icône = Circle-icons-compass.svg | titre = Atik sa a bezwen jewolokalize. | texte = Pou amelyore atik sa a, detèmine [[kowòdone jewografik]] lye li dekri a epi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ajoute yo nan atik la] gras ak modèl {{m|coord}}. }}<includeonly>{{#if:{{{nocat|}}}||[[Catégorie:Article à géolocaliser]]}}</includeonly><noinclude>{{Documentation|contenu= == Itilizasyon == {{Kategorize|Atik pou... "
855640
wikitext
text/x-wiki
{{Méta bandeau d'avertissement
| niveau = modéré
| icône = Circle-icons-compass.svg
| titre = Atik sa a bezwen jewolokalize.
| texte = Pou amelyore atik sa a, detèmine [[kowòdone jewografik]] lye li dekri a epi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ajoute yo nan atik la] gras ak modèl {{m|coord}}.
}}<includeonly>{{#if:{{{nocat|}}}||[[Catégorie:Article à géolocaliser]]}}</includeonly><noinclude>{{Documentation|contenu=
== Itilizasyon ==
{{Kategorize|Atik pou jewolokalize|ki nan yon kategori kache}}
Le paramètre <code><nowiki>|nocat=oui</nowiki></code> permet de désactiver la catégorisation de la page.
<templatedata>
{
"params": {
"nocat": {
"label": "Nocat",
"description": "Permet de ne pas catégoriser la page.",
"type": "string",
"suggestedvalues": [
"1"
]
}
},
"description": "Bandeau indiquant un article à géolocaliser."
}
</templatedata>
}}
[[Kategori:Modèl banyè atik]]
</noinclude>
dqz0rdue57m0l2mbxjxwn6cu9lwnqll
Kategori:Atik ki itilize infobox en Lua Art
14
93771
855643
2024-11-13T00:15:10Z
BwaKajou
31668
Paj ki kreye ak " __HIDDENCAT__ {{kategorize pa|Infobox nan Lua}} [[Kategori:Antretyen infobox|Lua]] [[Kategori:Atik ki itilize yon Infobox]] "
855643
wikitext
text/x-wiki
__HIDDENCAT__
{{kategorize pa|Infobox nan Lua}}
[[Kategori:Antretyen infobox|Lua]]
[[Kategori:Atik ki itilize yon Infobox]]
1v6digapu3sl8ainoy2o3vpll836t04
Kategori:Atik ki itilize yon Infobox
14
93772
855646
2024-11-13T00:20:28Z
BwaKajou
31668
Paj ki kreye ak " __HIDDENCAT__ [[Kategori:Antretyen atik yo]] "
855646
wikitext
text/x-wiki
__HIDDENCAT__
[[Kategori:Antretyen atik yo]]
4wse0g6d7zqdon7bwfja3n940s7wd3k
Kategori:Infobox avèk lejand lokal ak yon imaj sou Wikidata
14
93773
855648
2024-11-13T00:30:08Z
BwaKajou
31668
Paj ki kreye ak " __HIDDENCAT__ {{kategorize pa|Infobox}} {{Kategori Wikipedya pou vide|kategori espesifik=[[Kategori:Paj ki sèvi ak yon modèl sentaks ki pa kòrèk]][[Kategori:Kategori antretyen modèl yo dwe vide]]}} Kategori sa a gen paj ki itilize modèl ki depann de modil [[Module:Infobox|Infobox]]. Li parèt apre prezans yon tit sou Wikipedia pandan imaj la soti nan Wikidata. [[Kategori:Antretyen infobox]] "
855648
wikitext
text/x-wiki
__HIDDENCAT__
{{kategorize pa|Infobox}}
{{Kategori Wikipedya pou vide|kategori espesifik=[[Kategori:Paj ki sèvi ak yon modèl sentaks ki pa kòrèk]][[Kategori:Kategori antretyen modèl yo dwe vide]]}}
Kategori sa a gen paj ki itilize modèl ki depann de modil [[Module:Infobox|Infobox]]. Li parèt apre prezans yon tit sou Wikipedia pandan imaj la soti nan Wikidata.
[[Kategori:Antretyen infobox]]
l91mfal7uf9io4fm3mbqzv7seg8d433