Wikimedia
thwikimedia
https://th.wikimedia.org/wiki/%E0%B8%AB%E0%B8%99%E0%B9%89%E0%B8%B2%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%81
MediaWiki 1.46.0-wmf.24
first-letter
สื่อ
พิเศษ
พูดคุย
ผู้ใช้
คุยกับผู้ใช้
วิกิมีเดียประเทศไทย
พูดคุยเรื่องวิกิมีเดียประเทศไทย
ไฟล์
คุยเรื่องไฟล์
มีเดียวิกิ
คุยเรื่องมีเดียวิกิ
แม่แบบ
คุยเรื่องแม่แบบ
วิธีใช้
คุยเรื่องวิธีใช้
หมวดหมู่
คุยเรื่องหมวดหมู่
TimedText
TimedText talk
มอดูล
คุยเรื่องมอดูล
Wikimedia Thailand/Activities
0
108
466
2026-04-27T06:27:26Z
Azoma
208
สร้างหน้าด้วย "{{Navbox|name=Wikimedia Thailand/Activities|title=[[Wikimedia Thailand]] activities|titlestyle=background:#CEE0F2|state=expanded|style=width:100%;|image=[[File:Wikimedia Thailand-Logo-BW.svg|150px]]|groupstyle=text-align:right; background:#CEE0F2; font-size:85%; font-weight:bold; white-space:nowrap; padding:0 6px 0 6px;|abovestyle=text-align:center; background:#CEE0F2|belowstyle=text-align:center; background:#CEE0F2|above=Wikimedia Thailand/about|..."
466
wikitext
text/x-wiki
{{Navbox|name=Wikimedia Thailand/Activities|title=[[Wikimedia Thailand]] activities|titlestyle=background:#CEE0F2|state=expanded|style=width:100%;|image=[[File:Wikimedia Thailand-Logo-BW.svg|150px]]|groupstyle=text-align:right; background:#CEE0F2; font-size:85%; font-weight:bold; white-space:nowrap; padding:0 6px 0 6px;|abovestyle=text-align:center; background:#CEE0F2|belowstyle=text-align:center; background:#CEE0F2|above=[[Wikimedia Thailand/about|About]] • [[Wikimedia Thailand/Timeline|Timeline]] • [[Wikimedia Thailand/bylaws|Bylaws]]|group1=Meetups|list1={{Navbox subgroup
|group1 = Mahidol University
|list1 = [[Meetup/Mahidol University/1|1]] • [[Meetup/Mahidol University/2|2]] • [[Meetup/Mahidol University/3|3]] • [[Meetup/Mahidol University/4|4]] • [[Meetup/Mahidol University/5|5]] • [[Meetup/Mahidol University/6|6]] • [[Meetup/Mahidol University/7|7]] • [[Meetup/Mahidol University/8|8]] • [[Meetup/Mahidol University/9|9]] • [[Meetup/Mahidol University/10|10]] • [[Meetup/Mahidol University/11|11]] • [[Meetup/Mahidol University/12|12]] • [[Meetup/Mahidol University/13|13]] • [[Meetup/Mahidol University/14|14]] • [[Meetup/Mahidol University/15|15]] • [[Meetup/Mahidol University/16|16]] • [[Meetup/Mahidol University/17|17]] • [[Meetup/Mahidol University/18|18]] • [[Meetup/Mahidol University/19|19]] • [[Meetup/Mahidol University/20|20]] • [[Meetup/Mahidol University/21|21]] • [[Meetup/Mahidol University/22|22]] • [[Meetup/Mahidol University/23|23]] • [[Meetup/Mahidol University/24|24]]
|group2 = Bangkok
|list2 = [[Wikimedians in Thailand/July 2012 meetup|July 2012]] • [[Meetup/Bangkok/1|1]] • [[Meetup/Bangkok/2|2]] • [[Meetup/Bangkok/3|3]] • [[Meetup/Bangkok/4|4]] • [[Meetup/Bangkok/5|5]]
|group3 = Regional
|list3 = [[Meetup/Chiang Mai/1|Chiang Mai 1]] • [[Meetup/Chiang Mai/0|HubHug]]
|group4 = Others
| list4 = [[Meetup/Thailand/Online/1|Online 1]] • [[Meetup/Thailand/Online/2|Online 2]] • [[Wikimedia Thailand/Meetup/Melbourne/1|Oversea 1]]
|group5 = WikiCamp
| list5 =
{{Navbox subgroup
|group1 = BKKCamp
|list1 = [[Wikimedia Thailand/WikiCamp 2023|1]] • [[Wikimedia Thailand/BKKCamp/2|2]] • [[Wikimedia Thailand/BKKCamp/3|3]] • [[Wikimedia Thailand/BKKCamp/4|4]] • [[Wikimedia Thailand/BKKCamp/5|5]] • [[Wikimedia_Thailand/WikiCamp_Bangkok_2026|6]]
|group2 = Regional
|list2 = [[Wikimedia Thailand/EasternCamp/1|Chonburi 2023]] • [[Wikimedia Thailand/WikiCamp Chiang Mai 2025|Chiang Mai 2025]] • [[Wikimedia Thailand/WikiCamp Chiang Mai 2026|Chiang Mai 2026]]
}}
|group6 = Photowalk
|list6 = [[Wikimedia Thailand/Bangkok Photowalk 1|1]] • [[Wikimedia Thailand/Bangkok Photowalk 2|2]] • [[Wikimedia Thailand/Bangkok Photowalk 3|3]] • [[Wikimedia Thailand/Bangkok Photowalk 4|4]]
|group7 = Others
|list7 = [[Wikimedians in Thailand/2015 Smithsonian APA|2015 Smithsonian APA]] • [[Wikimedians in Thailand/Activities/Wiki4Women2019|Wiki4Women2019]]
}}|group2=Photo Contests|list2={{Navbox subgroup
| group1 = Wiki Loves Monuments
| list1 = [[c:Commons:Wiki_Loves_Monuments_2013_in_Thailand|2013]] • [[c:Commons:Wiki_Loves_Monuments_2014_in_Thailand|2014]] • [[c:Commons:Wiki_Loves_Monuments_2015_in_Thailand|2015]] • [[c:Commons:Wiki_Loves_Monuments_2016_in_Thailand|2016]] • [[c:Commons:Wiki_Loves_Monuments_2017_in_Thailand|2017]] • [[c:Commons:Wiki_Loves_Monuments_2018_in_Thailand|2018]] • [[c:Commons:Wiki_Loves_Monuments_2019_in_Thailand|2019]] • [[c:Commons:Wiki_Loves_Monuments_2020_in_Thailand|2020]] • [[c:Commons:Wiki_Loves_Monuments_2022_in_Thailand|2022]] • [[c:Commons:Wiki_Loves_Monuments_2023_in_Thailand|2023]] • [[c:Commons:Wiki_Loves_Monuments_2024_in_Thailand|2024]] • [[c:Commons:Wiki_Loves_Monuments_2025_in_Thailand|2025]]
| group2 = Wiki Loves Earth
| list2 = [[c:Commons:Wiki_Loves_Earth_2015_in_Thailand|2015]] • [[c:Commons:Wiki_Loves_Earth_2016_in_Thailand|2016]] • [[c:Commons:Wiki_Loves_Earth_2017_in_Thailand|2017]] • [[c:Commons:Wiki_Loves_Earth_2018_in_Thailand|2018]] • [[c:Commons:Wiki_Loves_Earth_2019_in_Thailand|2019]] • [[c:Commons:Wiki_Loves_Earth_2020_in_Thailand|2020]] • [[c:Commons:Wiki_Loves_Earth_2022_in_Thailand|2022]] • [[c:Commons:Wiki_Loves_Earth_2023_in_Thailand|2023]] • [[c:Commons:Wiki_Loves_Earth_2024_in_Thailand|2024]] • [[c:Commons:Wiki_Loves_Earth_2025_in_Thailand|2025]] •
[[c:Commons:Wiki Loves Earth Thailand 2026|2026]]
| group3 = Wiki Science Competition
| list3 = [[c:Commons:Wiki_Science_Competition_2017_in_Thailand|2017]] • [[c:Commons:Wiki_Science_Competition_2021_in_Thailand|2021]]
}}|group3=Other Contest|list3={{Navbox subgroup
| group1 = Wikigap
| list1 = [[Wikimedians in Thailand/Activities/Wiki4Women2019|2019]] • [[Wikimedia Thailand/WikiGap 2022|2022]] • [[Wikimedia Thailand/WikiGap:_Girls_in_Digital_World|Girls in Digital World]] • [[Wikimedia Thailand/WikiGap 2024|2024]] • [[Wikimedia Thailand/WikiGap 2025|2025]]
| group2 = Wiki Loves Food
| list2 = [[Wikimedia Thailand/Wiki Loves Food|2022]] • [[Wikimedia Thailand/WikiFoodtival|2023]] • [[Wikimedia Thailand/WikiFoodtival 2025|2025]]
| group3 = WikiDiversity
| list3 = [[Wikimedia Thailand/WikiDiversity 2023|2023]] • [[Wikimedia Thailand/WikiDiversity 2024|2024]] • [[Wikimedia Thailand/WikiDiversity 2025|2025]]
| group4 = Wikipedia Asian Month
| list4 = [[:th:วิกิพีเดีย:Wikipedia Asian Month 2015 in Thailand|2015]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2016|2016]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2017|2017]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2018|2018]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2019|2019]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2020|2020]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2021|2021]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2022|2022]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2023|2023]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2024|2024]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2025|2025]]
| group5 = GLAM
| list5 =
{{Navbox subgroup
|group1 = Gallery
|list1 = [[Wikimedia Thailand/GLAM–Gallery 2024|2024]] • [[Wikimedia Thailand/GLAM–Gallery 2025|2025]]
|group2 = Library
|list2 = [[Wikimedia Thailand/GLAM–Library 2024|2024]] • [[Wikimedia Thailand/GLAM–Library 2025|2025]]
|group3 = Archive
|list3 = [[Wikimedia Thailand/GLAM–Archive 2024|2024]] • [[Wikimedia Thailand/GLAM–Archive 2025|2025]]
|group4 = Museum
|list4 = [[Wikimedia Thailand/GLAM–Museum 2023|2023]] • [[Wikimedia Thailand/GLAM–Museum 2025|2025]]
}}
| group6 = Wikivoyage
| list6 = [[Wikimedia Thailand/Wikivoyage 2023|2023]]
| group7 =
| list7 = [[:th:วิกิพีเดีย:โครงการวิกิแสนบทความกับวิกิพีเดียภาษาไทย|100k Articles Project]] • [[:th:โครงการเมนเทอร์|Mentor Project]] • [[:th:วิกิพีเดีย:โครงการหนึ่งบทความอย่างน้อยหนึ่งรูป|One Article, One or More Images Project]] • [[Wikimedia Thailand/WikiForHumanRights|WikiForHumanRights]] • [[:th:วิกิพีเดีย:รู้ไหมว่า/กิจกรรมสนับสนุน พ.ศ. 2567|Did You Know Article Promotion]] • [[:th:วิกิพีเดีย:บทความแนะนำ/กิจกรรมสนับสนุน พ.ศ. 2568|Recommended Article Promotion]]
}}|group5=Grants|list5=[[Grants:PEG/UG TH/WLM 2014|2014]] • [[Grants:PEG/UG TH/Wiki Loves X in Thailand 2015|2015]] • [[Grants:Project/Rapid/Addis Wang - UGCN/Wikipedia Asian Month 2016|2016]] • [[Grants:Project/Rapid/WLX in Thailand 2017|2017]] • [[Grants:Project/Rapid/WLX and education projects in Thailand 2018|2018]] • [[Grants:Simple/Applications/Wikimedia Thailand/2020|2020]] • [[Grants:Programs/Wikimedia Community Fund/Wikimedia Thailand 2022|2022]]|group6=Grant Reports|list6=[[Grants:PEG/UG TH/WLM 2014/Report|2014]] • [[Grants:PEG/UG TH/Wiki Loves X in Thailand 2015/Report|2015]] • [[Grants:Project/Rapid/Addis Wang - UGCN/Wikipedia Asian Month 2016/Report|2016]] • [[Grants:Project/Rapid/WLX in Thailand 2017/Report|2017]] • [[Grants:Project/Rapid/WLX and education projects in Thailand 2018/Report|2018]] • [[Grants:Simple/Applications/Wikimedia Thailand/2020|2020]]|below=}}
4mdn6zoty7o1hntpncf8q35j8j1umt4
แม่แบบ:Navbox
10
109
467
2026-04-27T06:28:19Z
Azoma
208
สร้างหน้าด้วย "{{#invoke: Navbox | navbox }}<noinclude>{{documentation}}</noinclude>"
467
wikitext
text/x-wiki
{{#invoke: Navbox | navbox }}<noinclude>{{documentation}}</noinclude>
r559d18z5ouc3wiwuekakf5ihlqt7ws
ผู้ใช้:Azoma
2
110
468
2026-04-27T06:33:53Z
Azoma
208
สร้างหน้าด้วย "{{:Wikimedia Thailand/Activities}} {{:Wikimedians in Thailand/activities/th}}"
468
wikitext
text/x-wiki
{{:Wikimedia Thailand/Activities}}
{{:Wikimedians in Thailand/activities/th}}
sya6vvr8f01bmryjk5ux8lj6q7senfi
Wikimedians in Thailand/activities/th
0
111
469
2026-04-27T06:34:29Z
Azoma
208
สร้างหน้าด้วย "{{Navbox | name = | title = กิจกรรมของ[[Wikimedia Thailand/th|วิกิมีเดียประเทศไทย]] |titlestyle = background:#CEE0F2 | state = expanded |style = width:100%; |image = [[File:Wikimedia Thailand-Logo-BW.svg|150px]] |groupstyle = text-align:right; background:#CEE0F2; font-size:85%; font-weight:bold; white-space:nowrap; padding:0 6px 0 6px; |abovestyle = text-align:center; backgroun..."
469
wikitext
text/x-wiki
{{Navbox
| name =
| title = กิจกรรมของ[[Wikimedia Thailand/th|วิกิมีเดียประเทศไทย]]
|titlestyle = background:#CEE0F2
| state = expanded
|style = width:100%;
|image = [[File:Wikimedia Thailand-Logo-BW.svg|150px]]
|groupstyle = text-align:right; background:#CEE0F2; font-size:85%; font-weight:bold; white-space:nowrap; padding:0 6px 0 6px;
|abovestyle = text-align:center; background:#CEE0F2
|belowstyle = text-align:center; background:#CEE0F2
| above =
| group1 = การนัดหมาย
| list1 =
{{Navbox subgroup
|group1 = มหาวิทยาลัยมหิดล
|list1 = [[Meetup/Mahidol University/1|1]] • [[Meetup/Mahidol University/2|2]] • [[Meetup/Mahidol University/3|3]] • [[Meetup/Mahidol University/4|4]] • [[Meetup/Mahidol University/5|5]] • [[Meetup/Mahidol University/6|6]] • [[Meetup/Mahidol University/7|7]] • [[Meetup/Mahidol University/8|8]] • [[Meetup/Mahidol University/9|9]] • [[Meetup/Mahidol University/10|10]] • [[Meetup/Mahidol University/11|11]] • [[Meetup/Mahidol University/12|12]] • [[Meetup/Mahidol University/13|13]] • [[Meetup/Mahidol University/14|14]] • [[Meetup/Mahidol University/15|15]] • [[Meetup/Mahidol University/16|16]] • [[Meetup/Mahidol University/17|17]] • [[Meetup/Mahidol University/18|18]] • [[Meetup/Mahidol University/19|19]] • [[Meetup/Mahidol University/20|20]]
|group2 = กรุงเทพมหานคร
|list2 = [[Wikimedians in Thailand/July 2012 meetup|กรกฎาคม 2555]] • [[Meetup/Bangkok/1|1]] • [[Meetup/Bangkok/2|2]] • [[Meetup/Bangkok/3|3]]
|group3 = ต่างประเทศ
|list3 = [[Wikimedia Thailand/Meetup/Melbourne/1|1]]
|group4 = ออนไลน์
| list4 = [[Meetup/Thailand/Online/1|1]] • [[Meetup/Thailand/Online/2|2]]
|group5 = WikiCamp
| list5 =
{{Navbox subgroup
|group1 = BKKCamp
|list1 = [[Wikimedia Thailand/WikiCamp 2023|1]] • [[Wikimedia Thailand/BKKCamp/2|2]]
|group2 = EasternCamp
|list2 = [[Wikimedia Thailand/EasternCamp/1|1]]
}}
|group6 = Photowalk
|list6 = [[Wikimedia Thailand/Bangkok Photowalk 1|1]] • [[Wikimedia Thailand/Bangkok Photowalk 2|2]]
|group7 = อื่นๆ
|list7 = [[Wikimedians in Thailand/2015 Smithsonian APA|2015 Smithsonian APA]] • [[Wikimedians in Thailand/Activities/Wiki4Women2019|Wiki4Women2019]]
}}
| group2 = ประกวดภาพถ่าย
| list2 =
{{Navbox subgroup
| group1 = Wiki Loves Monuments
| list1 = [[c:Commons:Wiki_Loves_Monuments_2013_in_Thailand|2556]] • [[c:Commons:Wiki_Loves_Monuments_2014_in_Thailand|2557]] •
[[c:Commons:Wiki_Loves_Monuments_2015_in_Thailand|2558]] • [[c:Commons:Wiki_Loves_Monuments_2016_in_Thailand|2559]] • [[c:Commons:Wiki_Loves_Monuments_2017_in_Thailand|2560]] • [[c:Commons:Wiki_Loves_Monuments_2018_in_Thailand|2561]] • [[c:Commons:Wiki_Loves_Monuments_2019_in_Thailand|2562]] • [[c:Commons:Wiki_Loves_Monuments_2020_in_Thailand|2563]] • [[c:Commons:Wiki_Loves_Monuments_2022_in_Thailand|2565]] • [[c:Commons:Wiki_Loves_Monuments_2023_in_Thailand|2566]]
| group2 = Wiki Loves Earth
| list2 = [[c:Commons:Wiki_Loves_Earth_2015_in_Thailand|2558]] • [[c:Commons:Wiki_Loves_Earth_2016_in_Thailand|2559]] • [[c:Commons:Wiki_Loves_Earth_2017_in_Thailand|2560]] • [[c:Commons:Wiki_Loves_Earth_2018_in_Thailand|2561]] • [[c:Commons:Wiki_Loves_Earth_2019_in_Thailand|2562]] • [[c:Commons:Wiki_Loves_Earth_2020_in_Thailand|2563]]
| group3 = Wiki Science Competition
| list3 = [[c:Commons:Wiki_Science_Competition_2017_in_Thailand|2560]] • [[c:Commons:Wiki_Science_Competition_2021_in_Thailand|2564]]
}}
| group3 = การประกวดอื่น ๆ
| list3 =
{{Navbox subgroup
| group1 = Wiki Loves Food
| list1 = [[Wikimedia Thailand/Wiki Loves Food|2565]] • [[Wikimedia Thailand/WikiFoodtival|2566]]
| group2 = WikiGap
| list2 = [[Wikimedia Thailand/WikiGap 2022|2565]]
| group3 = WikiDiversity
| list3 = [[Wikimedia Thailand/WikiDiversity 2023|2566]]
| group4 = เดือนแห่งเอเชีย
| list4 = [[:th:วิกิพีเดีย:Wikipedia Asian Month 2015 in Thailand|2558]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2016|2559]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2017|2560]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2018|2561]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2019|2562]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2020|2563]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2021|2564]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2022|2565]]
| group5 = GLAM
| list5 =
{{Navbox subgroup
|group1 = Gallery
|list1 = [[Wikimedia Thailand/GLAM–Gallery 2024|2567]]
|group2 = Library
|list2 = [[Wikimedia Thailand/GLAM–Library 2024|2567]]
|group3 = Archive
|list3 = [[Wikimedia Thailand/GLAM–Archive 2024|2567]]
|group4 = Museum
|list4 = [[Wikimedia Thailand/GLAM–Museum 2023|2566]]
}}
| group6 = วิกิท่องเที่ยว
| list6 = [[Wikimedia Thailand/Wikivoyage 2023|2566]]
| group7 =
| list7 = [[:th:วิกิพีเดีย:โครงการวิกิแสนบทความกับวิกิพีเดียภาษาไทย|โครงการวิกิแสนบทความ]] • [[:th:โครงการเมนเทอร์|โครงการเมนเทอร์]] • [[:th:วิกิพีเดีย:โครงการหนึ่งบทความอย่างน้อยหนึ่งรูป|โครงการหนึ่งบทความอย่างน้อยหนึ่งรูป]] • [[Wikimedians in Thailand/Activities/Wiki4Women2019|Wiki4Women2019]] • [[Wikimedia Thailand/WikiForHumanRights|WikiForHumanRights]]
}}
| group4 = การขอเงินสนับสนุน
| list4 = [[Grants:PEG/UG TH/WLM 2014|2557]] • [[Grants:PEG/UG TH/Wiki Loves X in Thailand 2015|2558]] • [[Grants:Project/Rapid/Addis Wang - UGCN/Wikipedia Asian Month 2016|2559]] • [[Grants:Project/Rapid/WLX in Thailand 2017|2560]] • [[Grants:Project/Rapid/WLX and education projects in Thailand 2018|2561]] • [[Grants:Simple/Applications/Wikimedia Thailand/2020|2563]] • [[Grants:Programs/Wikimedia Community Fund/Wikimedia Thailand 2022|2565]]
| group5 = รายงานการขอเงินสนับสนุน
| list5 = [[Grants:PEG/UG TH/WLM 2014/Report|2557]] • [[Grants:PEG/UG TH/Wiki Loves X in Thailand 2015/Report|2558]] • [[Grants:Project/Rapid/Addis Wang - UGCN/Wikipedia Asian Month 2016/Report|2559]] • [[Grants:Project/Rapid/WLX in Thailand 2017/Report|2560]] • [[Grants:Project/Rapid/WLX and education projects in Thailand 2018/Report|2561]] • [[Grants:Simple/Applications/Wikimedia Thailand/2020|2563]]
| below =
}}
it543927ibpbwefi9ovrpo3nqc78da2
481
469
2026-04-27T11:08:24Z
Tvcccp
23
481
wikitext
text/x-wiki
{{Navbox
| name =
| title = กิจกรรมของ[[meta:Wikimedia Thailand/th|วิกิมีเดียประเทศไทย]]
|titlestyle = background:#CEE0F2
| state = expanded
|style = width:100%;
|image = [[File:Wikimedia Thailand-Logo-BW.svg|150px]]
|groupstyle = text-align:right; background:#CEE0F2; font-size:85%; font-weight:bold; white-space:nowrap; padding:0 6px 0 6px;
|abovestyle = text-align:center; background:#CEE0F2
|belowstyle = text-align:center; background:#CEE0F2
| above =
| group1 = การนัดหมาย
| list1 =
{{Navbox subgroup
|group1 = มหาวิทยาลัยมหิดล
|list1 = [[Meetup/Mahidol University/1|1]] • [[Meetup/Mahidol University/2|2]] • [[Meetup/Mahidol University/3|3]] • [[Meetup/Mahidol University/4|4]] • [[Meetup/Mahidol University/5|5]] • [[Meetup/Mahidol University/6|6]] • [[Meetup/Mahidol University/7|7]] • [[Meetup/Mahidol University/8|8]] • [[Meetup/Mahidol University/9|9]] • [[Meetup/Mahidol University/10|10]] • [[Meetup/Mahidol University/11|11]] • [[Meetup/Mahidol University/12|12]] • [[Meetup/Mahidol University/13|13]] • [[Meetup/Mahidol University/14|14]] • [[Meetup/Mahidol University/15|15]] • [[Meetup/Mahidol University/16|16]] • [[Meetup/Mahidol University/17|17]] • [[Meetup/Mahidol University/18|18]] • [[Meetup/Mahidol University/19|19]] • [[Meetup/Mahidol University/20|20]]
|group2 = กรุงเทพมหานคร
|list2 = [[Wikimedians in Thailand/July 2012 meetup|กรกฎาคม 2555]] • [[Meetup/Bangkok/1|1]] • [[Meetup/Bangkok/2|2]] • [[Meetup/Bangkok/3|3]]
|group3 = ต่างประเทศ
|list3 = [[Wikimedia Thailand/Meetup/Melbourne/1|1]]
|group4 = ออนไลน์
| list4 = [[Meetup/Thailand/Online/1|1]] • [[Meetup/Thailand/Online/2|2]]
|group5 = WikiCamp
| list5 =
{{Navbox subgroup
|group1 = BKKCamp
|list1 = [[Wikimedia Thailand/WikiCamp 2023|1]] • [[Wikimedia Thailand/BKKCamp/2|2]]
|group2 = EasternCamp
|list2 = [[Wikimedia Thailand/EasternCamp/1|1]]
}}
|group6 = Photowalk
|list6 = [[Wikimedia Thailand/Bangkok Photowalk 1|1]] • [[Wikimedia Thailand/Bangkok Photowalk 2|2]]
|group7 = อื่นๆ
|list7 = [[Wikimedians in Thailand/2015 Smithsonian APA|2015 Smithsonian APA]] • [[Wikimedians in Thailand/Activities/Wiki4Women2019|Wiki4Women2019]]
}}
| group2 = ประกวดภาพถ่าย
| list2 =
{{Navbox subgroup
| group1 = Wiki Loves Monuments
| list1 = [[c:Commons:Wiki_Loves_Monuments_2013_in_Thailand|2556]] • [[c:Commons:Wiki_Loves_Monuments_2014_in_Thailand|2557]] •
[[c:Commons:Wiki_Loves_Monuments_2015_in_Thailand|2558]] • [[c:Commons:Wiki_Loves_Monuments_2016_in_Thailand|2559]] • [[c:Commons:Wiki_Loves_Monuments_2017_in_Thailand|2560]] • [[c:Commons:Wiki_Loves_Monuments_2018_in_Thailand|2561]] • [[c:Commons:Wiki_Loves_Monuments_2019_in_Thailand|2562]] • [[c:Commons:Wiki_Loves_Monuments_2020_in_Thailand|2563]] • [[c:Commons:Wiki_Loves_Monuments_2022_in_Thailand|2565]] • [[c:Commons:Wiki_Loves_Monuments_2023_in_Thailand|2566]]
| group2 = Wiki Loves Earth
| list2 = [[c:Commons:Wiki_Loves_Earth_2015_in_Thailand|2558]] • [[c:Commons:Wiki_Loves_Earth_2016_in_Thailand|2559]] • [[c:Commons:Wiki_Loves_Earth_2017_in_Thailand|2560]] • [[c:Commons:Wiki_Loves_Earth_2018_in_Thailand|2561]] • [[c:Commons:Wiki_Loves_Earth_2019_in_Thailand|2562]] • [[c:Commons:Wiki_Loves_Earth_2020_in_Thailand|2563]]
| group3 = Wiki Science Competition
| list3 = [[c:Commons:Wiki_Science_Competition_2017_in_Thailand|2560]] • [[c:Commons:Wiki_Science_Competition_2021_in_Thailand|2564]]
}}
| group3 = การประกวดอื่น ๆ
| list3 =
{{Navbox subgroup
| group1 = Wiki Loves Food
| list1 = [[Wikimedia Thailand/Wiki Loves Food|2565]] • [[Wikimedia Thailand/WikiFoodtival|2566]]
| group2 = WikiGap
| list2 = [[Wikimedia Thailand/WikiGap 2022|2565]]
| group3 = WikiDiversity
| list3 = [[Wikimedia Thailand/WikiDiversity 2023|2566]]
| group4 = เดือนแห่งเอเชีย
| list4 = [[:th:วิกิพีเดีย:Wikipedia Asian Month 2015 in Thailand|2558]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2016|2559]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2017|2560]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2018|2561]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2019|2562]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2020|2563]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2021|2564]] • [[:th:วิกิพีเดีย:Wikipedia Asian Month 2022|2565]]
| group5 = GLAM
| list5 =
{{Navbox subgroup
|group1 = Gallery
|list1 = [[Wikimedia Thailand/GLAM–Gallery 2024|2567]]
|group2 = Library
|list2 = [[Wikimedia Thailand/GLAM–Library 2024|2567]]
|group3 = Archive
|list3 = [[Wikimedia Thailand/GLAM–Archive 2024|2567]]
|group4 = Museum
|list4 = [[Wikimedia Thailand/GLAM–Museum 2023|2566]]
}}
| group6 = วิกิท่องเที่ยว
| list6 = [[Wikimedia Thailand/Wikivoyage 2023|2566]]
| group7 =
| list7 = [[:th:วิกิพีเดีย:โครงการวิกิแสนบทความกับวิกิพีเดียภาษาไทย|โครงการวิกิแสนบทความ]] • [[:th:โครงการเมนเทอร์|โครงการเมนเทอร์]] • [[:th:วิกิพีเดีย:โครงการหนึ่งบทความอย่างน้อยหนึ่งรูป|โครงการหนึ่งบทความอย่างน้อยหนึ่งรูป]] • [[Wikimedians in Thailand/Activities/Wiki4Women2019|Wiki4Women2019]] • [[Wikimedia Thailand/WikiForHumanRights|WikiForHumanRights]]
}}
| group4 = การขอเงินสนับสนุน
| list4 = [[Grants:PEG/UG TH/WLM 2014|2557]] • [[Grants:PEG/UG TH/Wiki Loves X in Thailand 2015|2558]] • [[Grants:Project/Rapid/Addis Wang - UGCN/Wikipedia Asian Month 2016|2559]] • [[Grants:Project/Rapid/WLX in Thailand 2017|2560]] • [[Grants:Project/Rapid/WLX and education projects in Thailand 2018|2561]] • [[Grants:Simple/Applications/Wikimedia Thailand/2020|2563]] • [[Grants:Programs/Wikimedia Community Fund/Wikimedia Thailand 2022|2565]]
| group5 = รายงานการขอเงินสนับสนุน
| list5 = [[Grants:PEG/UG TH/WLM 2014/Report|2557]] • [[Grants:PEG/UG TH/Wiki Loves X in Thailand 2015/Report|2558]] • [[Grants:Project/Rapid/Addis Wang - UGCN/Wikipedia Asian Month 2016/Report|2559]] • [[Grants:Project/Rapid/WLX in Thailand 2017/Report|2560]] • [[Grants:Project/Rapid/WLX and education projects in Thailand 2018/Report|2561]] • [[Grants:Simple/Applications/Wikimedia Thailand/2020|2563]]
| below =
}}
k9n2dr9dufhbosbzi55eg8pvmnz4vko
มอดูล:Navbox
828
112
470
2026-04-27T06:38:32Z
Azoma
208
สร้างหน้าด้วย "local p = {} local navbar = require('Module:Navbar')._navbar local cfg = mw.loadData('Module:Navbox/configuration') local getArgs -- lazily initialized local args local format = string.format local function striped(wikitext, border) -- Return wikitext with markers replaced for odd/even striping. -- Child (subgroup) navboxes are flagged with a category that is removed -- by parent navboxes. The result is that the category shows all pages -- wher..."
470
Scribunto
text/plain
local p = {}
local navbar = require('Module:Navbar')._navbar
local cfg = mw.loadData('Module:Navbox/configuration')
local getArgs -- lazily initialized
local args
local format = string.format
local function striped(wikitext, border)
-- Return wikitext with markers replaced for odd/even striping.
-- Child (subgroup) navboxes are flagged with a category that is removed
-- by parent navboxes. The result is that the category shows all pages
-- where a child navbox is not contained in a parent navbox.
local orphanCat = cfg.category.orphan
if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then
-- No change; striping occurs in outermost navbox.
return wikitext .. orphanCat
end
local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part
if args[cfg.arg.evenodd] then
if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then
first, second = second, first
else
first = args[cfg.arg.evenodd]
second = first
end
end
local changer
if first == second then
changer = first
else
local index = 0
changer = function (code)
if code == '0' then
-- Current occurrence is for a group before a nested table.
-- Set it to first as a valid although pointless class.
-- The next occurrence will be the first row after a title
-- in a subgroup and will also be first.
index = 0
return first
end
index = index + 1
return index % 2 == 1 and first or second
end
end
local regex = orphanCat:gsub('([%[%]])', '%%%1')
return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count
end
local function processItem(item, nowrapitems)
if item:sub(1, 2) == '{|' then
-- Applying nowrap to lines in a table does not make sense.
-- Add newlines to compensate for trim of x in |parm=x in a template.
return '\n' .. item ..'\n'
end
if nowrapitems == cfg.keyword.nowrapitems_yes then
local lines = {}
for line in (item .. '\n'):gmatch('([^\n]*)\n') do
local prefix, content = line:match('^([*:;#]+)%s*(.*)')
if prefix and not content:match(cfg.pattern.nowrap) then
line = format(cfg.nowrap_item, prefix, content)
end
table.insert(lines, line)
end
item = table.concat(lines, '\n')
end
if item:match('^[*:;#]') then
return '\n' .. item ..'\n'
end
return item
end
local function has_navbar()
return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off
and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain
and (
args[cfg.arg.name]
or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '')
~= cfg.pattern.navbox
)
end
local function renderNavBar(titleCell)
if has_navbar() then
titleCell:wikitext(navbar{
[cfg.navbar.name] = args[cfg.arg.name],
[cfg.navbar.mini] = 1,
[cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' ..
(args[cfg.arg.titlestyle] or '') ..
';background:none transparent;border:none;box-shadow:none;padding:0;'
})
end
end
local function renderTitleRow(tbl)
if not args[cfg.arg.title] then return end
local titleRow = tbl:tag('tr')
local titleCell = titleRow:tag('th'):attr('scope', 'col')
local titleColspan = 2
if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end
if args[cfg.arg.image] then titleColspan = titleColspan + 1 end
titleCell
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.titlestyle])
:addClass(cfg.class.navbox_title)
:attr('colspan', titleColspan)
renderNavBar(titleCell)
titleCell
:tag('div')
-- id for aria-labelledby attribute
:attr('id', mw.uri.anchorEncode(args[cfg.arg.title]))
:addClass(args[cfg.arg.titleclass])
:css('font-size', '114%')
:css('margin', '0 4em')
:wikitext(processItem(args[cfg.arg.title]))
end
local function getAboveBelowColspan()
local ret = 2
if args[cfg.arg.imageleft] then ret = ret + 1 end
if args[cfg.arg.image] then ret = ret + 1 end
return ret
end
local function renderAboveRow(tbl)
if not args[cfg.arg.above] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.aboveclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.abovestyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
-- id for aria-labelledby attribute, if no title
:attr('id', args[cfg.arg.title] and nil or mw.uri.anchorEncode(args[cfg.arg.above]))
:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))
end
local function renderBelowRow(tbl)
if not args[cfg.arg.below] then return end
tbl:tag('tr')
:tag('td')
:addClass(cfg.class.navbox_abovebelow)
:addClass(args[cfg.arg.belowclass])
:cssText(args[cfg.arg.basestyle])
:cssText(args[cfg.arg.belowstyle])
:attr('colspan', getAboveBelowColspan())
:tag('div')
:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))
end
local function renderListRow(tbl, index, listnum, listnums_size)
local row = tbl:tag('tr')
if index == 1 and args[cfg.arg.imageleft] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 2px 0 0')
:cssText(args[cfg.arg.imageleftstyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.imageleft]))
end
local group_and_num = format(cfg.arg.group_and_num, listnum)
local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum)
if args[group_and_num] then
local groupCell = row:tag('th')
-- id for aria-labelledby attribute, if lone group with no title or above
if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then
groupCell
:attr('id', mw.uri.anchorEncode(args[cfg.arg.group1]))
end
groupCell
:attr('scope', 'row')
:addClass(cfg.class.navbox_group)
:addClass(args[cfg.arg.groupclass])
:cssText(args[cfg.arg.basestyle])
-- If groupwidth not specified, minimize width
:css('width', args[cfg.arg.groupwidth] or '1%')
groupCell
:cssText(args[cfg.arg.groupstyle])
:cssText(args[groupstyle_and_num])
:wikitext(args[group_and_num])
end
local listCell = row:tag('td')
if args[group_and_num] then
listCell
:addClass(cfg.class.navbox_list_with_group)
else
listCell:attr('colspan', 2)
end
if not args[cfg.arg.groupwidth] then
listCell:css('width', '100%')
end
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing
if index % 2 == 1 then
rowstyle = args[cfg.arg.oddstyle]
else
rowstyle = args[cfg.arg.evenstyle]
end
local list_and_num = format(cfg.arg.list_and_num, listnum)
local listText = args[list_and_num]
local oddEven = cfg.marker.oddeven
if listText:sub(1, 12) == '</div><table' then
-- Assume list text is for a subgroup navbox so no automatic striping for this row.
oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part
end
local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum)
local listclass_and_num = format(cfg.arg.listclass_and_num, listnum)
listCell
:css('padding', '0')
:cssText(args[cfg.arg.liststyle])
:cssText(rowstyle)
:cssText(args[liststyle_and_num])
:addClass(cfg.class.navbox_list)
:addClass(cfg.class.navbox_part .. oddEven)
:addClass(args[cfg.arg.listclass])
:addClass(args[listclass_and_num])
:tag('div')
:css('padding',
(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em'
)
:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))
if index == 1 and args[cfg.arg.image] then
row
:tag('td')
:addClass(cfg.class.noviewer)
:addClass(cfg.class.navbox_image)
:addClass(args[cfg.arg.imageclass])
:css('width', '1px') -- Minimize width
:css('padding', '0 0 0 2px')
:cssText(args[cfg.arg.imagestyle])
:attr('rowspan', listnums_size)
:tag('div')
:wikitext(processItem(args[cfg.arg.image]))
end
end
local function has_list_class(htmlclass)
local patterns = {
'^' .. htmlclass .. '$',
'%s' .. htmlclass .. '$',
'^' .. htmlclass .. '%s',
'%s' .. htmlclass .. '%s'
}
for arg, _ in pairs(args) do
if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then
for _, pattern in ipairs(patterns) do
if mw.ustring.find(args[arg] or '', pattern) then
return true
end
end
end
end
return false
end
-- there are a lot of list classes in the wild, so we add their TemplateStyles
local function add_list_styles()
local frame = mw.getCurrentFrame()
local function add_list_templatestyles(htmlclass, templatestyles)
if has_list_class(htmlclass) then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
else
return ''
end
end
local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles)
local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles)
-- a second workaround for [[phab:T303378]]
-- when that issue is fixed, we can actually use has_navbar not to emit the
-- tag here if we want
if has_navbar() and hlist_styles == '' then
hlist_styles = frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
}
end
-- hlist -> plainlist is best-effort to preserve old Common.css ordering.
-- this ordering is not a guarantee because most navboxes will emit only
-- one of these classes [hlist_note]
return hlist_styles .. plainlist_styles
end
local function needsHorizontalLists(border)
if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then
return false
end
return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)
end
local function hasBackgroundColors()
for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,
cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('background', 1, true) then
return true
end
end
return false
end
local function hasBorders()
for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,
cfg.arg.abovestyle, cfg.arg.belowstyle}) do
if tostring(args[key]):find('border', 1, true) then
return true
end
end
return false
end
local function isIllegible()
local styleratio = require('Module:Color contrast')._styleratio
for key, style in pairs(args) do
if tostring(key):match(cfg.pattern.style) then
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then
return true
end
end
end
return false
end
local function getTrackingCategories(border)
local cats = {}
if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end
if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end
if isIllegible() then table.insert(cats, cfg.category.illegible) end
if hasBorders() then table.insert(cats, cfg.category.borders) end
return cats
end
local function renderTrackingCategories(builder, border)
local title = mw.title.getCurrentTitle()
if title.namespace ~= 10 then return end -- not in template space
local subpage = title.subpageText
if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox
or subpage == cfg.keyword.subpage_testcases then return end
for _, cat in ipairs(getTrackingCategories(border)) do
builder:wikitext('[[Category:' .. cat .. ']]')
end
end
local function renderMainTable(border, listnums)
local tbl = mw.html.create('table')
:addClass(cfg.class.nowraplinks)
:addClass(args[cfg.arg.bodyclass])
local state = args[cfg.arg.state]
if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then
if state == cfg.keyword.state_collapsed then
state = cfg.class.collapsed
end
tbl
:addClass(cfg.class.collapsible)
:addClass(state or cfg.class.autocollapse)
end
tbl:css('border-spacing', 0)
if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then
tbl
:addClass(cfg.class.navbox_subgroup)
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
else -- regular navbox - bodystyle and style will be applied to the wrapper table
tbl
:addClass(cfg.class.navbox_inner)
:css('background', 'transparent')
:css('color', 'inherit')
end
tbl:cssText(args[cfg.arg.innerstyle])
renderTitleRow(tbl)
renderAboveRow(tbl)
local listnums_size = #listnums
for i, listnum in ipairs(listnums) do
renderListRow(tbl, i, listnum, listnums_size)
end
renderBelowRow(tbl)
return tbl
end
local function add_navbox_styles(hiding_templatestyles)
local frame = mw.getCurrentFrame()
-- This is a lambda so that it doesn't need the frame as a parameter
local function add_user_styles(templatestyles)
if templatestyles and templatestyles ~= '' then
return frame:extensionTag{
name = 'templatestyles', args = { src = templatestyles }
}
end
return ''
end
-- get templatestyles. load base from config so that Lua only needs to do
-- the work once of parser tag expansion
local base_templatestyles = cfg.templatestyles
local templatestyles = add_user_styles(args[cfg.arg.templatestyles])
local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])
-- The 'navbox-styles' div exists to wrap the styles to work around T200206
-- more elegantly. Instead of combinatorial rules, this ends up being linear
-- number of CSS rules.
return mw.html.create('div')
:addClass(cfg.class.navbox_styles)
:wikitext(
add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles'
base_templatestyles ..
templatestyles ..
child_templatestyles ..
table.concat(hiding_templatestyles)
)
:done()
end
-- work around [[phab:T303378]]
-- for each arg: find all the templatestyles strip markers, insert them into a
-- table. then remove all templatestyles markers from the arg
local function move_hiding_templatestyles(args)
local gfind = string.gfind
local gsub = string.gsub
local templatestyles_markers = {}
local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)'
for k, arg in pairs(args) do
for marker in gfind(arg, strip_marker_pattern) do
table.insert(templatestyles_markers, marker)
end
args[k] = gsub(arg, strip_marker_pattern, '')
end
return templatestyles_markers
end
function p._navbox(navboxArgs)
args = navboxArgs
local hiding_templatestyles = move_hiding_templatestyles(args)
local listnums = {}
for k, _ in pairs(args) do
if type(k) == 'string' then
local listnum = k:match(cfg.pattern.listnum)
if listnum then table.insert(listnums, tonumber(listnum)) end
end
end
table.sort(listnums)
local border = mw.text.trim(args[cfg.arg.border] or args[1] or '')
if border == cfg.keyword.border_child then
border = cfg.keyword.border_subgroup
end
-- render the main body of the navbox
local tbl = renderMainTable(border, listnums)
local res = mw.html.create()
-- render the appropriate wrapper for the navbox, based on the border param
if border == cfg.keyword.border_none then
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]
and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(
args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]
)
)
else
nav:attr('aria-label', cfg.aria_label)
end
elseif border == cfg.keyword.border_subgroup then
-- We assume that this navbox is being rendered in a list cell of a
-- parent navbox, and is therefore inside a div with padding:0em 0.25em.
-- We start with a </div> to avoid the padding being applied, and at the
-- end add a <div> to balance out the parent's </div>
res
:wikitext('</div>')
:node(tbl)
:wikitext('<div>')
else
res:node(add_navbox_styles(hiding_templatestyles))
local nav = res:tag('div')
:attr('role', 'navigation')
:addClass(cfg.class.navbox)
:addClass(args[cfg.arg.navboxclass])
:cssText(args[cfg.arg.bodystyle])
:cssText(args[cfg.arg.style])
:css('padding', '3px')
:node(tbl)
-- aria-labelledby title, otherwise above, otherwise lone group
if args[cfg.arg.title] or args[cfg.arg.above]
or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then
nav:attr(
'aria-labelledby',
mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1])
)
else
nav:attr('aria-label', cfg.aria_label)
end
end
if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then
renderTrackingCategories(res, border)
end
return striped(tostring(res), border)
end
function p.navbox(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame, {wrappers = {cfg.pattern.navbox}})
-- Read the arguments in the order they'll be output in, to make references
-- number in the right order.
local _
_ = args[cfg.arg.title]
_ = args[cfg.arg.above]
-- Limit this to 20 as covering 'most' cases (that's a SWAG) and because
-- iterator approach won't work here
for i = 1, 20 do
_ = args[format(cfg.arg.group_and_num, i)]
_ = args[format(cfg.arg.list_and_num, i)]
end
_ = args[cfg.arg.below]
return p._navbox(args)
end
return p
t7wpbpsk2issbvsmbic7keehrtse5wh
มอดูล:Navbox/doc
828
113
471
2026-04-27T06:40:48Z
Azoma
208
สร้างหน้าด้วย "<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{Uses TemplateStyles|Template:Flatlist/styles.css|Template:Plainlist/styles.css|noprotcat=yes}} This module implements {{tlx|Navbox}}. Supported parameters in this version (preliminary documentation): {{clear}} <div style="border:1px solid #AAA;padding:1ex;{{column-width|24em}}{{column-gap|2ex}}{{column-rule|1px solid #AAA}}"> ; For main navboxes :* dir=l..."
471
wikitext
text/x-wiki
<!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata -->
{{Uses TemplateStyles|Template:Flatlist/styles.css|Template:Plainlist/styles.css|noprotcat=yes}}
This module implements {{tlx|Navbox}}. Supported parameters in this version (preliminary documentation):
{{clear}}
<div style="border:1px solid #AAA;padding:1ex;{{column-width|24em}}{{column-gap|2ex}}{{column-rule|1px solid #AAA}}">
; For main navboxes
:* dir=ltr ''or'' rtl (optional, default is ltr)
:* name=''pagename'' (of template)
:* state=[collapsed|autocollapse]
:* border=[none|plain]
:* bodyclass=, bodystyle=, style=
:* innerstyle=
:* basestyle= (for all cells)
: '''title cell'''
:* titleclass=, titlestyle=
:* title=''title'' (required, not collapsible)
:* navbar=[off|plain] (if name specified)
; For inner navboxes
:* name=''pagename'' (if in a subtemplate)
:* border=subgroup|child
:* bodyclass=, bodystyle=, style=
:* innerstyle=
:* basestyle= (for all cells)
: '''title cell (optional, in row 1)'''
:* titlegroupclass=, titlegroupstyle=
:* titlegroup=''subtitle''
:* navbar=[off|plain] (if name specified)
; Content cell above the list of groups
:* aboveclass=, abovestyle=
:* above=''content''
; Styles of group headers
:* groupclass=, groupstyle=
:* groupwidth=
; Styles of group lists
:* listclass=, liststyle=
:* evenstyle=, oddstyle=
:* list1padding=[yes], listpadding=[yes]
; Images in row 1, spanning all rows except title
:* imageclass=
:* imageleftstyle=, imageleft=
:* imagestyle=, image=
; For each group (''n''>=1)
:* group''n''=''header''
:* list''n''style=
:* list''n''=''list content'' or<br />''inner navbox''
; Content cell below the list of groups
:* belowclass=, belowstyle=
:* below=''content''
</div>
<includeonly>{{Sandbox other||
<!-- Categories below this line; interwikis at Wikidata -->
[[Category:Modules{{#translation:}}]]
}}</includeonly><noinclude>
[[Category:Module documentation pages{{#translation:}}]]
</noinclude>
f8a3zbb65x6x5sgdjcy1kajm3eg1pbo
มอดูล:Navbar
828
114
472
2026-04-27T10:50:26Z
Tvcccp
23
สร้างหน้าด้วย "local p = {} local cfg = mw.loadData('Module:Navbar/configuration') local function get_title_arg(is_collapsible, template) local title_arg = 1 if is_collapsible then title_arg = 2 end if template then title_arg = 'template' end return title_arg end local function choose_links(template, args) -- The show table indicates the default displayed items. -- view, talk, edit, hist, move, watch -- TODO: Move to configuration. local show = {true, tr..."
472
Scribunto
text/plain
local p = {}
local cfg = mw.loadData('Module:Navbar/configuration')
local function get_title_arg(is_collapsible, template)
local title_arg = 1
if is_collapsible then title_arg = 2 end
if template then title_arg = 'template' end
return title_arg
end
local function choose_links(template, args)
-- The show table indicates the default displayed items.
-- view, talk, edit, hist, move, watch
-- TODO: Move to configuration.
local show = {true, true, true, false, false, false}
if template then
show[2] = false
show[3] = false
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6,
talk = 2, edit = 3, hist = 4, move = 5, watch = 6}
-- TODO: Consider removing TableTools dependency.
for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do
local num = index[v]
if num then show[num] = true end
end
end
local remove_edit_link = args.noedit
if remove_edit_link then show[3] = false end
return show
end
local function add_link(link_description, ul, is_mini, font_style)
local l
if link_description.url then
l = {'[', '', ']'}
else
l = {'[[', '|', ']]'}
end
ul:tag('li')
:addClass('nv-' .. link_description.full)
:wikitext(l[1] .. link_description.link .. l[2])
:tag(is_mini and 'abbr' or 'span')
:attr('title', link_description.html_title)
:cssText(font_style)
:wikitext(is_mini and link_description.mini or link_description.full)
:done()
:wikitext(l[3])
:done()
end
local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace)
if not title then
error(cfg.invalid_title .. title_text)
end
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''
-- TODO: Get link_descriptions and show into the configuration module.
-- link_descriptions should be easier...
local link_descriptions = {
{ ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template',
['link'] = title.fullText, ['url'] = false },
{ ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template',
['link'] = talkpage, ['url'] = false },
{ ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template',
['link'] = title:fullUrl('action=edit'), ['url'] = true },
{ ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template',
['link'] = title:fullUrl('action=history'), ['url'] = true },
{ ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template',
['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true },
{ ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template',
['link'] = title:fullUrl('action=watch'), ['url'] = true }
}
local ul = mw.html.create('ul')
if has_brackets then
ul:addClass(cfg.classes.brackets)
:cssText(font_style)
end
for i, _ in ipairs(displayed_links) do
if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end
end
return ul:done()
end
function p._navbar(args)
-- TODO: We probably don't need both fontstyle and fontcolor...
local font_style = args.fontstyle
local font_color = args.fontcolor
local is_collapsible = args.collapsible
local is_mini = args.mini
local is_plain = args.plain
local collapsible_class = nil
if is_collapsible then
collapsible_class = cfg.classes.collapsible
if not is_plain then is_mini = 1 end
if font_color then
font_style = (font_style or '') .. '; color: ' .. font_color .. ';'
end
end
local navbar_style = args.style
local div = mw.html.create():tag('div')
div
:addClass(cfg.classes.navbar)
:addClass(cfg.classes.plainlinks)
:addClass(cfg.classes.horizontal_list)
:addClass(collapsible_class) -- we made the determination earlier
:cssText(navbar_style)
if is_mini then div:addClass(cfg.classes.mini) end
local box_text = (args.text or cfg.box_text) .. ' '
-- the concatenated space guarantees the box text is separated
if not (is_mini or is_plain) then
div
:tag('span')
:addClass(cfg.classes.box_text)
:cssText(font_style)
:wikitext(box_text)
end
local template = args.template
local displayed_links = choose_links(template, args)
local has_brackets = args.brackets
local title_arg = get_title_arg(is_collapsible, template)
local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle())
local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style)
div:node(list)
if is_collapsible then
local title_text_class
if is_mini then
title_text_class = cfg.classes.collapsible_title_mini
else
title_text_class = cfg.classes.collapsible_title_full
end
div:done()
:tag('div')
:addClass(title_text_class)
:cssText(font_style)
:wikitext(args[1])
end
local frame = mw.getCurrentFrame()
-- hlist -> navbar is best-effort to preserve old Common.css ordering.
return frame:extensionTag{
name = 'templatestyles', args = { src = cfg.hlist_templatestyles }
} .. frame:extensionTag{
name = 'templatestyles', args = { src = cfg.templatestyles }
} .. tostring(div:done())
end
function p.navbar(frame)
return p._navbar(require('Module:Arguments').getArgs(frame))
end
return p
e8x4gsvao3bejgs0lle5fr5bug7ym1j
มอดูล:Navbar/configuration
828
115
473
2026-04-27T10:54:03Z
Tvcccp
23
สร้างหน้าด้วย "return { ['templatestyles'] = 'Module:Navbar/styles.css', ['hlist_templatestyles'] = 'Flatlist/styles.css', ['box_text'] = 'This box: ', -- default text box when not plain or mini ['title_namespace'] = 'Template', -- namespace to default to for title ['invalid_title'] = 'Invalid title ', ['classes'] = { -- set a line to nil if you don't want it ['navbar'] = 'navbar', ['plainlinks'] = 'plainlinks', -- plainlinks ['horizontal_list'] = '..."
473
Scribunto
text/plain
return {
['templatestyles'] = 'Module:Navbar/styles.css',
['hlist_templatestyles'] = 'Flatlist/styles.css',
['box_text'] = 'This box: ', -- default text box when not plain or mini
['title_namespace'] = 'Template', -- namespace to default to for title
['invalid_title'] = 'Invalid title ',
['classes'] = { -- set a line to nil if you don't want it
['navbar'] = 'navbar',
['plainlinks'] = 'plainlinks', -- plainlinks
['horizontal_list'] = 'hlist', -- horizontal list class
['mini'] = 'navbar-mini', -- class indicating small links in the navbar
['this_box'] = 'navbar-boxtext',
['brackets'] = 'navbar-brackets',
-- 'collapsible' is the key for a class to indicate the navbar is
-- setting up the collapsible element in addition to the normal
-- navbar.
['collapsible'] = 'navbar-collapse',
['collapsible_title_mini'] = 'navbar-ct-mini',
['collapsible_title_full'] = 'navbar-ct-full'
}
}
df3ufsfbua9z8ppazx2wr006mwe2xjx
มอดูล:Navbar/styles.css
828
116
474
2026-04-27T10:58:51Z
Tvcccp
23
สร้างหน้าด้วย "/* {{pp-template}} */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar-collapse { float: left; text-align: left; } .navbar-boxtext { word-spacing: 0; } .navbar ul { display: inline-block; white-space: nowrap; line-height: inherit; } .navbar-brackets::before { margin-right: -0.125em; content: '[ '; } .navbar-brackets::after { margin-left: -0.125em; content: ' ]'; } .navbar li { word-spacing: -0.125em; } ...."
474
sanitized-css
text/css
/* {{pp-template}} */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar-collapse {
float: left;
text-align: left;
}
.navbar-boxtext {
word-spacing: 0;
}
.navbar ul {
display: inline-block;
white-space: nowrap;
line-height: inherit;
}
.navbar-brackets::before {
margin-right: -0.125em;
content: '[ ';
}
.navbar-brackets::after {
margin-left: -0.125em;
content: ' ]';
}
.navbar li {
word-spacing: -0.125em;
}
.navbar a > span,
.navbar a > abbr {
text-decoration: inherit;
}
.navbar-mini abbr {
font-variant: small-caps;
border-bottom: none;
text-decoration: none;
cursor: inherit;
}
.navbar-ct-full {
font-size: 114%;
margin: 0 7em;
}
.navbar-ct-mini {
font-size: 114%;
margin: 0 4em;
}
nd76zw6ebwbmn1d6uemkc8fxy45i51m
มอดูล:Navbox/styles.css
828
117
475
2026-04-27T10:59:44Z
Tvcccp
23
สร้างหน้าด้วย ".navbox { box-sizing: border-box; border: 1px solid #a2a9b1; width: 100%; clear: both; font-size: 88%; text-align: center; padding: 1px; margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ } .navbox .navbox { margin-top: 0; /* No top margin for nested navboxes */ } .navbox + .navbox-styles + .navbox { margin-top: -1px; /* Single pixel border between adjacent navboxes */ } .navbox-inner, .navbox-subgroup { widt..."
475
sanitized-css
text/css
.navbox {
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox-styles + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em;
line-height: 1.5em;
text-align: center;
}
.navbox-group {
white-space: nowrap;
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd;
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
.navbox-list-with-group {
text-align: left;
border-left-width: 2px;
border-left-style: solid;
}
/* cell spacing for navbox cells */
/* Borders above 2nd, 3rd, etc. rows */
/* TODO: figure out how to replace tr as structure;
* with div structure it should be just a matter of first-child */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list {
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox-title {
/* Level 1 color */
background-color: #ccf;
}
.navbox-abovebelow,
.navbox-group,
.navbox-subgroup .navbox-title {
/* Level 2 color */
background-color: #ddf;
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
/* Level 3 color */
background-color: #e6e6ff;
}
.navbox-even {
background-color: #f7f7f7;
}
.navbox-odd {
background-color: transparent;
}
/* TODO: figure out how to remove reliance on td as structure */
.navbox .hlist td dl,
.navbox .hlist td ol,
.navbox .hlist td ul,
.navbox td.hlist dl,
.navbox td.hlist ol,
.navbox td.hlist ul {
padding: 0.125em 0;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
float: left;
text-align: left;
margin-right: 0.5em;
}
ld6tqz3c8swwnagxxwnk8hm7iwkmo06
มอดูล:Navbox/configuration
828
118
476
2026-04-27T11:02:02Z
Tvcccp
23
สร้างหน้าด้วย "return { aria_label = 'Navbox', nowrap_item = '%s<span class="nowrap">%s</span>', templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' } }, hlist_templatestyles = 'Flatlist/styles.css', --Follow mw: rather than w:en: plainlist_templatestyles = 'Plainlist/styles.css', -- do not localize marker table marker = { oddeven = '\127_ODDEVEN_\127', restart = '\127_ODDEVEN0_\127',..."
476
Scribunto
text/plain
return {
aria_label = 'Navbox',
nowrap_item = '%s<span class="nowrap">%s</span>',
templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' }
},
hlist_templatestyles = 'Flatlist/styles.css', --Follow mw: rather than w:en:
plainlist_templatestyles = 'Plainlist/styles.css',
-- do not localize marker table
marker = {
oddeven = '\127_ODDEVEN_\127',
restart = '\127_ODDEVEN0_\127',
regex = '\127_ODDEVEN(%d?)_\127'
},
category = {
orphan = '[[Category:Navbox orphans]]',
horizontal_lists = 'Navigational boxes without horizontal lists',
background_colors = 'Navboxes using background colours',
illegible = 'Potentially illegible navboxes',
borders = 'Navboxes using borders',
},
keyword = {
border_subgroup = 'subgroup',
border_child = 'child',
border_none = 'none',
evenodd_swap = 'swap',
navbar_off = 'off',
navbar_plain = 'plain',
nocat_false = 'false',
nowrapitems_yes = 'yes',
orphan_yes = 'yes',
state_collapsed = 'collapsed',
state_off = 'off',
state_plain = 'plain',
subpage_doc = 'doc',
subpage_sandbox = 'sandbox',
subpage_testcases = 'testcases',
tracking_no = 'no'
},
class = {
autocollapse = 'autocollapse',
collapsible = 'mw-collapsible',
collapsed = 'mw-collapsed',
-- Warning
navbox = 'navbox', -- WMF currently hides 'navbox' from mobile,
-- so you probably shouldn't change the navbox class.
navbox_abovebelow = 'navbox-abovebelow',
navbox_group = 'navbox-group',
navbox_image = 'navbox-image',
navbox_inner = 'navbox-inner',
navbox_list = 'navbox-list',
navbox_list_with_group = 'navbox-list-with-group',
navbox_part = 'navbox-', -- do not l10n
navbox_styles = 'navbox-styles',
navbox_subgroup = 'navbox-subgroup',
navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below
navbox_odd_part = 'odd', -- do not l10n
navbox_even_part = 'even', -- do not l10n
nomobile = 'nomobile',
nowraplinks = 'nowraplinks',
noviewer = 'noviewer' -- used to remove images from MediaViewer
},
pattern = {
listnum = '^list(%d+)$',
class = 'class',
sandbox = '/sandbox$',
navbox = 'Template:Navbox',
nowrap = '^<span class="nowrap">',
style = 'style$',
navbox_title = '<th[^>]*"navbox%-title"',
hlist = 'hlist',
plainlist = 'plainlist',
},
arg = {
above = 'above',
aboveclass = 'aboveclass',
abovestyle = 'abovestyle',
basestyle = 'basestyle',
bodyclass = 'bodyclass',
bodystyle = 'bodystyle',
border = 'border',
below = 'below',
belowclass = 'belowclass',
belowstyle = 'belowstyle',
evenodd = 'evenodd',
evenstyle = 'evenstyle',
group1 = 'group1',
group2 = 'group2',
group_and_num = 'group%d',
groupstyle_and_num = 'group%dstyle',
groupclass = 'groupclass',
groupstyle = 'groupstyle',
groupwidth = 'groupwidth',
innerstyle = 'innerstyle',
image = 'image',
imageclass = 'imageclass',
imageleft = 'imageleft',
imageleftstyle = 'imageleftstyle',
imagesetyle = 'imagestyle',
list_and_num = 'list%d',
listclass_and_num = 'list%dclass',
liststyle_and_num = 'list%dstyle',
list1padding = 'list1padding',
listclass = 'listclass',
listpadding = 'listpadding',
liststyle = 'liststyle',
name = 'name',
navbar = 'navbar',
navboxclass = 'navboxclass',
nocat = 'nocat',
nowrapitems = 'nowrapitems',
oddstyle = 'oddstyle',
orphan = 'orphan',
state = 'state',
style = 'style',
templatestyles = 'templatestyles',
child_templatestyles = 'child templatestyles',
title = 'title',
titleclass = 'titleclass',
titlestyle = 'titlestyle',
tracking = 'tracking'
},
-- names of navbar arguments
navbar = {
name = 1,
fontstyle = 'fontstyle',
mini = 'mini'
}
}
hn82escy25lhi2t2i9yb2irmzfxj02i
แม่แบบ:Flatlist/styles.css
10
119
477
2026-04-27T11:04:27Z
Tvcccp
23
สร้างหน้าด้วย "/* {{pp-template}} */ /** * Style for horizontal lists (separator following item). * @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists * @revision 9 (2016-08-10) * @author [[User:Edokter]] */ .hlist dl, .hlist ol, .hlist ul { margin: 0; padding: 0; } /* Display list items inline */ .hlist dd, .hlist dt, .hlist li { margin: 0; display: inline; } /* Display nested lists inline */ .hlist.inline, .hlist.inline dl, .hlist.inline o..."
477
sanitized-css
text/css
/* {{pp-template}} */
/**
* Style for horizontal lists (separator following item).
* @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists
* @revision 9 (2016-08-10)
* @author [[User:Edokter]]
*/
.hlist dl,
.hlist ol,
.hlist ul {
margin: 0;
padding: 0;
}
/* Display list items inline */
.hlist dd,
.hlist dt,
.hlist li {
margin: 0;
display: inline;
}
/* Display nested lists inline */
.hlist.inline,
.hlist.inline dl,
.hlist.inline ol,
.hlist.inline ul,
.hlist dl dl, .hlist dl ol, .hlist dl ul,
.hlist ol dl, .hlist ol ol, .hlist ol ul,
.hlist ul dl, .hlist ul ol, .hlist ul ul {
display: inline;
}
/* Hide empty list items */
.hlist .mw-empty-li,
.hlist .mw-empty-elt {
display: none;
}
/* Generate interpuncts */
.hlist dt:after {
content: ": ";
}
.hlist dd:after,
.hlist li:after {
content: " · ";
font-weight: bold;
}
.hlist dd:last-child:after,
.hlist dt:last-child:after,
.hlist li:last-child:after {
content: none;
}
/* Add parentheses around nested lists */
.hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before,
.hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before,
.hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before {
content: " (";
font-weight: normal;
}
.hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after,
.hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after,
.hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after {
content: ")";
font-weight: normal;
}
/* Put ordinals in front of ordered list items */
.hlist ol {
counter-reset: listitem;
}
.hlist ol > li {
counter-increment: listitem;
}
.hlist ol > li:before {
content: " " counter(listitem) "\a0";
}
.hlist dd ol > li:first-child:before,
.hlist dt ol > li:first-child:before,
.hlist li ol > li:first-child:before {
content: " (" counter(listitem) "\a0";
}
a4wyf051b7o8tplxd2sf168cj98zrj2
แม่แบบ:Flatlist
10
120
478
2026-04-27T11:04:55Z
Tvcccp
23
สร้างหน้าด้วย "<onlyinclude><templatestyles src="Template:Flatlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}| {{{1}}} </div>}}"
478
wikitext
text/x-wiki
<onlyinclude><templatestyles src="Template:Flatlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}|
{{{1}}}
</div>}}
q69rbqpw0qao0tagdie1tmm11nib52l
แม่แบบ:Navbox subgroup
10
121
479
2026-04-27T11:05:48Z
Tvcccp
23
สร้างหน้าด้วย "{{Navbox |name = {{{name|}}} |state = {{{state|}}} |navbar = {{{navbar|}}} |border = {{#if:{{{border|}}}|{{{border}}}|child}} |title = {{{title|}}} |above = {{{above|}}} |below = {{{below|}}} |image = {{{image|}}} |imageleft = {{{imageleft|}}} |groupwidth = {{{groupwidth|}}} |group1 = {{#if:{{{group1|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group1}}}</div>}} |group2 = {{#if:{{{group2|}}}|<div style="padding:{{{grouppadding|0em 0...."
479
wikitext
text/x-wiki
{{Navbox
|name = {{{name|}}}
|state = {{{state|}}}
|navbar = {{{navbar|}}}
|border = {{#if:{{{border|}}}|{{{border}}}|child}}
|title = {{{title|}}}
|above = {{{above|}}}
|below = {{{below|}}}
|image = {{{image|}}}
|imageleft = {{{imageleft|}}}
|groupwidth = {{{groupwidth|}}}
|group1 = {{#if:{{{group1|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group1}}}</div>}}
|group2 = {{#if:{{{group2|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group2}}}</div>}}
|group3 = {{#if:{{{group3|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group3}}}</div>}}
|group4 = {{#if:{{{group4|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group4}}}</div>}}
|group5 = {{#if:{{{group5|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group5}}}</div>}}
|group6 = {{#if:{{{group6|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group6}}}</div>}}
|group7 = {{#if:{{{group7|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group7}}}</div>}}
|group8 = {{#if:{{{group8|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group8}}}</div>}}
|group9 = {{#if:{{{group9|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group9}}}</div>}}
|group10 = {{#if:{{{group10|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group10}}}</div>}}
|group11 = {{#if:{{{group11|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group11}}}</div>}}
|group12 = {{#if:{{{group12|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group12}}}</div>}}
|group13 = {{#if:{{{group13|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group13}}}</div>}}
|group14 = {{#if:{{{group14|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group14}}}</div>}}
|group15 = {{#if:{{{group15|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group15}}}</div>}}
|group16 = {{#if:{{{group16|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group16}}}</div>}}
|group17 = {{#if:{{{group17|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group17}}}</div>}}
|group18 = {{#if:{{{group18|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group18}}}</div>}}
|group19 = {{#if:{{{group19|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group19}}}</div>}}
|group20 = {{#if:{{{group20|}}}|<div style="padding:{{{grouppadding|0em 0.75em;}}}">{{{group20}}}</div>}}
|list1 = {{{list1|}}}
|list2 = {{{list2|}}}
|list3 = {{{list3|}}}
|list4 = {{{list4|}}}
|list5 = {{{list5|}}}
|list6 = {{{list6|}}}
|list7 = {{{list7|}}}
|list8 = {{{list8|}}}
|list9 = {{{list9|}}}
|list10 = {{{list10|}}}
|list11 = {{{list11|}}}
|list12 = {{{list12|}}}
|list13 = {{{list13|}}}
|list14 = {{{list14|}}}
|list15 = {{{list15|}}}
|list16 = {{{list16|}}}
|list17 = {{{list17|}}}
|list18 = {{{list18|}}}
|list19 = {{{list19|}}}
|list20 = {{{list20|}}}
|bodyclass = {{{bodyclass|}}}
|titleclass = {{{titleclass|}}}
|aboveclass = {{{aboveclass|}}}
|belowclass = {{{belowclass|}}}
|groupclass = {{{groupclass|}}}
|listclass = {{{listclass|}}}
|style = {{{style|}}}{{{bodystyle|}}}
|imageleftstyle = {{{imageleftstyle|}}}
|imagestyle = {{{imagestyle|}}}
|titlestyle = {{{titlestyle|}}}
|basestyle = {{{basestyle|}}}
|abovestyle = {{{abovestyle|}}}
|belowstyle = {{{belowstyle|}}}
|groupstyle = padding-left:0;padding-right:0;{{{groupstyle|}}}
|liststyle = {{{liststyle|}}}
|evenstyle = {{{evenstyle|}}}
|oddstyle = {{{oddstyle|}}}
|group1style = {{{group1style|}}}
|group2style = {{{group2style|}}}
|group3style = {{{group3style|}}}
|group4style = {{{group4style|}}}
|group5style = {{{group5style|}}}
|group6style = {{{group6style|}}}
|group7style = {{{group7style|}}}
|group8style = {{{group8style|}}}
|group9style = {{{group9style|}}}
|group10style = {{{group10style|}}}
|group11style = {{{group11style|}}}
|group12style = {{{group12style|}}}
|group13style = {{{group13style|}}}
|group14style = {{{group14style|}}}
|group15style = {{{group15style|}}}
|group16style = {{{group16style|}}}
|group17style = {{{group17style|}}}
|group18style = {{{group18style|}}}
|group19style = {{{group19style|}}}
|group20style = {{{group20style|}}}
|list1style = {{{list1style|}}}
|list2style = {{{list2style|}}}
|list3style = {{{list3style|}}}
|list4style = {{{list4style|}}}
|list5style = {{{list5style|}}}
|list6style = {{{list6style|}}}
|list7style = {{{list7style|}}}
|list8style = {{{list8style|}}}
|list9style = {{{list9style|}}}
|list10style = {{{list10style|}}}
|list11style = {{{list11style|}}}
|list12style = {{{list12style|}}}
|list13style = {{{list13style|}}}
|list14style = {{{list14style|}}}
|list15style = {{{list15style|}}}
|list16style = {{{list16style|}}}
|list17style = {{{list17style|}}}
|list18style = {{{list18style|}}}
|list19style = {{{list19style|}}}
|list20style = {{{list20style|}}}
|evenodd = {{{evenodd|}}}
|listpadding = {{{listpadding|}}}
}}<noinclude>
4352admt48jguxcnufx5g3gs729t7o1
มอดูล:Color contrast
828
122
480
2026-04-27T11:06:30Z
Tvcccp
23
สร้างหน้าด้วย "-- -- This module implements -- {{Color contrast ratio}} -- {{Greater color contrast ratio}} -- {{ColorToLum}} -- {{RGBColorToLum}} -- local p = {} local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' ) local function sRGB ( v ) if (v <= 0.03928) then v = v / 12.92 else v = math.pow((v+0.055)/1.055, 2.4) end return v end local function rgbdec2lum( R, G, B ) if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B <..."
480
Scribunto
text/plain
--
-- This module implements
-- {{Color contrast ratio}}
-- {{Greater color contrast ratio}}
-- {{ColorToLum}}
-- {{RGBColorToLum}}
--
local p = {}
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
local function sRGB ( v )
if (v <= 0.03928) then
v = v / 12.92
else
v = math.pow((v+0.055)/1.055, 2.4)
end
return v
end
local function rgbdec2lum( R, G, B )
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
else
return ''
end
end
local function hsl2lum( h, s, l )
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
local c = (1 - math.abs(2*l - 1))*s
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )
local m = l - c/2
local r, g, b = m, m, m
if( 0 <= h and h < 60 ) then
r = r + c
g = g + x
elseif( 60 <= h and h < 120 ) then
r = r + x
g = g + c
elseif( 120 <= h and h < 180 ) then
g = g + c
b = b + x
elseif( 180 <= h and h < 240 ) then
g = g + x
b = b + c
elseif( 240 <= h and h < 300 ) then
r = r + x
b = b + c
elseif( 300 <= h and h < 360 ) then
r = r + c
b = b + x
end
return rgbdec2lum(255*r, 255*g, 255*b)
else
return ''
end
end
local function color2lum( c )
if (c == nil) then
return ''
end
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
-- unstrip nowiki strip markers
c = mw.text.unstripNoWiki(c)
-- lowercase
c = c:lower()
-- first try to look it up
local L = HTMLcolor[c]
if (L ~= nil) then
return L
end
-- convert from hsl
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
end
-- convert from rgb
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
end
-- convert from rgb percent
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
end
-- remove leading # (if there is one) and whitespace
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')
-- split into rgb
local cs = mw.text.split(c or '', '')
if( #cs == 6 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])
return rgbdec2lum(R, G, B)
elseif ( #cs == 3 ) then
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])
return rgbdec2lum(R, G, B)
end
-- failure, return blank
return ''
end
function p._greatercontrast(args)
local bias = tonumber(args['bias'] or '0') or 0
local v1 = color2lum(args[1] or '')
local c2 = args[2] or '#FFFFFF'
local v2 = color2lum(c2)
local c3 = args[3] or '#000000'
local v3 = color2lum(c3)
local ratio1 = 0;
local ratio2 = 0;
if (type(v1) == 'number' and type(v2) == 'number') then
ratio1 = (v2 + 0.05)/(v1 + 0.05)
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1
end
if (type(v1) == 'number' and type(v3) == 'number') then
ratio2 = (v3 + 0.05)/(v1 + 0.05)
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
end
return (ratio1 + bias > ratio2) and c2 or c3
end
function p._ratio(args)
local v1 = color2lum(args[1])
local v2 = color2lum(args[2])
if (type(v1) == 'number' and type(v2) == 'number') then
-- v1 should be the brighter of the two.
if v2 > v1 then
v1, v2 = v2, v1
end
return (v1 + 0.05)/(v2 + 0.05)
else
return args['error'] or '?'
end
end
function p._styleratio(args)
local style = (args[1] or ''):lower()
local bg, fg = 'white', 'black'
local lum_bg, lum_fg = 1, 0
if args[2] then
local lum = color2lum(args[2])
if lum ~= '' then bg, lum_bg = args[2], lum end
end
if args[3] then
local lum = color2lum(args[3])
if lum ~= '' then fg, lum_fg = args[3], lum end
end
local slist = mw.text.split(style or '', ';')
for k = 1,#slist do
s = slist[k]
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )
k = k or ''
v = v or ''
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_bg = v, lum end
elseif (k:match('^[%s]*(color)[%s]*$')) then
local lum = color2lum(v)
if( lum ~= '' ) then bg, lum_fg = v, lum end
end
end
if lum_bg > lum_fg then
return (lum_bg + 0.05)/(lum_fg + 0.05)
else
return (lum_fg + 0.05)/(lum_bg + 0.05)
end
end
function p.lum(frame)
return color2lum(frame.args[1] or frame:getParent().args[1])
end
function p.ratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._ratio(args)
end
function p.styleratio(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._styleratio(args)
end
function p.greatercontrast(frame)
local args = frame.args[1] and frame.args or frame:getParent().args
return p._greatercontrast(args)
end
return p
hvtmcsb4mviz7lzj6tgvyp5kohk0vr7