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.3 first-letter สื่อ พิเศษ พูดคุย ผู้ใช้ คุยกับผู้ใช้ วิกิมีเดียประเทศไทย พูดคุยเรื่องวิกิมีเดียประเทศไทย ไฟล์ คุยเรื่องไฟล์ มีเดียวิกิ คุยเรื่องมีเดียวิกิ แม่แบบ คุยเรื่องแม่แบบ วิธีใช้ คุยเรื่องวิธีใช้ หมวดหมู่ คุยเรื่องหมวดหมู่ TimedText TimedText talk มอดูล คุยเรื่องมอดูล หน้าหลัก 0 1 187 139 2025-11-13T11:20:36Z Wutkh 9 187 wikitext text/x-wiki <div class="plainlinks" id="megaheader" style="padding-bottom: 10px;"> [[File:Wikimedia Thailand Horizontal Logo.svg|200px|center]] </div> <div class="plainlinks" id="megaheader"> [[File:Wiki Loves Monuments 2023 promo.jpg|1000px|center]] </div> {{Header|active=1}} {{center|เนื่องจากปัจจุบันอยู่ระหว่างการโอนถ่ายข้อมูลจากเมทาวิกิ}} {{center|ขอให้ผู้เยี่ยมชมติดตามข้อมูลฉบับเต็มได้บน[[meta:Wikimedia Thailand|หน้าเมทาวิกิ]]}} {{โครงการพี่น้อง}} {|width="100%" border="0" cellspacing="2" cellpadding="2" style="align=center; MARGIN: 10px auto 0.5em;clear:both;border:1px solid silver; background:whitesmoke; color:#000000; font-size:75%; text-align: center;" |- | '''โปรดทราบ'''<br/>แม้ว่าวิกิมีเดียประเทศไทยจะได้รับเงินสนับสนุนจากมูลนิธิวิกิมีเดีย แต่วิกิมีเดียประเทศไทยเป็นองค์กรเอกเทศ มิได้เป็นสาขาย่อยในเชิงโครงสร้างการบริหารของมูลนิธิวิกิมีเดีย<br/>วิกิมีเดียประเทศไทยไม่อาจรับผิดชอบต่อเนื้อหาใด ๆ บนวิกิพีเดียและโครงการพี่น้องทุกโครงการบนกลุ่มขับเคลื่อนวิกิมีเดีย<br/>โปรดศึกษารายละเอียดเพิ่มเติมใน[[วิกิมีเดียประเทศไทย:ข้อปฏิเสธความรับผิดชอบทั่วไป|หน้านี้]] ขอขอบคุณในความเข้าใจ |} lxtwmfbhfymvn49vtbz1vhd2p7197gd พูดคุย:หน้าหลัก 1 2 216 211 2025-11-18T09:19:18Z Taweetham 7 /* Two (conflicting?) ideas */ 216 wikitext text/x-wiki == Thank you for creating this WMTH wiki == I look forward to seeing more communication and fruitful work from WMTH and the Thai community on this site. https://phabricator.wikimedia.org/T400001 --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 19:15, 22 กันยายน 2568 (+07) == Two (conflicting?) ideas == {{ping|wutkh}} ;Idea 1: '''Promotion of this WMTH wiki''' If possible, promote this wiki to (Thai) volunteers so that they can use it as the home page for their volunteer user accounts. ;Idea 2: '''Separation of discussion for WMTH organizational/operational matters and cross-wiki Thailand/Thai-language/Thai-people–related community/project/movement matters''' Discussion on Meta (or, where appropriate, on this WMTH wiki) would be legitimate and valid when participants and outsiders clearly understand that the discussion and its pages are open to the public (community-wide) and are not under any influence, sponsorship, encouragement, or intervention by WMTH as an organisation (which has yet to come into existence). ตอบและอภิปรายด้านล่างเป็นภาษาไทยได้เลยครับ แต่ตอนสรุปอาจจะเขียนกลับเป็นภาษาอังกฤษอีกครั้ง เพื่อคนอื่นอ่านผ่านมาเห็นจะได้เข้าใจว่าทำไมเราเลือกใช้หน้าเว็บแต่ละแห่งทำกิจกรรมกันอย่างไร --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 10:51, 18 พฤศจิกายน 2568 (+07) lo2mc1b2fzx08zbm0no0rmc1m7y6oqr แม่แบบ:Center 10 3 6 2025-09-27T15:21:42Z Sarawut.Kha 3 สร้างหน้าด้วย "<includeonly><div class="center" style="width:auto; margin-left:auto; margin-right:auto;{{#if: {{{style|}}} | {{{style}}};}}">{{{1|[[หมวดหมู่:Pages using center with no arguments]]}}}</div></includeonly>" 6 wikitext text/x-wiki <includeonly><div class="center" style="width:auto; margin-left:auto; margin-right:auto;{{#if: {{{style|}}} | {{{style}}};}}">{{{1|[[หมวดหมู่:Pages using center with no arguments]]}}}</div></includeonly> 9m7wkxngft5w7spz4jwegk657xtfb4i แม่แบบ:โครงการพี่น้อง 10 4 9 7 2025-09-27T15:36:44Z Sarawut.Kha 3 9 wikitext text/x-wiki <templatestyles src="โครงการพี่น้อง/styles.css"/> <div class="plainlinks nomobile" style="margin-top:30px; padding-top:15px; border-top:3px double #CCC; color:#222;"> <div style="background:white; width:45px; height:45px; margin:0 auto; margin-top:-40px;">[[File:Wikimedia-logo black.svg|45px|center|link=]]</div> <div style="color:#222; font-size:110%; text-align:center; margin-bottom:2.5em; padding-top:10px;">วิกิมีเดียประเทศไทยเป็นองค์กรสาขาที่ได้รับการยอมรับจาก[https://wikimediafoundation.org/ มูลนิธิวิกิมีเดีย]องค์กรไม่แสวงผลกำไร ผู้ดำเนินการอีกหลาย[https://wikimediafoundation.org/what-we-do/wikimedia-projects/ โครงการ] ได้แก่</div> {|class="layout sisterproject" width="100%" align="center" cellpadding="4" style="text-align:left; background-color: transparent;" | align = "center" | <imagemap>ไฟล์:Wikipedia-logo.svg|35px|วิกิพีเดีย default [[w:หน้าหลัก|วิกิพีเดีย]] desc none</imagemap> | width = "33%" | '''<span class="plainlinks">[http://th.wikipedia.org/wiki/หน้าหลัก วิกิพีเดีย]</span>'''<br />สารานุกรมเสรี | align = "center" | <imagemap>ไฟล์:Commons-logo.svg|35px|คอมมอนส์ default [[commons:หน้าหลัก|คอมมอนส์]] desc none</imagemap> | width = "33%" | '''<span class="plainlinks">[http://commons.wikimedia.org/wiki/หน้าหลัก คอมมอนส์]</span>'''<br />คลังสื่อเสรี | align = "center" | <imagemap>ไฟล์:MediaWiki-2020-icon.svg|40px|มีเดียวิกิ default [[mw:|มีเดียวิกิ]] desc none</imagemap> | width = "33%" | '''<span class="plainlinks">[http://www.mediawiki.org/wiki/MediaWiki มีเดียวิกิ]</span>'''<br />การพัฒนาซอฟต์แวร์วิกิ |- | align = "center" | <imagemap>ไฟล์:Wikimedia Community Logo.svg|35px|เมทาวิกิ default [[m:หน้าหลัก|เมต้าวิกิ]] desc none</imagemap> | '''<span class="plainlinks">[http://meta.wikimedia.org/wiki/หน้าหลัก เมทาวิกิ]</span>'''<br />ศูนย์ประสานงานโครงการวิกิมีเดีย | align = "center" | <imagemap>ไฟล์:Wikibooks-logo.svg|35px|วิกิตำรา default [[b:|วิกิตำรา]] desc none</imagemap> | width = "33%"| '''<span class="plainlinks">[http://th.wikibooks.org/ วิกิตำรา]</span>'''<br />ตำราและคู่มือเสรี | align = "center" | <imagemap>ไฟล์:Wikidata-logo.svg|47px|วิกิสนเทศ default [[d:|วิกิสนเทศ]] desc none</imagemap> | width = "33%"| '''<span class="plainlinks">[http://www.wikidata.org/wiki/Wikidata:หน้าหลัก วิกิสนเทศ]</span>'''<br />ฐานความรู้เสรี |- | align = "center" | <imagemap>ไฟล์:Wikiquote-logo.svg|35px|วิกิคำคม default [[q:|วิกิคำคม]] desc none</imagemap> | width = "33%" | '''<span class="plainlinks">[http://th.wikiquote.org/ วิกิคำคม]</span>'''<br />แหล่งรวบรวมคำพูดเสรี | align = "center" | <imagemap>ไฟล์:Wikisource-logo.svg|40px|วิกิซอร์ซ default [[s:|วิกิซอร์ซ]] desc none</imagemap> | width = "33%"| '''<span class="plainlinks">[http://th.wikisource.org/ วิกิซอร์ซ]</span>'''<br />เอกสารต้นฉบับเสรี | align = "center" | <imagemap>ไฟล์:Wikispecies-logo.svg|47px|วิกิสปีชีส์ default [[wikispecies:หน้าหลัก|วิกิสปีชีส์]] desc none</imagemap> | '''<span class="plainlinks">[http://species.wikimedia.org/wiki/หน้าหลัก วิกิสปีชีส์]</span>'''<br />สารบบอนุกรมวิธานเสรี |- | align = "center" | <imagemap>ไฟล์:Wiktionary-logo-v2.svg|47px|วิกิพจนานุกรม default [[wikt:|วิกิพจนานุกรม]] desc none</imagemap> | width = "33%" | '''<span class="plainlinks">[http://th.wiktionary.org/ วิกิพจนานุกรม]</span>'''<br />พจนานุกรมและอรรถาภิธานเสรี | align = "center" | <imagemap>ไฟล์:Wikivoyage-Logo-v3-icon.svg|35px|วิกิท่องเที่ยว default [[:voy:|วิกิท่องเที่ยว]] desc none</imagemap> | width = "33%" | '''<span class="plainlinks">[http://incubator.wikimedia.org/wiki/Wy/th/หน้าหลัก วิกิท่องเที่ยว]</span>'''<br />คู่มือท่องเที่ยวเสรี |} 7kz81e7c31h53kgxlwtaxfn8kf4i236 แม่แบบ:โครงการพี่น้อง/styles.css 10 5 8 2025-09-27T15:26:30Z Sarawut.Kha 3 สร้างหน้าด้วย "@media screen and ( max-width: 720px ) { .sisterproject tr { display: block } .sisterproject td:nth-child(odd) { display: inline-block; width: 30%; min-width: 50px; } .sisterproject td:nth-child(even) { display: inline-block; width: 60%; } }" 8 sanitized-css text/css @media screen and ( max-width: 720px ) { .sisterproject tr { display: block } .sisterproject td:nth-child(odd) { display: inline-block; width: 30%; min-width: 50px; } .sisterproject td:nth-child(even) { display: inline-block; width: 60%; } } dhlfny7br04rwew9r09c8cs1hgbg90d วิกิมีเดียประเทศไทย:เกี่ยวกับ 4 6 64 32 2025-10-17T08:56:34Z Wutkh 9 64 wikitext text/x-wiki {{Header|active=2}} <div class="plainlinks" id="megaheader"> [[File:Wiki Loves Monuments 2023 promo.jpg|1000px|center]] {{center|ภาพถ่ายจากกิจกรรม Wiki Loves Monuments ในประเทศไทย}}<br/> </div> [[ไฟล์:Wikimedia Thailand-Logo-BW.svg|200px|frameless|left]] '''วิกิมีเดียประเทศไทย''' เป็นสาขาของวิกิมีเดียในประเทศไทยที่มูลนิธิวิกิมีเดียให้การรับรอง เป็นหน่วยงานที่จัดกิจกรรมเชิงรุกสู่ภายนอกที่หลากหลายเพื่อส่งเสริมการสร้างและการเข้าถึงความรู้เสรีโดยความร่วมมือของพันธมิตรต่าง ๆ ทั้งในประเทศและนอกประเทศ ซึ่งรวมไปถึงมูลนิธิวิกิมีเดียด้วย โดยได้ก่อตั้งขึ้นเมื่อ พ.ศ. 2551 ในฐานะของกลุ่มผู้ใช้ และได้รับการแต่งตั้งเป็นสาขาวิกิมีเดียใน พ.ศ. 2562 เป้าหมายของเราคือสนับสนุนการสร้าง การพัฒนา และการบำรุงรักษาโครงการวิกิมีเดียภาคภาษาไทย มีบทบาทที่ช่วยเหลือกิจกรรมดังกล่าว ตลอดจนส่งเสริมความรู้ของสาธารณะ d00cvpbug1r17va1oei799oy3h4usfv ผู้ใช้:Octahedron80 2 7 12 2025-09-29T02:50:41Z Octahedron80 26 สร้างหน้าด้วย "Hello, world. 👋" 12 wikitext text/x-wiki Hello, world. 👋 3k0nsls6w7snrqssja2mmtwytuodr6c แม่แบบ:Mainpage/styles.css 10 8 22 18 2025-10-11T15:39:31Z Wutkh 9 22 sanitized-css text/css .mp-outer { width: 100%; min-height: calc(100vh - 8em); background-color: var(--background-color-base, #fff); color: inherit; position: relative; } .mp { max-width: 76em; min-height: 19em; margin: 0 auto 5em; position: relative; width: 100%; } .mp, .mp * { box-sizing: border-box; } /* Hero */ .mp-hero { background-color: #e0e0d8; border-radius: 0.3rem; overflow: hidden; } .mp-hero-image { overflow: hidden; position: relative; display: flex; flex-direction: column-reverse; } @media screen and (min-width: 740px) { .mp-hero-image { align-items: flex-end; flex-direction: row; background-color: #333; } .mp-hero-image.mp-hero-image { height: 56vw; max-height: 36rem; } .mp-hero-image>span>.mw-file-description { position: absolute; top: 0; left: 0; right: 0; bottom: 0; } .mp-hero-image>span>.mw-file-description>img { height: 100% !important; max-height: 100% !important; } .mp-hero-image .mp-hero-label { position: relative; background-color: rgba(255, 255, 255, 0.88); padding: 1.8em; margin: 8rem auto 2rem 0; max-width: 57rem; display: flex; align-items: center; border-radius: 0 0.3rem 0.3rem 0; margin: 8rem auto 2rem 0; background-color: rgba(255, 255, 255, 0.88); padding-top: 1.8em; } } .mp-hero-image>span>.mw-file-description>img { height: auto; max-height: 24rem; width: 100% !important; display: block; object-fit: cover; } .mp-hero-label { position: relative; max-width: 57rem; background-color: var(--background-color-base, #fff); color: inherit; padding: 1.2rem 1.8rem; padding-top: 0; } .mp-hero-label-logo>a { display: block; width: calc(4rem + 5vw); max-width: 10rem; margin-right: 1.8rem; } .mp-hero-label-logo>a>img { max-width: 100%; height: auto; } .mp-hero-pretitle { font-size: 1.125rem; line-height: 1.3em; text-transform: uppercase; color: black; } .mp-hero-title { font-size: calc(1rem + .03 * (100vw - 176px)); font-family: "Linux Libertine", Georgia, serif; color: #900000; line-height: 1.04em; } body.skin-minerva .mp-hero-title { font-size: calc(1rem + 3vw); } /* Grid */ .mp-grid { display: flex; margin-right: -2rem; margin-bottom: -2rem; flex-wrap: wrap; } .mp-grid>* { flex: 0 0; flex-basis: calc(100% - 2rem); margin-right: 2rem; margin-bottom: 2rem; } .mp-box-marginal>.mp-grid { min-height: calc(100% + 2rem); } .mp-grid-w1 { flex-basis: calc(1 / 12 * (100% - 24rem) + 0rem); } .mp-grid-w2 { flex-basis: calc(2 / 12 * (100% - 24rem) + 2rem); } .mp-grid-w3 { flex-basis: calc(3 / 12 * (100% - 24rem) + 4rem); } .mp-grid-w4 { flex-basis: calc(4 / 12 * (100% - 24rem) + 6rem); } .mp-grid-w5 { flex-basis: calc(5 / 12 * (100% - 24rem) + 8rem); } .mp-grid-w6 { flex-basis: calc(6 / 12 * (100% - 24rem) + 10rem); } .mp-grid-w7 { flex-basis: calc(7 / 12 * (100% - 24rem) + 12rem); } .mp-grid-w8 { flex-basis: calc(8 / 12 * (100% - 24rem) + 14rem); } .mp-grid-w9 { flex-basis: calc(9 / 12 * (100% - 24rem) + 16rem); } .mp-grid-w10 { flex-basis: calc(10 / 12 * (100% - 24rem) + 18rem); } .mp-grid-w11 { flex-basis: calc(11 / 12 * (100% - 24rem) + 20rem); } .mp-grid-w12 { flex-basis: calc(12 / 12 * (100% - 24rem) + 22rem); } @media screen and (min-width: 450px) { .mp-grid-s-w1 { flex-basis: calc(1 / 12 * (100% - 24rem) + 0rem); } .mp-grid-s-w2 { flex-basis: calc(2 / 12 * (100% - 24rem) + 2rem); } .mp-grid-s-w3 { flex-basis: calc(3 / 12 * (100% - 24rem) + 4rem); } .mp-grid-s-w4 { flex-basis: calc(4 / 12 * (100% - 24rem) + 6rem); } .mp-grid-s-w5 { flex-basis: calc(5 / 12 * (100% - 24rem) + 8rem); } .mp-grid-s-w6 { flex-basis: calc(6 / 12 * (100% - 24rem) + 10rem); } .mp-grid-s-w7 { flex-basis: calc(7 / 12 * (100% - 24rem) + 12rem); } .mp-grid-s-w8 { flex-basis: calc(8 / 12 * (100% - 24rem) + 14rem); } .mp-grid-s-w9 { flex-basis: calc(9 / 12 * (100% - 24rem) + 16rem); } .mp-grid-s-w10 { flex-basis: calc(10 / 12 * (100% - 24rem) + 18rem); } .mp-grid-s-w11 { flex-basis: calc(11 / 12 * (100% - 24rem) + 20rem); } .mp-grid-s-w12 { flex-basis: calc(12 / 12 * (100% - 24rem) + 22rem); } .mp-hidden-up-s { display: none !important; } } @media screen and (max-width: 449px) { .mp-hidden-down-s { display: none !important; } } @media screen and (min-width: 640px) { .mp-grid-m-w1 { flex-basis: calc(1 / 12 * (100% - 24rem) + 0rem); } .mp-grid-m-w2 { flex-basis: calc(2 / 12 * (100% - 24rem) + 2rem); } .mp-grid-m-w3 { flex-basis: calc(3 / 12 * (100% - 24rem) + 4rem); } .mp-grid-m-w4 { flex-basis: calc(4 / 12 * (100% - 24rem) + 6rem); } .mp-grid-m-w5 { flex-basis: calc(5 / 12 * (100% - 24rem) + 8rem); } .mp-grid-m-w6 { flex-basis: calc(6 / 12 * (100% - 24rem) + 10rem); } .mp-grid-m-w7 { flex-basis: calc(7 / 12 * (100% - 24rem) + 12rem); } .mp-grid-m-w8 { flex-basis: calc(8 / 12 * (100% - 24rem) + 14rem); } .mp-grid-m-w9 { flex-basis: calc(9 / 12 * (100% - 24rem) + 16rem); } .mp-grid-m-w10 { flex-basis: calc(10 / 12 * (100% - 24rem) + 18rem); } .mp-grid-m-w11 { flex-basis: calc(11 / 12 * (100% - 24rem) + 20rem); } .mp-grid-m-w12 { flex-basis: calc(12 / 12 * (100% - 24rem) + 22rem); } .mp-hidden-up-m { display: none !important; } } @media screen and (max-width: 639px) { .mp-hidden-down-m { display: none !important; } } @media screen and (min-width: 940px) { .mp-grid-l-w1 { flex-basis: calc(1 / 12 * (100% - 24rem) + 0rem); } .mp-grid-l-w2 { flex-basis: calc(2 / 12 * (100% - 24rem) + 2rem); } .mp-grid-l-w3 { flex-basis: calc(3 / 12 * (100% - 24rem) + 4rem); } .mp-grid-l-w4 { flex-basis: calc(4 / 12 * (100% - 24rem) + 6rem); } .mp-grid-l-w5 { flex-basis: calc(5 / 12 * (100% - 24rem) + 8rem); } .mp-grid-l-w6 { flex-basis: calc(6 / 12 * (100% - 24rem) + 10rem); } .mp-grid-l-w7 { flex-basis: calc(7 / 12 * (100% - 24rem) + 12rem); } .mp-grid-l-w8 { flex-basis: calc(8 / 12 * (100% - 24rem) + 14rem); } .mp-grid-l-w9 { flex-basis: calc(9 / 12 * (100% - 24rem) + 16rem); } .mp-grid-l-w10 { flex-basis: calc(10 / 12 * (100% - 24rem) + 18rem); } .mp-grid-l-w11 { flex-basis: calc(11 / 12 * (100% - 24rem) + 20rem); } .mp-grid-l-w12 { flex-basis: calc(12 / 12 * (100% - 24rem) + 22rem); } .mp-hidden-up-l { display: none !important; } } @media screen and (max-width: 939px) { .mp-hidden-down-l { display: none !important; } } @media screen and (min-width: 1200px) { .mp-grid-xl-w1 { flex-basis: calc(1 / 12 * (100% - 24rem) + 0rem); } .mp-grid-xl-w2 { flex-basis: calc(2 / 12 * (100% - 24rem) + 2rem); } .mp-grid-xl-w3 { flex-basis: calc(3 / 12 * (100% - 24rem) + 4rem); } .mp-grid-xl-w4 { flex-basis: calc(4 / 12 * (100% - 24rem) + 6rem); } .mp-grid-xl-w5 { flex-basis: calc(5 / 12 * (100% - 24rem) + 8rem); } .mp-grid-xl-w6 { flex-basis: calc(6 / 12 * (100% - 24rem) + 10rem); } .mp-grid-xl-w7 { flex-basis: calc(7 / 12 * (100% - 24rem) + 12rem); } .mp-grid-xl-w8 { flex-basis: calc(8 / 12 * (100% - 24rem) + 14rem); } .mp-grid-xl-w9 { flex-basis: calc(9 / 12 * (100% - 24rem) + 16rem); } .mp-grid-xl-w10 { flex-basis: calc(10 / 12 * (100% - 24rem) + 18rem); } .mp-grid-xl-w11 { flex-basis: calc(11 / 12 * (100% - 24rem) + 20rem); } .mp-grid-xl-w12 { flex-basis: calc(12 / 12 * (100% - 24rem) + 22rem); } .mp-hidden-up-xl { display: none !important; } } @media screen and (max-width: 1199px) { .mp-hidden-down-xl { display: none !important; } } .mp-hidden { display: none !important; } eld3ftm4frju8snigzgd5spi5k7ywyr แม่แบบ:Header 10 9 166 112 2025-10-24T13:45:52Z Wutkh 9 166 wikitext text/x-wiki <div style="margin-left:auto; margin-right:auto; text-align:center; font-size:clamp(10px, 20px); font-family:'Sarabun', sans-serif; text-transform:uppercase; margin-top:{{{margin-top|0}}}"> {{Portal navigation | portalname = วิกิมีเดียประเทศไทย | themecolor = #333333 | active = {{{active|}}} | icon1 = [[File:Home font awesome.svg|x25px|link=]] | tab1 = [[หน้าหลัก]] | icon2 = [[File:User font awesome.svg|x25px|link=]] | tab2 = [[วิกิมีเดียประเทศไทย:เกี่ยวกับ|เกี่ยวกับเรา]] | subtab2-1 = [[วิกิมีเดียประเทศไทย:เส้นเวลา|เส้นเวลา]] | subtab2-2 = [[วิกิมีเดียประเทศไทย:โครงสร้าง|โครงสร้าง]] | subtab2-3 = [[วิกิมีเดียประเทศไทย:ข้อปฏิเสธความรับผิดชอบทั่วไป|ข้อปฏิเสธความรับผิดชอบ]] | icon3 = [[File:Bullhorn font awesome.svg|x25px|link=]] | tab3 = [[วิกิมีเดียประเทศไทย:กิจกรรม|กิจกรรม]] | subtab3-1 = [[25 ปีวิกิพีเดีย]] }} </div> 39sfeedu23fenrx9soexxgrfnw1aqyo มอดูล:Portal navigation 828 10 25 2025-10-14T13:46:23Z Wutkh 9 สร้างหน้าด้วย "local p = {} lang = mw.getCurrentFrame():preprocess('{{int:lang}}') pagelang = mw.getCurrentFrame():preprocess('{{PAGELANGUAGE}}') is_rtl = require('Module:Is rtl') function get_directionality(dir, ff) if is_rtl[lang] == true and ff == true then if dir == 'left' then return 'right' end return 'left' end return dir end function get_portalicon(portalicon, ff) if portalicon == nil then return '' end ret = '<span style="padding:0.3em..." 25 Scribunto text/plain local p = {} lang = mw.getCurrentFrame():preprocess('{{int:lang}}') pagelang = mw.getCurrentFrame():preprocess('{{PAGELANGUAGE}}') is_rtl = require('Module:Is rtl') function get_directionality(dir, ff) if is_rtl[lang] == true and ff == true then if dir == 'left' then return 'right' end return 'left' end return dir end function get_portalicon(portalicon, ff) if portalicon == nil then return '' end ret = '<span style="padding:0.3em; display:inline-block;' -- UNCLOSED TAG if is_rtl[pagelang] == true or (ff == true and is_rtl[lang]) == true then ret = ret .. ' margin-left:0.5em;' else ret = ret .. ' margin-right:0.5em;' end ret = ret .. '">' .. portalicon .. '</span>' return ret end function converttolinearrgb(c) c = tonumber(c, 16) c = c / 255.0 if c <= 0.03928 then c = c/12.92 else c = ((c+0.055)/1.055) ^ 2.4 end return c end function p.render(frame) -- Default values portalname = 'Portal' tabs = {} subtabs = {} wrc = 0 -- Default values (customizations) themecolor = '#54595d' headerstyle = '' tabsicons = {} ff = nil wrcadditional = nil -- Populating variables for key, value in pairs(frame:getParent().args) do if key == 'portalname' then portalname = value elseif key == 'portalicon' then portalicon = value elseif key == 'active' then active = tonumber(value) elseif key == 'wrc' then wrc = value elseif key == 'themecolor' then themecolor = value elseif key == 'headerstyle' then headerstyle = value elseif key == 'forceflip' then ff = value elseif key == 'hidenav' then hidenav = value elseif key == 'hidesubnav' then hidesubnav = value elseif key == 'wrcadditional' then wrcadditional = value elseif string.find(key, 'tab') ~= nil and string.find(key, 'subtab') == nil then -- matches tab1, tab2, ... id = string.gsub(key, 'tab', '') id = tonumber(id) tabs[id] = value elseif string.find(key, 'icon') ~= nil then -- matches icon1, icon2, etc. id = string.gsub(key, 'icon', '') id = tonumber(id) tabsicons[id] = value elseif string.find(key, 'subtab') ~= nil then -- matches subtab1-1, etc. id = string.gsub(key, 'subtab', '') -- Subtab params take the form [prime tab]-[sub tab] id = mw.text.split(id, '-') primetab = tonumber(id[1]) subtab = tonumber(id[2]) if subtabs[primetab] == nil then subtabs[primetab] = {} end subtabs[primetab][subtab] = value end end if ff == 'yes' or ff == 'true' or ff == '1' then ff = true end if hidenav == 'yes' or hidenav == 'true' or hidenav == '1' then hidenav = true end if hidesubnav == 'yes' or hidesubnav == 'true' or hidesubnav == '1' then hidesubnav = true end -- Constructing header -- Relevant variables: portalname, wrc, themecolor, headerstyle -- The text color in the header is automatically chosen based on the best contrast -- https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color headertextcolor = '#fff' rgb = string.gsub(themecolor, '#', '') rgb = mw.text.split(rgb, '') if #rgb == 6 then r = rgb[1] .. rgb[2] g = rgb[3] .. rgb[4] b = rgb[5] .. rgb[6] elseif #rgb == 3 then r = rgb[1] .. rgb[1] g = rgb[2] .. rgb[2] b = rgb[3] .. rgb[3] end r = converttolinearrgb(r) g = converttolinearrgb(g) b = converttolinearrgb(b) luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b if luminance > 0.179 then headertextcolor = '#000' end -- Applying customizations to headerstyle if headerstyle ~= '' then headerstyle = ' ' .. headerstyle end headerstyle = 'font-size:1.6875em; border-radius:2px; font-weight:bold;' .. 'background:' .. themecolor .. '; color:' .. headertextcolor .. '; padding:0.25em;'.. headerstyle if ff == true then headerstyle = headerstyle .. 'text-align:' .. get_directionality('left', ff) .. ';' end header = '<div style="' .. headerstyle .. '">' if ff ~= true or (ff == true and is_rtl[lang] == nil) then header = header .. get_portalicon(portalicon, ff) .. portalname .. '</div>' else header = header .. portalname .. get_portalicon(portalicon, ff) .. '</div>' end if wrc == '1' or wrc == 1 or wrc == 'true' or wrc == true or wrc == 'yes' then badgeargs = {} if ff == true then badgeargs['forceflip'] = ff end if wrcadditional ~= nil then badgeargs['additional'] = wrcadditional end header = frame:expandTemplate{ title = 'Wikimedia Resource Center badge', args = badgeargs } .. '\n\n' .. header end -- Constructing the rest -- Relevant variables: themecolor tabs tabsicons active subtabs body = '' if hidenav ~= true then body = body .. '<div style="font-size:1.125em; margin-bottom:1.125em;' -- UNCLOSED TAG if ff == true then body = body .. ' text-align:' .. get_directionality('left', ff) .. ';' end body = body .. '">' for index, pagelink in ipairs(tabs) do -- Open TOC entry container containerstyle = 'display:inline-block; position:relative; vertical-align:top;' if ff == true then containerstyle = containerstyle .. ' float:' .. get_directionality('left', ff) .. ';' end body = body .. '<div style="' .. containerstyle .. '">' -- Create the tab itself entrystyle = 'display:inline-block; margin:1em; padding-bottom:0.5em; font-weight:bold;' if index == active then if subtabs[index] == nil or hidesubnav == true then entrystyle = entrystyle .. ' border-bottom:0.3em solid ' .. themecolor .. ';' else entrystyle = entrystyle .. ' margin-bottom:0;' end else entrystyle = entrystyle .. ' border-bottom:0.3em solid #c8ccd1;' end icon = '' if tabsicons[index] ~= nil then if ff == true then icon = '<span style="margin-' .. get_directionality('right', ff) .. ':0.75em;">' else icon = '<span style="margin-right:0.75em;">' end icon = icon .. tabsicons[index] .. '</span>' end body = body .. '<span style="' .. entrystyle .. '">' .. icon .. pagelink .. '</span>' -- If the tab is active, show the subnav if there is any if index == active and subtabs[index] ~= nil and hidesubnav ~= true then body = body .. '<div style="font-size:95%; margin-left:1em; margin-right:1em; padding-top:1.125em; padding-bottom:1.125em; border-top:0.35em solid ' .. themecolor .. '; border-bottom:0.35em solid' .. themecolor .. ';">' for subindex, subpagelink in ipairs(subtabs[index]) do body = body .. subpagelink if subindex ~= #subtabs[index] then body = body .. '<br />' end end body = body .. '</div>' end -- Close TOC entry container body = body .. '</div>' end body = body .. '</div>' end return '<div>' .. header .. body .. '</div><div style="clear:both;"></div>' end return p 87x25b23jo6d82u74e2ql2oiq1sd46w มอดูล:Portal navigation/doc 828 11 26 2025-10-14T13:46:59Z Wutkh 9 สร้างหน้าด้วย "<!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --> == Usage == This module has one method, '''render''': <code><nowiki>{{#invoke:Portal navigation|render| ... }}</nowiki></code>. For more information, see [[Template:Portal navigation/doc]]. <includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|| <!-- Categories below this line, please; interwikis at Wikidata --> }}</includeo..." 26 wikitext text/x-wiki <!-- Please place categories where indicated at the bottom of this page and interwikis at Wikidata (see [[Wikipedia:Wikidata]]) --> == Usage == This module has one method, '''render''': <code><nowiki>{{#invoke:Portal navigation|render| ... }}</nowiki></code>. For more information, see [[Template:Portal navigation/doc]]. <includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|| <!-- Categories below this line, please; interwikis at Wikidata --> }}</includeonly> mn29kbptnr64ec3aqlpnq5y5xyoaqps แม่แบบ:Portal navigation 10 12 27 2025-10-14T13:47:25Z Wutkh 9 สร้างหน้าด้วย "{{#invoke:Portal navigation|render}}<noinclude> {{Documentation}} </noinclude>" 27 wikitext text/x-wiki {{#invoke:Portal navigation|render}}<noinclude> {{Documentation}} </noinclude> migvhqm18sh7wqcmrdm4p62edciezd4 มอดูล:Is rtl 828 13 28 2025-10-14T13:49:07Z Wutkh 9 สร้างหน้าด้วย "return { -- If a language is RTL, include its language code here and set it to true ar = true, arc = true, arz = true, azb = true, bcc = true, ckb = true, bqi = true, dv = true, fa = true, ['fa-af'] = true, glk = true, ha = true, he = true, ['kk-arab'] = true, ['kk-cn'] = true, ks = true, ['ku-arab'] = true, mzn = true, pnb = true, prd = true, ps = true, sd = true, ug = true, ur = true, ydd = true, yi = true, }" 28 Scribunto text/plain return { -- If a language is RTL, include its language code here and set it to true ar = true, arc = true, arz = true, azb = true, bcc = true, ckb = true, bqi = true, dv = true, fa = true, ['fa-af'] = true, glk = true, ha = true, he = true, ['kk-arab'] = true, ['kk-cn'] = true, ks = true, ['ku-arab'] = true, mzn = true, pnb = true, prd = true, ps = true, sd = true, ug = true, ur = true, ydd = true, yi = true, } k6343d5i7j78jfub9nn7g6fxyrrdsq2 วิกิมีเดียประเทศไทย:เส้นเวลา 4 14 110 61 2025-10-17T15:54:20Z Wutkh 9 /* พ.ศ. 2554 */ 110 wikitext text/x-wiki {{Header|active=2}} == ก่อน พ.ศ. 2554 == * '''[http://web.archive.org/web/*/www.wikithaiforum.com วิกิไทยฟอรั่ม]'''เป็น[[:w:en:Internet forum|กระดานข้อความออนไลน์]]สำหรับผู้ที่มีความสนใจในวิกิตั้งแต่ พ.ศ. 2551–2554 โดยมากเป็นอาสาสมัครบนวิกิพีเดียและไร้สารานุกรมภาษาไทย โดยที่มิได้มีความเชื่อมโยงกับมูลนิธิวิกิมีเดีย (WMF) หรือมีความคิดริเริ่มที่จะจัดตั้งองค์กรแต่อย่างใด โดยมากใช้เป็นพื้นที่แลกเปลี่ยนเรียนรู้ทางเทคนิคและการสนทนาเรื่องสัพเพเหระ (ซึ่งอาจนอกประเด็น) บนวิกิพีเดียภาษาไทยและโครงการพี่น้องต่าง ๆ == พ.ศ. 2554 == * ในเดือนสิงหาคม มีวิกิมีเดียชาวไทยท่านหนึ่งเข้าร่วมงาน[[:w:Wikimania 2011|วิกิเมเนีย 2011 ในเมืองไฮฟา]] โดยได้แนวคิดการจัดตั้งกลุ่มอาสาสมัครขึ้นจากการเข้าร่วมงานดังกล่าว และยังมีการระดมความคิดในการจัดกิจกรรมในที่ตั้งและออนไลน์ (ดูที่ [[w:th:วิกิพีเดีย:สภากาแฟ/อภิปราย/Wikimania11|วิกิพีเดีย:ศาลาชุมชน/อภิปราย/Wikimania11]]) เช่น ** สร้างรายการรับอีเมลของวิกิมีเดียประเทศไทย ** แต่งตั้งผู้ดูแลระบบเพื่อทดแทนผู้ที่ไม่มีความเคลื่อนไหวและปรับปรุงโครงการอื่นนอกเหนือวิกิพีเดีย ** [[:w:th:วิกิพีเดีย:การเลือกตั้งคณะอนุญาโตตุลาการ_ธันวาคม_2554|เลือกตั้งคณะอนุญาโตตุลาการชุดแรก]]บนวิกิพีเดียภาษาไทย ** มีความพยายามที่จะจัดตั้งโครงการ[[meta:Wikimedians_in_Thailand/Wikiclubs_in_schools/th|ชมรมวิกิในสถานศึกษา]] ซึ่งได้รับการสนับสนุนของที่ระลึกจาก WMF เพื่อการดังกล่าว แต่ได้เกิด[[w:th:อุทกภัยในประเทศไทย พ.ศ. 2554|มหาอุทกภัยในประเทศไทย]]ทำให้โครงการถูกเลื่อนและล้มเลิกไปในเวลาต่อมา == 2555 == * 2012-01 Designed and received approval for Wikimedia Thailand logo. [[meta:Wikimedians in Thailand/Logo|Wikimedians in Thailand/Logo]] * 2012-07 After recovering from the flood, there was a meetup in Bangkok to revitalize the movement. ([[meta:Wikimedians in Thailand/July 2012 meetup|Wikimedians in Thailand/July 2012 meetup]]) * 2012-11 [[meta:Wikimedians in Thailand/mailing list|WMTH mailing list]] has gone public and opened for new subscriptions. == 2556 == * 2013-03 standardized [[meta:Wikimedians in Thailand/Wikimedia project names in Thai|Thai names for Wikimedia projects]] * Since 2013-03, we have stated [[:wikivoyage:th:|Thai Wikivoyage on incubator]]. * 2013-03 We had a discussion with WMF's legal team on an undisclosed matter. * 2013-05 A Thai Wikimedian went to Hackathon 2013 in Amsterdam. We quickly picked up on Wiki Loves Monuments (WLM) project. ([[w:th:วิกิพีเดีย:ศาลาชุมชน/อภิปราย/Amsterdam Hackathon 2013]]) * WLM 2013 in Thailand is our first successful public activity. We won an international prize and secured limited support from two local partners as well as a mini-grant from the international team. ([[:commons:Commons:Wiki_Loves_Monuments_2013_in_Thailand]]) We contacted many organizations and individuals but it was difficult to get a sponsorship as we are not incorporated and not recognized by the WMF. * Since 2013-07, we have been working with the visual editor team (Patrick Earley) to report bugs and launch its beta version on Thai Wikipedia. * 2013-12-04 We had the first visit by an WMF employee (Carolynne Schloeder). We launched Wikipedia zero together. ** PR in Thai “ทำดีเพื่อพ่อ” ตามโครงการ ‘100,000 ชั่วโมง ร่วมกันทำดี’: [http://www.dtac.co.th/pressroom/news/DoGoodfortheKing.html] [http://www.mobileasia.net/?p=2412] * 2013-12-20 We discussed further collaboration with the mobile operator. ([[:File:WM-TH_dtac_meeting_2013-12-20.JPG]]) * 2013-12 Another batch of Wikimedia Merchandise was sent to us for our activities in Thailand.([[:File:Wikimedia_Merchandise_sent_to_WMTH_Dec_2013.jpg]]) == 2557 == * WMF recognition ** 2014-02-12 An application for "Wikimedians in Thailand" user group recognition was submitted to the [[meta:Affiliations_Committee|AffCom]]. ** 2014-04-28 "Wikimedians in Thailand User Group is recognized as a Wikimedia User Group for a one-year renewable period that becomes effective when the [[meta:Wikimedia_User_Group_Agreement|Wikimedia User Group agreement]] is signed." See [[meta:Affiliations_Committee/Resolutions/Wikimedians_in_Thailand_-_April_2014]]. ** 2014-07-11 received the final agreement back from WMF. (Effective date 14 June 2014) * We are in touch with WMF mobile programs and a mobile operator (dtac). ([[meta:Wikimedians in Thailand/The 2014 dtac Project|Full report]], [[:commons:Category:DTAC_Collaboration_With_WMTH|Commons photos]], [[:w:th:วิกิพีเดีย:ศาลาชุมชน/อภิปราย/โครงการแปลบทความวิกิพีเดียโดย_dtac|discussions on Thai Wikipedia]], and [[:w:th:วิกิพีเดีย:ศาลาชุมชน/อภิปราย/โครงการแปลบทความวิกิพีเดียโดย dtac/ตารางสรุป|A detailed list of users and articles on Thai Wikipedia]]) ** Online meeting with Indrid Flores (WMF employee) on the 15th of Jan. ** Meeting/workshop with the mobile operator on the 10th of Feb (meeting), the 10th of March (workshop) and 19th of March (workshop). Three long-term Wikipedians were physically present and few other online volunteers were helping with admin requests/tool development e.g. Visual Editor and specialized tools at WMF labs. ** The [[:w:th:ราชาธิปไตยของสหราชอาณาจักร|first article]] from this collaboration was shown on the first page of Thai Wikipedia under DYK section on 18th of March. ** The mobile operator officially launched its 2014 Wikipedia contribution program in April. *** PR in English: [http://www.telenor.com/media/articles/2014/dtac-ignites-mass-translation-efforts-for-thai-internet/ See telenor/dtac press release dated 11th of April.] *** PR in Thai: [http://www.dailynews.co.th/Content/IT/233072/%E0%B8%94%E0%B8%B5%E0%B9%81%E0%B8%97%E0%B8%84%E0%B9%80%E0%B8%9B%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B8%A7%E0%B8%81%E0%B8%B4%E0%B8%88%E0%B8%81%E0%B8%A3%E0%B8%A3%E0%B8%A1+%E2%80%9C%E0%B9%80%E0%B8%9E%E0%B8%B4%E0%B9%88%E0%B8%A1%E0%B8%9E%E0%B8%B9%E0%B8%99%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%AB%E0%B9%89%E0%B8%AA%E0%B8%B1%E0%B8%87%E0%B8%84%E0%B8%A1%E0%B9%84%E0%B8%97%E0%B8%A2%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4%E0%B8%9E%E0%B8%B5%E0%B9%80%E0%B8%94%E0%B8%B5%E0%B8%A2%E2%80%9D] [http://www.mxphone.net/250414-dtac-wikipedia/] ** More workshops were held on 10th, 23rd and 30th of April. Our volunteers (three physical+some online support) were in touch with the mobile operator and helped coach the workshop. The last workshop was held at Srinakarin Road on 9th May. * 2014-08 We have a representative attending [[:w:Wikimania 2014|Wikimania 2014 in London]]. ([[meta:Grants:TPS/Taweetham/Wikimania/2014/Report|Report]]) * We have successfully organised [[:commons:Commons:Wiki_Loves_Monuments_2014_in_Thailand|Wiki Loves Monument 2014 in Thailand]]. This is the second time in Thailand. We have increased number of photo submissions and expanded our base of local partners. ([[:commons:Commons:Wiki Loves Monuments 2014 in Thailand|competition page]], [[meta:Grants:PEG/UG TH/WLM 2014|PEG proposal]], [[meta:Grants:PEG/UG TH/WLM 2014/Report|PEG report]]) * 2014-10-20 We have a visit form WMF education program manager (Anna Koval) which led to a pilot Wikipedia Education Program at Mahidol University. ([[:w:Education_Program:Mahidol_University_International_College/ICCH444_(2014-15_T1)|Wikipedia course page]], [[outreach:Education/Countries/Thailand|outreach page]]) == 2558 == * '''Wiki Loves X in Thailand''' ** 2015-01-02 [[meta:Grants:PEG/UG TH/Wiki Loves X in Thailand 2015|PEG grant application]] submitted. ** 2015-02-17 [[meta:Grants:PEG/UG TH/Wiki Loves X in Thailand 2015|PEG grant application]] approved. ** 2015-02-18 received grant agreement. ** 2015-02-26 returned grant agreement. ** 2015-03-06 dtac confirmed its sponsorship for the project. ** 2015-03-06 Siam Society confirmed its sponsorship for the project. ** 2015-03-09 [[meta:Grants:PEG/UG TH/Wiki Loves X in Thailand 2015|PEG grant application]] fund arrived. ** 2015-03-13 Meeting with BMN-MRT representatives to discuss collaboration on WLX projects ** 2015-03-14 Volunteer meeting at Mahidol University, Salaya to discuss general directions of WLX and 100K article project ** 2015-04-22 CCHT confirmed its sponsorship for the project. ** 2015-05-01 Launched [[:commons:Commons:Wiki_Loves_Earth_2015_in_Thailand|Wiki Loves Earth 2015 in Thailand]]. ** 2015-06-01 Launched [[:w:th:วิกิพีเดีย:โครงการ WLX ประกวดบทความท้องถิ่นประเทศไทย‎|Article contest (WLX)]]. ** 2015-07-01 Launched [[w:th:WP:TWA|the Thai version]] of [[:en:WP:TWA]] for article contest training. ** 2015-07-27 Pantip.com confirmed its sponsorship for the project. ** 2015 Jul-Aug Concluding the first WLE2015 in Thailand + The beginning of training program for WLX ** 2015-09-01 Launched [[:commons:Commons:Wiki_Loves_Monuments_2015_in_Thailand|Wiki Loves Monuments 2015 in Thailand]]. * '''Other programs''' ** 2015-01-26 [[:w:th:วิกิพีเดีย:โครงการวิกิแสนบทความกับวิกิพีเดียภาษาไทย|100K article project]] was [[meta:Grants:PEG/UG_TH/WLM_2014/Report|approved by WMF]] using remaining fund from WLM 2014. ** 2015-05 Launched [[:w:Education Program:Mahidol University International College/ICCH224 (T3/2014-2015)|new pilot education program at Mahidol University]]. ** 2015-09-09 Meeting at dtac to prepare for [[meta:Wikimedians in Thailand/2015 Smithsonian APA|Wikimedians in Thailand/2015 Smithsonian APA]] ** 2015-09-26 Edit-a-thon/Meet-up [[meta:Wikimedians in Thailand/2015 Smithsonian APA|Wikimedians in Thailand/2015 Smithsonian APA]] ** 2015 [[meta:Wikipedia Asian Month]] * '''Representations/Visits''' ** 2015-05 Wikimedia conference 2015 - We sent [[meta:Wikimedia_Conference_2015/Participants|a representative]] to the conference in Berlin. ** 2015-07 Wikimania 2015- We sent [[meta:Grants:TPS/Wikimania_scholars|a representative]] to the conference in Mexico City. (([[meta:Grants:TPS/Taweetham/Wikimania/2015/Report|Report]])) ** 2015-11-23 Free basics by Dtac (Wikipedia Zero)- We sent two representatives to a launch event of Free Basics program by Dtac. ;2015 Photo gallery <gallery> File:WikiAPA event in Bangkok 2015 8.JPG|Meet-up Wikimedians in Thailand/2015 Smithsonian APA 26 SEP File:WikiAPA event in Bangkok 2015 7.JPG|Meet-up Wikimedians in Thailand/2015 Smithsonian APA 26 SEP File:Free Basics by Facebook in Thailand with Dtac 2015.JPG|Launch event of Dtac's Free Basics including 23 NOV File: WLM2015TH Awards2.jpg|WLMTH2015 awards </gallery> == 2559 == * '''Wiki Loves X in Thailand''' ** 2016-04-27 [[meta:Grants:PEG/UG TH/WLX in Thailand 2016|2016 PEG grant application]] submitted. ** 2016-05-04 [[meta:Grants:PEG/UG TH/Wiki Loves X in Thailand 2015/Report|2015 PEG grant report]] submitted. ** 2016-05-12 [[meta:Grants talk:PEG/UG TH/Wiki Loves X in Thailand 2015/Report|2015 PEG grant report]] approved. ** 2016-05-18 [[meta:Grants:PEG/UG TH/WLX in Thailand 2016|2016 PEG grant application]] approved as requested. ** 2016-05-19 Pantip.com and Siam society confirmed their partnerships with us. ** 2016-05-20 WLX2016 grant agreement received. ** 2016-05-22 WLX2016 grant agreement signed and returned to WMF. ** 2016-05-27 WLX2016 fund transfer failed. ** 2016-06-01 WLE2016 in Thailand commenced. ** 2016-06-25 Second meet-up at Mahidol University ** 2016-06-29 WLX2016 received grant money of THB60,312.40 into the usergroup account. * '''Other programs''' ** 2016-01 New Year Thank you programme - Wikipedia T-shirts for admin and long-term contributors as a gesture of appreciation for their invaluable volunteer work. ** 2016-01-15 [[meta:Wikipedia 15/Events/Bangkok]] (Meetups) *** [[meta:Grants:IdeaLab/Wikimedians in Thailand 2016 Initiative]] ** 2016-01-30 Thai Wikipedia has reached 100,000 articles. The 100,000th article is [[:w:th:คริสต์ทศวรรษ 1940]] ** 2016-03-09 [[:en:Wikipedia:Meetup/Mahidol_University/1|Wikipedia:Meetup/Mahidol University/1]] (Meetups) * '''Representations/Visits''' ** 2016-04 [[:mw:Wikimedia Hackathon 2016|Wikimedia Hackathon 2016]] in Jerusalem [https://phabricator.wikimedia.org/T96826] (30 March - 3 April, 2016) - We applied for travel scholarship but did not get it. [https://lists.wikimedia.org/pipermail/wikimedia-th/Week-of-Mon-20160215/000116.html] ** 2016-04 [[meta:Wikimedia Conference 2016|Wikimedia conference 2016]] in Berlin (April 20-24, 2016) - We sent [[meta:Wikimedia Conference 2016/Participants' List|one representative]] to the conference in Berlin. ** 2016-06 [https://wikimania2016.wikimedia.org/wiki/Main_Page Wikimania 2016 in Esino Lario] (June 21-28, 2016) - We applied for travel scholarship and received one scholarship. [https://lists.wikimedia.org/pipermail/wikimedia-th/Week-of-Mon-20160229/000119.html] ([[meta:Grants:TPS/B20180/Wikimania/2016/Report|Report]]) ;2016 Photo gallery <gallery> File:Wikipedia 15 Thaniland.gif|Wikipedia 15 Thailand logo File:Wikimedia 15 Thailand at MUIC.jpg|Celebrating the 15th aniversary of the English Wikipedia File:Postcards from Wikimedians in Thailand.JPG|Postcards from Wikimedians in Thailand File:Wikipedia session at Mahidol University 2.JPG|Wikipedia session at Mahidol University, Salaya File:Wikimedia_Conference_2016_–_Group_photo.jpg|Wikimedia Conference 2016, Berlin, Germany </gallery> == 2560 == * '''Wiki Loves X in Thailand''' ** 2017-04-01 [[meta:Grants:PEG/UG_TH/WLX_in_Thailand_2016/Report|PEG Grant report]] submitted. ** 2017-04-01 [[meta:Grants:Project/Rapid/WLX in Thailand 2017|Individual rapid grant application]] submitted. ** 2017-04-07 [[meta:Grants:PEG/UG_TH/WLX_in_Thailand_2016/Report|PEG Grant report]] approved. ** 2017-04-07 [[meta:Grants:Project/Rapid/WLX in Thailand 2017|Individual rapid grant application]] approved. * '''Representations/Visits''' ** 2017-03/2017-04 [[meta:Wikimedia Conference 2017]], Berlin, Germany (March 31 to April 2 2017) - We sent one representative to this conference. Another person was invited for the strategy track. This is the first year that we have two representatives in WMCON. ** 2017-05 [[:mw:Wikimedia_Hackathon_2017|Vienna Hackathon]] https://phabricator.wikimedia.org/T127050 (May 19-21) - We applied for a scholarship but did not receive it. ** 2017-08 [[meta:Wikimania 2017]] Montréal, Canada (August 9-13) - We applied for WMF scholarships but did not receive it. ** 2017-10 [[:d:Wikidata:WikidataCon 2017|WikidataCon 2017]] Berlin, Germany (October 28–29) - We applied for a scholarship but did not receive it. ** 2017-11 [[meta:Wikimedia Diversity Conference 2017]] Stockholm, Sweden (November 3–5) - We sent one representative to this conference. * '''Strategy 2017''' ([[:w:th:วิกิพีเดีย:กลยุทธ์วิกิมีเดีย ค.ศ. 2017|on Thai Wikipedia]]) == 2561 == * 2018-09-26 [[w:th:วิกิพีเดีย:สภากาแฟ/อภิปราย/ร่วมลงนามเพื่อสนับสนุนการจัดตั้ง Wikimedia Thailand|ลงนามเพื่อสนับสนุนการจัดตั้ง Wikimedia Thailand]] * '''Wiki Loves X in Thailand''' ** [[meta:Grants:Project/Rapid/WLX and education projects in Thailand 2018]] * '''Other Projects''' ** 2018-04-01 Launched [[:w:th:วิกิพีเดีย:โครงการเมนเทอร์|Mentor Project]] ** 2018-05-01 Launched [[:w:th:วิกิพีเดีย:โครงการหนึ่งบทความอย่างน้อยหนึ่งรูป|One Article, One or More Images Project]] * '''Representations/Visits''' ** 2018-04 [[meta:Wikimedia Conference 2018]], Berlin, Germany (20–22 April 2018) - We sent two representatives to this conference, see the [[meta:Wikimedians in Thailand/Reports/WMCON18|report]] (in Thai). ** 2018-05 [[meta:ESEAP Conference 2018]], Bali, Indonesia (5–6 May 2018) - We sent four representatives to this conference. ** 2018-05 [[:mw:Wikimedia_Hackathon_2018|Barcelona Hackathon]], Barcelona, Spain (May 18–20 2018) ** 2018-07 [[meta:Wikimania 2018]], Cape Town, South Africa (July 18–22 2018) - At least two community members have received full scholarship. ** 2018-11 [[meta:GLAMTLV2018/Welcome|GLAMWiki Conference 2018]], Tel Aviv, Israel (3–5 November 2018) == 2562 == * 2019-01-03 [[meta:Wikimedians in Thailand/Chapter Application|Wikimedia Thailand]]'s chapter application * 2019-03-08 [[meta:Wikimedians in Thailand/Activities/Wiki4Women2019|Wiki4Women 2019]] workshop and edit-a-thon at UNESCO Bangkok * 2019-03-29 [[meta:Wikimedia Summit 2019]] - We are sending one representative to this conference. * 2019-04-05 [[meta:Wikimedia+Education Conference 2019]] - One community member received full scholarship to attend. * 2019-06-01 [[C:commons:Wiki Loves Earth 2019 in Thailand|Wiki Loves Earth 2019 in Thailand]] * 2019-06-02 [[meta:Wikimania 2019]] - Two community members will attend Wikimania 2019. One has received full scholarship. Another is attending on behalf of Wikimania 2020 organising team * 2019-06-09 [[meta:Grants:Project/Rapid/WLX and education projects in Thailand 2018/Report|Grant report submitted]] * 2019-06-14 [[foundation:Recognition_of_Wikimedians_in_Thailand_User_Group_as_a_Wikimedia_Chapter|WMF recognised Wikimedians in Thailand as chapter]]. * 2019-06-29 [[meta:ESEAP Strategy Summit 2019]] takes place in Bangkok * 2019 Preparation for Wikimania 2020 in Bangkok == 2563 == * 2020 Preparation for Wikimania 2020 in Bangkok * 2020-03-12 Wikimania 2020 is postponed to an unspecified date in the future due to Coronavirus outbreak. * 2020-06-01 [[commons:Commons:Wiki Loves Earth 2020 in Thailand|Wiki Loves Earth 2020 in Thailand]] * 2020-09-01 [[commons:Commons:Wiki Loves Monuments 2020 in Thailand|Wiki Loves Monuments 2020 in Thailand]] * 2020-09-12 Wikipedia Education (ICCH103 2020–21 T1) * 2020-10-24 – The community's Discord channel is launched. == 2564 == * 2021-02-21 Wikipedia Education (ICCH454 2020–21 T2) * 2021-11-01 – [[w:th:วิกิพีเดีย:Wikipedia Asian Month 2021|Wikipedia Asian Month 2021]] * 2021-11-15 [[:commons:Commons:Wiki_Science_Competition_2021_in_Thailand|Wiki Science Competition]] * 2021-12-10 [[meta:Grants:Programs/Wikimedia_Community_Fund/Wikimedia_Thailand_2022|2022 Grant draft]] == 2565 == * 2022-01-18 [[meta:Grants_talk:Programs/Wikimedia_Community_Fund/Wikimedia_Thailand_2022|2022 Grant funded]] * [[meta:Grants:Simple/Applications/Wikimedia_Thailand/2020#Final_report|2020-21 Grant report's Final report]] * 2022-03 [[meta:Wikimedia Thailand/WikiGap 2022|WikiGap 2022]] * 2022-04 [[meta:Wikimedia Thailand/WikiForHumanRights|WikiForHumanRights 2022]] * 2022-10 External review of WLX eight-year activities. A [[:File:2015-2022 WLX review in Thailand.pdf|report]] is available in Thai. * 2022-11 – [[w:th:วิกิพีเดีย:Wikipedia Asian Month 2022|Wikipedia Asian Month 2022]] * 2022-12-11 – [[meta:Wikimedia Thailand/Wiki Loves Food|Wiki Loves Food]] == 2566 == * 2023-02-(25-26) – [[meta:Wikimedia Thailand/Digital Security|Digital Security workshop]] * 2023-03-11 – [[meta:Wikimedia Thailand/WikiCamp 2023|1st WikiCamp 2023]] * 2023-08-22 – [[meta:Wikimedia Thailand/BKKCamp/2|2nd WikiCamp 2023]] * 2023-08-26 – [[meta:Meetup/Bangkok/3|3rd Bangkok Meetup]] * 2023-08-30 – [[meta:Wikimedia Thailand/EasternCamp/1|EasternCamp 2023]] * 2023-09-01 – [[commons:Commons:Wiki Loves Monuments 2023 in Thailand|Wiki Loves Monuments 2023 in Thailand]] * 2023-10-08 – [[meta:Wikimedia Thailand/Bangkok Photowalk 1|Bangkok Photowalk 1]] * 2023-10-19 – [[meta:Wikimedia Thailand/Wikivoyage 2023|Wikivoyage 2023]] and [[meta:Wikimedia Thailand/GLAM–Museum 2023|GLAM–Museum 2023]] * 2023-11-01 – [[w:th:วิกิพีเดีย:Wikipedia Asian Month 2023|Wikipedia Asian Month 2023]] * 2023-11-04 – [[meta:Wikimedia Thailand/Bangkok Photowalk 2|Bangkok Photowalk 2]] * 2023-12-11 – [[meta:Wikimedia Thailand/WikiFoodtival|WikiFoodtival (Wiki Loves Food 2)]] ;2023 Photo gallery <gallery> File:WikiCamp 2023 Bangkok en.png|Poster of the First BKK WikiCamp File:WikiCamp BKKCAMP 2-2.jpg|2nd BKK WikiCamp Group Photo File:3rd Meetup Bangkok 26.08.2023 (3).jpg|Meetup at Siam Society File:Bangkok Photowalk 1, Bangkok 08.10.2023 (11).jpg|1st Photowalk at Siriraj Museum </gallery> == 2567 == * 2024-01-24 – [[meta:Wikimedia Thailand/GLAM–Gallery 2024|GLAM–Gallery 2024]] * 2024-02-10 – [[meta:Wikimedia Thailand/Bangkok Photowalk 3|Photowalk 3 วิทยาศาสตร์@ท้องฟ้าจำลอง]] * 2024-03-08 – [[meta:Wikimedia Thailand/WikiGap 2024|WikiGap 2024]] * 2024-03-16 – [[meta:Wikimedia Thailand/BKKCamp/3|Wikicamp BKKCamp 3]] * 2024-04-15 – [[meta:Wikimedia Thailand/GLAM–Archive 2024|GLAM–Archive 2024]] * 2024-06-01 – [[commons:Commons:Wiki Loves Earth 2024 in Thailand|Wiki Loves Earth 2024 in Thailand]] * 2024-06-01 – [[meta:Wikimedia Thailand/WikiDiversity 2024|WikiDiversity 2024]] * 2024-07-17 – [[meta:Wikimedia Thailand/GLAM–Library 2024|GLAM–Library 2024]] * 2024-08-01 – [[w:th:วิกิพีเดีย:รู้ไหมว่า/กิจกรรมสนับสนุน พ.ศ. 2567|Did You Know Article Promotion Campaign 2024]] * 2024-10-01 – [[commons:Commons:Wiki Loves Monuments 2024 in Thailand|Wiki Loves Monuments 2024 in Thailand]] * 2024-11-01 – [[w:th:วิกิพีเดีย:Wikipedia Asian Month 2024|Wikipedia Asian Month 2024]] * 2024-11-26 – [[meta:Wikimedia Thailand/BKKCamp/4|Wikicamp BKKCamp 4]] * 2024-12-14 – [[meta:Wikimedia Thailand/Bangkok Photowalk 4|Photowalk 4 Art@ปทุมวัน]] <gallery> File:WikiCamp BKK3 group photo 2024.jpg|3rd BKK WikiCamp Group Photo File:WikiCamp4 at Chulalongkorn University 2024 2.jpg|4th BKK WikiCamp Group Photo File:Photowalk_4_Art@ปทุมวัน_One_Bangkok_Group_Photo_(14.12.2024).jpg|Photowalk 4 Group Photo </gallery> == 2568 และต่อไป == * 2025-01-01 – [[meta:Wikimedia Thailand/GLAM–Gallery 2025|GLAM–Gallery 2025]] * 2025-01-25 – [[meta:Wikimedia Thailand/WikiCamp Chiang Mai 2025|WikiCamp Chiang Mai 2025]] * 2025-03-08 – [[meta:Wikimedia Thailand/WikiGap 2025|WikiGap 2025]] * 2025-04-01 – [[w:th:วิกิพีเดีย:บทความแนะนำ/กิจกรรมสนับสนุน พ.ศ. 2568|Recommended Article Promotional Event]] * 2025-04-01 – [[meta:Wikimedia Thailand/GLAM–Library 2025|GLAM–Library 2025]] * 2025-04-28 – [[meta:Wikimedia Thailand/BKKCamp/5|Wikicamp BKKCamp 5]] * 2025-06-01 – [[meta:Wikimedia Thailand/WikiDiversity 2025|WikiDiversity 2025]] * 2025-07-01 – [[meta:Wikimedia Thailand/GLAM–Archive 2025|GLAM–Archive 2025]] * 2025-07-01 – [[commons:Commons:Wiki Loves Earth 2025 in Thailand|Wiki Loves Earth 2025 in Thailand]] * 2025-08 – [[meta:Wikimania 2025|Wikimania 2025]] ([[meta:Wikimedia_Thailand/Wikimania_2025_scholarships#รายงานของผู้เข้าร่วม|Report from delegates]]) * 2025-09-06 – [[meta:Meetup/Mahidol University/24|Meetup/Mahidol University/24]] * 2025-10-01 – [[meta:Wikimedia Thailand/GLAM–Museum 2025|GLAM–Museum 2025]] * 2025-10-01 – [[commons:Commons:Wiki Loves Monuments 2025 in Thailand|Wiki Loves Monuments 2025 in Thailand]] <gallery> File:WikiCamp Chiang Mai 2025 01.jpg|WikiCamp Chiang Mai Group Photo File:Bkkcamp 5@KMUTT 15.jpg|5th BKK WikiCamp at King Mongkut's University of Technology Thonburi File:Thai Wikimedians delegates in Kenya 2025.jpg|Thai delegates in Wikimania 2025 at Nairobi, Kenya </gallery> bswxi15u1lr1soki18ndgeffb1yhi07 วิกิมีเดียประเทศไทย:ข้อปฏิเสธความรับผิดชอบทั่วไป 4 15 63 58 2025-10-17T08:56:07Z Wutkh 9 63 wikitext text/x-wiki __NOTOC__ วิกิพีเดียและโครงการพี่น้องอื่น ๆ ในกลุ่มขับเคลื่อนวิกิมีเดียประกอบด้วยเนื้อหาเสรีที่เกิดจากการร่วมเขียนออนไลน์ นั่นคือ การรวมตัวโดยใจสมัครของปัจเจกบุคคลและกลุ่มทำงานเพื่อพัฒนาทรัพยากรความรู้ของมนุษย์ที่เป็นของส่วนรวม โครงสร้างของวิกิมีเดียเปิดให้ทุกคนที่เชื่อมต่ออินเทอร์เน็ตเปลี่ยนแปลงเนื้อหาได้ โปรดทราบว่าไม่จำเป็นที่เนื้อหาใด ๆ ในวิกิมีเดียนี้จะได้รับการสอบทานจากนักวิชาชีพที่มีความเชี่ยวชาญพอจะนำเสนอสารสนเทศที่ครบถ้วน แม่นยำ หรือเชื่อถือได้แก่คุณ ที่กล่าวมาข้างต้น มิใช่ว่าคุณไม่อาจพบสารสนเทศอันทรงคุณค่าและแม่นยำได้จากวิกิมีเดีย อย่างไรก็ดี '''วิกิมีเดียประเทศไทยไม่อาจรับประกันความถูกต้องแม่นยำของสารสนเทศในเว็บไซต์เหล่านี้ได้''' เพราะเนื้อหาอาจเพิ่งถูกแก้ไข เปลี่ยนแปลง หรือทำลาย โดยบุคคลผู้มีความเห็นไม่สอดคล้องกับสถานะองค์ความรู้ปัจจุบันในสาขาที่เกี่ยวข้อง หมายเหตุว่า สารานุกรมอื่น แหล่งข้อมูล และงานอ้างอิงส่วนใหญ่ยังมีข้อปฏิเสธความรับผิดชอบที่คล้ายกัน jysdu7x2pjqpxt3sr6dt545k4q654o8 วิกิมีเดียประเทศไทย:โครงสร้าง 4 16 114 113 2025-10-18T14:55:50Z Wutkh 9 /* กรรมการที่เคยเป็นผู้ขอรับทุนสนับสนุนจากวิกิมีเดียในนามวิกิมีเดียประเทศไทยและกรรมการอื่น */ 114 wikitext text/x-wiki {{Header|active=2}} วิกิมีเดียประเทศไทยขับเคลื่อนด้วยกลุ่มอาสาสมัครในประเทศไทยเพื่อสนับสนุนภารกิจของกลุ่มขับเคลื่อนวิกิมีเดีย แม้ว่าจะได้รับเงินสนับสนุนรายปีจากมูลนิธิวิกิมีเดีย แต่ผู้ปฏิบัติงานในวิกิมีเดียประเทศไทยทุกท่านมิได้รับเงินเดือนจากมูลนิธิวิกิมีเดียในฐานะพนักงานประจำและปฏิบัติหน้าที่ในลักษณะอาสาสมัคร == คณะทำงาน == ณ เดือนกันยายน พ.ศ. 2568 มีกรรมการทั้งหมด 4 ท่าน {| class="wikitable" |+ คณะกรรมการวิกิมีเดียประเทศไทย (ณ เดือนกันยายน พ.ศ. 2568) |- ! ชื่อผู้ใช้ ! ตำแหน่งในคณะกรรมการ ! ตำแหน่งอื่นในกลุ่มขับเคลื่อนวิกิมีเดีย |- ! [[w:th:ผู้ใช้:Manop|ผู้ใช้:Manop]] | ประธาน | อดีตผู้ดูแลระบบ[[w:th:วิกิพีเดียภาษาไทย|วิกิพีเดียภาษาไทย]] |- ! [[w:th:ผู้ใช้:KhanitthaAnnie|ผู้ใช้:KhanitthaAnnie]] | กรรมการ | |- ! [[ผู้ใช้:Tvcccp]] | กรรมการ | ผู้ดูแลระบบ[[q:th:วิกิคำคม|วิกิคำคม]]ภาษาไทยชั่วคราว 3 วาระ |- ! [[meta:User:Azoma|ผู้ใช้:Azoma]] | กรรมการ | อดีตผู้ดูแลระบบวิกิพีเดียภาษาไทย |} == กรรมการที่เคยเป็นผู้ขอรับทุนสนับสนุนจากวิกิมีเดียในนามวิกิมีเดียประเทศไทยและกรรมการอื่น == {{กำลังปรับปรุง}} นอกจากนี้ ยังมีกรรมการท่านอื่นที่เคยเป็นผู้ขอรับทุนสนับสนุนจากมูลนิธิวิกิมีเดียในนามวิกิมีเดียประเทศไทยและกรรมการอื่นที่มิได้มีชื่อเป็นผู้ขอรับทุนฯ แต่มีคุณูปการต่อวิกิมีเดียประเทศไทย ดังนี้ {| class="wikitable" |+ กรรมการที่เคยเป็นผู้ขอรับทุนสนับสนุนจากวิกิมีเดียในนามวิกิมีเดียประเทศไทยและกรรมการอื่น (ณ เดือนกันยายน พ.ศ. 2568) |- ! ชื่อผู้ใช้ ! ตำแหน่งในคณะกรรมการ ! ตำแหน่งอื่นในกลุ่มขับเคลื่อนวิกิมีเดีย |- ! [[ผู้ใช้:Taweetham]] | อดีตประธานกรรมการ (พ.ศ. 2557 – 2560) | กรรมการกระจายทรัพยากรระดับโลกของวิกิมีเดีย<br/>อดีตกรรมการทุนภูมิภาคเอเชียตะวันออก เอเชียตะวันออกเฉียงใต้ และแปซิฟิกของวิกิมีเดีย<br/>อดีตผู้ดูแลระบบวิกิพีเดียภาษาไทย |- ! [[meta:User:Athikhun.suw|ผู้ใช้:Athikhun.suw]] | อดีตประธานกรรมการ (พ.ศ. 2560 – 2568) | อดีต [[outreach:Education/Ambassadors|Wikipedia Campus Ambassador]] |- ! [[meta:User:2ndoct|ผู้ใช้:2ndoct]] | กรรมการ | |- ! Piyathida T. | กรรมการ<br/>Campaign coordinator | |- ! [[meta:User:Karto01|ผู้ใช้:Karto01]] | กรรมการ<br/>Competition coordinator | |- ! [[meta:User:Tanapatjms|ผู้ใช้:Tanapatjms]] | กรรมการ | |- ! [[ผู้ใช้:B20180]] | กรรมการ | ผู้ดูแลระบบวิกิพีเดียและโครงการพี่น้องในภาษาไทย<br/>ผู้รับรางวัล [[meta:Wikimedia Foundation/Communications/WikiCelebrate/B20180|WikiCelebrate]] |- ! [[meta:User:OraMAAG|ผู้ใช้:OraMAAG]] | กรรมการ | |} ta5wd6vf0hf2jkcnj0gc06ss3w5dmyv แม่แบบ:กำลังปรับปรุง 10 17 68 2025-10-17T08:59:50Z Wutkh 9 สร้างหน้าด้วย "{{mbox | type = notice | image = {{#if:{{{altimage|}}}|{{{altimage|}}}|[[File:Ambox warning blue construction.svg|50x40px|link=|หน้านี้กำลังอยู่ระหว่างการปรับปรุงขยายเนื้อหาเพื่มเติม]]}} | text = หน้านี้{{#if:{{{nosection|}}}||หรือส่วนนี้}}'''อยู่ระหว่างการปรับปรุ..." 68 wikitext text/x-wiki {{mbox | type = notice | image = {{#if:{{{altimage|}}}|{{{altimage|}}}|[[File:Ambox warning blue construction.svg|50x40px|link=|หน้านี้กำลังอยู่ระหว่างการปรับปรุงขยายเนื้อหาเพื่มเติม]]}} | text = หน้านี้{{#if:{{{nosection|}}}||หรือส่วนนี้}}'''อยู่ระหว่างการปรับปรุงขยายเนื้อหาเพื่มเติมอย่างต่อเนื่อง'''{{#if:{{{notready|}}} | แต่ยังไม่พร้อมสำหรับการใช้งาน }} ท่านสามารถร่วมปรับปรุงได้เช่นเดียวกัน อย่างไรก็ดีหากหน้านี้ <span class="plainlinks">[{{SERVER}}{{localurl:{{NAMESPACE}}:{{PAGENAME}}|action=history}}</span> ไม่ได้รับการแก้ไขภายในช่วงนี้] กรุณานำป้ายนี้ออก<br /> {{small|{{last edited by}}}} }}{{#if:{{{comment|}}} |{{mbox | type = notice | image = none | text = '''บันทึก''': {{{comment}}} }} }}<includeonly>{{#ifeq:{{{nocat|}}}|true||{{{category|{{#switch:{{NAMESPACE}} |{{ns:2}} |{{ns:3}}=<!-- no category for user/talk pages--> |#default=[[หมวดหมู่:หน้าที่กำลังปรับปรุงอยู่]] }}}}} }} err5p20sapp2kqhpbmy9f7fd1oa6wk0 แม่แบบ:Mbox 10 18 89 69 2025-10-17T09:19:34Z Wutkh 9 ป้องกัน "[[แม่แบบ:Mbox]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 69 wikitext text/x-wiki {{#invoke:Message box|mbox}} sl4s23vzv7gf305o2mbhlujimgvrnqi มอดูล:Message box 828 19 90 70 2025-10-17T09:19:52Z Wutkh 9 ป้องกัน "[[มอดูล:Message box]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 70 Scribunto text/plain require('strict') local getArgs local yesno = require('Module:Yesno') local lang = mw.language.getContentLanguage() local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox else -- default to ombox obj.cfg = cfg.ombox end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace else obj.cfg = cfg.ombox -- other namespaces or invalid input end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[หมวดหมู่:%s|%s]]', cat, sort) else cat = string.format('[[หมวดหมู่:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end table.insert(self.classes, class) end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end if yesno(args.plainlinks) ~= false then self:addClass('plainlinks') end for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^([tT][eE][mM][pP][lL][aA][tT][eE]|แม่แบบ)[%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'แม่แบบ:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = (cfg.sectionDefault or 'หน้า') .. 'นี้' elseif type(args.sect) == 'string' then sect = args.sect .. 'นี้' end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, '') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText if self.isSmall then local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk) talkText = string.format('([[%s|อภิปราย]])', talkLink) else talkText = 'การอภิปรายที่อาจเกี่ยวข้องอาจพบได้ที่' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s[[%s#%s|หน้าอภิปรายของหน้านี้]]', talkText, talkTitle.prefixedText, talk ) end end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end -- set templatestyles self.base_templatestyles = cfg.templatestyles self.templatestyles = args.templatestyles end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'ตั้งแต่' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s%s%s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('หมวดหมู่:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.invalidTypeError then local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort) end if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'แม่แบบ <code>%s[[แม่แบบ:%s|%s]]%s</code> ถูก subst อย่างไม่ถูกต้อง', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end local frame = mw.getCurrentFrame() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.base_templatestyles }, }) -- Add support for a single custom templatestyles sheet. Undocumented as -- need should be limited and many templates using mbox are substed; we -- don't want to spread templatestyles sheets around to arbitrary places if self.templatestyles then root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.templatestyles }, }) end -- Create the box table. local boxTable = root:tag('table') boxTable:attr('id', self.id or nil) for i, class in ipairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('span') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :addClass('mbox-invalid-type') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) h5r0zq4bmcyrfj7m30daxf8jbhvjgek มอดูล:Yesno 828 20 91 71 2025-10-17T09:20:04Z Wutkh 9 ป้องกัน "[[มอดูล:Yesno]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 71 Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or val == 'ใช่' or val == 'จริง' or val == 'ถูก' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or val == 'ไม่' or val == 'ไม่ใช่' or val == 'เท็จ' or val == 'ผิด' or tonumber(val) == 0 then return false else return default end end inuxunk9sf5wtkait1yjf8m94ynrwyp มอดูล:Arguments 828 21 92 72 2025-10-17T09:25:08Z Wutkh 9 ป้องกัน "[[มอดูล:Arguments]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 72 Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 5qx9tzlul9ser30uxj9nbasjt92cevn มอดูล:Message box/configuration 828 22 93 73 2025-10-17T09:25:24Z Wutkh 9 ป้องกัน "[[มอดูล:Message box/configuration]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 73 Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[มอดูล:Message box]]. -- -------------------------------------------------------------------------------- return { ambox = { types = { speedy = { class = 'ambox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'ambox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'ambox-content', image = 'Ambox important.svg' }, style = { class = 'ambox-style', image = 'Edit-clear.svg' }, move = { class = 'ambox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ambox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ambox-notice', image = 'Information icon4.svg' } }, default = 'notice', allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'}, allowSmall = true, smallParam = 'left', smallClass = 'mbox-small-left', substCheck = true, classes = {'metadata', 'ambox'}, imageEmptyCell = true, imageCheckBlank = true, imageSmallSize = '20x20px', imageCellDiv = true, useCollapsibleTextFields = true, imageRightNone = true, sectionDefault = 'บทความ', allowMainspaceCategories = true, templateCategory = 'แม่แบบสารบทความ', templateCategoryRequireName = true, templateErrorCategory = 'Article message templates with missing parameters', templateErrorParamsToCheck = {'issue', 'fix', 'subst'}, removalNotice = '<small>[[วิธีใช้:การนำแม่แบบบำรุงรักษาออก|เรียนรู้ว่าจะนำสารแม่แบบนี้ออกได้อย่างไรและเมื่อไร]]</small>', templatestyles = 'มอดูล:Message box/ambox.css' }, cmbox = { types = { speedy = { class = 'cmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'cmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'cmbox-content', image = 'Ambox important.svg' }, style = { class = 'cmbox-style', image = 'Edit-clear.svg' }, move = { class = 'cmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'cmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'cmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'cmbox'}, imageEmptyCell = true, templatestyles = 'มอดูล:Message box/cmbox.css' }, fmbox = { types = { warning = { class = 'fmbox-warning', image = 'Ambox warning pn.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'Information icon4.svg' }, system = { class = 'fmbox-system', image = 'Information icon4.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'fmbox'}, imageEmptyCell = false, imageRightNone = false, templatestyles = 'มอดูล:Message box/fmbox.css' }, imbox = { types = { speedy = { class = 'imbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'imbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'imbox-content', image = 'Ambox important.svg' }, style = { class = 'imbox-style', image = 'Edit-clear.svg' }, move = { class = 'imbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'imbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, license = { class = 'imbox-license licensetpl', image = 'Imbox license.png' -- @todo We need an SVG version of this }, featured = { class = 'imbox-featured', image = 'Cscr-featured.svg' }, notice = { class = 'imbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'imbox'}, imageEmptyCell = true, below = true, templateCategory = 'กล่องสารไฟล์', templatestyles = 'มอดูล:Message box/imbox.css' }, ombox = { types = { speedy = { class = 'ombox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'ombox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'ombox-content', image = 'Ambox important.svg' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ombox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ombox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'ombox'}, allowSmall = true, imageEmptyCell = true, imageRightNone = true, templatestyles = 'มอดูล:Message box/ombox.css' }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'tmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'tmbox-content', image = 'Ambox important.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, templateCategory = 'กล่องสารพูดคุย', templatestyles = 'มอดูล:Message box/tmbox.css' } } heuiseja3vte9u3zj5xnxlvfk2p4qym มอดูล:Message box/ombox.css 828 23 94 74 2025-10-17T09:25:38Z Wutkh 9 ป้องกัน "[[มอดูล:Message box/ombox.css]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 74 sanitized-css text/css /* {{pp|small=y}} */ .ombox { margin: 4px 0; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" gray */ background-color: var(--background-color-neutral-subtle, #f8f9fa); box-sizing: border-box; color: var(--color-base, #202122); } /* For the "small=yes" option. */ .ombox.mbox-small { font-size: 88%; line-height: 1.25em; } .ombox-speedy { border: 2px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .ombox-delete { border: 2px solid #b32424; /* Red */ } .ombox-content { border: 1px solid #f28500; /* Orange */ } .ombox-style { border: 1px solid #fc3; /* Yellow */ } .ombox-move { border: 1px solid #9932cc; /* Purple */ } .ombox-protection { border: 2px solid #a2a9b1; /* Gray-gold */ } .ombox .mbox-text { border: none; /* @noflip */ padding: 0.25em 0.9em; width: 100%; } .ombox .mbox-image { border: none; /* @noflip */ padding: 2px 0 2px 0.9em; text-align: center; } .ombox .mbox-imageright { border: none; /* @noflip */ padding: 2px 0.9em 2px 0; text-align: center; } /* An empty narrow cell */ .ombox .mbox-empty-cell { border: none; padding: 0; width: 1px; } .ombox .mbox-invalid-type { text-align: center; } @media (min-width: 720px) { .ombox { margin: 4px 10%; } .ombox.mbox-small { /* @noflip */ clear: right; /* @noflip */ float: right; /* @noflip */ margin: 4px 0 4px 1em; width: 238px; } } /** T367463 */ body.skin--responsive table.ombox img { max-width: none !important; } @media screen { html.skin-theme-clientpref-night .ombox-speedy { background-color: #310402; /* Dark red, same hue/saturation as light */ } } @media screen and ( prefers-color-scheme: dark) { html.skin-theme-clientpref-os .ombox-speedy { background-color: #310402; /* Dark red, same hue/saturation as light */ } } 94fgri006ezjuf8buhmwait7x4j84mj แม่แบบ:Small 10 24 75 2025-10-17T09:07:28Z Wutkh 9 สร้างหน้าด้วย "<span style="font-size:85%;">{{{1}}}</span><includeonly>{{SAFESUBST:#if:{{{1|}}}||[[Category:หน้าที่ใช้แม่แบบ small ที่พารามิเตอร์นำเข้าว่างเปล่า]]}}</includeonly>" 75 wikitext text/x-wiki <span style="font-size:85%;">{{{1}}}</span><includeonly>{{SAFESUBST:#if:{{{1|}}}||[[Category:หน้าที่ใช้แม่แบบ small ที่พารามิเตอร์นำเข้าว่างเปล่า]]}}</includeonly> 0u56etu41sjk1qa0bw19yxuyc2tsfb3 แม่แบบ:Last edited by 10 25 95 76 2025-10-17T09:26:27Z Wutkh 9 ป้องกัน "[[แม่แบบ:Last edited by]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 76 wikitext text/x-wiki <span class="plainlinks">ผู้แก้ไข{{pagetype|subjectspace=yes}}นี้คน[{{fullurl:{{FULLPAGENAME}}|diff=cur}} ล่าสุด] คือ [[User:{{REVISIONUSER}}|{{REVISIONUSER}}]] {{Toolbar|[[User talk:{{REVISIONUSER}}|พูดคุย]]|[[Special:Contributions/{{REVISIONUSER}}|เรื่องที่เขียน]]}} เมื่อ {{time ago|{{REVISIONTIMESTAMP}}|tz_offset=yes}} <font size="1">''([{{fullurl:{{FULLPAGENAMEE}}|action=purge}} ล้างแคช])''</font></span> ko5wdo669qu0b989u3drhfluhjvqo9y แม่แบบ:Pagetype 10 26 96 77 2025-10-17T09:27:15Z Wutkh 9 ป้องกัน "[[แม่แบบ:Pagetype]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) [ต่อเรียง] 77 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:pagetype|main}} nyusyoazwf6aluu0ws2bc8inh9cf10o มอดูล:Pagetype 828 27 97 78 2025-10-17T09:27:30Z Wutkh 9 ป้องกัน "[[มอดูล:Pagetype]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) [ต่อเรียง] 78 Scribunto text/plain -------------------------------------------------------------------------------- -- -- -- PAGETYPE -- -- -- -- This is a meta-module intended to replace {{pagetype}} and similar -- -- templates. It automatically detects namespaces, and allows for a -- -- great deal of customisation. It can easily be ported to other -- -- wikis by changing the values in the [[Module:Pagetype/config]]. -- -- -- -------------------------------------------------------------------------------- -- Load config. local cfg = mw.loadData('Module:Pagetype/config') -- Load required modules. local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local nsDetectModule = require('Module:Namespace detect') local nsDetect = nsDetectModule._main local getParamMappings = nsDetectModule.getParamMappings local getPageObject = nsDetectModule.getPageObject local p = {} local function shallowCopy(t) -- Makes a shallow copy of a table. local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end local function checkPagetypeInput(namespace, val) -- Checks to see whether we need the default value for the given namespace, -- and if so gets it from the pagetypes table. -- The yesno function returns true/false for "yes", "no", etc., and returns -- val for other input. local ret = yesno(val, val) if ret and type(ret) ~= 'string' then ret = cfg.pagetypes[namespace] end return ret end local function getPagetypeFromClass(class, param, aliasTable, default) -- Gets the pagetype from a class specified from the first positional -- parameter. param = yesno(param, param) if param ~= false then -- No check if specifically disallowed. for _, alias in ipairs(aliasTable) do if class == alias then if type(param) == 'string' then return param else return default end end end end end local function getNsDetectValue(args) -- Builds the arguments to pass to [[Module:Namespace detect]] and returns -- the result. -- Get the default values. local ndArgs = {} local defaultns = args[cfg.defaultns] if defaultns == cfg.defaultnsAll then ndArgs = shallowCopy(cfg.pagetypes) else local defaultnsArray if defaultns == cfg.defaultnsExtended then defaultnsArray = cfg.extendedNamespaces elseif defaultns == cfg.defaultnsNone then defaultnsArray = {} else defaultnsArray = cfg.defaultNamespaces end for _, namespace in ipairs(defaultnsArray) do ndArgs[namespace] = cfg.pagetypes[namespace] end end --[[ -- Add custom values passed in from the arguments. These overwrite the -- defaults. The possible argument names are fetched from -- Module:Namespace detect automatically in case new namespaces are -- added. Although we accept namespace aliases as parameters, we only pass -- the local namespace name as a parameter to Module:Namespace detect. -- This means that the "image" parameter can overwrite defaults for the -- File: namespace, which wouldn't work if we passed the parameters through -- separately. --]] local mappings = getParamMappings() for ns, paramAliases in pairs(mappings) do -- Copy the aliases table, as # doesn't work with tables returned from -- mw.loadData. paramAliases = shallowCopy(paramAliases) local paramName = paramAliases[1] -- Iterate backwards along the array so that any values for the local -- namespace names overwrite those for namespace aliases. for i = #paramAliases, 1, -1 do local paramAlias = paramAliases[i] local ndArg = checkPagetypeInput(paramAlias, args[paramAlias]) if ndArg == false then -- If any arguments are false, convert them to nil to protect -- against breakage by future changes to -- [[Module:Namespace detect]]. ndArgs[paramName] = nil elseif ndArg then ndArgs[paramName] = ndArg end end end -- Check for disambiguation-class and N/A-class pages in mainspace. if ndArgs.main then local class = args[1] if type(class) == 'string' then -- Put in lower case so e.g. "Dab" and "dab" will both match. class = mw.ustring.lower(class) end local dab = getPagetypeFromClass( class, args[cfg.dab], cfg.dabAliases, cfg.dabDefault ) if dab then ndArgs.main = dab else local na = getPagetypeFromClass( class, args[cfg.na], cfg.naAliases, cfg.naDefault ) if na then ndArgs.main = na end end end -- If there is no talk value specified, use the corresponding subject -- namespace for talk pages. if not ndArgs.talk then ndArgs.subjectns = true end -- Add the fallback value. This can also be customised, but it cannot be -- disabled. local other = args[cfg.other] -- We will ignore true/false/nil results from yesno here, but using it -- anyway for consistency. other = yesno(other, other) if type(other) == 'string' then ndArgs.other = other else ndArgs.other = cfg.otherDefault end -- Allow custom page values. ndArgs.page = args.page return nsDetect(ndArgs) end local function detectRedirects(args) local redirect = args[cfg.redirect] -- The yesno function returns true/false for "yes", "no", etc., and returns -- redirect for other input. redirect = yesno(redirect, redirect) if redirect == false then -- Detect redirects unless they have been explicitly disallowed with -- "redirect=no" or similar. return end local pageObject = getPageObject(args.page) -- If we are using subject namespaces elsewhere, do so here as well. if pageObject and not yesno(args.talk, true) and args[cfg.defaultns] ~= cfg.defaultnsAll then pageObject = getPageObject( pageObject.subjectNsText .. ':' .. pageObject.text ) end -- Allow custom values for redirects. if pageObject and pageObject.isRedirect then if type(redirect) == 'string' then return redirect else return cfg.redirectDefault end end end function p._main(args) local redirect = detectRedirects(args) if redirect then return redirect else return getNsDetectValue(args) end end function p.main(frame) local args = getArgs(frame) return p._main(args) end return p 95yj90zj7nf2doh38om166uuyivtaoq มอดูล:Pagetype/config 828 28 79 2025-10-17T09:10:08Z Wutkh 9 สร้างหน้าด้วย "-------------------------------------------------------------------------------- -- Module:Pagetype configuration data -- -- This page holds localisation and configuration data for Module:Pagetype. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- --..." 79 Scribunto text/plain -------------------------------------------------------------------------------- -- Module:Pagetype configuration data -- -- This page holds localisation and configuration data for Module:Pagetype. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- -- Start configuration data -- -------------------------------------------------------------------------------- -- This table holds the values to use for "main=true", "user=true", etc. Keys to -- this table should be namespace parameters that can be used with -- [[Module:Namespace detect]]. cfg.pagetypes = { ['main'] = 'บทความ', ['user'] = 'หน้าผู้ใช้', ['project'] = 'หน้าโครงการ', ['wikipedia'] = 'หน้าโครงการ', ['wp'] = 'หน้าโครงการ', ['file'] = 'ไฟล์', ['image'] = 'ไฟล์', ['mediawiki'] = 'หน้าอินเตอร์เฟซ', ['template'] = 'แม่แบบ', ['help'] = 'หน้าวิธีใช้', ['category'] = 'หมวดหมู่', ['portal'] = 'สถานีย่อย', ['book'] = 'book', ['draft'] = 'draft', ['education program'] = 'education program page', ['timedtext'] = 'Timed Text page', ['module'] = 'module', ['talk'] = 'หน้าพูดคุย', ['special'] = 'หน้าพิเศษ', ['media'] = 'ไฟล์' } -- This table holds the names of the namespaces to be looked up from -- cfg.pagetypes by default. cfg.defaultNamespaces = { 'main', 'file', 'template', 'category', 'module', 'book' } -- This table holds the names of the namespaces to be looked up from -- cfg.pagetypes if cfg.defaultnsExtended is set. cfg.extendedNamespaces = { 'main', 'user', 'project', 'file', 'mediawiki', 'template', 'category', 'help', 'portal', 'module', 'book', 'draft' } -- The parameter name to set which default namespace values to be looked up from -- cfg.pagetypes. cfg.defaultns = 'defaultns' -- The value of cfg.defaultns to set all namespaces, including talk. cfg.defaultnsAll = 'all' -- The value of cfg.defaultns to set the namespaces listed in -- cfg.extendedNamespaces cfg.defaultnsExtended = 'extended' -- The value of cfg.defaultns to set no default namespaces. cfg.defaultnsNone = 'none' -- The parameter name to use for disambiguation pages page. cfg.dab = 'dab' -- This table holds the different possible aliases for disambiguation-class -- pages. These should be lower-case. cfg.dabAliases = { 'disambiguation', 'disambig', 'disamb', 'dab' } -- The default value for disambiguation pages. cfg.dabDefault = 'หน้า' -- The parameter name to use for N/A-class page. cfg.na = 'na' -- This table holds the different possible aliases for N/A-class pages. These -- should be lower-case. cfg.naAliases = {'na', 'n/a'} -- The default value for N/A-class pages. cfg.naDefault = 'หน้า' -- The parameter name to use for redirects. cfg.redirect = 'หน้าเปลี่ยนทาง' -- The default value to use for redirects. cfg.redirectDefault = 'หน้าเปลี่ยนทาง' -- The parameter name for undefined namespaces. cfg.other = 'other' -- The value used if the module detects an undefined namespace. cfg.otherDefault = 'หน้า' -------------------------------------------------------------------------------- -- End configuration data -- -------------------------------------------------------------------------------- return cfg -- Don't edit this line 6szohvh8h7tekl3r046qsjwp1vvcx15 มอดูล:Namespace detect 828 29 98 80 2025-10-17T09:28:08Z Wutkh 9 ป้องกัน "[[มอดูล:Namespace detect]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) [ต่อเรียง] 80 Scribunto text/plain --[[ -------------------------------------------------------------------------------- -- -- -- NAMESPACE DETECT -- -- -- -- This module implements the {{namespace detect}} template in Lua, with a -- -- few improvements: all namespaces and all namespace aliases are supported, -- -- and namespace names are detected automatically for the local wiki. The -- -- module can also use the corresponding subject namespace value if it is -- -- used on a talk page. Parameter names can be configured for different wikis -- -- by altering the values in the "cfg" table in -- -- Module:Namespace detect/config. -- -- -- -------------------------------------------------------------------------------- --]] local data = mw.loadData('Module:Namespace detect/data') local argKeys = data.argKeys local cfg = data.cfg local mappings = data.mappings local yesno = require('Module:Yesno') local mArguments -- Lazily initialise Module:Arguments local mTableTools -- Lazily initilalise Module:TableTools local ustringLower = mw.ustring.lower local p = {} local function fetchValue(t1, t2) -- Fetches a value from the table t1 for the first key in array t2 where -- a non-nil value of t1 exists. for i, key in ipairs(t2) do local value = t1[key] if value ~= nil then return value end end return nil end local function equalsArrayValue(t, value) -- Returns true if value equals a value in the array t. Otherwise -- returns false. for i, arrayValue in ipairs(t) do if value == arrayValue then return true end end return false end function p.getPageObject(page) -- Get the page object, passing the function through pcall in case of -- errors, e.g. being over the expensive function count limit. if page then local success, pageObject = pcall(mw.title.new, page) if success then return pageObject else return nil end else return mw.title.getCurrentTitle() end end -- Provided for backward compatibility with other modules function p.getParamMappings() return mappings end local function getNamespace(args) -- This function gets the namespace name from the page object. local page = fetchValue(args, argKeys.demopage) if page == '' then page = nil end local demospace = fetchValue(args, argKeys.demospace) if demospace == '' then demospace = nil end local subjectns = fetchValue(args, argKeys.subjectns) local ret if demospace then -- Handle "demospace = main" properly. if equalsArrayValue(argKeys.main, ustringLower(demospace)) then ret = mw.site.namespaces[0].name else ret = demospace end else local pageObject = p.getPageObject(page) if pageObject then if pageObject.isTalkPage then -- Get the subject namespace if the option is set, -- otherwise use "talk". if yesno(subjectns) then ret = mw.site.namespaces[pageObject.namespace].subject.name else ret = 'talk' end else ret = pageObject.nsText end else return nil -- return nil if the page object doesn't exist. end end ret = ret:gsub('_', ' ') return ustringLower(ret) end function p._main(args) -- Check the parameters stored in the mappings table for any matches. local namespace = getNamespace(args) or 'other' -- "other" avoids nil table keys local params = mappings[namespace] or {} local ret = fetchValue(args, params) --[[ -- If there were no matches, return parameters for other namespaces. -- This happens if there was no text specified for the namespace that -- was detected or if the demospace parameter is not a valid -- namespace. Note that the parameter for the detected namespace must be -- completely absent for this to happen, not merely blank. --]] if ret == nil then ret = fetchValue(args, argKeys.other) end return ret end function p.main(frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame, {removeBlanks = false}) local ret = p._main(args) return ret or '' end function p.table(frame) --[[ -- Create a wikitable of all subject namespace parameters, for -- documentation purposes. The talk parameter is optional, in case it -- needs to be excluded in the documentation. --]] -- Load modules and initialise variables. mTableTools = require('Module:TableTools') local namespaces = mw.site.namespaces local cfg = data.cfg local useTalk = type(frame) == 'table' and type(frame.args) == 'table' and yesno(frame.args.talk) -- Whether to use the talk parameter. -- Get the header names. local function checkValue(value, default) if type(value) == 'string' then return value else return default end end local nsHeader = checkValue(cfg.wikitableNamespaceHeader, 'Namespace') local aliasesHeader = checkValue(cfg.wikitableAliasesHeader, 'Aliases') -- Put the namespaces in order. local mappingsOrdered = {} for nsname, params in pairs(mappings) do if useTalk or nsname ~= 'talk' then local nsid = namespaces[nsname].id -- Add 1, as the array must start with 1; nsid 0 would be lost otherwise. nsid = nsid + 1 mappingsOrdered[nsid] = params end end mappingsOrdered = mTableTools.compressSparseArray(mappingsOrdered) -- Build the table. local ret = '{| class="wikitable"' .. '\n|-' .. '\n! ' .. nsHeader .. '\n! ' .. aliasesHeader for i, params in ipairs(mappingsOrdered) do for j, param in ipairs(params) do if j == 1 then ret = ret .. '\n|-' .. '\n| <code>' .. param .. '</code>' .. '\n| ' elseif j == 2 then ret = ret .. '<code>' .. param .. '</code>' else ret = ret .. ', <code>' .. param .. '</code>' end end end ret = ret .. '\n|-' .. '\n|}' return ret end return p j7kygz1y56jpz4doq0m2c6x1td5d8ar มอดูล:Namespace detect/data 828 30 81 2025-10-17T09:11:55Z Wutkh 9 สร้างหน้าด้วย "-------------------------------------------------------------------------------- -- Namespace detect data -- -- This module holds data for [[Module:Namespace detect]] to be loaded per -- -- page, rather than per #invoke, for performance reasons. -- -------------------------------------------------------------------------------- local cfg = require('Module:Namespace detect/co..." 81 Scribunto text/plain -------------------------------------------------------------------------------- -- Namespace detect data -- -- This module holds data for [[Module:Namespace detect]] to be loaded per -- -- page, rather than per #invoke, for performance reasons. -- -------------------------------------------------------------------------------- local cfg = require('Module:Namespace detect/config') local function addKey(t, key, defaultKey) if key ~= defaultKey then t[#t + 1] = key end end -- Get a table of parameters to query for each default parameter name. -- This allows wikis to customise parameter names in the cfg table while -- ensuring that default parameter names will always work. The cfg table -- values can be added as a string, or as an array of strings. local defaultKeys = { 'main', 'talk', 'other', 'subjectns', 'demospace', 'demopage' } local argKeys = {} for i, defaultKey in ipairs(defaultKeys) do argKeys[defaultKey] = {defaultKey} end for defaultKey, t in pairs(argKeys) do local cfgValue = cfg[defaultKey] local cfgValueType = type(cfgValue) if cfgValueType == 'string' then addKey(t, cfgValue, defaultKey) elseif cfgValueType == 'table' then for i, key in ipairs(cfgValue) do addKey(t, key, defaultKey) end end cfg[defaultKey] = nil -- Free the cfg value as we don't need it any more. end local function getParamMappings() --[[ -- Returns a table of how parameter names map to namespace names. The keys -- are the actual namespace names, in lower case, and the values are the -- possible parameter names for that namespace, also in lower case. The -- table entries are structured like this: -- { -- [''] = {'main'}, -- ['wikipedia'] = {'wikipedia', 'project', 'wp'}, -- ... -- } --]] local mappings = {} local mainNsName = mw.site.subjectNamespaces[0].name mainNsName = mw.ustring.lower(mainNsName) mappings[mainNsName] = mw.clone(argKeys.main) mappings['talk'] = mw.clone(argKeys.talk) for nsid, ns in pairs(mw.site.subjectNamespaces) do if nsid ~= 0 then -- Exclude main namespace. local nsname = mw.ustring.lower(ns.name) local canonicalName = mw.ustring.lower(ns.canonicalName) mappings[nsname] = {nsname} if canonicalName ~= nsname then table.insert(mappings[nsname], canonicalName) end for _, alias in ipairs(ns.aliases) do table.insert(mappings[nsname], mw.ustring.lower(alias)) end end end return mappings end return { argKeys = argKeys, cfg = cfg, mappings = getParamMappings() } ojp6d3pc8mql5nufaqdg576c9so3479 มอดูล:Namespace detect/config 828 31 82 2025-10-17T09:12:30Z Wutkh 9 สร้างหน้าด้วย "-------------------------------------------------------------------------------- -- Namespace detect configuration data -- -- -- -- This module stores configuration data for Module:Namespace detect. Here -- -- you can localise the module to your wiki's language. -- --..." 82 Scribunto text/plain -------------------------------------------------------------------------------- -- Namespace detect configuration data -- -- -- -- This module stores configuration data for Module:Namespace detect. Here -- -- you can localise the module to your wiki's language. -- -- -- -- To activate a configuration item, you need to uncomment it. This means -- -- that you need to remove the text "-- " at the start of the line. -- -------------------------------------------------------------------------------- local cfg = {} -- Don't edit this line. -------------------------------------------------------------------------------- -- Parameter names -- -- These configuration items specify custom parameter names. Values added -- -- here will work in addition to the default English parameter names. -- -- To add one extra name, you can use this format: -- -- -- -- cfg.foo = 'parameter name' -- -- -- -- To add multiple names, you can use this format: -- -- -- -- cfg.foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'} -- -------------------------------------------------------------------------------- ---- This parameter displays content for the main namespace: -- cfg.main = 'main' ---- This parameter displays in talk namespaces: -- cfg.talk = 'talk' ---- This parameter displays content for "other" namespaces (namespaces for which ---- parameters have not been specified): -- cfg.other = 'other' ---- This parameter makes talk pages behave as though they are the corresponding ---- subject namespace. Note that this parameter is used with [[Module:Yesno]]. ---- Edit that module to change the default values of "yes", "no", etc. -- cfg.subjectns = 'subjectns' ---- This parameter sets a demonstration namespace: -- cfg.demospace = 'demospace' ---- This parameter sets a specific page to compare: cfg.demopage = 'page' -------------------------------------------------------------------------------- -- Table configuration -- -- These configuration items allow customisation of the "table" function, -- -- used to generate a table of possible parameters in the module -- -- documentation. -- -------------------------------------------------------------------------------- ---- The header for the namespace column in the wikitable containing the list of ---- possible subject-space parameters. -- cfg.wikitableNamespaceHeader = 'Namespace' ---- The header for the wikitable containing the list of possible subject-space ---- parameters. -- cfg.wikitableAliasesHeader = 'Aliases' -------------------------------------------------------------------------------- -- End of configuration data -- -------------------------------------------------------------------------------- return cfg -- Don't edit this line. 1o6ozz56i8q0xgyl6xa41n2v7kelhli แม่แบบ:Toolbar 10 32 99 83 2025-10-17T09:45:42Z Wutkh 9 ป้องกัน "[[แม่แบบ:Toolbar]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) [ต่อเรียง] 83 wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:Toolbar|main}} n7mmsprh0m93zpo1y8z9fixfm319ihy มอดูล:Toolbar 828 33 100 84 2025-10-17T09:45:59Z Wutkh 9 ป้องกัน "[[มอดูล:Toolbar]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) [ต่อเรียง] 84 Scribunto text/plain -- This module implements {{toolbar}}. local mArguments -- Lazily initialise [[Module:Arguments]] local mTableTools = require('Module:TableTools') local yesno = require('Module:Yesno') local p = {} function p.main(frame) mArguments = require('Module:Arguments') local args = mArguments.getArgs(frame) return p._main(args) end function p._main(args) local toolbarItems = p.makeToolbarItems(args) if not toolbarItems then -- Return the blank string if no arguments were specified, rather than -- returning empty brackets. return '' elseif yesno(args.span) == false then return string.format( '(%s)', toolbarItems ) else return string.format( '<span class="plainlinks%s"%s>(%s)</span>', type(args.class) == 'string' and ' ' .. args.class or '', type(args.style) == 'string' and string.format(' style="%s"', args.style) or '', toolbarItems ) end end function p.makeToolbarItems(args) local nums = mTableTools.numKeys(args) local sep = (args.separator or 'pipe') .. '-separator' sep = mw.message.new(sep):plain() local ret = {} for i, v in ipairs(nums) do ret[#ret + 1] = args[v] end if #ret > 0 then return table.concat(ret, sep) else return nil end end return p ailtbbbycxvrr21mi50uvpehmddg0lm มอดูล:TableTools 828 34 85 2025-10-17T09:15:20Z Wutkh 9 สร้างหน้าด้วย "------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should not -- -- be called directly from #..." 85 Scribunto text/plain ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should not -- -- be called directly from #invoke. -- ------------------------------------------------------------------------------------ local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ function p.isPositiveInteger(v) return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity end ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false if -- not. Although it doesn't operate on tables, it is included here as it is useful -- for determining whether a value can be a valid table key. Lua will generate an -- error if a NaN is used as a table key. ------------------------------------------------------------------------------------ function p.isNan(v) return type(v) == 'number' and v ~= v end ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ function p.shallowClone(t) checkType('shallowClone', 1, t, 'table') local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ function p.removeDuplicates(arr) checkType('removeDuplicates', 1, arr, 'table') local isNan = p.isNan local ret, exists = {}, {} for _, v in ipairs(arr) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v elseif not exists[v] then ret[#ret + 1] = v exists[v] = true end end return ret end ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return -- {1, 3, 6}. ------------------------------------------------------------------------------------ function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table -- of subtables in the format -- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}. -- Keys that don't end with an integer are stored in a subtable named "other". The -- compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ function p.size(t) checkType('size', 1, t, 'table') local i = 0 for _ in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then return tostring(item1) < tostring(item2) else return item1 < item2 end end ------------------------------------------------------------------------------------ -- keysToList -- -- Returns an array of the keys in a table, sorted using either a default -- comparison function or a custom keySort function. ------------------------------------------------------------------------------------ function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'}) end local arr = {} local index = 1 for k in pairs(t) do arr[index] = k index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(arr, keySort) end return arr end ------------------------------------------------------------------------------------ -- sortedPairs -- -- Iterates through a table, with the keys sorted using the keysToList function. -- If there are only numerical keys, sparseIpairs is probably more efficient. ------------------------------------------------------------------------------------ function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local arr = p.keysToList(t, keySort, true) local i = 0 return function () i = i + 1 local key = arr[i] if key ~= nil then return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- isArray -- -- Returns true if the given value is a table and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArray(v) if type(v) ~= 'table' then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- isArrayLike -- -- Returns true if the given value is iterable and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArrayLike(v) if not pcall(pairs, v) then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- invert -- -- Transposes the keys and values in an array. For example, {"a", "b", "c"} -> -- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to -- the index of the last duplicate) and NaN values are ignored. ------------------------------------------------------------------------------------ function p.invert(arr) checkType("invert", 1, arr, "table") local isNan = p.isNan local map = {} for i, v in ipairs(arr) do if not isNan(v) then map[v] = i end end return map end ------------------------------------------------------------------------------------ -- listToSet -- -- Creates a set from the array part of the table. Indexing the set by any of the -- values of the array returns true. For example, {"a", "b", "c"} -> -- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them -- never equal to any value (including other NaNs or even themselves). ------------------------------------------------------------------------------------ function p.listToSet(arr) checkType("listToSet", 1, arr, "table") local isNan = p.isNan local set = {} for _, v in ipairs(arr) do if not isNan(v) then set[v] = true end end return set end ------------------------------------------------------------------------------------ -- deepCopy -- -- Recursive deep copy function. Preserves identities of subtables. ------------------------------------------------------------------------------------ local function _deepCopy(orig, includeMetatable, already_seen) if type(orig) ~= "table" then return orig end -- already_seen stores copies of tables indexed by the original table. local copy = already_seen[orig] if copy ~= nil then return copy end copy = {} already_seen[orig] = copy -- memoize before any recursion, to avoid infinite loops for orig_key, orig_value in pairs(orig) do copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen) end if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then setmetatable(copy, _deepCopy(mt, true, already_seen)) end end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen or {}) end ------------------------------------------------------------------------------------ -- sparseConcat -- -- Concatenates all values in the table that are indexed by a number, in order. -- sparseConcat{a, nil, c, d} => "acd" -- sparseConcat{nil, b, c, d} => "bcd" ------------------------------------------------------------------------------------ function p.sparseConcat(t, sep, i, j) local arr = {} local arr_i = 0 for _, v in p.sparseIpairs(t) do arr_i = arr_i + 1 arr[arr_i] = v end return table.concat(arr, sep, i, j) end ------------------------------------------------------------------------------------ -- length -- -- Finds the length of an array, or of a quasi-array with keys such as "data1", -- "data2", etc., using an exponential search algorithm. It is similar to the -- operator #, but may return a different value when there are gaps in the array -- portion of the table. Intended to be used on data loaded with mw.loadData. For -- other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of the number -- of unnamed template parameters, so use this function for frame.args. ------------------------------------------------------------------------------------ function p.length(t, prefix) -- requiring module inline so that [[Module:Exponential search]] which is -- only needed by this one function doesn't get millions of transclusions local expSearch = require("Module:Exponential search") checkType('length', 1, t, 'table') checkType('length', 2, prefix, 'string', true) return expSearch(function (i) local key if prefix then key = prefix .. tostring(i) else key = i end return t[key] ~= nil end) or 0 end ------------------------------------------------------------------------------------ -- inArray -- -- Returns true if searchElement is a member of the array, and false otherwise. -- Equivalent to JavaScript array.includes(searchElement) or -- array.includes(searchElement, fromIndex), except fromIndex is 1 indexed ------------------------------------------------------------------------------------ function p.inArray(array, searchElement, fromIndex) checkType("inArray", 1, array, "table") -- if searchElement is nil, error? fromIndex = tonumber(fromIndex) if fromIndex then if (fromIndex < 0) then fromIndex = #array + fromIndex + 1 end if fromIndex < 1 then fromIndex = 1 end for _, v in ipairs({unpack(array, fromIndex)}) do if v == searchElement then return true end end else for _, v in pairs(array) do if v == searchElement then return true end end end return false end ------------------------------------------------------------------------------------ -- merge -- -- Given the arrays, returns an array containing the elements of each input array -- in sequence. ------------------------------------------------------------------------------------ function p.merge(...) local arrays = {...} local ret = {} for i, arr in ipairs(arrays) do checkType('merge', i, arr, 'table') for _, v in ipairs(arr) do ret[#ret + 1] = v end end return ret end ------------------------------------------------------------------------------------ -- extend -- -- Extends the first array in place by appending all elements from the second -- array. ------------------------------------------------------------------------------------ function p.extend(arr1, arr2) checkType('extend', 1, arr1, 'table') checkType('extend', 2, arr2, 'table') for _, v in ipairs(arr2) do arr1[#arr1 + 1] = v end end return p 4n03zk6kcoeg4gz82mieeh94c1szcjy แม่แบบ:Time ago 10 35 86 2025-10-17T09:16:44Z Wutkh 9 สร้างหน้าด้วย "{{#invoke:TimeAgo|main}}" 86 wikitext text/x-wiki {{#invoke:TimeAgo|main}} 3te5uex5o6wlzora948obtb3n2yif73 มอดูล:TimeAgo 828 36 101 87 2025-10-17T09:48:27Z Wutkh 9 ป้องกัน "[[มอดูล:TimeAgo]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 87 Scribunto text/plain -- Replacement for [[Template:Time ago]] local getArgs = require('Module:Arguments').getArgs local p = {} function p.main( frame ) local args = getArgs( frame, { valueFunc = function( k, v ) if v then v = v:match( '^%s*(.-)%s*$' ) -- Trim whitespace. if k == 'ก่อน' or v ~= '' then return v end end return nil end }) return p._main( args ) end function p._main( args ) -- Initialize variables local lang = mw.language.getContentLanguage() local ago local auto_magnitude_num local min_magnitude_num local result local result_unit local magnitude = args.magnitude local min_magnitude = args.min_magnitude local purge = args.purge -- Generate the "ago" string. If ago is the blank string, do nothing - this allows overriding of args.ago -- in cases where the module is used to generate something like "where he has worked for the past 20 years." ago = args.ago if not ago then ago = 'ก่อน' end -- Add a purge link if something (usually "yes") is entered into the purge parameter if purge then purge = ' <span class="plainlinks">([' .. mw.title.getCurrentTitle():fullUrl('action=purge') .. ' purge])</span>' else purge = '' end -- Check that the entered timestamp is valid. If it isn't, then give an error message. local noError, inputTime = pcall( lang.formatDate, lang, 'U', args[1] ) if not noError then return '<strong class="error">Error: first parameter cannot be parsed as a date or time.</strong>' end -- Store the difference between the current time and the inputted time, as well as its absolute value. local timeDiff = lang:formatDate( 'U' ) - inputTime if args.tz_offset == "yes" then timeDiff = timeDiff + lang:formatDate( 'Z', nil, true ) end local absTimeDiff = math.abs( timeDiff ) if magnitude then auto_magnitude_num = 0 min_magnitude_num = timeText[magnitude] else -- Calculate the appropriate unit of time if it was not specified as an argument. local autoMagnitudeData = { {denom = 63115200, amn = 31557600}, {denom = 5356800, amn = 2678400}, {denom = 172800, amn = 86400}, {denom = 7200, amn = 3600}, {denom = 120, amn = 60} } for i, t in ipairs(autoMagnitudeData) do if absTimeDiff / t.denom >= 1 then auto_magnitude_num = t.amn break end end auto_magnitude_num = auto_magnitude_num or 1 if min_magnitude then min_magnitude_num = timeText[min_magnitude] else min_magnitude_num = -1 end end if not min_magnitude_num then -- Default to seconds if an invalid magnitude is entered. min_magnitude_num = 1 end local magnitude_num = math.max( min_magnitude_num, auto_magnitude_num ) local result_num = math.floor ( absTimeDiff / magnitude_num ) if timeDiff >= 0 then -- Past if result_num == 1 then result_unit = timeUnits[ magnitude_num ][1] else result_unit = timeUnits[ magnitude_num ][2] end result = result_num .. ' ' .. result_unit .. ago -- Spaces for "ago" are added earlier. else -- Future if result_num == 1 then result_unit = timeUnits[ magnitude_num ][3] else result_unit = timeUnits[ magnitude_num ][4] end result = 'อีก ' .. result_num .. ' ' .. result_unit end return result .. purge end -- Table to convert entered text values to numeric values. timeText = { ['seconds'] = 1, ['minutes'] = 60, ['hours'] = 3600, ['days'] = 86400, ['weeks'] = 604800, ['months'] = 2678400, ['years'] = 31557600 } -- Table containing tables of possible units to use in output. timeUnits = { [1] = { 'วินาที', 'วินาที', "วินาที", "วินาที" }, [60] = { 'นาที', 'นาที', "นาที", "นาที" }, [3600] = { 'ชั่วโมง', 'ชั่วโมง', "ชั่วโมง", "ชั่วโมง" }, [86400] = { 'วัน', 'วัน', "วัน", "วัน" }, [604800] = { 'สัปดาห์', 'สัปดาห์', "สัปดาห์", "สัปดาห์" }, [2678400] = { 'เดือน', 'เดือน', "เดือน", "เดือน" }, [31557600] = { 'ปี', 'ปี', "ปี", "ปี" } } return p i36mrwb26qb0j4ofwg7yny47vpa7gnq มีเดียวิกิ:Protect-dropdown 8 37 88 2025-10-17T09:19:17Z Wutkh 9 สร้างหน้าด้วย "* เหตุผลการป้องกันหน้าทั่วไป ** การก่อกวนจำนวนมาก ** สแปมจำนวนมาก ** สงครามการแก้ไขที่ไม่สร้างสรรค์ ** หน้าที่มีการเข้าชมมาก ** แม่แบบ/มอดูลสำคัญ" 88 wikitext text/x-wiki * เหตุผลการป้องกันหน้าทั่วไป ** การก่อกวนจำนวนมาก ** สแปมจำนวนมาก ** สงครามการแก้ไขที่ไม่สร้างสรรค์ ** หน้าที่มีการเข้าชมมาก ** แม่แบบ/มอดูลสำคัญ sl87tkjfbjx8j5qsokwkx8gvqmv5nq2 วิกิมีเดียประเทศไทย:ติดต่อ 4 38 107 2025-10-17T15:42:35Z Wutkh 9 สร้างหน้าด้วย "{{Header}} [[w:th:สื่อสังคม|สื่อสังคม]]: [[File:Facebook f logo (2019).svg|20x20px|link=]] [https://www.facebook.com/WikimediaThailand/ @WikimediaThailand], [https://www.facebook.com/profile.php?id=61556992116885 เพจเฟซบุ๊กทางการของวิกิพีเดียภาษาไทย] [[File:Instagram logo 2022.svg|20x20px|link=]] [https://www.instagram.com/WikimediaThailand/..." 107 wikitext text/x-wiki {{Header}} [[w:th:สื่อสังคม|สื่อสังคม]]: [[File:Facebook f logo (2019).svg|20x20px|link=]] [https://www.facebook.com/WikimediaThailand/ @WikimediaThailand], [https://www.facebook.com/profile.php?id=61556992116885 เพจเฟซบุ๊กทางการของวิกิพีเดียภาษาไทย] [[File:Instagram logo 2022.svg|20x20px|link=]] [https://www.instagram.com/WikimediaThailand/ @WikimediaThailand] {|width="100%" border="0" cellspacing="2" cellpadding="2" style="align=center; MARGIN: 10px auto 0.5em;clear:both;border:1px solid gold; background:ivory; color:#000000; text-align: center;" |- | '''โปรดทราบ'''<br/>แม้ว่าวิกิมีเดียประเทศไทยจะได้รับเงินสนับสนุนจากมูลนิธิวิกิมีเดีย แต่วิกิมีเดียประเทศไทยเป็นองค์กรเอกเทศ มิได้เป็นสาขาย่อยในเชิงโครงสร้างการบริหารของมูลนิธิวิกิมีเดีย<br/>วิกิมีเดียประเทศไทยไม่อาจรับผิดชอบต่อเนื้อหาใด ๆ บนวิกิพีเดียและโครงการพี่น้องทุกโครงการบนกลุ่มขับเคลื่อนวิกิมีเดีย<br/>โปรดศึกษารายละเอียดเพิ่มเติมใน[[วิกิมีเดียประเทศไทย:ข้อปฏิเสธความรับผิดชอบทั่วไป|หน้านี้]] ขอขอบคุณในความเข้าใจ |} dbsrmkme97mypud4fjrce8j25tfmqvz แม่แบบ:Template link 10 39 115 2025-10-19T07:16:05Z Wutkh 9 สร้างหน้าด้วย "<span class="nowrap">&#123;&#123;</span>[[แม่แบบ:{{{1}}}|{{{1}}}]]<span class="nowrap">&#125;&#125;</span><noinclude>" 115 wikitext text/x-wiki <span class="nowrap">&#123;&#123;</span>[[แม่แบบ:{{{1}}}|{{{1}}}]]<span class="nowrap">&#125;&#125;</span><noinclude> q3arnqpblx6qlvz4s68qem0mimxpeqo แม่แบบ:Tl 10 40 116 2025-10-19T07:17:05Z Wutkh 9 เปลี่ยนทางหน้าไปยัง [[แม่แบบ:Template link]] 116 wikitext text/x-wiki #เปลี่ยนทาง [[แม่แบบ:Template link]] af0ekeyk9c7jdgdwckm4179ublk9bws แม่แบบ:เห็นด้วย 10 41 117 2025-10-19T07:18:20Z Wutkh 9 สร้างหน้าด้วย "[[ภาพ:Symbol support vote.svg|15px]] '''{{{2|เห็นด้วย}}}''' {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ลงคะแนนโหวต''' <u>ในหน้าลงคะแนนโหวต</u> กรณีที่เห็นด้วย โดยคัดลอกข้อความนี้ <pre> * {{เห็นด้วย|ความเห..." 117 wikitext text/x-wiki [[ภาพ:Symbol support vote.svg|15px]] '''{{{2|เห็นด้วย}}}''' {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ลงคะแนนโหวต''' <u>ในหน้าลงคะแนนโหวต</u> กรณีที่เห็นด้วย โดยคัดลอกข้อความนี้ <pre> * {{เห็นด้วย|ความเห็นเพิ่มเติมถ้ามี}} --~~~~ </pre> วางเป็นรายการของผู้ที่แสดงความเห็น จะได้ผลดังนี้ * {{เห็นด้วย|ความเห็นเพิ่มเติมถ้ามี}} --(ชื่อผู้ลงคะแนน) == ดูเพิ่ม == * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> 0tga2sagqyscwcu1rvnsvagheivulsh แม่แบบ:เป็นกลาง 10 42 118 2025-10-19T07:18:50Z Wutkh 9 สร้างหน้าด้วย "[[ภาพ:Symbol neutral vote.svg|15px]] '''{{{2|เป็นกลาง}}}''' {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ลงคะแนนโหวต''' <u>ในหน้าลงคะแนนโหวต</u> กรณีที่เป็นกลาง ไม่มีการสนับสนุน หรือคัดค้าน โดยคัดลอกข..." 118 wikitext text/x-wiki [[ภาพ:Symbol neutral vote.svg|15px]] '''{{{2|เป็นกลาง}}}''' {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ลงคะแนนโหวต''' <u>ในหน้าลงคะแนนโหวต</u> กรณีที่เป็นกลาง ไม่มีการสนับสนุน หรือคัดค้าน โดยคัดลอกข้อความนี้ <pre> * {{เป็นกลาง|ความเห็นเพิ่มเติมถ้ามี}} --~~~~ </pre> วางเป็นรายการของผู้ที่แสดงความเห็น จะได้ผลดังนี้ * {{เป็นกลาง|ความเห็นเพิ่มเติมถ้ามี}} -- (ชื่อผู้ลงคะแนน) == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> ksqcr6ejnyfsvovesawc0406jj4a7jt แม่แบบ:ไม่เห็นด้วย 10 43 119 2025-10-19T07:19:55Z Wutkh 9 สร้างหน้าด้วย "[[ภาพ:Symbol oppose vote.svg|15px]] '''{{{2|ไม่เห็นด้วย}}}''' {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ลงคะแนนโหวต''' <u>ในหน้าลงคะแนนโหวต</u> กรณีที่ไม่เห็นด้วย โดยคัดลอกข้อความนี้ <pre> * {{ไม่เห็นด้..." 119 wikitext text/x-wiki [[ภาพ:Symbol oppose vote.svg|15px]] '''{{{2|ไม่เห็นด้วย}}}''' {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ลงคะแนนโหวต''' <u>ในหน้าลงคะแนนโหวต</u> กรณีที่ไม่เห็นด้วย โดยคัดลอกข้อความนี้ <pre> * {{ไม่เห็นด้วย|ความเห็นเพิ่มเติมถ้ามี}} --~~~~ </pre> วางเป็นรายการของผู้ที่แสดงความเห็น จะได้ผลดังนี้ * {{ไม่เห็นด้วย|ความเห็นเพิ่มเติมถ้ามี}} --(ชื่อผู้ลงคะแนน) == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> rswl6d9hf0d95np2w052d8cn0wqs44a แม่แบบ:สำเร็จ 10 44 120 2025-10-19T07:21:03Z Wutkh 9 สร้างหน้าด้วย "<span class="nowrap">[[ไฟล์:Yes check.svg|18px|link=|alt=]]'''&nbsp;{{{1|สำเร็จ}}}'''</span>{{{{{|safesubst:}}}#if:{{{2|{{{note|{{{reason|}}}}}}}}}|&#58; {{{2|{{{note|{{{reason}}}}}}}}}}}<!--แม่แบบ:สำเร็จ--><noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับประกอบความคิดเห็นในหน้าพูดคุย โดยใส่..." 120 wikitext text/x-wiki <span class="nowrap">[[ไฟล์:Yes check.svg|18px|link=|alt=]]'''&nbsp;{{{1|สำเร็จ}}}'''</span>{{{{{|safesubst:}}}#if:{{{2|{{{note|{{{reason|}}}}}}}}}|&#58; {{{2|{{{note|{{{reason}}}}}}}}}}}<!--แม่แบบ:สำเร็จ--><noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับประกอบความคิดเห็นในหน้าพูดคุย โดยใส่ <pre> {{สำเร็จ}} หรือ {{สำเร็จ|ความเห็นเพิ่มเติม}} </pre> โดยจะแสดงผลเป็น {{สำเร็จ}} หรือ {{สำเร็จ|ความเห็นเพิ่มเติม}} == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|กำลังทำ}} - {{กำลังทำ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> gz3xg25i5jv70nyee9eksdqnvyn1l61 แม่แบบ:กำลังทำ 10 45 121 2025-10-19T07:23:19Z Wutkh 9 สร้างหน้าด้วย "[[ไฟล์:Pictogram voting wait.svg|20px|link=|alt=]] '''{{{1|กำลังทำ}}}...''' <noinclude> == วิธีใช้ == == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่ส..." 121 wikitext text/x-wiki [[ไฟล์:Pictogram voting wait.svg|20px|link=|alt=]] '''{{{1|กำลังทำ}}}...''' <noinclude> == วิธีใช้ == == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> fza0m7fbytwf8z8y0znwndzqnzad5ew แม่แบบ:ไม่สำเร็จ 10 46 122 2025-10-19T07:24:40Z Wutkh 9 สร้างหน้าด้วย "<span class="nowrap">[[ไฟล์:X mark.svg|18px|link=|alt=]]&nbsp;'''{{{1|ไม่สำเร็จ}}}'''</span><!--แม่แบบ:ไม่สำเร็จ--> <noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับประกอบความคิดเห็นในหน้าพูดคุย โดยใส่ <pre> {{ไม่สำเร็จ}} หรือ {{ไม่สำเร็..." 122 wikitext text/x-wiki <span class="nowrap">[[ไฟล์:X mark.svg|18px|link=|alt=]]&nbsp;'''{{{1|ไม่สำเร็จ}}}'''</span><!--แม่แบบ:ไม่สำเร็จ--> <noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับประกอบความคิดเห็นในหน้าพูดคุย โดยใส่ <pre> {{ไม่สำเร็จ}} หรือ {{ไม่สำเร็จ|ความเห็นเพิ่มเติม}} </pre> โดยจะแสดงผลเป็น {{ไม่สำเร็จ}} หรือ {{ไม่สำเร็จ|ความเห็นเพิ่มเติม}} == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> pofuhlnn60mx92yngjqea5l466a8aw8 แม่แบบ:ตอบถึง 10 47 127 123 2025-10-19T14:45:01Z Wutkh 9 ป้องกัน "[[แม่แบบ:ตอบถึง]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 123 wikitext text/x-wiki {{{{{|safesubst:}}}#invoke:Reply to|replyto|<noinclude>example=Example</noinclude>|max=50}} bixtml41n5q9dp0ay8hdxh7aaodhzzg มอดูล:Reply to 828 48 124 2025-10-19T14:43:59Z Wutkh 9 สร้างหน้าด้วย "local p = {} function p.replyto(frame) local origArgs = frame:getParent().args local args = {} local maxArg = 1 local usernames = 0 for k, v in pairs(origArgs) do if type(k) == 'number' then if mw.ustring.match(v,'%S') then if k > maxArg then maxArg = k end usernames = usernames + 1 local title = mw.title.new(v) if not title then return '<strong class="error">Error in [[Template:Reply to]]: Input contains forbidden charact..." 124 Scribunto text/plain local p = {} function p.replyto(frame) local origArgs = frame:getParent().args local args = {} local maxArg = 1 local usernames = 0 for k, v in pairs(origArgs) do if type(k) == 'number' then if mw.ustring.match(v,'%S') then if k > maxArg then maxArg = k end usernames = usernames + 1 local title = mw.title.new(v) if not title then return '<strong class="error">Error in [[Template:Reply to]]: Input contains forbidden characters.</strong>' end args[k] = title.rootText end elseif v == '' and k:sub(0,5) == 'label' then args[k] = '&#x200B;' else args[k] = v end end if usernames > (tonumber(frame.args.max) or 50) then return string.format( '<strong class="error">Error in [[Template:Reply to]]: More than %s names specified.</strong>', tostring(frame.args.max or 50) ) else if usernames < 1 then if frame.args.example then args[1] = frame.args.example else return '<strong class="error">Error in [[Template:Reply to]]: Username not given.</strong>' end end local isfirst = true local outStr = '' for i = 1, maxArg do if args[i] then if isfirst then outStr = string.format( '<span class="template-ping">%s[[User:%s|%s]]', args['prefix'] or '@', args[i], (args['label1'] or args['label']) or args[i] ) isfirst = false else if ( (usernames > 2) or ((usernames == 2) and (args['c'] == '')) ) then outStr = outStr..',' end if i == maxArg then outStr = outStr..' '..(args['c'] or 'และ') end outStr = string.format( '%s [[User:%s|%s]]', outStr, args[i], args['label'..tostring(i)] or args[i] ) end end end outStr = outStr..(args['p'] or ':')..'</span>' return outStr end end return p m8durk5psqx3atoijjk8fv7t964gq4f แม่แบบ:Ping 10 49 126 125 2025-10-19T14:44:50Z Wutkh 9 ป้องกัน "[[แม่แบบ:Ping]]" แล้ว: แม่แบบ/มอดูลสำคัญ ([แก้ไข:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด) [ย้าย:อนุญาตเฉพาะผู้ดูแลระบบ] (ไม่มีกำหนด)) 125 wikitext text/x-wiki #เปลี่ยนทาง [[แม่แบบ:ตอบถึง]] 6ch1qupiy10sa3rd4ekq66hls6qr8ys แม่แบบ:ถาม 10 50 129 128 2025-10-19T14:48:16Z Wutkh 9 129 wikitext text/x-wiki [[ภาพ:Symbol question.svg|15px]] {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ถามคำถาม''' <u>ในหน้าขอความเห็น</u> โดยคัดลอกข้อความนี้ <pre> * {{ถาม|ถามคำถาม}} --~~~~ </pre> วางเป็นรายการของผู้ที่แสดงความเห็น จะได้ผลดังนี้ * {{ถาม|ถามคำถาม}} --(ชื่อผู้ลงคะแนน) == ดูเพิ่ม == * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> 582i8x9rcy72osoxfy53y8mnptojofv แม่แบบ:ตอบ 10 51 130 2025-10-19T14:51:10Z Wutkh 9 สร้างหน้าด้วย "[[ภาพ:Symbol reply.svg|15px]] {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ตอบคำถาม''' <u>ในหน้าเสนอชื่อเพื่อเป็นผู้ดูแล</u> โดยคัดลอกข้อความนี้ <pre> * {{ตอบ|ตอบคำถาม}} --~~~~ </pre> วางเป็นรายการของผู..." 130 wikitext text/x-wiki [[ภาพ:Symbol reply.svg|15px]] {{{1|}}} <noinclude><br/> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ตอบคำถาม''' <u>ในหน้าเสนอชื่อเพื่อเป็นผู้ดูแล</u> โดยคัดลอกข้อความนี้ <pre> * {{ตอบ|ตอบคำถาม}} --~~~~ </pre> วางเป็นรายการของผู้ที่แสดงความเห็น จะได้ผลดังนี้ * {{ตอบ|ตอบคำถาม}} --(ชื่อผู้ลงคะแนน) == ดูเพิ่ม == * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> fnbnsbyicg2enqnkx4vt40ynrkxmym3 แม่แบบ:ความคิด 10 52 133 132 2025-10-19T14:56:04Z Wutkh 9 133 wikitext text/x-wiki [[File:Bulbgraph.svg|18px|link=|alt=]] '''{{{1|คิดว่า:}}}'''<!--แม่แบบ:ความคิด--><noinclude> == การใช้งาน == แม่แบบนี้ใช้สำหรับ '''ออกความคิดเห็น''' {| class="wikitable" !Template !! Result |- |{{tl|ความคิด}} || {{ความคิด}} |- |<nowiki>{{ความคิด|ใส่ความคิดเห็นตรงนี้}}</nowiki> || {{ความคิด|ใส่ความคิดเห็นตรงนี้}} |} ตัวอย่างเช่น * {{ความคิด|ถ้าสร้างแม่แบบความคิดน่าจะดี}} --[[ผู้ใช้:Example|Example]] * {{ความคิด}} ถ้าสร้างแม่แบบความคิดน่าจะดี --[[ผู้ใช้:Example|Example]] == ดูเพิ่ม == * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความเห็น}} - {{ความเห็น}} </noinclude> cq58bdn22mngo8fjqsfz2t1dqi9bjfj แม่แบบ:ความเห็น 10 53 135 134 2025-10-19T15:05:35Z Wutkh 9 135 wikitext text/x-wiki [[File:Pictogram voting comment.svg|15px|link=]]&nbsp;'''ความเห็น'''<noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับ '''ออกความเห็น''' โดยคัดลอกข้อความนี้ <pre> * {{ความเห็น}} --~~~~ </pre> จะได้ผลดังนี้ * {{ความเห็น}} ใส่ความเห็นตรงนี้ -- (ชื่อผู้ออกความเห็น) == ดูเพิ่ม == * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} </noinclude> ci6nfjriybdqv19mcvbwr8dhlifz431 25 ปีวิกิพีเดีย 0 54 186 185 2025-11-09T11:01:18Z Waniosa Amedestir 95 /* กิจกรรมออนไลน์ */ 186 wikitext text/x-wiki [[ไฟล์:WP25-TH-Full colour 01.svg|200px|frameless|center]] ด้วย[[meta:Wikipedia 25|วิกิพีเดียจะมีอายุครบ 25 ปี]] (นับแต่วันก่อตั้ง) ในวันที่ 15 มกราคม พ.ศ. 2569 จึงขอเรียนเชิญอาสาสมัครวิกิพีเดียภาษาไทยร่วมกันเป็นส่วนหนึ่งในการจัดกิจกรรมเฉลิมฉลองในโอกาสดังกล่าว ดังนี้ * เสนอแนะกิจกรรมที่อยากให้จัดและคำแนะนำต่าง ๆ (ร่วมทั้งลงคะแนนเสียงเห็นด้วย/ไม่เห็นด้วย) * เสนอตัวเองเป็นอาสาสมัครจัดกิจกรรม มูลนิธิวิกิมีเดียและวิกิมีเดียประเทศไทย[[#การสนับสนุนจากมูลนิธิวิกิมีเดียและวิกิมีเดียประเทศไทย|จะให้การสนับสนุน]]ทุนในการจัดกิจกรรมและทรัพยากรในการเฉลิมฉลองโอกาสสำคัญนี้ เพียง'''ขอให้กล้า!''' == เกณฑ์การพิจารณาดำเนินการกิจกรรม == * เกณฑ์เชิงปริมาณ ณ วันที่ 9 พฤศจิกายน พ.ศ. 2568 ** มีผู้สนับสนุนไม่น้อยกว่า 5 คน ** มีอาสาสมัครผู้จัดไม่น้อยกว่าจำนวนที่กำหนด คือ *** กิจกรรมออนไลน์ 2 คน *** กิจกรรมในสถานที่ฯ (ออนไซต์) และกิจกรรมผสมผสาน 3 คน * เกณฑ์เชิงคุณภาพ ** มีความคุ้มค่าต่องบประมาณที่ลงทุน ** สร้างแรงกระทบต่อชุมชนวิกิพีเดียโดยรวมได้ == กิจกรรมออนไลน์ == {| class="wikitable" |+ กิจกรรมออนไลน์ |- ! กิจกรรมพร้อมรายละเอียด ! ความเห็น ! ประสงค์เป็นผู้จัด |- style="vertical-align: top;" | * '''กิจกรรมตอบปัญหา'''แนวรายการ[[w:th:แฟนพันธุ์แท้|แฟนพันธุ์แท้]]บนดิสคอร์ดชุมชนวิกิมีเดียภาษาไทย (15 มกราคม พ.ศ. 2569 หรือวันที่ใกล้เคียง) --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) | * {{เห็นด้วย}} ใช้ต้นทุนน้อย สร้าง engagement และมีทรัพยากรบุคคลที่ดีอย่าง {{ตอบถึง|Tvcccp}} ชำนาญในเรื่องนี้ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 22:08, 19 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Ddjingjing|Ddjingjing]] ([[คุยกับผู้ใช้:Ddjingjing|คุย]]) 07:42, 31 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] ([[คุยกับผู้ใช้:Waniosa Amedestir|คุย]]) 18:01, 9 พฤศจิกายน 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} ได้เสมอแต่มาคุยกันก่อน ไม่อยู่ในประเทศไทยประมาณเดือนเมษายนเป็นต้นไปครับ [[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) |- style="vertical-align: top;" | * '''กิจกรรมสนับสนุน[[w:th:วิกิพีเดีย:วันนี้ในอดีต|บทความวันนี้ในอดีต]]''' (ไตรมาสแรก พ.ศ. 2569) --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) | * {{เห็นด้วย}} ภาคต่อบทความรู้ไหมว่าและบทความแนะนำ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:บุญพฤทธิ์ ทวนทัย|บุญพฤทธิ์ ทวนทัย]] ([[คุยกับผู้ใช้:บุญพฤทธิ์ ทวนทัย|คุย]]) 16:35, 21 ตุลาคม 2568 (+07) * {{เห็นด้วย}}--[[ผู้ใช้:Angkun-ane|Angkun-ane]] ([[คุยกับผู้ใช้:Angkun-ane|คุย]]) 16:47, 21 ตุลาคม 2568 (+07) *{{เห็นด้วย}} --[[ผู้ใช้:JustRandomThai|JustRandomThai]] ([[คุยกับผู้ใช้:JustRandomThai|คุย]]) 10:53, 22 ตุลาคม 2568 (+07) *{{เห็นด้วย}} — [[ผู้ใช้:PolaX3|<span style="color: darkgreen">Pola</span><span style="color: darkred">X</span><span style="color: darkgreen">3</span>]] [[คุยกับผู้ใช้:PolaX3|💬]]|[[พิเศษ:เรื่องที่เขียน/PolaX3|📝]] 22:37, 22 ตุลาคม 2568 (+07) *{{เห็นด้วย}} --[[ผู้ใช้:Ddjingjing|Ddjingjing]] ([[คุยกับผู้ใช้:Ddjingjing|คุย]]) 07:42, 31 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] ([[คุยกับผู้ใช้:Waniosa Amedestir|คุย]]) 18:01, 9 พฤศจิกายน 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} ได้เสมอแต่มาคุยกันก่อน ไม่อยู่ในประเทศไทยประมาณเดือนเมษายนเป็นต้นไปครับ [[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) |- style="vertical-align: top;" | * '''กิจกรรมหา[[meta:Wikipedia 25/Easter egg experiments|ไข่อีสเตอร์]]''' (15 มกราคม - 15 กุมภาพันธ์ พ.ศ. 2569) --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 20:56, 22 ตุลาคม 2568 (+07) | * {{เห็นด้วย}} น่าจะสนุกแน่นอน / รับทราบเรื่องนี้จาก staff ของ WMF ซึ่งน่าสนใจมาก โดยเน้นย้ำว่าไม่บดบังเหนือซ่อนเร้นเนื้อหาใดและไม่ใช้คุกกี้มากกว่าที่เคยใช้แน่นอน แต่ต้องขอแรงสนับสนุนจากชุมชนเพื่อแจ้งต่อ WMF ต่อไป --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 20:56, 22 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 11:16, 24 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:แอนเดอร์สัน|แอนเดอร์สัน]] ([[คุยกับผู้ใช้:แอนเดอร์สัน|คุย]]) 00:21, 31 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Ddjingjing|Ddjingjing]] ([[คุยกับผู้ใช้:Ddjingjing|คุย]]) 07:42, 31 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Siam2019|Siam2019]] ([[คุยกับผู้ใช้:Siam2019|คุย]]) 14:44, 1 พฤศจิกายน 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] ([[คุยกับผู้ใช้:Waniosa Amedestir|คุย]]) 18:01, 9 พฤศจิกายน 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} รับเป็นผู้ประสานงานกับทาง WMF เพื่อให้ดำเนินงานได้ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 20:56, 22 ตุลาคม 2568 (+07) |- <!--คัดลอกบรรทัดนี้จนถึงบรรทัดที่ระบุเพื่อแนะนำกิจกรรมใหม่ --> style="vertical-align: top;" | * '''ตัวอย่างชื่อกิจกรรม''' แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> | <!-- หากประสงค์จะแสดงความคิดเห็น โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย}} กรณีเห็นด้วย แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> * {{ไม่เห็นด้วย}} กรณีไม่เห็นด้วย แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} กรณีประสงค์เป็นอาสาสมัคร (กรุณาระบุข้อจำกัดด้วย) แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki><!--คัดลอกจนถึงบรรทัดนี้เพื่อแนะนำกิจกรรมใหม่ --> |} == กิจกรรมในสถานที่หนึ่งร่วมกัน (หรือกระจายตามภูมิภาค) == {| class="wikitable" |+ กิจกรรมในสถานที่หนึ่งร่วมกัน |- ! กิจกรรมพร้อมรายละเอียด ! ความเห็น ! ประสงค์เป็นผู้จัด |- style="vertical-align: top;" | * '''สัมมนา [[w:th:ปัญญาประดิษฐ์|AI]] vs วิกิพีเดีย''' (ภายในเดือนมกราคม พ.ศ. 2569) --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) | * {{เห็นด้วย}} โลก AI มาแรง ทุกวันนี้ตรวจทานบทความก็ขอ AI มาช่วย ต้องสัมมนาฟังคนเก่ง ๆ มาคุยกันครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) * {{เห็นด้วย}}--[[ผู้ใช้:Angkun-ane|Angkun-ane]] ([[คุยกับผู้ใช้:Angkun-ane|คุย]]) 16:47, 21 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 06:29, 26 ตุลาคม 2568 (+07) * {{เห็นด้วย}} -[[ผู้ใช้:Ddjingjing|Ddjingjing]] ([[คุยกับผู้ใช้:Ddjingjing|คุย]]) 07:48, 31 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] ([[คุยกับผู้ใช้:Waniosa Amedestir|คุย]]) 18:00, 9 พฤศจิกายน 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} ได้จนถึงเมษายน เพราะจะไปเรียนต่อต่างประเทศครับ [[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) |- style="vertical-align: top;" | * '''เสวนานักเขียน vs นักอ่าน''' (ภายในเดือนมกราคม พ.ศ. 2569) --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) | * {{เห็นด้วย}} มาปรับทัศนคติทั้งคู่กันครับ 555555 // จริง ๆ คืออยากดูความเห็นของแต่ละฝ่ายว่ามีคาดหวังหรือต้องการอะไร จะได้หาแนวทางกันและกัน ทุกคนสมประโยชน์ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} ได้จนถึงเมษายน เพราะจะไปเรียนต่อต่างประเทศครับ [[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) |- style="vertical-align: top;" | * '''Meetup and Photowalk''' (ภายในไตรมาสแรก) --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 22:07, 19 ตุลาคม 2568 (+07) | * {{เห็นด้วย}} งานสเกลเล็ก วิกิมีเดียประเทศไทยมีประสบการณ์ และ {{ความคิด|เสนอว่าจัด 4 ภาค}}เพื่อให้มีโอกาสได้พบเจอกับอาสาสมัครหลาย ๆ ที่ เพิ่มเนื้อหาในวิกิพีเดีย และเปิดโอกาสทำประชาพิจารณ์แบบพบปะได้ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 20:57, 23 ตุลาคม 2568 (+07) * {{เห็นด้วย}} -[[ผู้ใช้:Ddjingjing|Ddjingjing]] ([[คุยกับผู้ใช้:Ddjingjing|คุย]]) 07:48, 31 ตุลาคม 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} ได้จนถึงเมษายน เพราะจะไปเรียนต่อต่างประเทศครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 20:57, 23 ตุลาคม 2568 (+07) |- style="vertical-align: top;" | * '''Photowalk Nonthaburi: Wikipedia 25 Edition''' (ภายในธันวาคม 2568 - มกราคม 2569) --[[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 06:29, 26 ตุลาคม 2568 (+07) | <!-- หากประสงค์จะแสดงความคิดเห็น โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย}} เป็นงานสเกลเล็ก จากพิพิธภัณฑ์ราชทัณฑ์ กรมราชทัณฑ์ ถึงพิพิธภัณฑ์จังหวัดนนทบุรี (จัดครึ่งวัน) --[[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 06:29, 26 ตุลาคม 2568 (+07) * {{เห็นด้วย}} ของกินอร่อย เรื่องราวน่าสนใจ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 13:30, 28 ตุลาคม 2568 (+07) * {{เห็นด้วย}} ถ้ามีโอกาสก็อยากไปเยี่ยมชมสถานที่ดังกล่าวครับ -[[ผู้ใช้:Ddjingjing|Ddjingjing]] ([[คุยกับผู้ใช้:Ddjingjing|คุย]]) 07:48, 31 ตุลาคม 2568 (+07) * {{เห็นด้วย}} --[[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] ([[คุยกับผู้ใช้:Waniosa Amedestir|คุย]]) 18:00, 9 พฤศจิกายน 2568 (+07) | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}}ประสงค์ที่จะลงดูพื้นที่สถานที่ล่วงหน้าเพื่อเตรียมความพร้อมในเส้นทาง จุดพักและจุดนัดพบ --[[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 06:29, 26 ตุลาคม 2568 (+07) * {{เห็นด้วย|ยินดี}} เช่นเดียวกับที่ได้กล่าวไปก่อนหน้านี้ครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 13:30, 28 ตุลาคม 2568 (+07) |- <!--คัดลอกบรรทัดนี้จนถึงบรรทัดที่ระบุเพื่อแนะนำกิจกรรมใหม่ --> style="vertical-align: top;" | * '''ตัวอย่างชื่อกิจกรรม''' แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> | <!-- หากประสงค์จะแสดงความคิดเห็น โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย}} กรณีเห็นด้วย แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> * {{ไม่เห็นด้วย}} กรณีไม่เห็นด้วย แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} กรณีประสงค์เป็นอาสาสมัคร (กรุณาระบุข้อจำกัดด้วย) แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki><!--คัดลอกจนถึงบรรทัดนี้เพื่อแนะนำกิจกรรมใหม่ --> |} == กิจกรรมผสมแบบออนไลน์และในพื้นที่ร่วมกัน ณ เวลาเดียวกัน (hybrid) == ในข้อนี้หมายถึงยุบออนไลน์และกิจกรรมในพื้นที่มาไว้รวมกัน อย่างที่เคยเห็นในการประชุมช่วงโควิด มักจัดในสถานที่มีความพร้อมทางเทคนิคและใช้บุคลากรที่มีความเชี่ยวชาญ (มีต้นทุนสูง) หากไม่พร้อมหรือไม่เชี่ยวชาญมักจะเกิดปัญหาติดขัดดูไม่เป็นมืออาชีพ ในเบื้องต้นเฉพาะสำหรับงานนี้ด้วยทรัพยากรที่มีอยู่ ผมไม่เห็นด้วยให้ทำ hybrid เพราะว่ายังไม่พร้อมหรือยังไม่คุ้ม เสนอให้ดำเนินการได้ทั้งสองอย่างข้างต้นแยกกัน (หรือให้คนที่ไม่เข้ามาร่วมอัดเทปมาเสนอได้ในงานในพื้นที่) หรือ เลือกจัดเพียงวิธีเดียวไปก่อนก็ได้ตามความเหมาะสม ป.ล. ได้เสนอความเห็นนี้ปากเปล่าไปแล้ว เสนออีกครั้งในรูปแบบข้อความให้ชัดเจนอีกครั้งเพื่อเป็นหลักฐาน ยินดีรับความคิดเห็นต่าง รวมทั้งอาสาสมัครหรือผู้สนับสนุนที่จะทำให้ hybrid เป็นจริงได้ --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 07:30, 23 ตุลาคม 2568 (+07) :รับทราบและขอบคุณสำหรับความเห็นครับ {{เห็นด้วย}} ในแง่ที่จะควรแยกกันด้วยข้อจำกัดหลายประการ ผมขออนุญาตจัดทำตารางส่วนของกิจกรรม hybrid ด้านล่างนี้เพื่อเปิดโอกาสให้ได้เสนอกันครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 20:50, 23 ตุลาคม 2568 (+07) {| class="wikitable" |+ กิจกรรมแบบผสม |- ! กิจกรรมพร้อมรายละเอียด ! ความเห็น ! ประสงค์เป็นผู้จัด |- <!--คัดลอกบรรทัดนี้จนถึงบรรทัดที่ระบุเพื่อแนะนำกิจกรรมใหม่ --> style="vertical-align: top;" | * '''ตัวอย่างชื่อกิจกรรม''' แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> | <!-- หากประสงค์จะแสดงความคิดเห็น โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย}} กรณีเห็นด้วย แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> * {{ไม่เห็นด้วย}} กรณีไม่เห็นด้วย แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki> | <!-- หากประสงค์เป็นอาสาสมัครจัดกิจกรรม โปรดลงชื่อช่องนี้ --> * {{เห็นด้วย|ยินดี}} กรณีประสงค์เป็นอาสาสมัคร (กรุณาระบุข้อจำกัดด้วย) แล้วลงชื่อด้วย <nowiki>--~~~~</nowiki><!--คัดลอกจนถึงบรรทัดนี้เพื่อแนะนำกิจกรรมใหม่ --> |} == ความคิดเห็นภาพรวม == # เป็นโอกาสอันดีที่จะทำให้เกิดผลกระทบและแรงกระเพื่อมให้ชุมชนอาสาสมัครในประเทศไทยรวมถึง movement ในระดับนานาชาติได้ ประเด็นสำคัญคือ 1. หาอาสาสมัครเพิ่ม 2. พัฒนาอาสาสมัครเดิมให้เข้มแข็ง และ 3.หาโอกาสพัฒนาการใช้งานโครงการของวิกิมีเดียให้มากขึ้นหรือในรูปแบบที่แตกต่างออกไปตามยุคสมัย (ยุค AI) --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 20:03, 20 ตุลาคม 2568 (+07) # เพื่อไม่ให้เป็น[[:w:th:การนำกระดิ่งไปแขวนคอแมว|การนำกระดิ่งไปแขวนคอแมว]] อยากให้ทุกท่านที่ลงชื่อสนับสนุนกิจกรรมระบุให้ชัดเจนเลยว่ายินดีอาสาลงแรงในกิจกรรมนั้นด้วยมากน้อยอย่างไร --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 20:03, 20 ตุลาคม 2568 (+07) # ในกรณีทรัพยากรไม่เพียงพอสำหรับทุกกิจกรรม (ไม่ได้หมายถึงเงินอย่างเดียว แต่หมายถึงคนอาสาสมัคร เวลา/โอกาส หรือพื้นที่) จะให้ลำดับความสำคัญของกิจกรรมใด ณ ช่องทางหรือสถานที่ใดมาก่อน หากท่านลงชื่อทุกกิจกรรมน่าจะมีลำดับความสำคัญได้ (เช่น เอากิจกรรมในลักษณะ hybrid ไว้ลำดับความสำคัญแรกสุดหรือท้ายสุด เนื่องจากแต่ละคนมองความยากง่ายของการจัด hybrid ไม่เหมือนกันควรจะแถลงออกมาให้ชัดเจน) --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 20:03, 20 ตุลาคม 2568 (+07) #:ขอขอบคุณสำหรับคำแนะนำนะครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 15:28, 21 ตุลาคม 2568 (+07) #:: {{ping|Wutkh}} ดูน่ากังวลว่าการมีส่วนร่วมจากที่ลงชื่อด้านบนยังค่อนข้างน้อย และยังไม่มีอาสาสมัครท่านอื่นลงชื่อเป็นผู้จัดร่วมด้วยเลยนะครับ เสนอว่า ก. อาจจะต้องยุบเหลือออนไลน์อย่างเดียวหากไม่มีผู้ลงชื่อถึงจำนวนที่คาดหมาย และ ข. สื่อสารประชาสัมพันธ์ไปให้ทราบทั่วกันว่าจะตั้งเป้าคนลงชื่อที่จำนวนขั้นต่ำ x ภายในวันที่ y เพื่อให้การจัดกิจกรรมดำเนินต่อไปได้ --[[ผู้ใช้:Taweetham|Taweetham]] ([[คุยกับผู้ใช้:Taweetham|คุย]]) 10:37, 30 ตุลาคม 2568 (+07) #:::{{ตอบถึง|Taweetham}} ขอบคุณครับ คงขอขยายเวลาไปอีก 1 สัปดาห์ ทำโฆษณาแบบเจาะกลุ่มเป้าหมาย และจำกัดกิจกรรมไปที่ที่มีอาสาสมัครผู้จัดมากกว่า 2 ท่านเป็นหลักครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 17:58, 30 ตุลาคม 2568 (+07) == คำแนะนำ == * ท่านสามารถแสดงความคิดเห็นหรือเสนอตัวโดยการแก้ไขหน้านี้ได้โดยเสรีและเป็นไปตาม[[w:th:WP:5P|ห้าเสาหลัก]] และขอความร่วมมือให้ลงชื่อทุกครั้งโดยการพิมพ์ <nowiki>--~~~~</nowiki> ต่อท้ายข้อความเสมอ * เพื่อความสะดวกและความเป็นระเบียบเรียบร้อย อาจพิจารณาใช้แม่แบบด้านล่างนี้เพื่อประกอบความคิดเห็นของท่าน === รวมแม่แบบความคิดเห็น === * {{Tl|เห็นด้วย}} - {{เห็นด้วย}} * {{Tl|เป็นกลาง}} - {{เป็นกลาง}} * {{Tl|ไม่เห็นด้วย}} - {{ไม่เห็นด้วย}} * {{Tl|สำเร็จ}} - {{สำเร็จ}} * {{Tl|ไม่สำเร็จ}} - {{ไม่สำเร็จ}} * {{Tl|ถาม}} - {{ถาม}} * {{Tl|ตอบ}} - {{ตอบ}} * {{Tl|ความคิด}} - {{ความคิด}} * {{Tl|ความเห็น}} - {{ความเห็น}} == การสนับสนุนจากมูลนิธิวิกิมีเดียและวิกิมีเดียประเทศไทย == ในโอกาสอันสำคัญนี้ มูลนิธิวิกิมีเดียและวิกิมีเดียประเทศไทยยินดีให้การสนับสนุนงบประมาณและทรัพยากรต่าง ๆ ตามสมควร โดยผู้ที่ประสงค์จะขอทุนสนับสนุนจากมูลนิธิวิกิมีเดียสามารถศึกษารายละเอียดเพิ่มเติมได้ที่[[meta:Wikipedia 25/Grants|เมทาวิกิ]] โดยรอบการขอทุนรอบที่หนึ่ง<span style="color:red;">จะสิ้นสุดลงในวันที่ 1 พฤศจิกายน พ.ศ. 2568</span> {{Ping|Wutkh}} จะเป็นอาสาสมัครที่ให้ผู้ประสานงานหลักเบื้องต้นสำหรับการติดต่อระหว่างวิกิมีเดียประเทศไทยกับอาสาสมัครในเรื่องนี้ 2kpt3ek9hoft75y669icx1j6h5rf8lf คุยกับผู้ใช้:Wutkh 3 56 164 2025-10-24T08:18:28Z Wutkh 9 สร้างหน้าด้วย "โปรดใช้[[w:th:คุยกับผู้ใช้:Wutkh|หน้าพูดคุยบนวิกิพีเดียภาษาไทย]]เพื่อความรวดเร็ว ขอบคุณครับ --~~~~" 164 wikitext text/x-wiki โปรดใช้[[w:th:คุยกับผู้ใช้:Wutkh|หน้าพูดคุยบนวิกิพีเดียภาษาไทย]]เพื่อความรวดเร็ว ขอบคุณครับ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 15:18, 24 ตุลาคม 2568 (+07) 6tc4fiv6ixus9p44xpdr14rh7ikft5m วิกิมีเดียประเทศไทย:กิจกรรม 4 57 167 2025-10-24T13:49:47Z Wutkh 9 สร้างหน้าด้วย "{{Header}} == กิจกรรมในขณะนี้ == * 19 ตุลาคม — อภิปรายการจัดกิจกรรม [[25 ปีวิกิพีเดีย]] (อภิปรายถึง 2 พฤศจิกายน พ.ศ. 2568) * 1 ตุลาคม — เริ่มกิจกรรม [[m:Wikimedia Thailand/GLAM–Museum 2025|GLAM–Museum 2025]] (ปิดรับบทความ 31 ธัน..." 167 wikitext text/x-wiki {{Header}} == กิจกรรมในขณะนี้ == * 19 ตุลาคม — อภิปรายการจัดกิจกรรม [[25 ปีวิกิพีเดีย]] (อภิปรายถึง 2 พฤศจิกายน พ.ศ. 2568) * 1 ตุลาคม — เริ่มกิจกรรม [[m:Wikimedia Thailand/GLAM–Museum 2025|GLAM–Museum 2025]] (ปิดรับบทความ 31 ธันวาคม 2568) * 10 กันยายน — เปิดรับสมัคร[[wikimania:2026:Scholarships|ทุนเดินทางวิกิเมเนีย 2026]] (ปิดรับสมัคร 31 ตุลาคม 2568) == กิจกรรมที่ผ่านมา == โปรดดูเพิ่มเติม[[วิกิมีเดียประเทศไทย:เส้นเวลา]] 94ort9ezzesky60dof146913xaje889 ผู้ใช้:Santi Chaimee/vector-2022.js 2 58 184 2025-11-01T17:25:15Z Santi Chaimee 130 สร้างหน้าด้วย " chaymisanti7@gmail.com" 184 javascript text/javascript chaymisanti7@gmail.com hw7sg40g8evgxtlzvztic44s22ibptf 25 ปีวิกิพีเดีย/ปฏิทิน 0 59 229 228 2025-11-20T12:55:58Z Sawasdeeee 60 /* ลงชื่อขอรับปฏิทิน */ 229 wikitext text/x-wiki [[ไฟล์:WP25-TH-Full colour 01.svg|200px|frameless|center]] เนื่องในวาระดิถึขึ้นปีใหม่ พ.ศ. 2569 วิกิมีเดียประเทศไทยได้สนับสนุนปฏิทินตั้งโต๊ะขนาด 6" × 8" แก่อาสาสมัครในชุมชนวิกิพีเดียและโครงการพี่น้องภาษาไทยรวมถึงภาคส่วนที่เกี่ยวเนื่องกัน จึงขอเรียนเชิญทุกท่านโปรดลงชื่อเพื่อแสดงความจำนงขอรับปฏิทินจัดส่งถึงที่อยู่ในประเทศไทยโดยไม่มีค่าใช้จ่ายใด ๆ ทั้งสิ้น ตั้งแต่บัดนี้ถึววันอาทิตย์ที่ 30 พฤศจิกายน พ.ศ. 2568 (23:59 น. UTC+7) ที่ด้านล่างของหน้านี้ ทั้งนี้ เรายินดีเป็นอย่างยิ่งที่ท่านจะได้สร้างกัลยาณมิตรและเครือข่ายให้แก่ตัวท่านเองและวิกิมีเดียประเทศไทยด้วยการใช้ปฏิทินเป็นสื่อกลาง เนื่องจากปฏิทินผลิตจำนวนจำกัดในโอกาสเฉลิมฉลองครบรอบ 25 ปีวิกิพีเดีย ตามประมาณการเบื้องต้นขอจำกัดจำนวนผู้ลงชื่อไม่เกิน 50 ท่าน ท่านละไม่เกิน 5 เล่ม <small> * ท่านไม่สามารถรับปฏิทินด้วยตนเอง วิกิมีเดียประเทศไทยจะจัดส่งให้ท่านทางไปรษณีย์ไทยหรือขนส่งเอกชนเท่านั้น โดยใช้บริการระดับลงทะเบียนหรือเทียบเท่าที่สามารถตรวจสอบสถานะการจัดส่งได้ทางอินเทอร์เน็ต * กรณีที่มีผู้ลงชื่อเกิน 50 ท่าน จะพิจารณาจัดสรรตามความเหมาะสม แม้จะมีผู้ลงชื่อไม่เกิน 50 ท่าน ขอสงวนสิทธิ์จัดสรรให้มากหรือน้อยกว่าจำนวนที่ท่านแจ้งความประสงค์ดั้งเดิมด้วยเหตุผลทางการปฏิบัติการ * มิได้กีดกันการจัดส่งไปต่างประเทศแต่ต้องพิจารณาตามความจำเป็นและเหมาะสมให้รอบคอบ โดยเฉพาะต้องคำนึงถึงการปฏิบัติตามพิธีการศุลกากรของประเทศปลายทางและต้นทุนการจัดส่งด้วย </small> == ลงชื่อขอรับปฏิทิน == วิธีการลงชื่อ ให้ท่านลงชื่อด้วยการลงในจำนวนท่านต้องการ (จำกัดสูงสุดที่ 5 เล่มต่อท่าน) *เมื่อท่านแก้ไขด้วยเมนู "แก้ไขต้นฉบับ" (Text editor) ให้พิมพ์ <nowiki># ~~~~</nowiki> ที่บรรทัดใหม่ต่อจากคนล่าสุดในจำนวนที่ต้องการ *เมื่อท่านแก้ไขด้วยเมนู "แก้ไข" (Visual editor) แทรกลายเซ็นด้วยกดปุ่ม แทรก > ลายเซ็น ที่บรรทัดใหม่ต่อจากคนล่าสุดในจำนวนที่ต้องการ (ต้องมีเลขลำดับที่นำหน้า) การลงชื่อจะสมบูรณ์เมื่อปรากฏลายเซ็นของท่าน (ค่าเริ่มต้น จะเป็นชื่อผู้ใช้ (คุย) ตามด้วยวันและเวลาที่ลงชื่อ) และสงวนสิทธิ์สำหรับผู้ใช้บัญชีที่ไม่ลงทะเบียน ;1 เล่ม # [[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 10:44, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Patsagorn Y.|Patsagorn Y.]] ([[คุยกับผู้ใช้:Patsagorn Y.|คุย]]) 16:16, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Chainwit.|Chainwit.]] ([[คุยกับผู้ใช้:Chainwit.|คุย]]) 16:28, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:วณิพก|วณิพก]] ([[คุยกับผู้ใช้:วณิพก|คุย]]) 15:03, 17 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Guntipet|Guntipet]] ([[คุยกับผู้ใช้:Guntipet|คุย]]) 21:12, 18 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:ไทๆ|ไทๆ]] ([[คุยกับผู้ใช้:ไทๆ|คุย]]) 05:15, 20 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Sawasdeeee|Sawasdeeee]] ([[คุยกับผู้ใช้:Sawasdeeee|คุย]]) 19:55, 20 พฤศจิกายน 2568 (+07) ;2 เล่ม # [[ผู้ใช้:Tvcccp|Tvcccp]] ([[คุยกับผู้ใช้:Tvcccp|คุย]]) 11:24, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Kaojinapong|Kaojinapong]] ([[คุยกับผู้ใช้:Kaojinapong|คุย]]) 12:25, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Poonpun2016|Poonpun2016]] ([[คุยกับผู้ใช้:Poonpun2016|คุย]]) 20:49, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:Just Sayori|Just Sayori]] ([[คุยกับผู้ใช้:Just Sayori|คุย]]) 22:01, 16 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:ร้อยตรี โชคดี|ร้อยตรี โชคดี]] ([[คุยกับผู้ใช้:ร้อยตรี โชคดี|คุย]]) 00:25, 19 พฤศจิกายน 2568 (+07) # [[ผู้ใช้:JustRandomThai|Thailand2763]] ([[คุยกับผู้ใช้:JustRandomThai|Talk?]]) 08:33, 19 พฤศจิกายน 2568 (+07) ;3 เล่ม # ;4 เล่ม # ;5 เล่ม # == การจัดสรร == ภายในวันที่ 3 ธันวาคม พ.ศ. 2568 โปรดตรวจสอบรายชื่อการจัดสรรปฏิทินฯ ที่หน้านี้อีกครั้ง โดยท่านจะต้องยืนยันสิทธิ์โดยการแจ้งข้อมูลการจัดส่ง (ชื่อและที่อยู่ของผู้รับ สำหรับขนส่งเอกชนอาจต้องใช้หมายเลขโทรศัพท์ด้วย) ภายใน 7 ธันวาคม พ.ศ. 2568 เวลา 12:00 น. (เที่ยงวัน UTC+7) หากมีผู้ไม่ยืนยันสิทธิ์ในเวลาที่กำหนดบางท่านอาจได้รับเล่มมากกว่าที่จัดสรรเบื้องต้นเนื่องจากปฏิทินเป็น perishable inventory ที่ต้องแจกจ่ายในเวลาจำกัด == รูปแบบปฏิทิน == [[ไฟล์:Calendar 2026 from Wikimedia Thailand.pdf|thumb|center|ปฏิทินจากวิกิมีเดียประเทศไทย ประจำ พ.ศ. 2569]] ปฏิทินจากวิกิมีเดียประเทศไทย ประจำ พ.ศ. 2569 เป็นปฏิทินตั้งโต๊ะขนาด 6" × 8" ออกแบบโดยใช้กราฟิกจาก[[meta:Wikipedia 25|การเฉลิมฉลองครบรอบ 25 ปีวิกิพีเดีย]]ที่เป็นรูปจิ๊กซอว์ โดยแต่ละเดือนแสดงถึงวิกิพีเดีย โครงการพี่น้อง วิกิเมเนีย และวิกิมีเดียประเทศไทย โดยเลือกสรรบทความหรือองค์ประกอบอันเกี่ยวเนื่องกับสมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง เพื่อน้อมรำลึกในพระมหากรุณาธิคุณ ตั้งแต่เดือนมกราคมจนถึงเดือนตุลาคม และสงวนสองเดือนหลังสำหรับกลุ่มขับเคลื่อนวิกิมีเดียในประเทศไทย ทั้งนี้ภาพประกอบได้เลือกให้มีความหลากหลายในแง่ของอาสาสมัครผู้บันทึกหรือจัดทำภาพนั้น ดังนี้ * เดือนมกราคม เลือกบทความวิกิพีเดีย "วัดพระศรีรัตนศาสดาราม" ซึ่งเป็นบทความคัดสรร (วัดในรั้วเขตพระบรมมหาราชวัง ซึ่งสมเด็จพระพันปีหลวงเสร็จมาประกอบพระราชพิธีต่าง ๆ โดยเสด็จพระบาทสมเด็จพระเจ้าอยู่หัว รัชกาลที่ ๙ จนทรงพระประชวร) * เดือนกุมภาพันธ์ เลือกบทความวิกิพีเดีย "พระเมรุมาศ" ซึ่งเป็นบทความแนะนำ (คาดการณ์ว่าใน พ.ศ. 2569 จะมีพระราชพิธีถวายพระเพลิงพระบรมศพฯ) * เดือนมีนาคม เลือกบทความวิกิพีเดีย "เรือจักรีนฤเบศร์" ซึ่งสมเด็จพระพันปีหลวงทรงประกอบพิธีปล่อยเรือลงน้ำที่ประเทศสเปน * เดือนเมษายน เลือกหน้าวิกิพจนานุกรม "แม่ทัพ" ซึ่งเป็นลูกคำของคำว่า "แม่" ในฐานะทรงเป็น "แม่แห่งแผ่นดิน" และเข้ากับบริบทบ้านเมืองที่อยู่ท่ามกลางความขัดแย้งกับประเทศเพื่อนบ้านจนต้องใช้กำลังทหาร * เดือนพฤษภาคม เลือกหน้าวิกิคำคม "ธงไชย แมคอินไตย" เนื่องจากบุคคลดังกล่าวขับร้องบทเพลงเทิดพระเกียรติในหลายโอกาส และมีคำคมที่กล่าวถึงบุพการี (เช่นเดียวกับเดือนเมษายน) * เดือนมิถุนายน เลือกหน้าวิกิซอร์ซ "หนังสือสัญญากรุงเทพมหานครกับกรุงอังกริษเปนทางไมตรีค้าขายกัน" โดยสมเด็จพระพีนปีหลวงทรงมีพระราชเสาวนีย์ให้ศึกษาประวัติศาสตร์ชาติไทย * เดือนกรกฎาคม เลือกภาพจากวิกิมีเดียคอมมอนส์ "พระราชวังบางปะอิน" เนื่องจามีประวัติศาสตร์ยาวนานนับแต่สมัยอยุธยา (เช่นเดียวกับเดือนมิถุนายน) * เดือนสิงหาคม เลือกหน้าวิกิสปีชีส์ "''Mussaenda philippica''" ด้วยรัฐบาลฟิลิปปินส์ขอพระราชทานพระนามาภิไธย Queen Sirikit เป็นชื่อสายพันธุ์ย่อย * เดือนกันยายน เลือกหน้าวิกิตำรา "ภาษาไทย/ภาคผนวก/คำที่มักเขียนผิด" โดยแสดงเฉพาะคำ "ทศกัณฐ์" เนื่องจากเป็นตัวละครจากรามเกียรติ์อันเป็นบทละครที่แสดงในโขนในสมเด็จฯ * เดือนตุลาคม เลือกหน้าวิกิสนเทศ "ชุดไทยอัมรินทร์" เนื่องจากเป็นหนึ่งในชุดไทยพระราชนิยมที่สมเด็จพระพันปีหลวงทรงพระกรุณาโปรดฯ ให้จัดทำขึ้นเป็นชุดประจำชาติ โดยเลือกภาพเมื่อครั้งพระราชพิธีถวายพระเพลิงพระศพฯ ให้สอดคล้องกับการคาดการณ์พระราชพิธีฯ * เดือนพฤศจิกายน เลือก "วิกิเมเนีย" เพื่อประชาสัมพันธ์งานพบปะที่ใหญ่ที่สุดของกลุ่มขับเคลื่อนวิกิมีเดีย * เดือนธันวาคม เลือก "วิกิมีเดียประเทศไทย" เพื่อประชาสัมพันธ์องค์กรสาขาในประเทศไทย htozkujcpb15ih8ukx640p9xbbhygt9