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">{{</span>[[แม่แบบ:{{{1}}}|{{{1}}}]]<span class="nowrap">}}</span><noinclude>"
115
wikitext
text/x-wiki
<span class="nowrap">{{</span>[[แม่แบบ:{{{1}}}|{{{1}}}]]<span class="nowrap">}}</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=]]''' {{{1|สำเร็จ}}}'''</span>{{{{{|safesubst:}}}#if:{{{2|{{{note|{{{reason|}}}}}}}}}|: {{{2|{{{note|{{{reason}}}}}}}}}}}<!--แม่แบบ:สำเร็จ--><noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับประกอบความคิดเห็นในหน้าพูดคุย โดยใส่..."
120
wikitext
text/x-wiki
<span class="nowrap">[[ไฟล์:Yes check.svg|18px|link=|alt=]]''' {{{1|สำเร็จ}}}'''</span>{{{{{|safesubst:}}}#if:{{{2|{{{note|{{{reason|}}}}}}}}}|: {{{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=]] '''{{{1|ไม่สำเร็จ}}}'''</span><!--แม่แบบ:ไม่สำเร็จ--> <noinclude> == วิธีใช้ == แม่แบบนี้ใช้สำหรับประกอบความคิดเห็นในหน้าพูดคุย โดยใส่ <pre> {{ไม่สำเร็จ}} หรือ {{ไม่สำเร็..."
122
wikitext
text/x-wiki
<span class="nowrap">[[ไฟล์:X mark.svg|18px|link=|alt=]] '''{{{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] = '​'
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=]] '''ความเห็น'''<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