Wikipedija hsbwiki https://hsb.wikipedia.org/wiki/H%C5%82owna_strona MediaWiki 1.48.0-wmf.3 first-letter Media Specialnje Diskusija Wužiwar Diskusija z wužiwarjom Wikipedija Wikipedija diskusija Dataja Diskusija k dataji MediaWiki MediaWiki diskusija Předłoha Diskusija k předłoze Pomoc Pomoc diskusija Kategorija Diskusija ke kategoriji TimedText TimedText talk Modul Modul diskusija Veranstaltung Veranstaltung Diskussion Wikipedija:Korčma 4 354 392841 392770 2026-11-09T03:30:08Z MediaWiki message delivery 10784 nowy wotrězk: /* Article guidance feature is ready to be set up for your Wikipedia */ 392841 wikitext text/x-wiki {{Skrótšenka|WP:K}} [[Dataja:Korčma.JPG|thumb|Witaj do našeje korčmy!]] __NEWSECTIONLINK__ {{korčma}} * '''hsb [update needed per en]:''' Naprašowanja za [[m:bot|bot]] flag měli so na tutej stronje stajić. Dokelž w tutym wikiju njeje [[m:Bureaucrat|běrokrata]], dyrbi so přistup [[m:Requests for bot status|přez stewarda spožčić]], jelizo so na tutej stronje ničo njeznapřećiwi. W tutym wikiju knježi [[m:Bot policy|standardna bot policy]], kotraž dowoli awtomatiske připoznaće wěstych robotkowych typow. * '''en:''' Requests for the [[m:bot|bot]] flag should be made on this page. This wiki uses the [[m:bot policy|standard bot policy]], and allows [[m:bot policy#Global_bots|global bots]] and [[m:bot policy#Automatic_approval|automatic approval of certain types of bots]]. Other bots should apply below, and then [[m:Steward requests/Bot status|request access]] from a steward if there is no objection. __TOC__ == Global ban for PlanespotterA320/RespectCE == Per the [[m:Global bans|Global bans]] policy, I'm informing the project of this request for comment: [[m:Requests for comment/Global ban for PlanespotterA320 (2) ]] about banning a member from your community. Thank you.--[[User:Lemonaka|Lemonaka]] ([[User talk:Lemonaka|talk]]) 21:40, 6 February 2023 (UTC) <!-- Nachricht versandt von Benutzer:Zabe@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=User:Lemonaka/Massmessagelist&oldid=24501599 --> == Próstwa wo rěčnu změnu na hłownej stronje == By rjenje było, jeli móhło so na hłownej stronje pod "Zajimawosće" změnić "Wědźeše ty hižo" na "Sy hižo wědźał". Wujasnjenje: Preteritum njemóže zwisk z přitomnosću měć, perfekt to móže. To rěka: Sada "Wědźeše ty tehdy hižo, zo budźeš raz wučer" je korektna. Sada "Wědźeše ty hižo" w zmysle "Je tebi nětko wědome" pak njeje korektna. Tu słuša perfekt. [[Wužiwar:Wołojnik|Wołojnik]] ([[Diskusija z wužiwarjom:Wołojnik|diskusija]]) 14. februara 2023, 15:50 (CET) :Oha, wutrobny dźak za pokazku! Bych tu potom radšo prezens wzał (dla dźenderowanja), jeli ničo přećiwo tomu njerěči. Wutrobnje strowi --[[Wužiwar:J budissin|j.nyča]]<sup>[[Diskusija z wužiwarjom:J budissin|+/-]]</sup> 15. februara 2023, 23:37 (CET) == <span lang="de" dir="ltr" class="mw-content-ltr">Community-Feedbackzyklus zur Aktualisierung der Wikimedia-Nutzungsbedingungen beginnt</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Wikimedia Foundation Legal department/2023 ToU updates/Office hours/Announcement|You can find this message translated into additional languages on Meta-wiki.]]'' :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation Legal department/2023 ToU updates/Office hours/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Legal department/2023 ToU updates/Office hours/Announcement|}}&language=&action=page&filter= {{int:please-translate}}]</div>'' Hallo allerseits, Die [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_department|Rechtsabteilung der Wikimedia Foundation]] organisiert eine Feedbackphase mit Community-Mitgliedern, um die Überarbeitung der Wikimedia-Nutzungsbedingungen zu besprechen. [[:foundation:Special:MyLanguage/Terms of Use|Die Nutzungsbedingungen (Terms of Use, ToU)]] sind die rechtlichen Bestimmungen, die die Nutzung der von der Wikimedia Foundation gehosteten Websites regeln. Wir werden von Februar bis April euer Feedback zu einem Entwurf einholen. Der Entwurf wird in mehrere Sprachen übersetzt, wobei schriftliche Rückmeldungen in jeder Sprache möglich sind. Diese Aktualisierung ist eine Reaktion auf mehrere Dinge: * Umsetzung des Universal Code of Conduct * Aktualisierung des Projekttextes auf die Creative Commons BY-SA 4.0 Lizenz * Vorschlag für einen besseren Umgang mit nicht offengelegten bezahlten Bearbeitungen * Anpassung unserer Bedingungen an aktuelle und kürzlich verabschiedete Gesetze, die die Foundation betreffen, einschließlich des European Digital Services Act Im Rahmen des Feedback-Zyklus werden zwei Sprechstunden abgehalten, die erste am 2. März, die zweite am 4. April. Weitere Informationen findest du hier: * Die [[m:Special:MyLanguage/Wikimedia Foundation Legal department/2023 ToU updates/Proposed update|vorgeschlagenen Aktualisierungen der Nutzungsbedingungen (Änderungen markiert)]] * Die Seite für dein [[m:Talk:Terms of use|Feedback]] * Informationen zu [[m:Special:MyLanguage/Wikimedia Foundation Legal department/2023 ToU updates/Office hours|den Gesprächsrunden]] Im Namen des Teams der Rechtsabteilung der Wikimedia Foundation,<section end="announcement-content" /> </div> [[User:DBarthel (WMF)|Benutzer:DBarthel (WMF)]]21. februara 2023, 18:37 (CET) <!-- Nachricht versandt von Benutzer:DBarthel (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Movement_Strategy_and_Governance/Delivery/de&oldid=23827147 --> == Editing news 2023 #1 == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="message"/><i>[[m:Special:MyLanguage/VisualEditor/Newsletter/2023/February|In einer anderen Sprache lesen]] • [[m:Special:MyLanguage/VisualEditor/Newsletter|Abonnenten dieses mehrsprachigen Rundschreibens]]</i> In diesem Rundschreiben wird über zwei wesentliche Entwicklungen der [[mw:Special:MyLanguage/Editing team|Arbeitsgruppe Bearbeitung]] berichtet: # Die Arbeitsgruppe Bearbeitung wird das Hinzufügen von Neuerungen zum [[mw:Special:MyLanguage/Talk pages project|Diskussionsseitenprojekt]] abschließen und zum Einsatz bringen. # Sie fängt das neue Projekt [[mw:Special:MyLanguage/Edit check|Änderungsprüfung]] an. <strong>Diskussionsseitenprojekt</strong> [[File:Page Frame Features on desktop.png|alt=Bildschirmfoto zeigt die Änderungen in der Gestaltung der Diskussionsseite, die derzeit als Probeversion in allen Wikimediawikis zur Verfügung stehen. Diese technischen Ergänzungen beinhalten Informationen zu der Anzahl der Diskussionsteilnehmer und Erläuterungen innerhalb jeder Diskussion.|thumb|300px|Einige der bevorstehenden Änderungen]] Die Arbeitsgruppe Bearbeitung ist fast mit der ersten Phase des [[mw:Special:MyLanguage/Talk_pages_project|Diskussionsseitenprojektes]] abgeschlossen. Fast alle der [[mw:Special:MyLanguage/Talk pages project/Usability|technischen Ergänzungen]] sind jetzt im [[Special:Preferences#mw-prefsection-betafeatures|Beta Feature für {{int:discussiontools-preference-label}}]] verfügbar. Es werden Informationen zur Diskussionsdynamik dargestellt, wie zum Beispiel wann der letzte Beitrag verfasst wurde. Bald wird es eine neue „{{int:skin-action-addsection}}“ Schaltfläche geben. Es wird möglich sein, diese Entwicklungen in den [[Special:Preferences#mw-prefsection-editing-discussion]] abzuschalten. Bitte [[mw:Special:MyLanguage/Talk:Talk_pages_project/Usability#c-PPelberg_(WMF)-20230215001000-Feedback:_Proposed_Revisions_to_%22Add_topic%22_button|teile der Arbeitsgruppe Deine Meinung mit]]. [[File:Daily edit completion rates mobile talk pages.png|thumb|300px|Tagesquote Fertigstellung von Bearbeitungen aufgeschlüsselt nach Versuchsgruppe: DiscussionTools (Versuchsgruppe) und MobileFrontend Einblendung (Kontrollgruppe)]] Ein A/B-Test für [[mw:Special:MyLanguage/Talk pages project/Mobile|{{int:discussiontools-preference-label}} auf der Seite für mobile Endgeräte]] wurde durchgeführt. Bearbeiter waren [[mw:Special:MyLanguage/Talk_pages_project/Mobile#Status_Updates|erfolgreicher mit {{int:discussiontools-preference-label}}]]. Die AG Bearbeitung schaltet diese technischen Ergänzungen für alle Bearbeiter, die ein mobiles Endgerät benutzen, frei. <strong>Neues Projekt: Änderungsprüfung</strong> Die Arbeitsgruppe Bearbeitung fängt [[mw:Special:MyLanguage/Edit check|ein Projekt zur Unterstützung neuer Wikipediaautoren]] an. Es soll Menschen bei der Feststellung gewisser Probleme unterstützen, bevor sie auf „{{int:publishchanges}}“ klicken. Das erste Werkzeug wird Leute ermutigen, Einzelnachweise zu liefern wenn sie neue Inhalte hinzufügen. Bitte [[mw:Special:MyLanguage/Help:Watchlist|beobachte diese Seite]] für weitere Informationen. Um mehr zu erfahren kannst Du [[mw:Special:MyLanguage/Editing_team/Community_Conversations#20230303|am 2023-03-03 an einer Telefonkonferenz teilnehmen]].<section end="message"/> </div> –[[User:Whatamidoing (WMF)|Whatamidoing (WMF)]] ([[User talk:Whatamidoing (WMF)|{{int:Talkpagelinktext}}]]) 23. februara 2023, 00:24 (CET) <!-- Nachricht versandt von Benutzer:Quiddity (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/VisualEditor/Newsletter/Wikis_with_VE&oldid=24611966 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Your wiki will be in read only soon</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] testet den Wechsel zwischen ihrem ersten und dem Ersatz-Rechenzentrum. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Um sicherzustellen, dass alles funktioniert, muss der Wechsel zwischen den Servern getestet werden. Dieser Test wird zeigen, ob sicher von einem auf das andere Rechenzentrum umgeschaltet werden kann. Dafür benötigt es viele Teams, die den Test vorbereiten und die bereitstehen, um unerwartet auftretende Probleme zu beheben. Der gesamte Datenverkehr wird am '''{{#time:j xg|2023-03-01|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2023-03-01T14:00|en}} {{#time:H:i e|2023-03-01T14:00}}]''' beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:l j xg Y|2023-03-01|de}}, wird bis zu einer Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. Weitere Benachrichtigungen folgen. Auf allen Wikis wird es 30&nbsp;Minuten im Voraus einen Banner geben. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> <span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|{{int:talk}}]])</span> 27. februara 2023, 22:20 (CET) <!-- Nachricht versandt von Benutzer:Trizek (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=24390465 --> == Ukraine's Cultural Diplomacy Month 2023: We are back! == <div lang="en" dir="ltr" class="mw-content-ltr"> <div lang="en" dir="ltr" class="mw-content-ltr"> [[File:UCDM 2023 promo.png|180px|right]] {{int:please-translate}} Hello, dear Wikipedians!<br/> [[m:Special:MyLanguage/Wikimedia Ukraine|Wikimedia Ukraine]], in cooperation with the [[:en:Ministry of Foreign Affairs of Ukraine|Ministry of Foreign Affairs of Ukraine]] and [[:en:Ukrainian Institute|Ukrainian Institute]], has launched the third edition of writing challenge "'''[[m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2023|Ukraine's Cultural Diplomacy Month]]'''", which lasts from 1st until 31st March 2023. The campaign is dedicated to famous Ukrainian artists of cinema, music, literature, architecture, design and cultural phenomena of Ukraine that are now part of world heritage. We accept contribution in every language! The most active contesters will receive [[m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2023/Prizes|prizes]].<br/> We invite you to take part and help us improve the coverage of Ukrainian culture on Wikipedia in your language! Also, we plan to set up a [[m:CentralNotice/Request/UCDM 2023|banner]] to notify users of the possibility to participate in such a challenge! </div> [[m:User:ValentynNefedov (WMUA)|ValentynNefedov (WMUA)]] ([[m:User talk:ValentynNefedov (WMUA)|talk]]) 07:58, 1 March 2023 (UTC) </div> <!-- Nachricht versandt von Benutzer:ValentynNefedov (WMUA)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wikipedia&oldid=23942484 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Programmeinreichungen für die Wikimania 2023 erbeten</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="wikimania-program-submissions"/>[[File:Wikimedia_Singapore_Logo.svg|right|frameless]]Möchtest du bei der Wikimania 2023 eine Sitzung vor Ort oder virtuell anbieten? Vielleicht ein praktischer Workshop, eine lebhafte Diskussion, ein unterhaltsamer Auftritt, ein einprägsames Poster oder ein denkwürdiger Kurzvortrag? [[wmania:Special:MyLanguage/2023:Program/Submissions|'''Programmeinreichungen sind bis zum 28. März möglich''']]. Die Veranstaltung wird spezielle hybride Teile haben, sodass virtuelle Programmeinreichungen und vorab aufgezeichnete Inhalte ebenfalls willkommen sind. Wenn du Fragen hast, nimm bitte an einem der bevorstehenden Gespräch am 12. oder 19. März teil oder wende dich per E-Mail an wikimania@wikimedia.org oder über Telegram an uns. Weitere Informationen finden sich im Wiki.<section end="wikimania-program-submissions"/> </div> <!-- Nachricht versandt von Benutzer:CKoerner (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=24390465 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Euer Wiki wird bald im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] testet den Wechsel zwischen ihrem ersten und dem Ersatz-Rechenzentrum. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Um sicherzustellen, dass alles funktioniert, muss der Wechsel zwischen den Servern getestet werden. Dieser Test wird zeigen, ob sicher von einem auf das andere Rechenzentrum umgeschaltet werden kann. Dafür benötigt es viele Teams, die den Test vorbereiten und die bereitstehen, um unerwartet auftretende Probleme zu beheben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2023-04-26|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2023-04-26T14:00|en}} {{#time:H:i e|2023-04-26T14:00}}]''' beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:j. F Y|2023-04-26|de}} wird bis zu einer Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. Weitere Benachrichtigungen folgen. Auf allen Wikis wird es 30&nbsp;Minuten im Voraus einen Banner geben. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 21. apryla 2023, 02:41 (CEST) <!-- Nachricht versandt von Benutzer:UOzurumba (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=24748237 --> == <span lang="en" dir="ltr" class="mw-content-ltr">Seeking volunteers for the next step in the Universal Code of Conduct process</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/U4C Building Committee/Nominations/Announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/U4C Building Committee/Nominations/Announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>'' Hello, As follow-up to [https://lists.wikimedia.org/hyperkitty/list/wikimedia-l@lists.wikimedia.org/message/IOMVS7W75ZYMABQGOQ2QH2JAURC3CHGH/ the message about the Universal Code of Conduct Enforcement Guidelines] by Wikimedia Foundation Board of Trustees Vice Chair, Shani Evenstein Sigalov, I am reaching out about the next steps. I want to bring your attention to the next stage of the Universal Code of Conduct process, which is forming a building committee for the Universal Code of Conduct Coordinating Committee (U4C). I invite community members with experience and deep interest in community health and governance to nominate themselves to be part of the U4C building committee, which needs people who are: * Community members in good standing * Knowledgeable about movement community processes, such as, but not limited to, policy drafting, participatory decision making, and application of existing rules and policies on Wikimedia projects * Aware and appreciative of the diversity of the movement, such as, but not limited to, languages spoken, identity, geography, and project type * Committed to participate for the entire U4C Building Committee period from mid-May - December 2023 * Comfortable with engaging in difficult, but productive conversations * Confidently able to communicate in English The Building Committee shall consist of volunteer community members, affiliate board or staff, and Wikimedia Foundation staff. The Universal Code of Conduct has been a process strengthened by the skills and knowledge of the community and I look forward to what the U4C Building Committee creates. If you are interested in joining the Building Committee, please either [[m:Special:MyLanguage/Universal_Code_of_Conduct/U4C_Building_Committee/Nominations|sign up on the Meta-Wiki page]], or contact ucocproject[[File:At sign.svg|16x16px|link=|(_AT_)]]wikimedia.org by May 12, 2023. '''[[m:Special:MyLanguage/Universal_Code_of_Conduct/U4C_Building_Committee|Read more on Meta-Wiki]]'''. Best regards,<br /><section end="announcement-content" /> </div> [[User:Xeno (WMF)|Xeno (WMF)]] 26. apryla 2023, 21:00 (CEST) <!-- Nachricht versandt von Benutzer:Xeno (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=24941045 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Auswahl des U4C-Aufbaukomitees</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> Der nächste Schritt im Prozess des universellen Verhaltenskodex ist die Zusammenstellung eines Aufbaukomitees, das die Charta für das Koordinationskomitee des universellen Verhaltenskodex (U4C) erstellt. Das Aufbaukomitee wurde nun ausgewählt. [[m:Special:MyLanguage/Universal_Code_of_Conduct/U4C_Building_Committee|Lies mehr über die Mitglieder und die bevorstehende Arbeit im Meta-Wiki]].<section end="announcement-content" /> </div> -- [[m:Special:MyLanguage/Universal_Code_of_Conduct/Project|UCoC Project Team]], 27. meje 2023, 06:20 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25018085 --> == <span lang="en" dir="ltr" class="mw-content-ltr"> Announcing the new Elections Committee members</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Wikimedia Foundation elections committee/Nominatons/2023/Announcement - new members|You can find this message translated into additional languages on Meta-wiki.]]'' :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections committee/Nominatons/2023/Announcement - new members|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections committee/Nominatons/2023/Announcement - new members}}&language=&action=page&filter= {{int:please-translate}}]</div>'' Hello there, We are glad to announce [[listarchive:list/wikimedia-l@lists.wikimedia.org/message/4TALOUFPAP2VDBR27GKRVOP7IGQYU3DB/|the new members and advisors of the Elections Committee]]. The [[m:Special:MyLanguage/Wikimedia_Foundation_elections_committee|Elections Committee]] assists with the design and implementation of the process to select Community- and Affiliate-Selected trustees for the Wikimedia Foundation Board of Trustees. After an open nomination process, the strongest candidates spoke with the Board and four candidates were asked to join the Elections Committee. Four other candidates were asked to participate as advisors. Thank you to all the community members who submitted their names for consideration. We look forward to working with the Elections Committee in the near future. On behalf of the Wikimedia Foundation Board of Trustees,<br /><section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 28. junija 2023, 20:00 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25018085 --> == Deploying the Phonos in-line audio player to your Wiki == <div lang="en" dir="ltr" class="mw-content-ltr"> <div lang="en" dir="ltr" class="mw-content-ltr"> {{int:Hello}}! Apologies if this message is not in your language, {{int:Please help translate}} to your language. This wiki will soon be able to use the [[mw:Help:Extension:Phonos#Inline_audio_player_mode|inline audio player]] implemented by the [[mw:Extension:Phonos|Phonos]] extension. This is part of fulfilling a wishlist proposal of providing [[m:Community_Wishlist_Survey_2022/Multimedia_and_Commons/Audio_links_that_play_on_click|audio links that play on click]]. With the inline audio player, you can add text-to-speech audio snippets to wiki pages by simply using a tag: <syntaxhighlight lang="wikitext"> <phonos file="audio file" label="Listen"/> </syntaxhighlight> The above tag will show the text next to a speaker icon, and clicking on it will play the audio instantly without taking you to another page. A common example where you can use this feature is in adding pronunciation to words as illustrated on the [[wiktionary:en:English#Pronunciation|English Wiktionary]] below. <syntaxhighlight lang="wikitext"> {{audio|en|En-uk-English.oga|Audio (UK)}} </syntaxhighlight> Could become: <syntaxhighlight lang="wikitext"> <phonos file="En-uk-English.oga" label="Audio (UK)"/> </syntaxhighlight> The inline audio player will be available in your wiki in 2 weeks time; in the meantime, we would like you to [[mw:Special:MyLanguage/Help:Extension:Phonos|read about the features]] and give us feedback or ask questions about it in this [[mw:Help_talk:Extension:Phonos|talk page]]. Thank you!</div> <bdi lang="en" dir="ltr">[[m:User:UOzurumba (WMF)|UOzurumba (WMF)]], on behalf of the Foundation's Language team</bdi> </div> 27. julija 2023, 04:26 (CEST) <!-- Nachricht versandt von Benutzer:UOzurumba (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=User:UOzurumba_(WMF)/sandbox_announcement_list_(In-line_audio_player)&oldid=25350821 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Überprüfe die Charter für das Koordinationskomitee des universellen Verhaltenskodex</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Universal Code of Conduct/U4C Building Committee/Announcement - Review|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/U4C Building Committee/Announcement - Review}}&language=&action=page&filter= {{int:please-translate}}]</div>'' Hallo allerseits, ich freue mich, über die nächsten Schritte in der Arbeit am [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct|universellen Verhaltenskodex]] informieren zu können! Der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|Entwurf der Charter für das Koordinationskomitee des universellen Verhaltenskodex (U4C)]] steht jetzt zur Überprüfung bereit. Die [[foundation:Special:MyLanguage/Policy:Universal Code of Conduct/Enforcement guidelines|Durchsetzungsleitlinien]] erfordern ein [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines#4.5_U4C_Building_Committee|Aufbaukomitee]], das eine Charter entwirft, in der Abläufe und Details für ein globales Komitee namens [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines#4._UCoC_Coordinating_Committee_(U4C)|Koordinationskomitee des universellen Verhaltenskodex (U4C)]] enthalten sind. Im Lauf der vergangenen Monate hat das U4C-Aufbaukomitee als Gruppe zusammengearbeitet, um die U4C-Charter zu besprechen und zu entwerfen. Das U4C-Aufbaukomitee freut sich über Feedback zum Entwurf der Charter bis zum 22. September 2023. Nach diesem Datum wird das U4C-Aufbaukomitee die Charter nach Bedarf überarbeiten und im Anschluss wird eine Community-Abstimmung gestartet. Beteilige dich an der Diskussion bei den [[m:Special:MyLanguage/Universal Code of Conduct/U4C Building Committee#Conversation hours|Sprechstunden]] oder im [[m:Talk:Universal Code of Conduct/Coordinating Committee/Charter|Meta-Wiki]]. Beste Grüße<br /><section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]], on behalf of the U4C Building Committee, 28. awgusta 2023, 17:35 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25392152 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Euer Wiki wird bald im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Um sicherzustellen, dass alles funktioniert, muss der Wechsel zwischen den Servern getestet werden. Dieser Test wird zeigen, ob sicher von einem auf das andere Rechenzentrum umgeschaltet werden kann. Dafür benötigt es viele Teams, die den Test vorbereiten und die bereitstehen, um unerwartet auftretende Probleme zu beheben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2023-09-20|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2023-09-20T14:00|en}} {{#time:H:i e|2023-09-20T14:00}}]''' beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:j. F Y|2023-09-20|de}} wird bis zu einer Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. Weitere Benachrichtigungen folgen. Auf allen Wikis wird 30 Minuten im Voraus einen Banner erscheinen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> [[User:Trizek (WMF)|Trizek_(WMF)]] ([[m:User talk:Trizek (WMF)|talk]]) 15. septembra 2023, 11:23 (CEST) <!-- Nachricht versandt von Benutzer:Trizek (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=25018086 --> == <span lang="en" dir="ltr" class="mw-content-ltr">== Opportunities open for the Affiliations Committee, Ombuds commission, and the Case Review Committee ==</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> <div style="margin:.2em 0 .5em;margin-{{#switch:{{PAGELANGUAGE}}|ar|arc|ary|arz|azb|bcc|bgn|ckb|bqi|dv|fa|fa-af|glk|ha-arab|he|kk-arab|kk-cn|ks|ku-arab|ms-arab|mzn|pnb|prd|ps|sd|ug|ur|ydd|yi=right|left}}:3ex;"> [[m:Special:MyLanguage/Wikimedia Foundation Legal department/Committee appointments/Announcement/Short|''You can find this message translated into additional languages on Meta-wiki.'']] ''<span class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation Legal department/Committee appointments/Announcement/Short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Legal department/Committee appointments/Announcement/Short}}&language=&action=page&filter= {{int:please-translate}}]</span>''</div> Hi everyone! The [[m:Special:MyLanguage/Affiliations Committee|Affiliations Committee]] (AffCom), [[m:Special:MyLanguage/Ombuds_commission|Ombuds commission]] (OC), and the [[m:Special:MyLanguage/Trust_and_Safety/Case_Review_Committee|Case Review Committee]] (CRC) are looking for new members. These volunteer groups provide important structural and oversight support for the community and movement. People are encouraged to nominate themselves or encourage others they feel would contribute to these groups to apply. There is more information about the roles of the groups, the skills needed, and the opportunity to apply on the [[m:Special:MyLanguage/Wikimedia Foundation Legal department/Committee appointments|'''Meta-wiki page''']]. On behalf of the Committee Support team,<br /><section end="announcement-content" /> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> ~ [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 9. oktobra 2023, 18:41 (CEST) </div> <!-- Nachricht versandt von Benutzer:Keegan (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25570445 --> == <span lang="en" dir="ltr" class="mw-content-ltr">Review and comment on the 2024 Wikimedia Foundation Board of Trustees selection rules package</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/wiki/Wikimedia Foundation elections/2024/Announcement/Rules package review - short| You can find this message translated into additional languages on Meta-wiki.]]'' :''<div class="plainlinks">[[m:Special:MyLanguage/wiki/Wikimedia Foundation elections/2024/Announcement/Rules package review - short|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Wikimedia Foundation elections/2024/Announcement/Rules package review - short}}&language=&action=page&filter= {{int:please-translate}}]</div>'' Dear all, Please review and comment on the Wikimedia Foundation Board of Trustees selection rules package from now until 29 October 2023. The selection rules package was based on older versions by the Elections Committee and will be used in the 2024 Board of Trustees selection. Providing your comments now will help them provide a smoother, better Board selection process. [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|More on the Meta-wiki page]]. Best, Katie Chan <br> Chair of the Elections Committee<br /><section end="announcement-content" /> </div> 17. oktobra 2023, 03:12 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25570445 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Coming soon: Reference Previews</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="ReferencePreviewsDefault"/> [[File:Example_of_a_Reference_Preview.png|right|300px]] Eine neue Funktion wird bald in deinem Wiki eingeführt: Vorschauen für Einzelnachweise sind Popups für Einzelnachweise. Solche Popups gab es in Wikis für viele Jahre als lokale Helferleins. Nun gibt es eine zentrale Lösung, die in allen Wikis verfügbar und konsistent mit der [[mw:Special:MyLanguage/Page Previews|Seitenvorschau-Funktion]] ist. Vorschauen für Einzelnachweise weden für alle sichtbar sein, auch für Leser. Wenn du sie nicht sehen möchtest, [[m:WMDE Technical Wishes/ReferencePreviews#Opt-out feature|kannst du sie deaktivieren]]. Wenn du [[Special:Preferences#mw-prefsection-gadgets|die Helferleins]] Tooltips für Einzelnachweise oder Navigations-Popups nutzt, wirst du die Vorschauen für Einzelnachweise nicht sehen, sofern du das Helferlein nicht deaktivierst. Vorschauen für Einzelnachweise waren seit 2019 eine Beta-Funktion in vielen Wikis und seit 2021 eine Standard-Funktion in einigen davon. Die Einführung ist für den 22. November geplant. * [[mw:Special:MyLanguage/Help:Reference Previews|Hilfeseite]] * [[m:WMDE Technical Wishes/ReferencePreviews|Projektseite mit weiteren Informationen (auf Englisch)]]. * Rückmeldungen sind [[m:Talk:WMDE Technical Wishes/ReferencePreviews|auf dieser Diskussionsseite]] willkommen. -- Für das Team [[m:WMDE Technical Wishes|Technische Wünsche bei Wikimedia Deutschland]], <section end="ReferencePreviewsDefault"/> </div> [[m:User:Johanna Strodt (WMDE)|Johanna Strodt (WMDE)]], 15. nowembra 2023, 14:11 (CET) <!-- Nachricht versandt von Benutzer:Johanna Strodt (WMDE)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=25866958 --> == <span lang="de" dir="ltr" class="mw-content-ltr">== (Neue) Funktion des [[mw:Special:MyLanguage/Help:Extension:Kartographer|Kartographers]]: Geopunkte über QIDs hinzufügen ==</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="Body"/>Seit September 2022 ist es möglich, Geopunkte mithilfe einer QID zu erstellen. Viele Autoren haben sich diese Funktion gewünscht, jedoch wird sie wenig genutzt. Daher möchten wir dich daran erinnern. Weitere Informationen finden sich auf der [[M:WMDE_Technical_Wishes/Geoinformation/Geopoints via QID|Projektseite]]. Wenn du Anmerkungen dazu hast, teile sie uns bitte auf der [[M:Talk:WMDE Technical Wishes/Geoinformation/Geopoints via QID|Diskussionsseite]] mit. – Beste Grüße, das Team Technische Wünsche bei Wikimedia Deutschland <section end="Body"/> </div> [[M:User:Thereza Mengs (WMDE)|Thereza Mengs (WMDE)]] 13. decembra 2023, 13:31 (CET) <!-- Nachricht versandt von Benutzer:Thereza Mengs (WMDE)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=25955829 --> == Do you use Wikidata in Wikimedia sibling projects? Tell us about your experiences == <div lang="en" dir="ltr" class="mw-content-ltr"> ''Note: Apologies for cross-posting and sending in English.'' Hello, the '''[[m:WD4WMP|Wikidata for Wikimedia Projects]]''' team at Wikimedia Deutschland would like to hear about your experiences using Wikidata in the sibling projects. If you are interested in sharing your opinion and insights, please consider signing up for an interview with us in this '''[https://wikimedia.sslsurvey.de/Wikidata-for-Wikimedia-Interviews Registration form]'''.<br> ''Currently, we are only able to conduct interviews in English.'' The front page of the form has more details about what the conversation will be like, including how we would '''compensate''' you for your time. For more information, visit our ''[[m:WD4WMP/AddIssue|project issue page]]'' where you can also share your experiences in written form, without an interview.<br>We look forward to speaking with you, [[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] ([[m:User talk:Danny Benjafield (WMDE)|talk]]) 08:53, 5 January 2024 (UTC) </div> <!-- Nachricht versandt von Benutzer:Danny Benjafield (WMDE)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/WD4WMP/ScreenerInvite&oldid=26027495 --> == Reusing references: Can we look over your shoulder? == ''Apologies for writing in English.'' The Technical Wishes team at Wikimedia Deutschland is planning to [[m:WMDE Technical Wishes/Reusing references|make reusing references easier]]. For our research, we are looking for wiki contributors willing to show us how they are interacting with references. * The format will be a 1-hour video call, where you would share your screen. [https://wikimedia.sslsurvey.de/User-research-into-Reusing-References-Sign-up-Form-2024/en/ More information here]. * Interviews can be conducted in English, German or Dutch. * [[mw:WMDE_Engineering/Participate_in_UX_Activities#Compensation|Compensation is available]]. * Sessions will be held in January and February. * [https://wikimedia.sslsurvey.de/User-research-into-Reusing-References-Sign-up-Form-2024/en/ Sign up here if you are interested.] * Please note that we probably won’t be able to have sessions with everyone who is interested. Our UX researcher will try to create a good balance of wiki contributors, e.g. in terms of wiki experience, tech experience, editing preferences, gender, disability and more. If you’re a fit, she will reach out to you to schedule an appointment. We’re looking forward to seeing you, [[m:User:Thereza Mengs (WMDE)| Thereza Mengs (WMDE)]] <!-- Nachricht versandt von Benutzer:Thereza Mengs (WMDE)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=WMDE_Technical_Wishes/Technical_Wishes_News_list_all_village_pumps&oldid=25956752 --> == Feminism and Folklore 2024 == <div style="border:8px maroon ridge;padding:6px;> [[File:Feminism and Folklore 2024 logo.svg|centre|550px|frameless]] ::<div lang="en" dir="ltr" class="mw-content-ltr"> <center>''{{int:please-translate}}''</center> Dear Wiki Community, You are humbly invited to organize the '''[[:m:Feminism and Folklore 2024|Feminism and Folklore 2024]]''' writing competition from February 1, 2023, to March 31, 2023 on your local Wikipedia. This year, Feminism and Folklore will focus on feminism, women's issues, and gender-focused topics for the project, with a [[:c:Commons:Wiki Loves Folklore 2024|Wiki Loves Folklore]] gender gap focus and a folk culture theme on Wikipedia. You can help Wikipedia's coverage of folklore from your area by writing or improving articles about things like folk festivals, folk dances, folk music, women and queer folklore figures, folk game athletes, women in mythology, women warriors in folklore, witches and witch hunting, fairy tales, and more. Users can help create new articles, expand or translate from a generated list of suggested articles. Organisers are requested to work on the following action items to sign up their communities for the project: # Create a page for the contest on the local wiki. # Set up a campaign on '''CampWiz''' tool. # Create the local list and mention the timeline and local and international prizes. # Request local admins for site notice. # Link the local page and the CampWiz link on the [[:m:Feminism and Folklore 2024/Project Page|meta project page]]. This year, the Wiki Loves Folklore Tech Team has introduced two new tools to enhance support for the campaign. These tools include the '''Article List Generator by Topic''' and '''CampWiz'''. The Article List Generator by Topic enables users to identify articles on the English Wikipedia that are not present in their native language Wikipedia. Users can customize their selection criteria, and the tool will present a table showcasing the missing articles along with suggested titles. Additionally, users have the option to download the list in both CSV and wikitable formats. Notably, the CampWiz tool will be employed for the project for the first time, empowering users to effectively host the project with a jury. Both tools are now available for use in the campaign. [https://tools.wikilovesfolklore.org/ '''Click here to access these tools'''] Learn more about the contest and prizes on our [[:m:Feminism and Folklore 2024|project page]]. Feel free to contact us on our [[:m:Talk:Feminism and Folklore 2024/Project Page|meta talk page]] or by email us if you need any assistance. We look forward to your immense coordination. Thank you and Best wishes, '''[[:m:Feminism and Folklore 2024|Feminism and Folklore 2024 International Team]]''' ::::Stay connected [[File:B&W Facebook icon.png|link=https://www.facebook.com/feminismandfolklore/|30x30px]]&nbsp; [[File:B&W Twitter icon.png|link=https://twitter.com/wikifolklore|30x30px]] </div></div> --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 18. januara 2024, 08:26 (CET) == Wiki Loves Folklore is back! == <div lang="en" dir="ltr" class="mw-content-ltr"> {{int:please-translate}} [[File:Wiki Loves Folklore Logo.svg|right|150px|frameless]] Dear Wiki Community, You are humbly invited to participate in the '''[[:c:Commons:Wiki Loves Folklore 2024|Wiki Loves Folklore 2024]]''' an international photography contest organized on Wikimedia Commons to document folklore and intangible cultural heritage from different regions, including, folk creative activities and many more. It is held every year from the '''1st till the 31st''' of March. You can help in enriching the folklore documentation on Commons from your region by taking photos, audios, videos, and [https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard&campaign=wlf_2024 submitting] them in this commons contest. You can also [[:c:Commons:Wiki Loves Folklore 2024/Organize|organize a local contest]] in your country and support us in translating the [[:c:Commons:Wiki Loves Folklore 2024/Translations|project pages]] to help us spread the word in your native language. Feel free to contact us on our [[:c:Commons talk:Wiki Loves Folklore 2024|project Talk page]] if you need any assistance. '''Kind regards,''' '''Wiki loves Folklore International Team''' -- [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 18. januara 2024, 08:26 (CET) </div></div> <!-- Nachricht versandt von Benutzer:Tiven2240@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wikipedia&oldid=23942484 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Abstimmung über die Satzung des Koordinationskomitees des universellen Verhaltenskodex</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting opens|Du findest diese Nachricht in weitere Sprachen übersetzt im Meta-Wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting opens}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, ich melde mich heute bei euch, um anzukündigen, dass die Abstimmungsphase für die Satzung des [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Koordinationskomitees des universellen Verhaltenskodex]] (U4C) begonnen hat. Communitymitglieder können ab sofort bis zum '''2. Februar 2024''' [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter/Voter_information|über SecurePoll ihre Stimme abgeben und Kommentare zur Satzung hinterlassen]]. Diejenigen von euch, die ihre Meinung bereits bei der Entwicklung der [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|UCoC-Durchsetzungsleitlinien]] abgegeben haben, kennen diesen Prozess schon. Die [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|aktuelle Version der Satzung des Koordinationskomittes des universellen Verhaltenskodex]] steht im Meta-Wiki mit Übersetzungen zur Verfügung. Lies die Satzung, stimm ab und teile diese Nachricht mit anderen aus deiner Community! Das U4C-Aufbaukomitee freut sich wirklich auf eure Beteiligung. Für das UCoC-Projektteam,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 19. januara 2024, 19:08 (CET) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25853527 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Die letzten Tage zur Abstimmung über das Koordinationskomitee des universellen Verhaltenskodex</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting reminder|Du findest diese Nachricht in weitere Sprachen übersetzt im Meta-Wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - voting reminder}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, ich melde mich bei euch, um daran zu erinnern, dass die Abstimmungsphase über die Satzung des [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Koordinationskomitees des universellen Verhaltenskodex]] (U4C) am '''2. Februar 2024''' zu Ende ist. Communitymitglieder können [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter/Voter_information|über SecurePoll ihre Stimme abgeben und Kommentare zur Satzung hinterlassen]]. Diejenigen unter euch, die sich während der Entwicklung der [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|UCoC-Durchsetzungsleitlinien]] zu Wort gemeldet haben, kennen diesen Prozess bereits. Die [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|aktuelle Version der Satzung des Koordinationskomittes des universellen Verhaltenskodex]] steht im Meta-Wiki mit Übersetzungen zur Verfügung. Lies die Satzung, stimm ab und teile diese Nachricht mit anderen aus deiner Community! Das U4C-Aufbaukomitee freut sich wirklich auf eure Beteiligung. Für das UCoC-Projektteam,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 31. januara 2024, 18:00 (CET) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=25853527 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Ergebnisse der Abstimmung über die Satzung des UCoC-Koordinationskomitees</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - results|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:wiki/Universal Code of Conduct/Coordinating Committee/Charter/Announcement - results}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, danke für das Interesse an der Entwicklung des universellen Verhaltenskodex. Ich möchte hiermit die Ergebnisse der [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter/Voter_information|Abstimmung zur Ratifizierung]] der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|Satzung des UCoC-Koordinationskomitees]] ankündigen. 1746 Beitragende haben an dieser Abstimmung teilgenommen, wovon 1249 Abstimmende der Satzung zustimmen und 420 Abstimmende sie ablehnen. Im Rahmen der Ratifizierung war es Abstimmenden möglich, Kommentare zur Satzung abzugeben. Ein Bericht mit Statistiken zur Abstimmung und einer Zusammenfassung der Kommentare wird in den kommenden Wochen im Meta-Wiki veröffentlicht werden. Wir werden bald über die nächsten Schritte berichten! Für das UCoC-Projektteam<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 12. februara 2024, 19:23 (CET) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26160150 --> == Ukraine's Cultural Diplomacy Month 2024: We are back! == <div lang="en" dir="ltr" class="mw-content-ltr"> [[File:UCDM 2024 general.jpg|180px|right]] {{int:please-translate}} Hello, dear Wikipedians!<br/> [[:m:Special:MyLanguage/Wikimedia Ukraine|Wikimedia Ukraine]], in cooperation with the [[:en:Ministry of Foreign Affairs of Ukraine|MFA of Ukraine]] and [[:en:Ukrainian Institute|Ukrainian Institute]], has launched the forth edition of writing challenge "'''[[:m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2024|Ukraine's Cultural Diplomacy Month]]'''", which lasts from 1st until 31st March 2024. The campaign is dedicated to famous Ukrainian artists of cinema, music, literature, architecture, design and cultural phenomena of Ukraine that are now part of world heritage. We accept contribution in every language! The most active contesters will receive prizes.<br/> We invite you to take part and help us improve the coverage of Ukrainian culture on Wikipedia in your language! Also, we plan to set up a [[:m:CentralNotice/Request/UCDM 2024|banner]] to notify users of the possibility to participate in such a challenge! [[:m:User:ValentynNefedov (WMUA)|ValentynNefedov (WMUA)]] ([[:m:User talk:ValentynNefedov (WMUA)|talk]]) </div> <!-- Nachricht versandt von Benutzer:ValentynNefedov (WMUA)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery/Wikipedia&oldid=26166467 --> == <span lang="de" dir="ltr" class="mw-content-ltr"> Der Bericht zur Ratifizierung der U4C-Satzung und zur U4C-Bewerbung ist jetzt verfügbar</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – call for candidates| Diese Nachricht liegt im Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – call for candidates}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, Ich schreibe euch heute wegen zwei wichtiger Informationen. Zum einen ist der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter/Vote results|Bericht über die Kommentare zur Ratifizierung der Satzung für das Koordinationskomitee des universellen Verhaltenskodex (U4C)]] jetzt verfügbar. Zum anderen hat die Bewerbungsphase für das U4C begonnen – sie läuft bis zum 1. April 2024. Das [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Koordinationskomitee des universellen Verhaltenskodex]] (U4C) ist eine globale Gruppe, die für eine gerechte und konsequente Umsetzung des Verhaltenskodex sorgen soll. Communitymitglieder sind eingeladen, sich für das U4C zu bewerben. Weitere Informationen zum U4C sind in der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|Satzung]] zu finden. Gemäß der Satzung hat das U4C 16 Sitze: acht für die Gesamtcommunity und acht regional verteilte, um sicherzustellen, dass das U4C die Diversität des Movements widerspiegelt. Im [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024|Meta-Wiki]] gibt es mehr Informationen. Dort werden auch die Bewerbungen entgegengenommen. Für das UCoC Projekt-Team<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 5. měrca 2024, 17:25 (CET) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26276337 --> == <span lang="de" dir="ltr" class="mw-content-ltr"> Auswahl für das Board of Trustees der Wikimedia Foundation 2024</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> : ''[[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Announcement/Selection announcement| Diese Nachricht liegt im Meta-Wiki in weitere Sprachen übersetzt vor.]]'' : ''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Announcement/Selection announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2024/Announcement/Selection announcement}}&language=&action=page&filter= {{int:please-translate}}]</div>'' Hallo allerseits, In diesem Jahr endet die Amtszeit von vier (4) Trustees im Board of Trustees der Wikimedia Foundation, die von Affiliates und der Community gewählt wurden [1]. Das Board of Trustees lädt das gesamte Movement ein, am diesjährigen Auswahlprozess teilzunehmen und über die freigewordenen Sitze abzustimmen. Das [[m:Special:MyLanguage/Wikimedia Foundation elections committee|Wahlkomitee]] wird diesen Prozess mit Unterstützung von Angestellten der Foundation beaufsichtigen [2]. Das Komitee für Board Governance hat eine Arbeitsgruppe für die Board-Auswahl ins Leben gerufen, die aus Trustees besteht, die im diesjährigen Auswahlprozess für Community und Affiliates nicht kandidieren können: Dariusz Jemielniak, Nataliia Tymkiv, Esra’a Al Shafei, Kathy Collins und Shani Evenstein Sigalov [3]. Diese Gruppe hat die Aufgabe, den Trustee-Auswahlprozess 2024 für das Board zu überwachen und dieses darüber zu informieren. Mehr Details zu den Rollen des Wahlkomitees, des Boards und der Angestellten gibt es hier [4]. Das sind die wichtigsten geplanten Daten: * Mai 2024: Aufruf zur Bewerbung und zum Stellen von Fragen * Juni 2024: Affiliates stimmen ab, um eine Shortlist aus zwölf Personen zu bestimmen (es gibt keine Shortlist, wenn sich 15 oder weniger Personen bewerben) [5] * Juni–August 2024: Kampagne * Ende August / Anfang September 2024: zweiwöchige Abstimmung durch die Community * Oktober–November 2024: Hintergrundüberprüfung der gewählten Personen * Board-Sitzung im Dezember 2024: Einführung der neuen Trustees Du kannst auf [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|dieser Seite im Meta-Wiki]] den genauen Zeitplan, das Bewerbungsverfahren, die Regeln für die Kampagne und die Kriterien für Wahlberechtigung ansehen und deine Pläne entsprechend ausrichten. '''Freiwillige Wahlhelfer:innen''' Eine weitere Möglichkeit, sich am Auswahlprozess 2024 zu beteiligen, ist die Teilnahme als freiwillige:r Wahlhelfer:in. Diese Freiwilligen sind Verbindungspersonen zwischen dem Wahlkomitee und ihren jeweiligen Communitys. Sie helfen dabei, sicherzustellen, dass ihre Communitys vertreten sind, und rufen diese zur Wahl auf. Erfahre [[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Election Volunteers|auf dieser Seite im Meta-wiki]] mehr über das Programm und wie du teilnehmen kannst. Beste Grüße [[m:Special:MyLanguage/User:Pundit|Dariusz Jemielniak]] (Governance Committee Chair, Arbeitsgruppe für die Board-Auswahl) [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2021/Results#Elected [2] https://foundation.wikimedia.org/wiki/Committee:Elections_Committee_Charter [3] https://foundation.wikimedia.org/wiki/Minutes:2023-08-15#Governance_Committee [4] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections_committee/Roles [5] Auch wenn die ideale Anzahl zwölf Kandidierende für vier freie Sitze sind, wird das Shortlist-Verfahren nur angewendet, wenn mehr als 15 Personen zur Auswahl stehen, da sich ansonsten die ein bis drei Kandidierenden, die es nicht durch das Verfahren schaffen, ausgeschlossen fühlen könnten und der Aufwand für die Affiliates im Verhältnis zur kleinen Anzahl sehr groß wäre.<section end="announcement-content" /> </div> [[User:MPossoupe_(WMF)|MPossoupe_(WMF)]]12. měrca 2024, 20:57 (CET) <!-- Nachricht versandt von Benutzer:MPossoupe (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26349432 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Euer Wiki wird bald im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2024-03-20|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2024-03-20T14:00|en}} {{#time:H:i e|2024-03-20T14:00}}]''' (15:00 MEZ) beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:j. F Y|2024-03-20|de}} wird bis zu einer Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. Weitere Benachrichtigungen folgen. Auf allen Wikis wird 30 Minuten im Voraus einen Banner erscheinen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> [[user:Trizek (WMF)|Trizek (WMF)]], 15. měrca 2024, 01:00 (CET) <!-- Nachricht versandt von Benutzer:Trizek (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=25636619 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Stimm jetzt über die Mitglieder des ersten U4C ab</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – vote opens|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – vote opens}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, ich schreibe euch, um anzukündigen, dass die Abstimmungsphase für das Koordinationskomitee des universellen Verhaltenskodex (U4C) begonnen hat und bis zum 9. Mai 2024 läuft. Auf der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024|Wahlseite im Meta-Wiki]] könnt ihr mehr über die Wahl und die Wahlberechtigung erfahren. Das Koordinationskomitee des universellen Verhaltenskodex (U4C) ist eine globale Gruppe, die sich für eine gerechte und konsequente Umsetzung des UCoC einsetzt. Communitymitglieder waren eingeladen, sich für das U4C zu bewerben. Mehr Informationen über das U4C und seine Aufgaben sind in [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|der U4C-Satzung]] zu finden. Bitte teile diese Nachricht mit Mitgliedern deiner Community, sodass sie sich auch beteiligen können. Für das UCoC-Projektteam<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 25. apryla 2024, 22:20 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Melde dich an für das Sprachengemeinschaftstreffen am 31. Mai um 16:00 Uhr UTC</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="message"/>Hallo allerseits, Das nächste Sprachengemeinschaftstreffen ist für in ein paar Wochen geplant - den 31. Mai um 16:00 Uhr UTC. Solltest du Interessse haben, kannst du dich [https://www.mediawiki.org/w/index.php?title=Wikimedia_Language_engineering/Community_meetings#31_May_2024 auf dieser Wiki-Seite anmelden]. Es handelt sich um ein teilnehmerorientiertes Treffen, bei dem wir sprachspezifische Neuigkeiten zu verschiedenen Projekten teilen, gemeinsam technische Probleme der Sprach-Wikis diskutieren und zusammenarbeiten um mögliche Lösungen zu finden. Themen des letzten Treffens waren beispielsweise der maschinelle Übersetzungsdienst (MinT) und die Sprachen und Modelle die davon unterstützt werden, Lokalisierungsbemühungen des Kiwix-Teams und technische Schwierigkeiten mit numerischer Sortierung in Dateien, die in der bengalischen Wikisource genutzt werden. Hast du Ideen für Themen, zu denen du technische Neuigkeiten zu deinem Projekt teilen möchtest? Irgendwelche Probleme, die du gerne während dem Treffen diskutieren möchtest? Benötigst du Dolmetscherunterstützung vom Englischen in eine andere Sprache? Bitte melde dich bei mir unter ssethi(__AT__)wikimedia.org und [[etherpad:p/language-community-meeting-may-2024|füge Dinge für die Agenda zu diesem Dokument hinzu]]. Wir freuen uns auf deine Teilnahme! <section end="message"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 14. meje 2024, 23:22 (CEST) <!-- Nachricht versandt von Benutzer:SSethi (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 --> == <span lang="de" dir="ltr" class="mw-content-ltr"> Rückmeldung zur Prozedur für den Lebenszyklus von Schwesterprojekten willkommen</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle/Invitation for feedback (MM)|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle/Invitation for feedback (MM)}}&language=&action=page&filter= {{int:please-translate}}]'' [[File:Sibling Project Lifecycle Conversation 3.png|150px|right|link=:m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle]] Liebe Mitglieder der Gemeinschaft, Das [[:m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee|Komitee für Gemeinschaftsangelegenheiten]] (CAC) des [[:m:Special:MyLanguage/Wikimedia Foundation Board of Trustees|Kuratoriums der Wikimediastiftung]] lädt euch dazu ein, Rückmeldung zu einem '''[[:m:Special:MyLanguage/Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle|Prozedurentwurf für den Lebenszyklus von Schwesterprojekten]]''' zu geben. Dieser Entwurf stellt vorgeschlagene Schritte und Anforderungen für die Öffnung und Schließung von Wikimedia-Schwesterprojekten dar und zielt darauf ab sicherzustellen, dass neu bewilligte Projekte auf Erfolg eingestellt sind. Das ist seperat von der Prozedur zur Öffnung und Schließung neuer Sprachversionen von Projekten, welche durch das [[:m:Special:MyLanguage/Language committee|Sprachkomitee]] oder die [[m:Special:MyLanguage/Closing_projects_policy|Richtlinien zum Schließen von Projekten]] gehandhabt wird. Ihr könnt die Details auf [[:m:Special:MyLanguage/Talk:Wikimedia Foundation Community Affairs Committee/Procedure for Sibling Project Lifecycle#Review|dieser Seite]] finden, sowie Möglichkeiten, um eure Rückmeldung von heute bis zum Ende des '''23. Juni 2024''' anywhere on Earth (entspricht dem 24. Juni 2024 14:00 Uhr MESZ) abzugeben. Ihr könnt Informationen hierüber auch mit interessierten Projektgemeinschaften, mit denen ihr arbeitet oder die ihr unterstützt, teilen und ihr könnt uns auch dabei helfen diese Prozedur in mehr Sprachen zu übersetzen, damit die Leute der Diskussion mit ihrer eigenen Sprache beitreten können. Für das CAC,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 22. meje 2024, 04:25 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Ankündigung des ersten Koordinationskomitees für den universellen Verhaltenskodex</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – results|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – results}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo, Die Wahlprüfer haben die Überprüfung der Wahlergebnisse abgeschlossen. Deshalb folgen hier jetzt die Ergebnisse der ersten [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024|Wahl des Koordinationskomitees für den universellen Verhaltenskodex (U4C)]]. Wir freuen uns, die folgenden Personen als regionale Mitglieder des U4C ankündigen zu dürfen, die eine zweijährige Amtszeit erfüllen werden: * Nordamerika (USA und Kanada) ** – * Nord- und Westeuropa ** [[m:Special:MyLanguage/User:Ghilt|Ghilt]] * Lateinamerika und die Karibik ** – * Mittel- und Osteuropa (CEE) ** — * Subsaharisches Afrika ** – * Mittlerer Osten und Nordafrika ** [[m:Special:MyLanguage/User:Ibrahim.ID|Ibrahim.ID]] * Ost-, Südostasien und Pazifik (ESEAP) ** [[m:Special:MyLanguage/User:0xDeadbeef|0xDeadbeef]] * Südasien ** – Die folgenden Personen wurden als Gesamtgemeinschaftsmitglieder des U4C gewählt und werden eine einjährige Amtszeit erfüllen: * [[m:Special:MyLanguage/User:Barkeep49|Barkeep49]] * [[m:Special:MyLanguage/User:Superpes15|Superpes15]] * [[m:Special:MyLanguage/User:Civvì|Civvì]] * [[m:Special:MyLanguage/User:Luke081515|Luke081515]] * – * – * – * – Vielen Dank erneut an alle, die an diesem Prozess teilgenommen haben und viel Anerkennung an die Kandidaten für eure Führung und euer Engagement für die Wikimediabewegung und -gemeinschaft. Über die nächsten Wochen wird das U4C damit anfangen, sich zu treffen und das Jahr 2024-25 zu planen, um die Umsetzung und Überprüfung des universellen Verhaltenskodex (UCoC) und der Durchsetzungsrichtlinien zu unterstützen. Verfolge ihre Arbeit im [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Meta-Wiki]]. Für das UCoC-Projektteam,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 3. junija 2024, 10:14 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Der endgültige Text der Charta der Wikimedia-Bewegung ist jetzt auf Meta verfügbar</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Final draft available|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Final draft available}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, Der endgültige Text der [[m:Special:MyLanguage/Movement Charter|Charta der Wikimedia-Bewegung]] ist jetzt auf Meta in mehr als 20 Sprachen zur Durchsicht verfügbar. '''Was ist die Charta der Wikimedia-Bewegung?''' Die Charta der Wikimedia-Bewegung ist ein vorgeschlagenes Dokument, in dem die Rollen und Zuständigkeiten aller Mitglieder und Bestandteile der Wikimedia-Bewegung definiert werden sollen, inklusive der Schaffung eines neuen Gremiums – des Globalen Rats – zur Leitung des Movements. '''Nimm an der „Launchparty“ der Charta der Wikimedia-Bewegung teil''' Nimm am '''20. Juni 2024''' um '''14:00–15:00 UTC''' ([https://zonestamp.toolforge.org/1718892000 in deiner Zeitzone]) an der [[m:Special:MyLanguage/Event:Movement Charter Launch Party|„Launchparty“]] teil. Während dieses Videogesprächs werden wir die Veröffentlichung der endgültigen Version der Charta feiern und ihren Inhalt präsentieren. Beteilige dich und erfahre mehr über die Charta, bevor du deine Stimme abgibst. '''Abstimmung zur Ratifizierung der Charta der Wikimedia-Bewegung''' Die Abstimmung beginnt auf SecurePoll am '''25. Juni 2024''' um '''00:01 UTC''' und wird am '''9. Juli 2024''' um '''23:59 UTC''' enden. Auf Meta kannst du weitere [[m:Special:MyLanguage/Movement Charter/Ratification/Voting|Einzelheiten zur Abstimmung, zur Wahlberechtigung und zu anderen Aspekten]] finden. Wenn du Fragen hast, hinterlasse bitte einen Kommentar auf der [[m:Special:MyLanguage/Talk:Movement Charter|Meta-Diskussionsseite]] oder schick dem MCDC eine E-Mail an [mailto:mcdc@wikimedia.org mcdc@wikimedia.org]. Für das MCDC<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 11. junija 2024, 10:44 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26390244 --> == <span lang="de" dir="ltr" class="mw-content-ltr">Die Abstimmung zur Ratifizierung der Charta der Wikimedia-Bewegung hat begonnen – stimm jetzt ab</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Ratification vote opens|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Ratification vote opens}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, Die Abstimmung, um die '''[[m:Special:MyLanguage/Movement Charter|Charta der Wikimedia-Bewegung]]''' zu ratifizieren, hat begonnen. Die Charta der Wikimedia-Bewegung ist ein Dokument, in dem die Rollen und Zuständigkeiten aller Mitglieder und Bestandteile der Wikimedia-Bewegung definiert werden sollen, inklusive der Schaffung eines neuen Gremiums – des Globalen Rats – zur Leitung des Movements. Die endgültige Version der Charta der Wikimedia-Bewegung steht [[m:Special:MyLanguage/Movement Charter|auf Meta in verschiedenen Sprachen zur Verfügung]]. Die Abstimmung begann auf SecurePoll am '''25. Juni 2024''' um '''00:01 UTC''' und wird am '''9. Juli 2024''' um '''23:59 UTC''' enden. Bitte lies dir die [[m:Special:MyLanguage/Movement Charter/Ratification/Voting|Einzelheiten zur Abstimmung und zur Wahlberechtigung durch]]. Nachdem du die Charta gelesen hast, [[Special:SecurePoll/vote/398|'''stimm bitte hier ab''']] und verbreite diese Botschaft weiter. Wenn du Fragen zur Abstimmung hast, nimm bitte mit der Wahlkommission der Charta unter [mailto:cec@wikimedia.org '''cec@wikimedia.org'''] Kontakt auf. Für das CEC,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 25. junija 2024, 12:51 (CEST) <!-- Nachricht versandt von Benutzer:RamzyM (WMF)@metawiki durch Verwendung der Liste unter https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=26989444 --> == Plans to enable the Content and Section translation tool in your Wikipedia == {{int:Hello}} Upper Sorbian Wikipedians! Apologies, as this message is not in your native language; {{int:please-translate}}. The [[mw:Wikimedia_Language_engineering|WMF Language team]] proposes to enable the Section and Content translation tool by default to your Wikipedia if there are no objections from members of your community. The [[mw:Content_translation/Section_translation|Section Translation]] extends the capabilities of [[mw:Content_translation|Content Translation]] to support mobile devices. Below is background information about the tools and how to test the Section translation tool. '''Background information''' [[mw:Content_translation|Content Translation]] has been a successful tool for editors to create content in their language. More than one million articles have been created across all languages since the tool was released in 2015. However, the tool is not out of beta in Upper Sorbian Wikipedia, limiting the discoverability of the tool and its use and blocking the enablement of the Section translation in your Wikipedia. [[mw:Content_translation/Section_translation|Section Translation]] extends the capabilities of Content Translation to support mobile devices. On mobile, the tool will: * Guide you to translate one section at a time to expand existing articles or create new ones * Make it easy to transfer knowledge across languages anytime from your mobile device So, we will enable the tools on Upper Sorbian Wikipedia by July 11th, 2024, if there are no objections from your community. '''Try the Section translation tool''' Before the enablement, you can try the current implementation of the tool in [https://test.m.wikipedia.org/w/index.php?title=Special:ContentTranslation&from=en&to=hsb&sx=true#/ our testing instance]. Once it is enabled in your Wikipedia, you’ll have access to https://hsb.wikipedia.org/wiki/Special:ContentTranslation with your mobile device. You can select an article and translate it from scratch. Currently, there is no machine translation support for your Wikipedia. Often, this is due to the lack of parallel data to train translation models for your language. Considering that making translations of Wikipedia articles is [[mw:Content_translation/Published_translations#Parallel_corpora|a way to generate such parallel corpora]], we consider that enabling these tools by default for visibility and more use can benefit your language. '''Request for feedback''' Please provide feedback about the Section translation in this thread or on [[mw:Talk:Content_translation|this project talk page]]. We want to  hear about your impressions on * The section translation tool * What do you think about our plans to enable it * Your ideas for improving the tool Thanks, and we look forward to your feedback and questions. On behalf of the WMF Language team.[[Wužiwar:UOzurumba (WMF)|UOzurumba (WMF)]] ([[Diskusija z wužiwarjom:UOzurumba (WMF)|diskusija]]) 27. junija 2024, 22:40 (CEST) == <span lang="de" dir="ltr" class="mw-content-ltr">Die Abstimmung zur Ratifizierung der Charta der Wikimedia-Bewegung geht zu Ende</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Final reminder|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Final reminder}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits, Hiermit möchten wir freundlich daran erinnern, dass die Abstimmungsphase zur Ratifizierung der [[m:Special:MyLanguage/Movement Charter|Charta der Wikimedia-Bewegung]] am '''9. Juli 2024''' um '''23:59 UTC''' endet. Falls du noch nicht abgestimmt hast, hole das bitte [[m:Special:SecurePoll/vote/398|auf SecurePoll]] nach. Für die [[m:Special:MyLanguage/Movement_Charter/Ratification/Voting#Electoral_Commission|Wahlkommission der Charta]],<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 8. julija 2024, 05:45 (CEST) == <span lang="en" dir="ltr" class="mw-content-ltr">U4C Special Election - Call for Candidates</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – call for candidates|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – call for candidates}}&language=&action=page&filter= {{int:please-translate}}]'' Hello all, A special election has been called to fill additional vacancies on the U4C. The call for candidates phase is open from now through July 19, 2024. The [[:m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the [[:foundation:Wikimedia Foundation Universal Code of Conduct|UCoC]]. Community members are invited to submit their applications in the special election for the U4C. For more information and the responsibilities of the U4C, please review the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|U4C Charter]]. In this special election, according to [[Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter#2. Elections and Terms|chapter 2 of the U4C charter]], there are 9 seats available on the U4C: '''four''' community-at-large seats and '''five''' regional seats to ensure the U4C represents the diversity of the movement. [[Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter#5. Glossary|No more than two members of the U4C can be elected from the same home wiki]]. Therefore, candidates must not have English Wikipedia, German Wikipedia, or Italian Wikipedia as their home wiki. Read more and submit your application on [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election|Meta-wiki]]. In cooperation with the U4C,<section end="announcement-content" /> </div> -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 10. julija 2024, 02:02 (CEST) == <span lang="de" dir="ltr" class="mw-content-ltr">Ergebnisse der Ratifikation der Movementcharter</span> == <div lang="de" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Movement Charter/Drafting Committee/Announcement - Results of the ratification vote|Diese Nachricht liegt auf Meta-Wiki auch in weitere Sprachen übersetzt vor.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Movement Charter/Drafting Committee/Announcement - Results of the ratification vote}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo zusammen, Nachdem die [[m:Special:MyLanguage/Movement Charter/Ratification/Voting#Electoral Commission|Wahlkommission]] alle Stimmen ausgezählt hat in der individuellen Abstimmung und in der Affiliateabstimmung, wird hiermit das Ergebnis verkündet. Wie bereits [[m:Special:MyLanguage/Talk:Movement Charter#Thank you for your participation in the Movement Charter ratification vote!|auf Meta verkündet]], wurden für beide Abstimmungen die Quoren erreicht vor Wahlende am '''9. Juli, 23:59 UTC'''. Wir danken allen 2.451 Teilnehmern in der individuellen Abstimmung und den 129 Vertretern der Affiliates die teilnahmen. Eure Voten und Kommentare sind wertvoll für künftige Schritte bezüglich der Movementstrategie. Die endgüligen Ergebnisse der Ratifizierung der [[m:Special:MyLanguage/Movement Charter|Movementcharter]], die zwischen dem 25. Juni und 9. Juli 2024 stattfand, sind folgendermaßen: '''Individuelle Abstimmung / (Communityabstimmung)''' Von den 2.451 Personen die abstimmten bis zum 9. July 23:59 (UTC), gab es 2.446 gültige Stimmen. Darunter '''1.710''' mal "Ja"; '''623''' mal "Nein"; und '''113''' mal "-" (Neutral). Da die neutralen Voten nicht mitzählen, liegt die Zustimmungsrate bei 73,30 % (1719/2333), während 26,70 % die Charter ablehnten (623/2333). === Abstimmung von Affiliates === Von den 129 Personen die von den Affiliates designiert wurden, stimmten alle 129 bis zum 9. July 23:59 (UTC) ab. Es gab 129 gültige Stimmen. Darunter '''93''' mal "Ja"; '''18''' mal "Nein"; und ebenfalls '''18''' mal "-" (Neutral). Da die neutralen Voten nicht mitzählen, liegt die Zustimmungsrate bei 83,78 % (93/111), während 16,22 % die Charter ablehnten (18/111). '''Board of Trustees der Wikimedia Foundation:''' Das Board o Trustees der Wikimedia Foundation votierte die vorgeschlagene Charter '''nicht zu ratifizieren''', während des Boardmeetings am 8. July 2024. Die Vorsitzende des Boards, Nataliia Tymkiv, [[m:Special:MyLanguage/Wikimedia_Foundation_Board_noticeboard/Board_resolution_and_vote_on_the_proposed_Movement_Charter|veröffentlichte das Ergebnis der Abstimmung, deren Protokol und Vorschläge zu weiteren Schritten]]. Folglich ist die Movementcharter damit insgesamt '''nicht ratifiziert'''. Wir danken für eure Teilnahme an diesem wichtigen Moment für die Führungsstruktur (Governance) unseres Wikiversums (Movement). Die Charterwahlkommision, [[m:User:Abhinav619|Abhinav619]], [[m:User:Borschts|Borschts]], [[m:User:Iwuala Lucy|Iwuala Lucy]], [[m:User:Tochiprecious|Tochiprecious]], [[m:User:Der-Wir-Ing|Der-Wir-Ing]]<section end="announcement-content" /> </div> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 18. julija 2024, 19:52 (CEST) == <span lang="en" dir="ltr" class="mw-content-ltr">Vote now to fill vacancies of the first U4C</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – voting opens|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – voting opens}}&language=&action=page&filter= {{int:please-translate}}]'' Dear all, I am writing to you to let you know the voting period for the Universal Code of Conduct Coordinating Committee (U4C) is open now through '''August 10, 2024'''. Read the information on the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election|voting page on Meta-wiki]] to learn more about voting and voter eligibility. The Universal Code of Conduct Coordinating Committee (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. Community members were invited to submit their applications for the U4C. For more information and the responsibilities of the U4C, please [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]]. Please share this message with members of your community so they can participate as well. In cooperation with the U4C,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 27. julija 2024, 04:46 (CEST) == <span lang="en" dir="ltr" class="mw-content-ltr">Reminder! Vote closing soon to fill vacancies of the first U4C</span> == <div lang="en" dir="ltr" class="mw-content-ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – reminder to vote|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement – reminder to vote}}&language=&action=page&filter= {{int:please-translate}}]'' Dear all, The voting period for the Universal Code of Conduct Coordinating Committee (U4C) is closing soon. It is open through 10 August 2024. Read the information on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2024_Special_Election#Voting|the voting page on Meta-wiki to learn more about voting and voter eligibility]]. If you are eligible to vote and have not voted in this special election, it is important that you vote now. '''Why should you vote?''' The U4C is a global group dedicated to providing an equitable and consistent implementation of the UCoC. Community input into the committee membership is critical to the success of the UCoC. Please share this message with members of your community so they can participate as well. In cooperation with the U4C,<section end="announcement-content" /> </div> -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 6. awgusta 2024, 17:30 (CEST) == <span lang="de" dir="ltr">Bald neu: Subreferenzen – jetzt testen!</span> == <div lang="de" dir="ltr"> <section begin="Sub-referencing"/> [[File:Sub-referencing reuse visual.png|{{#ifeq:{{#dir}}|ltr|right|left}}|400px]] Hallo. Seit vielen Jahren wünschen sich Communitymitglieder einen unkomplizierten Weg, Einzelnachweise mit unterschiedlichen Details wiederzuverwenden. Nun kommt eine MediaWiki-Lösung: Die neue Subreferenzierungsfunktion wird das bestehende Einzelnachweissystem ergänzen und im Wikitext sowie im Visual Editor funktionieren. Ihr könnt weiterhin andere Arten von Einzelnachweisen nutzen, aber werdet womöglich Subreferenzen in Artikeln anderer Autor*innen sehen. Mehr Informationen [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing|auf der Projektseite]]. '''Wir wollen euer Feedback''', damit das Feature optimal für euch funktioniert: * [[m:Special:MyLanguage/WMDE Technical Wishes/Sub-referencing#Test|Bitte testet]] die aktuelle Entwicklungsversion im Betawiki und [[m:Talk:WMDE Technical Wishes/Sub-referencing|erzählt uns, was ihr davon haltet]]. * [[m:WMDE Technical Wishes/Sub-referencing/Sign-up|Tragt euch hier ein]], um Updates zum Projekt zu bekommen und/oder Einladung zu Tests mit Nutzer*innen zu erhalten. Das [[m:Special:MyLanguage/WMDE Technical Wishes|Technische-Wünsche]]-Team von [[m:Special:MyLanguage/Wikimedia Deutschland|Wikimedia Deutschland]] plant, die neue Funktion gegen Jahresende in Wikimediaprojekten zu veröffentlichen. Zuvor werden wir Entwickler*innen von Tools und Vorlagen mit Bezug zu Einzelnachweisen Bescheid geben. Bitte helft uns, die Neuerung bekannt zu machen. --[[m:User:Johannes Richter (WMDE)|Johannes Richter (WMDE)]] ([[m:User talk:Johannes Richter (WMDE)|talk]]) 10:36, 19 August 2024 (UTC) <section end="Sub-referencing"/> </div> == Sign up for the language community meeting on August 30th, 15:00 UTC == Hi all, The next language community meeting is scheduled in a few weeks—on August 30th at 15:00 UTC. If you're interested in joining, you can [https://www.mediawiki.org/wiki/Wikimedia_Language_and_Product_Localization/Community_meetings#30_August_2024 sign up on this wiki page]. This participant-driven meeting will focus on sharing language-specific updates related to various projects, discussing technical issues related to language wikis, and working together to find possible solutions. For example, in the last meeting, topics included the Language Converter, the state of language research, updates on the Incubator conversations, and technical challenges around external links not working with special characters on Bengali sites. Do you have any ideas for topics to share technical updates or discuss challenges? Please add agenda items to the document [https://etherpad.wikimedia.org/p/language-community-meeting-aug-2024 here] and reach out to ssethi(__AT__)wikimedia.org. We look forward to your participation! [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 23. awgusta 2024, 01:19 (CEST) == <span lang="en" dir="ltr">Announcing the Universal Code of Conduct Coordinating Committee</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> :''[https://lists.wikimedia.org/hyperkitty/list/board-elections@lists.wikimedia.org/thread/OKCCN2CANIH2K7DXJOL2GPVDFWL27R7C/ Original message at wikimedia-l]. [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement - results|You can find this message translated into additional languages on Meta-wiki.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Announcement - results}}&language=&action=page&filter= {{int:please-translate}}]'' Hello all, The scrutineers have finished reviewing the vote and the [[m:Special:MyLanguage/Elections Committee|Elections Committee]] have certified the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election/Results|results]] for the [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024 Special Election|Universal Code of Conduct Coordinating Committee (U4C) special election]]. I am pleased to announce the following individual as regional members of the U4C, who will fulfill a term until 15 June 2026: * North America (USA and Canada) ** Ajraddatz The following seats were not filled during this special election: * Latin America and Caribbean * Central and East Europe (CEE) * Sub-Saharan Africa * South Asia * The four remaining Community-At-Large seats Thank you again to everyone who participated in this process and much appreciation to the candidates for your leadership and dedication to the Wikimedia movement and community. Over the next few weeks, the U4C will begin meeting and planning the 2024-25 year in supporting the implementation and review of the UCoC and Enforcement Guidelines. You can follow their work on [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Meta-Wiki]]. On behalf of the U4C and the Elections Committee,<section end="announcement-content" /> </div> [[m:User:RamzyM (WMF)|RamzyM (WMF)]] 2. septembra 2024, 16:05 (CEST) == <span lang="de" dir="ltr">Nutze dein Mitspracherecht: Stimm über das Kuratorium 2024 ab!</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Hallo allerseits, die Abstimmungsphase der [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|Wahl zum Kuratorium 2024]] ist jetzt offen. Zwölf (12) Personen kandidieren für vier (4) Sitze im Kuratorium. In den [[m:Special:MyLanguage/Wikimedia Foundation elections/2024/Candidates|Vorstellungstexten]] und [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2024/Questions_for_candidates|Antworten auf Community-Fragen]] kannst du mehr über die Kandidierenden erfahren. Wenn du so weit bist, auf die [[Special:SecurePoll/vote/400|SecurePoll]]-Wahlseite wechseln, um abzustimmen. '''Die Abstimmungsphase beginnt am 3. September um 00:00 UTC und endet am 17. September um 23:59 UTC'''. Um deine Wahlberechtigung zu prüfen, gehe bitte zur [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2024/Voter_eligibility_guidelines|entsprechenden Informationsseite]]. Beste Grüße Das Wahlkomitee und die Arbeitsgruppe für die Kuratoriumszusammenstellung<section end="announcement-content" /> </div> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 3. septembra 2024, 14:14 (CEST) == <span lang="de" dir="ltr">Euer Wiki wird bald im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2024-09-25|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2024-09-25T15:00|en}} {{#time:H:i e|2024-09-25T15:00}}]''' (17:00 MESZ) beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. Auf allen Wikis wird 30 Minuten im Voraus ein Banner erscheinen. Dieses Banner bleibt bis zum Ende des Vorgangs sichtbar. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:j. F Y|2024-09-25|de}} wird bis zu eine Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> [[User:Trizek_(WMF)|Trizek_(WMF)]], 20. septembra 2024, 11:37 (CEST) == 'Wikidata item' link is moving. Find out where... == <div lang="en" dir="ltr" class="mw-content-ltr"><i>Apologies for cross-posting in English. Please consider translating this message.</i>{{tracked|T66315}} Hello everyone, a small change will soon be coming to the user-interface of your Wikimedia project. The [[d:Q16222597|Wikidata item]] [[w:|sitelink]] currently found under the <span style="color: #54595d;"><u>''General''</u></span> section of the '''Tools''' sidebar menu will move into the <span style="color: #54595d;"><u>''In Other Projects''</u></span> section. We would like the Wiki communities feedback so please let us know or ask questions on the [[m:Talk:Wikidata_For_Wikimedia_Projects/Projects/Move_Wikidata_item_link|Discussion page]] before we enable the change which can take place October 4 2024, circa 15:00 UTC+2. More information can be found on [[m:Wikidata_For_Wikimedia_Projects/Projects/Move_Wikidata_item_link|the project page]].<br><br>We welcome your feedback and questions.<br> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 27. septembra 2024, 20:57 (CEST) </div> == Invitation to Participate in Wiki Loves Ramadan Community Engagement Survey == Dear all, Apologies for writing in English. Please help to translate in your language. We are excited to announce the upcoming [[m:Wiki Loves Ramadan|Wiki Loves Ramadan]] event, a global initiative aimed at celebrating Ramadan by enriching Wikipedia and its sister projects with content related to this significant time of year. As we plan to organize this event globally, your insights and experiences are crucial in shaping the best possible participation experience for the community. To ensure that Wiki Loves Ramadan is engaging, inclusive, and impactful, we kindly invite you to participate in our community engagement survey. Your feedback will help us understand the needs of the community, set the event's focus, and guide our strategies for organizing this global event. Survey link: https://forms.gle/f66MuzjcPpwzVymu5 Please take a few minutes to share your thoughts. Your input will make a difference! Thank you for being a part of our journey to make Wiki Loves Ramadan a success. Warm regards, User:ZI Jony 6. oktobra 2024, 05:20 (CEST) Wiki Loves Ramadan Organizing Team == Proposal to enable the "Contribute" entry point in Upper Sorbian Wikipedia == {{Int:Hello}} Upper Sorbian Wikipedians, Apologies as this message is not in your language. {{Int:please-translate}}. The [[mediawikiwiki:Wikimedia_Language_and_Product_Localization|WMF Language and Product Localization]] team proposes enabling an entry point called "Contribute" to your Wikipedia. The [[:bn:বিশেষ:Contribute|Contribute]] entry point is based on collaborative work with other product teams in the Wikimedia Foundation on [[mediawikiwiki:Edit_Discovery|Edit discovery]], which validated the entry point as a persistent and constant path that contributors took to discover ways to contribute content in Wikipedia. Therefore, enabling this entry point in your Wikipedia will help contributors quickly discover available tools and immediately click to start using them. This entry point is designed to be a central point for discovering contribution tools in Upper Sorbian Wikipedia. '''Who can access it''' Once it is enabled in your Wikipedia, newcomers can access the entry point automatically by just logging into their account, click on the User drop-down menu and choose the "Contribute" icon, which takes you to another menu where you will find a self-guided description of what you can do to contribute content, as shown in the image below. An option to "view contributions" is also available to access the list of your contributions. [[File:Mobile_Contribute_Page.png|verweis=https://ia.wikipedia.org/wiki/File:Mobile_Contribute_Page.png|rahmenlos|534x534px|Mobile Contribute Page]] [[File:Mobile_contribute_menu_(detailed).png|verweis=https://ia.wikipedia.org/wiki/File:Mobile_contribute_menu_(detailed).png|722x722px|Mobile contribute menu (detailed)]] For experienced contributors, the Contribute icon is not automatically shown in their User drop-down menu. They will still see the "Contributions" option unless they change it to the "Contribute" manually. This feature is available in four Wikipedia (Albanian, Malayalam, Mongolian, and Tagalog). We have gotten valuable feedback that helped us improve its discoverability. Now, it is ready to be enabled in other Wikis. One major improvement was to [[phab:T369041|make the entry point optional for experienced contributors]] who still want to have the "Contributions" entry point as default.           We plan to enable it '''on mobile''' for Wikis, where the Section translation tool is enabled. In this way, we will provide a main entry point to the mobile translation dashboard, and the exposure can still be limited by targeting only the mobile platform for now. If there are no objections to having the entry point for mobile users from your community, we will enable it by 24th October 2024. We welcome your feedback and questions in this thread on our proposal to enable it here. Suppose there are no objections, we will deploy the "Contribute" entry point in your Wikipedia. We look forward to your response soon. Thank you! On behalf of the WMF Language and Product Localization team. [[Wužiwar:UOzurumba (WMF)|UOzurumba (WMF)]] ([[Diskusija z wužiwarjom:UOzurumba (WMF)|diskusija]]) 10. oktobra 2024, 06:31 (CEST) == <span lang="de" dir="ltr">Vorläufige Ergebnisse der Wahlen zum Kuratorium der Wikimedia Foundation 2024</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Hallo allerseits, vielen Dank für die Beteiligung an der [[m:Special:MyLanguage/Wikimedia Foundation elections/2024|Wahl zum Kuratorium der Wikimedia Foundation 2024]]. Rund 6000 Communitymitglieder aus über 180 Wikiprojekten haben abgestimmt. Die folgenden vier Kandidierenden haben die meisten Stimmen erhalten: # [[User:Kritzolina|Christel Steigenberger]] # [[User:Nadzik|Maciej Artur Nadzikiewicz]] # [[User:Victoria|Victoria Doronina]] # [[User:Laurentius|Lorenzo Losa]] Diese Kandidierenden haben die meisten Stimmen erhalten, müssen aber noch ins Kuratorium berufen werden. Dafür müssen sie erfolgreich eine Hintergrundüberprüfung durchlaufen und alle Kriterien erfüllen, die in den Statuten genannt werden. Die neuen Kuratoriumsmitglieder werden bei der nächsten Sitzung des Kuratoriums im Dezember 2024 ernannt. [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2024/Results|Erfahre im Meta-Wiki mehr über die Ergebnisse.]] Beste Grüße Das Wahlkomitee und die Arbeitsgruppe für die Kuratoriumszusammenstellung <section end="announcement-content" /> </div> [[User:MPossoupe_(WMF)|MPossoupe_(WMF)]] 14. oktobra 2024, 10:25 (CEST) == <span lang="de" dir="ltr">Suche nach Freiwilligen für mehrere Komitees der Wikimedia-Bewegung</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Jedes Jahr, in der Regel von Oktober bis Dezember, suchen mehrere Komitees der Wikimedia-Bewegung nach neuen Freiwilligen. Erfahre mehr über die Komitees auf den jeweiligen Seiten im Meta-Wiki: * [[m:Special:MyLanguage/Affiliations Committee|Affiliations-Komitee (AffCom)]] * [[m:Special:MyLanguage/Ombuds commission|Ombudskommission (OC)]] * [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Community Resilience and Sustainability/Trust and Safety/Case Review Committee|Fallprüfungskomitee (CRC)]] Die Bewerbungsphase für die Komitees startet am 16. Oktober 2024. Sie endet für das Affiliations-Komitee am 18. November 2024 und für die Ombudskommission sowie das Fallprüfungskomitee am 2. Dezember 2024. Erfahre, wie du dich bewirbst, indem du [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Committee appointments|die Ernennungsseite im Meta-Wiki besuchst]]. Bitte melde dich mit etwaigen Fragen auf der Diskussionsseite oder über E-Mail an [mailto:cst@wikimedia.org cst@wikimedia.org]. Für das Komitee-Unterstützungsteam <section end="announcement-content" /> </div> -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 17. oktobra 2024, 01:07 (CEST) == 'Wikidata item' link is moving, finally. == Hello everyone, I previously wrote on the 27th September to advise that the ''Wikidata item'' sitelink will change places in the sidebar menu, moving from the '''General''' section into the '''In Other Projects''' section. The scheduled rollout date of 04.10.2024 was delayed due to a necessary request for Mobile/MinervaNeue skin. I am happy to inform that the global rollout can now proceed and will occur later today, 22.10.2024 at 15:00 UTC-2. [[m:Talk:Wikidata_For_Wikimedia_Projects/Projects/Move_Wikidata_item_link|Please let us know]] if you notice any problems or bugs after this change. There should be no need for null-edits or purging cache for the changes to occur. Kind regards, -[[m:User:Danny Benjafield (WMDE)|Danny Benjafield (WMDE)]] 22. oktobra 2024, 13:29 (CEST) == Final Reminder: Join us in Making Wiki Loves Ramadan Success == Dear all, We’re thrilled to announce the Wiki Loves Ramadan event, a global initiative to celebrate Ramadan by enhancing Wikipedia and its sister projects with valuable content related to this special time of year. As we organize this event globally, we need your valuable input to make it a memorable experience for the community. Last Call to Participate in Our Survey: To ensure that Wiki Loves Ramadan is inclusive and impactful, we kindly request you to complete our community engagement survey. Your feedback will shape the event’s focus and guide our organizing strategies to better meet community needs. * Survey Link: [https://docs.google.com/forms/d/e/1FAIpQLSffN4prPtR5DRSq9nH-t1z8hG3jZFBbySrv32YoxV8KbTwxig/viewform?usp=sf_link Complete the Survey] * Deadline: November 10, 2024 Please take a few minutes to share your thoughts. Your input will truly make a difference! '''Volunteer Opportunity''': Join the Wiki Loves Ramadan Team! We’re seeking dedicated volunteers for key team roles essential to the success of this initiative. If you’re interested in volunteer roles, we invite you to apply. * Application Link: [https://docs.google.com/forms/d/e/1FAIpQLSfXiox_eEDH4yJ0gxVBgtL7jPe41TINAWYtpNp1JHSk8zhdgw/viewform?usp=sf_link Apply Here] * Application Deadline: October 31, 2024 Explore Open Positions: For a detailed list of roles and their responsibilities, please refer to the position descriptions here: [https://docs.google.com/document/d/1oy0_tilC6kow5GGf6cEuFvdFpekcubCqJlaxkxh-jT4/ Position Descriptions] Thank you for being part of this journey. We look forward to working together to make Wiki Loves Ramadan a success! Warm regards,<br> The Wiki Loves Ramadan Organizing Team 29. oktobra 2024, 06:11 (CET) == Sign up for the language community meeting on November 29th, 16:00 UTC == Hello everyone, The next language community meeting is coming up next week, on November 29th, at 16:00 UTC (Zonestamp! For your timezone <https://zonestamp.toolforge.org/1732896000>). If you're interested in joining, you can sign up on this wiki page: <https://www.mediawiki.org/wiki/Wikimedia_Language_and_Product_Localization/Community_meetings#29_November_2024>. This participant-driven meeting will be organized by the Wikimedia Foundation’s Language Product Localization team and the Language Diversity Hub. There will be presentations on topics like developing language keyboards, the creation of the Moore Wikipedia, and the language support track at Wiki Indaba. We will also have members from the Wayuunaiki community joining us to share their experiences with the Incubator and as a new community within our movement. This meeting will have a Spanish interpretation. Looking forward to seeing you at the language community meeting! Cheers, [[User:SSethi (WMF)|Srishti]] 21. nowembra 2024, 20:54 (CET) == Launching! Join Us for Wiki Loves Ramadan 2025! == Dear All, We’re happy to announce the launch of [[m:Wiki Loves Ramadan 2025|Wiki Loves Ramadan 2025]], an annual international campaign dedicated to celebrating and preserving Islamic cultures and history through the power of Wikipedia. As an active contributor to the Local Wikipedia, you are specially invited to participate in the launch. This year’s campaign will be launched for you to join us write, edit, and improve articles that showcase the richness and diversity of Islamic traditions, history, and culture. * Topic: [[m:Event:Wiki Loves Ramadan 2025 Campaign Launch|Wiki Loves Ramadan 2025 Campaign Launch]] * When: Jan 19, 2025 * Time: 16:00 Universal Time UTC and runs throughout Ramadan (starting February 25, 2025). * Join Zoom Meeting: https://us02web.zoom.us/j/88420056597?pwd=NdrpqIhrwAVPeWB8FNb258n7qngqqo.1 * Zoom meeting hosted by [[m:Wikimedia Bangladesh|Wikimedia Bangladesh]] To get started, visit the [[m:Wiki Loves Ramadan 2025|campaign page]] for details, resources, and guidelines: Wiki Loves Ramadan 2025. Add [[m:Wiki Loves Ramadan 2025/Participant|your community here]], and organized Wiki Loves Ramadan 2025 in your local language. Whether you’re a first-time editor or an experienced Wikipedian, your contributions matter. Together, we can ensure Islamic cultures and traditions are well-represented and accessible to all. Feel free to invite your community and friends too. Kindly reach out if you have any questions or need support as you prepare to participate. Let’s make Wiki Loves Ramadan 2025 a success! For the [[m:Wiki Loves Ramadan 2025/Team|International Team]] 16. januara 2025, 13:08 (CET) == Enabling Dark mode for logged-out users in this Wikipedia == <div lang="en" dir="ltr"> {{int:Hello}} Wikipedians, Apologies, as this message is not written in your native language. {{Int:please-translate}}. The [[mediawikiwiki:Reading/Web|Wikimedia Foundation Web team]] will be enabling [[mediawikiwiki:Special:MyLanguage/Reading/Web/Accessibility_for_reading|dark mode]] here on your Wikipedia by February 2025 now that pages on your wiki have passed our checks for accessibility and other quality checks. Congratulations! The plan to enable is made possible by the diligent work of editors and other technical contributors in your community who ensured that templates, gadgets, and other parts of pages can be accessible in dark mode. Thank you all for making dark mode available for everybody! For context, the Web team has concluded work on dark mode. If, on some wikis, the option is not yet available for logged-out users, this is likely because many pages do not yet display well in dark mode. As communities make progress on this work, we enable this feature on additional wikis once per month. If you notice any issues after enabling dark mode, please create a page: <code>Reading/Web/Accessibility for reading/Reporting/xx.wikipedia.org</code> in MediaWiki ([[mediawikiwiki:Reading/Web/Accessibility_for_reading/Reporting|like these pages]]), and report the issue in the created page. Thank you! On behalf of the [[mediawikiwiki:Reading/Web|Wikimedia Foundation Web team]]. </div> <bdi lang="en" dir="ltr">[[User:UOzurumba (WMF)|UOzurumba (WMF)]]</bdi> 21. januara 2025, 23:14 (CET) == Universal Code of Conduct annual review: provide your comments on the UCoC and Enforcement Guidelines == <div lang="en" dir="ltr" class="mw-content-ltr"> My apologies for writing in English. {{Int:Please-translate}}. I am writing to you to let you know the annual review period for the Universal Code of Conduct and Enforcement Guidelines is open now. You can make suggestions for changes through 3 February 2025. This is the first step of several to be taken for the annual review. [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review|Read more information and find a conversation to join on the UCoC page on Meta]]. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|you may review the U4C Charter]]. Please share this information with other members in your community wherever else might be appropriate. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 24. januara 2025, 02:11 (CET) </div> == Feminism and Folklore 2025 starts soon == <div style="border:8px maroon ridge;padding:6px;> [[File:Feminism and Folklore 2025 logo.svg|centre|550px|frameless]] ::<div lang="en" dir="ltr" class="mw-content-ltr"> <center>''{{int:please-translate}}''</center> Dear Wiki Community, You are humbly invited to organize the '''[[:m:Feminism and Folklore 2025|Feminism and Folklore 2025]]''' writing competition from February 1, 2025, to March 31, 2025 on your local Wikipedia. This year, Feminism and Folklore will focus on feminism, women's issues, and gender-focused topics for the project, with a [[:c:Commons:Wiki Loves Folklore 2025|Wiki Loves Folklore]] gender gap focus and a folk culture theme on Wikipedia. You can help Wikipedia's coverage of folklore from your area by writing or improving articles about things like folk festivals, folk dances, folk music, women and queer folklore figures, folk game athletes, women in mythology, women warriors in folklore, witches and witch hunting, fairy tales, and more. Users can help create new articles, expand or translate from a generated list of suggested articles. Organisers are requested to work on the following action items to sign up their communities for the project: # Create a page for the contest on the local wiki. # Set up a campaign on '''CampWiz''' tool. # Create the local list and mention the timeline and local and international prizes. # Request local admins for site notice. # Link the local page and the CampWiz link on the [[:m:Feminism and Folklore 2025/Project Page|meta project page]]. This year, the Wiki Loves Folklore Tech Team has introduced two new tools to enhance support for the campaign. These tools include the '''Article List Generator by Topic''' and '''CampWiz'''. The Article List Generator by Topic enables users to identify articles on the English Wikipedia that are not present in their native language Wikipedia. Users can customize their selection criteria, and the tool will present a table showcasing the missing articles along with suggested titles. Additionally, users have the option to download the list in both CSV and wikitable formats. Notably, the CampWiz tool will be employed for the project for the first time, empowering users to effectively host the project with a jury. Both tools are now available for use in the campaign. [https://tools.wikilovesfolklore.org/ '''Click here to access these tools'''] Learn more about the contest and prizes on our [[:m:Feminism and Folklore 2025|project page]]. Feel free to contact us on our [[:m:Talk:Feminism and Folklore 2025/Project Page|meta talk page]] or by email us if you need any assistance. We look forward to your immense coordination. Thank you and Best wishes, '''[[:m:Feminism and Folklore 2025|Feminism and Folklore 2025 International Team]]''' ::::Stay connected [[File:B&W Facebook icon.png|link=https://www.facebook.com/feminismandfolklore/|30x30px]]&nbsp; [[File:B&W Twitter icon.png|link=https://twitter.com/wikifolklore|30x30px]] </div></div> --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 29. januara 2025, 03:35 (CET) == Wiki Loves Folklore is back! == <div lang="en" dir="ltr" class="mw-content-ltr"> {{int:please-translate}} [[File:Wiki Loves Folklore Logo.svg|right|150px|frameless]] Dear Wiki Community, You are humbly invited to participate in the '''[[:c:Commons:Wiki Loves Folklore 2025|Wiki Loves Folklore 2025]]''' an international media contest organized on Wikimedia Commons to document folklore and intangible cultural heritage from different regions, including, folk creative activities and many more. It is held every year from the '''1st till the 31st''' of March. You can help in enriching the folklore documentation on Commons from your region by taking photos, audios, videos, and [https://commons.wikimedia.org/w/index.php?title=Special:UploadWizard&campaign=wlf_2025 submitting] them in this commons contest. You can also [[:c:Commons:Wiki Loves Folklore 2025/Organize|organize a local contest]] in your country and support us in translating the [[:c:Commons:Wiki Loves Folklore 2025/Translations|project pages]] to help us spread the word in your native language. Feel free to contact us on our [[:c:Commons talk:Wiki Loves Folklore 2025|project Talk page]] if you need any assistance. '''Kind regards,''' '''Wiki loves Folklore International Team''' --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 29. januara 2025, 03:35 (CET) </div> == Reminder: first part of the annual UCoC review closes soon == <div lang="en" dir="ltr" class="mw-content-ltr"> My apologies for writing in English. {{Int:Please-translate}}. This is a reminder that the first phase of the annual review period for the Universal Code of Conduct and Enforcement Guidelines will be closing soon. You can make suggestions for changes through [[d:Q614092|the end of day]], 3 February 2025. This is the first step of several to be taken for the annual review. [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review|Read more information and find a conversation to join on the UCoC page on Meta]]. After review of the feedback, proposals for updated text will be published on Meta in March for another round of community review. Please share this information with other members in your community wherever else might be appropriate. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 3. februara 2025, 01:48 (CET) </div> == <span lang="de" dir="ltr"> Anstehendes Treffen des Sprachkomitees (28. Februar, 14:00 UTC) und Newsletter</span> == <div lang="de" dir="ltr"> <section begin="message"/> Hallo allerseits! [[File:WP20Symbols WIKI INCUBATOR.svg|right|frameless|150x150px|alt=Ein Bild, das mehrere Sprachen symbolisiert]] Wir freuen uns, ankündigen zu können, dass das nächste '''Treffen des Sprachkomitees''' bald stattfindet, am '''28. Februar um 14:00 UTC'''! Wenn du teilnehmen möchtest, melde dich einfach über die '''[[mw:Wikimedia_Language_and_Product_Localization/Community_meetings#28_February_2025|Wikiseite]]''' an. Dies ist ein von den Teilnehmenden angetriebenes Treffen, bei dem wir Neuigkeiten zu sprachbezogenen Projekten austauschen, über technische Herausforderungen in Sprach-Wikis sprechen und gemeinsam an Lösungen arbeiten. In unserem letzten Treffen haben wir Themen wie die Entwicklung von Sprachtastaturen, den Start der Mòoré-Wikipedia und Neuigkeiten aus den Veranstaltungen zur Sprachunterstützung auf der Wiki Indaba behandelt. '''Du hast ein Thema, das du einbringen möchtest?''' Egal, ob es um technische Neuigkeiten aus deinem Projekt, eine Herausforderung, bei der du Hilfe suchst, oder eine Anfrage um Simultanübersetzung geht, wir freuen uns, von dir zu hören! Du kannst gerne '''auf diese Nachricht antworten''' oder Tagesordnungspunkte zu '''[[etherpad:p/language-community-meeting-feb-2025|diesem Dokument]]''' hinzufügen. Außerdem wollten wir darauf hinweisen, dass die sechste Ausgabe des Newsletters „Sprache und Internationalisierung“ (Januar 2025) verfügbar ist: [[:mw:Special:MyLanguage/Wikimedia Language and Product Localization/Newsletter/2025/January|Wikimedia Language and Product Localization/Newsletter/2025/January]]. Dieser Newsletter enthält Informationen aus dem Quartal Oktober-Dezember 2024 über die Entwicklung neuer Funktionen, Verbesserungen verschiedener sprachbezogener technischer Projekte und Unterstützungsmaßnahmen, Details über Communitytreffen und Ideen für das Beitragen zu Projekten. Um auf dem Laufenden zu bleiben, kannst du den Newsletter über seine Wiki-Seite abonnieren: [[:mw:Wikimedia Language and Product Localization/Newsletter|Wikimedia Language and Product Localization/Newsletter]]. Wir freuen uns auf deine Ideen und deine Teilnahme am Treffen des Sprachkomitees, bis bald! <section end="message"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 22. februara 2025, 09:29 (CET) == CEE Hub Microgrant Programme - 2025 round == '''[[:m:Wikimedia CEE Hub/Microgrants|CEE Hub Microgrant programme]]''' is open for submissions from the communities across Central and Eastern Europe (as well as Central Asia, and Farsi contributors that live in these regions). The CEE Hub Microgrant programme will fund projects ranging from 50 to 700 EUR. Please read the criteria and other details with the programme. '''[https://docs.google.com/forms/d/e/1FAIpQLSdscTZ9EPNjHhU0r7hUHNwntX34Wrk8ieiHemk_clB9VI3PfQ/viewform Application form]''' is accessible on the Meta page where you will need to answer a few simple questions. You can find a list of the applications for the programme from 2024 [[:m:Wikimedia CEE Hub/Microgrants/Applications 2024|on this page]], so you will get a sense of what other communities asked for funds. If you have any questions, please let us know ([[:m:Wikimedia CEE Hub/Communication|contact us]]). We are waiting for your submissions! --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 24. februara 2025, 14:35 (CET) == Universal Code of Conduct annual review: proposed changes are available for comment == <div lang="en" dir="ltr" class="mw-content-ltr"> My apologies for writing in English. {{Int:Please-translate}}. I am writing to you to let you know that [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/Proposed_Changes|proposed changes]] to the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|Universal Code of Conduct (UCoC) Enforcement Guidelines]] and [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|Universal Code of Conduct Coordinating Committee (U4C) Charter]] are open for review. '''[[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/Proposed_Changes|You can provide feedback on suggested changes]]''' through the [[d:Q614092|end of day]] on Tuesday, 18 March 2025. This is the second step in the annual review process, the final step will be community voting on the proposed changes. [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review|Read more information and find relevant links about the process on the UCoC annual review page on Meta]]. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|you may review the U4C Charter]]. Please share this information with other members in your community wherever else might be appropriate. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] 7. měrca 2025, 19:51 (CET) </div> == An improved dashboard for the Content Translation tool == <div lang="en" dir="ltr"> {{Int:hello}} Wikipedians, Apologies as this message is not in your language, {{Int:please-translate}}. The [[mediawikiwiki:Special:MyLanguage/Wikimedia_Language_and_Product_Localization|Language and Product Localization team]] has improved the [https://test.wikipedia.org/w/index.php?title=Special:ContentTranslation&filter-type=automatic&filter-id=previous-edits&active-list=suggestions&from=en&to=es Content Translation dashboard] to create a consistent experience for all contributors using mobile and desktop devices. The improved translation dashboard allows all logged-in users of the tool to enjoy a consistent experience regardless of their type of device. With a harmonized experience, logged-in desktop users now have access to the capabilities shown in the image below. [[file:Content_Translation_new-dashboard.png|alt=|center|thumb|576x576px|Notice that in this screenshot, the new dashboard allows: Users to adjust suggestions with the "For you" and "...More" buttons to select general topics or community-created collections (like the example of Climate topic).  Also, users can use translation to create new articles (as before) and expand existing articles section by section. You can see how suggestions are provided in the new dashboard  in two groups ("Create new pages" and "Expand with new sections")-one for each activity.]] [[File:Content_Translation_dashboard_on_desktop.png|alt=|center|thumb|577x577px|In the current dashboard, you will notice that you can't adjust suggestions to select topics or community-created collections. Also, you can't expand on existing articles by translating new sections.]] We will implement [[mw:Special:MyLanguage/Content translation#Improved translation experience|this improvement]] on your wiki '''on Monday, March 17th, 2025''' and remove the current dashboard '''by May 2025'''. Please reach out with any questions concerning the dashboard in this thread. Thank you! On behalf of the Language and Product Localization team. </div> <bdi lang="en" dir="ltr">[[User:UOzurumba (WMF)|UOzurumba (WMF)]]</bdi> 13. měrca 2025, 03:55 (CET) == <span lang="de" dir="ltr">Euer Wiki wird bald im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2025-03-19|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2025-03-19T14:00|en}} {{#time:H:i e|2025-03-19T14:00}}]''' (15:00 MESZ) beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. Auf allen Wikis wird 30 Minuten im Voraus ein Banner erscheinen. Dieses Banner bleibt bis zum Ende des Vorgangs sichtbar. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:j. F Y|2025-03-19|de}} wird bis zu eine Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> <bdi lang="en" dir="ltr">[[User:MediaWiki message delivery|MediaWiki message delivery]]</bdi> 15. měrca 2025, 00:15 (CET) == Final proposed modifications to the Universal Code of Conduct Enforcement Guidelines and U4C Charter now posted == <div lang="en" dir="ltr" class="mw-content-ltr"> The proposed modifications to the [[foundation:Special:MyLanguage/Policy:Universal_Code_of_Conduct/Enforcement_guidelines|Universal Code of Conduct Enforcement Guidelines]] and the U4C Charter [[m:Universal_Code_of_Conduct/Annual_review/2025/Proposed_Changes|are now on Meta-wiki for community notice]] in advance of the voting period. This final draft was developed from the previous two rounds of community review. Community members will be able to vote on these modifications starting on 17 April 2025. The vote will close on 1 May 2025, and results will be announced no later than 12 May 2025. The U4C election period, starting with a call for candidates, will open immediately following the announcement of the review results. More information will be posted on [[m:Special:MyLanguage//Universal_Code_of_Conduct/Coordinating_Committee/Election|the wiki page for the election]] soon. Please be advised that this process will require more messages to be sent here over the next two months. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|review the U4C Charter]]. Please share this message with members of your community so they can participate as well. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 4. apryla 2025, 04:04 (CEST) </div> == Be part of the next CEE Catch Up about Global Trends == Hi everyone, We want to announce the ninth '''[[:m:Wikimedia CEE Hub/Catch up|CEE Catch Up]]''' session, which will be dedicated to the Foundation Annual Planning Workshop focused on [[diffblog:2025/03/04/global-trends-2025/|'''global trends that are affecting our movement''']]. The session will take place on 23<sup>rd</sup> of April 2025, 18:00-19:00 CEST (check your local time [https://zonestamp.toolforge.org/1745424000 here]). Together (the CEE Communities and the Wikimedia Foundation staff) we will discuss the trends related to our projects, our readers and editors. We will explore how those trends show up in the CEE context and discuss what our projects need to address those trends, and how we can support them. You will also have the opportunity to ask questions to the Wikimedia Foundation staff about the work being planned as part of the annual plan that runs from July 2025 to June 2026. '''<u>''[[Wikimedia CEE Hub/Catch up|Join us at the Next CEE Catch up]]!''</u>''' --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 14. apryla 2025, 19:19 (CEST) (on behalf of the CEE Catch Up team) == Ukraine's Cultural Diplomacy Month 2025: Invitation == <div lang="en" dir="ltr"> [[File:UCDM 2025 general.png|180px|right]] {{int:please-translate}} Hello, dear Wikipedians!<br/> [[:m:Special:MyLanguage/Wikimedia Ukraine|Wikimedia Ukraine]], in cooperation with the [[:en:Ministry of Foreign Affairs of Ukraine|MFA of Ukraine]] and [[:en:Ukrainian Institute|Ukrainian Institute]], has launched the fifth edition of writing challenge "'''[[:m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2025|Ukraine's Cultural Diplomacy Month]]'''", which lasts from '''14th April''' until '''16th May 2025'''. The campaign is dedicated to famous Ukrainian artists of cinema, music, literature, architecture, design, and cultural phenomena of Ukraine that are now part of world heritage. We accept contributions in every language! The most active contesters will receive prizes. If you are interested in coordinating long-term community engagement for the campaign and becoming a local ambassador, we would love to hear from you! Please let us know your interest. <br/> We invite you to take part and help us improve the coverage of Ukrainian culture on Wikipedia in your language! Also, we plan to set up a [[:m:CentralNotice/Request/Ukraine's Cultural Diplomacy Month 2025|banner]] to notify users of the possibility to participate in such a challenge! [[:m:User:OlesiaLukaniuk (WMUA)|OlesiaLukaniuk (WMUA)]] ([[:m:User talk:OlesiaLukaniuk (WMUA)|talk]]) </div> 16. apryla 2025, 18:11 (CEST) == Vote now on the revised UCoC Enforcement Guidelines and U4C Charter == <div lang="en" dir="ltr" class="mw-content-ltr"> The voting period for the revisions to the Universal Code of Conduct Enforcement Guidelines ("UCoC EG") and the UCoC's Coordinating Committee Charter is open now through the end of 1 May (UTC) ([https://zonestamp.toolforge.org/1746162000 find in your time zone]). [[m:Special:MyLanguage/Universal_Code_of_Conduct/Annual_review/2025/Voter_information|Read the information on how to participate and read over the proposal before voting]] on the UCoC page on Meta-wiki. The [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]] is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review of the EG and Charter was planned and implemented by the U4C. Further information will be provided in the coming months about the review of the UCoC itself. For more information and the responsibilities of the U4C, you may [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Charter|review the U4C Charter]]. Please share this message with members of your community so they can participate as well. In cooperation with the U4C -- [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) 17. apryla 2025, 02:34 (CEST) </div> == Sub-referencing: User testing == <div lang="en" dir="ltr"> [[File:Sub-referencing reuse visual.png|400px|right]] <small>''Apologies for writing in English, please help us by providing a translation below''</small> Hi I’m Johannes from [[:m:Wikimedia Deutschland|Wikimedia Deutschland]]'s [[:m:WMDE Technical Wishes|Technical Wishes team]]. We are making great strides with the new [[:m:WMDE Technical Wishes/Sub-referencing|sub-referencing feature]] and we’d love to invite you to take part in two activities to help us move this work further: #'''Try it out and share your feedback''' #:[[:m:WMDE Technical Wishes/Sub-referencing# Test the prototype|Please try]] the updated ''wikitext'' feature [https://en.wikipedia.beta.wmflabs.org/wiki/Sub-referencing on the beta wiki] and let us know what you think, either [[:m:Talk:WMDE Technical Wishes/Sub-referencing|on our talk page]] or by [https://greatquestion.co/wikimediadeutschland/talktotechwish booking a call] with our UX researcher. #'''Get a sneak peak and help shape the ''Visual Editor'' user designs''' #:Help us test the new design prototypes by participating in user sessions – [https://greatquestion.co/wikimediadeutschland/gxk0taud/apply sign up here to receive an invite]. We're especially hoping to speak with people from underrepresented and diverse groups. If that's you, please consider signing up! No prior or extensive editing experience is required. User sessions will start ''May 14th''. We plan to bring this feature to Wikimedia wikis later this year. We’ll reach out to wikis for piloting in time for deployments. Creators and maintainers of reference-related tools and templates will be contacted beforehand as well. Thank you very much for your support and encouragement so far in helping bring this feature to life! </div> <bdi lang="en" dir="ltr">[[User:Johannes Richter (WMDE)|Johannes Richter (WMDE)]] ([[User talk:Johannes Richter (WMDE)|talk]])</bdi> 28. apryla 2025, 17:03 (CEST) == <span lang="de" dir="ltr">Abstimmung über die vorgeschlagenen Änderungen der UCoC-Durchsetzungsrichtlinien und der U4C-Charta</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Die Abstimmungsfrist für die Überarbeitung der Leitlinien zur Durchsetzung des Universellen Verhaltenskodex und der U4C-Charta endet am 1. Mai 2025 um 23:59 UTC ([https://zonestamp.toolforge.org/1746162000 in Ihrer Zeitzone]). [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2025/Voter information|Lesen Sie die Informationen zur Teilnahme und lesen Sie den Vorschlag vor der Abstimmung]] auf der UCoC-Seite im Meta-wiki. Das [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee (U4C)]] ist eine globale Gruppe, die sich für eine gerechte und einheitliche Umsetzung des UCoC einsetzt. Diese jährliche Überprüfung wurde vom U4C geplant und durchgeführt. Weitere Informationen und die Aufgaben des U4C finden Sie in der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|review the U4C Charter]]. Bitte teilen Sie diese Botschaft mit Mitgliedern Ihrer Community in Ihrer Sprache, sofern dies angemessen ist, damit auch sie teilnehmen können. In Zusammenarbeit mit der U4C -- <section end="announcement-content" /> </div> <div lang="en" dir="ltr" class="mw-content-ltr"> [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 29. apryla 2025, 05:41 (CEST)</div> == We will be enabling the new Charts extension on your wiki soon! == ''(Apologies for posting in English)'' Hi all! We have good news to share regarding the ongoing problem with graphs and charts affecting all wikis that use them. As you probably know, the [[:mw:Special:MyLanguage/Extension:Graph|old Graph extension]] was disabled in 2023 [[listarchive:list/wikitech-l@lists.wikimedia.org/thread/EWL4AGBEZEDMNNFTM4FRD4MHOU3CVESO/|due to security reasons]]. We’ve worked in these two years to find a solution that could replace the old extension, and provide a safer and better solution to users who wanted to showcase graphs and charts in their articles. We therefore developed the [[:mw:Special:MyLanguage/Extension:Chart|Charts extension]], which will be replacing the old Graph extension and potentially also the [[:mw:Extension:EasyTimeline|EasyTimeline extension]]. After successfully deploying the extension on Italian, Swedish, and Hebrew Wikipedia, as well as on MediaWiki.org, as part of a pilot phase, we are now happy to announce that we are moving forward with the next phase of deployment, which will also include your wiki. The deployment will happen in batches, and will start from '''May 6'''. Please, consult [[:mw:Special:MyLanguage/Extension:Chart/Project#Deployment Timeline|our page on MediaWiki.org]] to discover when the new Charts extension will be deployed on your wiki. You can also [[:mw:Special:MyLanguage/Extension:Chart|consult the documentation]] about the extension on MediaWiki.org. If you have questions, need clarifications, or just want to express your opinion about it, please refer to the [[:mw:Special:MyLanguage/Extension_talk:Chart/Project|project’s talk page on Mediawiki.org]], or ping me directly under this thread. If you encounter issues using Charts once it gets enabled on your wiki, please report it on the [[:mw:Extension_talk:Chart/Project|talk page]] or at [[phab:tag/charts|Phabricator]]. Thank you in advance! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 6. meje 2025, 17:08 (CEST) == <span lang="en" dir="ltr">Call for Candidates for the Universal Code of Conduct Coordinating Committee (U4C)</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> The results of voting on the Universal Code of Conduct Enforcement Guidelines and Universal Code of Conduct Coordinating Committee (U4C) Charter is [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2025#Results|available on Meta-wiki]]. You may now [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2025/Candidates|submit your candidacy to serve on the U4C]] through 29 May 2025 at 12:00 UTC. Information about [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2025|eligibility, process, and the timeline are on Meta-wiki]]. Voting on candidates will open on 1 June 2025 and run for two weeks, closing on 15 June 2025 at 12:00 UTC. If you have any questions, you can ask on [[m:Talk:Universal Code of Conduct/Coordinating Committee/Election/2025|the discussion page for the election]]. -- in cooperation with the U4C, </div><section end="announcement-content" /> </div> <bdi lang="en" dir="ltr">[[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|diskusija]])</bdi> 16. meje 2025, 00:07 (CEST) == RfC ongoing regarding Abstract Wikipedia (and your project) == <div lang="en" dir="ltr" class="mw-content-ltr"> ''(Apologies for posting in English, if this is not your first language)'' Hello all! We opened a discussion on Meta about a very delicate issue for the development of [[:m:Special:MyLanguage/Abstract Wikipedia|Abstract Wikipedia]]: where to store the abstract content that will be developed through functions from Wikifunctions and data from Wikidata. Since some of the hypothesis involve your project, we wanted to hear your thoughts too. We want to make the decision process clear: we do not yet know which option we want to use, which is why we are consulting here. We will take the arguments from the Wikimedia communities into account, and we want to consult with the different communities and hear arguments that will help us with the decision. The decision will be made and communicated after the consultation period by the Foundation. You can read the various hypothesis and have your say at [[:m:Abstract Wikipedia/Location of Abstract Content|Abstract Wikipedia/Location of Abstract Content]]. Thank you in advance! -- [[User:Sannita (WMF)|Sannita (WMF)]] ([[User talk:Sannita (WMF)|<span class="signature-talk">{{int:Talkpagelinktext}}</span>]]) 22. meje 2025, 17:26 (CEST) </div> == <span lang="de" dir="ltr">Auswahlverfahren 2025 für das Kuratorium der Wikimedia Foundation und Bitte um Fragen</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> :''[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Selection announcement|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Selection announcement}}&language=&action=page&filter= {{int:please-translate}}]'' Hallo allerseits! In diesem Jahr wird das Mandat zweier (2) von der Community und den Affiliates gewählten Trustees im Kuratorium der Wikimedia Foundation enden [1]. Das Kuratorium lädt das gesamte Movement dazu ein, am diesjährigen Auswahlverfahren teilzunehmen und über die zwei offenen Sitze abzustimmen. Das Wahlkomitee wird dieses Verfahren mit Unterstützung durch Angestellte der Foundation beaufsichtigen [2]. Das Governance-Komitee, bestehend aus Trustees, die im Auswahlprozess 2025 für Community und Affiliates nicht kandidieren (Raju Narisetti, Shani Evenstein Sigalov, Lorenzo Losa, Kathy Collins, Victoria Doronina und Esra’a Al Shafei) [3], hat die Aufgabe, den Auswahlprozess 2025 für das Kuratorium zu beobachten und das Kuratorium laufend darüber zu informieren. Mehr zur Rolle des Wahlkomitees, des Kuratoriums und der Angestellten ist hier zu finden [4]. Das sind die wichtigsten geplanten Daten: * 22. Mai – 5. Juni: Ankündigung (dieser Beitrag) und Fragephase [6] * 17. Juni – 1. Juli 2025: Bewerbungsphase * Juli 2025: Wenn es mehr als 10 Kandidaturen gibt, stimmen die Affiliates über eine Shortlist ab [5] * August 2025: Kampagnenphase * August–September 2025: Zweiwöchige Community-Abstimmungsphase * Oktober–November 2025: Hintergrundüberprüfung ausgewählter Kandidierender * Kuratoriumssitzung im Dezember 2025: Amtseinführung der neuen Trustees Erfahre mehr über das Auswahlverfahren 2025 – einschließlich des detaillierten Zeitplans, des Kandidaturverfahrens, der Kampagnenregeln und der Wahlkriterien – auf dieser Seite im Meta-Wiki [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2025|[link]]]. '''Fragephase''' In jedem Auswahlverfahren hat die Community die Möglichkeit, den für das Kuratorium Kandidierenden Fragen zur Beantwortung vorzulegen. Das Wahlkomitee wählt aus der von der Community zusammengestellten Liste Fragen aus, die Kandidierende beantworten müssen. Kandidierende müssen alle Pflichtfragen beantworten, um zur Wahl antreten zu können, andernfalls wird die Kandidatur ausgeschlossen. In diesem Jahr wird das Wahlkomitee fünf Fragen an die Kandidierenden auswählen. Die ausgewählten Fragen können Communityvorschläge kombinieren, wenn sie ähnlich sind oder zusammenhängen. [[m:Special:MyLanguage/Wikimedia_Foundation_elections/2025/Questions_for_candidates|[link]]] '''Freiwillige Wahlhelfer:innen''' Du kannst auch als freiwillige:r Wahlhelfer:in am Auswahlverfahren 2025 mitwirken. Freiwillige Wahlhelfer:innen bilden die Schnittstelle zwischen dem Wahlkomitee und ihrer jeweiligen Community. Sie helfen dabei, sicherzustellen, dass ihre Community vertreten ist, und diese zu mobilisieren. Erfahre auf dieser Seite im Meta-Wiki [[m:Wikimedia_Foundation_elections/2025/Election_volunteers|[link]]] mehr über das Programm und darüber, wie du dich beteiligen kannst. Danke! [1] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2022/Results [2] https://foundation.wikimedia.org/wiki/Committee:Elections_Committee_Charter [3] https://foundation.wikimedia.org/wiki/Resolution:Committee_Membership,_December_2024 [4] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections_committee/Roles [5] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2025/FAQ [6] https://meta.wikimedia.org/wiki/Wikimedia_Foundation_elections/2025/Questions_for_candidates Viele Grüße Victoria Doronina Kontaktperson des Kuratoriums für das Wahlkomitee Governance-Komitee<section end="announcement-content" /> </div> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 28. meje 2025, 05:07 (CEST) == <span lang="en" dir="ltr"> Upcoming Deployment of the CampaignEvents Extension</span> == <div lang="en" dir="ltr"> <section begin="message"/> Hello everyone, ''(Apologies for posting in English if English is not your first language. Please help translate to your language.)'' The Campaigns Product Team is planning a global deployment of the '''[[:mw:Help:Extension:CampaignEvents|CampaignEvents extension]]''' to all Wikipedias, including this wiki, during the '''week of June 23rd'''. This extension is designed to help organizers plan and manage events, WikiProjects, and other on-wiki collaborations - and to make these efforts more discoverable. The three main features of this extension are: * '''[[:m:Event_Center/Registration|Event Registration]]''': A simple way to sign up for events on the wiki. * '''[[:m:CampaignEvents/Collaboration_list|Collaboration List]]''': A global list of events and a local list of WikiProjects, accessible at '''[[:m:Special:AllEvents|Special:AllEvents]]'''. * '''[[:m:Campaigns/Foundation_Product_Team/Invitation_list|Invitation Lists]]''': A tool to help organizers find editors who might want to join, based on their past contributions. '''Note''': The extension comes with a new user right called '''"Event Organizer"''', which will be managed by administrators on this wiki. Organizer tools like Event Registration and Invitation Lists will only work if someone is granted this right. The Collaboration List is available to everyone immediately after deployment. The extension is already live on several wikis, including '''Meta, Wikidata, English Wikipedia''', and more ( [[m:CampaignEvents/Deployment_status#Current_Deployment_Status_for_CampaignEvents_extension| See the full deployment list]]) If you have any questions, concerns, or feedback, please feel free to share them on the [[m:Talk:CampaignEvents| extension talkpage]]. We’d love to hear from you before the rollout. Thank you! <section end="message"/> </div> <bdi lang="en" dir="ltr">[[User:Udehb-WMF|Udehb-WMF]] ([[User talk:Udehb-WMF|diskusija]]) 29. meje 2025, 18:47 (CEST)</bdi> == Vote now in the 2025 U4C Election == <div lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{Int:Please-translate}} Eligible voters are asked to participate in the 2025 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2025|2025 Election information page]]. The vote closes on 17 June 2025 at [https://zonestamp.toolforge.org/1750161600 12:00 UTC]. Please vote if your account is eligible. Results will be available by 1 July 2025. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 14. junija 2025, 01:00 (CEST) </div> == <span lang="de" dir="ltr">Kuratorium der Wikimedia Foundation 2025 – Aufruf zur Kandidatur</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> :''<div class="plainlinks">[[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Announcement/Call for candidates|{{int:interlanguage-link-mul}}]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Wikimedia Foundation elections/2025/Announcement/Call for candidates}}&language=&action=page&filter= {{int:please-translate}}]</div> Hallo allerseits! Die [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|Kandidaturphase des Auswahlverfahrens für das Kuratorium der Wikimedia Foundation 2025 hat begonnen]] – sie läuft vom 17. Juni bis zum 2. Juli 2025 um 11:59 UTC [1]. Das Kuratorium beaufsichtigt die Arbeit der Wikimedia Foundation und alle Mitglieder des Kuratoriums (Trustees) haben eine dreijährige Amtszeit [2]. Es handelt sich um eine ehrenamtliche Tätigkeit. Dieses Jahr wird die Wikimedia-Community von Ende August bis September 2025 über zwei (2) Sitze im Kuratorium der Foundation abstimmen. Bist du möglicherweise ein:e gute:r Kandidat:in - oder kennst du jemanden, der gut ins Kuratorium passen würde? [3] Du kannst auf [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidate application|dieser Seite im Meta-Wiki]] mehr darüber erfahren, worauf es bei einer Kandidatur für eine derartige Leitungsfunktion ankommt und wie du deine Kandidatur einreichst, oder jemand anderen dazu ermutigen, diesmal zu kandidieren. Beste Grüße Abhishek Suryawanshi<br /> Vorsitzender des Wahlkomitees Für das Wahlkomitee und das Governance-Komitee [1] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Call_for_candidates [2] https://foundation.wikimedia.org/wiki/Legal:Bylaws#(B)_Term. [3] https://meta.wikimedia.org/wiki/Special:MyLanguage/Wikimedia_Foundation_elections/2025/Resources_for_candidates<section end="announcement-content" /> </div> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 17. junija 2025, 19:43 (CEST) == <span lang="de" dir="ltr">Rückmeldungen zu Wikimedia-Projekten</span> == <div lang="de" dir="ltr"> <section begin="message"/> Liebe Wikimedia-Community! [[m:Wikimedia Foundation Community Affairs Committee|Das Komitee für Community-Angelegenheiten (CAC)]] des Kuratoriums der Wikimedia Foundation hat [[m:Wikimedia Foundation Community Affairs Committee/Sister Projects Task Force|die Taskforce für Schwesterprojekte (SPTF)]] beauftragt, ein Verfahren zur Bewertung des Lebenszyklus von Schwesterprojekten – [[m:Wikimedia projects|Wikiprojekten, die von der Wikimedia Foundation (WMF) unterstützt werden]] – zu aktualisieren und umzusetzen. Eine Vision relevanten, zugänglichen und wirkungsvollen freien Wissens hat die Wikimedia-Bewegung immer angeleitet. Da sich das Ökosystem der Wikimedia-Projekte stetig weiterentwickelt, ist es entscheidend, dass wir die bestehenden Projekte regelmäßig überprüfen, um sicherzustellen, dass sie noch immer unseren Zielen und den Kapazitäten der Community entsprechen. Einige Projekte können möglicherweise – trotz der besten Absichten – ihren ursprünglichen Zweck nicht mehr effektiv erfüllen. '''Die Überprüfung solcher Projekte bedeutet nicht, dass wir aufgeben – es geht darum, mit den gemeinsamen Ressourcen verantwortungsvoll umzugehen'''. Die Zeit der Freiwilligen, die Unterstützung durch Angestellte, die Infrastruktur und die Aufmerksamkeit der Community sind endlich, und die nichttechnischen Kosten steigen erheblich, da unser Ökosystem in ein anderes Internetzeitalter eingetreten ist als das, in dem wir gegründet wurden. Die Unterstützung inaktiver Projekte oder von Projekten, die unseren Ambitionen nicht gerecht werden konnten, kann diese Ressourcen ungewollt Bereichen mit größerer potenzieller Wirkung entziehen. Außerdem birgt die Weiterführung von Projekten, die nicht mehr die Qualität und Zuverlässigkeit des Wikimedia-Namens widerspiegeln, ein Reputationsrisiko. Ein verlassenes oder weniger zuverlässiges Projekt beeinträchtigt das Vertrauen in die Wikimedia-Bewegung. Schließlich '''kann es schwieriger werden, neue Projekte zu starten, wenn man Projekte, die nicht mehr funktionieren, nicht auslaufen lässt oder grundlegend erneuert'''. Wenn sich die Community an jede Entscheidung der Vergangenheit gebunden fühlt – egal wie veraltet – riskieren wir Stagnation. Ein gesundes Ökosystem muss Raum für Weiterentwicklung, Anpassung und – bei Bedarf – auch Schließung bieten. Wenn wir die Erwartung schaffen, dass jedes Projekt ewig existieren muss, schränken wir unsere Fähigkeit, zu experimentieren und zu erneuern, empfindlich ein. Aus diesem Grund hat die SPTF zwei Anfragen zum Lebenszyklus der Schwesterprojekte bearbeitet, um den Überprüfungsprozess durchzugehen und zu illustrieren. Wir haben Wikispore als Fallstudie für die mögliche Eröffnung eines neuen Schwesterprojekts und Wikinews als Fallstudie zur Überprüfung eines bestehenden Projekts gewählt. Die vorläufigen Ergebnisse wurden auf der Sitzung des CAC am 11. September 2024 diskutiert und das CAC empfahl eine Communitydiskussion zu beiden Vorschlägen. === Wikispore === Der Antrag, [[m:Wikispore|Wikispore als neues Schwesterprojekt in Betracht zu ziehen]], wurde 2019 eingereicht. SPTF beschloss, diese Anfrage gründlicher zu überprüfen, da Wikispore sich nicht – wie die meisten vorgeschlagenen Schwesterprojekte – auf ein bestimmtes Thema konzentriert, sondern das Potenzial hat, mehrere neue Schwesterprojekte zu fördern. Nach sorgfältiger Überlegung hat die SPTF beschlossen, Wikispore '''nicht als Wikimedia-Schwesterprojekt zu empfehlen'''. Die derzeitige Situation ermöglicht angesichts des aktuellen Aktivitätsniveaus '''mehr Flexibilität''' und Experimentierung, während die WMF die zentrale Infrastruktur bereitstellt. Wir sehen das Potenzial der Initiative und fragen die Community um Ideen dazu, was ein ausreichendes Maß an Aktivität darstellen würde, um den Status von Wikispore in Zukunft zu überdenken. Im Rahmen des Verfahrens haben wir die Entscheidung der Wikispore-Community mitgeteilt und einen führenden Vertreter, Pharos, zu einem SPTF-Treffen eingeladen. Momentan bitten wir insbesondere um Rückmeldungen zu messbaren Kriterien, die die Bereitschaft des Projekts anzeigen, wie die Anzahl der Beiträge, den inhaltlichen Umfang und die nachhaltige Unterstützung der Community. Dies würde die Kriterien für die Eröffnung eines neuen Schwesterprojekts, einschließlich einer möglichen erneuten Bewerbung von Wikispore, verdeutlichen. Die Zahlen werden jedoch immer ein Leitfaden sein, denn jede Zahl kann manipuliert werden. === Wikinews === Von den bestehenden Schwesterprojekten haben wir uns entschieden, Wikinews zu überprüfen, weil wir für dieses Projekt die meisten Bedenken wahrgenommen haben. Seit die SPTF 2023 gegründet wurde, haben ihre Mitglieder während Konferenzen und Communitygesprächen nach den Meinungen der Community über Schwesterprojekte gefragt, die den Erwartungen der Wikimedia-Bewegung nicht gerecht wurden.[https://commons.wikimedia.org/wiki/File:WCNA_2024._Sister_Projects_-_opening%3F_closing%3F_merging%3F_splitting%3F.pdf <nowiki>[1]</nowiki>][https://meta.wikimedia.org/wiki/Wikimedia_Foundation_Community_Affairs_Committee/Sister_Projects_Task_Force#Wikimania_2023_session_%22Sister_Projects:_past,_present_and_the_glorious_future%22 <nowiki>[2]</nowiki>][https://meta.wikimedia.org/wiki/WikiConvention_francophone/2024/Programme/Quelle_proc%C3%A9dure_pour_ouvrir_ou_fermer_un_projet_%3F <nowiki>[3]</nowiki>] Wikinews führte die Liste an, auch weil Personen aus mehreren Sprachcommunitys das Projekt vorgeschlagen hatten. Außerdem war es nach den meisten Maßstäben das am wenigsten aktive Schwesterprojekt sowie jenes mit dem größten Rückgang an Aktivität im Laufe der Jahre. Auch wenn das Sprachkomitee regelmäßig Sprachversionen von Schwesterprojekten in kleinen Sprachen eröffnet oder schließt, gab es noch nie einen gültigen Antrag, Wikipedia in großen Sprachen oder ein Projekt auf Englisch zu schließen. Anders Wikinews, für das es einen Antrag gab, die englischsprachige Version zu schließen, der länger diskutiert wurde, aber zu keinen weiteren Schritten führte,[https://meta.wikimedia.org/wiki/Proposals_for_closing_projects/Closure_of_English_Wikinews <nowiki>[4]</nowiki>][https://meta.wikimedia.org/wiki/WikiConvention_francophone/2024/Programme/Quelle_proc%C3%A9dure_pour_ouvrir_ou_fermer_un_projet_%3F <nowiki>[5]</nowiki>, siehe Abschnitt 5] sowie einen Antragsentwurf für die Schließung sämtlicher Sprachversionen[https://meta.wikimedia.org/wiki/Talk:Proposals_for_closing_projects/Archive_2#Close_Wikinews_completely,_all_languages? <nowiki>[6]</nowiki>]. [[:c:File:Sister Projects Taskforce Wikinews review 2024.pdf|Die von WMF-Mitarbeitenden zusammengestellten Metriken]] untermauern die Bedenken der Community bezüglich Wikinews. Auf Grundlage dieses Berichts empfiehlt die SPTF eine Neubewertung von Wikinews durch die Community. Wir erkennen, dass das aktuelle Aktivitätsniveau das niedrigste der bestehenden Schwesterprojekte ist. Die SPTF empfiehlt außerdem, die Eröffnung neuer Sprachversionen während der Beratungsphase auszusetzen. SPTF legt diese Analyse zur Diskussion vor und begrüßt Diskussionen über alternative Ergebnisse, einschließlich potenzieller Umstrukturierungen oder Einbindungen in andere Wikimedia-Initiativen. Die bisher genannten '''Optionen''' (die nur auf Sprachversionen mit geringer Aktivität oder auf alle Sprachversionen angewendet werden können) sind unter anderem: * Restrukturierung der Funktionsweise von Wikinews und seiner Verknüpfung mit anderen Initiativen zu aktuellen Ereignissen in den Projekten, * Verschiebung der Wikinews-Inhalte in die zugehörige Wikipedia-Sprachversion, möglicherweise in einen neuen Namensraum, * Verschiebung der Inhalte in externe Projekte mit kompatiblen Lizenzen, * Archivierung der Wikinews-Projekte. Deine Ideen und Perspektiven sind für die Gestaltung der Zukunft dieser Projekte von unschätzbarem Wert. Wir laden alle interessierten Communitymitglieder ein, ihre Gedanken auf den entsprechenden Diskussionsseiten oder über andere vorgesehene Kanäle zu teilen. <span id="Feedback_and_next_steps"></span> === Rückmeldungen und nächste Schritte === Wir wären dankbar, wenn du an einem Gespräch über die Zukunft dieser Projekte und den Überprüfungsprozess teilnehmen möchtest. Wir erstellen zwei verschiedene Projektseiten: [[m:Public consultation about Wikispore|Public consultation about Wikispore]] und [[m:Public consultation about Wikinews|Public consultation about Wikinews]]. Bitte nimm zwischen 27. Juni und 27 Juli. teil; anschließend werden wir die Diskussion für die weiteren Schritte zusammenfassen. Du kannst in deiner eigenen Sprache schreiben. Ich werde außerdem am Mittwoch, den 16. Juli um 11:00 UTC und am Donnerstag, den 17. Juli um 17:00 UTC eine Community-Videokonferenz veranstalten und während der Wikimania für weitere Gespräche zur Verfügung stehen. <section end="message"/> </div> -- [[User:Victoria|Victoria]] on behalf of the Sister Project Task Force, 27. junija 2025, 22:56 (CEST) == Wikidata Item and Property labels soon displayed in Wiki Watchlist/Recent Changes == ''(Apologies for posting in English, you can help by translating into your language)'' Hello everyone, the [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Resolve_Labels|Wikidata For Wikimedia Projects]] team is excited to announce an upcoming change in how Wikidata edit changelogs are displayed in your [[Special:Watchlist|Watchlists]] and [[Special:RecentChanges|Recent Changes]] lists. If an edit is made on Wikidata that affects a page in another Wikimedia Project, the changelog will contain some information about the nature of the edit. This can include a QID (or Q-number), a PID (or P-number) and a value (which can be text, numbers, dates, or also QID or PID’s). Confused by these terms? See the [[d:Special:MyLanguage/Wikidata:Glossary|Wikidata:Glossary]] for further explanations. The upcoming change is scheduled for '''17.07.2025''', between '''1300 - 1500 UTC'''. The change will display the label (item name) alongside any QID or PIDs, as seen in the image below: [[File:Apr10 edit summary on Wikidata.png|An edit sum entry on Wikidata, labels display alongside their P- and Q-no.'s]] These changes will only be visible if you have Wikidata edits enabled in your User Preferences for Watchlists and Recent Changes, or have the active filter ‘Wikidata edits’ checkbox toggled on, directly on the Watchlist and Recent Changes pages. Your bot and gadget may be affected! There are thousands of bots, gadgets and user-scripts and whilst we have researched potential effects to many of them, we cannot guarantee there won’t be some that are broken or affected by this change. Further information and context about this change, including how your bot may be affected can be found on this [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Resolve_Labels|project task page]]. We welcome your questions and feedback, please write to us on this dedicated [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Resolve_Labels|Talk page]]. Thank you, - [[m:User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] on behalf of the Wikidata For Wikimedia Projects Team. [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 14. julija 2025, 14:45 (CEST) == <span lang="en" dir="ltr">Temporary accounts will be rolled out soon</span> == <div lang="en" dir="ltr"> <section begin="body"/> Hello, we are the Wikimedia Foundation [[mw:Special:MyLanguage/Product Safety and Integrity|Product Safety and Integrity]] team. We would like to announce that '''we plan to enable [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts|temporary accounts]] for this wiki in the week of September 1'''. Temporary accounts are successfully live on 30 wikis, including many large ones like German, Japanese, and French. The change they bring is especially relevant to logged-out editors, who this feature is designed to protect. But it is also relevant to community members like mentors, patrollers, and admins – anyone who reverts edits, blocks users, or otherwise interacts with logged-out editors as part of keeping the wikis safe and accurate. '''Why we are building temporary accounts''' Our wikis should be safer to edit by default for logged-out editors. Temporary accounts allow people to continue editing the wikis without creating an account, while avoiding publicly tying their edits to their IP address. We believe this is in the best interest of our logged-out editors, who make valuable contributions to the wikis and who may later create accounts and grow our community of editors, admins, and other roles. Even though the wikis do warn logged-out editors that their IP address will be associated with their edit, many people may not understand what an IP address is, or that it could be used to connect them to other information about them in ways they might not expect. Additionally, our moderation software and tools rely too heavily on network origin (IP addresses) to identify users and patterns of activity, especially as IP addresses themselves are becoming less stable as identifiers. Temporary accounts allow for more precise interactions with logged-out editors, including more precise blocks, and can help limit how often we unintentionally end up blocking good-faith users who use the same IP addresses as bad-faith users. '''How temporary accounts work''' [[File:Temporary account banner and empty talk page.png|thumb]] Any time a logged-out user publishes an edit on this wiki, a cookie will be set in this user's browser, and a temporary account tied with this cookie will be automatically created. This account's name will follow the pattern: <code dir=ltr>~2025-12345-67</code> (a tilde, current year, a number). On pages like Recent Changes or page history, this name will be displayed. The cookie will expire 90 days after its creation. As long as it exists, all edits made from this device will be attributed to this temporary account. It will be the same account even if the IP address changes, unless the user clears their cookies or uses a different device or web browser. A record of the IP address used at the time of each edit will be stored for 90 days after the edit. However, only some logged-in users will be able to see it. '''What does this mean for different groups of users?''' '''For logged-out editors''' * This increases privacy: currently, if you do not use a registered account to edit, then everybody can see the IP address for the edits you made, even after 90 days. That will no longer be possible on this wiki. * If you use a temporary account to edit from different locations in the last 90 days (for example at home and at a coffee shop), the edit history and the IP addresses for all those locations will now be recorded together, for the same temporary account. Users who [[foundation:Special:MyLanguage/Policy:Access_to_temporary_account_IP_addresses|meet the relevant requirements]] will be able to view this data. If this creates any personal security concerns for you, please contact talktohumanrights at wikimedia.org for advice. '''For community members interacting with logged-out editors''' * A temporary account is uniquely linked to a device. In comparison, an IP address can be shared with different devices and people (for example, different people at school or at work might have the same IP address). * Compared to the current situation, it will be safer to assume that a temporary user's talk page belongs to only one person, and messages left there will be read by them. As you can see in the screenshot, temporary account users will receive notifications. It will also be possible to thank them for their edits, ping them in discussions, and invite them to get more involved in the community. '''For users who use IP address data to moderate and maintain the wiki''' * '''For patrollers''' who track persistent abusers, investigate violations of policies, etc.: Users who [[foundation:Special:MyLanguage/Policy:Access_to_temporary_account_IP_addresses|meet the requirements]] will be able to reveal temporary users' IP addresses and all contributions made by temporary accounts from a specific IP address or range ([[Special:IPContributions]]). They will also have access to useful information about the IP addresses thanks to the [[mw:Special:MyLanguage/Trust and Safety Product/IP Info|IP Info]] feature. Many other pieces of software have been built or adjusted to work with temporary accounts, including AbuseFilter, global blocks, Global User Contributions, and more. (For information for volunteer developers on how to update the code of your tools – see the last part of the message.) * '''For admins blocking logged-out editors''': ** It will be possible to block many abusers by just blocking their temporary accounts. A blocked person won't be able to create new temporary accounts quickly if the admin selects the [[mw:Special:MyLanguage/Autoblock|autoblock]] option. ** It will still be possible to block an IP address or IP range. * Temporary accounts will not be retroactively applied to contributions made before the deployment. On Special:Contributions, you will be able to see existing IP user contributions, but not new contributions made by temporary accounts on that IP address. Instead, you should use Special:IPContributions for this. '''Our requests for you, and next steps''' * If you know of any tools, bots, gadgets etc. using data about IP addresses or being available for logged-out users, you may want to test if they work on [[testwiki:Main_Page|testwiki]] or [[test2wiki:Main_Page|test2wiki]]. If you are a volunteer developer, [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers|read our documentation for developers]], and in particular, the section on [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/For developers#How should I update my code?|how your code might need to be updated]]. * If you want to test the temporary account experience, for example just to check what it feels like, go to testwiki or test2wiki and edit without logging in. * Tell us if you know of any difficulties that need to be addressed. We will try to help, and if we are not able, we will consider the available options. * Look at our [[m:Meta:Babel#Temporary_Accounts:_access_to_IP_addresses_and_next_steps|previous message]] about requirements for users without extended rights who may need access to IP addresses. To learn more about the project, check out [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/FAQ|our FAQ]] – you will find many useful answers there. You may also [[mw:Special:MyLanguage/Trust and Safety Product/Temporary Accounts/Updates|look at the updates]] (we have just posted one) and [[mw:Newsletter:Product Safety and Integrity|subscribe to our new newsletter]]. If you'd like to talk to me (Szymon) off-wiki, you will find me on Discord and Telegram. Thank you!<section end="body" /> </div> <bdi lang="en" dir="ltr">[[m:user:NKohli (WMF)|NKohli (WMF)]], [[m:user:SGrabarczuk (WMF)|SGrabarczuk (WMF)]]</bdi> 26. awgusta 2025, 23:35 (CEST) == <span lang="de" dir="ltr">Server-Wechsel - Euer Wiki wird bald kurzzeitig im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2025-09-24|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2025-09-24T15:00|en}} {{#time:H:i e|2025-09-24T15:00}}]''' (17:00 MESZ) beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. Auf allen Wikis wird 30 Minuten im Voraus ein Banner erscheinen. Dieses Banner bleibt bis zum Ende des Vorgangs sichtbar. Du kannst zur [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate Übersetzung oder zum Korrekturlesen] dieses Bannertextes beitragen. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' *Am {{#time:j. F Y|2025-09-24|de}} wird bis zu eine Stunde lang das Bearbeiten nicht möglich sein. *In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' *Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> <span dir=ltr>[[m:User:Trizek (WMF)|Trizek (WMF)]] ([[m:User talk:Trizek (WMF)|{{int:talk}}]])</span> 18. septembra 2025, 17:42 (CEST) == <span lang="de" dir="ltr">Nutze dein Mitspracherecht: Stimm über das Kuratorium 2025 ab!</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Hallo allerseits, die Abstimmungsphase der [[m:Special:MyLanguage/Wikimedia Foundation elections/2025|Wahl zum Kuratorium 2025]] ist jetzt eröffnet. Die Kandidierenden bewerben sich um zwei (2) Sitze im Kuratorium. Um deine Wahlberechtigung zu prüfen, gehe bitte zur [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Voter eligibility guidelines|entsprechenden Informationsseite]]. Erfahre durch [[m:Special:MyLanguage/Wikimedia Foundation elections/2025/Candidates|ihre Bewerbungstexte und Kandidaturvideos]] mehr über die Kandidierenden. Wenn du so weit bist, gehe zur [[m:Special:SecurePoll/vote/405|SecurePoll-Wahlseite, um abzustimmen]]. '''Die Abstimmungsphase läuft vom 8. Oktober um 00:00 UTC bis zum 22. Oktober um 23:59 UTC.''' Beste Grüße Abhishek Suryawanshi<br />Vorsitzender des Wahlkomitees<section end="announcement-content" /> </div> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 9. oktobra 2025, 06:48 (CEST) == <span lang="de" dir="ltr">Hilf uns, den Namen des neuen Projekts der Abstrakten Wikipedia zu bestimmen</span> == <div lang="de" dir="ltr"> <section begin="function1"/> {{int:Hello}}! Bitte hilf mit, einen Namen für das neue Wiki-Projekt der Abstrakten Wikipedia zu finden. Dieses Projekt wird ein Wiki sein, das es Benutzern ermöglicht, Funktionen aus [[:f:|Wikifunctions]] und Daten aus Wikidata zu kombinieren, um Sätze in natürlicher Sprache in allen unterstützten Sprachen zu generieren. Diese Sätze können dann von jeder Wikipedia (oder anderswo) verwendet werden. Es wird zwei Abstimmungsrunden geben, denen jeweils eine rechtliche Überprüfung der Kandidaten folgt. Die Abstimmungen beginnen am 20. Oktober und 17. November 2025. Unser Ziel ist es, Mitte Dezember 2025 einen endgültigen Projektnamen auszuwählen. Wenn du teilnehmen möchtest, dann '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|erfahre mehr im Meta-Wiki und stimme jetzt ab]]'''. {{Int:Feedback-thanks-title}} <section end="function1"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 20. oktobra 2025, 13:42 (CEST) == <span lang="de" dir="ltr">Suche nach Freiwilligen für mehrere Komitees der Wikimedia-Bewegung</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Jedes Jahr, in der Regel von Oktober bis Dezember, suchen mehrere Komitees der Wikimedia-Bewegung nach neuen Freiwilligen. Erfahre mehr über die Komitees auf den jeweiligen Seiten im Meta-Wiki: * [[m:Special:MyLanguage/Affiliations Committee|Affiliations-Komitee (AffCom)]] * [[m:Special:MyLanguage/Ombuds commission|Ombudskommission (OC)]] * [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Community Resilience and Sustainability/Trust and Safety/Case Review Committee|Fallprüfungskomitee (CRC)]] Die Bewerbungsphase für die Komitees startet am 30. Oktober 2025. Sie endet für das Affiliations-Komitee am 11. Dezember 2025 und für die Ombudskommission sowie das Fallprüfungskomitee am 11. Dezember 2025. Erfahre, wie du dich bewirbst, indem du [[m:Special:MyLanguage/Wikimedia Foundation/Legal/Committee appointments|die Ernennungsseite im Meta-Wiki besuchst]]. Bitte melde dich mit etwaigen Fragen auf der Diskussionsseite oder über E-Mail an [mailto:cst@wikimedia.org cst@wikimedia.org]. Für das Komitee-Unterstützungsteam <section end="announcement-content" /> </div> -[[m:User:MKaur (WMF)| MKaur (WMF)]] 30. oktobra 2025, 15:12 (CET) == Join the CEE Hub staff team – We’re hiring a Program Specialist == Hi everyone, The regional [[:m:Wikimedia CEE Hub|CEE Hub]] is looking for a '''Program Specialist''' to join our [[:m:Wikimedia CEE Hub/Staff|staff team]]! Are you someone experienced with Wikimedia who wants to help volunteers? Do you participate in Wiki Loves… and other related projects, and do you have ideas and skills to help others improve their efforts? Do you enjoy working with people from different countries? Are you able to work on your own, feel comfortable on Meta-Wiki, and understand how Meta works? If this sounds like you and you're interested in working with the CEE hub team, we’d love to hear from you! '''As a Program Specialist, you will:''' * Support affiliates and communities in developing and implementing impactful programs, * Strengthen regional cooperation and cross-border projects, * Help guide campaigns and initiatives across the CEE region, * Work closely with the CEE Hub team and community members. This is a '''part-time (0.8–0.9 full-time equivalent), remote position''' open to candidates based in the CEE region or nearby time zones. '''APPLICATION DEADLINE: NOVEMBER 10, 2025''' ➡️ '''Learn more and learn how to apply on Meta:''' [[:m:Wikimedia CEE Hub/Jobs/Program Specialist|Wikimedia CEE Hub – Program Specialist]] ⬅️ If you know someone who would be a great fit, please share this opportunity with them! == Help us test Cat-a-lot on your Wikipedia == '''[[:commons:Help:Gadget-Cat-a-lot|Cat-a-lot]]''' is a JavaScript gadget that helps with moving, removing and adding files (as well as articles or subcategories) between, from and to categories and it is widely used on Wikimedia Commons, where it is accessible for every user after enabling the gadget in your [https://commons.wikimedia.org/wiki/Special:Preferences#mw-prefsection-gadgets Preferences]. Complete explanation of the tool, along with the images and demonstration video it is accessible on [[:commons:Help:Gadget-Cat-a-lot|Wikimedia Commons]]. If your Wikipedia is struggling with performing this repetitive task when you need to move pages between categories and remove pages from a category, Cat-a-lot could be activated for your Wikipedia as well. Installation can be done as your user script or as a project gadget and codes can be found [[:commons:Help:Gadget-Cat-a-lot|here]]. Installation is already done on Polish and Romanian wikis from our CEE Region. English phrases from [[:commons:MediaWiki:Gadget-Cat-a-lot.js/translating|MediaWiki:Gadget-Cat-a-lot.js/translating]] can be translated and saved in [[:commons:MediaWiki:Gadget-Cat-a-lot.js/ro|MediaWiki:Gadget-Cat-a-lot.js/ro]] (for example). [[:m:CEE Hub/Working Groups/Technical Advancement Group|CEE Hub Technical Advancement Group]] is willing to support your community in the installation of the tool, and to offer support in case of bugs, as we can report them to the development team. Just leave a message below with any issues you encounter. --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 18. nowembra 2025, 11:42 (CET) (on behalf of the CEE Hub Technical Advancement Group) == <span lang="de" dir="ltr">Migration zu Parsoid</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> <em>[[m:Special:MyLanguage/Wikimedia Foundation/Product and Technology/Parsoid Read Views/Read View Announcement|Lies dies in einer anderen Sprache]]</em> <div class="mw-translate-fuzzy"> Hallo zusammen! Ich freue mich, euch mitteilen zu können, dass als nächster Schritt des Projekts [[mw:Special:MyLanguage/Parsoid/Parser Unification|Parser-Vereinheitlichung]] Parsoid bald als Standard-Renderer für Artikel in deinem $wiki aktiviert wird. Wir erhöhen schrittweise die Anzahl der Wikis, die Parsoid verwenden, mit der Absicht, es zum Standard-Wikitext-Parser für die nächste langfristig unterstützte Version von MediaWiki zu machen. Dadurch werden unsere Wikis für Autoren, Leser und Tools zuverlässiger und konsistenter und die Entwicklung zukünftiger Wikitext-Funktionen wird einfacher. </div> Wenn dies deinen Arbeitsablauf stört, mache dir keine Sorgen! Du kannst dies immer noch über eine Benutzereinstellung deaktivieren oder Parsoid auf der aktuellen Seite über das Werkzeuge-Untermenü deaktivieren, wie in der Dokumentation zur [[mw:Special:MyLanguage/Help:Extension:ParserMigration|Erweiterung:ParserMigration]] beschrieben. Es stehen [[mw:Special:MyLanguage/Parsoid/Parser Unification/Confidence Framework|weitere Informationen zu unserer Einführungsstrategie]] zur Verfügung, einschließlich der Tests, die durchgeführt werden, bevor wir Parsoid für ein neues Wiki aktivieren. Um Fehler und Probleme zu melden, sieh dir bitte unsere Dokumentation zu [[mw:Special:MyLanguage/Parsoid/Parser Unification/Known Issues|bekannten Problemen]] an und wenn du einen neuen Fehler findest, erstelle bitte ein Phab-Ticket und markiere das [[phab:project/view/5846|Team Content Transform im Phabricator]]. <section end="announcement-content" /> </div> <bdi lang="en" dir="ltr">[[mw:User:ABreault (WMF)|Content Transform Team]]</bdi> 20. nowembra 2025, 01:43 (CET) == <span lang="de" dir="ltr">Erinnerung: Hilf uns, den Namen des neuen Projekts der Abstrakten Wikipedia zu bestimmen</span> == <div lang="de" dir="ltr"> <section begin="function2"/> {{int:Hello}}! Erinnerung: Bitte hilf mit, den Namen für das neue Wiki-Projekt der Abstrakten Wikipedia zu wählen. Die Abstimmung über die Finalisten beginnt heute. Die Finalisten für den Namen sind: <span lang="en" dir="ltr" class="mw-content-ltr">Abstract Wikipedia, Multilingual Wikipedia, Wikiabstracts, Wikigenerator, Proto-Wiki</span>. Wenn du teilnehmen möchtest, dann '''[[m:Special:MyLanguage/Abstract Wikipedia/Abstract Wikipedia naming contest|erfahre mehr im Meta-Wiki und stimme jetzt ab]]'''. {{Int:Feedback-thanks-title}} <section end="function2"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 20. nowembra 2025, 15:22 (CET) == Thank You for Last Year – Join Wiki Loves Ramadan 2026 == Dear Wikimedia communities, We hope you are doing well, and we wish you a happy New Year. ''Last year, we captured light. This year, we’ll capture legacy.'' In 2025, communities around the world shared the glow of Ramadan nights and the warmth of collective iftars. In 2026, ''Wiki Loves Ramadan'' is expanding, bringing more stories, more cultures, and deeper global connections across Wikimedia projects. We invite you to explore the ''Wiki Loves Ramadan 2026'' [[m:Special:MyLanguage/Wiki Loves Ramadan 2026|Meta page]] to learn how you can participate and [[m:Special:MyLanguage/Wiki Loves Ramadan 2026/Participating communities|sign up]] your community. 📷 ''Photo campaign on '' [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan 2026|Wikimedia Commons]] If you have questions about the project, please refer to the FAQs: * [[m:Special:MyLanguage/Wiki Loves Ramadan/FAQ/|Meta-Wiki]] * [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan/FAQ|Wikimedia Commons]] ''Early registration for updates is now open via the '''[[m:Special:RegisterForEvent/2710|Event page]]''''' ''Stay connected and receive updates:'' * [https://t.me/WikiLovesRamadan Telegram channel] * [https://lists.wikimedia.org/postorius/lists/wikilovesramadan.lists.wikimedia.org/ Mailing list] We look forward to collaborating with you and your community. '''The Wiki Loves Ramadan 2026 Organizing Team''' 16. januara 2026, 20:45 (CET) == Feminism and Folklore 2026 starts soon == <div style="border:8px maroon ridge;padding:6px;"> [[File:Feminism and Folklore 2026 logo.svg|centre|550px|frameless]] ::<div lang="en" dir="ltr" class="mw-content-ltr"> <div style="text-align: center; width: 100%;">''{{int:please-translate}}''</div> ;Invitation to Organize Feminism and Folklore 2026 Dear Wiki Community, We are pleased to invite Wikimedia communities, affiliates, and independent contributors to organize the '''[[:m:Feminism and Folklore 2026|Feminism and Folklore 2026]]''' writing competition on your local Wikipedia. The international campaign will run from '''1 February to 31 March 2026''' and aims to improve coverage of feminism, women’s histories, gender-related topics, and folk culture across Wikipedia projects. ;About the Campaign '''Feminism and Folklore''' is a global writing initiative that complements the '''[[:c:Commons:Wiki Loves Folklore 2026|Wiki Loves Folklore]]''' photography competition. While Wiki Loves Folklore focuses on visual documentation, this writing campaign addresses the '''gender gap on Wikipedia''' by improving encyclopedic content related to folk culture and marginalized voices. ;What Can Participants Write About? Communities can contribute by creating, expanding, or translating articles related to: * Folk festivals, rituals, and celebrations * Folk dances, music, and traditional performances * Women and queer figures in folklore * Women in mythology and oral traditions * Women warriors, witches, and witch-hunting narratives * Fairy tales, folk stories, and legends * Folk games, sports, and cultural practices Participants may work from curated article lists or generate new article suggestions using campaign tools. ;How to Sign Up as an Organizer Organizers are requested to complete the following steps to register their community: # Create a local project page on your wiki [[:m:Feminism and Folklore/Sample|(see sample)]] # Set up the campaign using the '''CampWiz''' tool # Prepare a local article list and clearly mention: #* Campaign timeline #* Local and international prizes # Request a site notice from local administrators [[:mr:Template:SN-FNF|(see sample)]] # Add your local project page and CampWiz link to the '''[[:m:Feminism and Folklore 2026/Project Page|Meta project page]]''' ;Campaign Tools The Wiki Loves Folklore Tech Team has introduced tools to support organizers and participants: * '''Article List Generator by Topic''' – Helps identify articles available on English Wikipedia but missing in your local language Wikipedia. The tool allows customized filters and provides downloadable article lists in CSV and wikitable formats. * '''CampWiz''' – Enables communities to manage writing campaigns effectively, including jury-based evaluation. This will be the third year CampWiz is officially used for Feminism and Folklore. Both tools are now available for use in the campaign. '''[https://tools.wikilovesfolklore.org/ Click here to access the tools]''' ;Learn More & Get Support For detailed information about rules, timelines, and prizes, please visit the '''[[:m:Feminism and Folklore 2026|Feminism and Folklore 2026 project page]]'''. If you have any questions or need assistance, feel free to reach out via: * '''[[:m:Talk:Feminism and Folklore 2026/Project Page|Meta talk page]]''' * Email us using details on the contact page. ;Join Us We look forward to your collaboration and coordination in making Feminism and Folklore 2026 a meaningful and impactful campaign for closing gender gaps and enriching folk culture content on Wikipedia. Thank you and best wishes, '''[[:m:Feminism and Folklore 2026|Feminism and Folklore 2026 International Team]]''' ---- ''Stay connected:'' [[File:B&W Facebook icon.png|link=https://www.facebook.com/feminismandfolklore/|30x30px]]&nbsp; [[File:B&W Twitter icon.png|link=https://twitter.com/wikifolklore|30x30px]] </div></div> == Invitation to Host Wiki Loves Folklore 2026 in Your Country == <div lang="en" dir="ltr" class="mw-content-ltr"> <div style="text-align: center; width: 100%;">''{{int:please-translate}}''</div> [[File:Wiki Loves Folklore Logo.svg|right|150px|frameless]] Hello everyone, We are delighted to invite Wikimedia affiliates, user groups, and community organizations worldwide to participate in '''Wiki Loves Folklore 2026''', an international initiative dedicated to documenting and celebrating folk culture across the globe. ;About Wiki Loves Folklore '''Wiki Loves Folklore''' is an annual international photography competition hosted on Wikimedia Commons. The campaign runs from '''1 February to 31 March 2026''' and encourages photographers, cultural enthusiasts, and community members to contribute photographs that highlight: * Folk traditions and rituals * Cultural festivals and celebrations * Traditional attire and crafts * Performing arts, music, and dance * Everyday practices rooted in folk heritage Through this campaign, we aim to preserve and promote diverse folk cultures and make them freely accessible to the world. [[:c:Commons:Wiki_Loves_Folklore_2026|Project page on Wikimedia Commons]] ; Host a Local Edition As we celebrate the '''eight edition''' of Wiki Loves Folklore, we warmly invite communities to organize a local edition in their country or region. Hosting a local campaign is a great opportunity to: * Increase visibility of your region’s folk culture * Engage new contributors in your community * Enrich Wikimedia Commons with high-quality cultural content '''[[:c:Commons:Wiki_Loves_Folklore_2026/Organize|Sign up to organize]]:''' If your team prefers to organize the competition in ''either February or March only'', please feel free to let us know. If you are unable to organize, we encourage you to share this opportunity with other interested groups or organizations in your region. ;Get in Touch If you have any questions, need support, or would like to explore collaboration opportunities, please feel free to contact us via: * The project Talk pages * Email: '''support@wikilovesfolklore.org''' We are also happy to connect via an online meeting if your team would like to discuss planning or coordination in more detail. Warm regards, '''The Wiki Loves Folklore International Team''' </div> [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 18. januara 2026, 14:21 (CET) == <span lang="de" dir="ltr">Jährliche Überprüfung des Universal Code of Conduct und der Durchsetzungsrichtlinien</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Ich möchte euch gerne darüber informieren, dass die jährliche Überprüfungsphase für den Universal Code of Conduct und die Durchsetzungsrichtlinien nun begonnen hat. Ihr könnt bis zum 9. Februar 2026 Änderungsvorschläge einreichen. Dies ist der erste von mehreren Teilschritten, die im Rahmen der jährlichen Überprüfung unternommen werden. Weitere Informationen und eine Diskussion, an der ihr teilnehmen könnt, finden sich auf der [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|UCoC-Seite auf Meta]]. Das [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) ist eine globale Gruppe, die sich für eine gerechte und einheitliche Umsetzung des UCoC einsetzt. Diese jährliche Überprüfung wird vom U4C geplant und durchgeführt. Weitere Informationen und die Aufgaben des U4C findet ihr in der [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|U4C-Satzung]]. Bitte leitet diese Informationen an andere Mitglieder aus eurer Community weiter, wo immer dies angemessen ist. -- In Zusammenarbeit mit dem U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|Diskussion]])<section end="announcement-content" /> </div> 19. januara 2026, 22:01 (CET) == New Rapid Funds in CEE – global support now closer to your local activities == Hi everyone, '''Starting from 1 April 2026''', the CEE Hub will begin reviewing and supporting Rapid Fund applications for Central and Eastern Europe, in close cooperation with the Wikimedia Foundation. This change is part of our shared effort to bring support closer to communities and make the process more accessible and responsive to local contexts. You will still apply through the same system (Fluxx), and WMF will continue handling contracts and fund transfers. What changes is that the CEE Hub becomes your first point of contact, offering guidance, reviewing applications, and staying closer to your ideas throughout the process. We encourage you to reach out to [[:m:User:TRistovski-CEEhub|Toni]], our Grants Specialist before applying. A short conversation can help clarify your idea and make things smoother from the start. * ☝️ Rapid Funds remain open year-round (with possible delays in June and December). * ☝️ For Central Asian communities: the process stays the same – you continue applying directly through WMF. Join our online Q&A session to learn more (same content, two options to join): * 2 April, 5:00 PM CEST (UTC +2; [[:m:Event:CEE Hub Rapid Fund Q&A Nr. 1|register here]]) * 8 April 7:00 PM CEST (UTC +2; [[:m:Event:CEE Hub Rapid Fund Q&A Nr. 2|register here]]) More info & contact: '''[[:m:CEE Hub Rapid Funds|Wikimedia CEE Hub/Rapid Grants]]''' --[[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 31. měrca 2026, 13:21 (CEST) == Join the sixth Ukraine’s Cultural Diplomacy Month on Wikipedia! == <div lang="en" dir="ltr"> [[File:Ukraine’s Cultural Diplomacy Month on Wikipedia 2026.png|right|250px|thumb|link=https://meta.wikimedia.org/wiki/Ukraine%27s_Cultural_Diplomacy_Month_2026|Join our campaign!]] {{int:please-translate}} Dear Wikipedians! [[:m:Special:MyLanguage/Wikimedia Ukraine|Wikimedia Ukraine]], in cooperation with the [[:en:Ministry of Foreign Affairs of Ukraine|MFA of Ukraine]] and [[:en:Ukrainian Institute|Ukrainian Institute]], has launched the sixth edition of writing challenge "'''[[:m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2026|Ukraine's Cultural Diplomacy Month]]'''", which lasts from '''1st April''' until '''30th April 2026'''. The initiative aims to promote knowledge about Ukrainian culture abroad by creating and improving Wikipedia articles in multiple languages. This year marks the sixth edition of the campaign, which will focus on contemporary culture, making today’s artistic voices and practices more visible to international audiences. 🧩'''How to participate?''' Choose an article from the suggested list → Write an article in your language, or improve an existing one according to the rules → Add your contribution to the contest page and calculate your points → Win prizes and receive a certificate of participation → Become a promoter of truthful knowledge about Ukraine. 🧩'''[[m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2026|Check our main page for more information]]'''. '''If you are interested in coordinating long-term community engagement for the campaign and becoming a local ambassador, we would love to hear from you! Please let us know your interest.''' If not, then we encourage you to translate the [[m:Special:MyLanguage/Ukraine's Cultural Diplomacy Month 2026|landing page of the contest]] and [https://meta.wikimedia.org/wiki/Special:MessageGroupStats?group=Centralnotice-tgroup-UCDM2026banner&messages=&language=en&x=D banner] into your own language. Also, we set up a [[:m:CentralNotice/Request/Ukraine's Cultural Diplomacy Month 2026|banner]] to notify users of the possibility to participate in this challenge! [[:m:User:OlesiaLukaniuk (WMUA)|OlesiaLukaniuk (WMUA)]] ([[:m:User talk:OlesiaLukaniuk (WMUA)|talk]]) 04:35, 1 April 2026 (UTC) </div> == Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) == Hello everyone, This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>). '''The Change:'''<br /> Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]]. We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''. '''What You Need To Do:'''<br /> To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search. '''Deadline:'''<br /> We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles. Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 3. apryla 2026, 19:11 (CEST) == Request for comment (global AI policy) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{int:Please-translate}} A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}} [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 26. apryla 2026, 02:57 (CEST) </bdi> == Call for Community Candidates – Wikimedia CEE Hub Steering Committee Election 2026 == ''Please help us and your community by translating this announcement into your language!'' Dear all, The [[Meta:Wikimedia CEE Hub Steering Committee Election 2026]] is currently underway. There are 4 seats allocated to community representatives. Community members are invited to nominate themselves as candidates for these seats. These positions will be filled through a vote by the CEE community. '''Eligibility criteria:''' * Candidates must be [[Meta:Wikimedia CEE Hub Steering Committee Election 2026/Eligibility|eligible voters]]: ** Have a Wikimedia account created before 18 December 2025 ** Have at least 300 edits between 18 December 2025 and 18 June 2026 ** Must not have been blocked between 18 March 2026 and 18 June 2026 * Must have participated in at least 2 of the last 3 [[Meta:Wikimedia CEE Hub/CEE Hub Status Meeting|CEE Hub Advisory Group meetings]] You can check your eligibility using the following tool: https://cee-sc-election.toolforge.org/ '''How to proceed:''' Candidates may nominate themselves or be nominated by others. If nominated by others, the candidate must explicitly accept the nomination before 18 June 2026. The candidate should create their nomination page and submit their candidacy [[Meta:Wikimedia_CEE_Hub_Steering_Committee_Election_2026/Nominations|here]]: Please also inform your communities about the election and encourage participation. Best regards,   Electoral Commission of Wikimedia CEE Hub Steering Committee Election 2026 --[[Meta:Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Meta:Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 30. apryla 2026, 12:00 (CEST) == Wiki Loves Eurovision 2026 == <div lang="en" dir="ltr"> [[File:Wiki Loves Eurovision edit-a-thon logo 2026.svg|right|250px]] Hello everyone! You are invited to participate in the "[[meta:Wiki Loves Eurovision 2026|Wiki Loves Eurovision]]" article writing contest, where our goal is to create new Eurovision-related articles in the CEE-language Wikipedia editions and improve existing ones. The contest will take place from May 10 to June 10, 2026, and prizes are available: * 1st prize: a voucher worth €60 * 2nd prize: a voucher worth €50 * 3rd prize: a voucher worth €40 * 4th–10th prize: a voucher worth €30 To participate in the contest and learn more, please visit [[meta:Wiki Loves Eurovision 2026|this link]]. --[[User:MHeidarzadeh-CEEhub|MHeidarzadeh-CEEhub]] ([[User talk:MHeidarzadeh-CEEhub|talk]]) 14:00, 16 May 2026 (UTC) </div> == <span lang="de" dir="ltr">Jetzt bei den U4C-Wahlen 2026 abstimmen</span> == <div lang="de" dir="ltr"> <section begin="announcement-content" /> Die stimmberechtigten Wähler werden gebeten, an der Wahl des [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] 2026 teilzunehmen. Weitere Informationen - einschließlich einer Prüfung der eigenen Stimmberechtigung, Informationen zum Abstimmungsprozess, Kandidateninformationen und einem Link zur Abstimmung - findest du auf Meta auf der [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|Informationsseite der Wahlen 2026]]. Die Abstimmung endet am 2. Juni 2026 um [https://zonestamp.toolforge.org/1780358400 00:00 Uhr UTC]. Bitte stimme ab, wenn dein Konto stimmberechtigt ist. Die Ergebnisse werden bis zum 14. Juni 2026 vorliegen.<section end="announcement-content" /> </div> [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 27. meje 2026, 19:14 (CEST) == RFC about AI-generated content in Wikimedia Commons == <bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|diskusija]])</bdi> 23. junija 2026, 19:11 (CEST) == <span lang="de" dir="ltr">Einbindung des Links zu den Rechts- und Sicherheitskontakten in die Fußzeile Ihres Wikis</span> == <div lang="de" dir="ltr"> <section begin="Message"/> '''Rechtliche Hinweise und Sicherheitshinweise''' Hallo Community, die Wikimedia Foundation hat eine [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|zentrale Kontaktseite für Rechts- und Sicherheitsfragen]] bereitgestellt, die in der Fußzeile eures Wikis verlinkt werden soll, um den Zugriff auf korrekte rechtliche Informationen zu gewährleisten. Dies ist eine gesetzliche Vorgabe. Wir haben bereits Links zu den englischen, deutschen, italienischen, spanischen und anderen Wikis eingerichtet und werden diese in Kürze auch in eurem Wiki einrichten. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Bitte lest mehr dazu auf der Projektseite]] und hinterlasst eure Kommentare in diesem Thread oder auf der [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|Diskussionsseite]]. <section end="Message"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 25. junija 2026, 15:29 (CEST) == Request for comment (the future of Abstract Wikipedia) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}} You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}} [[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 24. julija 2026, 14:24 (CEST) </bdi> == CEE Technical Village Pump == {{int:please-translate}} [[File:CEE Technical Village Pump.webm|300px|right|thumb|A short introduction to the CEE Technical Village Pump]] The '''[[:m:CEE Technical Village Pump|CEE Technical Village Pump]]''' is a new space for Wikimedia contributors and communities across the CEE region to request technical help, exchange solutions, and get support from experienced contributors. To introduce the project and give a quick overview of how it works, we’ve prepared this short video. The page is currently available in English. We’d like to make it accessible to communities across the region in their local languages, and we’d appreciate your [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=page-Template%3ACEE+Technical+Village+Pump+header&language=en&action=page&filter=&action_source=translate_page help translating it]. Best regards, [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 26. awgusta 2026, 11:09 (CEST) == <span lang="de" dir="ltr">Server-Wechsel - Euer Wiki wird bald kurzzeitig im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2026-09-23|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2026-09-23T14:00|en}} {{#time:H:i e|2026-09-23T14:00}}]''' (17:00 MESZ) beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. Auf allen Wikis wird 30 Minuten im Voraus ein Banner erscheinen. Dieses Banner bleibt bis zum Ende des Vorgangs sichtbar. Du kannst zur [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate Übersetzung oder zum Korrekturlesen] dieses Bannertextes beitragen. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' * Am {{#time:j. F Y|2026-09-23|de}} wird bis zu eine Stunde lang das Bearbeiten nicht möglich sein. * In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' * Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> [[m:user:Trizek (WMF)|Trizek (WMF)]] 15. septembra 2026, 14:58 (CEST) == Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges == ''(Apologies for posting in English. You can help by translating it)'' Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/> We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader). We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/> Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis. [[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]] The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why? Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''. Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]] Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 21. septembra 2026, 12:20 (CEST) == Wikidata Sitelink changes in Recent Changes and Watchlist == ''(Apologies for cross-posting in English, translating it will help spread the message)'' Earlier last month, all Wikis were contacted for feedback on our proposal to remove language link changes, this change has already been deployed to Wikisource, Wikibooks, Wikivoyage, Wikiquote, Wikiversity and Wiktionary. The same change is now being rolled out globally to all Wikipedias on '''October 13, 07:00 UTC'''. Editors will no longer see notifications after this time on their [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item (it does not affect language link notifications to the home wiki). There will then be a two-week monitoring period to observe if a reduction of high-volume but low-value notifications takes place, or if higher-value changes become easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the Wikidata For Wikimedia [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|Projects talk page]].<br/> Wikidata's own Recent Changes page is not affected as it serves as the repository for these changes. Please reach out if you have any questions, or if your wiki would like to opt-out, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[Wužiwar:MediaWiki message delivery|MediaWiki message delivery]] ([[Diskusija z wužiwarjom:MediaWiki message delivery|diskusija]]) 9. oktobra 2026, 11:28 (CEST) == <span lang="de" dir="ltr">Server-Wechsel - Euer Wiki wird bald kurzzeitig im nur-lesbaren Modus sein</span> == <div lang="de" dir="ltr"> <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|In einer anderen Sprache lesen]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] Die [[foundation:|Wikimedia-Foundation]] wird den Datenverkehr zwischen ihren Rechenzentren wechseln. Dadurch sollen Wikipedia und die anderen Wikimedia-Wikis auch nach einem Notfall erreichbar bleiben. Der gesamte Datenverkehr wird am '''{{#time:j. F Y|2026-10-28|de}}''' umgeleitet. Der Test wird um '''[https://zonestamp.toolforge.org/{{#time:U|2026-10-28T15:00|en}} {{#time:H:i e|2026-10-28T15:00}}]''' (16:00 MESZ) beginnen. Leider können aufgrund einiger Einschränkungen der [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]]-Software keine Bearbeitungen vorgenommen werden, während die Umschaltung duchgeführt wird. Wir entschuldigen uns für diese Unterbrechung, und wir werden uns bemühen, derartige Einschränkungen in der Zukunft auf ein Minimum zu beschränken. Auf allen Wikis wird 30 Minuten im Voraus ein Banner erscheinen. Dieses Banner bleibt bis zum Ende des Vorgangs sichtbar. Du kannst zur [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate Übersetzung oder zum Korrekturlesen] dieses Bannertextes beitragen. '''Für eine kurze Zeit können zwar alle Wikis gelesen, aber nicht bearbeitet werden.''' * Am {{#time:j. F Y|2026-10-28|de}} wird bis zu eine Stunde lang das Bearbeiten nicht möglich sein. * In dieser Zeit wird beim Versuch, Bearbeitungen zu speichern, eine Fehlermeldung ausgegeben. Wir hoffen, dass dadurch keine Bearbeitungen verloren gehen, können das aber leider nicht garantieren. Falls eine Fehlermeldung erscheint, warte bitte, bis alles wieder normal ist. Dann sollte es möglich sein, die Bearbeitungen zu speichern. Sicherheitshalber empfehlen wir jedoch, dass du zunächst eine Kopie deiner Änderungen machst. ''Weitere Folgen:'' * Im Hintergrund ablaufende Prozesse (eingebundene Skripte beispielsweise) werden langsamer als sonst ablaufen, einige werden möglicherweise gar nicht ausgeführt. Es kann vorkommen, dass Rotlinks nicht so schnell wie üblich aktualisiert werden. Falls du einen Artikel erstellst, der bereits an einer anderen Stelle verlinkt ist, dann wird der Link an dieser Stelle länger rot bleiben als üblich. Einige lang laufende Skripte werden wir stoppen müssen. * Wir gehen davon aus, dass die Codebereitstellung wie in jeder anderen Woche erfolgen wird. Allerdings kann es von Fall zu Fall zu einem Code-Freeze kommen, wenn der Vorgang dies erfordert. * [[mw:Special:MyLanguage/GitLab|GitLab]] wird für etwa 90 Minuten nicht verfügbar sein. Falls nötig, kann der Test verschoben werden. Der Zeitplan ist [[wikitech:Switch_Datacenter|unter wikitech.wikimedia.org zu finden]]. Einzelheiten sind dem Plan zu entnehmen. '''Bitte gib diese Benachrichtigung an deine Community weiter!'''</div><section end="server-switch"/> </div> [[user:Trizek_(WMF)|Trizek_(WMF)]] 26. oktobra 2026, 15:01 (CET) == Article guidance feature is ready to be set up for your Wikipedia == <div lang="en" dir="ltr"> Hello Wikipedians, Apologies, this message is not in your language. {{int:Please-translate}}. I'm writing on behalf of the Language and Product Localization team. The Article guidance feature is ready to be enabled on your Wikipedia. Administrators and interface administrators can turn on the feature through the <code>Special:CommunityConfiguration/ArticleGuidance</code> to expose it for editors to use it. '''Background information''' [[mw:Article guidance|Article guidance]] guides contributors when they start a new article, so they don't meet an empty page. It provides a start-up content structure for writing a particular topic at every stage of the article, as well as advice, community practices, and source recommendations. The feature is designed so that communities can fully customize that guidance shown to editors is the most relevant for their wikis and specific topics. We collaborated with a few communities to build and test the feature. Through their feedback and experiments, we improved the feature and validated that articles created through this workflow survive better on Wikipedia. '''Setting up the feature''' To ensure that this feature works as intended, you should do the following: * [https://translatewiki.net/w/i.php?title=Special:MessageGroupStats&language=fi&group=ext-articleguidance Translate the user interface] on translatewiki.net * Create pages called outlines: These pages contain all the editing guidelines tailored for specific article topics that the feature will use. The guidance that editors see depends on the outlines available on your wiki. See [[simple:Wikipedia:Article Guidance|outlines examples in Simple English Wikipedia]] and the [[mw:Article guidance/How to create an outline|How to create an outline]] guide to learn and create outlines. A generic outline can also be created; this generic outline can be the fallback for all topics when no topic-specific outlines exist. * We have also created a guide for administrators – [[mw:Article guidance/Community Configuration|Article guidance/Community Configuration]] – with instructions on the pre-configuration tasks. We recommend reading it before changing the settings in Community Configuration. '''Our request''' We encourage experienced editors to complete the above tasks and work with an admin to enable it. Please join the [https://discord.gg/R59wcJFuh outline creation support Discord server] to ask questions about outlines and get the help you need. Go to [[mw:Talk:Article guidance|this talk page]] to ask the team questions about this feature. We look forward to seeing it used in your Wiki and the impact it will have on the number of created articles that survive in this Wikipedia. Thank you! </div> <bdi lang="en" dir="ltr">[[User:UOzurumba (WMF)|UOzurumba (WMF)]]</bdi> 9. nowembra 2026, 04:30 (CET) bdmpbwz9iy4ikp9xclao5ji921cbcqk Hornjoserbšćina 0 2012 392842 392185 2026-11-09T06:51:18Z ~2026-59387-06 28965 /* Alfabet */ 392842 wikitext text/x-wiki {{infokašćik rěč |Barba=Indoeuropska |mjeno 1=hornjoserbšćina |kraje=[[Němska]] |zwjazkowy kraj=[[Sakska]] |region=[[Hornja Łužica]] |rěčnicy=25.000 |klasifikacija=[[indoeuropske rěče]] :[[słowjanske rěče]] ::[[zapadosłowjanske rěče]] :::[[serbšćina]] ::::hornjoserbšćina |družina pisma=[[łaćonski alfabet]] |hamtska rěč=[[Serbski sydlenski rum]] w [[Sakska|Sakskej]] |iso_639-1= |iso_639-2=hsb |iso_639-3=[http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=h hsb] |wikipedija=[http://hsb.wikipedia.org/wiki/H%C5%82owna_strona http://hsb.wikipedia.org] }} '''Hornjoserbšćina''' je zapadosłowjanska rěč, kotraž so w [[Hornja Łužica|Hornjej Łužicy]] wokoło městow [[Budyšin]], [[Kamjenc]] a [[Wojerecy]] rěči. Wona je přiwuzna z [[delnjoserbšćina|delnjoserbšćinu]] w susodnej [[Delnja Łužica|Delnjej Łužicy]], [[čěšćina|čěšćinu]], [[pólšćina|pólšćinu]], [[słowakšćina|słowakšćinu]] a [[kašubšćina|kašubšćinu]]. Jako [[słowjanske rěče|słowjanska rěč]] hornjoserbšćina k [[indoeuropske rěče|indoeuropskim rěčam]] słuša. Prawniski status hornjoserbšćiny w [[Sakska|Sakskej]] rjaduje [[Sakski serbski zakoń]]. == Alfabet == {{Hłowny nastawk|Hornjoserbski alfabet}} Hornjoserbšćina pisa so z wariantu [[łaćonski alfabet|łaćonskeho alfabeta]] z přidatnymi [[pismik]]ami '''[[č]]''' [{{IPA|t͡ɧ}}], '''[[ć]]''' [{{IPA|t͡ʃ}}], '''[[ě]]''', '''[[ł]]''', '''[[ń]]''', '''[[ó]]''', '''[[ř]]''', '''[[š]]''' a '''[[ž]]''' kaž tež [[digraf]]omaj '''[[dź]]''' [{{IPA|d͡ʒ}}] a '''[[ch]]'''. == Prawopis == [[Dataja:Lubjenc – wjesna tafla.jpg|thumb|[[Dwurěčne znamješka|Dwurěčna němsko-hornjoserbska wjesna tafla]] w [[Lubjenc]]u]] Moderny, tak mjenowany ''analogny'' prawopis po čěskim přikładźe wuwiwaše so za serbšćinu pod wliwom [[Jan Pětr Jordan|Jana Pětra Jordana]], [[Jan Arnošt Smoler|Jana Arnošta Smolerja]] a [[Michał Hórnik|Michała Hórnika]] w běhu 19. lětstotka a přesadźi so najprjedy w katolskim a hakle po nanuzowanej přestawce serbskeho pismowstwa mjez 1937 a 1945 tež w ewangelskim wobłuku. Do toho wužiwaše so za serbske teksty [[fraktura|frakturne pismo]] z [[diakritika|diakritiskimi znamješkami]] za wěste zwuki. Zdobom eksistowachu wjacore prawopisne normy, kotrež buchu doskónčnje hakle w 1950tych lětach zjednoćene. == Gramatika == Hornjoserbšćina ma sydom [[pad (gramatika)|padow]] ([[nominatiw]], [[genitiw]], [[datiw]], [[akuzatiw]], [[instrumental]], [[lokatiw]], [[wokatiw]]) a tři [[numerus|gramatiske čisła]] (numera), nimo [[singular]]a ''(jednota)'' a [[plural]]a ''(mnohoty)'' tež [[dual]] ''(dwojota)''. Kaž němčina ma wona tři gramatiske rody: maskulinum, femininum a neutrum. Serbski werb wustupuje w třoch [[modus (gramatika)|modusach]]: [[indikatiw]], [[konjunktiw]] a [[imperatiw]]. Charakteristiske za hornjoserbšćinu přirunajo z druhimi zapadosłowjanskimi rěčemi je nimo toho wobchowanje słowjanskeho syntetiskeho [[preteritum]]a (wón ''wobwliwowaše'') nimo analytiskeho [[perfekt]]a (wón ''je wobwliwował''), kotryž wustupuje w dwěmaj formomaj ([[aorist]], [[imperfekt]]) wotpowědnje [[aspekt]]ej werba. == Narěče == [[Dataja:Smoler korta01.jpg|thumb|Serbski sydlenski rum w lěće 1843 po [[Jan Arnošt Smoler|Smolerju]], zapisane je tež pasmo přechodnych dialektow]] Hornjoserbšćina wobsteji resp. wobsteješe z wjacorych [[dialekt]]ow, kotrež so zdźěla chětro wot so rozeznawachu. Nimo hłowneju narěčow, z kotrejuž je so dźensniša spisowna rěč do dalokeje měry wuwiła ([[Katolska narěč|Katolska]] a [[Budyska narěč]]) běchu to po [[Hinc Šewc|Hincu Šewcu]] [[Kulowska narěč]] sewjernje poprawneho katolskeho dialekta, [[Holanska narěč]] wuchodnje njeje mjez [[Wulke Zdźary|Wulkimi Zdźarami]] a [[Delni Wujězd|Delnim Wujězdom]], [[Wuchodna holanska narěč]] zady Delnjeho Wujězda přez [[Klětno]] a [[Chrjebja-Nowa Wjes|Chrjebju]] hač do [[Niska|Nisčanskeje]] kónčiny, mjeztym wotemrěta [[Lubijska narěč]] na juhowuchodźe a [[Wóslinčanska narěč]] zapadnje Kulowskeje. Wyše [[Budestecy|Budestec]] mějachu runje tak wosebity dialekt, kotryž so druhdy jako [[Horinska narěč]] mjenowaše. Wšě narěče na sewjeru runje naličenych ([[Złokomorowska narěč|Złokomorowska]], [[Wojerowska narěč|Wojerowska]], [[Sprjejčanska narěč|Sprjejčanska]], [[Slepjanska narěč|Slepjanska]], [[Wochožanska narěč|Wochožanska]] a [[Mužakowska narěč]]) njesłušeja po linguistiskich aspektach hižo do sameje hornjoserbšćiny, ale tworja [[Serbske přechodne narěče|přechodne dialekty]] mjez hornjo- a delnjoserbšćinu. == Wotkazy == {{Commonscat|Upper Sorbian language|hornjoserbšćina}} === Słownikaj === * [https://www.soblexx.de/ Serbsko-němski słownik z deklinaciju a konjugaciju] * [https://www.boehmak.de/ Němsko-serbski słownik/Prawopisny słownik] === Korpus === * [https://kontext.korpus.cz/first_form?corpname=omezeni%2Fhotko&usesubcorp= Korpus Serbskeho instituta] === Dalše === * [https://sprachkurs.sorbischlernen.de/ Online-kurs hornjoserbšćiny] (schodźenki A1–B1) * [https://sotra.app/ Awtomatiski serbsko-němski přełožowar „sotra“] * [[wikt:Wikis%C5%82ownik:Zwukowe_pismo|Wikisłownik: Wurjekowanje a zwukowe pismo]] * [http://karta.luzica.la/ Serbska online-karta Łužicy na luzica.la] * [http://enricu.wordpress.com/webova-kavarna/kurs-serbskeje-rece-kurz-luzicke-srbstiny/ Kurs serbskeje rěče], wšě dialogi z rumunskeje wučbnicy hornjoserbšćiny ''Curs practic de limba sorabă'' {{Słowjanske rěče}} {{DISPLAYTITLE:hornjoserbšćina}} [[Kategorija:Hornjoserbšćina|!]] [[Kategorija:Zapadosłowjanske rěče]] [[Kategorija:Rěče Němskeje]] o7m6chjy41fz7g0k98d0j98wsnow6pg Předłoha:Infobox IPA 10 41795 392843 2026-11-09T07:20:35Z ~2026-59388-70 28966 nowa strona: {{infobox IPA/core1 <!-- ABOVE-TITLE --> | above = {{{above|}}} <!-- IPA SYMBOL (in big font) --> | ipa symbol=<!-- IF input ipa symbol ELSE compose from decimals1234 -->{{#if: {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format chara… 392843 wikitext text/x-wiki {{infobox IPA/core1 <!-- ABOVE-TITLE --> | above = {{{above|}}} <!-- IPA SYMBOL (in big font) --> | ipa symbol=<!-- IF input ipa symbol ELSE compose from decimals1234 -->{{#if: {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format character}}<!-- -->}}<!-- symbols 2--8 for big font pass through without further ado --> | ipa symbol2= {{{ipa symbol2|}}} | ipa symbol3= {{{ipa symbol3|}}} | ipa symbol4= {{{ipa symbol4|}}} | ipa symbol5= {{{ipa symbol5|}}} | ipa symbol6= {{{ipa symbol6|}}} | ipa symbol7= {{{ipa symbol7|}}} | ipa symbol8= {{{ipa symbol8|}}} | ipa symbol 2-8 exist= {{{ipa symbol2|}}}{{{ipa symbol3|}}}{{{ipa symbol4|}}}{{{ipa symbol5|}}}{{{ipa symbol6|}}}{{{ipa symbol7|}}}{{{ipa symbol8|}}} <!-- CHECK DECIMAL --> | check decimals = <!--check if decimals are numeric -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format check decimals<!-- -->}} <!-- IMAGE --> | imagefile = {{{imagefile|{{{ipa-image|}}} }}} | imagesize = {{{imagesize|}}} | imagecaption = {{{imagecaption|}}} <!-- DESCRIPTIONS --> | ipa number = {{{ipa number|{{{ipa-number|}}}}}} | ipa link = {{{ipa link|}}} | note1 label = {{{note1 label|}}} | note1 = {{{note1|}}} <!-- ENCODINGS --> | html format = <!-- compose from the decimals -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format html<!-- -->}} | unicode format = <!-- compose from the decimals -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format unicode<!-- -->| unicode={{{unicode|}}}<!-- -->}} | x-sampa = {{{x-sampa|{{{xsampa|}}}}}} | kirshenbaum = {{{kirshenbaum|}}} | braille = {{{braille|}}} | braille2 = {{{braille2|}}} | braille3 = {{{braille3|}}} | braille4 = {{{braille4|}}} | note2 label = {{{note2 label|}}} | note2 = {{{note2|}}} <!-- SOUND --> | soundfile = {{{soundfile|{{{sound| {{IPA symbol|{{{ipa symbol|}}}|output=audio}} }}}}}} }} 7c9xkvujlcevpltu3qgj25qhi9it7af 392886 392843 2026-11-09T09:12:41Z ~2026-59388-70 28966 /* */ 392886 wikitext text/x-wiki <includeonly>{{infobox IPA/core1 <!-- ABOVE-TITLE --> | above = {{{above|}}} <!-- IPA SYMBOL (in big font) --> | ipa symbol=<!-- IF input ipa symbol ELSE compose from decimals1234 -->{{#if: {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format character}}<!-- -->}}<!-- symbols 2--8 for big font pass through without further ado --> | ipa symbol2= {{{ipa symbol2|}}} | ipa symbol3= {{{ipa symbol3|}}} | ipa symbol4= {{{ipa symbol4|}}} | ipa symbol5= {{{ipa symbol5|}}} | ipa symbol6= {{{ipa symbol6|}}} | ipa symbol7= {{{ipa symbol7|}}} | ipa symbol8= {{{ipa symbol8|}}} <!-- CHECK DECIMAL --> | check decimals = <!--check if decimals are numeric -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format check decimals<!-- -->}} <!-- IMAGE --> | imagefile = {{{image|{{{ipa-image|{{{imagefile|}}} }}} }}} | imagesize = {{{imagesize|150px}}} | imagecaption = {{{imagecaption|}}} <!-- DESCRIPTIONS --> | ipa number = {{{ipa number|{{{ipa-number|}}}}}} | note1 label = {{{note1 label|}}} | note1 = {{{note1|}}} <!-- ENCODINGS --> | html format = <!-- compose from the decimals -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format html<!-- -->}} | unicode format = <!-- compose from the decimals -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format unicode<!-- -->| unicode={{{unicode|}}}<!-- -->}} | x-sampa = {{{x-sampa|{{{xsampa|}}}}}} | braille = {{{braille|}}} | braille2 = {{{braille2|}}} | braille3 = {{{braille3|}}} | braille4 = {{{braille4|}}} | note2 label = {{{note2 label|}}} | note2 = {{{note2|}}} <!-- SOUND --> | soundfile = {{yesno|{{{sound|{{{soundfile|{{{audio|{{{audiofile}}} }}} }}} }}}|yes={{{sound|{{{soundfile|{{{audio|{{{audiofile| {{IPA symbol|{{{ipa symbol|}}}|output=audio}} }}} }}} }}} }}} }} | decat = yes <!-- this infobox does not use data rows at all so will always trigger "no data rows" --> }}</includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox IPA with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox IPA]] with unknown parameter "_VALUE_"|ignoreblank=y| above | audio | audiofile | braille | braille2 | braille3 | braille4 | decimal | decimal1 | decimal2 | decimal3 | decimal4 | image | imagecaption | imagefile | imagesize | ipa number | ipa symbol | ipa symbol2 | ipa symbol3 | ipa symbol4 | ipa symbol5 | ipa symbol6 | ipa symbol7 | ipa symbol8 | ipa-image | ipa-number | ipa-text | note1 | note1 label | note2 | note2 label | sound | soundfile | unicode | x-sampa | xsampa }} cogwm7t4wmautydvqc1whz9noq5wrqm 392894 392886 2026-11-09T09:44:18Z ~2026-59426-15 28967 392894 wikitext text/x-wiki {{infobox IPA/core1 <!-- ABOVE-TITLE --> | above = {{{above|}}} <!-- IPA SYMBOL (in big font) --> | ipa symbol=<!-- IF input ipa symbol ELSE compose from decimals1234 -->{{#if: {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{{ipa symbol|{{{ipa-text|}}}}}}<!-- -->| {{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format character}}<!-- -->}}<!-- symbols 2--8 for big font pass through without further ado --> | ipa symbol2= {{{ipa symbol2|}}} | ipa symbol3= {{{ipa symbol3|}}} | ipa symbol4= {{{ipa symbol4|}}} | ipa symbol5= {{{ipa symbol5|}}} | ipa symbol6= {{{ipa symbol6|}}} | ipa symbol7= {{{ipa symbol7|}}} | ipa symbol8= {{{ipa symbol8|}}} | ipa symbol 2-8 exist= {{{ipa symbol2|}}}{{{ipa symbol3|}}}{{{ipa symbol4|}}}{{{ipa symbol5|}}}{{{ipa symbol6|}}}{{{ipa symbol7|}}}{{{ipa symbol8|}}} <!-- CHECK DECIMAL --> | check decimals = <!--check if decimals are numeric -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format check decimals<!-- -->}} <!-- IMAGE --> | imagefile = {{{imagefile|{{{ipa-image|}}} }}} | imagesize = {{{imagesize|}}} | imagecaption = {{{imagecaption|}}} <!-- DESCRIPTIONS --> | ipa number = {{{ipa number|{{{ipa-number|}}}}}} | ipa link = {{{ipa link|}}} | note1 label = {{{note1 label|}}} | note1 = {{{note1|}}} <!-- ENCODINGS --> | html format = <!-- compose from the decimals -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format html<!-- -->}} | unicode format = <!-- compose from the decimals -->{{infobox IPA/format numbers<!-- -->| a={{{decimal1|{{{decimal|}}}}}}<!-- -->| b={{{decimal2|}}}<!-- -->| c={{{decimal3|}}}<!-- -->| d={{{decimal4|}}}<!-- -->| format type=format unicode<!-- -->| unicode={{{unicode|}}}<!-- -->}} | x-sampa = {{{x-sampa|{{{xsampa|}}}}}} | kirshenbaum = {{{kirshenbaum|}}} | braille = {{{braille|}}} | braille2 = {{{braille2|}}} | braille3 = {{{braille3|}}} | braille4 = {{{braille4|}}} | note2 label = {{{note2 label|}}} | note2 = {{{note2|}}} <!-- SOUND --> | soundfile = {{{soundfile|{{{sound| {{IPA symbol|{{{ipa symbol|}}}|output=audio}} }}}}}} }} 7c9xkvujlcevpltu3qgj25qhi9it7af Předłoha:Infobox IPA/core1 10 41796 392844 2026-11-09T07:25:01Z ~2026-59388-70 28966 nowa strona: {{Infobox IPA/core2 | above = {{#if: {{{above|}}}<!-- -->|{{{above|}}}<!-- input abovetext overwrites ipa symbol name -->|{{IPA symbol|{{{ipa symbol|}}}|{{PAGENAME}}|output=name}}<!-- show the page name if error -->}} | ipa symbol ={{{ipa symbol|}}} | ipa symbol2 ={{{ipa symbol2|}}}<!-- 2...8: will be shown, but not used otherwise--> | ipa symbol3 ={{{ipa symbol3|}}} | ipa symbol4 ={{{ipa symbol4|}}} | ipa symbol5 ={{{ipa symbol5|}}} | ipa symbol6 ={{{i… 392844 wikitext text/x-wiki {{Infobox IPA/core2 | above = {{#if: {{{above|}}}<!-- -->|{{{above|}}}<!-- input abovetext overwrites ipa symbol name -->|{{IPA symbol|{{{ipa symbol|}}}|{{PAGENAME}}|output=name}}<!-- show the page name if error -->}} | ipa symbol ={{{ipa symbol|}}} | ipa symbol2 ={{{ipa symbol2|}}}<!-- 2...8: will be shown, but not used otherwise--> | ipa symbol3 ={{{ipa symbol3|}}} | ipa symbol4 ={{{ipa symbol4|}}} | ipa symbol5 ={{{ipa symbol5|}}} | ipa symbol6 ={{{ipa symbol6|}}} | ipa symbol7 ={{{ipa symbol7|}}} | ipa symbol8 ={{{ipa symbol8|}}} <!-- --> | imagefile ={{#if: {{{imagefile|}}}<!-- -->| {{#ifexist:Media:{{{imagefile|}}}<!-- -->| {{{imagefile|}}}<!-- -->}}<!-- -->|}}<!-- no imagefile entered so no imagefilename --> | imagestate ={{#if: {{{ipa symbol|}}} |collapsed|uncollapsed}} | imagecaption ={{{imagecaption|}}} | imagesize ={{{imagesize|}}}<!-- --> | ipa number ={{{ipa number|}}} | ipa link ={{{ipa link|}}} | note1 label ={{{note1 label|}}} | note1 ={{{note1|}}}<!-- --> | html format ={{{html format|}}} | unicode format={{{unicode format|}}} | x-sampa ={{{x-sampa|}}} | kirshenbaum ={{{kirshenbaum|}}} | braille ={{{braille|}}} | braille2 ={{{braille2|}}} | braille3 ={{{braille3|}}} | braille4 ={{{braille4|}}} | check decimals={{{check decimals|}}} | note2 label ={{{note2 label|}}} | note2 ={{{note2|}}}<!-- compose & check soundfile name --> | soundfile ={{#ifexist: Медіа:{{{soundfile|}}} | {{{soundfile}}}}} }} jii8ac19b4bghcgx2u2cbapgg1z5ubx Předłoha:Infobox IPA/core2 10 41797 392845 2026-11-09T07:26:03Z ~2026-59388-70 28966 nowa strona: {{infobox | bodystyle =width: 16em; <!-- acts as a minimum; the max is 300px --> | abovestyle =background: #f2f2ce;<!-- yellowish brown --> | headerstyle =background: #ffffe6;<!-- light yellow --> <!-- ABOVE TITLE --> | above ={{{above|}}} <!-- IPA SYMBOL (in big font) --> | header1 ={{#if: {{{ipa symbol|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol|}}}}}<!-- --></span><… 392845 wikitext text/x-wiki {{infobox | bodystyle =width: 16em; <!-- acts as a minimum; the max is 300px --> | abovestyle =background: #f2f2ce;<!-- yellowish brown --> | headerstyle =background: #ffffe6;<!-- light yellow --> <!-- ABOVE TITLE --> | above ={{{above|}}} <!-- IPA SYMBOL (in big font) --> | header1 ={{#if: {{{ipa symbol|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol|}}}}}<!-- --></span><!-- -->}}<!-- repeat headerstyle for optional symbols 2, 3, 4--> | header2 = {{#if: {{{ipa symbol2|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol2|}}}}}<!-- --></span><!-- -->}} | header3 ={{#if: {{{ipa symbol3|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol3|}}}}}<!-- --></span><!-- -->}} | header4 ={{#if: {{{ipa symbol4|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol4|}}}}}<!-- --></span><!-- -->}} | header5 ={{#if: {{{ipa symbol5|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol5|}}}}}<!-- --></span><!-- -->}} | header6 ={{#if: {{{ipa symbol6|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol6|}}}}}<!-- --></span><!-- -->}} | header7 ={{#if: {{{ipa symbol7|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol7|}}}}}<!-- --></span><!-- -->}} | header8 ={{#if: {{{ipa symbol8|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol8|}}}}}<!-- --></span><!-- -->}} <!-- IPA NUMBER --> | label16 =[[{{#if: {{{ipa link|}}}|{{{ipa link|}}}<!-- -->|МФА}}|Номер МФА]] | data16 ={{{ipa number|}}} <!-- NOTE1 --> | label17 ={{{note1 label|}}}<!-- optional input --> | data17 ={{{note1|}}} <!-- ENCODINGS --> | header18 ={{#if:<!-- -->{{{html format|}}}{{{unicode format|}}}{{{x-sampa|}}}{{{kirshenbaum|}}}<!-- one or more encodings present so header -->| Кодування }} | label19 =HTML <small>(десяткове)</small> | data19 ={{#iferror:{{{check decimals|}}} ||<!-- -->{{#if: {{{html format|}}} | <code>{{{html format|}}}</code>}}<!-- -->}} | label30 =[[Юнікод]] <small>(hex)</small> | data30 ={{#if: {{{unicode format|}}} | {{{unicode format|}}} }} | label31 =[[X-SAMPA]] | data31 ={{#if: {{{x-sampa|}}} | <code>{{{x-sampa|}}}</code> }} | label32 =[[Кіршенбаум]] | data32 ={{#if: {{{kirshenbaum|}}} | <code>{{{kirshenbaum|}}}</code> }} | label33 ={{нп|МФА Брайль|Брайль||IPA Braille}} | data33 ={{#if: {{{braille|}}} | {{Braille cell|type=6|size=25px|{{{braille|}}}|{{{braille2|}}}|{{{braille3|}}}|{{{braille4|}}}}}}} <!-- NOTE2 --> | label35 ={{{note2 label|}}}<!-- optional input --> | data35 ={{{note2|}}} <!-- CHECK DECIMALS error message --> | data37 ={{{check decimals|}}} <!-- IMAGEFILE --> | data51 = {{#if:{{{imagefile|}}}<!-- -->| {{infobox IPA/image box<!-- -->|imagefile ={{{imagefile|}}}<!-- -->|imagestate ={{{imagestate|collapsed}}}<!-- -->|imagesize ={{{imagesize|}}}<!-- -->|imagecaption={{{imagecaption|}}}<!-- -->}}<!-- -->|}}<!-- if...else: no imagefile no show --> <!-- SOUNDFILE --> | header59 ={{#if: {{{soundfile|}}} | Звучання }} | data60 ={{#if: {{{soundfile|}}}|[[File:{{{soundfile|}}}|150px|center|noicon]] <div style="text-align:center"><small>[[:File:{{{soundfile|}}}|джерело]]&nbsp;<span style="font-weight:bold;">&middot;</span>&#32;[[Довідка:Поради з використання медіа-вмісту|допомога]]</small></div>}} }} 97rb015bfiq8row24md6jpl0lneohtm 392851 392845 2026-11-09T07:44:43Z ~2026-59388-70 28966 392851 wikitext text/x-wiki {{infobox | bodystyle =width: 16em; <!-- acts as a minimum; the max is 300px --> | abovestyle =background: #f2f2ce;<!-- yellowish brown --> | headerstyle =background: #ffffe6;<!-- light yellow --> <!-- ABOVE TITLE --> | above ={{{above|}}} <!-- IPA SYMBOL (in big font) --> | header1 ={{#if: {{{ipa symbol|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol|}}}}}<!-- --></span><!-- -->}}<!-- repeat headerstyle for optional symbols 2, 3, 4--> | header2 = {{#if: {{{ipa symbol2|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol2|}}}}}<!-- --></span><!-- -->}} | header3 ={{#if: {{{ipa symbol3|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol3|}}}}}<!-- --></span><!-- -->}} | header4 ={{#if: {{{ipa symbol4|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol4|}}}}}<!-- --></span><!-- -->}} | header5 ={{#if: {{{ipa symbol5|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol5|}}}}}<!-- --></span><!-- -->}} | header6 ={{#if: {{{ipa symbol6|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol6|}}}}}<!-- --></span><!-- -->}} | header7 ={{#if: {{{ipa symbol7|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol7|}}}}}<!-- --></span><!-- -->}} | header8 ={{#if: {{{ipa symbol8|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol8|}}}}}<!-- --></span><!-- -->}} <!-- IPA NUMBER --> | label16 =[[{{#if: {{{ipa link|}}}|{{{ipa link|}}}<!-- -->|МФА}}|Номер МФА]] | data16 ={{{ipa number|}}} <!-- NOTE1 --> | label17 ={{{note1 label|}}}<!-- optional input --> | data17 ={{{note1|}}} <!-- ENCODINGS --> | header18 ={{#if:<!-- -->{{{html format|}}}{{{unicode format|}}}{{{x-sampa|}}}{{{kirshenbaum|}}}<!-- one or more encodings present so header -->| Koduwannja }} | label19 =HTML <small>(desjatkowe)</small> | data19 ={{#iferror:{{{check decimals|}}} ||<!-- -->{{#if: {{{html format|}}} | <code>{{{html format|}}}</code>}}<!-- -->}} | label30 =[[Junikod]] <small>(hex)</small> | data30 ={{#if: {{{unicode format|}}} | {{{unicode format|}}} }} | label31 =[[X-SAMPA]] | data31 ={{#if: {{{x-sampa|}}} | <code>{{{x-sampa|}}}</code> }} | label32 =[[Kiršenbaum]] | data32 ={{#if: {{{kirshenbaum|}}} | <code>{{{kirshenbaum|}}}</code> }} | label33 ={{np|MFA Brajl|Brajl||IPA Braille}} | data33 ={{#if: {{{braille|}}} | {{Braille cell|type=6|size=25px|{{{braille|}}}|{{{braille2|}}}|{{{braille3|}}}|{{{braille4|}}}}}}} <!-- NOTE2 --> | label35 ={{{note2 label|}}}<!-- optional input --> | data35 ={{{note2|}}} <!-- CHECK DECIMALS error message --> | data37 ={{{check decimals|}}} <!-- IMAGEFILE --> | data51 = {{#if:{{{imagefile|}}}<!-- -->| {{infobox IPA/image box<!-- -->|imagefile ={{{imagefile|}}}<!-- -->|imagestate ={{{imagestate|collapsed}}}<!-- -->|imagesize ={{{imagesize|}}}<!-- -->|imagecaption={{{imagecaption|}}}<!-- -->}}<!-- -->|}}<!-- if...else: no imagefile no show --> <!-- SOUNDFILE --> | header59 ={{#if: {{{soundfile|}}} | Zwučannja }} | data60 ={{#if: {{{soundfile|}}}|[[File:{{{soundfile|}}}|150px|center|noicon]] <div style="text-align:center"><small>[[:File:{{{soundfile|}}}|джерело]]&nbsp;<span style="font-weight:bold;">&middot;</span>&#32;[[Dowidka:Porady z wykorystannja media-wmistu|dopomoha]]</small></div>}} }} iuypcoe49krbf3n9gd54avtk121pjq9 392852 392851 2026-11-09T07:45:49Z ~2026-59388-70 28966 392852 wikitext text/x-wiki {{infobox | bodystyle =width: 16em; <!-- acts as a minimum; the max is 300px --> | abovestyle =background: #f2f2ce;<!-- yellowish brown --> | headerstyle =background: #ffffe6;<!-- light yellow --> <!-- ABOVE TITLE --> | above ={{{above|}}} <!-- IPA SYMBOL (in big font) --> | header1 ={{#if: {{{ipa symbol|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol|}}}}}<!-- --></span><!-- -->}}<!-- repeat headerstyle for optional symbols 2, 3, 4--> | header2 = {{#if: {{{ipa symbol2|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol2|}}}}}<!-- --></span><!-- -->}} | header3 ={{#if: {{{ipa symbol3|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol3|}}}}}<!-- --></span><!-- -->}} | header4 ={{#if: {{{ipa symbol4|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol4|}}}}}<!-- --></span><!-- -->}} | header5 ={{#if: {{{ipa symbol5|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol5|}}}}}<!-- --></span><!-- -->}} | header6 ={{#if: {{{ipa symbol6|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol6|}}}}}<!-- --></span><!-- -->}} | header7 ={{#if: {{{ipa symbol7|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol7|}}}}}<!-- --></span><!-- -->}} | header8 ={{#if: {{{ipa symbol8|}}}<!-- -->|<span style="font-size: 5em; line-height: 1.2em; vertical-align: super; font-weight: normal;"><!-- -->{{IPA|{{{ipa symbol8|}}}}}<!-- --></span><!-- -->}} <!-- IPA NUMBER --> | label16 =[[{{#if: {{{ipa link|}}}|{{{ipa link|}}}<!-- -->|MFA}}|Nomer MFA]] | data16 ={{{ipa number|}}} <!-- NOTE1 --> | label17 ={{{note1 label|}}}<!-- optional input --> | data17 ={{{note1|}}} <!-- ENCODINGS --> | header18 ={{#if:<!-- -->{{{html format|}}}{{{unicode format|}}}{{{x-sampa|}}}{{{kirshenbaum|}}}<!-- one or more encodings present so header -->| Koduwannja }} | label19 =HTML <small>(desjatkowe)</small> | data19 ={{#iferror:{{{check decimals|}}} ||<!-- -->{{#if: {{{html format|}}} | <code>{{{html format|}}}</code>}}<!-- -->}} | label30 =[[Junikod]] <small>(hex)</small> | data30 ={{#if: {{{unicode format|}}} | {{{unicode format|}}} }} | label31 =[[X-SAMPA]] | data31 ={{#if: {{{x-sampa|}}} | <code>{{{x-sampa|}}}</code> }} | label32 =[[Kiršenbaum]] | data32 ={{#if: {{{kirshenbaum|}}} | <code>{{{kirshenbaum|}}}</code> }} | label33 ={{np|MFA Brajl|Brajl||IPA Braille}} | data33 ={{#if: {{{braille|}}} | {{Braille cell|type=6|size=25px|{{{braille|}}}|{{{braille2|}}}|{{{braille3|}}}|{{{braille4|}}}}}}} <!-- NOTE2 --> | label35 ={{{note2 label|}}}<!-- optional input --> | data35 ={{{note2|}}} <!-- CHECK DECIMALS error message --> | data37 ={{{check decimals|}}} <!-- IMAGEFILE --> | data51 = {{#if:{{{imagefile|}}}<!-- -->| {{infobox IPA/image box<!-- -->|imagefile ={{{imagefile|}}}<!-- -->|imagestate ={{{imagestate|collapsed}}}<!-- -->|imagesize ={{{imagesize|}}}<!-- -->|imagecaption={{{imagecaption|}}}<!-- -->}}<!-- -->|}}<!-- if...else: no imagefile no show --> <!-- SOUNDFILE --> | header59 ={{#if: {{{soundfile|}}} | Zwučannja }} | data60 ={{#if: {{{soundfile|}}}|[[File:{{{soundfile|}}}|150px|center|noicon]] <div style="text-align:center"><small>[[:File:{{{soundfile|}}}|джерело]]&nbsp;<span style="font-weight:bold;">&middot;</span>&#32;[[Dowidka:Porady z wykorystannja media-wmistu|dopomoha]]</small></div>}} }} g41ijskqvchsxz8blp3p4y1uhn3yyfb Předłoha:Infobox 10 41798 392846 2026-11-09T07:27:17Z ~2026-59388-70 28966 nowa strona: {{#invoke:Kartka|infobox}} 392846 wikitext text/x-wiki {{#invoke:Kartka|infobox}} 82v84mvx45vjg4qa1acr0xh517b2gl8 392847 392846 2026-11-09T07:31:29Z ~2026-59388-70 28966 /* */ 392847 wikitext text/x-wiki {{#invoke:infobox|infobox}} ifb1ly0a13p1xud4h3nkh0hzw58fvnw 392848 392847 2026-11-09T07:31:50Z ~2026-59388-70 28966 /* */ 392848 wikitext text/x-wiki {{#invoke:Infobox|infobox}} s8jzom7gynliljvl1feg3z4v8hrfh43 Modul:Infobox 828 41799 392849 2026-11-09T07:32:43Z ~2026-59388-70 28966 nowa strona: local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local yesno = require("Module:Yesno") local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$'… 392849 Scribunto text/plain local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local yesno = require("Module:Yesno") local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and ( sval:match( '^%s*<%s*[Tt][Rr]' ) or sval:match( '^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]' ) ) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass( isUntitledChildBox( rowArgs.header ) and 'infobox-hiddenrow' or nil ) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args.headerclass) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args.headerstyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.decat) then root:wikitext( '[[Category:Pages using infobox templates with ignored data cells]]' ) end elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args.labelstyle) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args.title then return end has_rows = true has_list_class({args.titleclass}) root :tag('caption') :addClass('infobox-title') :addClass(args.titleclass) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args.titlestyle) :wikitext(args.title) end local function renderAboveRow() if not args.above then return end has_rows = true has_list_class({ args.aboveclass }) root :tag('tr') :addClass( isUntitledChildBox( args.above ) and 'infobox-hiddenrow' or nil ) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args.aboveclass) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args.abovestyle) :wikitext(fixChildBoxes(args.above,'th')) end local function renderBelowRow() if not args.below then return end has_rows = true has_list_class({ args.belowclass }) root :tag('tr') :addClass( isUntitledChildBox( args.below ) and 'infobox-hiddenrow' or nil ) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args.belowclass) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args.belowstyle) :wikitext(fixChildBoxes(args.below,'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass( isUntitledChildBox( subheaderArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args.subheader then args.subheader1 = args.subheader end if args.subheaderrowclass then args.subheaderrowclass1 = args.subheaderrowclass end local subheadernums = getArgNums('subheader') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['subheader' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args.subheaderstyle, rowcellstyle = args['subheaderstyle' .. tostring(num)], class = args.subheaderclass, rowclass = args['subheaderrowclass' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass( isUntitledChildBox( imageArgs.data ) and 'infobox-hiddenrow' or nil ) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args.image then args.image1 = args.image end if args.caption then args.caption1 = args.caption end local imagenums = getArgNums('image') for k, num in ipairs(imagenums) do local caption = args['caption' .. tostring(num)] local data = mw.html.create():wikitext(args['image' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args.captionstyle) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args.imagestyle, class = args.imageclass, rowclass = args['imagerowclass' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args.autoheaders then return end local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['header' .. tostring(num)] then if lastheader then args['header' .. tostring(lastheader)] = nil end lastheader = num elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['data' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['header' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['header' .. tostring(num)], label = args['label' .. tostring(num)], data = args['data' .. tostring(num)], datastyle = args.datastyle, class = args['class' .. tostring(num)], rowclass = args['rowclass' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['rowstyle' .. tostring(num)], rowcellstyle = args['rowcellstyle' .. tostring(num)] }) end end local function renderNavBar() if not args.name then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then root:wikitext(require('Module:Italic title')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.decat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.decat) then return end if args.child == 'yes' then if args.title then root:wikitext( '[[Category:Pages using embedded infobox templates with the title parameter]]' ) end elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Category:Articles using infobox templates with no data rows]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args.bodyclass) -- @deprecated next; target .infobox-<name> :cssText(args.bodystyle) has_list_class({ args.bodyclass }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args.title) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('autoheaders') preprocessSingleArg('child') preprocessSingleArg('bodyclass') preprocessSingleArg('subbox') preprocessSingleArg('bodystyle') preprocessSingleArg('title') preprocessSingleArg('titleclass') preprocessSingleArg('titlestyle') preprocessSingleArg('above') preprocessSingleArg('aboveclass') preprocessSingleArg('abovestyle') preprocessArgs({ {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}} }, 10) preprocessSingleArg('subheaderstyle') preprocessSingleArg('subheaderclass') preprocessArgs({ {prefix = 'image', depend = {'caption', 'imagerowclass'}} }, 10) preprocessSingleArg('captionstyle') preprocessSingleArg('imagestyle') preprocessSingleArg('imageclass') preprocessArgs({ {prefix = 'header'}, {prefix = 'data', depend = {'label'}}, {prefix = 'rowclass'}, {prefix = 'rowstyle'}, {prefix = 'rowcellstyle'}, {prefix = 'class'} }, 50) preprocessSingleArg('headerclass') preprocessSingleArg('headerstyle') preprocessSingleArg('labelstyle') preprocessSingleArg('datastyle') preprocessSingleArg('below') preprocessSingleArg('belowclass') preprocessSingleArg('belowstyle') preprocessSingleArg('name') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['italic title'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p kueb5p6xeoq6x7bxu2zyyl7pmxgesrs Modul:Infobox/styles.css 828 41800 392850 2026-11-09T07:34:50Z ~2026-59388-70 28966 nowa strona: /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete. * Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */ @media (min-width: 640px) { .infobox { /* @no… 392850 sanitized-css text/css /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete. * Starting with bare minimum for the benefit of [[mw:Manual:Safemode]]. */ @media (min-width: 640px) { .infobox { /* @noflip */ margin-left: 1em; /* @noflip */ float: right; /* @noflip */ clear: right; width: 22em; } } /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; color:inherit; } .infobox-3cols-child { margin: -3px; } .infobox .navbar { font-size: 100%; } /* remove when infobox is not a table anymore */ .infobox-hiddenrow, /* we mean it, Minerva. but also Vector 2022 in the future at some point */ body.skin--responsive.skin--responsive .infobox .infobox-hiddenrow { display: none; } /* Dark theme: [[William Wragg]], [[Coral Castle]] */ @media screen { html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; /* switch with var( --color-base ) when supported. */ color: #f8f9fa; } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; /* switch with var( --color-base ) when supported. */ color: #f8f9fa; } } /* Since infobox is a table, many infobox templates take advantage of this to * add columns and rows to the infobox itself rather than as part of a new table * inside them. This class should be discouraged and removed on the long term, * but allows us to at least identify these tables going forward * Currently in use on: [[Module:Infobox3cols]] * Fixes issue described in [[phab:F55300125]] on Vector 2022. */ @media (min-width: 640px) { body.skin--responsive .infobox-table { display: table !important; } body.skin--responsive .infobox-table > caption { display: table-caption !important; } body.skin--responsive .infobox-table > tbody { display: table-row-group; } body.skin--responsive .infobox-table th, body.skin--responsive .infobox-table td { padding-left: inherit; padding-right: inherit; } } bi1nsztkx4350a55cuzjhaotvp5h216 Předłoha:Infobox IPA/format numbers 10 41801 392853 2026-11-09T07:47:23Z ~2026-59388-70 28966 nowa strona: {{#switch: {{{format type|}}} | format character =<!-- -->{{#if: {{{a|}}}|&#{{{a|}}};}}{{#if: {{{b|}}}|&#{{{b|}}};}}<!-- -->{{#if: {{{c|}}}|&#{{{c|}}};}}{{#if: {{{d|}}}|&#{{{d|}}};}}<!-- --> | format check decimals=<!-- -->{{#iferror:{{#expr:0{{{a|}}}}}|{{error|decimal1{{=}}{{{a|}}} is not numeric|tag=span}}<br>|}}<!-- -->{{#iferror:{{#expr:0{{{b|}}}}}|{{error|decimal2{{=}}{{{b|}}} is not numeric|tag=span}}<br>|}}<!-- -->{{#iferror:{{#expr:0{{{c|}}}}}|{{error|decimal3{{=}}{{{c… 392853 wikitext text/x-wiki {{#switch: {{{format type|}}} | format character =<!-- -->{{#if: {{{a|}}}|&#{{{a|}}};}}{{#if: {{{b|}}}|&#{{{b|}}};}}<!-- -->{{#if: {{{c|}}}|&#{{{c|}}};}}{{#if: {{{d|}}}|&#{{{d|}}};}}<!-- --> | format check decimals=<!-- -->{{#iferror:{{#expr:0{{{a|}}}}}|{{error|decimal1{{=}}{{{a|}}} is not numeric|tag=span}}<br>|}}<!-- -->{{#iferror:{{#expr:0{{{b|}}}}}|{{error|decimal2{{=}}{{{b|}}} is not numeric|tag=span}}<br>|}}<!-- -->{{#iferror:{{#expr:0{{{c|}}}}}|{{error|decimal3{{=}}{{{c|}}} is not numeric|tag=span}}<br>|}}<!-- -->{{#iferror:{{#expr:0{{{d|}}}}}|{{error|decimal4{{=}}{{{d|}}} is not numeric|tag=span}}|}} <!-- do not use the template {{IPA}} before inputting in IPAsym --> | format html =<!--just string them together with zero width space (&#x200B;) -->{{#if: {{{a|}}}|&amp;#{{{a|}}};}}{{#if: {{{b|}}}|&#x200B;&amp;#{{{b|}}};}}{{#if: {{{c|}}}|&#x200B;&amp;#{{{c|}}};}}{{#if: {{{d|}}}|&#x200B;&amp;#{{{d|}}};}}<!-- --> <!-- Using &#x2008; (punctuation space) between Unicode codes --> | format unicode =<!--just string them together with small space -->{{#if: {{{unicode|}}} | {{{unicode|}}} |<!-- -->{{#if: {{{a|}}}|U+{{padleft:{{hexadecimal|{{{a|}}}|no}}|4|0}}}}<!-- -->{{#if: {{{b|}}}|&#x2008;U+{{padleft:{{hexadecimal|{{{b|}}}|no}}|4|0}}}}<!-- -->{{#if: {{{c|}}}|&#x2008;U+{{padleft:{{hexadecimal|{{{c|}}}|no}}|4|0}}}}<!-- -->{{#if: {{{d|}}}|&#x2008;U+{{padleft:{{hexadecimal|{{{d|}}}|no}}|4|0}}}}<!-- -->}}<!-- --> | #default =<!-- blank --> }} 3uubpbhrjk73mvwki18urimi4mgdwh5 Předłoha:Hexadecimal 10 41802 392854 2026-11-09T07:49:14Z ~2026-59388-70 28966 nowa strona: {{<includeonly>safesubst:</includeonly>#invoke: BaseConvert | convert | n={{{1|0}}} | base=16 | precision=0 | width={{<includeonly>safesubst:</includeonly>#switch:{{{2}}}|no|none=2|#default=0}} | suffix={{<includeonly>safesubst:</includeonly>#switch:{{{2}}}|no|none|digit=|hex=<sub>hex</sub>|#default=<sub>16</sub>}} }} 392854 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke: BaseConvert | convert | n={{{1|0}}} | base=16 | precision=0 | width={{<includeonly>safesubst:</includeonly>#switch:{{{2}}}|no|none=2|#default=0}} | suffix={{<includeonly>safesubst:</includeonly>#switch:{{{2}}}|no|none|digit=|hex=<sub>hex</sub>|#default=<sub>16</sub>}} }} mc47ui0t13nsp480frmvybi3c9p6ief Modul:BaseConvert 828 41803 392855 2026-11-09T07:50:20Z ~2026-59388-70 28966 nowa strona: local p = {} local digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' local function normalizeFullWidthChars(s) return mw.ustring.gsub(s, '[!-~]', function(s) return mw.ustring.char(mw.ustring.codepoint(s, 1) - 0xFEE0) end) end local function _convert(n, base, from, precision, width, default, prefix, suffix) n = tostring(n) -- strip off any leading '0x' (unless x is a valid digit in the input base) from = tonumber(from) if not from or from < 34 then local c n,… 392855 Scribunto text/plain local p = {} local digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' local function normalizeFullWidthChars(s) return mw.ustring.gsub(s, '[!-~]', function(s) return mw.ustring.char(mw.ustring.codepoint(s, 1) - 0xFEE0) end) end local function _convert(n, base, from, precision, width, default, prefix, suffix) n = tostring(n) -- strip off any leading '0x' (unless x is a valid digit in the input base) from = tonumber(from) if not from or from < 34 then local c n, c = n:gsub('^(-?)0[Xx]', '%1') if c > 0 and not from then from = 16 end end -- check for a negative sign. Do this while the input is still in string form, -- because tonumber doesn't support negative numbers in non-10 bases. local sign = '' local c n, c = n:gsub('^-', '') if c > 0 then sign = '-' end -- replace any full-width Unicode characters in the string with their ASCII equivalents n = normalizeFullWidthChars(n) -- handle scientific notation with whitespace around the 'e' e.g. '5 e7' n = n:gsub('%s*[eE]%s*', 'e') from = from or 10 local num = tonumber(n, from) base = tonumber(base) precision = tonumber(precision) width = tonumber(width) if not num or not base then return default or n end local i, f = math.modf(num) local t = {} repeat local d = (i % base) + 1 i = math.floor(i / base) table.insert(t, 1, digits:sub(d, d)) until i == 0 while #t < (width or 0) do table.insert(t, 1, '0') end local intPart = table.concat(t, '') -- compute the fractional part local tf = {} while f > 0 and #tf < (precision or 10) do f = f * base i, f = math.modf(f) table.insert(tf, digits:sub(i + 1, i + 1)) end -- add trailing zeros if needed if precision and #tf < precision then for i = 1, precision - #tf do table.insert(tf, '0') end end local fracPart = table.concat(tf, '') -- remove trailing zeros if not needed if not precision then fracPart = fracPart:gsub('0*$', '') end -- add the radix point if needed if #fracPart > 0 then fracPart = '.' .. fracPart end return (prefix or '') .. sign .. intPart .. fracPart .. (suffix or '') end function p.convert(frame) -- Allow for invocation via #invoke or directly from another module local args if frame == mw.getCurrentFrame() then args = frame.args else args = frame end local n = args.n local base = args.base local from = args.from local precision = args.precision local width = args.width local default = args.default local prefix = args.prefix local suffix = args.suffix return _convert(n, base, from, precision, width, default, prefix, suffix) end setmetatable(p, { __index = function(t, k) local from, base = k:match('^([0-9]+)to([0-9]+)$') if not from then return nil end return function(frame) local args = frame.args return _convert(mw.text.trim(args[1]), base, from, args.precision, args.width, args.default, args.prefix, args.suffix) end end }) return p pittardebat8getcpz6hwvf6a7wspqr Předłoha:Np 10 41804 392856 2026-11-09T07:53:20Z ~2026-59388-70 28966 nowa strona: <includeonly>{{#invoke:He perekładeno|main}}</includeonly> 392856 wikitext text/x-wiki <includeonly>{{#invoke:He perekładeno|main}}</includeonly> 128ti0md9veq5mocpw5c6dwaf6nns9p 392858 392856 2026-11-09T08:13:37Z ~2026-59388-70 28966 392858 wikitext text/x-wiki <includeonly>{{#invoke:Ne perekładeno|main}}</includeonly> hkv0n048392k6vuyc61sszb6h1w1jdu Modul:Ne perekładeno 828 41805 392857 2026-11-09T08:08:22Z ~2026-59388-70 28966 nowa strona: -- Модуль покликаний замінити, а згодом розширити новим функціоналом вікікод -- однойменного шаблону. -- TODO Докоментувати код -- TODO Створити документацію до модуля -- TODO Імплементувати фічі роботи з ВД запропоновані Атою на СО шаблону local p = {} -- Щоб порожні використа… 392857 Scribunto text/plain -- Модуль покликаний замінити, а згодом розширити новим функціоналом вікікод -- однойменного шаблону. -- TODO Докоментувати код -- TODO Створити документацію до модуля -- TODO Імплементувати фічі роботи з ВД запропоновані Атою на СО шаблону local p = {} -- Щоб порожні використання параметрів вважались нілевими. Нілеві значення, на -- відміну від порожніх рядків, дають булеву хибу для умовних операторів. -- Кращий спосіб робити цю валідацію вітається. local function init(vari) if vari == "" then return nil else return vari; end end -- має замінити [[Шаблон:Не перекладено/lang]] local function conjugatedLanguagePhrase(language, nocat) -- TODO відсортувати за абеткою (будь-якою) -- TODO замінити на якусь дуже розумну функцію з витягуванням назв мов з -- рушія, або ж на використання функції з іншого модуля local phrase = ""; local cat = ""; -- TODO зробити кращий вивід категорій-індикаторів помилок local languagePairs = { ["d"] = "Вікіданих", ["simple"] = "англійською", ["en"] = "англійською", ["et"] = "естонською", ["ru"] = "російською", ["de"] = "німецькою", ["fr"] = "французькою", ["la"] = "латиною", ["es"] = "іспанською", ["uk"] = "українською", ["it"] = "італійською", ["pt"] = "португальською", ["pl"] = "польською", ["ba"] = "башкирською", ["el"] = "грецькою", ["bg"] = "болгарською", ["ja"] = "японською", ["jp"] = "японською", ["nl"] = "нідерландською", ["he"] = "на івриті", ["be"] = "білоруською", ["be-tarask"] = "білоруською", ["be-x-old"] = "білоруською", ["sv"] = "шведською", ["fi"] = "фінською", ["lv"] = "латиською", ["ar"] = "арабською", ["zh"] = "китайською", ["az"] = "азербайджанською", ["tr"] = "турецькою", ["lt"] = "литовською", ["hu"] = "угорською", ["no"] = "норвезькою (букмол)", ["nn"] = "норвезькою (нюношк)", ["sr"] = "сербською", ["cs"] = "чеською", ["cz"] = "чеською", ["ga"] = "ірландською", ["ro"] = "румунською", ["crh"] = "кримськотатарською", ["da"] = "данською", ["ca"] = "каталонською", ["hr"] = "хорватською", ["fa"] = "на фарсі", ["sa"] = "санскриті", ["sk"] = "словацькою", ["id"] = "індонезійською", ["ko"] = "корейською", ["os"] = "осетинською", ["is"] = "ісландською", ["mn"] = "монгольською", ["hi"] = "на хінді", ["tt"] = "татарською", ["eu"] = "баскською", ["cy"] = "валлійською", ["mk"] = "македонською", ["uz"] = "узбецькою", ["sl"] = "словенською", ["kk"] = "казахською", ["sq"] = "албанською", ["gd"] = "гаельською", ["eo"] = "есперанто", ["fy"] = "західнофризькою", ["hy"] = "вірменською", ["ka"] = "грузинською", ["mdf"] = "мокшанською", ["nb"] = "норвезькою (букмол)", ["rue"] = "русинською", ["sah"] = "якутською", ["sh"] = "сербохорватською", ["tl"] = "тагальською", ["vi"] = "в'єтнамською", ["yi"] = "на їдиші", ["ms"] = "малайською", ["tg"] = "таджицькою", ["bs"] = "боснійською", ["si"] = "сингальською", ["ur"] = "мовою урду", ["ps"] = "мовою пушту", ["km"] = "кхмерською", ["th"] = "тайською", ["to"] = "тонганською", ["lo"] = "лаоською", ["dv"] = "мальдівською", ["br"] = "бретонською", ["aa"] = "афарською", ["ab"] = "абхазькою", ["af"] = "мовою африкаанс", ["ak"] = "мовою акан", ["am"] = "амхарською", ["an"] = "арагонською", ["as"] = "ассамською", ["av"] = "аварською", ["ay"] = "мовою аймара", ["pap"] = "мовою пап’яменто", ["lb"] = "люксембурзькою", ["ku"] = "курдською", ["so"] = "сомалійською", ["mt"] = "мальтійською", ["na"] = "науруанською", ["ne"] = "непальською", ["gl"] = "галісійською", ["sc"] = "сардинською", ["scn"] = "сицилійською", ["ky"] = "киргизькою", ["wa"] = "валлонською", ["kl"] = "ґренландською", ["fo"] = "фарерською", ["ast"] = "астурійською", ["kv"] = "мовою комі", ["tyv"] = "тувинською", ["ce"] = "чеченською", ["cv"] = "чуваською", ["rw"] = "руандійською", ["haw"] = "гавайською", ["ch"] = "мовою чаморро", ["co"] = "корсиканською", ["als"] = "алеманським діалектом німецької мови", ["ceb"] = "себуанською", ["frp"] = "франко-провансальською", ["bn"] = "бенгальською", ["myv"] = "ерзянською", ["sw"] = "мовою суахілі", ["oc"] = "окситанською", ["arz"] = "єгипетською арабською", ["avk"] = "мовою котава", ["kw"] = "корнською", ["vec"] = "венеційською", ["ta"] = "тамільською", ["szl"] = "сілезькою", ["sco"] = "шотландською рівниною", ["rup"] = "арумунською", ["mr"] = "мовою маратхі", ["ht"] = "гаїтянською креольською", ["hsb"] = "верхньолужицькою", ["vep"] = "вепською", ["nds"] = "нижньонімецькою" } local conjugatedLanguageName = languagePairs[language]; if conjugatedLanguageName then phrase = phrase .. conjugatedLanguageName; else phrase = phrase .. "(помилка: непідтримувана мова)"; if not nocat then cat = cat .. "[[Категорія:Вікіпедія:Статті з непідтримуваною мовою в шаблоні Не перекладено|" .. language .. "]]"; end end local unconjugatable = { ["d"] = true, ["am"] = true, ["eo"] = true, ["he"] = true, ["sa"] = true, ["hi"] = true, ["fa"] = true, ["la"] = true, ["yi"] = true, ["ur"] = true, ["ps"] = true, ["af"] = true, ["ak"] = true, ["ay"] = true, ["pap"] = true, ["kv"] = true, ["ch"] = true, ["als"] = true, ["sw"] = true, ["avk"] = true, ["mr"] = true } if not unconjugatable[language] then phrase = phrase .. " мовою"; end return {phrase, cat}; end -- Головна функція function p.main(frame) -- Витягуємо параметри батьківського шаблону local parent = frame:getParent(); local args = parent.args; -- Перетягування батьківських параметрів у змінні local needed = init(args["треба"]) or init(args[1]); local text = init(args["текст"]) or init(args[2]); local language = init(args["мова"]) or init(args[3]) or "en"; local exist = init(args["є"]) or init(args[4]) or init(args[1]); local quotes = init(args["лапки"]) or init(args[5]); -- відрізати прогалини language = string.gsub(language, "(%s+)", ""); -- Створюємо таблицю поточної сторінки щоб перевірити її пн, щоб разом з -- параметром nocat вирішити чи треба її категоризувати local currentTitle = mw.title.getCurrentTitle(); -- Назва поточної сторінки. Використовуватиметься для ключів сортування local currentTitleText = currentTitle.text; -- Витягуємо параметр nocat local nocat = init(args["nocat"]); -- та перевіряємо простір назв поточної сторінки -- не порожнє значення nocat та нульовий простір назв означають що сторінку -- можна категоризувати. -- інші простори ще й як треба категоризувати, особливо категорією "неактуальний шаблон". -- інакше обхід категорії Вікіпедія:Статті з неактуальним шаблоном Не перекладено -- не виправляє наприклад включення в шаблонах, а це потрібно, бо інакше статті з цим шаблоном -- в цю категорію потрапляють, але шаблону не містять, його треба прибрати з якогось включення local ns = currentTitle.namespace; if ns == 1 or ns == 2 or ns == 3 then nocat = 1; end -- Головна змінна побудови рядка виводу local wrt = ""; -- Таблиця назви яка "треба" if needed == nil then error("Параметр з назвою сторінки яку треба створити обов'язковий (перший параметр, або параметр треба)") end local neededTitle = mw.title.new(needed, ""); -- Булева змінна, яка показує чи існує стаття, яка "треба" local neededExists = neededTitle.exists; -- Створюємо внутрішнє посилання на статтю, що "треба" local linkToNeeded = ""; if quotes then linkToNeeded = linkToNeeded .. "«"; end linkToNeeded = linkToNeeded .. "[["; linkToNeeded = linkToNeeded .. needed; if text then linkToNeeded = linkToNeeded .. "|" .. text; end linkToNeeded = linkToNeeded .. "]]"; if quotes then linkToNeeded = linkToNeeded .. "»"; end -- Не залежно від того чи стаття, що "треба" існує ми робимо на неї -- посилання. Що змінюється — лише колір — і це за нас обробляє рушій wrt = wrt .. linkToNeeded; if neededExists then -- Дії, що здійснюється якщо стаття, яка "треба" існує local alert = mw.html.create("span"); alert:addClass("noprint user-show"); alert:attr("title","Шаблон «не перекладено» не замінено"); alert:css({["color"]="red"}); alert:wikitext("●"); wrt = wrt .. tostring(alert); if not nocat then -- Дії, які здійснюються якщо цю сторінку можна категоризувати wrt = wrt .. "[[Категорія:Вікіпедія:Статті з неактуальним шаблоном Не перекладено|" .. currentTitleText .. "]]" end else -- Дії, які здійснюються якщо стаття, яка "треба" не існує -- Створюємо HTML-елемент тексту у верхньому індексі local sup = mw.html.create("sup"); -- Додаємо до нього клас "noprint" sup:addClass("noprint"); local linkToExist = ""; linkToExist = linkToExist .. "[["; linkToExist = linkToExist .. ":" .. language .. ":" .. exist; if language == "d" then linkToExist = linkToExist .. "#sitelinks-wikipedia"; end linkToExist = linkToExist .. "|"; local span = mw.html.create("span"); local spanCSS = { ["font-size"] = "normal", ["font-style"] = "normal", ["font-weight"] = "normal" } span:css(spanCSS); local spanTitle = ""; -- містить текст, що буде додано до тегів <span></span> -- цей текст спливає при наведені курсура на значок «[en]» -- я (Base) не маю жодного уявлення що б це мало бути, але це порівняння -- з "d" походить з оригінального коду. Потребує дослідження, оскільки -- фічу не документовано. -- Це ж значною мірою стосується й решти умовних операторів, що -- стосуються атрибуту title -- "d" - робить посилання на Вікідані -- Я (Repakr) трохи доповнив документацію --Перевіряємо чи вказано посилання на вікіданих чи ні --Для цього перевіряється чи змінна language містить значення d --Якщо так, то в змінну spanTitle додаємо текст "Сторінка статті (назва_потрібної_статті) на" if language == "d" then spanTitle = spanTitle .. "Сторінка статті ".. needed .. " на"; else --Якщо ні, то тоді перевіряється чи містить змінна exist значення --Якщо так, в змінну spanTitle додаємо текст "(наявна_назва_статті_іншою_мовою) — в" if exist then spanTitle = spanTitle .. exist .. " — в"; else --Якщо ні, в змінну spanTitle додаємо текст «В» spanTitle = spanTitle .. "В"; end --Тепер об'єднуємо значення змінної spanTitle з текстом "ерсія статті «(назва_потрібної_статті)»" spanTitle = spanTitle .. "ерсія статті «".. needed .."»"; end local conjugatedLanguagePhraseAndCat = conjugatedLanguagePhrase(language, nocat, currentTitleText); spanTitle = spanTitle .. " " .. conjugatedLanguagePhraseAndCat[1]; span:attr("title", spanTitle); span:wikitext("[" .. language .. "]"); linkToExist = linkToExist .. tostring(span); linkToExist = linkToExist .. "]]"; linkToExist = linkToExist .. conjugatedLanguagePhraseAndCat[2]; sup:wikitext(linkToExist); wrt = wrt .. tostring(sup); end return wrt; end return p; eyvwyx87q94k4qmz7kc2k9khon6zvt4 Předłoha:Braille cell 10 41806 392859 2026-11-09T08:16:43Z ~2026-59388-70 28966 nowa strona: {{ {{{|safesubst:}}}ifsubst|<!-- Substitution only functioning -->{{{{{|safesubst:}}}Braille cell/dot-id2character|dot-id={{{1|0}}}}} | <!-- Transclusion only functioning -->{{#switch:{{{type|}}}|image|kana|hangul|6|8=|#default={{#if:{{{2|}}}|<templatestyles src="Braille cell/styles.css" />}}}}{{braille cell/main| 1={{trim|{{{1|}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}| is first cell=yes}} | size={{{size|}}} | type={{{type|}}} | caption={{{cap… 392859 wikitext text/x-wiki {{ {{{|safesubst:}}}ifsubst|<!-- Substitution only functioning -->{{{{{|safesubst:}}}Braille cell/dot-id2character|dot-id={{{1|0}}}}} | <!-- Transclusion only functioning -->{{#switch:{{{type|}}}|image|kana|hangul|6|8=|#default={{#if:{{{2|}}}|<templatestyles src="Braille cell/styles.css" />}}}}{{braille cell/main| 1={{trim|{{{1|}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}| is first cell=yes}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} | debug={{yesno|{{{debug|}}}}} }}<!-- -->{{#if:{{{2|}}}{{{3|}}} | {{braille cell/main| 1={{trim|{{{2}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{3|}}}{{{4|}}} | {{braille cell/main| 1={{trim|{{{3}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{4|}}}{{{5|}}} | {{braille cell/main| 1={{trim|{{{4}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{5|}}}{{{6|}}} | {{braille cell/main| 1={{trim|{{{5}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{6|}}}{{{7|}}} | {{braille cell/main| 1={{trim|{{{6}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{7|}}}{{{8|}}} | {{braille cell/main| 1={{trim|{{{7}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{8|}}}{{{9|}}} | {{braille cell/main| 1={{trim|{{{8}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{9|}}}{{{10|}}} | {{braille cell/main| 1={{trim|{{{9}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{10|}}}{{{11|}}} | {{braille cell/main| 1={{trim|{{{10}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{11|}}}{{{12|}}} | {{braille cell/main| 1={{trim|{{{11}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{12|}}}{{{13|}}} | {{braille cell/main| 1={{trim|{{{12}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{13|}}}{{{14|}}} | {{braille cell/main| 1={{trim|{{{13}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{14|}}}{{{15|}}} | {{braille cell/main| 1={{trim|{{{14}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{15|}}}{{{16|}}} | {{braille cell/main| 1={{trim|{{{15}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{16|}}}{{{17|}}} | {{braille cell/main| 1={{trim|{{{16}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{17|}}}{{{18|}}} | {{braille cell/main| 1={{trim|{{{17}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{18|}}}{{{19|}}} | {{braille cell/main| 1={{trim|{{{18}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{19|}}}{{{20|}}} | {{braille cell/main| 1={{trim|{{{19}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{20|}}} | {{braille cell/main| 1={{trim|{{{20}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{21|}}}{{{22|}}}| {{error|Error using {{tlx|Braille cell}}: maximum input (20 braille characters) exceeded after "{{{20|}}}". |tag=span}}{{main other|[[Category:Unsupported braille input|MAX, {{FULLPAGENAME}}]]}}}} }}<noinclude> {{documentation}} </noinclude> mfqmp0sf8yqqcszf70l5ez4fvhel9ui 392860 392859 2026-11-09T08:17:00Z ~2026-59388-70 28966 /* */ 392860 wikitext text/x-wiki {{ {{{|safesubst:}}}ifsubst|<!-- Substitution only functioning -->{{{{{|safesubst:}}}Braille cell/dot-id2character|dot-id={{{1|0}}}}} | <!-- Transclusion only functioning -->{{#switch:{{{type|}}}|image|kana|hangul|6|8=|#default={{#if:{{{2|}}}|<templatestyles src="Braille cell/styles.css" />}}}}{{braille cell/main| 1={{trim|{{{1|}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}| is first cell=yes}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} | debug={{yesno|{{{debug|}}}}} }}<!-- -->{{#if:{{{2|}}}{{{3|}}} | {{braille cell/main| 1={{trim|{{{2}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{3|}}}{{{4|}}} | {{braille cell/main| 1={{trim|{{{3}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{4|}}}{{{5|}}} | {{braille cell/main| 1={{trim|{{{4}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{5|}}}{{{6|}}} | {{braille cell/main| 1={{trim|{{{5}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{6|}}}{{{7|}}} | {{braille cell/main| 1={{trim|{{{6}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{7|}}}{{{8|}}} | {{braille cell/main| 1={{trim|{{{7}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{8|}}}{{{9|}}} | {{braille cell/main| 1={{trim|{{{8}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{9|}}}{{{10|}}} | {{braille cell/main| 1={{trim|{{{9}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{10|}}}{{{11|}}} | {{braille cell/main| 1={{trim|{{{10}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{11|}}}{{{12|}}} | {{braille cell/main| 1={{trim|{{{11}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{12|}}}{{{13|}}} | {{braille cell/main| 1={{trim|{{{12}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{13|}}}{{{14|}}} | {{braille cell/main| 1={{trim|{{{13}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{14|}}}{{{15|}}} | {{braille cell/main| 1={{trim|{{{14}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{15|}}}{{{16|}}} | {{braille cell/main| 1={{trim|{{{15}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{16|}}}{{{17|}}} | {{braille cell/main| 1={{trim|{{{16}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{17|}}}{{{18|}}} | {{braille cell/main| 1={{trim|{{{17}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{18|}}}{{{19|}}} | {{braille cell/main| 1={{trim|{{{18}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{19|}}}{{{20|}}} | {{braille cell/main| 1={{trim|{{{19}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{20|}}} | {{braille cell/main| 1={{trim|{{{20}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{21|}}}{{{22|}}}| {{error|Error using {{tlx|Braille cell}}: maximum input (20 braille characters) exceeded after "{{{20|}}}". |tag=span}}{{main other|[[Category:Unsupported braille input|MAX, {{FULLPAGENAME}}]]}}}} }} cayaeoioscsdebqmyoaqim3ol2969gw 392876 392860 2026-11-09T08:43:26Z ~2026-59388-70 28966 /* */ 392876 wikitext text/x-wiki {{ {{{|safesubst:}}}ifsubst|<!-- Substitution only functioning -->{{{{{|safesubst:}}}Braille cell/dot-id2character|dot-id={{{1|0}}}}} | <!-- Transclusion only functioning -->{{#switch:{{{type|}}}|image|kana|hangul|6|8=|#default={{#if:{{{2|}}}|<templatestyles src="Braille cell/styles.css" />}}}}{{braille cell/main| 1={{trim|{{{1|}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}| is first cell=yes}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} | debug={{yesno|{{{debug|}}}}} }}<!-- -->{{#if:{{{2|}}}{{{3|}}} | {{braille cell/main| 1={{trim|{{{2}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{3|}}}{{{4|}}} | {{braille cell/main| 1={{trim|{{{3}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{4|}}}{{{5|}}} | {{braille cell/main| 1={{trim|{{{4}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{5|}}}{{{6|}}} | {{braille cell/main| 1={{trim|{{{5}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{6|}}}{{{7|}}} | {{braille cell/main| 1={{trim|{{{6}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{7|}}}{{{8|}}} | {{braille cell/main| 1={{trim|{{{7}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{8|}}}{{{9|}}} | {{braille cell/main| 1={{trim|{{{8}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{9|}}}{{{10|}}} | {{braille cell/main| 1={{trim|{{{9}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{10|}}}{{{11|}}} | {{braille cell/main| 1={{trim|{{{10}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{11|}}}{{{12|}}} | {{braille cell/main| 1={{trim|{{{11}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{12|}}}{{{13|}}} | {{braille cell/main| 1={{trim|{{{12}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{13|}}}{{{14|}}} | {{braille cell/main| 1={{trim|{{{13}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{14|}}}{{{15|}}} | {{braille cell/main| 1={{trim|{{{14}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{15|}}}{{{16|}}} | {{braille cell/main| 1={{trim|{{{15}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{16|}}}{{{17|}}} | {{braille cell/main| 1={{trim|{{{16}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{17|}}}{{{18|}}} | {{braille cell/main| 1={{trim|{{{17}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{18|}}}{{{19|}}} | {{braille cell/main| 1={{trim|{{{18}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{19|}}}{{{20|}}} | {{braille cell/main| 1={{trim|{{{19}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{20|}}} | {{braille cell/main| 1={{trim|{{{20}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{21|}}}{{{22|}}}| {{error|Error using {{tlx|Braille cell}}: maximum input (20 braille characters) exceeded after "{{{20|}}}". |tag=span}}{{main other|[[Category:Unsupported braille input|MAX, {{FULLPAGENAME}}]]}}}} }}<noinclude> {{documentation}} </noinclude> mfqmp0sf8yqqcszf70l5ez4fvhel9ui 392877 392876 2026-11-09T08:43:40Z ~2026-59388-70 28966 /* */ 392877 wikitext text/x-wiki {{ {{{|safesubst:}}}ifsubst|<!-- Substitution only functioning -->{{{{{|safesubst:}}}Braille cell/dot-id2character|dot-id={{{1|0}}}}} | <!-- Transclusion only functioning -->{{#switch:{{{type|}}}|image|kana|hangul|6|8=|#default={{#if:{{{2|}}}|<templatestyles src="Braille cell/styles.css" />}}}}{{braille cell/main| 1={{trim|{{{1|}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}| is first cell=yes}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} | debug={{yesno|{{{debug|}}}}} }}<!-- -->{{#if:{{{2|}}}{{{3|}}} | {{braille cell/main| 1={{trim|{{{2}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{3|}}}{{{4|}}} | {{braille cell/main| 1={{trim|{{{3}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{4|}}}{{{5|}}} | {{braille cell/main| 1={{trim|{{{4}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{5|}}}{{{6|}}} | {{braille cell/main| 1={{trim|{{{5}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{6|}}}{{{7|}}} | {{braille cell/main| 1={{trim|{{{6}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{7|}}}{{{8|}}} | {{braille cell/main| 1={{trim|{{{7}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{8|}}}{{{9|}}} | {{braille cell/main| 1={{trim|{{{8}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{9|}}}{{{10|}}} | {{braille cell/main| 1={{trim|{{{9}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{10|}}}{{{11|}}} | {{braille cell/main| 1={{trim|{{{10}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{11|}}}{{{12|}}} | {{braille cell/main| 1={{trim|{{{11}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{12|}}}{{{13|}}} | {{braille cell/main| 1={{trim|{{{12}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{13|}}}{{{14|}}} | {{braille cell/main| 1={{trim|{{{13}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{14|}}}{{{15|}}} | {{braille cell/main| 1={{trim|{{{14}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{15|}}}{{{16|}}} | {{braille cell/main| 1={{trim|{{{15}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{16|}}}{{{17|}}} | {{braille cell/main| 1={{trim|{{{16}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{17|}}}{{{18|}}} | {{braille cell/main| 1={{trim|{{{17}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{18|}}}{{{19|}}} | {{braille cell/main| 1={{trim|{{{18}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{19|}}}{{{20|}}} | {{braille cell/main| 1={{trim|{{{19}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{20|}}} | {{braille cell/main| 1={{trim|{{{20}}}}} | lang={{braille cell/lang2lang-id|lang={{{lang|}}}|type={{{type|}}}}} | size={{{size|}}} | type={{{type|}}} | caption={{{caption|yes}}} | bg={{{background|{{{bg|}}}}}} }} }}<!-- -->{{#if:{{{21|}}}{{{22|}}}| {{error|Error using {{tlx|Braille cell}}: maximum input (20 braille characters) exceeded after "{{{20|}}}". |tag=span}}{{main other|[[Category:Unsupported braille input|MAX, {{FULLPAGENAME}}]]}}}} }} cayaeoioscsdebqmyoaqim3ol2969gw Předłoha:Braille cell/main 10 41807 392861 2026-11-09T08:18:24Z ~2026-59388-70 28966 nowa strona: {{braille cell/main2 | dot-id = {{#switch:{{{lang|}}} | japanese = {{#switch:{{uc:{{{1|}}}}} <!-- Only language-specific (Japanese braille) input is in this list. All other input is handled in #default (English & generic list). Multicell codes are at the end of the list --> | = 0<!-- catch blank input before anything else --> | ぁ | ァ | あ | ァ | ア | ア | A = 1 | っ | ッ | ッ | SOKUON = 2 | ぃ | ィ | い | イ | ィ | イ | I = 12 | わ | ワ | ワ | WA = 3 |… 392861 wikitext text/x-wiki {{braille cell/main2 | dot-id = {{#switch:{{{lang|}}} | japanese = {{#switch:{{uc:{{{1|}}}}} <!-- Only language-specific (Japanese braille) input is in this list. All other input is handled in #default (English & generic list). Multicell codes are at the end of the list --> | = 0<!-- catch blank input before anything else --> | ぁ | ァ | あ | ァ | ア | ア | A = 1 | っ | ッ | ッ | SOKUON = 2 | ぃ | ィ | い | イ | ィ | イ | I = 12 | わ | ワ | ワ | WA = 3 | な | ナ | ナ | NA = 13 | ゐ | ヰ | WI = 23 | に | ニ | ニ | NI = 123 | ゃ | ゅ | ょ | ャ | ュ | ョ | ャ | ュ | ョ | Y | -Y | -Y- = 4 | ぅ | ゥ | う | ウ | ゥ | ウ | U = 14 | ぉ | ォ | お | オ | ォ | オ | O = 24 | ぇ | ェ | え | エ | ェ | エ | 𛀀 | 𛀁 | E = 124 | や | ヤ | ヤ | YA = 34 | ぬ | ヌ | ヌ | ㇴ | NU = 134 | の | ノ | ノ | NO = 234 | ね | ネ | ネ | NE = 1234 | ゙ | ゙ | ゛ | DAKUTEN = 5 | ら | ラ | ラ | ㇻ | RA = 15 | CHOON | CHŌON | ー = 25 | り | リ | リ | ㇼ | RI = 125 | を | ヲ | ヲ | WO = 35 | た | タ | タ | TA = 135 | ゑ | ヱ | WE = 235 | ち | チ | チ | CHI | TI = 1235 | -Y-DAKUTEN | -Y DAKUTEN | Y DAKUTEN = 45 | る | ル | ル | ㇽ | RU = 145 | ろ | ロ | ロ | ㇿ | RO = 245 | れ | レ | レ | ㇾ | RE = 1245 | よ | ヨ | ヨ | YO = 345 | つ | ツ | ツ | TSU | TU = 1345 | と | ト | ト | ㇳ | TO = 2345 | て | テ | テ | TE = 12345 | ゚ | ゚ | ゜ | HANDAKUTEN = 6 | ゕ | ゕ | ヵ | か | カ | カ | KA = 16 | ゎ | ヮ | W | -W | -W- = 26 | き | キ | キ | KI = 126 | 「 | 」 = 36 | は | ハ | ハ | ㇵ | HA = 136 | ひ | ヒ | ヒ | ㇶ | HI = 1236 | -Y-HANDAKUTEN | -Y HANDAKUTEN | Y HANDAKUTEN = 46 | く | ク | ク | ㇰ | KU = 146 | こ | コ | コ | KO = 246 | ヶ | ゖ | け | ケ | ケ | KE = 1246 | ゆ | ユ | ユ | YU = 346 | ふ | フ | フ | ㇷ | FU | HU = 1346 | ほ | ホ | ホ | ㇹ | HO = 2346 | へ | ヘ | ヘ | ㇸ | HE = 12346 | ᄎ | 、| COMMA | , | LATIN = 56 | さ | サ | サ | SA = 156 | 。 | -W DAKUTEN | W DAKUTEN | -W-DAKUTEN = 256 | し | シ | シ | ㇱ | SHI | SI = 1256 | ん | ン | ン | N | 'N = 356 | ま | マ | マ | MA = 1356 | み | ミ | ミ | MI = 12356 | -Y-DAKUTEN HANDAKUTEN | -Y DAKUTEN HANDAKUTEN | Y DAKUTEN HANDAKUTEN = 456 | す | ス | ス | ㇲ | SU = 1456 | そ | ソ | ソ | SO = 2456 | せ | セ | セ | SE = 12456 | む | ム | ム | ㇺ | MU = 13456 | も | モ | モ | MO = 23456 | め | メ | メ | ME = 123456 <!-- multicell --> | が | ガ = 5 16 | ぎ | ギ = 5 126 | ぐ | グ = 5 146 | げ | ゲ = 5 1246 | ご | ゴ = 5 246 | きゃ | キャ = 4 16 | きゅ | キュ = 4 146 | きょ | キョ = 4 246 | ぎゃ | ギャ = 45 16 | ぎゅ | ギュ = 45 146 | ぎょ | ギョ = 45 246 | ざ | ザ = 5 156 | じ | ジ = 5 1256 | ず | ズ = 5 1456 | ぜ | ゼ = 5 12456 | ぞ | ゾ = 5 2456 | しゃ | シャ = 4 156 | しゅ | シュ = 4 1456 | しょ | ショ = 4 2456 | じゃ | ジャ = 45 156 | じゅ | ジュ = 45 1456 | じょ | ジョ = 45 2456 | だ | ダ = 5 135 | ぢ | ヂ = 5 1235 | づ | ヅ = 5 1345 | で | デ = 5 12345 | ど | ド = 5 2345 | ちゃ | チャ = 4 135 | ちゅ | チュ = 4 1345 | ちょ | チョ = 4 2345 | ぢゃ | ヂャ = 45 135 | ぢゅ | ヂュ = 45 1345 | ぢょ | ヂョ = 45 2345 | にゃ | ニャ = 4 13 | にゅ | ニュ = 4 134 | にょ | ニョ = 4 234 | ば | バ = 5 136 | び | ビ = 5 1236 | ぶ | ブ = 5 1346 | べ | ベ = 5 12346 | ぼ | ボ = 5 2346 | ひゃ | ヒャ = 4 136 | ひゅ | ヒュ = 4 1346 | ひょ | ヒョ = 4 2346 | びゃ | ビャ = 45 136 | びゅ | ビュ = 45 1346 | びょ | ビョ = 45 2346 | ぱ | パ = 6 136 | ぴ | ピ = 6 1236 | ぷ | プ = 6 1346 | ぺ | ペ = 6 12346 | ぽ | ポ = 6 2346 | ぴゃ | ピャ = 46 136 | ぴゅ | ピュ = 46 1346 | ぴょ | ピョ = 46 2346 | みゃ | ミャ = 4 1356 | みゅ | ミュ = 4 13456 | みょ | ミョ = 4 23456 | りゃ | リャ = 4 15 | りゅ | リュ = 4 145 | りょ | リョ = 4 245 | ゔ = 5 14 | #default = {{braille cell/english&cell2dot-id|input={{{1|}}}}} }}<!-- end switch list Japanese --> | korean = {{#switch:{{uc:{{{1|}}}}} <!-- See comment wrt Japanese, above --> | = 0<!-- catch blank input before anything else --> | -G | ᆨ = 1 | -R | ᆯ = 2 | -B | ᆸ = 12 | -S | ᆺ = 3 | -J | ᆽ = 13 | -CH | ᆾ = 23 | G- | ᄀ = 4 | N- | ᄂ | NA | 나 = 14 | D- | ᄃ | DA | 다 = 24 | K- | ᄏ | KA | 카 = 124 | YE | ㅖ | ᅨ = 34 | EO | ㅓ | ᅥ = 234 | WO | ㅝ | ᅯ = 1234 | R- | ᄅ = 5 | M- | ᄆ | MA | 마 = 15 | -N | ᆫ = 25 | T- | ᄐ | TA | 타 = 125 | -D | ᆮ = 35 | I | ㅣ | ᅵ = 135 | -K | ᆿ = 235 | AE | ㅐ | ᅢ = 1235 | B- | ᄇ | BA | 바 = 45 | P- | ᄑ | PA | 파 = 145 | H- | ᄒ | HA | 하 = 245 | YA | ㅑ | ᅣ = 345 | E | ㅔ | ᅦ = 1345 | S- | ᄉ = 6 | -M | ᆷ = 26 | A | ㅏ | ᅡ = 126 | O | ㅗ | ᅩ = 136 | -T | ᇀ = 236 | WA | ㅘ | ᅪ = 1236 | J- | ᄌ | JA | 자 = 46 | YU | ㅠ = 146 | EU | ㅡ | ᅳ = 246 | YO | ㅛ | ᅭ = 346 | CH- = 56 | YEO | ㅕ | ᅧ = 156 | -P | ᇁ = 256 | -H | ᇂ = 356 | -NG | ᆼ = 2356 | UI | ㅢ | ᅴ = 2456 | OE | ㅚ | ᅬ = 13456 | GA | 가 = 1246 | SA | 사 = 123 | EOG | 억 = 1456 | ONG | 옹 = 123456 | UL | 울 = 12346 | OG | 옥 = 1346 | YEON | 연 = 16 | UN | 운 = 1245 | ON | 온 = 12356 | AN | 안 = 23456 | EOL | 얼 = 2345 | YEOL | 열 = 1256 | IN | 인 = 12345 | YEONG | 영 = 12456 | EUL | 을 = 2346 | EUN | 은 = 1356 | GAS | 갓 = 456 234 | GEUREONA | 그러나 = 1 14 | GEUREOMYEON | 그러면 = 1 25 | GEURAESEO | 그래서 = 1 234 | GEUREONDE | 그런데 = 1 1345 | GEUREOMEURO | 그러므로 = 1 26 | GEURIGO | 그리고 = 1 136 | GEURIHAYEO | 그리하여 = 1 156 | ᄊ | SS- = 6 6 | ᄁ | KK- = 6 4 | ᄄ | TT- = 6 24 | ᄈ | PP- = 6 45 | ᄍ | JJ- = 6 46 | #default = {{braille cell/english&cell2dot-id|input={{{1|}}}}} }}<!-- end switch list Korean --> | french = {{#switch:{{uc:{{{1|}}}}} | = 0<!-- catch blank input before anything else --> | QUESTION | ? = 26 | CURRENCY = 45 | ( | OPENPARENTHIS = 236 | ) | CLOSEPARENTHESIS = 356 | OPENQUOTE | CLOSEQUOTE | QUOTE | " | “ | ” | « | » | ‘ | ’ = 2356 | CAP | CAPITAL = 46 <!-- french multicells --> | ¥ = 45 13456 | € = 45 15 | $ = 45 234 | £ = 45 123 | § = 345 1234 | & = 345 123456 | © = 345 14 | ® = 345 1235 | ™ = 345 2345 | % | ‰ | ‱ = 345 346 | #default = {{braille cell/english&cell2dot-id|input={{{1|}}}}} }}<!-- end switch list French --> | | #default = {{braille cell/english&cell2dot-id|input={{{1|}}}}} }}<!-- end #switch lang for exceptions, by language, from English --> <!-- MULTICELL THIRD AND FOURTH CELL -->| dot-id3&4 = {{#switch:{{{lang|}}} | french = {{#switch:{{uc:{{{1|}}}}} | ‰ | ‱ = 346}} | #default = {{#switch:{{uc:{{{1|}}}}} | ELLIPSIS | ... = 3 | MDASH | — | &mdash; = 36 36 }} }} | lang = {{{lang|}}} | type = {{#switch:{{lc:{{{type|}}}}}<!-- type=jap or kor uses 6-dot colored cells --> | t | text | unicode = text | textlink = textlink | link = link | jap | japanese | japanese braille | kana = 6dot japanese<!-- separate file set, colored --> | kor | korean | korean braille | hangul = 6dot korean<!-- separate file set, colored --> | 8-dot | 8dot | 8-dots | 8dots | 8 = 8dot | 6-dot | 6dot | 6-dots | 6dots | 6 | i | image | img = 6dot | #default = text }} | input = {{{1|}}} | size = {{#if:{{{size|}}}|{{#iferror:{{#expr:{{{size|0}}}}}|{{{size|}}}|{{{size|}}}px}}|}}<!-- add "px" when number only; default value set in /core when size=blank --> | caption = {{yesno|{{{caption|}}}<!-- -->|yes={{#if:{{{1|}}}|{{{1|}}}|blank}}<!-- -->|blank=alt-for-caption<!-- use the alt=value -->|no=no-caption<!-- show nothing -->}} | bg = {{{bg|}}} }} 213j7vvzzfkttsfkm5aytom4b8n2w76 Předłoha:Braille cell/main2 10 41808 392862 2026-11-09T08:18:57Z ~2026-59388-70 28966 nowa strona: {{#iferror:{{{dot-id|}}}{{{lang|}}}<!-- -->| {{#iferror:{{{lang|}}}|{{{lang|}}}|{{{dot-id|}}}}}{{main other|[[Category:Unsupported braille input{{!}}{{{input|}}}, {{FULLPAGENAME}}]]}}<!-- -->| {{#iferror:{{#expr:{{{dot-id|0}}}}}<!-- MULTICELL (4x via extra template, b/c we don't know dot-id yet & calculating is too expensive) cell1-->|{{braille cell/main2singlecell |dot-id={{first word|{{{dot-id|}}}}} |type={{{type|}}} |size={{{size|}}} |caption = {{{caption|}}} |bg = {{{bg|}}… 392862 wikitext text/x-wiki {{#iferror:{{{dot-id|}}}{{{lang|}}}<!-- -->| {{#iferror:{{{lang|}}}|{{{lang|}}}|{{{dot-id|}}}}}{{main other|[[Category:Unsupported braille input{{!}}{{{input|}}}, {{FULLPAGENAME}}]]}}<!-- -->| {{#iferror:{{#expr:{{{dot-id|0}}}}}<!-- MULTICELL (4x via extra template, b/c we don't know dot-id yet & calculating is too expensive) cell1-->|{{braille cell/main2singlecell |dot-id={{first word|{{{dot-id|}}}}} |type={{{type|}}} |size={{{size|}}} |caption = {{{caption|}}} |bg = {{{bg|}}} }}<!-- cell2-->{{braille cell/main2singlecell |dot-id={{remove first word|{{{dot-id|}}}}} |type={{{type|}}} |size={{{size|}}} |caption = {{{caption|}}} |bg = {{{bg|}}} }}<!-- cell3&4?-->{{#if:{{{dot-id3&4|}}}<!-- cell3-->|{{braille cell/main2singlecell |dot-id={{str number/trim|{{{dot-id3&4|}}}}} |type={{{type|}}} |size={{{size|}}} |caption = {{{caption|}}} |bg = {{{bg|}}} |is dot-id3&4=yes }}<!-- cell4-->{{#iferror:{{#expr:{{{dot-id3&4|}}}}}|{{braille cell/main2singlecell |dot-id={{remove first word|{{{dot-id3&4|}}}}} |type={{{type|}}} |size={{{size|}}} |caption = {{{caption|}}} |bg = {{{bg|}}} |is dot-id3&4=yes }} |}}<!-- end 3&4-->}}<!-- SINGLE CELL-->|{{braille cell/core | dot-id = {{{dot-id|}}} | type = {{{type|}}} | size = {{{size|}}} | character = {{braille cell/dot-id2character|dot-id={{{dot-id|}}}}} | character name = braille pattern {{#switch:{{{dot-id|1}}} |0=blank |900=(whitespace) |901=dot numbers |#default=dots-{{{dot-id|}}}}} | caption = {{#ifeq:{{{dot-id|0}}}|900|no-caption |{{#switch:{{{caption|}}} | = no-caption | no-caption | alt-for-caption = {{{caption|}}} | #default = |{{{caption|}}}&#x20;=&#x20;}}}} | bg = {{{bg|}}} | unicode-id = {{#switch:{{{caption|}}} || no-caption | alt-for-caption = | #default = {{braille cell/dot-id2unicode-id|dot-id={{{dot-id|}}} }}}} }} }}}} gazd7s5wtvrmj8f8czyjzilrff7803n Předłoha:Braille cell/core 10 41809 392863 2026-11-09T08:19:32Z ~2026-59388-70 28966 nowa strona: {{#switch:{{{type|}}} | textlink | text = <span class="brai_cell" title="{{#ifeq:{{{caption|}}} | no-caption || {{#ifeq:{{{caption|}}} | alt-for-caption || {{{caption|}}}}}{{{character|}}} ({{{character name|}}})}}&#x20;{{{unicode-id|}}}" style="color:inherit;background:{{#ifeq:{{{dot-id|0}}}|900|transparent|{{#if:{{{bg|}}}|{{{bg|}}}|var(--background-color-neutral, #eaecf0)}}}}; {{#if:{{{size|}}}|font-size:{{{size|}}};}}<!-- blank to default, set here -->">{{#ifeq:{{{type|}}}|t… 392863 wikitext text/x-wiki {{#switch:{{{type|}}} | textlink | text = <span class="brai_cell" title="{{#ifeq:{{{caption|}}} | no-caption || {{#ifeq:{{{caption|}}} | alt-for-caption || {{{caption|}}}}}{{{character|}}} ({{{character name|}}})}}&#x20;{{{unicode-id|}}}" style="color:inherit;background:{{#ifeq:{{{dot-id|0}}}|900|transparent|{{#if:{{{bg|}}}|{{{bg|}}}|var(--background-color-neutral, #eaecf0)}}}}; {{#if:{{{size|}}}|font-size:{{{size|}}};}}<!-- blank to default, set here -->">{{#ifeq:{{{type|}}}|textlink|[[{{braille cell/dot-id2article|{{{dot-id|}}}}}|{{{character|}}}]]|{{{character|}}}}}</span> | link = {{#if:{{{dot-id|}}}|{{braille cell/dot-id2article|{{{dot-id|}}}}}}} | #default = {{#if:{{{dot-id|}}}|<templatestyles src="Braille cell/core/styles.css"/><!-- -->[[File:{{braille cell/dot-id2filename|dot-id={{{dot-id|}}}|type={{{type|}}}}}<!-- -->|class={{#ifeq:{{{dot-id|0}}}|900|brai_img_transparent|brai_img}} skin-invert-image<!-- -->|{{#if:{{{size|}}}|{{{size|}}}|40px}}<!-- blank to default (40px), set here -->|alt={{{character|}}} ({{{character name|}}})&#x20;<!-- -->{{#switch:{{{caption|}}}|no-caption=| alt-for-caption = {{!}} | #default = {{!}}{{{caption|}}} }}{{{character|}}} ({{{character name|}}}){{#switch:{{{caption|}}}|no-caption|alt-for-caption =| #default=&#x20;{{{unicode-id|}}}}}<!-- -->]]}}}} m3qorqhgk9x2f59tjqmfuphuncvtw2n Předłoha:Braille cell/main2singlecell 10 41810 392864 2026-11-09T08:21:01Z ~2026-59388-70 28966 nowa strona: <!--{{#iferror:{{#expr:{{{dot-id|}}}}} ----- This error check interferes with 1829 braille codes ----- | {{error|Error within {{tlx|Braille cell}} (multicell): incorrect definition "... {{{dot-id|}}}" in the {{yesno|{{{is dot-id3&4|no}}}|yes=/main dot-id3&4=... list|no=list}}.|tag=span}}{{main other|[[Category:Unsupported braille input{{!}}Multicell, {{FULLPAGENAME}}]]}} |-->{{braille cell/core | dot-id = {{{dot-id|}}} | type = {{{type|}}} | size = {{{size|}}} | charac… 392864 wikitext text/x-wiki <!--{{#iferror:{{#expr:{{{dot-id|}}}}} ----- This error check interferes with 1829 braille codes ----- | {{error|Error within {{tlx|Braille cell}} (multicell): incorrect definition "... {{{dot-id|}}}" in the {{yesno|{{{is dot-id3&4|no}}}|yes=/main dot-id3&4=... list|no=list}}.|tag=span}}{{main other|[[Category:Unsupported braille input{{!}}Multicell, {{FULLPAGENAME}}]]}} |-->{{braille cell/core | dot-id = {{{dot-id|}}} | type = {{{type|}}} | size = {{{size|}}} | character = {{braille cell/dot-id2character|dot-id={{{dot-id|}}}}} | character name = braille pattern {{#switch:{{{dot-id|1}}} |0=blank |900 = |901 = dot numbers |#default=dots-{{{dot-id|}}}}} | caption = {{#ifeq:{{{dot-id|0}}}|900|no-caption |{{#switch:{{{caption|}}} | = no-caption | no-caption | alt-for-caption = {{{caption|}}} | #default = {{{caption|}}}&#x20;=&#x20;}}}} | bg = {{{bg|}}} | unicode-id = {{#switch:{{{caption|}}} || no-caption | alt-for-caption = | #default = {{braille cell/dot-id2unicode-id|dot-id={{{dot-id|}}} }}}} <!--}} -->}} edies8gd357klx0rzjgr4cnhnpm4gyv Předłoha:Braille cell/core/styles.css 10 41811 392865 2026-11-09T08:22:34Z ~2026-59388-70 28966 nowa strona: /* {{pp-template]} */ .brai_img img { background: #f8f9fa !important; color:inherit; } .brai_img_transparent img { background: transparent !important; color:inherit; } 392865 sanitized-css text/css /* {{pp-template]} */ .brai_img img { background: #f8f9fa !important; color:inherit; } .brai_img_transparent img { background: transparent !important; color:inherit; } 6sajyj45u3k44f4utl9ni11kdeatv5k Předłoha:Braille cell/dot-id2filename 10 41812 392866 2026-11-09T08:23:59Z ~2026-59388-70 28966 nowa strona: {{#switch:{{lc:{{{type|}}}}} | text =<!-- (unexpected, no file needed) --> | 8dot = {{Braille cell/dot-id2filename-8dot|dot-id={{{dot-id|}}}}} | 6dot japanese = {{#switch:{{{dot-id|}}}<!-- colored --> | 0 = Braille NULL.svg | 1 = Japanese A Braille.svg | 2 = Japanese Sokuon Braille.svg | 12 = Japanese I Braille.svg | 3 = Japanese Wa Braille.svg | 13 = Japanese Na Braille.svg | 23 = Japanese Wi Braille.svg | 123 = Japanese Ni Braille.svg | 4 = Japanese -Y- Braille.svg… 392866 wikitext text/x-wiki {{#switch:{{lc:{{{type|}}}}} | text =<!-- (unexpected, no file needed) --> | 8dot = {{Braille cell/dot-id2filename-8dot|dot-id={{{dot-id|}}}}} | 6dot japanese = {{#switch:{{{dot-id|}}}<!-- colored --> | 0 = Braille NULL.svg | 1 = Japanese A Braille.svg | 2 = Japanese Sokuon Braille.svg | 12 = Japanese I Braille.svg | 3 = Japanese Wa Braille.svg | 13 = Japanese Na Braille.svg | 23 = Japanese Wi Braille.svg | 123 = Japanese Ni Braille.svg | 4 = Japanese -Y- Braille.svg | 14 = Japanese U Braille.svg | 24 = Japanese O Braille.svg | 124 = Japanese E Braille.svg | 34 = Japanese Ya Braille.svg | 134 = Japanese Nu Braille.svg | 234 = Japanese No Braille.svg | 1234 = Japanese Ne Braille.svg | 5 = Japanese Dakuten Braille.svg | 15 = Japanese Ra Braille.svg | 25 = Japanese Choon Braille.svg | 125 = Japanese Ri Braille.svg | 35 = Japanese Wo Braille.svg | 135 = Japanese Ta Braille.svg | 235 = Japanese We Braille.svg | 1235 = Japanese Chi Braille.svg | 45 = Japanese YoonDakuten Braille.svg | 145 = Japanese Ru Braille.svg | 245 = Japanese Ro Braille.svg | 1245 = Japanese Re Braille.svg | 345 = Japanese Yo Braille.svg | 1345 = Japanese Tsu Braille.svg | 2345 = Japanese To Braille.svg | 12345 = Japanese Te Braille.svg | 6 = Japanese Handakuten Braille.svg | 16 = Japanese Ka Braille.svg | 26 = Japanese W Braille.svg | 126 = Japanese Ki Braille.svg | 36 = Braille Hyphen.svg | 136 = Japanese Ha Braille.svg | 236 = Braille QuoteOpen.svg | 1236 = Japanese Hi Braille.svg | 46 = Japanese YoonHandakuten Braille.svg | 146 = Japanese Ku Braille.svg | 246 = Japanese Ko Braille.svg | 1246 = Japanese Ke Braille.svg | 346 = Japanese Yu Braille.svg | 1346 = Japanese Fu Braille.svg | 2346 = Japanese Ho Braille.svg | 12346 = Japanese He Braille.svg | 56 = Braille Correction.svg | 156 = Japanese Sa Braille.svg | 256 = Japanese WDakuten Braille.svg | 1256 = Japanese Shi Braille.svg | 356 = Japanese N Braille.svg | 1356 = Japanese Ma Braille.svg | 2356 = Braille Bracket.svg | 12356 = Japanese Mi Braille.svg | 456 = Japanese YoonDakutenHandakuten Braille.svg | 1456 = Japanese Su Braille.svg | 2456 = Japanese So Braille.svg | 12456 = Japanese Se Braille.svg | 3456 = Braille NumberSign.svg | 13456 = Japanese Mu Braille.svg | 23456 = Japanese Mo Braille.svg | 123456 = Japanese Me Braille.svg | #default={{braille cell/dot-id2filename-8dot|dot-id={{{dot-id|}}}}} }} | 6dot korean = {{#switch:{{{dot-id|}}}<!-- colored --> | 0 = Braille NULL.svg | 1 = Korean Final G Braille.svg | 2 = Korean Final R Braille.svg | 12 = Korean Final B Braille.svg | 3 = Korean Final S Braille.svg | 13 = Korean Final J Braille.svg | 23 = Korean Final Ch Braille.svg | 123 = Braille L.svg | 4 = Korean Initial G Braille.svg | 14 = Korean Initial N Braille.svg | 24 = Korean Initial D Braille.svg | 124 = Korean Initial K Braille.svg | 34 = Braille ST.svg | 134 = Braille M.svg | 234 = Braille S.svg | 1234 = Braille P.svg | 5 = Korean Initial R Braille.svg | 15 = Korean Initial M Braille.svg | 25 = Korean Final N Braille.svg | 125 = Korean Initial T Braille.svg | 35 = Korean Final D Braille.svg | 135 = Braille O.svg | 235 = Korean Final K Braille.svg | 1235 = Braille R.svg | 45 = Korean Initial B Braille.svg | 145 = Korean Initial P Braille.svg | 245 = Korean Initial H Braille.svg | 1245 = Braille G7.svg | 345 = Braille Ä.svg | 1345 = Braille N.svg | 2345 = Braille T.svg | 12345 = Braille Q.svg | 6 = Korean Initial S Braille.svg | 16 = Braille Å.svg | 26 = Korean Final M Braille.svg | 126 = Braille Ê.svg | 36 = Braille Hyphen.svg | 136 = Braille U.svg | 236 = Korean Final T Braille.svg | 1236 = Braille V.svg | 46 = Korean Initial J Braille.svg | 146 = Braille SH.svg | 246 = Braille Ö.svg | 1246 = Braille Ë.svg | 346 = Braille Ò.svg | 1346 = Braille X.svg | 2346 = Braille È.svg | 12346 = Braille AND.svg | 56 = Korean Initial Ch Braille.svg | 156 = Braille Û.svg | 256 = Korean Final P Braille.svg | 1256 = Braille Ü.svg | 356 = Korean Final H Braille.svg | 1356 = Braille Z.svg | 2356 = Korean Final Ng Braille.svg | 12356 = Braille À.svg | 456 = Braille CursiveSign.svg | 1456 = Braille Ô.svg | 2456 = Braille W.svg | 12456 = Braille Ï.svg | 3456 = Braille NumberSign.svg | 13456 = Braille Y.svg | 23456 = Braille Ù.svg | 123456 = Braille É.svg | #default={{braille cell/dot-id2filename-8dot|dot-id={{{dot-id|}}}}} }} | 6dot | #default = {{#switch:{{uc:{{{dot-id|}}}}} | 0 = Braille NULL.svg | 1 = Braille A1.svg | 2 = Braille Comma.svg | 12 = Braille B2.svg | 3 = Braille Apostrophe.svg | 13 = Braille K.svg | 23 = Braille Semicolon.svg | 123 = Braille L.svg | 4 = Braille Accent.svg | 14 = Braille C3.svg | 24 = Braille I9.svg | 124 = Braille F6.svg | 34 = Braille ST.svg | 134 = Braille M.svg | 234 = Braille S.svg | 1234 = Braille P.svg | 5 = Braille ContractionPrefix.svg | 15 = Braille E5.svg | 25 = Braille Colon.svg | 125 = Braille H8.svg | 35 = Braille Asterisk.svg | 135 = Braille O.svg | 235 = Braille ExclamationPoint.svg | 1235 = Braille R.svg | 45 = Braille Currency.svg | 145 = Braille D4.svg | 245 = Braille J0.svg | 1245 = Braille G7.svg | 345 = Braille Ä.svg | 1345 = Braille N.svg | 2345 = Braille T.svg | 12345 = Braille Q.svg | 6 = Braille CapitalSign.svg | 16 = Braille Å.svg | 26 = Braille QuestionMark.svg | 126 = Braille Ê.svg | 36 = Braille Hyphen.svg | 136 = Braille U.svg | 236 = Braille QuoteOpen.svg | 1236 = Braille V.svg | 46 = Braille DecimalPoint.svg | 146 = Braille SH.svg | 246 = Braille Ö.svg | 1246 = Braille Ë.svg | 346 = Braille Ò.svg | 1346 = Braille X.svg | 2346 = Braille È.svg | 12346 = Braille AND.svg | 56 = Braille Correction.svg | 156 = Braille Û.svg | 256 = Braille Period.svg | 1256 = Braille Ü.svg | 356 = Braille QuoteClose.svg | 1356 = Braille Z.svg | 2356 = Braille Bracket.svg | 12356 = Braille À.svg | 456 = Braille CursiveSign.svg | 1456 = Braille Ô.svg | 2456 = Braille W.svg | 12456 = Braille Ï.svg | 3456 = Braille NumberSign.svg | 13456 = Braille Y.svg | 23456 = Braille Ù.svg | 123456 = Braille É.svg | A0 = Braille pattern dots-0 bars-1.svg | A2 = Braille pattern dots-2 bars-1.svg | A3 = Braille pattern dots-3 bars-1.svg | A23 = Braille pattern dots-23 bars-1.svg | A5 = Braille pattern dots-5 bars-1.svg | A25 = Braille pattern dots-25 bars-1.svg | A35 = Braille pattern dots-35 bars-1.svg | A235 = Braille pattern dots-235 bars-1.svg | A6 = Braille pattern dots-6 bars-1.svg | A26 = Braille pattern dots-26 bars-1.svg | A36 = Braille pattern dots-36 bars-1.svg | A236 = Braille pattern dots-236 bars-1.svg | A56 = Braille pattern dots-56 bars-1.svg | A256 = Braille pattern dots-256 bars-1.svg | A356 = Braille pattern dots-356 bars-1.svg | A2356 = Braille pattern dots-2356 bars-1.svg | B0 = Braille pattern dots-0 bars-2.svg | B1 = Braille pattern dots-1 bars-2.svg | B3 = Braille pattern dots-3 bars-2.svg | B13 = Braille pattern dots-13 bars-2.svg | B4 = Braille pattern dots-4 bars-2.svg | B14 = Braille pattern dots-14 bars-2.svg | B34 = Braille pattern dots-34 bars-2.svg | B134 = Braille pattern dots-134 bars-2.svg | B6 = Braille pattern dots-6 bars-2.svg | B16 = Braille pattern dots-16 bars-2.svg | B36 = Braille pattern dots-36 bars-2.svg | B136 = Braille pattern dots-136 bars-2.svg | B46 = Braille pattern dots-46 bars-2.svg | B146 = Braille pattern dots-146 bars-2.svg | B346 = Braille pattern dots-346 bars-2.svg | B1346 = Braille pattern dots-1346 bars-2.svg | C0 = Braille pattern dots-0 bars-3.svg | C1 = Braille pattern dots-1 bars-3.svg | C2 = Braille pattern dots-2 bars-3.svg | C12 = Braille pattern dots-12 bars-3.svg | C4 = Braille pattern dots-4 bars-3.svg | C14 = Braille pattern dots-14 bars-3.svg | C24 = Braille pattern dots-24 bars-3.svg | C124 = Braille pattern dots-124 bars-3.svg | C5 = Braille pattern dots-5 bars-3.svg | C15 = Braille pattern dots-15 bars-3.svg | C25 = Braille pattern dots-25 bars-3.svg | C125 = Braille pattern dots-125 bars-3.svg | C45 = Braille pattern dots-45 bars-3.svg | C145 = Braille pattern dots-145 bars-3.svg | C245 = Braille pattern dots-245 bars-3.svg | C1245 = Braille pattern dots-1245 bars-3.svg | AB0 = Braille pattern dots-0 bars-12.svg | AB3 = Braille pattern dots-3 bars-12.svg | AB6 = Braille pattern dots-6 bars-12.svg | AB36 = Braille pattern dots-36 bars-12.svg | AC0 = Braille pattern dots-0 bars-13.svg | AC2 = Braille pattern dots-2 bars-13.svg | AC5 = Braille pattern dots-5 bars-13.svg | AC25 = Braille pattern dots-25 bars-13.svg | BC0 = Braille pattern dots-0 bars-23.svg | BC1 = Braille pattern dots-1 bars-23.svg | BC4 = Braille pattern dots-4 bars-23.svg | BC14 = Braille pattern dots-14 bars-23.svg | ABC = Braille pattern dots-0 bars-123.svg | #default={{braille cell/dot-id2filename-8dot|dot-id={{{dot-id|}}}}} }} }} 6zk7w95j1xtn0i6l2whhz8eg1xrmvne Předłoha:Braille cell/dot-id2filename-8dot 10 41813 392867 2026-11-09T08:24:32Z ~2026-59388-70 28966 nowa strona: {{{{{|safesubst:}}}#switch:{{{dot-id|}}} | 0 = Braille8 Blank.svg | 1 = Braille8 Dots-1.svg | 2 = Braille8 Dots-2.svg | 12 = Braille8 Dots-12.svg | 3 = Braille8 Dots-3.svg | 13 = Braille8 Dots-13.svg | 23 = Braille8 Dots-23.svg | 123 = Braille8 Dots-123.svg | 4 = Braille8 Dots-4.svg | 14 = Braille8 Dots-14.svg | 24 = Braille8 Dots-42.svg | 124 = Braille8 Dots-142.svg | 34 = Braille8 Dots-43.svg | 134 = Braille8 Dots-143.svg | 234 = Braille8 Dots-423.svg | 1234 = Braille8 Dots-1… 392867 wikitext text/x-wiki {{{{{|safesubst:}}}#switch:{{{dot-id|}}} | 0 = Braille8 Blank.svg | 1 = Braille8 Dots-1.svg | 2 = Braille8 Dots-2.svg | 12 = Braille8 Dots-12.svg | 3 = Braille8 Dots-3.svg | 13 = Braille8 Dots-13.svg | 23 = Braille8 Dots-23.svg | 123 = Braille8 Dots-123.svg | 4 = Braille8 Dots-4.svg | 14 = Braille8 Dots-14.svg | 24 = Braille8 Dots-42.svg | 124 = Braille8 Dots-142.svg | 34 = Braille8 Dots-43.svg | 134 = Braille8 Dots-143.svg | 234 = Braille8 Dots-423.svg | 1234 = Braille8 Dots-1423.svg | 5 = Braille8 Dots-5.svg | 15 = Braille8 Dots-15.svg | 25 = Braille8 Dots-25.svg | 125 = Braille8 Dots-125.svg | 35 = Braille8 Dots-53.svg | 135 = Braille8 Dots-153.svg | 235 = Braille8 Dots-253.svg | 1235 = Braille8 Dots-1253.svg | 45 = Braille8 Dots-45.svg | 145 = Braille8 Dots-145.svg | 245 = Braille8 Dots-425.svg | 1245 = Braille8 Dots-1425.svg | 345 = Braille8 Dots-453.svg | 1345 = Braille8 Dots-1453.svg | 2345 = Braille8 Dots-4253.svg | 12345 = Braille8 Dots-14253.svg | 6 = Braille8 Dots-6.svg | 16 = Braille8 Dots-16.svg | 26 = Braille8 Dots-26.svg | 126 = Braille8 Dots-126.svg | 36 = Braille8 Dots-36.svg | 136 = Braille8 Dots-136.svg | 236 = Braille8 Dots-236.svg | 1236 = Braille8 Dots-1236.svg | 46 = Braille8 Dots-46.svg | 146 = Braille8 Dots-146.svg | 246 = Braille8 Dots-426.svg | 1246 = Braille8 Dots-1426.svg | 346 = Braille8 Dots-436.svg | 1346 = Braille8 Dots-1436.svg | 2346 = Braille8 Dots-4236.svg | 12346 = Braille8 Dots-14236.svg | 56 = Braille8 Dots-56.svg | 156 = Braille8 Dots-156.svg | 256 = Braille8 Dots-256.svg | 1256 = Braille8 Dots-1256.svg | 356 = Braille8 Dots-536.svg | 1356 = Braille8 Dots-1536.svg | 2356 = Braille8 Dots-2536.svg | 12356 = Braille8 Dots-12536.svg | 456 = Braille8 Dots-456.svg | 1456 = Braille8 Dots-1456.svg | 2456 = Braille8 Dots-4256.svg | 12456 = Braille8 Dots-14256.svg | 3456 = Braille8 Dots-4536.svg | 13456 = Braille8 Dots-14536.svg | 23456 = Braille8 Dots-42536.svg | 123456 = Braille8 Dots-142536.svg | 7 = Braille8 Dots-7.svg | 17 = Braille8 Dots-17.svg | 27 = Braille8 Dots-27.svg | 127 = Braille8 Dots-127.svg | 37 = Braille8 Dots-37.svg | 137 = Braille8 Dots-137.svg | 237 = Braille8 Dots-237.svg | 1237 = Braille8 Dots-1237.svg | 47 = Braille8 Dots-47.svg | 147 = Braille8 Dots-147.svg | 247 = Braille8 Dots-427.svg | 1247 = Braille8 Dots-1427.svg | 347 = Braille8 Dots-437.svg | 1347 = Braille8 Dots-1437.svg | 2347 = Braille8 Dots-4237.svg | 12347 = Braille8 Dots-14237.svg | 57 = Braille8 Dots-57.svg | 157 = Braille8 Dots-157.svg | 257 = Braille8 Dots-257.svg | 1257 = Braille8 Dots-1257.svg | 357 = Braille8 Dots-537.svg | 1357 = Braille8 Dots-1537.svg | 2357 = Braille8 Dots-2537.svg | 12357 = Braille8 Dots-12537.svg | 457 = Braille8 Dots-457.svg | 1457 = Braille8 Dots-1457.svg | 2457 = Braille8 Dots-4257.svg | 12457 = Braille8 Dots-14257.svg | 3457 = Braille8 Dots-4537.svg | 13457 = Braille8 Dots-14537.svg | 23457 = Braille8 Dots-42537.svg | 123457 = Braille8 Dots-142537.svg | 67 = Braille8 Dots-67.svg | 167 = Braille8 Dots-167.svg | 267 = Braille8 Dots-267.svg | 1267 = Braille8 Dots-1267.svg | 367 = Braille8 Dots-367.svg | 1367 = Braille8 Dots-1367.svg | 2367 = Braille8 Dots-2367.svg | 12367 = Braille8 Dots-12367.svg | 467 = Braille8 Dots-467.svg | 1467 = Braille8 Dots-1467.svg | 2467 = Braille8 Dots-4267.svg | 12467 = Braille8 Dots-14267.svg | 3467 = Braille8 Dots-4367.svg | 13467 = Braille8 Dots-14367.svg | 23467 = Braille8 Dots-42367.svg | 123467 = Braille8 Dots-142367.svg | 567 = Braille8 Dots-567.svg | 1567 = Braille8 Dots-1567.svg | 2567 = Braille8 Dots-2567.svg | 12567 = Braille8 Dots-12567.svg | 3567 = Braille8 Dots-5367.svg | 13567 = Braille8 Dots-15367.svg | 23567 = Braille8 Dots-25367.svg | 123567 = Braille8 Dots-125367.svg | 4567 = Braille8 Dots-4567.svg | 14567 = Braille8 Dots-14567.svg | 24567 = Braille8 Dots-42567.svg | 124567 = Braille8 Dots-142567.svg | 34567 = Braille8 Dots-45367.svg | 134567 = Braille8 Dots-145367.svg | 234567 = Braille8 Dots-425367.svg | 1234567 = Braille8 Dots-1425367.svg | 8 = Braille8 Dots-8.svg | 18 = Braille8 Dots-18.svg | 28 = Braille8 Dots-28.svg | 128 = Braille8 Dots-128.svg | 38 = Braille8 Dots-38.svg | 138 = Braille8 Dots-138.svg | 238 = Braille8 Dots-238.svg | 1238 = Braille8 Dots-1238.svg | 48 = Braille8 Dots-48.svg | 148 = Braille8 Dots-148.svg | 248 = Braille8 Dots-428.svg | 1248 = Braille8 Dots-1428.svg | 348 = Braille8 Dots-438.svg | 1348 = Braille8 Dots-1438.svg | 2348 = Braille8 Dots-4238.svg | 12348 = Braille8 Dots-14238.svg | 58 = Braille8 Dots-58.svg | 158 = Braille8 Dots-158.svg | 258 = Braille8 Dots-258.svg | 1258 = Braille8 Dots-1258.svg | 358 = Braille8 Dots-538.svg | 1358 = Braille8 Dots-1538.svg | 2358 = Braille8 Dots-2538.svg | 12358 = Braille8 Dots-12538.svg | 458 = Braille8 Dots-458.svg | 1458 = Braille8 Dots-1458.svg | 2458 = Braille8 Dots-4258.svg | 12458 = Braille8 Dots-14258.svg | 3458 = Braille8 Dots-4538.svg | 13458 = Braille8 Dots-14538.svg | 23458 = Braille8 Dots-42538.svg | 123458 = Braille8 Dots-142538.svg | 68 = Braille8 Dots-68.svg | 168 = Braille8 Dots-168.svg | 268 = Braille8 Dots-268.svg | 1268 = Braille8 Dots-1268.svg | 368 = Braille8 Dots-368.svg | 1368 = Braille8 Dots-1368.svg | 2368 = Braille8 Dots-2368.svg | 12368 = Braille8 Dots-12368.svg | 468 = Braille8 Dots-468.svg | 1468 = Braille8 Dots-1468.svg | 2468 = Braille8 Dots-4268.svg | 12468 = Braille8 Dots-14268.svg | 3468 = Braille8 Dots-4368.svg | 13468 = Braille8 Dots-14368.svg | 23468 = Braille8 Dots-42368.svg | 123468 = Braille8 Dots-142368.svg | 568 = Braille8 Dots-568.svg | 1568 = Braille8 Dots-1568.svg | 2568 = Braille8 Dots-2568.svg | 12568 = Braille8 Dots-12568.svg | 3568 = Braille8 Dots-5368.svg | 13568 = Braille8 Dots-15368.svg | 23568 = Braille8 Dots-25368.svg | 123568 = Braille8 Dots-125368.svg | 4568 = Braille8 Dots-4568.svg | 14568 = Braille8 Dots-14568.svg | 24568 = Braille8 Dots-42568.svg | 124568 = Braille8 Dots-142568.svg | 34568 = Braille8 Dots-45368.svg | 134568 = Braille8 Dots-145368.svg | 234568 = Braille8 Dots-425368.svg | 1234568 = Braille8 Dots-1425368.svg | 78 = Braille8 Dots-78.svg | 178 = Braille8 Dots-178.svg | 278 = Braille8 Dots-278.svg | 1278 = Braille8 Dots-1278.svg | 378 = Braille8 Dots-378.svg | 1378 = Braille8 Dots-1378.svg | 2378 = Braille8 Dots-2378.svg | 12378 = Braille8 Dots-12378.svg | 478 = Braille8 Dots-478.svg | 1478 = Braille8 Dots-1478.svg | 2478 = Braille8 Dots-4278.svg | 12478 = Braille8 Dots-14278.svg | 3478 = Braille8 Dots-4378.svg | 13478 = Braille8 Dots-14378.svg | 23478 = Braille8 Dots-42378.svg | 123478 = Braille8 Dots-142378.svg | 578 = Braille8 Dots-578.svg | 1578 = Braille8 Dots-1578.svg | 2578 = Braille8 Dots-2578.svg | 12578 = Braille8 Dots-12578.svg | 3578 = Braille8 Dots-5378.svg | 13578 = Braille8 Dots-15378.svg | 23578 = Braille8 Dots-25378.svg | 123578 = Braille8 Dots-125378.svg | 4578 = Braille8 Dots-4578.svg | 14578 = Braille8 Dots-14578.svg | 24578 = Braille8 Dots-42578.svg | 124578 = Braille8 Dots-142578.svg | 34578 = Braille8 Dots-45378.svg | 134578 = Braille8 Dots-145378.svg | 234578 = Braille8 Dots-425378.svg | 1234578 = Braille8 Dots-1425378.svg | 678 = Braille8 Dots-678.svg | 1678 = Braille8 Dots-1678.svg | 2678 = Braille8 Dots-2678.svg | 12678 = Braille8 Dots-12678.svg | 3678 = Braille8 Dots-3678.svg | 13678 = Braille8 Dots-13678.svg | 23678 = Braille8 Dots-23678.svg | 123678 = Braille8 Dots-123678.svg | 4678 = Braille8 Dots-4678.svg | 14678 = Braille8 Dots-14678.svg | 24678 = Braille8 Dots-42678.svg | 124678 = Braille8 Dots-142678.svg | 34678 = Braille8 Dots-43678.svg | 134678 = Braille8 Dots-143678.svg | 234678 = Braille8 Dots-423678.svg | 1234678 = Braille8 Dots-1423678.svg | 5678 = Braille8 Dots-5678.svg | 15678 = Braille8 Dots-15678.svg | 25678 = Braille8 Dots-25678.svg | 125678 = Braille8 Dots-125678.svg | 35678 = Braille8 Dots-53678.svg | 135678 = Braille8 Dots-153678.svg | 235678 = Braille8 Dots-253678.svg | 1235678 = Braille8 Dots-1253678.svg | 45678 = Braille8 Dots-45678.svg | 145678 = Braille8 Dots-145678.svg | 245678 = Braille8 Dots-425678.svg | 1245678 = Braille8 Dots-1425678.svg | 345678 = Braille8 Dots-453678.svg | 1345678 = Braille8 Dots-1453678.svg | 2345678 = Braille8 Dots-4253678.svg | 12345678 = Braille8 Dots-14253678.svg | 900 = Transparent.gif | 901 = Braille8dotCellNumbering.svg | =<!-- no input; error earlier/elsewhere --> | #default = {{error|Error using {{tlx|braille cell}}: no image file found for braille pattern dots-{{{dot-id|(no input)}}}|tag=p}} }} b1mqhsc2btcma0a2wgx4w867ov4uqj3 Předłoha:First word 10 41814 392868 2026-11-09T08:25:53Z ~2026-59388-70 28966 nowa strona: {{<includeonly>safesubst:</includeonly>#invoke:String|match|s={{{1}}}|^[^{{{sep|%s}}}]*}} 392868 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:String|match|s={{{1}}}|^[^{{{sep|%s}}}]*}} nxvlyxmq8xzfawqul7mlxd0m1ubavpv Předłoha:Remove first word 10 41815 392869 2026-11-09T08:27:02Z ~2026-59388-70 28966 nowa strona: {{<includeonly>safesubst:</includeonly>#invoke:String|replace|source={{{1}}}|pattern=^[^{{{sep|%s}}}]*{{{sep|%s}}}*|replace=|plain=false}}<noinclude>{{Documentation}}</noinclude> 392869 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:String|replace|source={{{1}}}|pattern=^[^{{{sep|%s}}}]*{{{sep|%s}}}*|replace=|plain=false}}<noinclude>{{Documentation}}</noinclude> q3rvb3vj9phd54s3yecz8846q90qfgo 392870 392869 2026-11-09T08:27:12Z ~2026-59388-70 28966 /* */ 392870 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:String|replace|source={{{1}}}|pattern=^[^{{{sep|%s}}}]*{{{sep|%s}}}*|replace=|plain=false}} b1qpropf4vrdku2ixiakqhuw0mpk89w Předłoha:Braille cell/dot-id2character 10 41816 392871 2026-11-09T08:29:41Z ~2026-59388-70 28966 nowa strona: {{{{{|safesubst:}}}#switch:{{{dot-id|}}} | 0 =⠀<!-- U+2800 not U+0020 --> | 1 = ⠁ | 2 = ⠂ | 12 = ⠃ | 3 = ⠄ | 13 = ⠅ | 23 = ⠆ | 123 = ⠇ | 4 = ⠈ | 14 = ⠉ | 24 = ⠊ | 124 = ⠋ | 34 = ⠌ | 134 = ⠍ | 234 = ⠎ | 1234 = ⠏ | 5 = ⠐ | 15 = ⠑ | 25 = ⠒ | 125 = ⠓ | 35 = ⠔ | 135 = ⠕ | 235 = ⠖ | 1235 = ⠗ | 45 = ⠘ | 145 = ⠙ | 245 = ⠚ | 1245 = ⠛ | 345 = ⠜ | 1345 = ⠝ | 2345 = ⠞ | 12345 = ⠟ | 6 = ⠠ | 16 = ⠡ | 26 = ⠢ | 126 = ⠣ | 3… 392871 wikitext text/x-wiki {{{{{|safesubst:}}}#switch:{{{dot-id|}}} | 0 =⠀<!-- U+2800 not U+0020 --> | 1 = ⠁ | 2 = ⠂ | 12 = ⠃ | 3 = ⠄ | 13 = ⠅ | 23 = ⠆ | 123 = ⠇ | 4 = ⠈ | 14 = ⠉ | 24 = ⠊ | 124 = ⠋ | 34 = ⠌ | 134 = ⠍ | 234 = ⠎ | 1234 = ⠏ | 5 = ⠐ | 15 = ⠑ | 25 = ⠒ | 125 = ⠓ | 35 = ⠔ | 135 = ⠕ | 235 = ⠖ | 1235 = ⠗ | 45 = ⠘ | 145 = ⠙ | 245 = ⠚ | 1245 = ⠛ | 345 = ⠜ | 1345 = ⠝ | 2345 = ⠞ | 12345 = ⠟ | 6 = ⠠ | 16 = ⠡ | 26 = ⠢ | 126 = ⠣ | 36 = ⠤ | 136 = ⠥ | 236 = ⠦ | 1236 = ⠧ | 46 = ⠨ | 146 = ⠩ | 246 = ⠪ | 1246 = ⠫ | 346 = ⠬ | 1346 = ⠭ | 2346 = ⠮ | 12346 = ⠯ | 56 = ⠰ | 156 = ⠱ | 256 = ⠲ | 1256 = ⠳ | 356 = ⠴ | 1356 = ⠵ | 2356 = ⠶ | 12356 = ⠷ | 456 = ⠸ | 1456 = ⠹ | 2456 = ⠺ | 12456 = ⠻ | 3456 = ⠼ | 13456 = ⠽ | 23456 = ⠾ | 123456 = ⠿ | 7 = ⡀ | 17 = ⡁ | 27 = ⡂ | 127 = ⡃ | 37 = ⡄ | 137 = ⡅ | 237 = ⡆ | 1237 = ⡇ | 47 = ⡈ | 147 = ⡉ | 247 = ⡊ | 1247 = ⡋ | 347 = ⡌ | 1347 = ⡍ | 2347 = ⡎ | 12347 = ⡏ | 57 = ⡐ | 157 = ⡑ | 257 = ⡒ | 1257 = ⡓ | 357 = ⡔ | 1357 = ⡕ | 2357 = ⡖ | 12357 = ⡗ | 457 = ⡘ | 1457 = ⡙ | 2457 = ⡚ | 12457 = ⡛ | 3457 = ⡜ | 13457 = ⡝ | 23457 = ⡞ | 123457 = ⡟ | 67 = ⡠ | 167 = ⡡ | 267 = ⡢ | 1267 = ⡣ | 367 = ⡤ | 1367 = ⡥ | 2367 = ⡦ | 12367 = ⡧ | 467 = ⡨ | 1467 = ⡩ | 2467 = ⡪ | 12467 = ⡫ | 3467 = ⡬ | 13467 = ⡭ | 23467 = ⡮ | 123467 = ⡯ | 567 = ⡰ | 1567 = ⡱ | 2567 = ⡲ | 12567 = ⡳ | 3567 = ⡴ | 13567 = ⡵ | 23567 = ⡶ | 123567 = ⡷ | 4567 = ⡸ | 14567 = ⡹ | 24567 = ⡺ | 124567 = ⡻ | 34567 = ⡼ | 134567 = ⡽ | 234567 = ⡾ | 1234567 = ⡿ | 8 = ⢀ | 18 = ⢁ | 28 = ⢂ | 128 = ⢃ | 38 = ⢄ | 138 = ⢅ | 238 = ⢆ | 1238 = ⢇ | 48 = ⢈ | 148 = ⢉ | 248 = ⢊ | 1248 = ⢋ | 348 = ⢌ | 1348 = ⢍ | 2348 = ⢎ | 12348 = ⢏ | 58 = ⢐ | 158 = ⢑ | 258 = ⢒ | 1258 = ⢓ | 358 = ⢔ | 1358 = ⢕ | 2358 = ⢖ | 12358 = ⢗ | 458 = ⢘ | 1458 = ⢙ | 2458 = ⢚ | 12458 = ⢛ | 3458 = ⢜ | 13458 = ⢝ | 23458 = ⢞ | 123458 = ⢟ | 68 = ⢠ | 168 = ⢡ | 268 = ⢢ | 1268 = ⢣ | 368 = ⢤ | 1368 = ⢥ | 2368 = ⢦ | 12368 = ⢧ | 468 = ⢨ | 1468 = ⢩ | 2468 = ⢪ | 12468 = ⢫ | 3468 = ⢬ | 13468 = ⢭ | 23468 = ⢮ | 123468 = ⢯ | 568 = ⢰ | 1568 = ⢱ | 2568 = ⢲ | 12568 = ⢳ | 3568 = ⢴ | 13568 = ⢵ | 23568 = ⢶ | 123568 = ⢷ | 4568 = ⢸ | 14568 = ⢹ | 24568 = ⢺ | 124568 = ⢻ | 34568 = ⢼ | 134568 = ⢽ | 234568 = ⢾ | 1234568 = ⢿ | 78 = ⣀ | 178 = ⣁ | 278 = ⣂ | 1278 = ⣃ | 378 = ⣄ | 1378 = ⣅ | 2378 = ⣆ | 12378 = ⣇ | 478 = ⣈ | 1478 = ⣉ | 2478 = ⣊ | 12478 = ⣋ | 3478 = ⣌ | 13478 = ⣍ | 23478 = ⣎ | 123478 = ⣏ | 578 = ⣐ | 1578 = ⣑ | 2578 = ⣒ | 12578 = ⣓ | 3578 = ⣔ | 13578 = ⣕ | 23578 = ⣖ | 123578 = ⣗ | 4578 = ⣘ | 14578 = ⣙ | 24578 = ⣚ | 124578 = ⣛ | 34578 = ⣜ | 134578 = ⣝ | 234578 = ⣞ | 1234578 = ⣟ | 678 = ⣠ | 1678 = ⣡ | 2678 = ⣢ | 12678 = ⣣ | 3678 = ⣤ | 13678 = ⣥ | 23678 = ⣦ | 123678 = ⣧ | 4678 = ⣨ | 14678 = ⣩ | 24678 = ⣪ | 124678 = ⣫ | 34678 = ⣬ | 134678 = ⣭ | 234678 = ⣮ | 1234678 = ⣯ | 5678 = ⣰ | 15678 = ⣱ | 25678 = ⣲ | 125678 = ⣳ | 35678 = ⣴ | 135678 = ⣵ | 235678 = ⣶ | 1235678 = ⣷ | 45678 = ⣸ | 145678 = ⣹ | 245678 = ⣺ | 1245678 = ⣻ | 345678 = ⣼ | 1345678 = ⣽ | 2345678 = ⣾ | 12345678 = ⣿ | 900 = &ensp;<!-- whitespace not dots-0 --> | 901 = | #default = }} q2n1xd3b7chy11zgzs2cgm7rd2smlf5 Předłoha:Braille cell/dot-id2unicode-id 10 41817 392872 2026-11-09T08:31:01Z ~2026-59388-70 28966 nowa strona: {{{{{|safesubst:}}}#switch:{{{dot-id|}}} | 0 = U+2800 | 1 = U+2801 | 2 = U+2802 | 12 = U+2803 | 3 = U+2804 | 13 = U+2805 | 23 = U+2806 | 123 = U+2807 | 4 = U+2808 | 14 = U+2809 | 24 = U+280A | 124 = U+280B | 34 = U+280C | 134 = U+280D | 234 = U+280E | 1234 = U+280F | 5 = U+2810 | 15 = U+2811 | 25 = U+2812 | 125 = U+2813 | 35 = U+2814 | 135 = U+2815 | 235 = U+2816 | 1235 = U+2817 | 45 = U+2818 | 145 = U+2819 | 245 = U+281A | 1245 = U+281B | 345 = U+281C | 1345 = U+281D | 2345 =… 392872 wikitext text/x-wiki {{{{{|safesubst:}}}#switch:{{{dot-id|}}} | 0 = U+2800 | 1 = U+2801 | 2 = U+2802 | 12 = U+2803 | 3 = U+2804 | 13 = U+2805 | 23 = U+2806 | 123 = U+2807 | 4 = U+2808 | 14 = U+2809 | 24 = U+280A | 124 = U+280B | 34 = U+280C | 134 = U+280D | 234 = U+280E | 1234 = U+280F | 5 = U+2810 | 15 = U+2811 | 25 = U+2812 | 125 = U+2813 | 35 = U+2814 | 135 = U+2815 | 235 = U+2816 | 1235 = U+2817 | 45 = U+2818 | 145 = U+2819 | 245 = U+281A | 1245 = U+281B | 345 = U+281C | 1345 = U+281D | 2345 = U+281E | 12345 = U+281F | 6 = U+2820 | 16 = U+2821 | 26 = U+2822 | 126 = U+2823 | 36 = U+2824 | 136 = U+2825 | 236 = U+2826 | 1236 = U+2827 | 46 = U+2828 | 146 = U+2829 | 246 = U+282A | 1246 = U+282B | 346 = U+282C | 1346 = U+282D | 2346 = U+282E | 12346 = U+282F | 56 = U+2830 | 156 = U+2831 | 256 = U+2832 | 1256 = U+2833 | 356 = U+2834 | 1356 = U+2835 | 2356 = U+2836 | 12356 = U+2837 | 456 = U+2838 | 1456 = U+2839 | 2456 = U+283A | 12456 = U+283B | 3456 = U+283C | 13456 = U+283D | 23456 = U+283E | 123456 = U+283F | 7 = U+2840 | 17 = U+2841 | 27 = U+2842 | 127 = U+2843 | 37 = U+2844 | 137 = U+2845 | 237 = U+2846 | 1237 = U+2847 | 47 = U+2848 | 147 = U+2849 | 247 = U+284A | 1247 = U+284B | 347 = U+284C | 1347 = U+284D | 2347 = U+284E | 12347 = U+284F | 57 = U+2850 | 157 = U+2851 | 257 = U+2852 | 1257 = U+2853 | 357 = U+2854 | 1357 = U+2855 | 2357 = U+2856 | 12357 = U+2857 | 457 = U+2858 | 1457 = U+2859 | 2457 = U+285A | 12457 = U+285B | 3457 = U+285C | 13457 = U+285D | 23457 = U+285E | 123457 = U+285F | 67 = U+2860 | 167 = U+2861 | 267 = U+2862 | 1267 = U+2863 | 367 = U+2864 | 1367 = U+2865 | 2367 = U+2866 | 12367 = U+2867 | 467 = U+2868 | 1467 = U+2869 | 2467 = U+286A | 12467 = U+286B | 3467 = U+286C | 13467 = U+286D | 23467 = U+286E | 123467 = U+286F | 567 = U+2870 | 1567 = U+2871 | 2567 = U+2872 | 12567 = U+2873 | 3567 = U+2874 | 13567 = U+2875 | 23567 = U+2876 | 123567 = U+2877 | 4567 = U+2878 | 14567 = U+2879 | 24567 = U+287A | 124567 = U+287B | 34567 = U+287C | 134567 = U+287D | 234567 = U+287E | 1234567 = U+287F | 8 = U+2880 | 18 = U+2881 | 28 = U+2882 | 128 = U+2883 | 38 = U+2884 | 138 = U+2885 | 238 = U+2886 | 1238 = U+2887 | 48 = U+2888 | 148 = U+2889 | 248 = U+288A | 1248 = U+288B | 348 = U+288C | 1348 = U+288D | 2348 = U+288E | 12348 = U+288F | 58 = U+2890 | 158 = U+2891 | 258 = U+2892 | 1258 = U+2893 | 358 = U+2894 | 1358 = U+2895 | 2358 = U+2896 | 12358 = U+2897 | 458 = U+2898 | 1458 = U+2899 | 2458 = U+289A | 12458 = U+289B | 3458 = U+289C | 13458 = U+289D | 23458 = U+289E | 123458 = U+289F | 68 = U+28A0 | 168 = U+28A1 | 268 = U+28A2 | 1268 = U+28A3 | 368 = U+28A4 | 1368 = U+28A5 | 2368 = U+28A6 | 12368 = U+28A7 | 468 = U+28A8 | 1468 = U+28A9 | 2468 = U+28AA | 12468 = U+28AB | 3468 = U+28AC | 13468 = U+28AD | 23468 = U+28AE | 123468 = U+28AF | 568 = U+28B0 | 1568 = U+28B1 | 2568 = U+28B2 | 12568 = U+28B3 | 3568 = U+28B4 | 13568 = U+28B5 | 23568 = U+28B6 | 123568 = U+28B7 | 4568 = U+28B8 | 14568 = U+28B9 | 24568 = U+28BA | 124568 = U+28BB | 34568 = U+28BC | 134568 = U+28BD | 234568 = U+28BE | 1234568 = U+28BF | 78 = U+28C0 | 178 = U+28C1 | 278 = U+28C2 | 1278 = U+28C3 | 378 = U+28C4 | 1378 = U+28C5 | 2378 = U+28C6 | 12378 = U+28C7 | 478 = U+28C8 | 1478 = U+28C9 | 2478 = U+28CA | 12478 = U+28CB | 3478 = U+28CC | 13478 = U+28CD | 23478 = U+28CE | 123478 = U+28CF | 578 = U+28D0 | 1578 = U+28D1 | 2578 = U+28D2 | 12578 = U+28D3 | 3578 = U+28D4 | 13578 = U+28D5 | 23578 = U+28D6 | 123578 = U+28D7 | 4578 = U+28D8 | 14578 = U+28D9 | 24578 = U+28DA | 124578 = U+28DB | 34578 = U+28DC | 134578 = U+28DD | 234578 = U+28DE | 1234578 = U+28DF | 678 = U+28E0 | 1678 = U+28E1 | 2678 = U+28E2 | 12678 = U+28E3 | 3678 = U+28E4 | 13678 = U+28E5 | 23678 = U+28E6 | 123678 = U+28E7 | 4678 = U+28E8 | 14678 = U+28E9 | 24678 = U+28EA | 124678 = U+28EB | 34678 = U+28EC | 134678 = U+28ED | 234678 = U+28EE | 1234678 = U+28EF | 5678 = U+28F0 | 15678 = U+28F1 | 25678 = U+28F2 | 125678 = U+28F3 | 35678 = U+28F4 | 135678 = U+28F5 | 235678 = U+28F6 | 1235678 = U+28F7 | 45678 = U+28F8 | 145678 = U+28F9 | 245678 = U+28FA | 1245678 = U+28FB | 345678 = U+28FC | 1345678 = U+28FD | 2345678 = U+28FE | 12345678 = U+28FF | #default = }} 4370l295lq7mmrgma9ai9wlh3dr1mva Předłoha:Yesno 10 41818 392873 2026-11-09T08:34:04Z ~2026-59388-70 28966 nowa strona: {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |f |false |off |0 = {{{no|}}} | = {{{blank|{{{no|}}}}}} |¬ = {{{¬|}}} |yes |y |t |true |on |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }} 392873 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |f |false |off |0 = {{{no|}}} | = {{{blank|{{{no|}}}}}} |¬ = {{{¬|}}} |yes |y |t |true |on |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }} exj64bhbtak0kl9yuwuhoo8t2j1kgpf Předłoha:Braille 10 41819 392874 2026-11-09T08:39:34Z ~2026-59388-70 28966 nowa strona: {{#invoke:navbox|navbox | name = Braille | title = [[Braille]]{{pad|0.5em}}⠃⠗⠁⠊⠇⠇⠑ | state = {{{state<includeonly>|autocollapse</includeonly>}}} | border = {{{border|}}}<!--enables embedding--> | listclass = hlist | nowrapitems = yes | group1 = Braille cell | list1 = * [[1829 braille]] * [[International uniformity of braille alphabets|International uniformity]] * [[Braille ASCII|ASCII braille]] {{#invoke:navbox|navbox|child | listclass = hlist | g… 392874 wikitext text/x-wiki {{#invoke:navbox|navbox | name = Braille | title = [[Braille]]{{pad|0.5em}}⠃⠗⠁⠊⠇⠇⠑ | state = {{{state<includeonly>|autocollapse</includeonly>}}} | border = {{{border|}}}<!--enables embedding--> | listclass = hlist | nowrapitems = yes | group1 = Braille cell | list1 = * [[1829 braille]] * [[International uniformity of braille alphabets|International uniformity]] * [[Braille ASCII|ASCII braille]] {{#invoke:navbox|navbox|child | listclass = hlist | group10 = [[Braille Patterns|Unicode<br>Braille Patterns]] | list10 = * [[Braille pattern dots-0|⠀]] * [[Braille pattern dots-1|⠁]] * [[Braille pattern dots-12|⠃]] * [[Braille pattern dots-14|⠉]] * [[Braille pattern dots-145|⠙]] * [[Braille pattern dots-15|⠑]] * [[Braille pattern dots-124|⠋]] * [[Braille pattern dots-1245|⠛]] * [[Braille pattern dots-125|⠓]] * [[Braille pattern dots-24|⠊]] * [[Braille pattern dots-245|⠚]] * [[Braille pattern dots-4|⠈]] * [[Braille pattern dots-45|⠘]] * [[Braille pattern dots-3|⠄]] * [[Braille pattern dots-13|⠅]] * [[Braille pattern dots-123|⠇]] * [[Braille pattern dots-134|⠍]] * [[Braille pattern dots-1345|⠝]] * [[Braille pattern dots-135|⠕]] * [[Braille pattern dots-1234|⠏]] * [[Braille pattern dots-12345|⠟]] * [[Braille pattern dots-1235|⠗]] * [[Braille pattern dots-234|⠎]] * [[Braille pattern dots-2345|⠞]] * [[Braille pattern dots-34|⠌]] * [[Braille pattern dots-345|⠜]] * [[Braille pattern dots-36|⠤]] * [[Braille pattern dots-136|⠥]] * [[Braille pattern dots-1236|⠧]] * [[Braille pattern dots-1346|⠭]] * [[Braille pattern dots-13456|⠽]] * [[Braille pattern dots-1356|⠵]] * [[Braille pattern dots-12346|⠯]] * [[Braille pattern dots-123456|⠿]] * [[Braille pattern dots-12356|⠷]] * [[Braille pattern dots-2346|⠮]] * [[Braille pattern dots-23456|⠾]] * [[Braille pattern dots-346|⠬]] * [[Braille pattern dots-3456|⠼]] * [[Braille pattern dots-6|⠠]] * [[Braille pattern dots-16|⠡]] * [[Braille pattern dots-126|⠣]] * [[Braille pattern dots-146|⠩]] * [[Braille pattern dots-1456|⠹]] * [[Braille pattern dots-156|⠱]] * [[Braille pattern dots-1246|⠫]] * [[Braille pattern dots-12456|⠻]] * [[Braille pattern dots-1256|⠳]] * [[Braille pattern dots-246|⠪]] * [[Braille pattern dots-2456|⠺]] * [[Braille pattern dots-46|⠨]] * [[Braille pattern dots-456|⠸]] * [[Braille pattern dots-2|⠂]] * [[Braille pattern dots-23|⠆]] * [[Braille pattern dots-25|⠒]] * [[Braille pattern dots-256|⠲]] * [[Braille pattern dots-26|⠢]] * [[Braille pattern dots-235|⠖]] * [[Braille pattern dots-2356|⠶]] * [[Braille pattern dots-236|⠦]] * [[Braille pattern dots-35|⠔]] * [[Braille pattern dots-356|⠴]] * [[Braille pattern dots-5|⠐]] * [[Braille pattern dots-56|⠰]] }} | group2 = Braille scripts | list2 = {{#invoke:navbox|navbox|child | listclass = hlist | nowrapitems = yes | group10 = [[:Category:French-ordered braille alphabets|French-ordered]] | list10 = * [[Albanian Braille|Albanian]] * [[Cantonese Braille|Cantonese]] * [[Catalan Braille|Catalan]] * [[Mainland Chinese Braille|Chinese (mainland Mandarin)]] (largely reassigned) * [[Czech Braille|Czech]] * Dutch ** [[Dutch six-dot Braille|6-dot]] ** [[Dutch eight-dot Braille|8-dot]] * [[English Braille|English]] ([[Unified English Braille|Unified English]]) * [[Esperanto Braille|Esperanto]] * [[French Braille|French]] * [[German Braille|German]] * [[Ghanaian braille|Ghanaian]] * [[Guarani Braille|Guarani]] * [[Hawaiian Braille|Hawaiian]] * [[Hungarian Braille|Hungarian]] * [[Iñupiaq Braille|Iñupiaq]] * [[IPA Braille|IPA]] * [[Irish Braille|Irish]] * [[Italian Braille|Italian]] * [[Latvian Braille|Latvian]] * [[Lithuanian Braille|Lithuanian]] * [[Luxembourgish Braille|Luxembourgish]] (extended to 8-dot) * [[Maltese Braille|Maltese]] * [[Māori Braille|Māori]] * [[Navajo Braille|Navajo]] * [[Nigerian braille|Nigerian]] * [[Philippine Braille|Philippine]] * [[Polish Braille|Polish]] * [[Portuguese Braille|Portuguese]] * [[Romanian Braille|Romanian]] * [[Samoan Braille|Samoan]] * [[Slovak Braille|Slovak]] * [[South African braille|South African]] * [[Spanish Braille|Spanish]] * [[Taiwanese Braille|Taiwanese Mandarin]] (largely reassigned) * [[Turkish Braille|Turkish]] ([[Azeri Braille|Azerbaijani]]) * [[Vietnamese Braille|Vietnamese]] * [[Welsh Braille|Welsh]] * [[Yugoslav Braille|Yugoslav]] * [[Zambian Braille|Zambian]] {{#invoke:navbox|navbox|child | listclass = hlist | nowrapitems = yes | group100 = Nordic family | list100 = * [[Estonian Braille|Estonian]] * [[Faroese Braille|Faroese]] * [[Icelandic Braille|Icelandic]] * [[Scandinavian Braille|Scandinavian]] ** Danish ** Finnish ** Greenlandic ** [[Northern Sámi Braille|Northern Sámi]] ** Norwegian ** Swedish | group101 = Russian lineage family<br />i.e. [[Cyrillic alphabets|Cyrillic]]-mediated scripts | list101 = * [[Belarusian Braille|Belarusian]] * [[Bulgarian Braille|Bulgarian]] * [[Kazakh Braille|Kazakh]] * [[Kyrgyz Braille|Kyrgyz]] * [[Mongolian Braille|Mongolian]] * [[Russian Braille|Russian]] * [[Tatar Braille|Tatar]] * [[Ukrainian Braille|Ukrainian]] | group102 = Egyptian lineage family<br />i.e. [[Arabic script|Arabic]]-mediated scripts | list102 = * [[Arabic Braille|Arabic]] * [[Persian Braille|Persian]] * [[Urdu Braille|Urdu]] (Pakistan) | group103 = Indian lineage family<br />i.e. [[Bharati Braille]] | list103 = * [[Devanagari Braille|Devanagari (Hindi / Marathi / Nepali)]] * [[Bengali Braille|Bengali (Bangla / Assamese)]] * [[Gujarati Braille|Gujarati]] * [[Kannada Braille|Kannada]] * [[Malayalam Braille|Malayalam]] * [[Odia Braille|Odia]] * [[Punjabi Braille|Punjabi]] * [[Sinhala Braille|Sinhala]] * [[Tamil Braille|Tamil]] * [[Telugu Braille|Telugu]] * [[Urdu Braille|Urdu]] (India) | group104 = Other scripts | list104 = * [[Ge'ez Braille|Amharic]] * [[Armenian Braille|Armenian]] * [[Burmese Braille|Burmese]] * [[Dzongkha Braille|Dzongkha]] (Bhutanese) * [[Georgian Braille|Georgian]] * [[Greek Braille|Greek]] * [[Hebrew Braille|Hebrew]] * [[Inuktitut Braille|Inuktitut]] (reassigned vowels) * [[Khmer Braille|Khmer]] * [[Thai and Lao Braille|Thai and Lao]] (Japanese vowels) * [[Tibetan Braille|Tibetan]] }} | group11 = Reordered | list11 = * [[Algerian Braille]] (obsolete) | group12 = Frequency-based | list12 = * [[American Braille]] (obsolete) | group13 = Independent | list13 = * Chinese semi-syllabaries ** [[Cantonese Braille|Cantonese]] ** [[Mainland Chinese Braille|Mainland Chinese Mandarin]] ** [[Taiwanese Braille|Taiwanese Mandarin]] ** [[Two-cell Chinese Braille|Two-cell Chinese]] * [[Japanese Braille|Japanese]] * [[Korean Braille|Korean]] | group14 = Eight-dot | list14 = * [[Dutch eight-dot Braille|Dutch]] * [[Luxembourgish Braille|Luxembourgish]] * [[Braille kanji|Kanji]] * [[Gardner–Salinas braille codes]] (GS8) }} | group4 = Symbols in braille | list4 = * [[Braille music]] * [[Canadian currency tactile feature|Canadian currency marks]] * [[Computer Braille Code]] * [[Gardner–Salinas braille codes]] (science; GS8/GS6) * [[IPA Braille|International Phonetic Alphabet (IPA)]] * [[Nemeth Braille|Nemeth braille code]] | group5 = [[Braille technology]] | list5 = * [[Braille e-book]] * [[Braille embosser]] * [[Braille translator]] * [[Braille watch]] * [[Mountbatten Brailler]] * [[Optical braille recognition]] * [[Perforation]] * [[Perkins Brailler]] * [[Refreshable braille display]] * [[Slate and stylus]] * [[Braigo]] | group6 = People | list6 = * [[Louis Braille]] * [[Charles Barbier]] * [[Róża Czacka]] * [[Valentin Haüy]] * [[Harris Mowbray]] * [[Thakur Vishva Narain Singh]] * {{Interlanguage link|María del Carmen Ortiz de Arce|es}} * [[Sabriye Tenberken]] * [[William Bell Wait]] | group7 = Organisations | list7 = * [[Braille Institute of America]] * [[Braille Without Borders]] * [[Japan Braille Library]] * [[National Braille Association]] * [[American Printing House for the Blind]] * [[:Category:Blindness organizations|Blindness organizations]] * [[:Category:Schools for the blind|Schools for the blind]] | group8 = Other [[tactile alphabet]]s | list8 = * [[Decapoint]] * [[Moon type]] * [[New York Point]] * [[Night writing]] * [[Vibratese]] | group9 = Related topics | list9 = * [[Accessible publishing]] * [[Braille literacy]] * [[RoboBraille]] }}<noinclude> {{Documentation}} </noinclude> kxgsaif6myilh0fhnbo1fwtb2fmmrlg Předłoha:Braille cell/style.css 10 41820 392875 2026-11-09T08:41:35Z ~2026-59388-70 28966 nowa strona: .brai_cell + .brai_cell { margin-left:2px; } 392875 sanitized-css text/css .brai_cell + .brai_cell { margin-left:2px; } mg8f0g052r63uywbrpflo56gl6aldlw Předłoha:Braille cell/english&cell2dot-id 10 41821 392878 2026-11-09T08:45:33Z ~2026-59388-70 28966 nowa strona: {{#switch:{{uc:{{{input|}}}}} | = 0<!-- catch blank input, dot-id=0 --> | U+2800 | ⠀ | 0 | BLANK | SPACE = 0 | U+2801 | ⠁ | 1 | A | #1 = 1 | U+2802 | ⠂ | 2 | COMMA | , | AA | EA = 2 | U+2803 | ⠃ | 12 | B | #2 = 12 | U+2804 | ⠄ | 3 | APOSTROPHE | ' = 3 | U+2805 | ⠅ | 13 | K = 13 | U+2806 | ⠆ | 23 | SEMICOLON | ; | BB | BE | BC = 23 | U+2807 | ⠇ | 123 | L = 123 | U+2808 | ⠈ | 4 | NUMERICAL INDEX | ACCENT | ` = 4 | U+2809 | ⠉ | 14 | C | #3 = 14 | U+280A | ⠊ |… 392878 wikitext text/x-wiki {{#switch:{{uc:{{{input|}}}}} | = 0<!-- catch blank input, dot-id=0 --> | U+2800 | ⠀ | 0 | BLANK | SPACE = 0 | U+2801 | ⠁ | 1 | A | #1 = 1 | U+2802 | ⠂ | 2 | COMMA | , | AA | EA = 2 | U+2803 | ⠃ | 12 | B | #2 = 12 | U+2804 | ⠄ | 3 | APOSTROPHE | ' = 3 | U+2805 | ⠅ | 13 | K = 13 | U+2806 | ⠆ | 23 | SEMICOLON | ; | BB | BE | BC = 23 | U+2807 | ⠇ | 123 | L = 123 | U+2808 | ⠈ | 4 | NUMERICAL INDEX | ACCENT | ` = 4 | U+2809 | ⠉ | 14 | C | #3 = 14 | U+280A | ⠊ | 24 | 42 | I | #9 = 24 | U+280B | ⠋ | 124 | 142 | F | #6 = 124 | U+280C | ⠌ | 34 | 43 | / | SLASH | FRACTION | Ì | ST = 34 | U+280D | ⠍ | 134 | 143 | M = 134 | U+280E | ⠎ | 234 | 423 | S = 234 | U+280F | ⠏ | 1234 | 1423 | P = 1234 | U+2810 | ⠐ | 5 | CONTRACTION | CONTR2 = 5 | U+2811 | ⠑ | 15 | E | #5 = 15 | U+2812 | ⠒ | 25 | COLON | : | CC | CON = 25 | U+2813 | ⠓ | 125 | H | #8 = 125 | U+2814 | ⠔ | 35 | 53 | ASTERISK | * | IN | II = 35 | U+2815 | ⠕ | 135 | 153 | O = 135 | U+2816 | ⠖ | 235 | 253 | EXCLAMATION | ! | FF | TO = 235 | U+2817 | ⠗ | 1235 | 1253 | R = 1235 | U+2818 | ⠘ | 45 | LITERAL | LITERAL INDEX | CONTR3 = 45 | U+2819 | ⠙ | 145 | D | #4 = 145 | U+281A | ⠚ | 245 | 425 | J | #0 = 245 | U+281B | ⠛ | 1245 | 1425 | G | #7 = 1245 | U+281C | ⠜ | 345 | 453 | Ä | Æ | AR = 345 | U+281D | ⠝ | 1345 | 1453 | N = 1345 | U+281E | ⠞ | 2345 | 4253 | T = 2345 | U+281F | ⠟ | 12345 | 14253 | Q = 12345 | U+2820 | ⠠ | 6 | CAPITAL | CAP = 6 | U+2821 | ⠡ | 16 | Å |  | CH = 16 | U+2822 | ⠢ | 26 | EN | EE = 26 | U+2823 | ⠣ | 126 | Ê | GH = 126 | U+2824 | ⠤ | 36 | HYPHEN | - | COM = 36 | U+2825 | ⠥ | 136 | U = 136 | U+2826 | ⠦ | 236 | QUESTION | OPENQUOTE | “ | HH = 236<!-- left double quote U+201C) --> | U+2827 | ⠧ | 1236 | V = 1236 | U+2828 | ⠨ | 46 | DECIMAL | ITALIC | ITALICS | EMPHASIS | EMPH | KK = 46 | U+2829 | ⠩ | 146 | SH | Î | Ĉ = 146 | U+282A | ⠪ | 246 | 426 | Ö | Œ | OW = 246 | U+282B | ⠫ | 1246 | 1426 | Ë | ED | NY = 1246 | U+282C | ⠬ | 346 | 436 | Ò | Ŭ | ING = 346 | U+282D | ⠭ | 1346 | 1436 | X = 1346 | U+282E | ⠮ | 2346 | 4236 | È | THE | Ŝ = 2346 | U+282F | ⠯ | 12346 | 14236 | AND | & | Ç = 12346 | U+2830 | ⠰ | 56 | CORRECTION | LETTER = 56 | U+2831 | ⠱ | 156 | Û | WH = 156 | U+2832 | ⠲ | 256 | PERIOD | DD | DIS = 256 | U+2833 | ⠳ | 1256 | Ü | OU | Ĥ = 1256 | U+2834 | ⠴ | 356 | 536 | CLOSEQUOTE | ” | BY | JJ = 356 <!--d q right U+201D; --> | U+2835 | ⠵ | 1356 | 1536 | Z = 1356 | U+2836 | ⠶ | 2356 | 2536 | PAREN | PARENTHESES | PARENTHESIS | () | GG | = 2356 | U+2837 | ⠷ | 12356 | 12536 | À | OF = 12356 | U+2838 | ⠸ | 456 | CURSIVE | CONTR1 | LL = 456 | U+2839 | ⠹ | 1456 | Ô | TH = 1456 | U+283A | ⠺ | 2456 | 4256 | W | Ĵ = 2456 | U+283B | ⠻ | 12456 | 14256 | Ï | ER | Ĝ = 12456 | U+283C | ⠼ | 3456 | 4536 | # | NUM | NUMBER | NUMERAL | NUMERIC | BLE = 3456 | U+283D | ⠽ | 13456 | 14536 | Y = 13456 | U+283E | ⠾ | 23456 | 42536 | Ù | WITH = 23456 | U+283F | ⠿ | 123456 | 142536 | É | FOR = 123456 | U+2840 | ⡀ | 7 = 7 | U+2841 | ⡁ | 17 | A7 = 17 | U+2842 | ⡂ | 27 | ,7 = 27 | U+2843 | ⡃ | 127 | B7 = 127 | U+2844 | ⡄ | 37 = 37 | U+2845 | ⡅ | 137 | K7 = 137 | U+2846 | ⡆ | 237 | ;7 = 237 | U+2847 | ⡇ | 1237 | L7 = 1237 | U+2848 | ⡈ | 47 = 47 | U+2849 | ⡉ | 147 | C7 = 147 | U+284A | ⡊ | 247 | 427 | I7 = 247 | U+284B | ⡋ | 1247 | 1427 | F7 = 1247 | U+284C | ⡌ | 347 | 437 = 347 | U+284D | ⡍ | 1347 | 1437 | M7 = 1347 | U+284E | ⡎ | 2347 | 4237 | S7 = 2347 | U+284F | ⡏ | 12347 | 14237 | P7 = 12347 | U+2850 | ⡐ | 57 = 57 | U+2851 | ⡑ | 157 | E7 = 157 | U+2852 | ⡒ | 257 = 257 | U+2853 | ⡓ | 1257 | H7 = 1257 | U+2854 | ⡔ | 357 | 537 = 357 | U+2855 | ⡕ | 1357 | 1537 | O7 = 1357 | U+2856 | ⡖ | 2357 | 2537 = 2357 | U+2857 | ⡗ | 12357 | 12537 | R7 = 12357 | U+2858 | ⡘ | 457 = 457 | U+2859 | ⡙ | 1457 | D7 = 1457 | U+285A | ⡚ | 2457 | 4257 | J7 = 2457 | U+285B | ⡛ | 12457 | 14257 | G7 = 12457 | U+285C | ⡜ | 3457 | 4537 | Ä7 = 3457 | U+285D | ⡝ | 13457 | 14537 | N7 = 13457 | U+285E | ⡞ | 23457 | 42537 | T7 = 23457 | U+285F | ⡟ | 123457 | 142537 | Q7 = 123457 | U+2860 | ⡠ | 67 = 67 | U+2861 | ⡡ | 167 | Â7 = 167 | U+2862 | ⡢ | 267 = 267 | U+2863 | ⡣ | 1267 | Ê7 = 1267 | U+2864 | ⡤ | 367 = 367 | U+2865 | ⡥ | 1367 | U7 = 1367 | U+2866 | ⡦ | 2367 = 2367 | U+2867 | ⡧ | 12367 | V7 = 12367 | U+2868 | ⡨ | 467 = 467 | U+2869 | ⡩ | 1467 | Î7 = 1467 | U+286A | ⡪ | 2467 | 4267 | Ö7 | Œ7 = 2467 | U+286B | ⡫ | 12467 | 14267 | Ë7 = 12467 | U+286C | ⡬ | 3467 | 4367 | Ò7 = 3467 | U+286D | ⡭ | 13467 | 14367 | X7 = 13467 | U+286E | ⡮ | 23467 | 42367 | È7 = 23467 | U+286F | ⡯ | 123467 | 142367 | Ç7 = 123467 | U+2870 | ⡰ | 567 = 567 | U+2871 | ⡱ | 1567 | Û7 = 1567 | U+2872 | ⡲ | 2567 = 2567 | U+2873 | ⡳ | 12567 | Ü7 = 12567 | U+2874 | ⡴ | 3567 | 5367 = 3567 | U+2875 | ⡵ | 13567 | 15367 | Z7 = 13567 | U+2876 | ⡶ | 23567 | 25367 = 23567 | U+2877 | ⡷ | 123567 | 125367 | À7 = 123567 | U+2878 | ⡸ | 4567 = 4567 | U+2879 | ⡹ | 14567 | Ô7 = 14567 | U+287A | ⡺ | 24567 | 42567 | W7 = 24567 | U+287B | ⡻ | 124567 | 142567 | Ï7 = 124567 | U+287C | ⡼ | 34567 | 45367 | #7 = 34567 | U+287D | ⡽ | 134567 | 145367 | Y7 = 134567 | U+287E | ⡾ | 234567 | 425367 | Ù7 = 234567 | U+287F | ⡿ | 1234567 | 1425367 | É7 = 1234567 | U+2880 | ⢀ | 8 = 8 | U+2881 | ⢁ | 18 | A8 = 18 | U+2882 | ⢂ | 28 = 28 | U+2883 | ⢃ | 128 | B8 = 128 | U+2884 | ⢄ | 38 = 38 | U+2885 | ⢅ | 138 | K8 = 138 | U+2886 | ⢆ | 238 | ;8 = 238 | U+2887 | ⢇ | 1238 = 1238 | U+2888 | ⢈ | 48 = 48 | U+2889 | ⢉ | 148 = 148 | U+288A | ⢊ | 248 | 428 = 248 | U+288B | ⢋ | 1248 | 1428 = 1248 | U+288C | ⢌ | 348 | 438 = 348 | U+288D | ⢍ | 1348 | 1438 = 1348 | U+288E | ⢎ | 2348 | 4238 = 2348 | U+288F | ⢏ | 12348 | 14238 = 12348 | U+2890 | ⢐ | 58 = 58 | U+2891 | ⢑ | 158 = 158 | U+2892 | ⢒ | 258 = 258 | U+2893 | ⢓ | 1258 = 1258 | U+2894 | ⢔ | 358 | 538 = 358 | U+2895 | ⢕ | 1358 | 1538 = 1358 | U+2896 | ⢖ | 2358 | 2538 = 2358 | U+2897 | ⢗ | 12358 | 12538 = 12358 | U+2898 | ⢘ | 458 = 458 | U+2899 | ⢙ | 1458 = 1458 | U+289A | ⢚ | 2458 | 4258 = 2458 | U+289B | ⢛ | 12458 | 14258 = 12458 | U+289C | ⢜ | 3458 | 4538 |Ä8 = 3458 | U+289D | ⢝ | 13458 | 14538 = 13458 | U+289E | ⢞ | 23458 | 42538 = 23458 | U+289F | ⢟ | 123458 | 142538 = 123458 | U+28A0 | ⢠ | 68 = 68 | U+28A1 | ⢡ | 168 = 168 | U+28A2 | ⢢ | 268 = 268 | U+28A3 | ⢣ | 1268 = 1268 | U+28A4 | ⢤ | 368 = 368 | U+28A5 | ⢥ | 1368 = 1368 | U+28A6 | ⢦ | 2368 = 2368 | U+28A7 | ⢧ | 12368 = 12368 | U+28A8 | ⢨ | 468 = 468 | U+28A9 | ⢩ | 1468 = 1468 | U+28AA | ⢪ | 2468 | 4268 = 2468 | U+28AB | ⢫ | 12468 | 14268 | Ë8 = 12468 | U+28AC | ⢬ | 3468 | 4368 = 3468 | U+28AD | ⢭ | 13468 | 14368 = 13468 | U+28AE | ⢮ | 23468 | 42368 = 23468 | U+28AF | ⢯ | 123468 | 142368 = 123468 | U+28B0 | ⢰ | 568 = 568 | U+28B1 | ⢱ | 1568 = 1568 | U+28B2 | ⢲ | 2568 = 2568 | U+28B3 | ⢳ | 12568 = 12568 | U+28B4 | ⢴ | 3568 | 5368 = 3568 | U+28B5 | ⢵ | 13568 | 15368 = 13568 | U+28B6 | ⢶ | 23568 | 25368 = 23568 | U+28B7 | ⢷ | 123568 | 125368 = 123568 | U+28B8 | ⢸ | 4568 = 4568 | U+28B9 | ⢹ | 14568 = 14568 | U+28BA | ⢺ | 24568 | 42568 = 24568 | U+28BB | ⢻ | 124568 | 142568 = 124568 | U+28BC | ⢼ | 34568 | 45368 = 34568 | U+28BD | ⢽ | 134568 | 145368 = 134568 | U+28BE | ⢾ | 234568 | 425368 = 234568 | U+28BF | ⢿ | 1234568 | 1425368 | É8 = 1234568 | U+28C0 | ⣀ | 78 = 78 | U+28C1 | ⣁ | 178 = 178 | U+28C2 | ⣂ | 278 = 278 | U+28C3 | ⣃ | 1278 = 1278 | U+28C4 | ⣄ | 378 = 378 | U+28C5 | ⣅ | 1378 = 1378 | U+28C6 | ⣆ | 2378 = 2378 | U+28C7 | ⣇ | 12378 = 12378 | U+28C8 | ⣈ | 478 = 478 | U+28C9 | ⣉ | 1478 = 1478 | U+28CA | ⣊ | 2478 | 4278 = 2478 | U+28CB | ⣋ | 12478 | 14278 = 12478 | U+28CC | ⣌ | 3478 | 4378 = 3478 | U+28CD | ⣍ | 13478 | 14378 = 13478 | U+28CE | ⣎ | 23478 | 42378 = 23478 | U+28CF | ⣏ | 123478 | 142378 = 123478 | U+28D0 | ⣐ | 578 = 578 | U+28D1 | ⣑ | 1578 = 1578 | U+28D2 | ⣒ | 2578 = 2578 | U+28D3 | ⣓ | 12578 = 12578 | U+28D4 | ⣔ | 3578 | 5378 = 3578 | U+28D5 | ⣕ | 13578 | 15378 = 13578 | U+28D6 | ⣖ | 23578 | 25378 = 23578 | U+28D7 | ⣗ | 123578 | 125378 = 123578 | U+28D8 | ⣘ | 4578 = 4578 | U+28D9 | ⣙ | 14578 = 14578 | U+28DA | ⣚ | 24578 | 42578 = 24578 | U+28DB | ⣛ | 124578 | 142578 = 124578 | U+28DC | ⣜ | 34578 | 45378 | Ä78 = 34578 | U+28DD | ⣝ | 134578 | 145378 = 134578 | U+28DE | ⣞ | 234578 | 425378 = 234578 | U+28DF | ⣟ | 1234578 | 1425378 = 1234578 | U+28E0 | ⣠ | 678 = 678 | U+28E1 | ⣡ | 1678 = 1678 | U+28E2 | ⣢ | 2678 = 2678 | U+28E3 | ⣣ | 12678 = 12678 | U+28E4 | ⣤ | 3678 = 3678 | U+28E5 | ⣥ | 13678 = 13678 | U+28E6 | ⣦ | 23678 = 23678 | U+28E7 | ⣧ | 123678 = 123678 | U+28E8 | ⣨ | 4678 = 4678 | U+28E9 | ⣩ | 14678 = 14678 | U+28EA | ⣪ | 24678 | 42678 = 24678 | U+28EB | ⣫ | 124678 | 142678 | Ë78 = 124678 | U+28EC | ⣬ | 34678 | 43678 = 34678 | U+28ED | ⣭ | 134678 | 143678 = 134678 | U+28EE | ⣮ | 234678 | 423678 = 234678 | U+28EF | ⣯ | 1234678 | 1423678 = 1234678 | U+28F0 | ⣰ | 5678 = 5678 | U+28F1 | ⣱ | 15678 = 15678 | U+28F2 | ⣲ | 25678 = 25678 | U+28F3 | ⣳ | 125678 = 125678 | U+28F4 | ⣴ | 35678 | 53678 = 35678 | U+28F5 | ⣵ | 135678 | 153678 = 135678 | U+28F6 | ⣶ | 235678 | 253678 = 235678 | U+28F7 | ⣷ | 1235678 | 1253678 = 1235678 | U+28F8 | ⣸ | 45678 = 45678 | U+28F9 | ⣹ | 145678 = 145678 | U+28FA | ⣺ | 245678 | 425678 = 245678 | U+28FB | ⣻ | 1245678 | 1425678 = 1245678 | U+28FC | ⣼ | 345678 | 453678 = 345678 | U+28FD | ⣽ | 1345678 | 1453678 = 1345678 | U+28FE | ⣾ | 2345678 | 4253678 = 2345678 | U+28FF | ⣿ | 12345678 | 14253678 | É78 = 12345678 <!-- SPECIAL (numeric preferred for possible multicell usage; "9.." cannot confuse with dots) --> | 900 | WHITESPACE | NULL = 900<!-- blank space, NOT a zero-dot cell --> | 901 | DOT NUMBERING | DOT NUMBERS | CELL NUMBERING = 901 <!-- 1829 Braille cells list --> | A0 = A0 | A2 = A2 | A3 = A3 | A23 = A23 | A5 = A5 | A25 = A25 | A53 | A35 = A35 | A253 | A235 = A235 | A6 = A6 | A26 = A26 | A36 = A36 | A236 = A236 | A56 = A56 | A256 = A256 | A536 | A356 = A356 | A2536 | A2356 = A2356 | B0 = B0 | 1B | B1 = B1 | B3 = B3 | 1B3 | B13 = B13 | 4B | B4 = B4 | 14B | B14 = B14 | 4B3 | B34 = B34 | 14B3 | B134 = B134 | B6 = B6 | 1B6 | B16 = B16 | B36 = B36 | 1B36 | B136 = B136 | 4B6 | B46 = B46 | 14B6 | B146 = B146 | 4B36 | B346 = B346 | 14B36 | B1346 = B1346 | C0 = C0 | 1C | C1 = C1 | 2C | C2 = C2 | 12C | C12 = C12 | 4C | C4 = C4 | 14C | C14 = C14 | 42C | C24 = C24 | 142C | C124 = C124 | 5C | C5 = C5 | 15C | C15 = C15 | 25C | C25 = C25 | 125C | C125 = C125 | 45C | C45 = C45 | 145C | C145 = C145 | 425C | C245 = C245 | 1425C | C1245 = C1245 | AB0 = AB0 | AB3 = AB3 | AB6 = AB6 | AB36 = AB36 | AC0 = AC0 | A2C | AC2 = AC2 | A5C | AC5 = AC5 | A25C | AC25 = AC25 | BC0 = BC0 | 1BC | BC1 = BC1 | 4BC | BC4 = BC4 | 14BC | BC14 = BC14 | ABC0 | ABC = ABC <!-- TWO CELL DEFINITIONS (cell 3&4 definitions should be added in /main: dot-id3&4=...) --> | DITTO | 〃 = 5 2 <!--U+3003--> | [ = 6 2356 | ] = 2356 3 | ELLIPSIS | ... = 3 3 | ‘ = 6 236 <!--s q left U+2018--> | ’ = 356 3 <!--s q right U+2019--> | ** | † | ‡ | ¶ = 35 35 | DASH | NDASH | – | MDASH | — = 36 36 | #default={{error|Error using {{tlx|Braille cell}}: input "{{{input|}}}" not supported.|tag=span}} }} bvtvxcdhvcxbji4tf2b7kieuhwvq4ei Předłoha:Infobox IPA/image box 10 41822 392879 2026-11-09T08:47:43Z ~2026-59388-70 28966 nowa strona: {| class="wikitable collapsible {{{imagestate|collapsed}}}" style="width:100%; margin:0; border:0; background: transparent;color:inherit; " ! style="background:#FFFFE6;color:inherit; border:0;" | Image |- | class="center" style="background: transparent;color:inherit; border:0;" |<!-- -->{{#if:{{{imagefile|}}}|[[Image:{{{imagefile|}}}|center|{{{imagesize|px}}}{{#ifeq:{{Yesno-yes|{{{imageinvert|}}}}}|yes|{{!}}class=skin-invert-image}}]]|{{code|(no imagefile)}}}}<!-- the basic Ima… 392879 wikitext text/x-wiki {| class="wikitable collapsible {{{imagestate|collapsed}}}" style="width:100%; margin:0; border:0; background: transparent;color:inherit; " ! style="background:#FFFFE6;color:inherit; border:0;" | Image |- | class="center" style="background: transparent;color:inherit; border:0;" |<!-- -->{{#if:{{{imagefile|}}}|[[Image:{{{imagefile|}}}|center|{{{imagesize|px}}}{{#ifeq:{{Yesno-yes|{{{imageinvert|}}}}}|yes|{{!}}class=skin-invert-image}}]]|{{code|(no imagefile)}}}}<!-- the basic Image box --> {{#if:{{{imagecaption|}}} |<!-- compose full tablerow (use {{!}} not pipe) --> {{!}}- {{!}} style{{=}}"background: transparent;color:inherit; border:0;" {{!}} {{{imagecaption|}}} }}<!-- end tablerow with image caption --> |} rrrhz2srv6vpsxx17mbm8wqw6rzb6wy 392881 392879 2026-11-09T08:51:42Z ~2026-59388-70 28966 392881 wikitext text/x-wiki {| class="wikitable collapsible {{{imagestate|collapsed}}}" style="width:100%; margin:0; border:0; background: transparent;color:inherit; " ! style="background:#FFFFE6;color:inherit; border:0;" | Zobražennja |- | class="center" style="background: transparent;color:inherit; border:0;" |<!-- -->{{#if:{{{imagefile|}}}|[[Image:{{{imagefile|}}}|center|{{{imagesize|px}}}{{#ifeq:{{Yesno-yes|{{{imageinvert|}}}}}|yes|{{!}}class=skin-invert-image}}]]|{{code|(no imagefile)}}}}<!-- the basic Image box --> {{#if:{{{imagecaption|}}} |<!-- compose full tablerow (use {{!}} not pipe) --> {{!}}- {{!}} style{{=}}"background: transparent;color:inherit; border:0;" {{!}} {{{imagecaption|}}} }}<!-- end tablerow with image caption --> |} 5fvaccnfedvo3c0b0tfghdhs7yf6bst 392887 392881 2026-11-09T09:15:02Z ~2026-59388-70 28966 /* */ 392887 wikitext text/x-wiki {| class="wikitable collapsible {{{imagestate|collapsed}}}" style="width:100%; margin:0px; border:0; background: transparent; " ! style="background:#FFFFE6; border:0;" | Zobražennja |- | style="background: transparent; border:0;" |<!-- -->{{#if:{{{imagefile|}}}|[[Image:{{{imagefile|}}}|center|{{{imagesize|px}}}]]|{{code|(no imagefile)}}}}<!-- the basic Image box --> {{#if:{{{imagecaption|}}} |<!-- compose full tablerow (use {{!}} not pipe) --> {{!}}- {{!}} style{{=}}"background: transparent; border:0;" {{!}} {{{imagecaption|}}} }}<!-- end tablerow with image caption --> |} 25opjb89l9grfz7ndi6f90m0i97g2x1 Hłuchyj twerdopidnebinno-m'jakopidnebinnyj frykatywnyj 0 41823 392880 2026-11-09T08:49:34Z ~2026-59388-70 28966 nowa strona: {{Infobox IPA |ipa number=175 |decimal=615 |xsampa=x\ |kirshenbaum=x^ or S~ |braille=“ |braille2=h |imagefile=Sj sound (vector).svg |imagesize=150px }} 392880 wikitext text/x-wiki {{Infobox IPA |ipa number=175 |decimal=615 |xsampa=x\ |kirshenbaum=x^ or S~ |braille=“ |braille2=h |imagefile=Sj sound (vector).svg |imagesize=150px }} 2b9jairg84u7fm2zzo6uaf0qldovl7g Předłoha:Kartka 10 41824 392882 2026-11-09T09:03:13Z ~2026-59388-70 28966 nowa strona: {{#invoke:Kartka|infobox}} 392882 wikitext text/x-wiki {{#invoke:Kartka|infobox}} 82v84mvx45vjg4qa1acr0xh517b2gl8 392892 392882 2026-11-09T09:43:14Z ~2026-59426-15 28967 /* */ 392892 wikitext text/x-wiki {{#invoke:Kartka|infobox}}1 sqyqkkia8rdjdsuhknj7rrszmz2ottd 392893 392892 2026-11-09T09:43:22Z ~2026-59426-15 28967 /* */ 392893 wikitext text/x-wiki {{#invoke:Kartka|infobox}} 82v84mvx45vjg4qa1acr0xh517b2gl8 Modul:Kartka 828 41825 392883 2026-11-09T09:05:18Z ~2026-59388-70 28966 nowa strona: -- -- Модуль для реалізації шаблону {{Картка}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Модуль:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local… 392883 Scribunto text/plain -- -- Модуль для реалізації шаблону {{Картка}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Модуль:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local has_error = false local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Шаблон:Картка|Картка]]}}</kbd>: ' local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and (sval:match( '^%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*$')) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2, t3) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end if t3 then for k, v in pairs(t3) do vals[v] = true end end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function processParamsFromArg (paramList, paramType, is_global) local paramName = ('wikidata' == paramType) and 'параметри_вікіданих' or 'параметри_зображення_картки' local paramsArgs = {} if paramList and paramList ~= '' then -- local allowedParams = getAllowedList(paramType) for item in paramList:gmatch("(%S+%s*%S+);%s*") do local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)") -- for k, v in ipairs(allowedParams) do --чи тут потрібна взагалі перевірка на підтримувані параметри? -- if v == param then paramsArgs[param] = arg -- end -- end end if is_global then args[paramName] = paramsArgs return '' end end if args[paramName] and args[paramName] ~= '' then for param, arg in pairs(args[paramName]) do if not paramsArgs[param] or paramsArgs[param] == '' then paramsArgs[param] = arg end end end return is_global and '' or paramsArgs end local function processWikidata(text, element, wdParams) if element then if args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidataib' then local wikidata = require("Модуль:WikidataIB") local wdArgs = processParamsFromArg(wdParams, 'wikidata') wdArgs[1] = element:upper() wdArgs[2] = text local temptext if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then local wdFrame = mw.getCurrentFrame() if wdArgs['function'] == 'getCoords' then wdArgs[1] = text wdArgs[2] = '' end wdFrame.args = wdArgs temptext = wikidata[wdArgs['function']](wdFrame) else temptext = wikidata._getValue(wdArgs) end if temptext and wdArgs.ref == "yes" then local wd = require("Модуль:wd") temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element}) end text = temptext elseif args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidata1' then local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata1") wdFrame.args = {} local wdfunction if origArgs['qid'] and origArgs['qid'] ~= '' then wdFrame.args[1] = origArgs['qid'] wdFrame.args[2] = element:upper() wdFrame.args[3] = text wdfunction = 'getValueFromID' else wdFrame.args[1] = element:upper() wdFrame.args[2] = text wdfunction = 'getValue' end text = wikidata[wdfunction](wdFrame) else local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata") wdFrame.args = { property = element, value = text, from = origArgs[ 'from' ] or '' } text = wikidata.formatProperty(wdFrame) end end return text end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовків'] }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass(isUntitledChildBox(rowArgs.header) and 'infobox-hiddenrow' or nil) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['клас_заголовків']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['стиль_заголовків']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.nocat) then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони картка з проігнорованими комірками параметра текст]]' ) end elseif rowArgs.data and mw.ustring.gsub(rowArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') :addClass(args['клас_міток']) -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['стиль_міток']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end if rowArgs.data == '----' then --Так як при переході на модуль перестали працювати чотири дефіси rowArgs.data = '<hr/>' --тому робимо їхню заміну на '<hr/>' end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.dataclass) :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderError() if not has_error then return end local errorText = error_message .. '</span><br/>' root :tag('caption') :addClass('infobox-title') :wikitext(errorText) end local function renderTitle() if not args['назва'] then return end has_rows = true has_list_class({args['клас_назви']}) root :tag('caption') :addClass('infobox-title') :addClass(args['клас_назви']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['стиль_назви']) :wikitext(args['назва']) end local function renderAboveRow(iteration_number) iteration_number = iteration_number or '' if not args['угорі' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_угорі' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['угорі' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['клас_угорі' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['стиль_угорі' .. iteration_number]) :wikitext(fixChildBoxes(args['угорі' .. iteration_number],'th')) end local function renderBelowRow(iteration_number) iteration_number = iteration_number or '' if not args['внизу' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_внизу' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['внизу' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу' .. iteration_number]) :wikitext(fixChildBoxes(args['внизу' .. iteration_number],'td')) end local function renderBelowRow2() if not args['внизу2'] then return end has_rows = true has_list_class({ args['клас_внизу2'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу2']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу2']) :wikitext(fixChildBoxes(args['внизу2'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and mw.ustring.gsub(subheaderArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass(isUntitledChildBox(subheaderArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['підзаголовок'] then args['підзаголовок1'] = args['підзаголовок'] end if args['клас_рядка_підзаголовок'] then args['клас_рядка_підзаголовок1'] = args['клас_рядка_підзаголовок'] end local subheadernums = getArgNums('підзаголовок') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['підзаголовок' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['стиль_підзаголовок'] or args['стиль_підзаголовоків'], rowcellstyle = args['стиль_підзаголовок' .. tostring(num)], class = args['клас_підзаголовоків'], rowclass = args['клас_рядка_підзаголовок' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and mw.ustring.gsub(imageArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass(isUntitledChildBox(imageArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['зображення'] then args['зображення1'] = args['зображення'] end if args['підпис'] then args['підпис1'] = args['підпис'] end local imagenums = getArgNums('зображення') for k, num in ipairs(imagenums) do local caption = args['підпис' .. tostring(num)] local data = mw.html.create():wikitext(args['зображення' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['стиль_підпису']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['стиль_зображення'], class = args['клас_зображення'], rowclass = args['клас_рядка_зображення' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['автозаголовки'] then return end local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['заголовок' .. tostring(num)] then if lastheader then args['заголовок' .. tostring(lastheader)] = nil end lastheader = num elseif (args['текст' .. tostring(num)] and mw.ustring.gsub(args['текст' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) or (args['вікідані' .. tostring(num)] and mw.ustring.gsub(args['вікідані' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) then local data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]) if data and mw.ustring.gsub(data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('%S') then lastheader = nil end end end if lastheader then args['заголовок' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['заголовок' .. tostring(num)], label = args['мітка' .. tostring(num)], data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]), dataclass = args['клас_тексту'], datastyle = args['стиль_тексту'], class = args['клас' .. tostring(num)], rowclass = args['клас_рядка' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['стиль_рядка' .. tostring(num)], rowcellstyle = args['стиль_комірки_рядка' .. tostring(num)] }) end end local function renderNavBar() if not args['ім\'я'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Модуль:Navbar')._navbar{ args['ім\'я'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then root:wikitext(require('Модуль:Заголовок курсивом')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.nocat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.nocat) then return end if yesno(args['вбудовування']) then if args['назва'] then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони вбудованої картки з параметром назва]]' ) end elseif #(getArgNums('текст')) == 0 and #(getArgNums('вікідані')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Категорія:Статті, що використовують шаблони картка без рядків параметра текст]]') end if args['ім\'я'] then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з параметром ім\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]') end if has_error then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з двома однаковими параметрами]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Модуль:Картка/styles.css' } } local templatestyles = '' if args['стилі_шаблону'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону'] } } end local child_templatestyles = '' if args['стилі_шаблону вбудовування'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вбудовування'] } } end local grandchild_templatestyles = '' if args['стилі_шаблону вторинного_вбудовування'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вторинного_вбудовування'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderBelowRow('2') -- renderNavBar() (тимчасово поки закоментував) renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if not yesno(args['вбудовування']) then root = mw.html.create('table') local infoboxWidth = '' if args['ширина-картки'] then infoboxWidth = "width:" .. args['ширина-картки'] end root :addClass(yesno(args['підкартка']) and 'infobox-subbox' or 'infobox') :addClass(args['клас_тіла']) -- @deprecated next; target .infobox-<name> :cssText(args['стиль_тіла']) -- infobox width from a parameter :cssText(infoboxWidth) has_list_class({ args['клас_тіла'] }) renderError() renderTitle() renderAboveRow() renderAboveRow('2') else root = mw.html.create() local errorText = has_error and (error_message .. '</span><br/>') or '' root :wikitext(errorText) :wikitext(args['назва']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end local function translateArg(aliasArgName,localArgName) -- Функція додає підтримку аліасів параметрів (наприклад, іншою мовою) -- Додаєм аліас параметра в таблицю аліасів -- Для одного параметра може бути кілька аліасів -- Нумеровані параметри(текст1 і т.д.) заносяться без номера if not argsAliases[localArgName] then argsAliases[localArgName] = {} end table.insert(argsAliases[localArgName], aliasArgName) -- Значення аліасів додаются в таблицю аргументів if origArgs[localArgName] and origArgs[localArgName] ~= '' then -- параметр вже заданий на локальній мові -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then -- local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|довідка]])' -- error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain() -- has_error = true end else -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then origArgs[localArgName] = origArgs[aliasArgName] end end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Виявлено нетабличне значення для таблиці префіксів", 2) end if type(step) ~= 'number' then error("Виявлено недійсне значення параметра кроку", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.prefix_trans and type(v.prefix_trans) ~= "string") or (v.depend and type(v.depend) ~= 'table') or (v.depend_trans and type(v.depend_trans) ~= 'table') then error('Виявлено недійсне значення в таблиці префіксів preprocessArgs', 2) end -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then translateArg(v.prefix_trans,v.prefix) else preprocessSingleArg(v.prefix) end -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end preprocessSingleArg(dependValue) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif origArgs[v.prefix] and v.depend_trans then for j, dependValue in ipairs(v.depend) do for k, depend_transValue in ipairs(v.depend_trans) do if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end translateArg(depend_transValue,dependValue) end end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then local prefix_transArgName = v.prefix_trans .. tostring(i) if origArgs[prefix_transArgName] then moreArgumentsExist = true translateArg(prefix_transArgName,prefixArgName) end else if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then for j,dependValue in ipairs(v.depend) do for k,depend_transValue in ipairs(v.depend_trans) do local dependArgName = dependValue .. tostring(i) local depend_transArgName = depend_transValue .. tostring(i) translateArg(depend_transArgName, dependArgName) end end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() translateArg('autoheaders','автозаголовки') translateArg('child', 'вбудовування') translateArg('infobox-width', 'ширина-картки') translateArg('bodyclass', 'клас_тіла') translateArg('subbox', 'підкартка') translateArg('bodystyle', 'стиль_тіла') translateArg('title', 'назва') translateArg('titleclass', 'клас_назви') translateArg('titlestyle', 'стиль_назви') translateArg('above', 'угорі') translateArg('aboveclass', 'клас_угорі') translateArg('abovestyle', 'стиль_угорі') translateArg('above2', 'угорі2') translateArg('aboveclass2', 'клас_угорі2') translateArg('abovestyle2', 'стиль_угорі2') preprocessArgs({ {prefix_trans = 'subheader', prefix = 'підзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) translateArg('subheaderstyle', 'стиль_підзаголовків') translateArg('subheaderclass','клас_підзаголовків') preprocessArgs({ {prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'підпис', 'клас_рядка_зображення'}} }, 10) translateArg('captionstyle', 'стиль_підпису') translateArg('imagestyle', 'стиль_зображення') translateArg('imageclass', 'клас_зображення') translateArg('wikidatamodulename','назва_модуля_вікіданих') translateArg('parameterswikidata','параметри_вікіданих') preprocessArgs({ {prefix_trans = 'header', prefix = 'заголовок'}, {prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'мітка'}}, {prefix_trans = 'wikidata', prefix = 'вікідані', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'мітка', 'параметри_рядка_вікіданих' }}, {prefix_trans = 'rowclass', prefix = 'клас_рядка'}, {prefix_trans = 'rowstyle', prefix = 'стиль_рядка'}, {prefix_trans = 'rowcellstyle', prefix = 'стиль_комірки_рядка'}, {prefix_trans = 'class', prefix = 'клас'} }, 100) translateArg('headerclass', 'клас_заголовків') translateArg('headerstyle', 'стиль_заголовків') translateArg('labelclass', 'клас_міток') translateArg('labelstyle', 'стиль_міток') translateArg('dataclass', 'клас_тексту') translateArg('datastyle', 'стиль_тексту') translateArg('below', 'внизу') translateArg('belowclass', 'клас_внизу') translateArg('belowstyle', 'стиль_внизу') translateArg('below2', 'внизу2') translateArg('belowclass2', 'клас_внизу2') translateArg('belowstyle2', 'стиль_внизу2') translateArg('name', 'ім\'я') translateArg('decat', 'nocat') translateArg('templatestyles', 'стилі_шаблону') translateArg('child templatestyles', 'стилі_шаблону вбудовування') translateArg('grandchild templatestyles', 'стилі_шаблону вторинного_вбудовування') preprocessSingleArg('автозаголовки') preprocessSingleArg('вбудовування') preprocessSingleArg('ширина-картки') preprocessSingleArg('клас_тіла') preprocessSingleArg('підкартка') preprocessSingleArg('стиль_тіла') preprocessSingleArg('назва') preprocessSingleArg('клас_назви') preprocessSingleArg('стиль_назви') preprocessSingleArg('угорі') preprocessSingleArg('клас_угорі') preprocessSingleArg('стиль_угорі') preprocessSingleArg('угорі2') preprocessSingleArg('клас_угорі2') preprocessSingleArg('стиль_угорі2') preprocessArgs({ {prefix = 'підзаголовок', depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) preprocessSingleArg('стиль_підзаголовків') preprocessSingleArg('клас_підзаголовків') preprocessArgs({ {prefix = 'зображення', depend = {'підпис', 'клас_рядка_зображення'}} }, 10) preprocessSingleArg('стиль_підпису') preprocessSingleArg('стиль_зображення') preprocessSingleArg('клас_зображення') preprocessSingleArg('назва_модуля_вікіданих') processParamsFromArg(origArgs['параметри_вікіданих'], 'wikidata', true) preprocessArgs({ {prefix = 'заголовок'}, {prefix = 'текст', depend = {'мітка'}}, {prefix = 'вікідані', depend = {'мітка', 'параметри_рядка_вікіданих'}}, {prefix = 'клас_рядка'}, {prefix = 'стиль_рядка'}, {prefix = 'стиль_комірки_рядка'}, {prefix = 'клас'} }, 100) preprocessSingleArg('клас_заголовків') preprocessSingleArg('стиль_заголовків') preprocessSingleArg('клас_міток') preprocessSingleArg('стиль_міток') preprocessSingleArg('клас_тексту') preprocessSingleArg('стиль_тексту') preprocessSingleArg('внизу') preprocessSingleArg('клас_внизу') preprocessSingleArg('стиль_внизу') preprocessSingleArg('внизу2') preprocessSingleArg('клас_внизу2') preprocessSingleArg('стиль_внизу2') preprocessSingleArg('ім\'я') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title'] preprocessSingleArg('nocat') preprocessSingleArg('стилі_шаблону') preprocessSingleArg('стилі_шаблону вбудовування') preprocessSingleArg('стилі_шаблону вторинного_вбудовування') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p 53pks31b5d7ntg2ad7jf4h4j4aafhqy 392884 392883 2026-11-09T09:05:47Z ~2026-59388-70 28966 392884 Scribunto text/plain -- -- Модуль для реалізації шаблону {{Kartka}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Модуль:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local has_error = false local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Шаблон:Картка|Картка]]}}</kbd>: ' local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and (sval:match( '^%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*$')) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2, t3) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end if t3 then for k, v in pairs(t3) do vals[v] = true end end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function processParamsFromArg (paramList, paramType, is_global) local paramName = ('wikidata' == paramType) and 'параметри_вікіданих' or 'параметри_зображення_картки' local paramsArgs = {} if paramList and paramList ~= '' then -- local allowedParams = getAllowedList(paramType) for item in paramList:gmatch("(%S+%s*%S+);%s*") do local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)") -- for k, v in ipairs(allowedParams) do --чи тут потрібна взагалі перевірка на підтримувані параметри? -- if v == param then paramsArgs[param] = arg -- end -- end end if is_global then args[paramName] = paramsArgs return '' end end if args[paramName] and args[paramName] ~= '' then for param, arg in pairs(args[paramName]) do if not paramsArgs[param] or paramsArgs[param] == '' then paramsArgs[param] = arg end end end return is_global and '' or paramsArgs end local function processWikidata(text, element, wdParams) if element then if args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidataib' then local wikidata = require("Модуль:WikidataIB") local wdArgs = processParamsFromArg(wdParams, 'wikidata') wdArgs[1] = element:upper() wdArgs[2] = text local temptext if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then local wdFrame = mw.getCurrentFrame() if wdArgs['function'] == 'getCoords' then wdArgs[1] = text wdArgs[2] = '' end wdFrame.args = wdArgs temptext = wikidata[wdArgs['function']](wdFrame) else temptext = wikidata._getValue(wdArgs) end if temptext and wdArgs.ref == "yes" then local wd = require("Модуль:wd") temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element}) end text = temptext elseif args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidata1' then local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata1") wdFrame.args = {} local wdfunction if origArgs['qid'] and origArgs['qid'] ~= '' then wdFrame.args[1] = origArgs['qid'] wdFrame.args[2] = element:upper() wdFrame.args[3] = text wdfunction = 'getValueFromID' else wdFrame.args[1] = element:upper() wdFrame.args[2] = text wdfunction = 'getValue' end text = wikidata[wdfunction](wdFrame) else local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata") wdFrame.args = { property = element, value = text, from = origArgs[ 'from' ] or '' } text = wikidata.formatProperty(wdFrame) end end return text end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовків'] }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass(isUntitledChildBox(rowArgs.header) and 'infobox-hiddenrow' or nil) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['клас_заголовків']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['стиль_заголовків']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.nocat) then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони картка з проігнорованими комірками параметра текст]]' ) end elseif rowArgs.data and mw.ustring.gsub(rowArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') :addClass(args['клас_міток']) -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['стиль_міток']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end if rowArgs.data == '----' then --Так як при переході на модуль перестали працювати чотири дефіси rowArgs.data = '<hr/>' --тому робимо їхню заміну на '<hr/>' end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.dataclass) :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderError() if not has_error then return end local errorText = error_message .. '</span><br/>' root :tag('caption') :addClass('infobox-title') :wikitext(errorText) end local function renderTitle() if not args['назва'] then return end has_rows = true has_list_class({args['клас_назви']}) root :tag('caption') :addClass('infobox-title') :addClass(args['клас_назви']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['стиль_назви']) :wikitext(args['назва']) end local function renderAboveRow(iteration_number) iteration_number = iteration_number or '' if not args['угорі' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_угорі' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['угорі' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['клас_угорі' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['стиль_угорі' .. iteration_number]) :wikitext(fixChildBoxes(args['угорі' .. iteration_number],'th')) end local function renderBelowRow(iteration_number) iteration_number = iteration_number or '' if not args['внизу' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_внизу' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['внизу' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу' .. iteration_number]) :wikitext(fixChildBoxes(args['внизу' .. iteration_number],'td')) end local function renderBelowRow2() if not args['внизу2'] then return end has_rows = true has_list_class({ args['клас_внизу2'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу2']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу2']) :wikitext(fixChildBoxes(args['внизу2'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and mw.ustring.gsub(subheaderArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass(isUntitledChildBox(subheaderArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['підзаголовок'] then args['підзаголовок1'] = args['підзаголовок'] end if args['клас_рядка_підзаголовок'] then args['клас_рядка_підзаголовок1'] = args['клас_рядка_підзаголовок'] end local subheadernums = getArgNums('підзаголовок') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['підзаголовок' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['стиль_підзаголовок'] or args['стиль_підзаголовоків'], rowcellstyle = args['стиль_підзаголовок' .. tostring(num)], class = args['клас_підзаголовоків'], rowclass = args['клас_рядка_підзаголовок' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and mw.ustring.gsub(imageArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass(isUntitledChildBox(imageArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['зображення'] then args['зображення1'] = args['зображення'] end if args['підпис'] then args['підпис1'] = args['підпис'] end local imagenums = getArgNums('зображення') for k, num in ipairs(imagenums) do local caption = args['підпис' .. tostring(num)] local data = mw.html.create():wikitext(args['зображення' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['стиль_підпису']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['стиль_зображення'], class = args['клас_зображення'], rowclass = args['клас_рядка_зображення' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['автозаголовки'] then return end local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['заголовок' .. tostring(num)] then if lastheader then args['заголовок' .. tostring(lastheader)] = nil end lastheader = num elseif (args['текст' .. tostring(num)] and mw.ustring.gsub(args['текст' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) or (args['вікідані' .. tostring(num)] and mw.ustring.gsub(args['вікідані' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) then local data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]) if data and mw.ustring.gsub(data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('%S') then lastheader = nil end end end if lastheader then args['заголовок' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['заголовок' .. tostring(num)], label = args['мітка' .. tostring(num)], data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]), dataclass = args['клас_тексту'], datastyle = args['стиль_тексту'], class = args['клас' .. tostring(num)], rowclass = args['клас_рядка' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['стиль_рядка' .. tostring(num)], rowcellstyle = args['стиль_комірки_рядка' .. tostring(num)] }) end end local function renderNavBar() if not args['ім\'я'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Модуль:Navbar')._navbar{ args['ім\'я'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then root:wikitext(require('Модуль:Заголовок курсивом')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.nocat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.nocat) then return end if yesno(args['вбудовування']) then if args['назва'] then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони вбудованої картки з параметром назва]]' ) end elseif #(getArgNums('текст')) == 0 and #(getArgNums('вікідані')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Категорія:Статті, що використовують шаблони картка без рядків параметра текст]]') end if args['ім\'я'] then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з параметром ім\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]') end if has_error then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з двома однаковими параметрами]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Модуль:Картка/styles.css' } } local templatestyles = '' if args['стилі_шаблону'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону'] } } end local child_templatestyles = '' if args['стилі_шаблону вбудовування'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вбудовування'] } } end local grandchild_templatestyles = '' if args['стилі_шаблону вторинного_вбудовування'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вторинного_вбудовування'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderBelowRow('2') -- renderNavBar() (тимчасово поки закоментував) renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if not yesno(args['вбудовування']) then root = mw.html.create('table') local infoboxWidth = '' if args['ширина-картки'] then infoboxWidth = "width:" .. args['ширина-картки'] end root :addClass(yesno(args['підкартка']) and 'infobox-subbox' or 'infobox') :addClass(args['клас_тіла']) -- @deprecated next; target .infobox-<name> :cssText(args['стиль_тіла']) -- infobox width from a parameter :cssText(infoboxWidth) has_list_class({ args['клас_тіла'] }) renderError() renderTitle() renderAboveRow() renderAboveRow('2') else root = mw.html.create() local errorText = has_error and (error_message .. '</span><br/>') or '' root :wikitext(errorText) :wikitext(args['назва']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end local function translateArg(aliasArgName,localArgName) -- Функція додає підтримку аліасів параметрів (наприклад, іншою мовою) -- Додаєм аліас параметра в таблицю аліасів -- Для одного параметра може бути кілька аліасів -- Нумеровані параметри(текст1 і т.д.) заносяться без номера if not argsAliases[localArgName] then argsAliases[localArgName] = {} end table.insert(argsAliases[localArgName], aliasArgName) -- Значення аліасів додаются в таблицю аргументів if origArgs[localArgName] and origArgs[localArgName] ~= '' then -- параметр вже заданий на локальній мові -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then -- local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|довідка]])' -- error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain() -- has_error = true end else -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then origArgs[localArgName] = origArgs[aliasArgName] end end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Виявлено нетабличне значення для таблиці префіксів", 2) end if type(step) ~= 'number' then error("Виявлено недійсне значення параметра кроку", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.prefix_trans and type(v.prefix_trans) ~= "string") or (v.depend and type(v.depend) ~= 'table') or (v.depend_trans and type(v.depend_trans) ~= 'table') then error('Виявлено недійсне значення в таблиці префіксів preprocessArgs', 2) end -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then translateArg(v.prefix_trans,v.prefix) else preprocessSingleArg(v.prefix) end -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end preprocessSingleArg(dependValue) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif origArgs[v.prefix] and v.depend_trans then for j, dependValue in ipairs(v.depend) do for k, depend_transValue in ipairs(v.depend_trans) do if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end translateArg(depend_transValue,dependValue) end end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then local prefix_transArgName = v.prefix_trans .. tostring(i) if origArgs[prefix_transArgName] then moreArgumentsExist = true translateArg(prefix_transArgName,prefixArgName) end else if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then for j,dependValue in ipairs(v.depend) do for k,depend_transValue in ipairs(v.depend_trans) do local dependArgName = dependValue .. tostring(i) local depend_transArgName = depend_transValue .. tostring(i) translateArg(depend_transArgName, dependArgName) end end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() translateArg('autoheaders','автозаголовки') translateArg('child', 'вбудовування') translateArg('infobox-width', 'ширина-картки') translateArg('bodyclass', 'клас_тіла') translateArg('subbox', 'підкартка') translateArg('bodystyle', 'стиль_тіла') translateArg('title', 'назва') translateArg('titleclass', 'клас_назви') translateArg('titlestyle', 'стиль_назви') translateArg('above', 'угорі') translateArg('aboveclass', 'клас_угорі') translateArg('abovestyle', 'стиль_угорі') translateArg('above2', 'угорі2') translateArg('aboveclass2', 'клас_угорі2') translateArg('abovestyle2', 'стиль_угорі2') preprocessArgs({ {prefix_trans = 'subheader', prefix = 'підзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) translateArg('subheaderstyle', 'стиль_підзаголовків') translateArg('subheaderclass','клас_підзаголовків') preprocessArgs({ {prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'підпис', 'клас_рядка_зображення'}} }, 10) translateArg('captionstyle', 'стиль_підпису') translateArg('imagestyle', 'стиль_зображення') translateArg('imageclass', 'клас_зображення') translateArg('wikidatamodulename','назва_модуля_вікіданих') translateArg('parameterswikidata','параметри_вікіданих') preprocessArgs({ {prefix_trans = 'header', prefix = 'заголовок'}, {prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'мітка'}}, {prefix_trans = 'wikidata', prefix = 'вікідані', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'мітка', 'параметри_рядка_вікіданих' }}, {prefix_trans = 'rowclass', prefix = 'клас_рядка'}, {prefix_trans = 'rowstyle', prefix = 'стиль_рядка'}, {prefix_trans = 'rowcellstyle', prefix = 'стиль_комірки_рядка'}, {prefix_trans = 'class', prefix = 'клас'} }, 100) translateArg('headerclass', 'клас_заголовків') translateArg('headerstyle', 'стиль_заголовків') translateArg('labelclass', 'клас_міток') translateArg('labelstyle', 'стиль_міток') translateArg('dataclass', 'клас_тексту') translateArg('datastyle', 'стиль_тексту') translateArg('below', 'внизу') translateArg('belowclass', 'клас_внизу') translateArg('belowstyle', 'стиль_внизу') translateArg('below2', 'внизу2') translateArg('belowclass2', 'клас_внизу2') translateArg('belowstyle2', 'стиль_внизу2') translateArg('name', 'ім\'я') translateArg('decat', 'nocat') translateArg('templatestyles', 'стилі_шаблону') translateArg('child templatestyles', 'стилі_шаблону вбудовування') translateArg('grandchild templatestyles', 'стилі_шаблону вторинного_вбудовування') preprocessSingleArg('автозаголовки') preprocessSingleArg('вбудовування') preprocessSingleArg('ширина-картки') preprocessSingleArg('клас_тіла') preprocessSingleArg('підкартка') preprocessSingleArg('стиль_тіла') preprocessSingleArg('назва') preprocessSingleArg('клас_назви') preprocessSingleArg('стиль_назви') preprocessSingleArg('угорі') preprocessSingleArg('клас_угорі') preprocessSingleArg('стиль_угорі') preprocessSingleArg('угорі2') preprocessSingleArg('клас_угорі2') preprocessSingleArg('стиль_угорі2') preprocessArgs({ {prefix = 'підзаголовок', depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) preprocessSingleArg('стиль_підзаголовків') preprocessSingleArg('клас_підзаголовків') preprocessArgs({ {prefix = 'зображення', depend = {'підпис', 'клас_рядка_зображення'}} }, 10) preprocessSingleArg('стиль_підпису') preprocessSingleArg('стиль_зображення') preprocessSingleArg('клас_зображення') preprocessSingleArg('назва_модуля_вікіданих') processParamsFromArg(origArgs['параметри_вікіданих'], 'wikidata', true) preprocessArgs({ {prefix = 'заголовок'}, {prefix = 'текст', depend = {'мітка'}}, {prefix = 'вікідані', depend = {'мітка', 'параметри_рядка_вікіданих'}}, {prefix = 'клас_рядка'}, {prefix = 'стиль_рядка'}, {prefix = 'стиль_комірки_рядка'}, {prefix = 'клас'} }, 100) preprocessSingleArg('клас_заголовків') preprocessSingleArg('стиль_заголовків') preprocessSingleArg('клас_міток') preprocessSingleArg('стиль_міток') preprocessSingleArg('клас_тексту') preprocessSingleArg('стиль_тексту') preprocessSingleArg('внизу') preprocessSingleArg('клас_внизу') preprocessSingleArg('стиль_внизу') preprocessSingleArg('внизу2') preprocessSingleArg('клас_внизу2') preprocessSingleArg('стиль_внизу2') preprocessSingleArg('ім\'я') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title'] preprocessSingleArg('nocat') preprocessSingleArg('стилі_шаблону') preprocessSingleArg('стилі_шаблону вбудовування') preprocessSingleArg('стилі_шаблону вторинного_вбудовування') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p gq5q6tefm4v0sjx1249in8mwh39tslg 392885 392884 2026-11-09T09:06:12Z ~2026-59388-70 28966 392885 Scribunto text/plain -- -- Модуль для реалізації шаблону {{Kartka}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Modul:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local has_error = false local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Шаблон:Картка|Картка]]}}</kbd>: ' local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and (sval:match( '^%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*$')) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2, t3) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end if t3 then for k, v in pairs(t3) do vals[v] = true end end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function processParamsFromArg (paramList, paramType, is_global) local paramName = ('wikidata' == paramType) and 'параметри_вікіданих' or 'параметри_зображення_картки' local paramsArgs = {} if paramList and paramList ~= '' then -- local allowedParams = getAllowedList(paramType) for item in paramList:gmatch("(%S+%s*%S+);%s*") do local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)") -- for k, v in ipairs(allowedParams) do --чи тут потрібна взагалі перевірка на підтримувані параметри? -- if v == param then paramsArgs[param] = arg -- end -- end end if is_global then args[paramName] = paramsArgs return '' end end if args[paramName] and args[paramName] ~= '' then for param, arg in pairs(args[paramName]) do if not paramsArgs[param] or paramsArgs[param] == '' then paramsArgs[param] = arg end end end return is_global and '' or paramsArgs end local function processWikidata(text, element, wdParams) if element then if args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidataib' then local wikidata = require("Модуль:WikidataIB") local wdArgs = processParamsFromArg(wdParams, 'wikidata') wdArgs[1] = element:upper() wdArgs[2] = text local temptext if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then local wdFrame = mw.getCurrentFrame() if wdArgs['function'] == 'getCoords' then wdArgs[1] = text wdArgs[2] = '' end wdFrame.args = wdArgs temptext = wikidata[wdArgs['function']](wdFrame) else temptext = wikidata._getValue(wdArgs) end if temptext and wdArgs.ref == "yes" then local wd = require("Модуль:wd") temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element}) end text = temptext elseif args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidata1' then local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata1") wdFrame.args = {} local wdfunction if origArgs['qid'] and origArgs['qid'] ~= '' then wdFrame.args[1] = origArgs['qid'] wdFrame.args[2] = element:upper() wdFrame.args[3] = text wdfunction = 'getValueFromID' else wdFrame.args[1] = element:upper() wdFrame.args[2] = text wdfunction = 'getValue' end text = wikidata[wdfunction](wdFrame) else local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata") wdFrame.args = { property = element, value = text, from = origArgs[ 'from' ] or '' } text = wikidata.formatProperty(wdFrame) end end return text end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовків'] }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass(isUntitledChildBox(rowArgs.header) and 'infobox-hiddenrow' or nil) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['клас_заголовків']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['стиль_заголовків']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.nocat) then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони картка з проігнорованими комірками параметра текст]]' ) end elseif rowArgs.data and mw.ustring.gsub(rowArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') :addClass(args['клас_міток']) -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['стиль_міток']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end if rowArgs.data == '----' then --Так як при переході на модуль перестали працювати чотири дефіси rowArgs.data = '<hr/>' --тому робимо їхню заміну на '<hr/>' end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.dataclass) :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderError() if not has_error then return end local errorText = error_message .. '</span><br/>' root :tag('caption') :addClass('infobox-title') :wikitext(errorText) end local function renderTitle() if not args['назва'] then return end has_rows = true has_list_class({args['клас_назви']}) root :tag('caption') :addClass('infobox-title') :addClass(args['клас_назви']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['стиль_назви']) :wikitext(args['назва']) end local function renderAboveRow(iteration_number) iteration_number = iteration_number or '' if not args['угорі' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_угорі' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['угорі' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['клас_угорі' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['стиль_угорі' .. iteration_number]) :wikitext(fixChildBoxes(args['угорі' .. iteration_number],'th')) end local function renderBelowRow(iteration_number) iteration_number = iteration_number or '' if not args['внизу' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_внизу' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['внизу' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу' .. iteration_number]) :wikitext(fixChildBoxes(args['внизу' .. iteration_number],'td')) end local function renderBelowRow2() if not args['внизу2'] then return end has_rows = true has_list_class({ args['клас_внизу2'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу2']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу2']) :wikitext(fixChildBoxes(args['внизу2'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and mw.ustring.gsub(subheaderArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass(isUntitledChildBox(subheaderArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['підзаголовок'] then args['підзаголовок1'] = args['підзаголовок'] end if args['клас_рядка_підзаголовок'] then args['клас_рядка_підзаголовок1'] = args['клас_рядка_підзаголовок'] end local subheadernums = getArgNums('підзаголовок') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['підзаголовок' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['стиль_підзаголовок'] or args['стиль_підзаголовоків'], rowcellstyle = args['стиль_підзаголовок' .. tostring(num)], class = args['клас_підзаголовоків'], rowclass = args['клас_рядка_підзаголовок' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and mw.ustring.gsub(imageArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass(isUntitledChildBox(imageArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['зображення'] then args['зображення1'] = args['зображення'] end if args['підпис'] then args['підпис1'] = args['підпис'] end local imagenums = getArgNums('зображення') for k, num in ipairs(imagenums) do local caption = args['підпис' .. tostring(num)] local data = mw.html.create():wikitext(args['зображення' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['стиль_підпису']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['стиль_зображення'], class = args['клас_зображення'], rowclass = args['клас_рядка_зображення' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['автозаголовки'] then return end local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['заголовок' .. tostring(num)] then if lastheader then args['заголовок' .. tostring(lastheader)] = nil end lastheader = num elseif (args['текст' .. tostring(num)] and mw.ustring.gsub(args['текст' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) or (args['вікідані' .. tostring(num)] and mw.ustring.gsub(args['вікідані' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) then local data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]) if data and mw.ustring.gsub(data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('%S') then lastheader = nil end end end if lastheader then args['заголовок' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['заголовок' .. tostring(num)], label = args['мітка' .. tostring(num)], data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]), dataclass = args['клас_тексту'], datastyle = args['стиль_тексту'], class = args['клас' .. tostring(num)], rowclass = args['клас_рядка' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['стиль_рядка' .. tostring(num)], rowcellstyle = args['стиль_комірки_рядка' .. tostring(num)] }) end end local function renderNavBar() if not args['ім\'я'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Модуль:Navbar')._navbar{ args['ім\'я'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then root:wikitext(require('Модуль:Заголовок курсивом')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.nocat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.nocat) then return end if yesno(args['вбудовування']) then if args['назва'] then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони вбудованої картки з параметром назва]]' ) end elseif #(getArgNums('текст')) == 0 and #(getArgNums('вікідані')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Категорія:Статті, що використовують шаблони картка без рядків параметра текст]]') end if args['ім\'я'] then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з параметром ім\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]') end if has_error then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з двома однаковими параметрами]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Модуль:Картка/styles.css' } } local templatestyles = '' if args['стилі_шаблону'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону'] } } end local child_templatestyles = '' if args['стилі_шаблону вбудовування'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вбудовування'] } } end local grandchild_templatestyles = '' if args['стилі_шаблону вторинного_вбудовування'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вторинного_вбудовування'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderBelowRow('2') -- renderNavBar() (тимчасово поки закоментував) renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if not yesno(args['вбудовування']) then root = mw.html.create('table') local infoboxWidth = '' if args['ширина-картки'] then infoboxWidth = "width:" .. args['ширина-картки'] end root :addClass(yesno(args['підкартка']) and 'infobox-subbox' or 'infobox') :addClass(args['клас_тіла']) -- @deprecated next; target .infobox-<name> :cssText(args['стиль_тіла']) -- infobox width from a parameter :cssText(infoboxWidth) has_list_class({ args['клас_тіла'] }) renderError() renderTitle() renderAboveRow() renderAboveRow('2') else root = mw.html.create() local errorText = has_error and (error_message .. '</span><br/>') or '' root :wikitext(errorText) :wikitext(args['назва']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end local function translateArg(aliasArgName,localArgName) -- Функція додає підтримку аліасів параметрів (наприклад, іншою мовою) -- Додаєм аліас параметра в таблицю аліасів -- Для одного параметра може бути кілька аліасів -- Нумеровані параметри(текст1 і т.д.) заносяться без номера if not argsAliases[localArgName] then argsAliases[localArgName] = {} end table.insert(argsAliases[localArgName], aliasArgName) -- Значення аліасів додаются в таблицю аргументів if origArgs[localArgName] and origArgs[localArgName] ~= '' then -- параметр вже заданий на локальній мові -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then -- local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|довідка]])' -- error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain() -- has_error = true end else -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then origArgs[localArgName] = origArgs[aliasArgName] end end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Виявлено нетабличне значення для таблиці префіксів", 2) end if type(step) ~= 'number' then error("Виявлено недійсне значення параметра кроку", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.prefix_trans and type(v.prefix_trans) ~= "string") or (v.depend and type(v.depend) ~= 'table') or (v.depend_trans and type(v.depend_trans) ~= 'table') then error('Виявлено недійсне значення в таблиці префіксів preprocessArgs', 2) end -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then translateArg(v.prefix_trans,v.prefix) else preprocessSingleArg(v.prefix) end -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end preprocessSingleArg(dependValue) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif origArgs[v.prefix] and v.depend_trans then for j, dependValue in ipairs(v.depend) do for k, depend_transValue in ipairs(v.depend_trans) do if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end translateArg(depend_transValue,dependValue) end end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then local prefix_transArgName = v.prefix_trans .. tostring(i) if origArgs[prefix_transArgName] then moreArgumentsExist = true translateArg(prefix_transArgName,prefixArgName) end else if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then for j,dependValue in ipairs(v.depend) do for k,depend_transValue in ipairs(v.depend_trans) do local dependArgName = dependValue .. tostring(i) local depend_transArgName = depend_transValue .. tostring(i) translateArg(depend_transArgName, dependArgName) end end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() translateArg('autoheaders','автозаголовки') translateArg('child', 'вбудовування') translateArg('infobox-width', 'ширина-картки') translateArg('bodyclass', 'клас_тіла') translateArg('subbox', 'підкартка') translateArg('bodystyle', 'стиль_тіла') translateArg('title', 'назва') translateArg('titleclass', 'клас_назви') translateArg('titlestyle', 'стиль_назви') translateArg('above', 'угорі') translateArg('aboveclass', 'клас_угорі') translateArg('abovestyle', 'стиль_угорі') translateArg('above2', 'угорі2') translateArg('aboveclass2', 'клас_угорі2') translateArg('abovestyle2', 'стиль_угорі2') preprocessArgs({ {prefix_trans = 'subheader', prefix = 'підзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) translateArg('subheaderstyle', 'стиль_підзаголовків') translateArg('subheaderclass','клас_підзаголовків') preprocessArgs({ {prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'підпис', 'клас_рядка_зображення'}} }, 10) translateArg('captionstyle', 'стиль_підпису') translateArg('imagestyle', 'стиль_зображення') translateArg('imageclass', 'клас_зображення') translateArg('wikidatamodulename','назва_модуля_вікіданих') translateArg('parameterswikidata','параметри_вікіданих') preprocessArgs({ {prefix_trans = 'header', prefix = 'заголовок'}, {prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'мітка'}}, {prefix_trans = 'wikidata', prefix = 'вікідані', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'мітка', 'параметри_рядка_вікіданих' }}, {prefix_trans = 'rowclass', prefix = 'клас_рядка'}, {prefix_trans = 'rowstyle', prefix = 'стиль_рядка'}, {prefix_trans = 'rowcellstyle', prefix = 'стиль_комірки_рядка'}, {prefix_trans = 'class', prefix = 'клас'} }, 100) translateArg('headerclass', 'клас_заголовків') translateArg('headerstyle', 'стиль_заголовків') translateArg('labelclass', 'клас_міток') translateArg('labelstyle', 'стиль_міток') translateArg('dataclass', 'клас_тексту') translateArg('datastyle', 'стиль_тексту') translateArg('below', 'внизу') translateArg('belowclass', 'клас_внизу') translateArg('belowstyle', 'стиль_внизу') translateArg('below2', 'внизу2') translateArg('belowclass2', 'клас_внизу2') translateArg('belowstyle2', 'стиль_внизу2') translateArg('name', 'ім\'я') translateArg('decat', 'nocat') translateArg('templatestyles', 'стилі_шаблону') translateArg('child templatestyles', 'стилі_шаблону вбудовування') translateArg('grandchild templatestyles', 'стилі_шаблону вторинного_вбудовування') preprocessSingleArg('автозаголовки') preprocessSingleArg('вбудовування') preprocessSingleArg('ширина-картки') preprocessSingleArg('клас_тіла') preprocessSingleArg('підкартка') preprocessSingleArg('стиль_тіла') preprocessSingleArg('назва') preprocessSingleArg('клас_назви') preprocessSingleArg('стиль_назви') preprocessSingleArg('угорі') preprocessSingleArg('клас_угорі') preprocessSingleArg('стиль_угорі') preprocessSingleArg('угорі2') preprocessSingleArg('клас_угорі2') preprocessSingleArg('стиль_угорі2') preprocessArgs({ {prefix = 'підзаголовок', depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) preprocessSingleArg('стиль_підзаголовків') preprocessSingleArg('клас_підзаголовків') preprocessArgs({ {prefix = 'зображення', depend = {'підпис', 'клас_рядка_зображення'}} }, 10) preprocessSingleArg('стиль_підпису') preprocessSingleArg('стиль_зображення') preprocessSingleArg('клас_зображення') preprocessSingleArg('назва_модуля_вікіданих') processParamsFromArg(origArgs['параметри_вікіданих'], 'wikidata', true) preprocessArgs({ {prefix = 'заголовок'}, {prefix = 'текст', depend = {'мітка'}}, {prefix = 'вікідані', depend = {'мітка', 'параметри_рядка_вікіданих'}}, {prefix = 'клас_рядка'}, {prefix = 'стиль_рядка'}, {prefix = 'стиль_комірки_рядка'}, {prefix = 'клас'} }, 100) preprocessSingleArg('клас_заголовків') preprocessSingleArg('стиль_заголовків') preprocessSingleArg('клас_міток') preprocessSingleArg('стиль_міток') preprocessSingleArg('клас_тексту') preprocessSingleArg('стиль_тексту') preprocessSingleArg('внизу') preprocessSingleArg('клас_внизу') preprocessSingleArg('стиль_внизу') preprocessSingleArg('внизу2') preprocessSingleArg('клас_внизу2') preprocessSingleArg('стиль_внизу2') preprocessSingleArg('ім\'я') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title'] preprocessSingleArg('nocat') preprocessSingleArg('стилі_шаблону') preprocessSingleArg('стилі_шаблону вбудовування') preprocessSingleArg('стилі_шаблону вторинного_вбудовування') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p 2z6pop3y8n96a7wn84ax994z785frm3 392888 392885 2026-11-09T09:27:27Z ~2026-59426-15 28967 392888 Scribunto text/plain -- -- Модуль для реалізації шаблону {{Kartka}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Modul:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local has_error = false local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Předłoha:Kartka|Kartka]]}}</kbd>: ' local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and (sval:match( '^%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*$')) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2, t3) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end if t3 then for k, v in pairs(t3) do vals[v] = true end end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function processParamsFromArg (paramList, paramType, is_global) local paramName = ('wikidata' == paramType) and 'параметри_вікіданих' or 'параметри_зображення_картки' local paramsArgs = {} if paramList and paramList ~= '' then -- local allowedParams = getAllowedList(paramType) for item in paramList:gmatch("(%S+%s*%S+);%s*") do local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)") -- for k, v in ipairs(allowedParams) do --чи тут потрібна взагалі перевірка на підтримувані параметри? -- if v == param then paramsArgs[param] = arg -- end -- end end if is_global then args[paramName] = paramsArgs return '' end end if args[paramName] and args[paramName] ~= '' then for param, arg in pairs(args[paramName]) do if not paramsArgs[param] or paramsArgs[param] == '' then paramsArgs[param] = arg end end end return is_global and '' or paramsArgs end local function processWikidata(text, element, wdParams) if element then if args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidataib' then local wikidata = require("Модуль:WikidataIB") local wdArgs = processParamsFromArg(wdParams, 'wikidata') wdArgs[1] = element:upper() wdArgs[2] = text local temptext if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then local wdFrame = mw.getCurrentFrame() if wdArgs['function'] == 'getCoords' then wdArgs[1] = text wdArgs[2] = '' end wdFrame.args = wdArgs temptext = wikidata[wdArgs['function']](wdFrame) else temptext = wikidata._getValue(wdArgs) end if temptext and wdArgs.ref == "yes" then local wd = require("Модуль:wd") temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element}) end text = temptext elseif args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidata1' then local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata1") wdFrame.args = {} local wdfunction if origArgs['qid'] and origArgs['qid'] ~= '' then wdFrame.args[1] = origArgs['qid'] wdFrame.args[2] = element:upper() wdFrame.args[3] = text wdfunction = 'getValueFromID' else wdFrame.args[1] = element:upper() wdFrame.args[2] = text wdfunction = 'getValue' end text = wikidata[wdfunction](wdFrame) else local wdFrame = mw.getCurrentFrame() local wikidata = require("Модуль:Wikidata") wdFrame.args = { property = element, value = text, from = origArgs[ 'from' ] or '' } text = wikidata.formatProperty(wdFrame) end end return text end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовків'] }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass(isUntitledChildBox(rowArgs.header) and 'infobox-hiddenrow' or nil) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['клас_заголовків']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['стиль_заголовків']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.nocat) then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони картка з проігнорованими комірками параметра текст]]' ) end elseif rowArgs.data and mw.ustring.gsub(rowArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') :addClass(args['клас_міток']) -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['стиль_міток']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end if rowArgs.data == '----' then --Так як при переході на модуль перестали працювати чотири дефіси rowArgs.data = '<hr/>' --тому робимо їхню заміну на '<hr/>' end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.dataclass) :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderError() if not has_error then return end local errorText = error_message .. '</span><br/>' root :tag('caption') :addClass('infobox-title') :wikitext(errorText) end local function renderTitle() if not args['назва'] then return end has_rows = true has_list_class({args['клас_назви']}) root :tag('caption') :addClass('infobox-title') :addClass(args['клас_назви']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['стиль_назви']) :wikitext(args['назва']) end local function renderAboveRow(iteration_number) iteration_number = iteration_number or '' if not args['угорі' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_угорі' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['угорі' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['клас_угорі' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['стиль_угорі' .. iteration_number]) :wikitext(fixChildBoxes(args['угорі' .. iteration_number],'th')) end local function renderBelowRow(iteration_number) iteration_number = iteration_number or '' if not args['внизу' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_внизу' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['внизу' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу' .. iteration_number]) :wikitext(fixChildBoxes(args['внизу' .. iteration_number],'td')) end local function renderBelowRow2() if not args['внизу2'] then return end has_rows = true has_list_class({ args['клас_внизу2'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу2']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу2']) :wikitext(fixChildBoxes(args['внизу2'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and mw.ustring.gsub(subheaderArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass(isUntitledChildBox(subheaderArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['підзаголовок'] then args['підзаголовок1'] = args['підзаголовок'] end if args['клас_рядка_підзаголовок'] then args['клас_рядка_підзаголовок1'] = args['клас_рядка_підзаголовок'] end local subheadernums = getArgNums('підзаголовок') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['підзаголовок' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['стиль_підзаголовок'] or args['стиль_підзаголовоків'], rowcellstyle = args['стиль_підзаголовок' .. tostring(num)], class = args['клас_підзаголовоків'], rowclass = args['клас_рядка_підзаголовок' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and mw.ustring.gsub(imageArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass(isUntitledChildBox(imageArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['зображення'] then args['зображення1'] = args['зображення'] end if args['підпис'] then args['підпис1'] = args['підпис'] end local imagenums = getArgNums('зображення') for k, num in ipairs(imagenums) do local caption = args['підпис' .. tostring(num)] local data = mw.html.create():wikitext(args['зображення' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['стиль_підпису']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['стиль_зображення'], class = args['клас_зображення'], rowclass = args['клас_рядка_зображення' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['автозаголовки'] then return end local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['заголовок' .. tostring(num)] then if lastheader then args['заголовок' .. tostring(lastheader)] = nil end lastheader = num elseif (args['текст' .. tostring(num)] and mw.ustring.gsub(args['текст' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) or (args['вікідані' .. tostring(num)] and mw.ustring.gsub(args['вікідані' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) then local data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]) if data and mw.ustring.gsub(data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('%S') then lastheader = nil end end end if lastheader then args['заголовок' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['заголовок' .. tostring(num)], label = args['мітка' .. tostring(num)], data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]), dataclass = args['клас_тексту'], datastyle = args['стиль_тексту'], class = args['клас' .. tostring(num)], rowclass = args['клас_рядка' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['стиль_рядка' .. tostring(num)], rowcellstyle = args['стиль_комірки_рядка' .. tostring(num)] }) end end local function renderNavBar() if not args['ім\'я'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Модуль:Navbar')._navbar{ args['ім\'я'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then root:wikitext(require('Модуль:Заголовок курсивом')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.nocat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.nocat) then return end if yesno(args['вбудовування']) then if args['назва'] then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони вбудованої картки з параметром назва]]' ) end elseif #(getArgNums('текст')) == 0 and #(getArgNums('вікідані')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Категорія:Статті, що використовують шаблони картка без рядків параметра текст]]') end if args['ім\'я'] then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з параметром ім\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]') end if has_error then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з двома однаковими параметрами]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Модуль:Картка/styles.css' } } local templatestyles = '' if args['стилі_шаблону'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону'] } } end local child_templatestyles = '' if args['стилі_шаблону вбудовування'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вбудовування'] } } end local grandchild_templatestyles = '' if args['стилі_шаблону вторинного_вбудовування'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вторинного_вбудовування'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderBelowRow('2') -- renderNavBar() (тимчасово поки закоментував) renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if not yesno(args['вбудовування']) then root = mw.html.create('table') local infoboxWidth = '' if args['ширина-картки'] then infoboxWidth = "width:" .. args['ширина-картки'] end root :addClass(yesno(args['підкартка']) and 'infobox-subbox' or 'infobox') :addClass(args['клас_тіла']) -- @deprecated next; target .infobox-<name> :cssText(args['стиль_тіла']) -- infobox width from a parameter :cssText(infoboxWidth) has_list_class({ args['клас_тіла'] }) renderError() renderTitle() renderAboveRow() renderAboveRow('2') else root = mw.html.create() local errorText = has_error and (error_message .. '</span><br/>') or '' root :wikitext(errorText) :wikitext(args['назва']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end local function translateArg(aliasArgName,localArgName) -- Функція додає підтримку аліасів параметрів (наприклад, іншою мовою) -- Додаєм аліас параметра в таблицю аліасів -- Для одного параметра може бути кілька аліасів -- Нумеровані параметри(текст1 і т.д.) заносяться без номера if not argsAliases[localArgName] then argsAliases[localArgName] = {} end table.insert(argsAliases[localArgName], aliasArgName) -- Значення аліасів додаются в таблицю аргументів if origArgs[localArgName] and origArgs[localArgName] ~= '' then -- параметр вже заданий на локальній мові -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then -- local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|довідка]])' -- error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain() -- has_error = true end else -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then origArgs[localArgName] = origArgs[aliasArgName] end end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Виявлено нетабличне значення для таблиці префіксів", 2) end if type(step) ~= 'number' then error("Виявлено недійсне значення параметра кроку", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.prefix_trans and type(v.prefix_trans) ~= "string") or (v.depend and type(v.depend) ~= 'table') or (v.depend_trans and type(v.depend_trans) ~= 'table') then error('Виявлено недійсне значення в таблиці префіксів preprocessArgs', 2) end -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then translateArg(v.prefix_trans,v.prefix) else preprocessSingleArg(v.prefix) end -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end preprocessSingleArg(dependValue) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif origArgs[v.prefix] and v.depend_trans then for j, dependValue in ipairs(v.depend) do for k, depend_transValue in ipairs(v.depend_trans) do if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end translateArg(depend_transValue,dependValue) end end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then local prefix_transArgName = v.prefix_trans .. tostring(i) if origArgs[prefix_transArgName] then moreArgumentsExist = true translateArg(prefix_transArgName,prefixArgName) end else if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then for j,dependValue in ipairs(v.depend) do for k,depend_transValue in ipairs(v.depend_trans) do local dependArgName = dependValue .. tostring(i) local depend_transArgName = depend_transValue .. tostring(i) translateArg(depend_transArgName, dependArgName) end end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() translateArg('autoheaders','автозаголовки') translateArg('child', 'вбудовування') translateArg('infobox-width', 'ширина-картки') translateArg('bodyclass', 'клас_тіла') translateArg('subbox', 'підкартка') translateArg('bodystyle', 'стиль_тіла') translateArg('title', 'назва') translateArg('titleclass', 'клас_назви') translateArg('titlestyle', 'стиль_назви') translateArg('above', 'угорі') translateArg('aboveclass', 'клас_угорі') translateArg('abovestyle', 'стиль_угорі') translateArg('above2', 'угорі2') translateArg('aboveclass2', 'клас_угорі2') translateArg('abovestyle2', 'стиль_угорі2') preprocessArgs({ {prefix_trans = 'subheader', prefix = 'підзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) translateArg('subheaderstyle', 'стиль_підзаголовків') translateArg('subheaderclass','клас_підзаголовків') preprocessArgs({ {prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'підпис', 'клас_рядка_зображення'}} }, 10) translateArg('captionstyle', 'стиль_підпису') translateArg('imagestyle', 'стиль_зображення') translateArg('imageclass', 'клас_зображення') translateArg('wikidatamodulename','назва_модуля_вікіданих') translateArg('parameterswikidata','параметри_вікіданих') preprocessArgs({ {prefix_trans = 'header', prefix = 'заголовок'}, {prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'мітка'}}, {prefix_trans = 'wikidata', prefix = 'вікідані', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'мітка', 'параметри_рядка_вікіданих' }}, {prefix_trans = 'rowclass', prefix = 'клас_рядка'}, {prefix_trans = 'rowstyle', prefix = 'стиль_рядка'}, {prefix_trans = 'rowcellstyle', prefix = 'стиль_комірки_рядка'}, {prefix_trans = 'class', prefix = 'клас'} }, 100) translateArg('headerclass', 'клас_заголовків') translateArg('headerstyle', 'стиль_заголовків') translateArg('labelclass', 'клас_міток') translateArg('labelstyle', 'стиль_міток') translateArg('dataclass', 'клас_тексту') translateArg('datastyle', 'стиль_тексту') translateArg('below', 'внизу') translateArg('belowclass', 'клас_внизу') translateArg('belowstyle', 'стиль_внизу') translateArg('below2', 'внизу2') translateArg('belowclass2', 'клас_внизу2') translateArg('belowstyle2', 'стиль_внизу2') translateArg('name', 'ім\'я') translateArg('decat', 'nocat') translateArg('templatestyles', 'стилі_шаблону') translateArg('child templatestyles', 'стилі_шаблону вбудовування') translateArg('grandchild templatestyles', 'стилі_шаблону вторинного_вбудовування') preprocessSingleArg('автозаголовки') preprocessSingleArg('вбудовування') preprocessSingleArg('ширина-картки') preprocessSingleArg('клас_тіла') preprocessSingleArg('підкартка') preprocessSingleArg('стиль_тіла') preprocessSingleArg('назва') preprocessSingleArg('клас_назви') preprocessSingleArg('стиль_назви') preprocessSingleArg('угорі') preprocessSingleArg('клас_угорі') preprocessSingleArg('стиль_угорі') preprocessSingleArg('угорі2') preprocessSingleArg('клас_угорі2') preprocessSingleArg('стиль_угорі2') preprocessArgs({ {prefix = 'підзаголовок', depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) preprocessSingleArg('стиль_підзаголовків') preprocessSingleArg('клас_підзаголовків') preprocessArgs({ {prefix = 'зображення', depend = {'підпис', 'клас_рядка_зображення'}} }, 10) preprocessSingleArg('стиль_підпису') preprocessSingleArg('стиль_зображення') preprocessSingleArg('клас_зображення') preprocessSingleArg('назва_модуля_вікіданих') processParamsFromArg(origArgs['параметри_вікіданих'], 'wikidata', true) preprocessArgs({ {prefix = 'заголовок'}, {prefix = 'текст', depend = {'мітка'}}, {prefix = 'вікідані', depend = {'мітка', 'параметри_рядка_вікіданих'}}, {prefix = 'клас_рядка'}, {prefix = 'стиль_рядка'}, {prefix = 'стиль_комірки_рядка'}, {prefix = 'клас'} }, 100) preprocessSingleArg('клас_заголовків') preprocessSingleArg('стиль_заголовків') preprocessSingleArg('клас_міток') preprocessSingleArg('стиль_міток') preprocessSingleArg('клас_тексту') preprocessSingleArg('стиль_тексту') preprocessSingleArg('внизу') preprocessSingleArg('клас_внизу') preprocessSingleArg('стиль_внизу') preprocessSingleArg('внизу2') preprocessSingleArg('клас_внизу2') preprocessSingleArg('стиль_внизу2') preprocessSingleArg('ім\'я') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title'] preprocessSingleArg('nocat') preprocessSingleArg('стилі_шаблону') preprocessSingleArg('стилі_шаблону вбудовування') preprocessSingleArg('стилі_шаблону вторинного_вбудовування') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p l4fm1ycpq1963q0b1wpesi6py1xkz4p 392889 392888 2026-11-09T09:35:57Z ~2026-59426-15 28967 392889 Scribunto text/plain -- -- Модуль для реалізації шаблону {{Kartka}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Modul:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local has_error = false local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Předłoha:Kartka|Kartka]]}}</kbd>: ' local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and (sval:match( '^%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*$')) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2, t3) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end if t3 then for k, v in pairs(t3) do vals[v] = true end end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function processParamsFromArg (paramList, paramType, is_global) local paramName = ('wikidata' == paramType) and 'параметри_вікіданих' or 'параметри_зображення_картки' local paramsArgs = {} if paramList and paramList ~= '' then -- local allowedParams = getAllowedList(paramType) for item in paramList:gmatch("(%S+%s*%S+);%s*") do local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)") -- for k, v in ipairs(allowedParams) do --чи тут потрібна взагалі перевірка на підтримувані параметри? -- if v == param then paramsArgs[param] = arg -- end -- end end if is_global then args[paramName] = paramsArgs return '' end end if args[paramName] and args[paramName] ~= '' then for param, arg in pairs(args[paramName]) do if not paramsArgs[param] or paramsArgs[param] == '' then paramsArgs[param] = arg end end end return is_global and '' or paramsArgs end local function processWikidata(text, element, wdParams) if element then if args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidataib' then local wikidata = require("Modul:WikidataIB") local wdArgs = processParamsFromArg(wdParams, 'wikidata') wdArgs[1] = element:upper() wdArgs[2] = text local temptext if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then local wdFrame = mw.getCurrentFrame() if wdArgs['function'] == 'getCoords' then wdArgs[1] = text wdArgs[2] = '' end wdFrame.args = wdArgs temptext = wikidata[wdArgs['function']](wdFrame) else temptext = wikidata._getValue(wdArgs) end if temptext and wdArgs.ref == "yes" then local wd = require("Modul:wd") temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element}) end text = temptext elseif args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidata1' then local wdFrame = mw.getCurrentFrame() local wikidata = require("Modul:Wikidata1") wdFrame.args = {} local wdfunction if origArgs['qid'] and origArgs['qid'] ~= '' then wdFrame.args[1] = origArgs['qid'] wdFrame.args[2] = element:upper() wdFrame.args[3] = text wdfunction = 'getValueFromID' else wdFrame.args[1] = element:upper() wdFrame.args[2] = text wdfunction = 'getValue' end text = wikidata[wdfunction](wdFrame) else local wdFrame = mw.getCurrentFrame() local wikidata = require("Modul:Wikidata") wdFrame.args = { property = element, value = text, from = origArgs[ 'from' ] or '' } text = wikidata.formatProperty(wdFrame) end end return text end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовків'] }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass(isUntitledChildBox(rowArgs.header) and 'infobox-hiddenrow' or nil) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['клас_заголовків']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['стиль_заголовків']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.nocat) then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони картка з проігнорованими комірками параметра текст]]' ) end elseif rowArgs.data and mw.ustring.gsub(rowArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') :addClass(args['клас_міток']) -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['стиль_міток']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end if rowArgs.data == '----' then --Так як при переході на модуль перестали працювати чотири дефіси rowArgs.data = '<hr/>' --тому робимо їхню заміну на '<hr/>' end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.dataclass) :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderError() if not has_error then return end local errorText = error_message .. '</span><br/>' root :tag('caption') :addClass('infobox-title') :wikitext(errorText) end local function renderTitle() if not args['назва'] then return end has_rows = true has_list_class({args['клас_назви']}) root :tag('caption') :addClass('infobox-title') :addClass(args['клас_назви']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['стиль_назви']) :wikitext(args['назва']) end local function renderAboveRow(iteration_number) iteration_number = iteration_number or '' if not args['угорі' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_угорі' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['угорі' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['клас_угорі' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['стиль_угорі' .. iteration_number]) :wikitext(fixChildBoxes(args['угорі' .. iteration_number],'th')) end local function renderBelowRow(iteration_number) iteration_number = iteration_number or '' if not args['внизу' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_внизу' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['внизу' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу' .. iteration_number]) :wikitext(fixChildBoxes(args['внизу' .. iteration_number],'td')) end local function renderBelowRow2() if not args['внизу2'] then return end has_rows = true has_list_class({ args['клас_внизу2'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу2']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу2']) :wikitext(fixChildBoxes(args['внизу2'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and mw.ustring.gsub(subheaderArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass(isUntitledChildBox(subheaderArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['підзаголовок'] then args['підзаголовок1'] = args['підзаголовок'] end if args['клас_рядка_підзаголовок'] then args['клас_рядка_підзаголовок1'] = args['клас_рядка_підзаголовок'] end local subheadernums = getArgNums('підзаголовок') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['підзаголовок' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['стиль_підзаголовок'] or args['стиль_підзаголовоків'], rowcellstyle = args['стиль_підзаголовок' .. tostring(num)], class = args['клас_підзаголовоків'], rowclass = args['клас_рядка_підзаголовок' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and mw.ustring.gsub(imageArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass(isUntitledChildBox(imageArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['зображення'] then args['зображення1'] = args['зображення'] end if args['підпис'] then args['підпис1'] = args['підпис'] end local imagenums = getArgNums('зображення') for k, num in ipairs(imagenums) do local caption = args['підпис' .. tostring(num)] local data = mw.html.create():wikitext(args['зображення' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['стиль_підпису']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['стиль_зображення'], class = args['клас_зображення'], rowclass = args['клас_рядка_зображення' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['автозаголовки'] then return end local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['заголовок' .. tostring(num)] then if lastheader then args['заголовок' .. tostring(lastheader)] = nil end lastheader = num elseif (args['текст' .. tostring(num)] and mw.ustring.gsub(args['текст' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) or (args['вікідані' .. tostring(num)] and mw.ustring.gsub(args['вікідані' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) then local data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]) if data and mw.ustring.gsub(data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('%S') then lastheader = nil end end end if lastheader then args['заголовок' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['заголовок' .. tostring(num)], label = args['мітка' .. tostring(num)], data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]), dataclass = args['клас_тексту'], datastyle = args['стиль_тексту'], class = args['клас' .. tostring(num)], rowclass = args['клас_рядка' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['стиль_рядка' .. tostring(num)], rowcellstyle = args['стиль_комірки_рядка' .. tostring(num)] }) end end local function renderNavBar() if not args['ім\'я'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Modul:Navbar')._navbar{ args['ім\'я'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then root:wikitext(require('Modul:Заголовок курсивом')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.nocat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.nocat) then return end if yesno(args['вбудовування']) then if args['назва'] then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони вбудованої картки з параметром назва]]' ) end elseif #(getArgNums('текст')) == 0 and #(getArgNums('вікідані')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Категорія:Статті, що використовують шаблони картка без рядків параметра текст]]') end if args['ім\'я'] then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з параметром ім\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]') end if has_error then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з двома однаковими параметрами]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Modul:Картка/styles.css' } } local templatestyles = '' if args['стилі_шаблону'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону'] } } end local child_templatestyles = '' if args['стилі_шаблону вбудовування'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вбудовування'] } } end local grandchild_templatestyles = '' if args['стилі_шаблону вторинного_вбудовування'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вторинного_вбудовування'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderBelowRow('2') -- renderNavBar() (тимчасово поки закоментував) renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if not yesno(args['вбудовування']) then root = mw.html.create('table') local infoboxWidth = '' if args['ширина-картки'] then infoboxWidth = "width:" .. args['ширина-картки'] end root :addClass(yesno(args['підкартка']) and 'infobox-subbox' or 'infobox') :addClass(args['клас_тіла']) -- @deprecated next; target .infobox-<name> :cssText(args['стиль_тіла']) -- infobox width from a parameter :cssText(infoboxWidth) has_list_class({ args['клас_тіла'] }) renderError() renderTitle() renderAboveRow() renderAboveRow('2') else root = mw.html.create() local errorText = has_error and (error_message .. '</span><br/>') or '' root :wikitext(errorText) :wikitext(args['назва']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end local function translateArg(aliasArgName,localArgName) -- Функція додає підтримку аліасів параметрів (наприклад, іншою мовою) -- Додаєм аліас параметра в таблицю аліасів -- Для одного параметра може бути кілька аліасів -- Нумеровані параметри(текст1 і т.д.) заносяться без номера if not argsAliases[localArgName] then argsAliases[localArgName] = {} end table.insert(argsAliases[localArgName], aliasArgName) -- Значення аліасів додаются в таблицю аргументів if origArgs[localArgName] and origArgs[localArgName] ~= '' then -- параметр вже заданий на локальній мові -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then -- local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|довідка]])' -- error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain() -- has_error = true end else -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then origArgs[localArgName] = origArgs[aliasArgName] end end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Виявлено нетабличне значення для таблиці префіксів", 2) end if type(step) ~= 'number' then error("Виявлено недійсне значення параметра кроку", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.prefix_trans and type(v.prefix_trans) ~= "string") or (v.depend and type(v.depend) ~= 'table') or (v.depend_trans and type(v.depend_trans) ~= 'table') then error('Виявлено недійсне значення в таблиці префіксів preprocessArgs', 2) end -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then translateArg(v.prefix_trans,v.prefix) else preprocessSingleArg(v.prefix) end -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end preprocessSingleArg(dependValue) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif origArgs[v.prefix] and v.depend_trans then for j, dependValue in ipairs(v.depend) do for k, depend_transValue in ipairs(v.depend_trans) do if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end translateArg(depend_transValue,dependValue) end end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then local prefix_transArgName = v.prefix_trans .. tostring(i) if origArgs[prefix_transArgName] then moreArgumentsExist = true translateArg(prefix_transArgName,prefixArgName) end else if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then for j,dependValue in ipairs(v.depend) do for k,depend_transValue in ipairs(v.depend_trans) do local dependArgName = dependValue .. tostring(i) local depend_transArgName = depend_transValue .. tostring(i) translateArg(depend_transArgName, dependArgName) end end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() translateArg('autoheaders','автозаголовки') translateArg('child', 'вбудовування') translateArg('infobox-width', 'ширина-картки') translateArg('bodyclass', 'клас_тіла') translateArg('subbox', 'підкартка') translateArg('bodystyle', 'стиль_тіла') translateArg('title', 'назва') translateArg('titleclass', 'клас_назви') translateArg('titlestyle', 'стиль_назви') translateArg('above', 'угорі') translateArg('aboveclass', 'клас_угорі') translateArg('abovestyle', 'стиль_угорі') translateArg('above2', 'угорі2') translateArg('aboveclass2', 'клас_угорі2') translateArg('abovestyle2', 'стиль_угорі2') preprocessArgs({ {prefix_trans = 'subheader', prefix = 'підзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) translateArg('subheaderstyle', 'стиль_підзаголовків') translateArg('subheaderclass','клас_підзаголовків') preprocessArgs({ {prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'підпис', 'клас_рядка_зображення'}} }, 10) translateArg('captionstyle', 'стиль_підпису') translateArg('imagestyle', 'стиль_зображення') translateArg('imageclass', 'клас_зображення') translateArg('wikidatamodulename','назва_модуля_вікіданих') translateArg('parameterswikidata','параметри_вікіданих') preprocessArgs({ {prefix_trans = 'header', prefix = 'заголовок'}, {prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'мітка'}}, {prefix_trans = 'wikidata', prefix = 'вікідані', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'мітка', 'параметри_рядка_вікіданих' }}, {prefix_trans = 'rowclass', prefix = 'клас_рядка'}, {prefix_trans = 'rowstyle', prefix = 'стиль_рядка'}, {prefix_trans = 'rowcellstyle', prefix = 'стиль_комірки_рядка'}, {prefix_trans = 'class', prefix = 'клас'} }, 100) translateArg('headerclass', 'клас_заголовків') translateArg('headerstyle', 'стиль_заголовків') translateArg('labelclass', 'клас_міток') translateArg('labelstyle', 'стиль_міток') translateArg('dataclass', 'клас_тексту') translateArg('datastyle', 'стиль_тексту') translateArg('below', 'внизу') translateArg('belowclass', 'клас_внизу') translateArg('belowstyle', 'стиль_внизу') translateArg('below2', 'внизу2') translateArg('belowclass2', 'клас_внизу2') translateArg('belowstyle2', 'стиль_внизу2') translateArg('name', 'ім\'я') translateArg('decat', 'nocat') translateArg('templatestyles', 'стилі_шаблону') translateArg('child templatestyles', 'стилі_шаблону вбудовування') translateArg('grandchild templatestyles', 'стилі_шаблону вторинного_вбудовування') preprocessSingleArg('автозаголовки') preprocessSingleArg('вбудовування') preprocessSingleArg('ширина-картки') preprocessSingleArg('клас_тіла') preprocessSingleArg('підкартка') preprocessSingleArg('стиль_тіла') preprocessSingleArg('назва') preprocessSingleArg('клас_назви') preprocessSingleArg('стиль_назви') preprocessSingleArg('угорі') preprocessSingleArg('клас_угорі') preprocessSingleArg('стиль_угорі') preprocessSingleArg('угорі2') preprocessSingleArg('клас_угорі2') preprocessSingleArg('стиль_угорі2') preprocessArgs({ {prefix = 'підзаголовок', depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) preprocessSingleArg('стиль_підзаголовків') preprocessSingleArg('клас_підзаголовків') preprocessArgs({ {prefix = 'зображення', depend = {'підпис', 'клас_рядка_зображення'}} }, 10) preprocessSingleArg('стиль_підпису') preprocessSingleArg('стиль_зображення') preprocessSingleArg('клас_зображення') preprocessSingleArg('назва_модуля_вікіданих') processParamsFromArg(origArgs['параметри_вікіданих'], 'wikidata', true) preprocessArgs({ {prefix = 'заголовок'}, {prefix = 'текст', depend = {'мітка'}}, {prefix = 'вікідані', depend = {'мітка', 'параметри_рядка_вікіданих'}}, {prefix = 'клас_рядка'}, {prefix = 'стиль_рядка'}, {prefix = 'стиль_комірки_рядка'}, {prefix = 'клас'} }, 100) preprocessSingleArg('клас_заголовків') preprocessSingleArg('стиль_заголовків') preprocessSingleArg('клас_міток') preprocessSingleArg('стиль_міток') preprocessSingleArg('клас_тексту') preprocessSingleArg('стиль_тексту') preprocessSingleArg('внизу') preprocessSingleArg('клас_внизу') preprocessSingleArg('стиль_внизу') preprocessSingleArg('внизу2') preprocessSingleArg('клас_внизу2') preprocessSingleArg('стиль_внизу2') preprocessSingleArg('ім\'я') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title'] preprocessSingleArg('nocat') preprocessSingleArg('стилі_шаблону') preprocessSingleArg('стилі_шаблону вбудовування') preprocessSingleArg('стилі_шаблону вторинного_вбудовування') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p 41q7wla7k5b506a5wz9366rdyh28zss 392890 392889 2026-11-09T09:39:13Z ~2026-59426-15 28967 392890 Scribunto text/plain -- -- Модуль для реалізації шаблону {{Kartka}} -- local p = {} local args = {} local argsAliases = {} local origArgs = {} local root local yesno = require("Modul:Yesno") local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%]' local category_in_empty_row_pattern_uk = '%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%]' local has_rows = false local has_error = false local error_message = '<span class="error" style="font-size:100%"><kbd>{{[[Předłoha:Kartka|Kartka]]}}</kbd>: ' local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function isUntitledChildBox(sval) return sval and (sval:match( '^%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*<%s*[Tt][Rr]') or sval:match('^%s*\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127%s*$')) end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Кк][Аа][Тт][Ее][Гг][Оо][Рр][Іі][Яя]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2, t3) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end if t3 then for k, v in pairs(t3) do vals[v] = true end end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end local function processParamsFromArg (paramList, paramType, is_global) local paramName = ('wikidata' == paramType) and 'параметри_вікіданих' or 'параметри_зображення_картки' local paramsArgs = {} if paramList and paramList ~= '' then -- local allowedParams = getAllowedList(paramType) for item in paramList:gmatch("(%S+%s*%S+);%s*") do local param, arg = mw.ustring.match(item, "^(%S+):%s*(%S+)") -- for k, v in ipairs(allowedParams) do --чи тут потрібна взагалі перевірка на підтримувані параметри? -- if v == param then paramsArgs[param] = arg -- end -- end end if is_global then args[paramName] = paramsArgs return '' end end if args[paramName] and args[paramName] ~= '' then for param, arg in pairs(args[paramName]) do if not paramsArgs[param] or paramsArgs[param] == '' then paramsArgs[param] = arg end end end return is_global and '' or paramsArgs end local function processWikidata(text, element, wdParams) if element then if args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidataib' then local wikidata = require("Modul:WikidataIB") local wdArgs = processParamsFromArg(wdParams, 'wikidata') wdArgs[1] = element:upper() wdArgs[2] = text local temptext if wdArgs['function'] and wdArgs['function'] ~= 'getValue' then local wdFrame = mw.getCurrentFrame() if wdArgs['function'] == 'getCoords' then wdArgs[1] = text wdArgs[2] = '' end wdFrame.args = wdArgs temptext = wikidata[wdArgs['function']](wdFrame) else temptext = wikidata._getValue(wdArgs) end if temptext and wdArgs.ref == "yes" then local wd = require("Modul:wd") temptext = temptext .. wd._references({'normal+', wdArgs.qid or '', element}) end text = temptext elseif args['назва_модуля_вікіданих'] and args['назва_модуля_вікіданих']:lower() == 'wikidata1' then local wdFrame = mw.getCurrentFrame() local wikidata = require("Modul:Wikidata1") wdFrame.args = {} local wdfunction if origArgs['qid'] and origArgs['qid'] ~= '' then wdFrame.args[1] = origArgs['qid'] wdFrame.args[2] = element:upper() wdFrame.args[3] = text wdfunction = 'getValueFromID' else wdFrame.args[1] = element:upper() wdFrame.args[2] = text wdfunction = 'getValue' end text = wikidata[wdfunction](wdFrame) else local wdFrame = mw.getCurrentFrame() local wikidata = require("Modul:Wikidata") wdFrame.args = { property = element, value = text, from = origArgs[ 'from' ] or '' } text = wikidata.formatProperty(wdFrame) end end return text end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args['клас_заголовків'] }) root :tag('tr') :addClass(rowArgs.rowclass) :addClass(isUntitledChildBox(rowArgs.header) and 'infobox-hiddenrow' or nil) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args['клас_заголовків']) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args['стиль_заголовків']) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data and not yesno(args.nocat) then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони картка з проігнорованими комірками параметра текст]]' ) end elseif rowArgs.data and mw.ustring.gsub(rowArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') :addClass(args['клас_міток']) -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args['стиль_міток']) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() else row:addClass( isUntitledChildBox( rowArgs.data ) and 'infobox-hiddenrow' or nil ) end if rowArgs.data == '----' then --Так як при переході на модуль перестали працювати чотири дефіси rowArgs.data = '<hr/>' --тому робимо їхню заміну на '<hr/>' end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.dataclass) :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderError() if not has_error then return end local errorText = error_message .. '</span><br/>' root :tag('caption') :addClass('infobox-title') :wikitext(errorText) end local function renderTitle() if not args['назва'] then return end has_rows = true has_list_class({args['клас_назви']}) root :tag('caption') :addClass('infobox-title') :addClass(args['клас_назви']) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args['стиль_назви']) :wikitext(args['назва']) end local function renderAboveRow(iteration_number) iteration_number = iteration_number or '' if not args['угорі' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_угорі' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['угорі' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args['клас_угорі' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args['стиль_угорі' .. iteration_number]) :wikitext(fixChildBoxes(args['угорі' .. iteration_number],'th')) end local function renderBelowRow(iteration_number) iteration_number = iteration_number or '' if not args['внизу' .. iteration_number] then return end has_rows = true has_list_class({ args['клас_внизу' .. iteration_number] }) root :tag('tr') :addClass(isUntitledChildBox(args['внизу' .. iteration_number]) and 'infobox-hiddenrow' or nil) :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу' .. iteration_number]) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу' .. iteration_number]) :wikitext(fixChildBoxes(args['внизу' .. iteration_number],'td')) end local function renderBelowRow2() if not args['внизу2'] then return end has_rows = true has_list_class({ args['клас_внизу2'] }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args['клас_внизу2']) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args['стиль_внизу2']) :wikitext(fixChildBoxes(args['внизу2'],'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and mw.ustring.gsub(subheaderArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) row:addClass(isUntitledChildBox(subheaderArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args['підзаголовок'] then args['підзаголовок1'] = args['підзаголовок'] end if args['клас_рядка_підзаголовок'] then args['клас_рядка_підзаголовок1'] = args['клас_рядка_підзаголовок'] end local subheadernums = getArgNums('підзаголовок') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['підзаголовок' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args['стиль_підзаголовок'] or args['стиль_підзаголовоків'], rowcellstyle = args['стиль_підзаголовок' .. tostring(num)], class = args['клас_підзаголовоків'], rowclass = args['клас_рядка_підзаголовок' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and mw.ustring.gsub(imageArgs.data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) row:addClass(isUntitledChildBox(imageArgs.data) and 'infobox-hiddenrow' or nil) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args['зображення'] then args['зображення1'] = args['зображення'] end if args['підпис'] then args['підпис1'] = args['підпис'] end local imagenums = getArgNums('зображення') for k, num in ipairs(imagenums) do local caption = args['підпис' .. tostring(num)] local data = mw.html.create():wikitext(args['зображення' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args['стиль_підпису']) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args['стиль_зображення'], class = args['клас_зображення'], rowclass = args['клас_рядка_зображення' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args['автозаголовки'] then return end local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['заголовок' .. tostring(num)] then if lastheader then args['заголовок' .. tostring(lastheader)] = nil end lastheader = num elseif (args['текст' .. tostring(num)] and mw.ustring.gsub(args['текст' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) or (args['вікідані' .. tostring(num)] and mw.ustring.gsub(args['вікідані' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ), category_in_empty_row_pattern_uk, '' ):match('^%S')) then local data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]) if data and mw.ustring.gsub(data:gsub(category_in_empty_row_pattern, ''), category_in_empty_row_pattern_uk, ''):match('%S') then lastheader = nil end end end if lastheader then args['заголовок' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('заголовок'), getArgNums('текст'), getArgNums('вікідані')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['заголовок' .. tostring(num)], label = args['мітка' .. tostring(num)], data = processWikidata(args['текст' .. tostring(num)], args['вікідані' .. tostring(num)], args['параметри_рядка_вікіданих' .. tostring(num)]), dataclass = args['клас_тексту'], datastyle = args['стиль_тексту'], class = args['клас' .. tostring(num)], rowclass = args['клас_рядка' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['стиль_рядка' .. tostring(num)], rowcellstyle = args['стиль_комірки_рядка' .. tostring(num)] }) end end local function renderNavBar() if not args['ім\'я'] then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Modul:Navbar')._navbar{ args['ім\'я'], mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'примусово' or italicTitle == 'yes' or italicTitle == 'так' then root:wikitext(require('Modul:Заголовок курсивом')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.nocat == turns off tracking categories. local function renderTrackingCategories() if yesno(args.nocat) then return end if yesno(args['вбудовування']) then if args['назва'] then root:wikitext( '[[Категорія:Сторінки, що використовують шаблони вбудованої картки з параметром назва]]' ) end elseif #(getArgNums('текст')) == 0 and #(getArgNums('вікідані')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Категорія:Статті, що використовують шаблони картка без рядків параметра текст]]') end if args['ім\'я'] then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з параметром ім\'я' .. (mw.title.getCurrentTitle().namespace == 10 and '|{' or '') .. ']]') end if has_error then root:wikitext('[[Категорія:Сторінки, що використовують шаблони картка з двома однаковими параметрами]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Modul:Kartka/styles.css' } } local templatestyles = '' if args['стилі_шаблону'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону'] } } end local child_templatestyles = '' if args['стилі_шаблону вбудовування'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вбудовування'] } } end local grandchild_templatestyles = '' if args['стилі_шаблону вторинного_вбудовування'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['стилі_шаблону вторинного_вбудовування'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderBelowRow('2') -- renderNavBar() (тимчасово поки закоментував) renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if not yesno(args['вбудовування']) then root = mw.html.create('table') local infoboxWidth = '' if args['ширина-картки'] then infoboxWidth = "width:" .. args['ширина-картки'] end root :addClass(yesno(args['підкартка']) and 'infobox-subbox' or 'infobox') :addClass(args['клас_тіла']) -- @deprecated next; target .infobox-<name> :cssText(args['стиль_тіла']) -- infobox width from a parameter :cssText(infoboxWidth) has_list_class({ args['клас_тіла'] }) renderError() renderTitle() renderAboveRow() renderAboveRow('2') else root = mw.html.create() local errorText = has_error and (error_message .. '</span><br/>') or '' root :wikitext(errorText) :wikitext(args['назва']) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end local function translateArg(aliasArgName,localArgName) -- Функція додає підтримку аліасів параметрів (наприклад, іншою мовою) -- Додаєм аліас параметра в таблицю аліасів -- Для одного параметра може бути кілька аліасів -- Нумеровані параметри(текст1 і т.д.) заносяться без номера if not argsAliases[localArgName] then argsAliases[localArgName] = {} end table.insert(argsAliases[localArgName], aliasArgName) -- Значення аліасів додаются в таблицю аргументів if origArgs[localArgName] and origArgs[localArgName] ~= '' then -- параметр вже заданий на локальній мові -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then -- local message_addon = 'Вказано два однакових параметри <code class="infobox-code">&#124;$1=</code> та <code class="infobox-code">&#124;$2=</code>, тому виведено значення параметра <code class="infobox-code">&#124;$1=</code> ([[Шаблон:Картка#Помилки|довідка]])' -- error_message = error_message .. (has_error and '; ' or '') .. mw.message.newRawMessage(message_addon, localArgName, aliasArgName):plain() -- has_error = true end else -- якщо аліас заданий і не пустий if origArgs[aliasArgName] and origArgs[aliasArgName] ~= '' then origArgs[localArgName] = origArgs[aliasArgName] end end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Виявлено нетабличне значення для таблиці префіксів", 2) end if type(step) ~= 'number' then error("Виявлено недійсне значення параметра кроку", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.prefix_trans and type(v.prefix_trans) ~= "string") or (v.depend and type(v.depend) ~= 'table') or (v.depend_trans and type(v.depend_trans) ~= 'table') then error('Виявлено недійсне значення в таблиці префіксів preprocessArgs', 2) end -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then translateArg(v.prefix_trans,v.prefix) else preprocessSingleArg(v.prefix) end -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end preprocessSingleArg(dependValue) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif origArgs[v.prefix] and v.depend_trans then for j, dependValue in ipairs(v.depend) do for k, depend_transValue in ipairs(v.depend_trans) do if type(depend_transValue) ~= 'string' or type(dependValue) ~= 'string' then error('Виявлено недійсне значення «обов\'язкового» параметра в preprocessArgs') end translateArg(depend_transValue,dependValue) end end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) -- якщо потрібен переклад параметрів, то викликається відповідна функція --якщо ні, то відбувається обрабка змінної if v.prefix_trans then local prefix_transArgName = v.prefix_trans .. tostring(i) if origArgs[prefix_transArgName] then moreArgumentsExist = true translateArg(prefix_transArgName,prefixArgName) end else if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end --якщо потрібен переклад обов'язкових параметрів, то викликається відповідна функція elseif v.depend_trans and (origArgs[prefixArgName] or (i == 1 and origArgs[v.prefix])) then for j,dependValue in ipairs(v.depend) do for k,depend_transValue in ipairs(v.depend_trans) do local dependArgName = dependValue .. tostring(i) local depend_transArgName = depend_transValue .. tostring(i) translateArg(depend_transArgName, dependArgName) end end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() translateArg('autoheaders','автозаголовки') translateArg('child', 'вбудовування') translateArg('infobox-width', 'ширина-картки') translateArg('bodyclass', 'клас_тіла') translateArg('subbox', 'підкартка') translateArg('bodystyle', 'стиль_тіла') translateArg('title', 'назва') translateArg('titleclass', 'клас_назви') translateArg('titlestyle', 'стиль_назви') translateArg('above', 'угорі') translateArg('aboveclass', 'клас_угорі') translateArg('abovestyle', 'стиль_угорі') translateArg('above2', 'угорі2') translateArg('aboveclass2', 'клас_угорі2') translateArg('abovestyle2', 'стиль_угорі2') preprocessArgs({ {prefix_trans = 'subheader', prefix = 'підзаголовок', depend_trans = {'subheaderstyle', 'subheaderrowclass'}, depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) translateArg('subheaderstyle', 'стиль_підзаголовків') translateArg('subheaderclass','клас_підзаголовків') preprocessArgs({ {prefix_trans = 'image', prefix = 'зображення', depend_trans = {'caption', 'imagerowclass'}, depend = {'підпис', 'клас_рядка_зображення'}} }, 10) translateArg('captionstyle', 'стиль_підпису') translateArg('imagestyle', 'стиль_зображення') translateArg('imageclass', 'клас_зображення') translateArg('wikidatamodulename','назва_модуля_вікіданих') translateArg('parameterswikidata','параметри_вікіданих') preprocessArgs({ {prefix_trans = 'header', prefix = 'заголовок'}, {prefix_trans = 'data', prefix = 'текст', depend_trans = {'label'}, depend = {'мітка'}}, {prefix_trans = 'wikidata', prefix = 'вікідані', depend_trans = {'label', 'parametersrowwikidata'}, depend = {'мітка', 'параметри_рядка_вікіданих' }}, {prefix_trans = 'rowclass', prefix = 'клас_рядка'}, {prefix_trans = 'rowstyle', prefix = 'стиль_рядка'}, {prefix_trans = 'rowcellstyle', prefix = 'стиль_комірки_рядка'}, {prefix_trans = 'class', prefix = 'клас'} }, 100) translateArg('headerclass', 'клас_заголовків') translateArg('headerstyle', 'стиль_заголовків') translateArg('labelclass', 'клас_міток') translateArg('labelstyle', 'стиль_міток') translateArg('dataclass', 'клас_тексту') translateArg('datastyle', 'стиль_тексту') translateArg('below', 'внизу') translateArg('belowclass', 'клас_внизу') translateArg('belowstyle', 'стиль_внизу') translateArg('below2', 'внизу2') translateArg('belowclass2', 'клас_внизу2') translateArg('belowstyle2', 'стиль_внизу2') translateArg('name', 'ім\'я') translateArg('decat', 'nocat') translateArg('templatestyles', 'стилі_шаблону') translateArg('child templatestyles', 'стилі_шаблону вбудовування') translateArg('grandchild templatestyles', 'стилі_шаблону вторинного_вбудовування') preprocessSingleArg('автозаголовки') preprocessSingleArg('вбудовування') preprocessSingleArg('ширина-картки') preprocessSingleArg('клас_тіла') preprocessSingleArg('підкартка') preprocessSingleArg('стиль_тіла') preprocessSingleArg('назва') preprocessSingleArg('клас_назви') preprocessSingleArg('стиль_назви') preprocessSingleArg('угорі') preprocessSingleArg('клас_угорі') preprocessSingleArg('стиль_угорі') preprocessSingleArg('угорі2') preprocessSingleArg('клас_угорі2') preprocessSingleArg('стиль_угорі2') preprocessArgs({ {prefix = 'підзаголовок', depend = {'стиль_підзаголовок', 'клас_рядка_підзаголовок'}} }, 10) preprocessSingleArg('стиль_підзаголовків') preprocessSingleArg('клас_підзаголовків') preprocessArgs({ {prefix = 'зображення', depend = {'підпис', 'клас_рядка_зображення'}} }, 10) preprocessSingleArg('стиль_підпису') preprocessSingleArg('стиль_зображення') preprocessSingleArg('клас_зображення') preprocessSingleArg('назва_модуля_вікіданих') processParamsFromArg(origArgs['параметри_вікіданих'], 'wikidata', true) preprocessArgs({ {prefix = 'заголовок'}, {prefix = 'текст', depend = {'мітка'}}, {prefix = 'вікідані', depend = {'мітка', 'параметри_рядка_вікіданих'}}, {prefix = 'клас_рядка'}, {prefix = 'стиль_рядка'}, {prefix = 'стиль_комірки_рядка'}, {prefix = 'клас'} }, 100) preprocessSingleArg('клас_заголовків') preprocessSingleArg('стиль_заголовків') preprocessSingleArg('клас_міток') preprocessSingleArg('стиль_міток') preprocessSingleArg('клас_тексту') preprocessSingleArg('стиль_тексту') preprocessSingleArg('внизу') preprocessSingleArg('клас_внизу') preprocessSingleArg('стиль_внизу') preprocessSingleArg('внизу2') preprocessSingleArg('клас_внизу2') preprocessSingleArg('стиль_внизу2') preprocessSingleArg('ім\'я') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['назва_курсивом'] or origArgs['italic title'] preprocessSingleArg('nocat') preprocessSingleArg('стилі_шаблону') preprocessSingleArg('стилі_шаблону вбудовування') preprocessSingleArg('стилі_шаблону вторинного_вбудовування') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p phsi5nvlgngp8szrrqm3c5bz7r32wif Modul:Kartka/styles.css 828 41826 392891 2026-11-09T09:41:10Z ~2026-59426-15 28967 nowa strona: /* * Стиль шаблону адаптований під український розділ Вікіпедії. * Запозичений код з англійської [[MediaWiki:Common.css]] (тут код може редагуватися), * та доповнений англійським [[Module:Infobox/style.css]]. /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual… 392891 sanitized-css text/css /* * Стиль шаблону адаптований під український розділ Вікіпедії. * Запозичений код з англійської [[MediaWiki:Common.css]] (тут код може редагуватися), * та доповнений англійським [[Module:Infobox/style.css]]. /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* NOTE: This is maintained both here and in [[MediaWiki:Common.css]] until migration is complete. * Starting with bare minimum for the benefit of [[mw:mManual:Safemode]]. */ @media (min-width: 640px) { .infobox { /* @noflip */ margin-left: 1em; /* @noflip */ float: right; /* @noflip */ clear: right; width: 22em; } } /* Infobox template style */ .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar { vertical-align: top; } .infobox-label, .infobox-data { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; color:inherit; } .infobox-3cols-child { margin: -3px; } .infobox .navbar { font-size: 100%; } /* Errors */ .infobox-code { /* <code>...</code> style override: mediawiki's css definition is specified here: https://git.wikimedia.org/blob/mediawiki%2Fcore.git/ 69cd73811f7aadd093050dbf20ed70ef0b42a713/skins%2Fcommon%2FcommonElements.css#L199 */ color: inherit; background: inherit; border: none; padding: inherit; } /* T281642 */ body.skin-minerva .infobox-header, body.skin-minerva .infobox-subheader, body.skin-minerva .infobox-above, body.skin-minerva .infobox-title, body.skin-minerva .infobox-image, body.skin-minerva .infobox-full-data, body.skin-minerva .infobox-below { text-align: center; } /* remove when infobox is not a table anymore */ .infobox-hiddenrow, /* we mean it, Minerva. but also Vector 2022 in the future at some point */ body.skin--responsive.skin--responsive .infobox .infobox-hiddenrow { display: none; } /* Dark theme: [[William_Wragg]], [[Coral_Castle]] */ @media screen { html.skin-theme-clientpref-night .infobox.vevent [bgcolor] { background: inherit; color: inherit; } html.skin-theme-clientpref-night .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; color: var(--color-base, #eaecf0); } } @media screen and (prefers-color-scheme: dark) { html.skin-theme-clientpref-os .infobox.vevent [bgcolor] { background: inherit; color: inherit; } html.skin-theme-clientpref-os .infobox-full-data:not(.notheme) > div:not(.notheme)[style] { background: #1f1f23 !important; color: var(--color-base, #eaecf0); } } /* Since infobox is a table, many infobox templates take advantage of this to add columns and rows to the infobox itself rather than as part of a new table inside them. This class should be discouraged and removed on the long term, but allows us to at least identify these tables going forward Currently in use on: [[Module:Infobox3cols]] Fixes issue described in https://phabricator.wikimedia.org/F55300125 on Vector 2022. not-infobox-table-cell is used for football template table to have a right padding */ @media (min-width: 640px) { body.skin--responsive .infobox-table { display: table !important; } body.skin--responsive .infobox-table > caption { display: table-caption !important; } body.skin--responsive .infobox-table > tbody { display: table-row-group; } body.skin--responsive .infobox-table table:not(.not-infobox-table-cell) th, body.skin--responsive .infobox-table table:not(.not-infobox-table-cell) td { padding-left: inherit; padding-right: inherit; } } /* [[Категорія:Підсторінки CSS]] */ 3lpwnp4taeuasol1ijmjib0rychp9ru