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.7
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
แม่แบบ: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
แม่แบบ: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
310
309
2025-11-24T04:59:19Z
Taweetham
7
310
wikitext
text/x-wiki
__NOTOC__
วิกิพีเดียและโครงการพี่น้องอื่น ๆ ในกลุ่มขับเคลื่อนวิกิมีเดียประกอบด้วยเนื้อหาเสรีที่เกิดจากการร่วมเขียนออนไลน์ นั่นคือ การรวมตัวโดยใจสมัครของปัจเจกบุคคลและกลุ่มทำงานเพื่อพัฒนาทรัพยากรความรู้ของมนุษย์ที่เป็นของส่วนรวม โครงสร้างของวิกิมีเดียเปิดให้ทุกคนที่เชื่อมต่ออินเทอร์เน็ตเปลี่ยนแปลงเนื้อหาได้ โปรดทราบว่าไม่จำเป็นที่เนื้อหาใด ๆ ในวิกิมีเดียนี้จะได้รับการสอบทานจากนักวิชาชีพที่มีความเชี่ยวชาญพอจะนำเสนอสารสนเทศที่ครบถ้วน แม่นยำ หรือเชื่อถือได้แก่คุณ
ที่กล่าวมาข้างต้น มิใช่ว่าคุณไม่อาจพบสารสนเทศอันทรงคุณค่าและแม่นยำได้จากวิกิมีเดีย อย่างไรก็ดี '''วิกิมีเดียประเทศไทยไม่อาจรับประกันความถูกต้องแม่นยำของสารสนเทศในเว็บไซต์เหล่านี้ได้''' เพราะเนื้อหาอาจเพิ่งถูกแก้ไข เปลี่ยนแปลง เพิ่มเข้าหรือตัดออก โดยบุคคลผู้มีความเห็นไม่สอดคล้องกับสถานะองค์ความรู้ปัจจุบันในสาขาที่เกี่ยวข้อง
<u>หมายเหตุ</u> สารานุกรมอื่น แหล่งข้อมูล และงานอ้างอิงส่วนใหญ่มีข้อปฏิเสธความรับผิดชอบที่คล้ายกันนี้
rh8y8jtmifju3eomxuopmzq6rm87rkd
วิกิมีเดียประเทศไทย:โครงสร้าง
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
434
264
2025-12-28T08:57:47Z
Wutkh
9
434
wikitext
text/x-wiki
{{กรุ}}
<span style="color:red;">สรุป: เนื่องจากไม่มีจำนวนอาสาสมัครลงนามเพียงพอตามเกณฑ์พิจารณา จึงส่งเรื่องคืนให้วิกิมีเดียประเทศไทยพิจารณาแนวทางการจัดกิจกรรมเพื่อเฉลิมฉลองอื่นตามสมควรต่อไป หากจะจัดกิจกรรมใดแล้ว วิกิมีเดียประเทศไทยจะได้เรียนแจ้งให้ทราบในโอกาสต่อไป ขอขอบคุณอาสาสมัครทุกท่านที่ร่วมเสนอแนะความคิดเห็น ณ โอกาสนี้ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 15:57, 28 ธันวาคม 2568 (+07)</span>
[[ไฟล์: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}} จะเป็นอาสาสมัครที่ให้ผู้ประสานงานหลักเบื้องต้นสำหรับการติดต่อระหว่างวิกิมีเดียประเทศไทยกับอาสาสมัครในเรื่องนี้
ltu0hmkdffvz9x4m0ka3a1frk02th5j
วิกิมีเดียประเทศไทย:กิจกรรม
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
25 ปีวิกิพีเดีย/ปฏิทิน
0
59
433
432
2025-12-14T09:46:07Z
Taweetham
7
/* รูปแบบปฏิทิน */
433
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>
== ลงชื่อขอรับปฏิทิน ==
{{:25 ปีวิกิพีเดีย/ปฏิทิน/หน้าย่อย}}
วิธีการลงชื่อ ให้ท่านลงชื่อด้วยการลงในจำนวนท่านต้องการ (จำกัดสูงสุดที่ 5 เล่มต่อท่าน)
*เมื่อท่านแก้ไขด้วยเมนู "แก้ไขต้นฉบับ" (Text editor) ให้พิมพ์ <nowiki># ~~~~</nowiki> ที่บรรทัดใหม่ต่อจากคนล่าสุดในจำนวนที่ต้องการ
*เมื่อท่านแก้ไขด้วยเมนู "แก้ไข" (Visual editor) แทรกลายเซ็นด้วยกดปุ่ม แทรก > ลายเซ็น ที่บรรทัดใหม่ต่อจากคนล่าสุดในจำนวนที่ต้องการ (ต้องมีเลขลำดับที่นำหน้าโดยการกดขึ้นบรรทัดใหม่จากท้ายคนก่อนหน้า)
การลงชื่อจะสมบูรณ์เมื่อปรากฏลายเซ็นของท่าน (ค่าเริ่มต้น จะเป็นชื่อผู้ใช้ (คุย) ตามด้วยวันและเวลาที่ลงชื่อ) และสงวนสิทธิ์ให้ลงชื่อเฉพาะผู้ใช้ที่มีบัญชีผู้ใช้ของวิกิมีเดีย (วิกิพีเดียและโครงการพี่น้อง) เท่านั้น
<small><small>
;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)
# [[ผู้ใช้:Supphachoke Sukjamlong|Supphachoke Sukjamlong]] ([[คุยกับผู้ใช้:Supphachoke Sukjamlong|คุย]]) 22:47, 20 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:NiratLover|NiratLover]] ([[คุยกับผู้ใช้:NiratLover|คุย]]) 00:00, 21 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:PPichit|PPichit]] ([[คุยกับผู้ใช้:PPichit|คุย]]) 13:38, 24 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] ([[คุยกับผู้ใช้:Waniosa Amedestir|คุย]]) 13:21, 28 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:GinkoLusitania|GinkoLusitania]] ([[คุยกับผู้ใช้:GinkoLusitania|คุย]]) 13:28, 28 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:Minener's|Minener's]] ([[คุยกับผู้ใช้:Minener's|คุย]]) 21:29, 30 พฤศจิกายน 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)
# [[ผู้ใช้:แอนเดอร์สัน|แอนเดอร์สัน]] ([[คุยกับผู้ใช้:แอนเดอร์สัน|คุย]]) 23:05, 25 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:Bank0303|Bank0303]] ([[คุยกับผู้ใช้:Bank0303|คุย]]) 13:15, 27 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:Jothefiredragon|Jothefiredragon]] ([[คุยกับผู้ใช้:Jothefiredragon|คุย]]) 19:46, 27 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:Ekminarin|Ekminarin]] ([[คุยกับผู้ใช้:Ekminarin|คุย]]) 12:57, 29 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:Siam2019|Siam2019]] ([[คุยกับผู้ใช้:Siam2019|คุย]]) 14:20, 29 พฤศจิกายน 2568 (+07)
;3 เล่ม
# [[ผู้ใช้:Edigines|Edigines]] ([[คุยกับผู้ใช้:Edigines|คุย]]) 02:29, 30 พฤศจิกายน 2568 (+07)
;4 เล่ม
#
;5 เล่ม
# [[ผู้ใช้:Tadano Earth|Tadano Earth]] ([[คุยกับผู้ใช้:Tadano Earth|คุย]]) 06:40, 24 พฤศจิกายน 2568 (+07)
# [[ผู้ใช้:PloveShin|PloveShin]] ([[คุยกับผู้ใช้:PloveShin|คุย]]) 13:49, 28 พฤศจิกายน 2568 (+07)
</small></small>
== การจัดสรร ==
ภายในวันที่ 3 ธันวาคม พ.ศ. 2568 โปรดตรวจสอบรายชื่อการจัดสรรปฏิทินที่หน้านี้อีกครั้ง
* โปรดเปิดรับวิกิเมล เราจะส่งลิงก์ให้ท่านทางอีเมลเท่านั้น
* สรุปรายชื่อผู้รับการจัดสรรจะมีสถานะดังตารางด้านล่างนี้
โดยท่านจะต้องยืนยันสิทธิ์โดยการแจ้งข้อมูลการจัดส่ง (ชื่อและที่อยู่ของผู้รับ สำหรับขนส่งเอกชนอาจต้องใช้หมายเลขโทรศัพท์ด้วย รวมถึงตอบ[[25 ปีวิกิพีเดีย/ปฏิทิน/แบบสำรวจ|แบบสำรวจ]]เกี่ยวกับของที่ระลึกที่ผลิตโดย WMTH) ภายใน 7 ธันวาคม พ.ศ. 2568 เวลา 12:00 น. (เที่ยงวัน UTC+7) หากมีผู้ไม่ยืนยันสิทธิ์ในเวลาที่กำหนดบางท่านอาจได้รับเล่มมากกว่าที่จัดสรรเบื้องต้นเนื่องจากปฏิทิน พ.ศ. 2569 เป็น ''perishable inventory'' ที่ต้องแจกจ่ายในเวลาจำกัด (ก่อนสิ้น พ.ศ. 2568)
;ตารางสถานะการจัดสรร
{{:25 ปีวิกิพีเดีย/ปฏิทิน/สถานะ}}
;แจ้งเพื่อโปรดทราบ
{{Ping|Wutkh|Patsagorn Y.|Chainwit.|วณิพก|Guntipet|ไทๆ|Sawasdeeee|Supphachoke Sukjamlong|NiratLover|PPichit|Waniosa Amedestir|GinkoLusitania|Minener's|Tvcccp|Kaojinapong|Just Sayori|ร้อยตรี โชคดี|JustRandomThai|แอนเดอร์สัน|Bank0303|Jothefiredragon|Ekminarin|Siam2019|Edigines|Tadano Earth|PloveShin}} วิกิมีเดียประเทศไทยได้แจ้งพัสดุให้ท่านทราบทางอีเมลที่ท่านแจ้งแล้ว โปรดสอบสอบกล่องขาเข้า (inbox) หรือกล่องขาเข้าของจดหมายขยะ (junk/spam) ในกรณีที่ใช้ Gmail หรือมีการรักษาความปลอดภัยของอีเมลบางประการ --[[ผู้ใช้:Wutkh|Wutkh]] ([[คุยกับผู้ใช้:Wutkh|คุย]]) 15:45, 8 ธันวาคม 2568 (+07)
== รูปแบบปฏิทิน ==
[[ไฟล์:Calendar 2026 (create outline) from Wikimedia Thailand.pdf|thumb|center|ปฏิทินจากวิกิมีเดียประเทศไทย ประจำ พ.ศ. 2569]]
ปฏิทินจากวิกิมีเดียประเทศไทย ประจำ พ.ศ. 2569 เป็นปฏิทินตั้งโต๊ะขนาด 6" × 8" ออกแบบโดยใช้กราฟิกจาก[[meta:Wikipedia 25|การเฉลิมฉลองครบรอบ 25 ปีวิกิพีเดีย]]ที่เป็นรูปจิ๊กซอว์ โดยแต่ละเดือนแสดงถึงวิกิพีเดีย โครงการพี่น้อง วิกิเมเนีย และวิกิมีเดียประเทศไทย โดยเลือกสรรบทความหรือองค์ประกอบอันเกี่ยวเนื่องกับ[[th:w:สมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง|สมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง]] เพื่อน้อมรำลึกในพระมหากรุณาธิคุณ ตั้งแต่เดือนมกราคมจนถึงเดือนตุลาคม และสงวนสองเดือนหลังสำหรับ[[:th:w:กลุ่มขับเคลื่อนวิกิมีเดีย|กลุ่มขับเคลื่อนวิกิมีเดีย]]ในประเทศไทย ทั้งนี้ภาพประกอบได้เลือกให้มีความหลากหลายในแง่ของอาสาสมัครผู้บันทึกหรือจัดทำภาพนั้น ดังนี้
{| class="wikitable"
|+ ปฏิทินวิกิมีเดียประเทศไทย พ.ศ. ๒๕๖๙
|-
! เดือน !! โครงการ !! บทความ !! รายละเอียด
|-
| มกราคม || [[:th:w:วิกิพีเดีย:บทความคัดสรร|บทความคัดสรร]][[:th:w:วิกิพีเดีย|วิกิพีเดีย]] || '''[[:th:w:วัดพระศรีรัตนศาสดาราม|วัดพระศรีรัตนศาสดาราม]]''' || วัดในรั้วเขตพระบรมมหาราชวัง ซึ่งสมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวงเสร็จมาประกอบพระราชพิธีต่าง ๆ โดยเสด็จพระบาทสมเด็จพระเจ้าอยู่หัว รัชกาลที่ ๙ จนทรงพระประชวรที่คณะแพทย์ถวายคำแนะนำให้งดทรงงาน
|-
| กุมภาพันธ์ || [[:th:w:วิกิพีเดีย:บทความแนะนำ|บทความแนะนำ]]วิกิพีเดีย || '''[[:th:w:พระเมรุมาศ|พระเมรุมาศ]]''' || งานสถาปัตยกรรมในพระราชพิธีถวายพระเพลิงพระบรมศพ ส่วนหนึ่งของ[[:th:w:การสวรรคตของสมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง|การสวรรคตของสมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง]]
|-
| มีนาคม || [[:th:w:วิกิพีเดีย:บทความคุณภาพ|บทความคุณภาพ]]วิกิพีเดีย || '''[[:th:w:เรือหลวงจักรีนฤเบศร|เรือหลวงจักรีนฤเบศร]]''' || สมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวงเสด็จไปทรงประกอบพิธีปล่อยเรือลงน้ำเมื่อ พ.ศ. 2539
|-
| เมษายน || [[:w:th:วิกิพจนานุกรม|วิกิพจนานุกรม]] || '''[[:wiktionary:th:แม่ทัพ|แม่ทัพ]]''' || เป็นลูกคำของคำว่า "[[:wiktionary:th:แม่|แม่]]" ในฐานะทรงเป็น "แม่แห่งแผ่นดิน" และเข้ากับบริบทบ้านเมืองที่อยู่ท่ามกลาง[[:w:th:วิกฤตการณ์ชายแดนไทย–กัมพูชา พ.ศ. 2568|ความขัดแย้งกับประเทศเพื่อนบ้าน]]จนต้อง[[:w:th:เหตุปะทะไทย–กัมพูชา พ.ศ. 2568|ใช้กำลังทหาร]]
|-
| พฤษภาคม || [[:w:th:วิกิคำคม|วิกิคำคม]] || '''[[:wikiquote:th:ธงไชย แมคอินไตย์|ธงไชย แมคอินไตย์]]''' || นักร้องที่มีชื่อเสียงมากในประเทศไทย ขับร้องบทเพลงเทิดพระเกียรติในหลายโอกาส และมีคำคมที่กล่าวถึงบุพการี (เช่นเดียวกับเดือนเมษายน)
|-
| มิถุนายน || [[:w:th:วิกิซอร์ซ|วิกิซอร์ซ]] || '''[[:wikisource:th:หนังสือสัญญากรุงเทพมหานครกับกรุงอังกริษเปนทางไมตรีค้าขายกัน/ส่วนที่_1|หนังสือสัญญากรุงเทพมหานครกับกรุงอังกริษเปนทางไมตรีค้าขายกัน]]''' (สนธิสัญญาเบาว์ริง) || สมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวงทรงมีพระราชเสาวนีย์ให้มีการศึกษาประวัติศาสตร์ชาติไทย
|-
| กรกฎาคม || [[:w:th:วิกิมีเดียคอมมอนส์|วิกิมีเดียคอมมอนส์]] || '''[[:commons:Category:Bang Pa In Royal Palace|พระราชวังบางปะอิน]]''' || มีประวัติศาสตร์ยาวนานนับแต่สมัยอยุธยา (เช่นเดียวกับเดือนมิถุนายน)
|-
| สิงหาคม || [[:w:th:วิกิสปีชีส์|วิกิสปีชีส์]] || '''''[[:species:Mussaenda philippica|Mussaenda philippica]]''''' (ดอนญ่า) || มีสายพันธุ์ย่อย "Queen Sirikit" (ดูเพิ่มในบทความ[[:w:th:ดอนญ่าควีนสิริกิติ์|ดอนญ่าควีนสิริกิติ์]]บนวิกิพีเดียภาษาไทย)
|-
| กันยายน || [[:w:th:วิกิตำรา|วิกิตำรา]] || '''[[:wikibooks:th:ภาษาไทย/ภาคผนวก/คำที่มักเขียนผิด|คำที่มักเขียนผิดในภาษาไทย]]''' แสดงเฉพาะคำ "[[:w:th:ทศกัณฐ์|ทศกัณฐ์]]" || ตัวละครจาก[[:w:th:รามเกียรติ์|รามเกียรติ์]]อันเป็นบทละครที่แสดงในโขน[[:w:th:มูลนิธิส่งเสริมศิลปาชีพ ในสมเด็จพระบรมราชชนนีพันปีหลวง|มูลนิธิส่งเสริมศิลปาชีพ ในสมเด็จพระบรมราชชนนีพันปีหลวง]]
|-
| ตุลาคม || [[:w:th:วิกิสนเทศ|วิกิสนเทศ]] || '''[[wikidata:Q64691173|ชุดไทยอัมรินทร์]]''' || หนึ่งในชุดไทยพระราชนิยมที่สมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวงทรงพระกรุณาโปรดฯ ให้จัดทำขึ้นเป็นชุดประจำชาติ โดยเลือกภาพเมื่อครั้ง[[:w:th:พระราชพิธีพระราชทานเพลิงพระศพสมเด็จเจ้าฟ้าฯ กรมพระนราธิวาสราชนครินทร์ บดินทรเชษฐภคินี|พระราชพิธีพระราชทานเพลิงพระศพสมเด็จเจ้าฟ้าฯ กรมพระนราธิวาสราชนครินทร์ บดินทรเชษฐภคินี]] ให้สอดคล้องกับการคาดการณ์พระราชพิธีถวายพระเพลิงพระบรมศพสมเด็จพระนางเจ้าสิริกิติ์ พระบรมราชินีนาถ พระบรมราชชนนีพันปีหลวง
|-
| พฤศจิกายน || [[:w:th:วิกิเมเนีย|วิกิเมเนีย]] || '''[[:wikimania:2026|วิกิเมเนีย 2026]]''' || งานพบปะที่ใหญ่ที่สุดของกลุ่มขับเคลื่อนวิกิมีเดีย
|-
| ธันวาคม || วิกิมีเดียประเทศไทย || '''วิกิมีเดียประเทศไทย''' || องค์กรสาขาของกลุ่มขับเคลื่อนวิกิมีเดียในประเทศไทย
|}
<small>
; ผิดตกแก้ไข
* erratum หน้าสุดท้าย ๒๕๖๙ 2026 -> ๒๕๗๐ 2027 (รวมถึงแก้ไขลูกศรชี้ให้สอดคล้องกับปีที่ติดกัน)
* erratum หน้า 24 Wikimania 2025 talk by James Forrester.jpg, Sdkb, CC BY-SA 4.0 -> Wikimania 2025 Participants 31.jpg, Guillermo Carlos Gómez, CC BY-SA 4.0
* addendum รอประกาศวันพืชมงคลสำหรับ พ.ศ. ๒๕๖๙ และวันหยุดพิเศษ (ถ้ามี) [https://www.thaipbs.or.th/program/clip/watch/jj7mx1matoiu]
; น้ำหนักและการจัดส่ง
ปฏิทินมีน้ำหนักสุทธิต่อเล่ม 202 กรัม ไม่รวมหีบห่อ
* จัดส่งตามจำนวนที่ร้องขอหากไม่ยินดีรับเพิ่ม หรือ
* จัดส่งประมาณสองเท่าของจำนวนที่ร้องขอตามพิกัดการขนส่ง (หากไม่เลือกขนส่งจะใช้วิธีการที่ถูกที่สุดตามพิกัดดังรายการด้านล่างซึ่งพิจารณาน้ำหนักรวมหีบห่อ หากเลือกขนส่งจะจัดให้ตามที่แจ้งความจำนงมา)
** 1 เล่ม เหมาะสำหรับไปรษณีย์ไทย eCo-post 26 บาท หรือ ลงทะเบียน (พื้นที่พิเศษไม่บวกเพิ่มค่าส่ง) 30 บาท พิกัด 250 กรัม (สำหรับผู้ระบุ 1 เล่มโดยไม่รับเพิ่ม)
** 2 เล่ม เหมาะสำหรับไปรษณีย์ไทย eCo-post 30 บาท หรือ ลงทะเบียน (พื้นที่พิเศษไม่บวกเพิ่มค่าส่ง) 36 บาท หรือ ขนส่งเอกชน (ส่งกรุงเทพมหานครและปริมณฑล) 30* บาท พิกัด 500 กรัม
** 4 เล่มพร้อมหีบห่อ เหมาะสำหรับไปรษณีย์ไทย eCo-post (ส่งต่างจังหวัดทั่วไป) 40 บาท หรือ ลงทะเบียน (พื้นที่พิเศษไม่บวกเพิ่มค่าส่ง) 53 บาท หรือ ขนส่งเอกชน (ส่งกรุงเทพมหานครและปริมณฑล) 30* บาท พิกัด 1,000 กรัม
** 9 เล่มพร้อมหีบห่อ เหมาะสำหรับขนส่งเอกชน (ส่งกรุงเทพมหานครและปริมณฑล) 35* บาท (ส่งต่างจังหวัดทั่วไป) 45* บาท พิกัด 2,000 กรัม
หมายเหตุ *เมื่อส่งจริงมีการเรียกเก็บ fuel surcharge เพิ่ม 2-3 บาท แต่ใช้ซองและวัสดุกันกระแทกได้ที่ร้านเลยไม่มีค่าใช้จ่ายเพิ่มเติม (ซองพลาสติกกันน้ำได้)
# ดำเนินการส่งก่อนเที่ยง จันทร์ 8 ธันวาคม 2568 พร้อมแจ้งหมายเลขติดตามพัสดุรายบุคคลทุกราย
# สถานะเช้าวันที่ 9 ธันวาคม 2568 (ก่อน 8:00 น.)/ ไปรษณีย์ไทยอยู่ที่ศูนย์คัดแยก 10010 - ศป.หลักสี่ / ขนส่งเอกชนจะนำส่งในวันที่ 9 ธันวาคม
# สถานะเย็นวันที่ 9 ธันวาคม 2568 (ประมาณ 18:00 น.) / ไปรษณีย์ไทยยังคงอยู่ที่ศูนย์คัดแยก 10010 - ศป.หลักสี่ ยกเว้นรายหนึ่งที่กำลังเดินทางยังไปรษณีย์ปลายทางแล้วเนื่องจากอยู่ในเขตกรุงเทพฯ / ขนส่งเอกชนนำส่งสำเร็จแทบทั้งหมดแล้ว ยกเว้นรายหนึ่งที่ผู้จัดส่งยังไม่ติดต่อจัดส่งกับผู้รับ
# สถานะเย็นวันที่ 10 ธันวาคม 2568 (ประมาณ 17:00 น.) / ไปรษณีย์ไทยสามารถจัดส่งพัสดุไปยังปลายทางในเขตกรุงเทพฯ และจังหวัดใกล้เคียง บางส่วนยังตกค้างในศูนย์คัดแยกหลักสี่ บางส่วนส่งออกไปยังศูนย์คัดแยกปลายทางหรือไปรษณีย์สาขาปลายทาง / ขนส่งเอกชนนำส่งสำเร็จทั้งหมดแล้ว
# สถานะเย็นวันที่ 12 ธันวาคม 2568 (ประมาณ 18:00 น.) / ไปรษณีย์ไทยสามารถจัดส่งพัสดุไปยังปลายทางทุกพื้นที่แล้ว ยกเว้นรายหนึ่งที่ ปณท. ได้ออกใบนำจ่าย จึงได้ติดต่อผู้ใช้รายดังกล่าวให้ติดต่อกับ ปณท. เพื่อจัดการโดยตรง
;คำแนะนำเพิ่มเติม
* พิจารณาจัดส่งโดยใช้ซองกันน้ำหรือห่อหุ้มภายในด้วยวัสดุกันน้ำ โดยเฉพาะปลายทางที่อยู่ในเขตฝนตก เนื่องจากมีผู้ได้รับพัสดุที่อยู่ในเขตพื้นที่ได้รับหย่อมกดอากาศต่ำ<ref>https://tmd.go.th/warning-and-events/warning-storm/%E0%B8%9D%E0%B8%99%E0%B8%95%E0%B8%81%E0%B8%AB%E0%B8%99%E0%B8%81%E0%B8%96%E0%B8%87%E0%B8%AB%E0%B8%99%E0%B8%81%E0%B8%A1%E0%B8%B2%E0%B8%81%E0%B8%9A%E0%B8%A3%E0%B9%80%E0%B8%A7%E0%B8%93%E0%B8%A0%E0%B8%B2%E0%B8%84%E0%B9%83%E0%B8%95-%E0%B9%81%E0%B8%A5%E0%B8%B0%E0%B8%84%E0%B8%A5%E0%B8%99%E0%B8%A5%E0%B8%A1%E0%B9%81%E0%B8%A3%E0%B8%87%E0%B8%9A%E0%B8%A3%E0%B9%80%E0%B8%A7%E0%B8%93%E0%B8%AD%E0%B8%B2%E0%B8%A7%E0%B9%84%E0%B8%97%E0%B8%A2-%E0%B8%A1%E0%B8%9C%E0%B8%A5%E0%B8%81%E0%B8%A3%E0%B8%B0%E0%B8%97%E0%B8%9A%E0%B8%88%E0%B8%99%E0%B8%96%E0%B8%87%E0%B8%A7%E0%B8%99%E0%B8%97-12-16-%E0%B8%98%E0%B8%99%E0%B8%A7%E0%B8%B2%E0%B8%84%E0%B8%A1-2568-%E0%B8%89%E0%B8%9A%E0%B8%9A%E0%B8%97-16-389-2568</ref>แจ้งว่าปฏิทินเปียกน้ำ
* จัดพิมพ์ล่วงหน้าเป็นเวลานานขึ้น และให้ผู้ใช้ลงชื่อไว้ก่อนแล้วทำการเขียนบทความให้ถึงยอดที่กำหนดค่อยจัดส่งต่อไปเป็นรายเดือนเดือนละหนึ่งรอบ
</small>
imp1qbn58xrre9jna2h1puxhzp6t3ha
25 ปีวิกิพีเดีย/ปฏิทิน/หน้าย่อย
0
61
307
284
2025-11-24T04:45:44Z
Taweetham
7
ตามลำดับที่พบได้บ่อย
307
wikitext
text/x-wiki
<div class="anonymous-show boilerplate metadata" style="background:#dee; border:1px solid #00c; margin:0.5em; padding:0.5em;; padding: 1em; width:70%">ขออภัย [[:w:th:WP:IP|ผู้ใช้ยังไม่มีบัญชีวิกิมีเดีย]]ไม่สามารถดำเนินการต่อได้เนื่องจากข้อจำกัดทางเทคนิค
;โปรดดำเนินการ
# รีเฟรช (F5) หน้าใหม่อีกครั้ง หากเคยล็อกอินแล้วแต่เมื่อกดลิงก์ข้ามมาใช้ที่วิกินี้เป็นครั้งแรกแล้วระบบยังไม่ได้ล็อกอินให้อัตโนมัติ เมื่อล็อกอินแล้วข้อความเตือนนี้จะหายไปเองและมีข้อความยืนยันขึ้นมาแทน
# [[พิเศษ:ล็อกอิน|ล็อกอิน]]ในกรณีที่ท่านมีบัญชีแล้วแต่ยังไม่ได้ล็อกอิน<sup>*</sup>
# สร้างบัญชีผู้ใช้ใหม่[[พิเศษ:สร้างบัญชีผู้ใช้ใหม่|ที่วิกิมีเดียประเทศไทย]]<sup>*</sup>
<sup>*</sup>เมื่อดำเนินการตาม 2-3 เสร็จแล้วสามารถกดย้อนกลับ (back/backspace) มาที่หน้านี้แล้วรีเฟรช (F5) หน้าใหม่อีกครั้งได้ตามข้อ 1
</div><div class="user-show" style="background:#dee; border:1px solid #00c; margin:0.5em; padding:0.5em;; padding: 1em; width:70%">
ท่านกำลังใช้งานบัญชีผู้ใช้ (มีสถานะล็อกอินแล้วพร้อมดำเนินการต่อ) โปรดดูให้แน่ใจว่าใช่บัญชีผู้ใช้ของท่านก่อนดำเนินการต่อ
</div>
d886l59d4apaiuno3ulpho8zfo1oyo5
มีเดียวิกิ:Common.css
8
63
249
2025-11-23T06:27:27Z
Wutkh
9
สร้างหน้าด้วย "/* <syntaxhighlight lang="css"> */ /* Source of code, if not stated, usually comes from English Wikipedia. */ /* เริ่ม: แสดงผลภาษาไทย */ /* เว้นย่อหน้า ตามการเขียนแบบไทย */ p { text-indent: 2.5em; } p.catlinks, td p, .dt-init-replylink-buttons { text-indent: 0; } /* จบ: แสดงผลภาษาไทย */ sup, sub { line-height: 1e..."
249
css
text/css
/* <syntaxhighlight lang="css"> */
/* Source of code, if not stated, usually comes from English Wikipedia. */
/* เริ่ม: แสดงผลภาษาไทย */
/* เว้นย่อหน้า ตามการเขียนแบบไทย */
p {
text-indent: 2.5em;
}
p.catlinks,
td p,
.dt-init-replylink-buttons {
text-indent: 0;
}
/* จบ: แสดงผลภาษาไทย */
sup, sub {
line-height: 1em; /* Reduce line-height for <sup> and <sub> */
}
.page-หน้าหลัก #mp-topbanner {
clear: both;
}
#interwiki-completelist {
font-weight: bold;
}
/* ลดระยะย่อหน้าของ bullet ในหน้าหลัก (โดยคุณ Octahedron80) */
body.page-หน้าหลัก #content ul,
body.page-หน้าหลัก #content ol {
margin-left: 2em;
}
/* ยกเว้น .non-indented, p.catlink, td > p (โดยคุณ Patsagorn Y.) */
.non-indent p,
p.catlinks,
td p,
.mw-ui-button {
text-indent: initial;
}
/* Bold 'edit this page' link to encourage newcomers */
#ca-edit a { font-weight: bold !important; }
/* Ensure refs in table headers and the like aren't bold or italic */
sup.reference {
font-weight: normal;
font-style: normal;
}
/* Styling for citations */
span.citation, cite {
font-style: normal;
word-wrap: break-word;
}
/* Recentchanges box. Style adapted from fr.wikipedia.org */
.rcoptions {
margin: 0 0 2px 0;
padding:.5em;
border:1px solid #aaa;
border-left:10px solid #ccccff;
background-color: #FFFFFF;
font-size: 90%
}
#catlinks {
border: 0px;
border-top: 2px dotted #aaaaaa;
}
/* ทำให้ {{มบ|Coord}} แสดงผลเป็น dec หรือ dms เพียงอย่างใดอย่างหนึ่งเท่านั้น ทำให้พิกัดที่ได้จากแม่แบบไม่ยาวเกินไป โดยคุณ Nullzero */
.geo-default, .geo-dms, .geo-dec { display: inline; }
.geo-nondefault, .geo-multi-punct { display: none; }
.longitude, .latitude { white-space: nowrap; }
/* wikitable/prettytable class for skinning normal tables */
/* Make the list of references smaller */
ol.references,
div.reflist,
div.refbegin {
font-size: 90%; /* Default font-size */
}
div.reflist ol.references {
font-size: 100%; /* Reset font-size when nested in div.reflist */
list-style-type: inherit; /* Enable custom list style types */
}
.references-small { font-size: 90%;}
.references-2column {
font-size: 90%;
-moz-column-count:2;
column-count:2;
}
/* Consistent size for <small>, <sub> and <sup> */
small {
font-size: 85%;
}
.mw-body-content sub,
.mw-body-content sup {
font-size: 80%;
}
.same-bg { background: none; }
/* Highlight clicked reference in blue to help navigation */
ol.references > li:target {
background-color: #DEF;
}
/* T156351: Support for Parsoid's Cite implementation
@counter-style custom-group-label-thai {
system: alphabetic;
symbols: 'ก' 'ข' 'ค' 'ง' 'จ' 'ฉ' 'ช' 'ซ' 'ด' 'ต' 'ถ' 'ท' 'น' 'บ' 'ป' 'ผ' 'ฝ' 'พ' 'ฟ' 'ม' 'ย' 'ร' 'ว' 'ส' 'อ' 'ฮ';
}*/
/* Styling for citations */
span.citation, cite {
font-style: normal;
word-wrap: break-word;
}
/* Styling for citations (CSS3). Breaks long urls, etc., rather than overflowing box */
.citation {
word-wrap: break-word;
}
/* Default style for navigation boxes */
.navbox { /* Navbox container style */
box-sizing: border-box;
border: 1px solid #a2a9b1;
width: 100%;
clear: both;
font-size: 88%;
text-align: center;
padding: 1px;
margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */
}
.navbox .navbox {
margin-top: 0; /* No top margin for nested navboxes */
}
.navbox + .navbox {
margin-top: -1px; /* Single pixel border between adjacent navboxes */
}
.navbox-inner,
.navbox-subgroup {
width: 100%;
}
.navbox-group,
.navbox-title,
.navbox-abovebelow {
padding: 0.25em 1em; /* Title, group and above/below styles */
line-height: 1.5em;
text-align: center;
}
th.navbox-group { /* Group style */
white-space: nowrap;
/* @noflip */
text-align: right;
}
.navbox,
.navbox-subgroup {
background-color: #fdfdfd; /* Background color */
}
.navbox-list {
line-height: 1.5em;
border-color: #fdfdfd; /* Must match background color */
}
/* cell spacing for navbox cells */
tr + tr > .navbox-abovebelow,
tr + tr > .navbox-group,
tr + tr > .navbox-image,
tr + tr > .navbox-list { /* Borders above 2nd, 3rd, etc. rows */
border-top: 2px solid #fdfdfd; /* Must match background color */
}
.navbox th,
.navbox-title {
background-color: #ccccff; /* Level 1 color */
}
.navbox-abovebelow,
th.navbox-group,
.navbox-subgroup .navbox-title {
background-color: #ddddff; /* Level 2 color */
}
.navbox-subgroup .navbox-group,
.navbox-subgroup .navbox-abovebelow {
background-color: #e6e6ff; /* Level 3 color */
}
.navbox-even {
background-color: #f7f7f7; /* Even row striping */
}
.navbox-odd {
background-color: transparent; /* Odd row striping */
}
/* Default styling for Navbar template */
.navbar {
display: inline;
font-size: 88%;
font-weight: normal;
}
.navbar ul {
display: inline;
white-space: nowrap;
}
.navbar li {
word-spacing: -0.125em;
}
.navbar.mini li span {
font-variant: small-caps;
}
/* Navbar styling when nested in infobox and navbox */
.infobox .navbar {
font-size: 100%;
}
.navbox .navbar {
display: block;
font-size: 100%;
}
.navbox-title .navbar {
/* @noflip */
float: left;
/* @noflip */
text-align: left;
/* @noflip */
margin-right: 0.5em;
width: 6em;
}
/* 'show'/'hide' buttons created dynamically by the CollapsibleTables javascript
in [[MediaWiki:Common.js]] are styled here so they can be customised. */
.collapseButton {
/* @noflip */
float: right;
font-weight: normal;
/* @noflip */
margin-left: 0.5em;
/* @noflip */
text-align: right;
width: auto;
}
/* In navboxes, the show/hide button balances the v·d·e links
from [[Template:Navbar]], so they need to be the same width. */
.navbox .collapseButton {
width: 6em;
}
/* Styling for JQuery makeCollapsible, matching that of collapseButton */
.mw-parser-output .mw-collapsible-toggle {
font-weight: normal;
/* @noflip */
text-align: right;
}
.navbox .mw-collapsible-toggle {
width: 6em;
}
/* Style for "notices" */
.notice {
margin: 1em;
padding: 0.2em;
}
#disambig {
border-top: 3px double #cccccc;
border-bottom: 3px double #cccccc;
}
#spoiler {
/* border-top: 2px solid #ddd;
border-bottom:2px solid #ddd;*/
}
/* Standard talk template style */
.Talk-Notice {
border: 1px solid #C0C090;
background-color: #F8EABA;
margin-bottom: 3px;
width: 85%;
border-spacing: 3px;
margin-left: auto;
margin-right: auto;
}
/* Make template background appear correctly on all browsers */
.Talk-Notice td {
background: inherit;
}
/*Add formatting to make sure that "external references" from [[Template:Ref]] do
not get URL expansion, not even when printed. The mechanism up to MediaWiki 1.4 was
that the HTML code contained a SPAN following the anchor A; this SPAN had the class
"urlexpansion", which was not displayed on screen, but was shown when the medium was
"print". The rules below ensure (a) that there is no extra padding to the right of
the anchor (displayed as "[<number>]"), (b) that there is no "external link arrow" for
the link, and (c) that this SPAN of class "urlexpansion" is never shown.
~~~~
*/
.plainlinksneverexpand {
background: none ! important;
padding: 0 ! important;
}
.plainlinksneverexpand .urlexpansion {
display : none ! important;
}
/* Make sure that ext links displayed within "plainlinksneverexpand" don't get
the arrow...
*/
.plainlinksneverexpand a {
background: none !important;
padding: 0 !important
}
/* With MediaWiki 1.5, the mechanism has changed: instead of a SPAN of class "urlexpansion"
following the anchor A, the anchor itself now has class "external autonumber" and the
expansion is inserted when printing (see the common printing style sheet at
//en.wikipedia.org/w/skins/common/commonPrint.css) using the ":after" pseudo-
element of CSS. We have to switch this off for links due to Template:Ref!
~~~~
*/
.plainlinksneverexpand a.external.text:after {
display: none !important;
}
.plainlinksneverexpand a.external.autonumber:after {
display: none !important;
}
/* Merge template style */
.amboxtalk {
clear:left;
text-align:left;
width: 80%;
margin: 0 auto;
padding: 0.5em;
border-collapse: collapse;
background: #FBFBFB;
border: 1px solid #aaa;
border-left: 10px solid #1e90ff;
}
.mw-body-content .messagebox {
border: 1px solid #aaaaaa;
background-color: #f9f9f9;
width: 85%;
margin: 0 auto 1em auto;
padding: .2em;
text-align: left;
}
.messagebox.merge {
border: 1px solid #cf9fff;
background-color: #f5edf5;
text-align: center;
}
.messagebox.cleanup {
border: 1px solid #9f9fff;
background-color: #efefff;
text-align: center;
}
.messagebox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
/* Infobox template style */
.infobox {
border: 1px solid #aaa;
background-color: #f9f9f9;
color: black;
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
/* @noflip */
float: right;
/* @noflip */
clear: right;
text-align: left;
font-size: 88%;
line-height: 1.5em;
}
.infobox caption {
font-size: 125%;
font-weight: bold;
}
.infobox td,
.infobox th {
vertical-align: top;
}
.infobox.bordered {
border-collapse: collapse;
}
.infobox.bordered td,
.infobox.bordered th {
border: 1px solid #aaa;
}
.infobox.bordered .borderless td,
.infobox.bordered .borderless th {
border: 0;
}
.infobox.sisterproject {
width: 20em;
font-size: 90%;
}
.infobox.standard-talk {
border: 1px solid #c0c090;
background-color: #f8eaba;
}
.infobox.standard-talk.bordered td,
.infobox.standard-talk.bordered th {
border: 1px solid #c0c090;
}
/* styles for bordered infobox with merged rows */
.infobox.bordered .mergedtoprow td,
.infobox.bordered .mergedtoprow th {
border: 0;
border-top: 1px solid #aaa;
border-right: 1px solid #aaa;
}
.infobox.bordered .mergedrow td,
.infobox.bordered .mergedrow th {
border: 0;
border-right: 1px solid #aaa;
}
/* Styles for geography infoboxes, eg countries,
country subdivisions, cities, etc. */
.infobox.geography {
/* @noflip */
text-align: left;
border-collapse: collapse;
line-height: 1.2em;
font-size: 90%;
}
.infobox.geography td,
.infobox.geography th {
border-top: 1px solid #aaa;
padding: 0.4em 0.6em 0.4em 0.6em;
}
.infobox.geography .mergedtoprow td,
.infobox.geography .mergedtoprow th {
border-top: 1px solid #aaa;
padding: 0.4em 0.6em 0.2em 0.6em;
}
.infobox.geography .mergedrow td,
.infobox.geography .mergedrow th {
border: 0;
padding: 0 0.6em 0.2em 0.6em;
}
.infobox.geography .mergedbottomrow td,
.infobox.geography .mergedbottomrow th {
border-top: 0;
border-bottom: 1px solid #aaa;
padding: 0 0.6em 0.4em 0.6em;
}
.infobox.geography .maptable td,
.infobox.geography .maptable th {
border: 0;
padding: 0;
}
/* Normal font styling for wikitable row headers with scope="row" tag */
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
/* @noflip */
text-align: left;
}
/* Lists in wikitable data cells are always left-aligned */
.wikitable td ul,
.wikitable td ol,
.wikitable td dl {
/* @noflip */
text-align: left;
}
#wpSave {
font-weight: bold;
}
/* hiddenStructure from Monobook - allows selective hiding of markup in templates */
.hiddenStructure {
display: none;
}
/* CSS for testing a new Main Page design, see [[Wikipedia:WikiProject Usability/Main Page]] */
#ThWpMainPage { width: 100%; margin-top: 1em; }
#ThWpMainPage h2 { font-size: 130%; font-weight: bold; margin: 0; padding: 0; border: 0; }
#ThWpMpMargin { margin-right: 13.8em; }
#ThWpMpCol1 { float: left; clear: left; width: 50%; }
#ThWpMpCol2 { width: 49.9%; float: left; }
#ThWpMpBrowse { background: #f8fcff url(//upload.wikimedia.org/wikipedia/en/9/9f/MP-three-books.png) no-repeat 180% 9%; border: 1px solid #c7c7c7; }
#ThWpMpBrowseCats li { font-size: 85%; margin-left: 1em; line-height: 1.5; }
#ThWpMpBrowseCats h3 { font-size: 120%; margin: .2em 0 .1em -.8em; padding: 0; font-weight: normal; }
#ThWpMpBrowseCats h3 a { font-weight: bold; }
#ThWpMpBook { background-image: url(//upload.wikimedia.org/wikipedia/en/7/7e/MP-open-book.png); }
#ThWpMpFeaturedPic { text-align: center; margin: 0 0 .5em; font-size: 85%; font-weight: bold; }
#ThWpMpFeaturedPic h2 { font-size: 145%; text-align: left; }
.ThWpMpBrowseRight { float: right; width: 12.7em; }
.ThWpMpBrowseBottom { margin: 1em 0; }
.ThWpMpBrowseBottom #EnWpMpBrowseCats li, .EnWpMpBrowseBottom #EnWpMpUsefulLinks, .EnWpMpBrowseBottom #ThWpMpFeaturedPic { float: left; width: 24%; margin: 0; line-height: auto; }
.ThWpMpBrowseBottom #EnWpMpBrowseCats h3 { margin-left: 0; }
#ThWpMpUsefulLinks { clear: left; }
#ThWpMpSearch { background: url(//upload.wikimedia.org/wikipedia/en/a/ae/MP-magnifying-glass.png) no-repeat top right; }
#ThWpMpSearch input { vertical-align: middle; }
#ThWpMpSearchInner { float: right; width: 20em; text-align: center; }
#bodySearchMP { margin: 0; padding: 0; }
#bodySearchMP .bodySearchWrap { float: right; width: 17.5em; text-align: left; padding: .8em 0; }
#bodySearchMP label { display: block; font-size: 95%; font-weight: bold; margin-bottom: -.2em; }
#bodySearchMP .bodySearchIput { opacity: .85; filter: alpha(opacity=85); }
#bodySearchMP .bodySearchBtnGo { font-weight: bold; padding-left: .3em; padding-right: .3em; margin-left: .5em; }
.ThWpMpContentBox { border: 1px solid; margin-bottom: .9em; }
#ThWpMpCol2 .EnWpMpContentBox { margin-left: .9em; }
.ThWpMpImage { float: right; margin: 0 0 .2em .2em; }
.ThWpMpImage img { position: relative; z-index: 3; }
#ThWpMpSisterProjects { float: left; width: 49%; }
.ThWpMpSisterProject { float: left; width: 17em; margin: 0; height: 5.5em; margin: 0; }
.ThWpMpSisterImg { float: left; width: 40px; height: 100%; }
#ThWpMpOtherLangs { margin-left: 50%; }
#ThWpMainPageNoCSS { display: none; }
/* Icons for medialist templates [[Template:Listen]], [[Template:Multi-listen_start]], [[Template:Video]], [[Template:Multi-video_start]] */
div.listenlist {
background: url("//upload.wikimedia.org/wikipedia/commons/thumb/a/a6/Gnome-speakernotes.png/30px-Gnome-speakernotes.png");
padding-left: 40px;
}
div.videolist, div.multivideolist {
background: url("//upload.wikimedia.org/wikipedia/en/thumb/2/20/Tango-video-x-generic.png/40px-Tango-video-x-generic.png");
padding-left: 50px;
}
div.user-block {
padding: 5px;
border: 1px solid #A9A9A9;
background-color: #FFEFD5;
}
/* Style rules for media list templates */
div.medialist {
min-height: 50px;
margin: 1em;
background-position: top left;
background-repeat: no-repeat;
}
div.medialist ul {
list-style-type: none;
list-style-image: none;
margin: 0;
}
div.medialist ul li {
padding-bottom: 0.5em;
}
div.medialist ul li li {
font-size: 91%;
padding-bottom: 0;
}
/* Coloured watchlist numbers */
.mw-plusminus-pos {
color:darkgreen;
}
.mw-plusminus-neg {
color:darkred;
}
/* Persondata and other (future) metadata */
table.InChI, /* temporary */
table.persondata {
border: 1px solid #aaa;
display: none;
speak: none;
}
.InChI-label, /* temporary */
.persondata-label {
color: #aaa;
}
/* เพิ่มความเข้มของเส้นกรอบรูป */
/* Change the external link icon to an Adobe icon for all PDF files */
/* (in browsers that support these CSS selectors, like Mozilla and Opera) */
#bodyContent a[href$=".pdf"].external,
#bodyContent a[href*=".pdf?"].external,
#bodyContent a[href*=".pdf#"].external,
#bodyContent a[href$=".PDF"].external,
#bodyContent a[href*=".PDF?"].external,
#bodyContent a[href*=".PDF#"].external,
#mw_content a[href$=".pdf"].external,
#mw_content a[href*=".pdf?"].external,
#mw_content a[href*=".pdf#"].external,
#mw_content a[href$=".PDF"].external,
#mw_content a[href*=".PDF?"].external,
#mw_content a[href*=".PDF#"].external {
background: url(//upload.wikimedia.org/wikipedia/commons/thumb/2/23/Icons-mini-file_acrobat.gif/15px-Icons-mini-file_acrobat.gif) center right no-repeat;
padding-right: 16px;
}
/* Change the external link icon to an Adobe icon anywhere the PDFlink class */
/* is used (notably Template:PDFlink). This works in IE, unlike the above. */
span.PDFlink a {
background: url(//upload.wikimedia.org/wikipedia/commons/thumb/2/23/Icons-mini-file_acrobat.gif/15px-Icons-mini-file_acrobat.gif) center right no-repeat !important;
padding-right: 17px !important;
}
span.geolink a {
background: url(//upload.wikimedia.org/wikipedia/en/a/a7/Monobook-globe.png) center right no-repeat !important;
padding-right: 11px !important;
}
/* รายการแสดงเป็นบล็อก */
.wikiblocklist ul{margin: 0; padding: 0;}
.wikiblocklist li{list-style: none;border-bottom: #e2eef2 solid 1px; padding: 0 5px;}
.wikiblocklist a{color: #000; display: block;}
.wikiblocklist li:hover{ background: #e2eef2;}
/* เริ่มแม่แบบ Metabox */
.mbButton {
background-color: #d0b0ff; /* 4 */
border: 0.15em solid #000000;
border-color: #f0d0ff #b090e0 #9070c0 #f0d0ff; /* 5 3 3 5 */
border-radius-topleft: .5em;
border-radius-topright: .5em;
-moz-border-radius: .5em .5em 0em 0em;
cursor:pointer;
display: inline;
margin-right: 0.1em;
padding: 0.2em 0.3em 0.2em 0.3em;
position: relative;}
.mbButton a,
.mbButton strong {
background: none !important;
color:#7050a0 !important; /* 1 */
font-size: 90%;
font-weight: bold;
padding: 0 !important;
text-decoration: none !important;}
.mbButton a:hover,
.mbButton strong:hover {
color: black !important;
text-decoration: underline !important;}
.mbButtonSel{
background-color: #9070c0; /* 2 */
border: 0.15em solid #000000;
border-color: #b090e0 #7050a0 #9070c0 #b090e0; /* 3 1 2 3 */
border-radius-topleft: .5em;
border-radius-topright: .5em;
-moz-border-radius: .5em .5em 0em 0em;
cursor: default;
display: inline;
margin-right: 0.1em;
padding: 0.2em 0.3em 0.2em 0.3em;
position: relative;
color:white;}
.mbButtonSela {
background: none !important;
color:white !important;
cursor: default;
font-size: 90%;
font-weight: bold;
padding: 0 !important;
text-decoration: none !important;}
.mbContent {
background-color: #f8f8ff;
border: 0.2em solid #9070c0; /* 2 */
border-color: #9070c0 #7050a0 #7050a0 #9070c0 ; /* 2 1 1 2 */
-moz-border-radius: 0em .5em .5em 0em;
border-radius-topright: .5em;
border-radius-bottomright: .5em;
padding: 1em;
position: static; /* Si hi posem relative falla amb MSIE */}
.mbTab {
background-color: #f8f8ff;
border-color: #7050a0 #b090e0 #b090e0 #7050a0; /* 1 3 3 1 */ width: 100%;
}
/* สั่งทำงานสีเขียว 1;60b030 2;75c045 3;90d060 4;a5e085 5;c0f090 */
.mbGreen .mbButton {
background-color: #a5e085; /* 4 */
border-color: #c0f090 #90d060 #75c045 #c0f090; /* 5 3 2 5 */}
.mbGreen .mbButton a,
.mbGreen .mbButton strong {
color:#60b030 !important; /* 1 */
font-size:90%}
.mbGreen .mbButton a:hover,
.mbGreen .mbButton strong:hover {
color: black !important;
text-decoration: underline;}
.mbGreen .mbButtonSel{
background-color: #75c045; /* 2 */
border-color: #90d060 #60b030 #75c045 #90d060; /* 3 1 2 3 */}
.mbGreen .mbContent {
background-color: #f5fffa;
border-color: #75c045 #60b030 #60b030 #75c045 ; /* 2 1 1 2 */}
.mbGreen .mbTab {
background-color: #f5fffa;
border-color: #60b030 #90d060 #90d060 #60b030; /* 1 3 3 1 */}
/* สั่งทำงานสีแดง 1;CC0000 2;FF0000 3;FF8888 4;FFAAAA 5;FFCCCC */
.mbRed .mbButton {
background-color: #FFAAAA; /* 4 */
border-color: #FFCCCC #FF8888 #FF0000 #FFCCCC; /* 5 3 2 5 */}
.mbRed .mbButton a,
.mbRed .mbButton strong {
color:#CC0000 !important; /* 1 */
font-size:90%}
.mbRed .mbButton a:hover
.mbRed .mbButton strong:hover {
color: black !important;
text-decoration: underline;}
.mbRed .mbButtonSel{
background-color: #FF0000; /* 2 */
border-color: #FF8888 #CC0000 #FF0000 #FF8888; /* 3 1 2 3 */}
.mbRed .mbContent {
background-color: #fffafa;
border-color: #FF0000 #CC0000 #CC0000 #FF0000; /* 2 1 1 2 */}
.mbRed .mbTab {
background-color: #fffafa;
border-color: #CC0000 #FF0000 #FF0000 #CC0000; /* 1 3 3 1 */}
/* สั่งทำงานสีฟ้า 1;3379de 2;5b8dd6 3;88abde 4;a7c1e6 5;c8d6e9 */
.mbBlue .mbButton {
background-color: #a7c1e6; /* 4 */
border-color: #c8d6e9 #88abde #5b8dd6 #c8d6e9; /* 5 3 2 5 */}
.mbBlue .mbButton a,
.mbBlue .mbButton strong {
color:#3379de !important; /* 1 */
font-size:90%}
.mbBlue .mbButton a:hover
.mbBlue .mbButton strong:hover {
color: black !important;
text-decoration: underline;}
.mbBlue .mbButtonSel{
background-color: #5b8dd6; /* 2 */
border-color: #88abde #3379de #5b8dd6 #88abde; /* 3 1 2 3 */}
.mbBlue .mbContent {
background-color: #f0f8ff;
border-color: #5b8dd6 #3379de #3379de #5b8dd6; /* 2 1 1 2 */}
.mbBlue .mbTab {
background-color: #f0f8ff;
border-color: #3379de #88abde #88abde #3379de; /* 1 3 3 1 */}
/* สั่งทำงานสีเหลือง 1;ffd813 2;ffe147 3;ffe977 4;fff1a4 5;fef4bc */
.mbYellow .mbButton {
background-color: #fff1a4; /* 4 */
border-color: #fef4bc #ffe977 #ffe147 #fef4bc; /* 5 3 2 5 */}
.mbYellow .mbButton a,
.mbYellow .mbButton strong {
color:#ffd813 !important; /* 1 */
font-size:90%}
.mbYellow .mbButton a:hover
.mbYellow .mbButton strong:hover {
color: black !important;
text-decoration: underline;}
.mbYellow .mbButtonSel{
background-color: #ffe147; /* 2 */
border-color: #ffe977 #ffd813 #ffe147 #ffe977; /* 3 1 2 3 */}
.mbYellow .mbContent {
background-color: #fffce8;
border-color: #ffe147 #ffd813 #ffd813 #ffe147; /* 2 1 1 2 */}
.mbYellow .mbTab {
background-color: #fffce8;
border-color: #ffd813 #88abde #88abde #ffd813; /* 1 3 3 1 */}
/* สั่งทำงานสีส้ม 1;ff820e 2;ff9d42 3;ffac5d 4;ffbd7f 5;ffd0a4 6;ffeedd */
.mbOrange .mbButton {
background-color: #ffbd7f; /* 4 */
border-color: #ffd0a4 #ffac5d #ff9d42 #ffd0a4; /* 5 3 2 5 */}
.mbOrange .mbButton a,
.mbOrange .mbButton strong {
color:#ff820e !important; /* 1 */
font-size:90%}
.mbOrange .mbButton a:hover
.mbOrange .mbButton strong:hover {
color: black !important;
text-decoration: underline;}
.mbOrange .mbButtonSel{
background-color: #ff9d42; /* 2 */
border-color: #ffac5d #ff820e #ff9d42 #ffac5d; /* 3 1 2 3 */}
.mbOrange .mbContent {
background-color: #ffeedd; /* 6 */
border-color: #ff9d42 #ff820e #ff820e #ff9d42; /* 2 1 1 2 */}
.mbOrange .mbTab {
background-color: #ffeedd; /* 6 */
border-color: #ff820e #ffac5d #ffac5d #ff820e; /* 1 3 3 1 */}
/* จบการใช้สีต่าง ๆ สำหรับแม่แบบ:Metabox */
/* Cell sizes for ambox/tmbox/imbox/cmbox/ombox/fmbox/dmbox message boxes */
th.mbox-text, td.mbox-text { /* The message body cell(s) */
border: none;
padding: 0.25em 0.9em; /* 0.9em left/right */
width: 100%; /* Make all mboxes the same width regardless of text length */
}
td.mbox-image { /* The left image cell */
border: none;
padding: 2px 0 2px 0.9em; /* 0.9em left, 0px right */
text-align: center;
}
td.mbox-imageright { /* The right image cell */
border: none;
padding: 2px 0.9em 2px 0; /* 0px left, 0.9em right */
text-align: center;
}
/* Article message box styles */
table.ambox {
margin: 0px 10%; /* 10% = Will not overlap with other elements */
border: 1px solid #aaa;
border-left: 10px solid #1e90ff; /* Default "notice" blue */
background: #fbfbfb;
}
table.ambox + table.ambox { /* Single border between stacked boxes. */
margin-top: -1px;
}
.ambox th.mbox-text,
.ambox td.mbox-text { /* The message body cell(s) */
padding: 0.25em 0.5em; /* 0.5em left/right */
}
.ambox td.mbox-image { /* The left image cell */
padding: 2px 0 2px 0.5em; /* 0.5em left, 0px right */
}
.ambox td.mbox-imageright { /* The right image cell */
padding: 2px 0.5em 2px 0; /* 0px left, 0.5em right */
}
table.ambox-notice {
border-left: 10px solid #1e90ff; /* Blue */
}
table.ambox-speedy {
border-left: 10px solid #b22222; /* Red */
background: #fee; /* Pink */
}
table.ambox-delete {
border-left: 10px solid #b22222; /* Red */
}
table.ambox-content {
border-left: 10px solid #f28500; /* Orange */
}
table.ambox-style {
border-left: 10px solid #f4c430; /* Yellow */
}
table.ambox-move {
border-left: 10px solid #9932cc; /* Purple */
}
table.ambox-protection {
border-left: 10px solid #bba; /* Gray-gold */
}
/* Image message box styles */
table.imbox {
margin: 4px 10%;
border-collapse: collapse;
border: 3px solid #1e90ff; /* Default "notice" blue */
background: #fbfbfb;
}
.imbox .mbox-text .imbox { /* For imboxes inside imbox-text cells. */
margin: 0 -0.5em; /* 0.9 - 0.5 = 0.4em left/right. */
}
.mbox-inside .imbox { /* For imboxes inside other templates. */
margin: 4px;
}
table.imbox-notice {
border: 3px solid #1e90ff; /* Blue */
}
table.imbox-speedy {
border: 3px solid #b22222; /* Red */
background: #fee; /* Pink */
}
table.imbox-delete {
border: 3px solid #b22222; /* Red */
}
table.imbox-content {
border: 3px solid #f28500; /* Orange */
}
table.imbox-style {
border: 3px solid #f4c430; /* Yellow */
}
table.imbox-move {
border: 3px solid #9932cc; /* Purple */
}
table.imbox-protection {
border: 3px solid #bba; /* Gray-gold */
}
table.imbox-license {
border: 3px solid #88a; /* Dark gray */
background: #f7f8ff; /* Light gray */
}
table.imbox-featured {
border: 3px solid #cba135; /* Brown-gold */
}
/* Category message box styles */
table.cmbox {
margin: 3px 10%;
border-collapse: collapse;
border: 1px solid #aaa;
background: #DFE8FF; /* Default "notice" blue */
}
table.cmbox-notice {
background: #D8E8FF; /* Blue */
}
table.cmbox-speedy {
margin-top: 4px;
margin-bottom: 4px;
border: 4px solid #b22222; /* Red */
background: #FFDBDB; /* Pink */
}
table.cmbox-delete {
background: #FFDBDB; /* Red */
}
table.cmbox-content {
background: #FFE7CE; /* Orange */
}
table.cmbox-style {
background: #FFF9DB; /* Yellow */
}
table.cmbox-move {
background: #E4D8FF; /* Purple */
}
table.cmbox-protection {
background: #EFEFE1; /* Gray-gold */
}
/* Other pages message box styles */
table.ombox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #aaa; /* Default "notice" gray */
background: #f9f9f9;
}
table.ombox-notice {
border: 1px solid #aaa; /* Gray */
}
table.ombox-speedy {
border: 2px solid #b22222; /* Red */
background: #fee; /* Pink */
}
table.ombox-delete {
border: 2px solid #b22222; /* Red */
}
table.ombox-content {
border: 1px solid #f28500; /* Orange */
}
table.ombox-style {
border: 1px solid #f4c430; /* Yellow */
}
table.ombox-move {
border: 1px solid #9932cc; /* Purple */
}
table.ombox-protection {
border: 2px solid #bba; /* Gray-gold */
}
/* Talk page message box styles */
table.tmbox {
margin: 4px 10%;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background: #f8eaba;
}
.mediawiki .mbox-inside .tmbox { /* For tmboxes inside other templates. The "mediawiki" */
margin: 2px 0; /* class ensures that this declaration overrides other */
width: 100%; /* For Safari and Opera */ /* styles (including mbox-small above) */
}
.mbox-inside .tmbox.mbox-small { /* "small" tmboxes should not be small when */
line-height: 1.5em; /* also "nested", so reset styles that are */
font-size: 100%; /* set in "mbox-small" above. */
}
table.tmbox-speedy {
border: 2px solid #b22222; /* Red */
background: #fee; /* Pink */
}
table.tmbox-delete {
border: 2px solid #b22222; /* Red */
}
table.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
table.tmbox-style {
border: 2px solid #f4c430; /* Yellow */
}
table.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
table.tmbox-protection,
table.tmbox-notice {
border: 1px solid #c0c090; /* Gray-brown */
}
/* Disambig and set index box styles */
table.dmbox {
clear: both;
margin: 0.9em 1em;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
background: transparent;
}
/* Footer and header message box styles */
table.fmbox {
clear: both;
margin: 0.2em 0;
width: 100%;
border: 1px solid #aaa;
background: #f9f9f9; /* Default "system" gray */
}
table.fmbox-system {
background: #f9f9f9;
}
table.fmbox-warning {
border: 1px solid #bb7070; /* Dark pink */
background: #ffdbdb; /* Pink */
}
table.fmbox-editnotice {
background: transparent;
}
/* For template documentation */
.template-documentation {
clear: both;
margin: 1em 0 0 0;
border: 1px solid #aaa;
background-color: #ecfcf4;
padding: 1em;
}
.thumbinner {
min-width: 100px;
}
/* Fix so <tt>, <code> and <pre> tags get normal text size also in
some versions of Firefox, Safari, Konqueror, Chrome etc. */
tt, code, pre {
font-family: monospace, sans-serif;
}
/* Fix so <syntaxhighlight> tags and .css and .js pages get normal text size.
[[Bugzilla:26204]]. See also [[Wikipedia:Typography#The monospace 'bug']] */
div.mw-geshi div,
div.mw-geshi div pre,
span.mw-geshi,
pre.source-css,
pre.source-javascript,
pre.source-lua {
font-family: monospace, Courier !important;
}
/* End fix <syntaxhighlight> */
/* No linewrap on the labels of the login/signup page */
body.page-Special_UserLogin .mw-label label,
body.page-Special_UserLogin_signup .mw-label label { white-space : nowrap; }
/* Makes redirects appear in italics on [[Special:Allpages]] */
.allpagesredirect {
font-style: italic;
}
/* Removes underlines from links */
.nounderlines a {
text-decoration: none;
}
/* Remove underline from IPA links */
.IPA a:link, .IPA a:visited {
text-decoration: none;
}
/* Allow limiting of which header levels are shown in a TOC;
<div class="toclimit-3">, for instance, will limit to
showing ==headings== and ===headings=== but no further
(as long as there are no =headings= on the page, which
there shouldn't be according to the MoS).
*/
.toclimit-2 .toclevel-1 ul,
.toclimit-3 .toclevel-2 ul,
.toclimit-4 .toclevel-3 ul,
.toclimit-5 .toclevel-4 ul,
.toclimit-6 .toclevel-5 ul,
.toclimit-7 .toclevel-6 ul { display: none; }
/* Prevents line breaks in
1) Where desired
2) Links when we don't want them to
3) Bold "links" to the page itself
4) HTML formulae
5) Ref tags with group names <ref group="Note"> --> "[Note 1]"
*/
.nowrap,
.nowraplinks a,
.nowraplinks .selflink,
span.texhtml,
sup.reference a {
white-space: nowrap;
}
/* DIVERS */
.globegris {
background:
url(//upload.wikimedia.org/wikipedia/commons/1/10/Wikipedia-logo-v2-200px-transparent.png)
} /* from fr.wikipedia.org */
/* Remove default styles for [[MediaWiki:Noarticletext]]. */
div.noarticletext {
border: none;
background: transparent;
padding: 0;
}
/* Prevent floating boxes from overlapping any category listings,
file histories, edit previews, and edit [Show changes] views */
#mw-subcategories, #mw-pages, #mw-category-media,
#filehistory, #wikiPreview, #wikiDiff {
clear: both;
}
/* Special characters list below edit window works better without underlining */
#editpage-specialchars a { text-decoration: none; }
#editpage-specialchars a:hover { text-decoration: underline; }
/* Hide charinsert base for those not using the gadget */
#editpage-specialchars {
display: none;
}
/* Put a checker background at the image description page only visible if the image has transparent background */
#file img {background: url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat}
/* These mbox-small classes must be placed after all other
ambox/tmbox/ombox etc classes. "body.mediawiki" is so
they override "table.ambox + table.ambox" above. */
body.mediawiki table.mbox-small { /* For the "small=yes" option. */
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
font-size: 88%;
line-height: 1.25em;
}
body.mediawiki table.mbox-small-left { /* For the "small=left" option. */
margin: 4px 1em 4px 0;
width: 238px;
border-collapse: collapse;
font-size: 88%;
line-height: 1.25em;
}
/* Styling for Abuse Filter tags */
.mw-tag-markers {
font-style:italic;
font-size:90%;
}
/* Reduce line-height for <sup> and <sub> */
sup, sub {
line-height: 1em;
}
/* A request by octahedron80 19:13, 7 ธันวาคม 2554 (ICT) */
.mw-content-ltr dd, .mw-content-rtl .mw-content-ltr dd {
margin-left: 2.5em;
}
.mw-content-ltr ul, .mw-content-rtl .mw-content-ltr ul {
margin-left: 2.5em;
}
.mw-content-ltr ol, .mw-content-rtl .mw-content-ltr ol {
margin-left: 2.5em;
}
/* Hatnotes and disambiguation notices */
.rellink,
.dablink,
.hatnote {
font-style: italic;
/* @noflip */
padding-left: 2.5em;
margin-bottom: 0.5em;
}
.rellink i,
.dablink i,
.hatnote i {
font-style: normal;
}
/* Hide stuff meant for accounts with special permissions. Made visible again in
[[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-patroller.css]],
[[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]] and [[Mediawiki:Group-autoconfirmed.css]]. */
.sysop-show,
.templateeditor-show,
.extendedmover-show,
.patroller-show,
.autoconfirmed-show,
.user-show {
display: none;
}
/* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */
@media screen {
/* The backgrounds for galleries. */
#content .gallerybox div.thumb {
/* Light gray padding */
background-color: #f8f9fa;
}
/* Put a chequered background behind images, only visible if they have transparency.
'.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */
.gallerybox .thumb img {
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
}
/* But not on articles, user pages, portals or with opt-out. */
.ns-0 .gallerybox .thumb img,
.ns-2 .gallerybox .thumb img,
.ns-100 .gallerybox .thumb img,
.nochecker .gallerybox .thumb img {
background: #fff;
}
/* T178626 */
#contentSub:empty,
#contentSub2:empty {
display: block !important;
}
#contentSub:empty ~ #jump-to-nav,
#contentSub2:empty ~ #jump-to-nav {
margin-top: -1.4em !important;
margin-bottom: 1.4em !important;
}
}
/* แสดงไอคอน GA สำหรับลิงก์ข้ามภาษา (ดูการอภิปรายที่ https://th.wikipedia.org/wiki/วิกิพีเดีย:สภากาแฟ/อภิปราย/ไอคอนแสดง_FA/GA_ในภาษาอื่น)*/
li.badge-goodarticle {
list-style-image:url("//upload.wikimedia.org/wikipedia/commons/4/4a/Monobook-bullet-plus.png");
}
/* แก้ไขปัญหาแสดงผลจาก มีเดียวิกิ:Sitenotice ไม่พอดีกับหน้า (คำแนะนำจาก ผู้ใช้:Nullzero) */
.mw-dismissable-notice .mw-dismissable-notice-body {
margin-left: 0;
margin-right: 0;
}
/* </syntaxhighlight> */
sbwsocxghx915x6q1jd18hr77i49g8y
มีเดียวิกิ:Group-autoconfirmed.css
8
64
251
2025-11-23T06:33:13Z
Wutkh
9
สร้างหน้าด้วย "/* Show hidden items that have class="autoconfirmed-show". */ div.autoconfirmed-show, p.autoconfirmed-show { display: block !important; } span.autoconfirmed-show, small.autoconfirmed-show { display: inline !important; } table.autoconfirmed-show { display: table !important; } li.autoconfirmed-show { display: list-item !important; } .unconfirmed-show { display: none !important; }"
251
css
text/css
/* Show hidden items that have class="autoconfirmed-show". */
div.autoconfirmed-show,
p.autoconfirmed-show {
display: block !important;
}
span.autoconfirmed-show,
small.autoconfirmed-show {
display: inline !important;
}
table.autoconfirmed-show {
display: table !important;
}
li.autoconfirmed-show {
display: list-item !important;
}
.unconfirmed-show {
display: none !important;
}
fdie8qno2w2cmw1xdyo10fd0wual6dy
มีเดียวิกิ:Group-user.css
8
65
252
2025-11-23T06:34:13Z
Wutkh
9
สร้างหน้าด้วย "/* CSS placed here will affect registered users only */ .anonymous-show { display: none !important; } div.user-show, p.user-show { display: block !important; } span.user-show, small.user-show { display: inline !important; } table.user-show { display: table !important; } li.user-show { display: list-item !important; }"
252
css
text/css
/* CSS placed here will affect registered users only */
.anonymous-show {
display: none !important;
}
div.user-show,
p.user-show {
display: block !important;
}
span.user-show,
small.user-show {
display: inline !important;
}
table.user-show {
display: table !important;
}
li.user-show {
display: list-item !important;
}
8ikg6i5mvdujxmbimqbgv2op84c6zu4
แม่แบบ:กรุ
10
66
280
277
2025-11-23T09:10:07Z
Taweetham
7
280
wikitext
text/x-wiki
{{#invoke:กรุ|aan|start={{{start|}}}}}<includeonly>{{#ifeq:{{{Redirect category|}}}|no||{{#if:{{เป็นหน้าเปลี่ยนทาง|{{FULLBASEPAGENAME}}|talk=yes}}{{เป็นหน้าเปลี่ยนทาง|{{#invoke:String|replace|{{FULLPAGENAME}}|/กรุ.*||plain=false}}|talk=yes}} |[[Category:หน้ากรุที่มีหน้าหลักเป็นหน้าเปลี่ยนทาง]] |}}}}</includeonly><noinclude>
{{คู่มือการใช้งาน}}</noinclude>
6h8mfl4xlr2nr051297r1346jhoyd11
มอดูล:กรุ
828
67
263
2025-11-23T08:56:33Z
Taweetham
7
จากวิกิพีเดีย
263
Scribunto
text/plain
-------------------------------------------------------------------------------
-- Automatic archive navigator
--
-- This module produces a talk archive banner, together with an automatically-
-- generated list of navigation links to other archives of the talk page in
-- question. It implements {{Automatic archive navigator}} and
-- {{Talk archive navigation}}.
-------------------------------------------------------------------------------
local yesno = require('Module:Yesno')
-------------------------------------------------------------------------------
-- Helper functions
-------------------------------------------------------------------------------
local function makeWikilink(page, display)
if display then
return string.format('[[%s|%s]]', page, display)
else
return string.format('[[%s]]', page)
end
end
local function escapePattern(s)
-- Escape punctuation in a string so it can be used in a Lua pattern.
s = s:gsub('%p', '%%%0')
return s
end
-------------------------------------------------------------------------------
-- Navigator class
-------------------------------------------------------------------------------
local Navigator = {}
Navigator.__index = Navigator
function Navigator.new(args, cfg, currentTitle)
local obj = setmetatable({}, Navigator)
-- Set inputs
obj.args = args
obj.cfg = cfg
obj.currentTitle = currentTitle
-- Archive prefix
-- Decode HTML entities so users can enter things like "Archive " from
-- wikitext.
obj.archivePrefix = obj.args.prefix or obj:message('archive-prefix')
obj.archivePrefix = mw.text.decode(obj.archivePrefix)
-- Current archive number
do
local pattern = string.format(
'^%s([1-9][0-9]*)$',
escapePattern(obj.archivePrefix)
)
obj.currentArchiveNum = obj.currentTitle.subpageText:match(pattern)
obj.currentArchiveNum = tonumber(obj.currentArchiveNum)
end
-- Highest archive number
obj.highestArchiveNum = require('Module:Highest archive number')._main(
obj.currentTitle.nsText ..
':' ..
obj.currentTitle.baseText ..
'/' ..
obj.archivePrefix
)
return obj
end
function Navigator:message(key, ...)
local msg = self.cfg[key]
if select('#', ...) > 0 then
return mw.message.newRawMessage(msg, ...):plain()
else
return msg
end
end
function Navigator:makeBlurb()
local args = self.args
if args[1] == '1' then
-- The old template used "|1" to suppress the blurb.
return ''
else
local ret
if args.text then
ret = args.text
else
local talkPage = self.currentTitle.nsText ..
':' ..
self.currentTitle.baseText
if args.period then
ret = self:message('blurb-period', talkPage, args.period)
else
ret = self:message('blurb-noperiod', talkPage)
end
end
return ret
end
end
function Navigator:makeMessageBox()
local args = self.args
local image
if args.image then
image = args.image
else
local icon = args.icon or self:message('default-icon')
image = string.format(
'[[File:%s|%s|alt=|link=]]',
icon,
self:message('image-size')
)
end
local mbox = require('Module:Message box').main('tmbox', {
image = image,
imageright = args.imageright,
style = args.style or 'width:80%;margin-left:auto;margin-right:auto',
textstyle = args.textstyle or 'text-align:center',
text = self:makeBlurb()
})
return mbox
end
function Navigator:getArchiveNums()
-- Returns an array of the archive numbers to format.
local noLinks = tonumber(self.args.links) or self:message('default-link-count')
noLinks = math.floor(noLinks)
-- If |noredlinks is "yes", true or absent, don't allow red links. If it is
-- 'no' or false, allow red links.
local allowRedLinks = yesno(self.args.noredlinks) == false
local current = self.currentArchiveNum
local highest = self.highestArchiveNum
if not current or not highest or noLinks < 1 then
return {}
elseif noLinks == 1 then
return {current}
end
local function getNum(i, current)
-- Gets an archive number given i, the position in the array away from
-- the current archive, and the current archive number. The first two
-- offsets are consecutive; the third offset is rounded up to the
-- nearest 5; and the fourth and subsequent offsets are rounded up to
-- the nearest 10. The offsets are calculated in such a way that archive
-- numbers will not be duplicated.
if -2 <= i and i <= 2 then
return current + i
elseif -3 <= i and i <= 3 then
return current + 2 - (current + 2) % 5 + (i / 3) * 5
elseif 4 <= i then
return current + 7 - (current + 7) % 10 + (i - 3) * 10
else
return current + 2 - (current + 2) % 10 + (i + 3) * 10
end
end
local nums = {}
-- Archive nums lower than the current page.
for i = -1, -math.floor((noLinks - 1) / 2), -1 do
local num = getNum(i, current)
if num <= 1 then
table.insert(nums, 1, 1)
break
else
table.insert(nums, 1, num)
end
end
-- Current page.
if nums[#nums] < current then
table.insert(nums, current)
end
-- Higher archive nums.
for i = 1, math.ceil((noLinks - 1) / 2) do
local num = getNum(i, current)
if num <= highest then
table.insert(nums, num)
elseif allowRedLinks and (i <= 2 or i <= 3 and num == nums[#nums] + 1) then
-- Only insert one red link, and only if it is consecutive.
table.insert(nums, highest + 1)
break
elseif nums[#nums] < highest then
-- Insert the highest archive number if it isn't already there.
table.insert(nums, highest)
break
else
break
end
end
return nums
end
function Navigator:makeArchiveLinksWikitable()
local lang = mw.language.getContentLanguage()
local nums = self:getArchiveNums()
local noLinks = #nums
if noLinks < 1 then
return ''
end
-- Make the table of links.
local links = {}
local isCompact = noLinks > 7
local currentIndex
for i, num in ipairs(nums) do
local subpage = self.archivePrefix .. tostring(num)
local display
if isCompact then
display = tostring(num)
else
display = self:message('archive-link-display', num)
end
local link = makeWikilink('../' .. subpage, display)
if num == self.currentArchiveNum then
link = string.format('<span style="font-size:115%%;">%s</span>', link)
currentIndex = i
end
table.insert(links, link)
end
-- Add the arrows.
-- We must do the forwards arrow first as we are adding elements to the
-- links table. If we did the backwards arrow first the index for the
-- current archive would be wrong.
currentIndex = currentIndex or math.ceil(#links / 2)
for i = currentIndex + 1, #links do
if nums[i] - nums[i - 1] > 1 then
table.insert(links, i, lang:getArrow('forwards'))
break
end
end
for i = currentIndex - 1, 1, -1 do
if nums[i + 1] - nums[i] > 1 then
table.insert(links, i + 1, lang:getArrow('backwards'))
break
end
end
-- Output the wikitable.
local ret = {}
local width
if noLinks <= 3 then
width = string.format('%dem', noLinks * 10)
elseif noLinks <= 7 then
width = string.format('%dem', (noLinks + 3) * 5)
else
width = '50em'
end
ret[#ret + 1] = string.format(
'{| style="width:%s;background:transparent;' ..
'margin:0 auto 0.5em;text-align:center"',
width
)
for i, s in ipairs(links) do
if i % 20 == 1 then
ret[#ret + 1] = '\n|-'
end
ret[#ret + 1] = '\n| '
ret[#ret + 1] = s
end
ret[#ret + 1] = '\n|}'
return table.concat(ret)
end
function Navigator:__tostring()
return self:makeMessageBox() ..
'\n' ..
self:makeArchiveLinksWikitable() ..
' __NONEWSECTIONLINK__ __NOEDITSECTION__'
end
-------------------------------------------------------------------------------
-- Exports
-------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
return {
Navigator = Navigator
}
end
function p._aan(args, cfg, currentTitle)
cfg = cfg or mw.loadData('Module:Automatic archive navigator/config')
currentTitle = currentTitle or mw.title.getCurrentTitle()
local aan = Navigator.new(args, cfg, currentTitle)
return tostring(aan)
end
function p.aan(frame)
local args = require('Module:Arguments').getArgs(frame, {
wrappers = 'Template:Automatic archive navigator',
})
return p._aan(args)
end
return p
9lfvlakldw2rxv72z3j7je49k90g7ya
มอดูล:Automatic archive navigator/config
828
68
265
2025-11-23T08:57:50Z
Taweetham
7
จากวิกิพีเดีย
265
Scribunto
text/plain
--------------------------------------------------------------------------------
-- Configuration for Module:Automatic archive navigator
--
-- This module contains configuration data for
-- [[Module:Automatic archive navigator]]. It can be used to easily translate the
-- module for use on other wikis, as well as changing settings like the default
-- archive prefix and the default link count.
--------------------------------------------------------------------------------
return {
--------------------------------------------------------------------------------
-- Blurb
--------------------------------------------------------------------------------
-- The blurbs to use for the archive banner. If the "period" argument is
-- specified, the "blurb-period" message is used; otherwise the "blurb-noperiod"
-- message is used.
-- $1 - the full page name of the current talk page (assumed to be the base
-- page of the archive pages.
-- $2 - the value of the "period" argument.
['blurb-period'] = "หน้านี้เป็นหน้า'''[[วิธีใช้:กรุ|กรุ]]'''" ..
"ของการอภิปรายอภิปรายในอดีต '''สำหรับช่วง $2'''<br />'''อย่าแก้ไข" ..
"เนื้อหาของหน้านี้''' หากต้องการเริ่มการอภิปรายใหม่หรือ" ..
"รื้อฟื้นการอภิปรายเดิม โปรดใช้[[$1|หน้าพูดคุยปัจจุบัน]]ของหน้านี้",
['blurb-noperiod'] = "หน้านี้เป็นหน้า'''[[วิธีใช้:กรุ|กรุ]]'''" ..
"ของการอภิปรายอภิปรายในอดีต '''อย่าแก้ไขเนื้อหาของหน้านี้''' หาก" ..
"ต้องการเริ่มการอภิปรายใหม่หรือรื้อฟื้นการอภิปรายเดิม" ..
"โปรดใช้[[$1|หน้าพูดคุยปัจจุบัน]]ของหน้านี้",
--------------------------------------------------------------------------------
-- Image
--------------------------------------------------------------------------------
-- The default icon for the archive banner.
['default-icon'] = 'Replacement filing cabinet.svg',
-- The image size, unless a custom image is specified with the "image"
-- parameter.
['image-size'] = '40x40px',
--------------------------------------------------------------------------------
-- Archive links
--------------------------------------------------------------------------------
-- The default prefix for archive pages on this wiki. This is the subpage text
-- minus the archive number itself. So if the full page name of a typical
-- archive was "Talk:France/Archive 12", the prefix would be "Archive ". This
-- message is used to detect whether the current page is an archive page.
['archive-prefix'] = 'กรุ ',
-- The display value to use for long archive links. These are used if seven or
-- less links are output.
-- $1 - The archive number.
['archive-link-display'] = 'กรุ $1',
-- The default number of archive links to output.
['default-link-count'] = 7
}
dm8iou663kg3be8u41nbze3qbvxik0z
มอดูล:Automatic archive navigator
828
69
266
2025-11-23T08:59:08Z
Taweetham
7
จากวิกิพีเดีย
266
Scribunto
text/plain
return require [[มอดูล:กรุ]]
aysgtrdcokl9x9l14ixt050ytu3v2lu
มอดูล:Highest archive number
828
70
267
2025-11-23T08:59:55Z
Taweetham
7
จากวิกิพีเดีย
267
Scribunto
text/plain
-- This module finds the highest existing archive number for a set of talk
-- archive pages.
local expSearch = require('Module:Exponential search')
local p = {}
local function raiseStartNumberError(start)
error(string.format(
'Invalid start number "%s" supplied to [[Module:Highest archive number]] (must be an integer)',
tostring(start)
), 3)
end
local function pageExists(page)
local success, exists = pcall(function()
return mw.title.new(page).exists
end)
return success and exists
end
function p._main(prefix, start)
-- Check our inputs
if type(prefix) ~= 'string' or not prefix:find('%S') then
error('No prefix supplied to [[Module:Highest archive number]]', 2)
end
if start ~= nil and (type(start) ~= "number" or math.floor(start) ~= start) then
raiseStartNumberError(start)
end
start = start or 1
-- Do an exponential search for the highest archive number
local result = expSearch(function (i)
local archiveNumber = i + start - 1
local page = prefix .. tostring(archiveNumber)
return pageExists(page)
end, 10)
if result == nil then
-- We didn't find any archives for our prefix + start number
return nil
else
-- We found the highest archive, but the number is always 1-based, so
-- adjust it for our start number
return result + start - 1
end
end
function p.main(frame)
local args = require('Module:Arguments').getArgs(frame, {
trim = false,
removeBlanks = false,
wrappers = 'Template:Highest archive number'
})
local prefix = args[1]
-- Get the start archive number, if specified.
local start = args.start
if start == "" then
start = nil
elseif start then
start = tonumber(start)
if not start then
raiseStartNumberError(args.start)
end
end
return p._main(prefix, start)
end
return p
h3czqly5m6n03xkq0oyziwlta1lovvd
มอดูล:Exponential search
828
71
268
2025-11-23T09:01:16Z
Taweetham
7
จากวิกิพีเดีย
268
Scribunto
text/plain
-- This module provides a generic exponential search algorithm.
require[[strict]]
local checkType = require('libraryUtil').checkType
local floor = math.floor
local function midPoint(lower, upper)
return floor(lower + (upper - lower) / 2)
end
local function search(testFunc, i, lower, upper)
if testFunc(i) then
if i + 1 == upper then
return i
end
lower = i
if upper then
i = midPoint(lower, upper)
else
i = i * 2
end
return search(testFunc, i, lower, upper)
else
upper = i
i = midPoint(lower, upper)
return search(testFunc, i, lower, upper)
end
end
return function (testFunc, init)
checkType('Exponential search', 1, testFunc, 'function')
checkType('Exponential search', 2, init, 'number', true)
if init and (init < 1 or init ~= floor(init) or init == math.huge) then
error(string.format(
"invalid init value '%s' detected in argument #2 to " ..
"'Exponential search' (init value must be a positive integer)",
tostring(init)
), 2)
end
init = init or 2
if not testFunc(1) then
return nil
end
return search(testFunc, init, 1, nil)
end
jqqi8l27tb73lglksbukg2g3bzt3fmv
แม่แบบ:คู่มือการใช้งาน
10
72
269
2025-11-23T09:02:23Z
Taweetham
7
จากวิกิพีเดีย
269
wikitext
text/x-wiki
{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude>
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. -->
</noinclude>
o4ddn701tao1ufdnkxe1wdgz5b5ga84
มอดูล:Documentation
828
73
270
2025-11-23T09:02:58Z
Taweetham
7
สร้างหน้าด้วย "-- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub local format = mw.ustring.format ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but..."
270
Scribunto
text/plain
-- This module implements {{documentation}}.
-- Get required modules.
local getArgs = require('Module:Arguments').getArgs
-- Get the config table.
local cfg = mw.loadData('Module:Documentation/config')
local p = {}
-- Often-used functions.
local ugsub = mw.ustring.gsub
local format = mw.ustring.format
----------------------------------------------------------------------------
-- Helper functions
--
-- These are defined as local functions, but are made available in the p
-- table for testing purposes.
----------------------------------------------------------------------------
local function message(cfgKey, valArray, expectType)
--[[
-- Gets a message from the cfg table and formats it if appropriate.
-- The function raises an error if the value from the cfg table is not
-- of the type expectType. The default type for expectType is 'string'.
-- If the table valArray is present, strings such as $1, $2 etc. in the
-- message are substituted with values from the table keys [1], [2] etc.
-- For example, if the message "foo-message" had the value 'Foo $2 bar $1.',
-- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz."
--]]
local msg = cfg[cfgKey]
expectType = expectType or 'string'
if type(msg) ~= expectType then
error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2)
end
if not valArray then
return msg
end
local function getMessageVal(match)
match = tonumber(match)
return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4)
end
return ugsub(msg, '$([1-9][0-9]*)', getMessageVal)
end
p.message = message
local function makeWikilink(page, display)
if display then
return format('[[%s|%s]]', page, display)
else
return format('[[%s]]', page)
end
end
p.makeWikilink = makeWikilink
local function makeCategoryLink(cat, sort)
local catns = mw.site.namespaces[14].name
return makeWikilink(catns .. ':' .. cat, sort)
end
p.makeCategoryLink = makeCategoryLink
local function makeUrlLink(url, display)
return format('[%s %s]', url, display)
end
p.makeUrlLink = makeUrlLink
local function makeToolbar(...)
local ret = {}
local lim = select('#', ...)
if lim < 1 then
return nil
end
for i = 1, lim do
ret[#ret + 1] = select(i, ...)
end
-- 'documentation-toolbar'
return format(
'<span class="%s">(%s)</span>',
message('toolbar-class'),
table.concat(ret, ' | ')
)
end
p.makeToolbar = makeToolbar
----------------------------------------------------------------------------
-- Argument processing
----------------------------------------------------------------------------
local function makeInvokeFunc(funcName)
return function (frame)
local args = getArgs(frame, {
valueFunc = function (key, value)
if type(value) == 'string' then
value = value:match('^%s*(.-)%s*$') -- Remove whitespace.
if key == 'heading' or value ~= '' then
return value
else
return nil
end
else
return value
end
end
})
return p[funcName](args)
end
end
----------------------------------------------------------------------------
-- Entry points
----------------------------------------------------------------------------
function p.nonexistent(frame)
if mw.title.getCurrentTitle().subpageText == 'testcases' then
return frame:expandTemplate{title = 'module test cases notice'}
else
return p.main(frame)
end
end
p.main = makeInvokeFunc('_main')
function p._main(args)
--[[
-- This function defines logic flow for the module.
-- @args - table of arguments passed by the user
--]]
local env = p.getEnvironment(args)
local root = mw.html.create()
root
:wikitext(p._getModuleWikitext(args, env))
:wikitext(p.protectionTemplate(env))
:wikitext(p.sandboxNotice(args, env))
:tag('div')
-- 'documentation-container'
:addClass(message('container'))
:attr('role', 'complementary')
:attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil)
:attr('aria-label', args.heading == '' and 'Documentation' or nil)
:newline()
:tag('div')
-- 'documentation'
:addClass(message('main-div-classes'))
:newline()
:wikitext(p._startBox(args, env))
:wikitext(p._content(args, env))
:tag('div')
-- 'documentation-clear'
:addClass(message('clear'))
:done()
:newline()
:done()
:wikitext(p._endBox(args, env))
:done()
:wikitext(p.addTrackingCategories(env))
-- 'Module:Documentation/styles.css'
return mw.getCurrentFrame():extensionTag (
'templatestyles', '', {src=cfg['templatestyles']
}) .. tostring(root)
end
----------------------------------------------------------------------------
-- Environment settings
----------------------------------------------------------------------------
function p.getEnvironment(args)
--[[
-- Returns a table with information about the environment, including title
-- objects and other namespace- or path-related data.
-- @args - table of arguments passed by the user
--
-- Title objects include:
-- env.title - the page we are making documentation for (usually the current title)
-- env.templateTitle - the template (or module, file, etc.)
-- env.docTitle - the /doc subpage.
-- env.sandboxTitle - the /sandbox subpage.
-- env.testcasesTitle - the /testcases subpage.
--
-- Data includes:
-- env.protectionLevels - the protection levels table of the title object.
-- env.subjectSpace - the number of the title's subject namespace.
-- env.docSpace - the number of the namespace the title puts its documentation in.
-- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace.
-- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template.
--
-- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value
-- returned will be nil.
--]]
local env, envFuncs = {}, {}
-- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value
-- returned by that function is memoized in the env table so that we don't call any of the functions
-- more than once. (Nils won't be memoized.)
setmetatable(env, {
__index = function (t, key)
local envFunc = envFuncs[key]
if envFunc then
local success, val = pcall(envFunc)
if success then
env[key] = val -- Memoise the value.
return val
end
end
return nil
end
})
function envFuncs.title()
-- The title object for the current page, or a test page passed with args.page.
local title
local titleArg = args.page
if titleArg then
title = mw.title.new(titleArg)
else
title = mw.title.getCurrentTitle()
end
return title
end
function envFuncs.templateTitle()
--[[
-- The template (or module, etc.) title object.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
-- 'testcases-subpage' --> 'testcases'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local subpage = title.subpageText
if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then
return mw.title.makeTitle(subjectSpace, title.baseText)
else
return mw.title.makeTitle(subjectSpace, title.text)
end
end
function envFuncs.docTitle()
--[[
-- Title object of the /doc subpage.
-- Messages:
-- 'doc-subpage' --> 'doc'
--]]
local title = env.title
local docname = args[1] -- User-specified doc page.
local docpage
if docname then
docpage = docname
else
docpage = env.docpageBase .. '/' .. message('doc-subpage')
end
return mw.title.new(docpage)
end
function envFuncs.sandboxTitle()
--[[
-- Title object for the /sandbox subpage.
-- Messages:
-- 'sandbox-subpage' --> 'sandbox'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage'))
end
function envFuncs.testcasesTitle()
--[[
-- Title object for the /testcases subpage.
-- Messages:
-- 'testcases-subpage' --> 'testcases'
--]]
return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage'))
end
function envFuncs.protectionLevels()
-- The protection levels table of the title object.
return env.title.protectionLevels
end
function envFuncs.subjectSpace()
-- The subject namespace number.
return mw.site.namespaces[env.title.namespace].subject.id
end
function envFuncs.docSpace()
-- The documentation namespace number. For most namespaces this is the
-- same as the subject namespace. However, pages in the Article, File,
-- MediaWiki or Category namespaces must have their /doc, /sandbox and
-- /testcases pages in talk space.
local subjectSpace = env.subjectSpace
if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then
return subjectSpace + 1
else
return subjectSpace
end
end
function envFuncs.docpageBase()
-- The base page of the /doc, /sandbox, and /testcases subpages.
-- For some namespaces this is the talk page, rather than the template page.
local templateTitle = env.templateTitle
local docSpace = env.docSpace
local docSpaceText = mw.site.namespaces[docSpace].name
-- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon.
return docSpaceText .. ':' .. templateTitle.text
end
function envFuncs.compareUrl()
-- Diff link between the sandbox and the main template using [[Special:ComparePages]].
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
if templateTitle.exists and sandboxTitle.exists then
local compareUrl = mw.uri.canonicalUrl(
'Special:ComparePages',
{ page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText}
)
return tostring(compareUrl)
else
return nil
end
end
return env
end
----------------------------------------------------------------------------
-- Auxiliary templates
----------------------------------------------------------------------------
p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext')
function p._getModuleWikitext(args, env)
local currentTitle = mw.title.getCurrentTitle()
if currentTitle.contentModel ~= 'Scribunto' then return end
pcall(require, currentTitle.prefixedText) -- if it fails, we don't care
local moduleWikitext = package.loaded["Module:Module wikitext"]
if moduleWikitext then
return moduleWikitext.main()
end
end
function p.sandboxNotice(args, env)
--[=[
-- Generates a sandbox notice for display above sandbox pages.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]'
-- 'sandbox-notice-blurb' --> 'This is the $1 for $2.'
-- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).'
-- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page'
-- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page'
-- 'sandbox-notice-pagetype-other' --> 'sandbox page'
-- 'sandbox-notice-compare-link-display' --> 'diff'
-- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.'
-- 'sandbox-notice-testcases-link-display' --> 'test cases'
-- 'sandbox-category' --> 'Template sandboxes'
-- 'module-sandbox-category' --> 'Module sandboxes'
-- 'other-sandbox-category' --> 'Sandboxes outside of template or module namespace'
--]=]
local title = env.title
local sandboxTitle = env.sandboxTitle
local templateTitle = env.templateTitle
local subjectSpace = env.subjectSpace
if not (subjectSpace and title and sandboxTitle and templateTitle
and mw.title.equals(title, sandboxTitle)) then
return nil
end
-- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text".
local omargs = {}
omargs.image = message('sandbox-notice-image')
-- Get the text. We start with the opening blurb, which is something like
-- "This is the template sandbox for [[Template:Foo]] (diff)."
local text = '__EXPECTUNUSEDTEMPLATE__'
local pagetype, sandboxCat
if subjectSpace == 10 then
pagetype = message('sandbox-notice-pagetype-template')
sandboxCat = message('sandbox-category')
elseif subjectSpace == 828 then
pagetype = message('sandbox-notice-pagetype-module')
sandboxCat = message('module-sandbox-category')
else
pagetype = message('sandbox-notice-pagetype-other')
sandboxCat = message('other-sandbox-category')
end
local templateLink = makeWikilink(templateTitle.prefixedText)
local compareUrl = env.compareUrl
if compareUrl then
local compareDisplay = message('sandbox-notice-compare-link-display')
local compareLink = makeUrlLink(compareUrl, compareDisplay)
text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink})
else
text = text .. message('sandbox-notice-blurb', {pagetype, templateLink})
end
-- Get the test cases page blurb if the page exists. This is something like
-- "See also the companion subpage for [[Template:Foo/testcases|test cases]]."
local testcasesTitle = env.testcasesTitle
if testcasesTitle and testcasesTitle.exists then
if testcasesTitle.contentModel == "Scribunto" then
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink})
else
local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display')
local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay)
text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink})
end
end
-- Add the sandbox to the sandbox category.
omargs.text = text .. makeCategoryLink(sandboxCat)
-- 'documentation-clear'
return '<div class="' .. message('clear') .. '"></div>'
.. require('Module:Message box').main('ombox', omargs)
end
function p.protectionTemplate(env)
-- Generates the padlock icon in the top right.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'protection-template' --> 'pp-template'
-- 'protection-template-args' --> {docusage = 'yes'}
local protectionLevels = env.protectionLevels
if not protectionLevels then
return nil
end
local editProt = protectionLevels.edit and protectionLevels.edit[1]
local moveProt = protectionLevels.move and protectionLevels.move[1]
if editProt then
-- The page is edit-protected.
return require('Module:Protection banner')._main{
message('protection-reason-edit'), small = true
}
elseif moveProt and moveProt ~= 'autoconfirmed' then
-- The page is move-protected but not edit-protected. Exclude move
-- protection with the level "autoconfirmed", as this is equivalent to
-- no move protection at all.
return require('Module:Protection banner')._main{
action = 'move', small = true
}
else
return nil
end
end
----------------------------------------------------------------------------
-- Start box
----------------------------------------------------------------------------
p.startBox = makeInvokeFunc('_startBox')
function p._startBox(args, env)
--[[
-- This function generates the start box.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make
-- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox
-- which generate the box HTML.
--]]
env = env or p.getEnvironment(args)
local links
local content = args.content
if not content or args[1] then
-- No need to include the links if the documentation is on the template page itself.
local linksData = p.makeStartBoxLinksData(args, env)
if linksData then
links = p.renderStartBoxLinks(linksData)
end
end
-- Generate the start box html.
local data = p.makeStartBoxData(args, env, links)
if data then
return p.renderStartBox(data)
else
-- User specified no heading.
return nil
end
end
function p.makeStartBoxLinksData(args, env)
--[[
-- Does initial processing of data to make the [view] [edit] [history] [purge] links.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'view-link-display' --> 'view'
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'purge-link-display' --> 'purge'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'docpage-preload' --> 'Template:Documentation/preload'
-- 'create-link-display' --> 'create'
--]]
local subjectSpace = env.subjectSpace
local title = env.title
local docTitle = env.docTitle
if not title or not docTitle then
return nil
end
if docTitle.isRedirect then
docTitle = docTitle.redirectTarget
end
-- Create link if /doc doesn't exist.
local preload = args.preload
if not preload then
if subjectSpace == 828 then -- Module namespace
preload = message('module-preload')
else
preload = message('docpage-preload')
end
end
return {
title = title,
docTitle = docTitle,
-- View, display, edit, and purge links if /doc exists.
viewLinkDisplay = message('view-link-display'),
editLinkDisplay = message('edit-link-display'),
historyLinkDisplay = message('history-link-display'),
purgeLinkDisplay = message('purge-link-display'),
preload = preload,
createLinkDisplay = message('create-link-display')
}
end
function p.renderStartBoxLinks(data)
--[[
-- Generates the [view][edit][history][purge] or [create][purge] links from the data table.
-- @data - a table of data generated by p.makeStartBoxLinksData
--]]
local docTitle = data.docTitle
-- yes, we do intend to purge the template page on which the documentation appears
local purgeLink = makeWikilink("Special:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay)
if docTitle.exists then
local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay)
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay)
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay)
return "[" .. viewLink .. "] [" .. editLink .. "] [" .. historyLink .. "] [" .. purgeLink .. "]"
else
local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay)
return "[" .. createLink .. "] [" .. purgeLink .. "]"
end
return ret
end
function p.makeStartBoxData(args, env, links)
--[=[
-- Does initial processing of data to pass to the start-box render function, p.renderStartBox.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error.
--
-- Messages:
-- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- 'template-namespace-heading' --> 'Template documentation'
-- 'module-namespace-heading' --> 'Module documentation'
-- 'file-namespace-heading' --> 'Summary'
-- 'other-namespaces-heading' --> 'Documentation'
-- 'testcases-create-link-display' --> 'create'
--]=]
local subjectSpace = env.subjectSpace
if not subjectSpace then
-- Default to an "other namespaces" namespace, so that we get at least some output
-- if an error occurs.
subjectSpace = 2
end
local data = {}
-- Heading
local heading = args.heading -- Blank values are not removed.
if heading == '' then
-- Don't display the start box if the heading arg is defined but blank.
return nil
end
if heading then
data.heading = heading
elseif subjectSpace == 10 then -- Template namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading')
elseif subjectSpace == 828 then -- Module namespace
data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading')
elseif subjectSpace == 6 then -- File namespace
data.heading = message('file-namespace-heading')
else
data.heading = message('other-namespaces-heading')
end
-- Heading CSS
local headingStyle = args['heading-style']
if headingStyle then
data.headingStyleText = headingStyle
else
-- 'documentation-heading'
data.headingClass = message('main-div-heading-class')
end
-- Data for the [view][edit][history][purge] or [create] links.
if links then
-- 'mw-editsection-like plainlinks'
data.linksClass = message('start-box-link-classes')
data.links = links
end
return data
end
function p.renderStartBox(data)
-- Renders the start box html.
-- @data - a table of data generated by p.makeStartBoxData.
local sbox = mw.html.create('div')
sbox
-- 'documentation-startbox'
:addClass(message('start-box-class'))
:newline()
:tag('span')
:addClass(data.headingClass)
:attr('id', 'documentation-heading')
:cssText(data.headingStyleText)
:wikitext(data.heading)
local links = data.links
if links then
sbox:tag('span')
:addClass(data.linksClass)
:attr('id', data.linksId)
:wikitext(links)
end
return tostring(sbox)
end
----------------------------------------------------------------------------
-- Documentation content
----------------------------------------------------------------------------
p.content = makeInvokeFunc('_content')
function p._content(args, env)
-- Displays the documentation contents
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
local content = args.content
if not content and docTitle and docTitle.exists then
content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText}
end
-- The line breaks below are necessary so that "=== Headings ===" at the start and end
-- of docs are interpreted correctly.
return '\n' .. (content or '') .. '\n'
end
p.contentTitle = makeInvokeFunc('_contentTitle')
function p._contentTitle(args, env)
env = env or p.getEnvironment(args)
local docTitle = env.docTitle
if not args.content and docTitle and docTitle.exists then
return docTitle.prefixedText
else
return ''
end
end
----------------------------------------------------------------------------
-- End box
----------------------------------------------------------------------------
p.endBox = makeInvokeFunc('_endBox')
function p._endBox(args, env)
--[=[
-- This function generates the end box (also known as the link box).
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
--]=]
-- Get environment data.
env = env or p.getEnvironment(args)
local subjectSpace = env.subjectSpace
local docTitle = env.docTitle
if not subjectSpace or not docTitle then
return nil
end
-- Check whether we should output the end box at all. Add the end
-- box by default if the documentation exists or if we are in the
-- user, module or template namespaces.
local linkBox = args['link box']
if linkBox == 'off'
or not (
docTitle.exists
or subjectSpace == 2
or subjectSpace == 828
or subjectSpace == 10
)
then
return nil
end
-- Assemble the link box.
local text = ''
if linkBox then
text = text .. linkBox
else
text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]."
if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then
-- We are in the user, template or module namespaces.
-- Add sandbox and testcases links.
-- "Editors can experiment in this template's sandbox and testcases pages."
text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />'
if not args.content and not args[1] then
-- "Please add categories to the /doc subpage."
-- Don't show this message with inline docs or with an explicitly specified doc page,
-- as then it is unclear where to add the categories.
text = text .. (p.makeCategoriesBlurb(args, env) or '')
end
text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template"
end
end
local box = mw.html.create('div')
-- 'documentation-metadata'
box:attr('role', 'note')
:addClass(message('end-box-class'))
-- 'plainlinks'
:addClass(message('end-box-plainlinks'))
:wikitext(text)
:done()
return '\n' .. tostring(box)
end
function p.makeDocPageBlurb(args, env)
--[=[
-- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)".
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'edit-link-display' --> 'edit'
-- 'history-link-display' --> 'history'
-- 'transcluded-from-blurb' -->
-- 'The above [[Wikipedia:Template documentation|documentation]]
-- is [[Help:Transclusion|transcluded]] from $1.'
-- 'module-preload' --> 'Template:Documentation/preload-module-doc'
-- 'create-link-display' --> 'create'
-- 'create-module-doc-blurb' -->
-- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].'
--]=]
local docTitle = env.docTitle
if not docTitle then
return nil
end
if docTitle.exists then
-- /doc exists; link to it.
local docLink = makeWikilink(docTitle.prefixedText)
local editDisplay = message('edit-link-display')
local editLink = makeWikilink("Special:EditPage/" .. docTitle.prefixedText, editDisplay)
local historyDisplay = message('history-link-display')
local historyLink = makeWikilink("Special:PageHistory/" .. docTitle.prefixedText, historyDisplay)
return message('transcluded-from-blurb', {docLink})
.. ' '
.. makeToolbar(editLink, historyLink)
.. '<br />'
elseif env.subjectSpace == 828 then
-- /doc does not exist; ask to create it.
local createUrl = docTitle:canonicalUrl{action = 'edit', preload = message('module-preload')}
local createDisplay = message('create-link-display')
local createLink = makeUrlLink(createUrl, createDisplay)
return message('create-module-doc-blurb', {createLink})
.. '<br />'
end
end
function p.makeExperimentBlurb(args, env)
--[[
-- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
--
-- Messages:
-- 'sandbox-link-display' --> 'sandbox'
-- 'sandbox-edit-link-display' --> 'edit'
-- 'compare-link-display' --> 'diff'
-- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'sandbox-create-link-display' --> 'create'
-- 'mirror-edit-summary' --> 'Create sandbox version of $1'
-- 'mirror-link-display' --> 'mirror'
-- 'mirror-link-preload' --> 'Template:Documentation/mirror'
-- 'sandbox-link-display' --> 'sandbox'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display'--> 'edit'
-- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox'
-- 'testcases-create-link-display' --> 'create'
-- 'testcases-link-display' --> 'testcases'
-- 'testcases-edit-link-display' --> 'edit'
-- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases'
-- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases'
-- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.'
-- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
local sandboxTitle = env.sandboxTitle
local testcasesTitle = env.testcasesTitle
local templatePage = templateTitle.prefixedText
if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then
return nil
end
-- Make links.
local sandboxLinks, testcasesLinks
if sandboxTitle.exists then
local sandboxPage = sandboxTitle.prefixedText
local sandboxDisplay = message('sandbox-link-display')
local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay)
local sandboxEditDisplay = message('sandbox-edit-link-display')
local sandboxEditLink = makeWikilink("Special:EditPage/" .. sandboxPage, sandboxEditDisplay)
local compareUrl = env.compareUrl
local compareLink
if compareUrl then
local compareDisplay = message('compare-link-display')
compareLink = makeUrlLink(compareUrl, compareDisplay)
end
sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink)
else
local sandboxPreload
if subjectSpace == 828 then
sandboxPreload = message('module-sandbox-preload')
else
sandboxPreload = message('template-sandbox-preload')
end
local sandboxCreateUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = sandboxPreload}
local sandboxCreateDisplay = message('sandbox-create-link-display')
local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay)
local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)})
local mirrorPreload = message('mirror-link-preload')
local mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary}
if subjectSpace == 828 then
mirrorUrl = sandboxTitle:canonicalUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary}
end
local mirrorDisplay = message('mirror-link-display')
local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay)
sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink)
end
if testcasesTitle.exists then
local testcasesPage = testcasesTitle.prefixedText
local testcasesDisplay = message('testcases-link-display')
local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay)
local testcasesEditUrl = testcasesTitle:canonicalUrl{action = 'edit'}
local testcasesEditDisplay = message('testcases-edit-link-display')
local testcasesEditLink = makeWikilink("Special:EditPage/" .. testcasesPage, testcasesEditDisplay)
-- for Modules, add testcases run link if exists
if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then
local testcasesRunLinkDisplay = message('testcases-run-link-display')
local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay)
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink)
else
testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink)
end
else
local testcasesPreload
if subjectSpace == 828 then
testcasesPreload = message('module-testcases-preload')
else
testcasesPreload = message('template-testcases-preload')
end
local testcasesCreateUrl = testcasesTitle:canonicalUrl{action = 'edit', preload = testcasesPreload}
local testcasesCreateDisplay = message('testcases-create-link-display')
local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay)
testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink)
end
local messageName
if subjectSpace == 828 then
messageName = 'experiment-blurb-module'
else
messageName = 'experiment-blurb-template'
end
return message(messageName, {sandboxLinks, testcasesLinks})
end
function p.makeCategoriesBlurb(args, env)
--[[
-- Generates the text "Please add categories to the /doc subpage."
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'doc-link-display' --> '/doc'
-- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.'
--]]
local docTitle = env.docTitle
if not docTitle then
return nil
end
local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display'))
return message('add-categories-blurb', {docPathLink})
end
function p.makeSubpagesBlurb(args, env)
--[[
-- Generates the "Subpages of this template" link.
-- @args - a table of arguments passed by the user
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'template-pagetype' --> 'template'
-- 'module-pagetype' --> 'module'
-- 'default-pagetype' --> 'page'
-- 'subpages-link-display' --> 'Subpages of this $1'
--]]
local subjectSpace = env.subjectSpace
local templateTitle = env.templateTitle
if not subjectSpace or not templateTitle then
return nil
end
local pagetype
if subjectSpace == 10 then
pagetype = message('template-pagetype')
elseif subjectSpace == 828 then
pagetype = message('module-pagetype')
else
pagetype = message('default-pagetype')
end
local subpagesLink = makeWikilink(
'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/',
message('subpages-link-display', {pagetype})
)
return message('subpages-blurb', {subpagesLink})
end
----------------------------------------------------------------------------
-- Tracking categories
----------------------------------------------------------------------------
function p.addTrackingCategories(env)
--[[
-- Check if {{documentation}} is transcluded on a /doc or /testcases page.
-- @env - environment table containing title objects, etc., generated with p.getEnvironment
-- Messages:
-- 'display-strange-usage-category' --> true
-- 'doc-subpage' --> 'doc'
-- 'testcases-subpage' --> 'testcases'
-- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage'
--
-- /testcases pages in the module namespace are not categorised, as they may have
-- {{documentation}} transcluded automatically.
--]]
local title = env.title
local subjectSpace = env.subjectSpace
if not title or not subjectSpace then
return nil
end
local subpage = title.subpageText
if message('display-strange-usage-category', nil, 'boolean')
and (
subpage == message('doc-subpage')
or subjectSpace ~= 828 and subpage == message('testcases-subpage')
)
then
return makeCategoryLink(message('strange-usage-category'))
end
return ''
end
return p
ky7myqtha9rjaznz4jxomjtdpuanlqs
มอดูล:Documentation/config
828
74
271
2025-11-23T09:04:02Z
Taweetham
7
Thai Wikipedia
271
Scribunto
text/plain
----------------------------------------------------------------------------------------------------
--
-- Configuration for Module:Documentation
--
-- Here you can set the values of the parameters and messages used in Module:Documentation to
-- localise it to your wiki and your language. Unless specified otherwise, values given here
-- should be string values.
----------------------------------------------------------------------------------------------------
local cfg = {} -- Do not edit this line.
----------------------------------------------------------------------------------------------------
-- Protection template configuration
----------------------------------------------------------------------------------------------------
-- cfg['protection-reason-edit']
-- The protection reason for edit-protected templates to pass to
-- [[Module:Protection banner]].
cfg['protection-reason-edit'] = 'template'
--[[
----------------------------------------------------------------------------------------------------
-- Sandbox notice configuration
--
-- On sandbox pages the module can display a template notifying users that the current page is a
-- sandbox, and the location of test cases pages, etc. The module decides whether the page is a
-- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the
-- messages that the notices contains.
----------------------------------------------------------------------------------------------------
--]]
-- cfg['sandbox-notice-image']
-- The image displayed in the sandbox notice.
cfg['sandbox-notice-image'] = '[[File:Sandbox.svg|50px|alt=|link=]]'
--[[
-- cfg['sandbox-notice-pagetype-template']
-- cfg['sandbox-notice-pagetype-module']
-- cfg['sandbox-notice-pagetype-other']
-- The page type of the sandbox page. The message that is displayed depends on the current subject
-- namespace. This message is used in either cfg['sandbox-notice-blurb'] or
-- cfg['sandbox-notice-diff-blurb'].
--]]
cfg['sandbox-notice-pagetype-template'] = 'หน้า[[:en:Wikipedia:Template test cases|กระบะทรายแม่แบบ]]'
cfg['sandbox-notice-pagetype-module'] = 'หน้า[[:en:Wikipedia:Template test cases|กระบะทรายมอดูล]]'
cfg['sandbox-notice-pagetype-other'] = 'หน้ากระบะทราย'
--[[
-- cfg['sandbox-notice-blurb']
-- cfg['sandbox-notice-diff-blurb']
-- cfg['sandbox-notice-diff-display']
-- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence
-- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page
-- type, which is either cfg['sandbox-notice-pagetype-template'],
-- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what
-- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between
-- the sandbox and the main template. The display value of the diff link is set by
-- cfg['sandbox-notice-compare-link-display'].
--]]
cfg['sandbox-notice-blurb'] = 'หน้านี้คือ$1ของ $2'
cfg['sandbox-notice-diff-blurb'] = 'หน้านี้คือ$1ของ $2 ($3)'
cfg['sandbox-notice-compare-link-display'] = 'ดูความแตกต่าง'
--[[
-- cfg['sandbox-notice-testcases-blurb']
-- cfg['sandbox-notice-testcases-link-display']
-- cfg['sandbox-notice-testcases-run-blurb']
-- cfg['sandbox-notice-testcases-run-link-display']
-- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit. $1 is a link to the test cases page.
-- cfg['sandbox-notice-testcases-link-display'] is the display value for that link.
-- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page
-- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test
-- cases page, and $2 is a link to the page to run it.
-- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test
-- cases.
--]]
cfg['sandbox-notice-testcases-blurb'] = 'ดูเพิ่มที่หน้าย่อย$1'
cfg['sandbox-notice-testcases-link-display'] = 'ชุดทดสอบ'
cfg['sandbox-notice-testcases-run-blurb'] = 'ดูเพิ่มที่หน้าย่อย$1 ($2)'
cfg['sandbox-notice-testcases-run-link-display'] = 'ดูผล'
-- cfg['sandbox-category'] - A category to add to all template sandboxes.
-- cfg['module-sandbox-category'] - A category to add to all module sandboxes.
-- cfg['module-sandbox-category'] - A category to add to all sandboxe not in templates or modules.
cfg['sandbox-category'] = 'กระบะทรายแม่แบบ'
cfg['module-sandbox-category'] = 'กระบะทรายมอดูล'
cfg['other-sandbox-category'] = 'หน้ากระบะทรายนอกเนมสเปซแม่แบบหรือมอดูล'
----------------------------------------------------------------------------------------------------
-- Start box configuration
----------------------------------------------------------------------------------------------------
-- cfg['documentation-icon-wikitext']
-- The wikitext for the icon shown at the top of the template.
cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]'
-- cfg['template-namespace-heading']
-- The heading shown in the template namespace.
cfg['template-namespace-heading'] = 'คู่มือการใช้งานแม่แบบ'
-- cfg['module-namespace-heading']
-- The heading shown in the module namespace.
cfg['module-namespace-heading'] = 'คู่มือการใช้งานมอดูล'
-- cfg['file-namespace-heading']
-- The heading shown in the file namespace.
cfg['file-namespace-heading'] = 'ข้อบ่งชี้การใช้งาน'
-- cfg['other-namespaces-heading']
-- The heading shown in other namespaces.
cfg['other-namespaces-heading'] = 'คู่มือการใช้งาน'
-- cfg['view-link-display']
-- The text to display for "view" links.
cfg['view-link-display'] = 'ดู'
-- cfg['edit-link-display']
-- The text to display for "edit" links.
cfg['edit-link-display'] = 'แก้'
-- cfg['history-link-display']
-- The text to display for "history" links.
cfg['history-link-display'] = 'ประวัติ'
-- cfg['purge-link-display']
-- The text to display for "purge" links.
cfg['purge-link-display'] = 'ล้างแคช'
-- cfg['create-link-display']
-- The text to display for "create" links.
cfg['create-link-display'] = 'สร้าง'
----------------------------------------------------------------------------------------------------
-- Link box (end box) configuration
----------------------------------------------------------------------------------------------------
-- cfg['transcluded-from-blurb']
-- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page.
cfg['transcluded-from-blurb'] = '[[:en:Wikipedia:Template documentation|คู่มือการใช้งาน]]ที่ปรากฏด้านบนนี้ดึงมาจาก $1'
--[[
-- cfg['create-module-doc-blurb']
-- Notice displayed in the module namespace when the documentation subpage does not exist.
-- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the
-- display cfg['create-link-display'].
--]]
cfg['create-module-doc-blurb'] = 'คุณอาจจะต้องการ$1คู่มือการใช้งานของ[[WP:LUA|มอดูล]]นี้'
----------------------------------------------------------------------------------------------------
-- Experiment blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['experiment-blurb-template']
-- cfg['experiment-blurb-module']
-- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages.
-- It is only shown in the template and module namespaces. With the default English settings, it
-- might look like this:
--
-- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages.
--
-- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links.
--
-- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending
-- on what namespace we are in.
--
-- Parameters:
--
-- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display'])
--
-- If the sandbox doesn't exist, it is in the format:
--
-- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display'])
--
-- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload']
-- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display']
-- loads a default edit summary of cfg['mirror-edit-summary'].
--
-- $2 is a link to the test cases page. If the test cases page exists, it is in the following format:
--
-- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display'])
--
-- If the test cases page doesn't exist, it is in the format:
--
-- cfg['testcases-link-display'] (cfg['testcases-create-link-display'])
--
-- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the
-- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current
-- namespace.
--]]
cfg['experiment-blurb-template'] = "ผู้เขียนสามารถทำการทดลองได้ที่$1 และ$2 ของแม่แบบนี้"
cfg['experiment-blurb-module'] = "ผู้เขียนสามารถทำการทดลองได้ที่$1 และ$2 ของมอดูลนี้"
----------------------------------------------------------------------------------------------------
-- Sandbox link configuration
----------------------------------------------------------------------------------------------------
-- cfg['sandbox-subpage']
-- The name of the template subpage typically used for sandboxes.
cfg['sandbox-subpage'] = 'sandbox'
-- cfg['template-sandbox-preload']
-- Preload file for template sandbox pages.
cfg['template-sandbox-preload'] = 'แม่แบบ:คู่มือการใช้งาน/ข้อความล่วงหน้ากระบะทราย'
-- cfg['module-sandbox-preload']
-- Preload file for Lua module sandbox pages.
cfg['module-sandbox-preload'] = 'แม่แบบ:คู่มือการใช้งาน/ข้อความล่วงหน้ากระบะทรายมอดูล'
-- cfg['sandbox-link-display']
-- The text to display for "sandbox" links.
cfg['sandbox-link-display'] = 'กระบะทราย'
-- cfg['sandbox-edit-link-display']
-- The text to display for sandbox "edit" links.
cfg['sandbox-edit-link-display'] = 'แก้'
-- cfg['sandbox-create-link-display']
-- The text to display for sandbox "create" links.
cfg['sandbox-create-link-display'] = 'สร้าง'
-- cfg['compare-link-display']
-- The text to display for "compare" links.
cfg['compare-link-display'] = 'ดูความแตกต่าง'
-- cfg['mirror-edit-summary']
-- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the
-- template page.
cfg['mirror-edit-summary'] = 'สร้างหน้ากระบะทรายของ $1'
-- cfg['mirror-link-display']
-- The text to display for "mirror" links.
cfg['mirror-link-display'] = 'คัดลอก'
-- cfg['mirror-link-preload']
-- The page to preload when a user clicks the "mirror" link.
cfg['mirror-link-preload'] = 'Template:Documentation/mirror'
----------------------------------------------------------------------------------------------------
-- Test cases link configuration
----------------------------------------------------------------------------------------------------
-- cfg['testcases-subpage']
-- The name of the template subpage typically used for test cases.
cfg['testcases-subpage'] = 'testcases'
-- cfg['template-testcases-preload']
-- Preload file for template test cases pages.
cfg['template-testcases-preload'] = 'แม่แบบ:คู่มือการใช้งาน/ข้อความล่วงหน้าชุดทดสอบ'
-- cfg['module-testcases-preload']
-- Preload file for Lua module test cases pages.
cfg['module-testcases-preload'] = 'แม่แบบ:คู่มือการใช้งาน/ข้อความล่วงหน้าชุดทดสอบมอดูล'
-- cfg['testcases-link-display']
-- The text to display for "testcases" links.
cfg['testcases-link-display'] = 'ชุดทดสอบ'
-- cfg['testcases-edit-link-display']
-- The text to display for test cases "edit" links.
cfg['testcases-edit-link-display'] = 'แก้'
-- cfg['testcases-run-link-display']
-- The text to display for test cases "run" links.
cfg['testcases-run-link-display'] = 'ดูผล'
-- cfg['testcases-create-link-display']
-- The text to display for test cases "create" links.
cfg['testcases-create-link-display'] = 'สร้าง'
----------------------------------------------------------------------------------------------------
-- Add categories blurb configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['add-categories-blurb']
-- Text to direct users to add categories to the /doc subpage. Not used if the "content" or
-- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a
-- link to the /doc subpage with a display value of cfg['doc-link-display'].
--]]
cfg['add-categories-blurb'] = 'โปรดเพิ่มหมวดหมู่ไปที่หน้าย่อย $1'
-- cfg['doc-link-display']
-- The text to display when linking to the /doc subpage.
cfg['doc-link-display'] = '/doc'
----------------------------------------------------------------------------------------------------
-- Subpages link configuration
----------------------------------------------------------------------------------------------------
--[[
-- cfg['subpages-blurb']
-- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a
-- display value of cfg['subpages-link-display']. In the English version this blurb is simply
-- the link followed by a period, and the link display provides the actual text.
--]]
cfg['subpages-blurb'] = '$1'
--[[
-- cfg['subpages-link-display']
-- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'],
-- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in
-- the template namespace, the module namespace, or another namespace.
--]]
cfg['subpages-link-display'] = 'หน้าย่อยของ$1นี้'
-- cfg['template-pagetype']
-- The pagetype to display for template pages.
cfg['template-pagetype'] = 'แม่แบบ'
-- cfg['module-pagetype']
-- The pagetype to display for Lua module pages.
cfg['module-pagetype'] = 'มอดูล'
-- cfg['default-pagetype']
-- The pagetype to display for pages other than templates or Lua modules.
cfg['default-pagetype'] = 'หน้า'
----------------------------------------------------------------------------------------------------
-- Doc link configuration
----------------------------------------------------------------------------------------------------
-- cfg['doc-subpage']
-- The name of the subpage typically used for documentation pages.
cfg['doc-subpage'] = 'doc'
-- cfg['file-docpage-preload']
-- Preload file for documentation page in the file namespace.
cfg['file-docpage-preload'] = 'แม่แบบ:คู่มือการใช้งาน/ข้อความล่วงหน้าไฟล์'
-- cfg['docpage-preload']
-- Preload file for template documentation pages in all namespaces.
cfg['docpage-preload'] = 'Template:Documentation/preload'
-- cfg['module-preload']
-- Preload file for Lua module documentation pages.
cfg['module-preload'] = 'Template:Documentation/preload-module-doc'
----------------------------------------------------------------------------------------------------
-- HTML and CSS configuration
----------------------------------------------------------------------------------------------------
-- cfg['templatestyles']
-- The name of the TemplateStyles page where CSS is kept.
-- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed.
cfg['templatestyles'] = 'Module:Documentation/styles.css'
-- cfg['container']
-- Class which can be used to set flex or grid CSS on the
-- two child divs documentation and documentation-metadata
cfg['container'] = 'documentation-container'
-- cfg['main-div-classes']
-- Classes added to the main HTML "div" tag.
cfg['main-div-classes'] = 'documentation'
-- cfg['main-div-heading-class']
-- Class for the main heading for templates and modules and assoc. talk spaces
cfg['main-div-heading-class'] = 'documentation-heading'
-- cfg['start-box-class']
-- Class for the start box
cfg['start-box-class'] = 'documentation-startbox'
-- cfg['start-box-link-classes']
-- Classes used for the [view][edit][history] or [create] links in the start box.
-- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]]
cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks'
-- cfg['end-box-class']
-- Class for the end box.
cfg['end-box-class'] = 'documentation-metadata'
-- cfg['end-box-plainlinks']
-- Plainlinks
cfg['end-box-plainlinks'] = 'plainlinks'
-- cfg['toolbar-class']
-- Class added for toolbar links.
cfg['toolbar-class'] = 'documentation-toolbar'
-- cfg['clear']
-- Just used to clear things.
cfg['clear'] = 'documentation-clear'
----------------------------------------------------------------------------------------------------
-- Tracking category configuration
----------------------------------------------------------------------------------------------------
-- cfg['display-strange-usage-category']
-- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage
-- or a /testcases subpage. This should be a boolean value (either true or false).
cfg['display-strange-usage-category'] = true
-- cfg['strange-usage-category']
-- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a
-- /doc subpage or a /testcases subpage.
cfg['strange-usage-category'] = 'หน้าวิกิพีเดียที่ใช้งานแม่แบบคู่มือการใช้งานแปลก'
--[[
----------------------------------------------------------------------------------------------------
-- End configuration
--
-- Don't edit anything below this line.
----------------------------------------------------------------------------------------------------
--]]
return cfg
kr0f0ngztyiirzx9pplahbia6gzljqp
มอดูล:Category handler
828
75
272
2025-11-23T09:04:53Z
Taweetham
7
Thai Wikipedia
272
Scribunto
text/plain
--------------------------------------------------------------------------------
-- --
-- CATEGORY HANDLER --
-- --
-- This module implements the {{category handler}} 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. This module requires [[Module:Namespace detect]] --
-- and [[Module:Yesno]] to be available on the local wiki. It can be --
-- configured for different wikis by altering the values in --
-- [[Module:Category handler/config]], and pages can be blacklisted --
-- from categorisation by using [[Module:Category handler/blacklist]]. --
-- --
--------------------------------------------------------------------------------
-- Load required modules
local yesno = require('Module:Yesno')
-- Lazily load things we don't always need
local mShared, mappings
local p = {}
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function trimWhitespace(s, removeBlanks)
if type(s) ~= 'string' then
return s
end
s = s:match('^%s*(.-)%s*$')
if removeBlanks then
if s ~= '' then
return s
else
return nil
end
else
return s
end
end
--------------------------------------------------------------------------------
-- CategoryHandler class
--------------------------------------------------------------------------------
local CategoryHandler = {}
CategoryHandler.__index = CategoryHandler
function CategoryHandler.new(data, args)
local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)
-- Set the title object
do
local pagename = obj:parameter('demopage')
local success, titleObj
if pagename then
success, titleObj = pcall(mw.title.new, pagename)
end
if success and titleObj then
obj.title = titleObj
if titleObj == mw.title.getCurrentTitle() then
obj._usesCurrentTitle = true
end
else
obj.title = mw.title.getCurrentTitle()
obj._usesCurrentTitle = true
end
end
-- Set suppression parameter values
for _, key in ipairs{'nocat', 'categories'} do
local value = obj:parameter(key)
value = trimWhitespace(value, true)
obj['_' .. key] = yesno(value)
end
do
local subpage = obj:parameter('subpage')
local category2 = obj:parameter('category2')
if type(subpage) == 'string' then
subpage = mw.ustring.lower(subpage)
end
if type(category2) == 'string' then
subpage = mw.ustring.lower(category2)
end
obj._subpage = trimWhitespace(subpage, true)
obj._category2 = trimWhitespace(category2) -- don't remove blank values
end
return obj
end
function CategoryHandler:parameter(key)
local parameterNames = self._data.parameters[key]
local pntype = type(parameterNames)
if pntype == 'string' or pntype == 'number' then
return self._args[parameterNames]
elseif pntype == 'table' then
for _, name in ipairs(parameterNames) do
local value = self._args[name]
if value ~= nil then
return value
end
end
return nil
else
error(string.format(
'invalid config key "%s"',
tostring(key)
), 2)
end
end
function CategoryHandler:isSuppressedByArguments()
return
-- See if a category suppression argument has been set.
self._nocat == true
or self._categories == false
or (
self._category2
and self._category2 ~= self._data.category2Yes
and self._category2 ~= self._data.category2Negative
)
-- Check whether we are on a subpage, and see if categories are
-- suppressed based on our subpage status.
or self._subpage == self._data.subpageNo and self.title.isSubpage
or self._subpage == self._data.subpageOnly and not self.title.isSubpage
end
function CategoryHandler:shouldSkipBlacklistCheck()
-- Check whether the category suppression arguments indicate we
-- should skip the blacklist check.
return self._nocat == false
or self._categories == true
or self._category2 == self._data.category2Yes
end
function CategoryHandler:matchesBlacklist()
if self._usesCurrentTitle then
return self._data.currentTitleMatchesBlacklist
else
mShared = mShared or require('Module:Category handler/shared')
return mShared.matchesBlacklist(
self.title.prefixedText,
mw.loadData('Module:Category handler/blacklist')
)
end
end
function CategoryHandler:isSuppressed()
-- Find if categories are suppressed by either the arguments or by
-- matching the blacklist.
return self:isSuppressedByArguments()
or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()
end
function CategoryHandler:getNamespaceParameters()
if self._usesCurrentTitle then
return self._data.currentTitleNamespaceParameters
else
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
return mShared.getNamespaceParameters(
self.title,
mappings
)
end
end
function CategoryHandler:namespaceParametersExist()
-- Find whether any namespace parameters have been specified.
-- We use the order "all" --> namespace params --> "other" as this is what
-- the old template did.
if self:parameter('all') then
return true
end
if not mappings then
mShared = mShared or require('Module:Category handler/shared')
mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData
end
for ns, params in pairs(mappings) do
for i, param in ipairs(params) do
if self._args[param] then
return true
end
end
end
if self:parameter('other') then
return true
end
return false
end
function CategoryHandler:getCategories()
local params = self:getNamespaceParameters()
local nsCategory
for i, param in ipairs(params) do
local value = self._args[param]
if value ~= nil then
nsCategory = value
break
end
end
if nsCategory ~= nil or self:namespaceParametersExist() then
-- Namespace parameters exist - advanced usage.
if nsCategory == nil then
nsCategory = self:parameter('other')
end
local ret = {self:parameter('all')}
local numParam = tonumber(nsCategory)
if numParam and numParam >= 1 and math.floor(numParam) == numParam then
-- nsCategory is an integer
ret[#ret + 1] = self._args[numParam]
else
ret[#ret + 1] = nsCategory
end
if #ret < 1 then
return nil
else
return table.concat(ret)
end
elseif self._data.defaultNamespaces[self.title.namespace] then
-- Namespace parameters don't exist, simple usage.
return self._args[1]
end
return nil
end
--------------------------------------------------------------------------------
-- Exports
--------------------------------------------------------------------------------
local p = {}
function p._exportClasses()
-- Used for testing purposes.
return {
CategoryHandler = CategoryHandler
}
end
function p._main(args, data)
data = data or mw.loadData('Module:Category handler/data')
local handler = CategoryHandler.new(data, args)
if handler:isSuppressed() then
return nil
end
return handler:getCategories()
end
function p.main(frame, data)
data = data or mw.loadData('Module:Category handler/data')
local args = require('Module:Arguments').getArgs(frame, {
wrappers = data.wrappers,
valueFunc = function (k, v)
v = trimWhitespace(v)
if type(k) == 'number' then
if v ~= '' then
return v
else
return nil
end
else
return v
end
end
})
return p._main(args, data)
end
return p
letwavu3yvlayfzew66uuwixmwebq5b
มอดูล:Documentation/styles.css
828
76
274
2025-11-23T09:06:12Z
Taweetham
7
Wikipedia
274
sanitized-css
text/css
/* {{pp|small=yes}} */
.documentation,
.documentation-metadata {
border: 1px solid #a2a9b1;
background-color: #ecfcf4;
clear: both;
}
.documentation {
margin: 1em 0 0 0;
padding: 1em;
}
.documentation-metadata {
margin: 0.2em 0; /* same margin left-right as .documentation */
font-style: italic;
padding: 0.4em 1em; /* same padding left-right as .documentation */
}
.documentation-startbox {
padding-bottom: 3px;
border-bottom: 1px solid #aaa;
margin-bottom: 1ex;
}
.documentation-heading {
font-weight: bold;
font-size: 125%;
}
.documentation-clear { /* Don't want things to stick out where they shouldn't. */
clear: both;
}
.documentation-toolbar {
font-style: normal;
font-size: 85%;
}
@media screen {
html.skin-theme-clientpref-night .documentation,
html.skin-theme-clientpref-night .documentation-metadata {
background-color: #0b1e1c;
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .documentation,
html.skin-theme-clientpref-os .documentation-metadata {
background-color: #0b1e1c;
}
}
3igw4iwzymtlarkxz89qi8dgj0mdzjy
มอดูล:Category handler/data
828
77
275
2025-11-23T09:06:45Z
Taweetham
7
Thai Wikipedia
275
Scribunto
text/plain
-- This module assembles data to be passed to [[Module:Category handler]] using
-- mw.loadData. This includes the configuration data and whether the current
-- page matches the title blacklist.
local data = require('Module:Category handler/config')
local mShared = require('Module:Category handler/shared')
local blacklist = require('Module:Category handler/blacklist')
local title = mw.title.getCurrentTitle()
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(
title.prefixedText,
blacklist
)
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(
title,
mShared.getParamMappings()
)
return data
k26mwixuaeijisfddb0sxkg82iux8v4
มอดูล:Category handler/config
828
78
276
2025-11-23T09:07:29Z
Taweetham
7
Thai Wikpedia
276
Scribunto
text/plain
--------------------------------------------------------------------------------
-- [[Module:Category handler]] configuration data --
-- Language-specific parameter names and values can be set here. --
-- For blacklist config, see [[Module:Category handler/blacklist]]. --
--------------------------------------------------------------------------------
local cfg = {} -- Don't edit this line.
--------------------------------------------------------------------------------
-- Start configuration data --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Parameter names --
-- These configuration items specify custom parameter names. --
-- To add one extra name, you can use this format: --
-- --
-- foo = 'parameter name', --
-- --
-- To add multiple names, you can use this format: --
-- --
-- foo = {'parameter name 1', 'parameter name 2', 'parameter name 3'}, --
--------------------------------------------------------------------------------
cfg.parameters = {
-- The nocat and categories parameter suppress
-- categorisation. They are used with Module:Yesno, and work as follows:
--
-- cfg.nocat:
-- Result of yesno() Effect
-- true Categorisation is suppressed
-- false Categorisation is allowed, and
-- the blacklist check is skipped
-- nil Categorisation is allowed
--
-- cfg.categories:
-- Result of yesno() Effect
-- true Categorisation is allowed, and
-- the blacklist check is skipped
-- false Categorisation is suppressed
-- nil Categorisation is allowed
nocat = 'nocat',
categories = 'categories',
-- The parameter name for the legacy "category2" parameter. This skips the
-- blacklist if set to the cfg.category2Yes value, and suppresses
-- categorisation if present but equal to anything other than
-- cfg.category2Yes or cfg.category2Negative.
category2 = 'category2',
-- cfg.subpage is the parameter name to specify how to behave on subpages.
subpage = 'subpage',
-- The parameter for data to return in all namespaces.
all = 'all',
-- The parameter name for data to return if no data is specified for the
-- namespace that is detected.
other = 'other',
-- The parameter name used to specify a page other than the current page;
-- used for testing and demonstration.
demopage = 'page',
}
--------------------------------------------------------------------------------
-- Parameter values --
-- These are set values that can be used with certain parameters. Only one --
-- value can be specified, like this: --
-- --
-- cfg.foo = 'value name' -- --
--------------------------------------------------------------------------------
-- The following settings are used with the cfg.category2 parameter. Setting
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2
-- is present but equal to anything other than cfg.category2Yes or
-- cfg.category2Negative then it supresses cateogrisation.
cfg.category2Yes = 'yes'
cfg.category2Negative = '¬'
-- The following settings are used with the cfg.subpage parameter.
-- cfg.subpageNo is the value to specify to not categorise on subpages;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.
cfg.subpageNo = 'no'
cfg.subpageOnly = 'only'
--------------------------------------------------------------------------------
-- Default namespaces --
-- This is a table of namespaces to categorise by default. The keys are the --
-- namespace numbers. --
--------------------------------------------------------------------------------
cfg.defaultNamespaces = {
[ 0] = true, -- main
[ 6] = true, -- file
[ 12] = true, -- help
[ 14] = true, -- category
[100] = true, -- portal
[108] = true, -- book
}
--------------------------------------------------------------------------------
-- Wrappers --
-- This is a wrapper template or a list of wrapper templates to be passed to --
-- [[Module:Arguments]]. --
--------------------------------------------------------------------------------
cfg.wrappers = 'แม่แบบ:Category handler'
--------------------------------------------------------------------------------
-- End configuration data --
--------------------------------------------------------------------------------
return cfg -- Don't edit this line.
qr2ozvh9742cm6z37gujtffmx78xdmc
มอดูล:Category handler/shared
828
79
278
2025-11-23T09:08:41Z
Taweetham
7
thai wikpedia
278
Scribunto
text/plain
-- This module contains shared functions used by [[Module:Category handler]]
-- and its submodules.
local p = {}
function p.matchesBlacklist(page, blacklist)
for i, pattern in ipairs(blacklist) do
local match = mw.ustring.match(page, pattern)
if match then
return true
end
end
return false
end
function p.getParamMappings(useLoadData)
local dataPage = 'Module:Namespace detect/data'
if useLoadData then
return mw.loadData(dataPage).mappings
else
return require(dataPage).mappings
end
end
function p.getNamespaceParameters(titleObj, mappings)
-- We don't use title.nsText for the namespace name because it adds
-- underscores.
local mappingsKey
if titleObj.isTalkPage then
mappingsKey = 'talk'
else
mappingsKey = mw.site.namespaces[titleObj.namespace].name
end
mappingsKey = mw.ustring.lower(mappingsKey)
return mappings[mappingsKey] or {}
end
return p
omlsnhudxz6juptvtxz7ns97jutbzc5
มอดูล:Category handler/blacklist
828
80
279
2025-11-23T09:09:15Z
Taweetham
7
Thai Wikipedia
279
Scribunto
text/plain
-- This module contains the blacklist used by [[Module:Category handler]].
-- Pages that match Lua patterns in this list will not be categorised unless
-- categorisation is explicitly requested.
return {
'^Main Page$', -- don't categorise the main page.
-- Don't categorise the following pages or their subpages.
-- "%f[/\0]" matches if the next character is "/" or the end of the string.
'^Wikipedia:Cascade%-protected items%f[/\0]',
'^User:UBX%f[/\0]', -- The userbox "template" space.
'^User talk:UBX%f[/\0]',
'^วิกิพีเดีย:กล่องผู้ใช้%f[/\0]', -- ตัวอย่างกล่องผู้ใช้
-- Don't categorise subpages of these pages, but allow
-- categorisation of the base page.
'^Wikipedia:Template messages/.*$',
'/[aA]rchive', -- Don't categorise archives.
'/กรุ',
'/กรุ .*', -- กรุ 1, กรุ 15, กรุ ฮกหด, ฯลฯ
'^หน้าหลัก$' -- ไม่จัดหน้าหลัก,
}
g69dfbf87ovz2no9v00z4lcbvvhz7im
มอดูล:Message box/tmbox.css
828
81
281
2025-11-23T09:10:33Z
Taweetham
7
Thai Wikpedia
281
sanitized-css
text/css
/* {{pp|small=y}} */
.tmbox {
margin: 4px 0;
border-collapse: collapse;
border: 1px solid #c0c090; /* Default "notice" gray-brown */
background-color: #f8eaba;
box-sizing: border-box;
}
/* For the "small=yes" option. */
.tmbox.mbox-small {
font-size: 88%;
line-height: 1.25em;
}
.tmbox-speedy {
border: 2px solid #b32424; /* Red */
background-color: #fee7e6; /* Pink */
}
.tmbox-delete {
border: 2px solid #b32424; /* Red */
}
.tmbox-content {
border: 2px solid #f28500; /* Orange */
}
.tmbox-style {
border: 2px solid #fc3; /* Yellow */
}
.tmbox-move {
border: 2px solid #9932cc; /* Purple */
}
.tmbox .mbox-text {
border: none;
/* @noflip */
padding: 0.25em 0.9em;
width: 100%;
}
.tmbox .mbox-image {
border: none;
/* @noflip */
padding: 2px 0 2px 0.9em;
text-align: center;
}
.tmbox .mbox-imageright {
border: none;
/* @noflip */
padding: 2px 0.9em 2px 0;
text-align: center;
}
/* An empty narrow cell */
.tmbox .mbox-empty-cell {
border: none;
padding: 0;
width: 1px;
}
.tmbox .mbox-invalid-type {
text-align: center;
}
@media (min-width: 720px) {
.tmbox {
margin: 4px 10%;
}
.tmbox.mbox-small {
/* @noflip */
clear: right;
/* @noflip */
float: right;
/* @noflip */
margin: 4px 0 4px 1em;
width: 238px;
}
}
@media screen {
html.skin-theme-clientpref-night .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-night .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
@media screen and ( prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .tmbox {
background-color: #2e2505; /* Dark brown, same hue/saturation as light */
}
html.skin-theme-clientpref-os .tmbox-speedy {
background-color: #310402; /* Dark red, same hue/saturation as light */
}
}
/** T367463 */
body.skin--responsive table.tmbox img {
max-width: none !important;
}
rfgc7ll3u9xqbcynuop86eq5pxfhf7o
วิธีใช้:กรุ
12
82
282
2025-11-23T09:11:37Z
Taweetham
7
Thai Wikpedia
282
wikitext
text/x-wiki
{{บอกวิธีวิกิพีเดีย|WP:ARCHIVE}}
'''กรุ''' เป็นหน้าบทความในวิกิพีเดียสำหรับเก็บรักษาข้อมูลการพูดคุยที่ผ่านและจบไปแล้วซึ่งมีเนื้อหาที่ยาวมาก และต้องการเก็บแยกออกเป็นหน้าอื่น เก็บไว้ให้ผู้อื่นใช้สำหรับศึกษาหรืออ้างอิง โดยทั่วไปแล้วหน้ากรุนี้จะไม่มีทำการแก้ไขภายหลังจากที่ได้จัดเก็บ หน้าพูดคุยปกติจะไม่เก็บเข้ากรุถ้าหน้าพูดคุยนั้นยังสั้นอยู่
== วิธีการเก็บเข้ากรุ ==
วิธีการเก็บเข้ากรุนั้น สามารถทำได้ 2 วิธี คือ (1) วิธีการเปลี่ยนชื่อหน้า วิธีนี้จะเก็บข้อมูลได้ครบถ้วนซึ่งรวมถึงประวัติการแก้ไขของหน้า แต่จะมีขั้นตอนที่ซับซ้อนเพิ่มขึ้นมา (2) วิธีการคัดลอก วิธีนี้เป็นวิธีที่ง่ายกว่าการเปลี่ยนชื่อหน้า แต่จะมีข้อเสียคือประวัติของหน้าไม่ได้ถูกย้ายตามไปด้วย
''หมายเหตุ: ที่ยกตัวอย่างด้านล่างนี้เป็นการย้ายหน้าคุยกับผู้ใช้ แต่สามารถใช้ได้กับหน้าพูดคุยของเนมสเปซอื่น ๆ ก็ได้''
=== วิธีการเก็บเข้ากรุแบบเปลี่ยนชื่อหน้า ===
# ไปที่หน้าพูดคุยที่ต้องการเก็บข้อมูลเข้ากรุ
# ไปที่สัญลักษณ์ลูกศรด้านบน จะเห็น "เปลี่ยนชื่อ" แล้วกดเพื่อทำการเปลี่ยนชื่อหน้าพูดคุยเป็นหน้ากรุ โดยใช้ชื่อใหม่ตามหลังด้วยคำว่า "/กรุ" และให้เว้นวรรคและตามด้วยตัวเลขลำดับ ตัวอย่างเช่น "คุยกับผู้ใช้:เด็กชายวิกิพีเดีย/กรุ 1"
# เข้าไปที่หน้ากรุที่สร้างมาใหม่ ให้ใส่แม่แบบ <tt><nowiki>{{กรุ}}</nowiki></tt> ไว้ด้านบนของหน้า เพื่อแจ้งกับผู้อื่นว่าหน้านี้คือกรุ และไม่ควรแก้ไข
# เข้าไปหน้าพูดคุยเดิม ซึ่งปัจจุบันจะกลายเป็น[[วิกิพีเดีย:หน้าเปลี่ยนทาง|หน้าเปลี่ยนทาง]] เมื่อเข้าไปให้เลือกตรงด้านซ้ายบนของบทความ ตรงคำว่า "เปลี่ยนทางมาจาก ___" โดยกดเลือกเข้าไป
# แก้ไขหน้าพูดคุยเดิม แก้ไขจากหน้าเปลี่ยนทางเป็นหน้าพูดคุยปกติ โดยลบคำว่า "<tt><nowiki>#REDIRECT [[___]]</nowiki></tt>" หรือ "<tt><nowiki>#เปลี่ยนทาง [[___]]</nowiki></tt>" ออก
# ทำลิงก์จากหน้าพูดคุยไปยังกรุ เพื่อให้ผู้อื่นสามารถเข้าไปอ่านได้ หรือเพียงแค่ใส่แม่แบบ <tt><nowiki>{{กล่องกรุ|auto=short}}</nowiki></tt> หรือ <tt><nowiki>{{กล่องกรุ/หน้าใน}}</nowiki></tt>
=== วิธีการเก็บเข้ากรุแบบคัดลอก ===
# ไปที่หน้าพูดคุยที่ต้องการเก็บข้อมูลเข้ากรุ
# กด "แก้ไข" ด้านบนและทำการคัดลอกข้อมูลทั้งหมด
# สร้างหน้าใหม่โดยใช้ "/กรุ" เว้นวรรคและตามด้วยตัวเลขลำดับ เช่น "คุยกับผู้ใช้:เด็กชายวิกิพีเดีย/กรุ 1"
# ทำการคัดลอกข้อมูลเดิมใส่ในหน้ากรุ เข้าไปที่หน้ากรุที่สร้างมาใหม่ ให้ใส่แม่แบบ <nowiki>{{กรุ}}</nowiki> ไว้ด้านบนของหน้า เพื่อแจ้งกับผู้อื่นว่าหน้านี้คือกรุ และไม่ควรแก้ไข
# ทำลิงก์จากหน้าพูดคุยไปยังกรุ เพื่อให้ผู้อื่นสามารถเข้าไปอ่านได้
{{หน้าวิธีใช้วิกิพีเดีย}}
[[หมวดหมู่:การบริหารวิกิพีเดีย|กรุ]]
mo44cyyh2v8wshlthkr7l1wntl8e5j6
แม่แบบ:Col-begin
10
83
291
287
2025-11-23T14:41:41Z
Taweetham
7
291
wikitext
text/x-wiki
<templatestyles src="Col-begin/styles.css"/><div>
{| class="{{{class|}}} col-begin {{#if:{{{small|}}}|col-begin-small}}" role="presentation" {{#if:{{{bgColor|{{{bgcolor|}}}}}}{{{border|}}}{{{width|}}}{{{style|}}}|style="{{#if:{{{bgColor|{{{bgcolor|}}}}}}|background: {{{bgColor|{{{bgcolor}}}}}};}}{{#if:{{{border|}}}|border: {{{border}}};}}{{#if:{{{width|}}}|width: {{{width}}};}}{{#if:{{{style|}}}|{{{style}}}}}"
}}
<noinclude>
|-
|
|}
</div>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
cn7cif9cisd67c5k8tflma66wj4nd8h
แม่แบบ:Col-end
10
84
292
288
2025-11-23T14:42:08Z
Taweetham
7
292
wikitext
text/x-wiki
<includeonly> 
|}</div></includeonly><noinclude>
{{documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
k24bcp3cs0m8f59jwmhng1acd8tpifu
แม่แบบ:Col-break
10
85
293
289
2025-11-23T14:42:39Z
Taweetham
7
293
wikitext
text/x-wiki
<noinclude/>
| class="col-break {{{class|}}}"<!-- see [[Template:Col-begin/styles.css]] --> {{#if:{{{width|}}}{{{align|}}}{{{gap|}}}{{{valign|}}}{{{style|}}}|style="{{#if:{{{width|}}}|width: {{{width}}};}}{{#if:{{{align|}}}|text-align: {{{align}}};}} {{#if: {{{gap|}}}|padding-left: {{{gap}}};}}{{#if:{{{valign|}}}|vertical-align: {{{valign}}};}}{{#if:{{{style|}}}|{{{style}}}}}"}} | <noinclude>
{{Documentation}}
<!-- Add categories to the /doc subpage, interwikis to Wikidata, not here -->
</noinclude>
b15qry9zw34ptvgx6i3is7gdtqlz2zj
แม่แบบ:Col-begin/styles.css
10
86
294
2025-11-23T14:43:45Z
Taweetham
7
สร้างหน้าด้วย "/* {{pp-template|small=yes}} */ .col-begin { border-collapse: collapse; padding: 0; color: inherit; /* dark mode friendly if color is set */ width: 100%; border: 0; margin: 0; } .col-begin-small { font-size: 90%; } .col-break { vertical-align: top; text-align: left; } .col-break-2 { width: 50%; } .col-break-3 { width: 33.3%; } .col-break-4 { width: 25%; } .col-break-5 { width: 20%; } @media (max-width: 720px) { /* override poten..."
294
sanitized-css
text/css
/* {{pp-template|small=yes}} */
.col-begin {
border-collapse: collapse;
padding: 0;
color: inherit; /* dark mode friendly if color is set */
width: 100%;
border: 0;
margin: 0;
}
.col-begin-small {
font-size: 90%;
}
.col-break {
vertical-align: top;
text-align: left;
}
.col-break-2 {
width: 50%;
}
.col-break-3 {
width: 33.3%;
}
.col-break-4 {
width: 25%;
}
.col-break-5 {
width: 20%;
}
@media (max-width: 720px) {
/* override potentially set width */
/* wonder if table cells can display: flex with wrapping */
.col-begin,
.col-begin > tbody,
.col-begin > tbody > tr,
.col-begin > tbody > tr > td {
display: block !important;
width: 100% !important;
}
.col-break {
padding-left: 0 !important;
}
}
h6jpr16puwsamsk3tp6hsk74zoib6it
แม่แบบ:Test1
10
88
329
325
2025-11-29T04:58:31Z
Taweetham
7
329
wikitext
text/x-wiki
<noinclude>
<!--สคริปต์จัดให้ได้ออกแบบให้ทำงานร่วมกับรูปแบบตามแม่แบบนี้ หากมีการเปลี่ยนแปลงรูปแบบไปจากเดิมอย่างมาก รบกวนช่วยแจ้งที่หน้าพูดคุย สคริปต์จัดให้ ขอขอบคุณ-->
</noinclude>{| id="t-test" class="noprint" style=" width: 80%; margin: 0 auto; border-collapse: collapse; background: #fbfbfb; border: 1px solid #aaa; border-left: 10px solid #1e90ff;"
|-
| style="padding: 0.25em 0.5em;" width="60px" | [[ภาพ:Info Simple.svg|40px]]
| style="color:#333333;" | <span style="font-size:135%;">ขอขอบคุณที่ทดลองแก้ไขบทความในวิกิพีเดีย แต่การแก้ไขของคุณได้ถูกย้อนกลับหรือลบไปแล้ว <br />สำหรับการทดลองเขียน กรุณาใช้[[:w:th:วิกิพีเดีย:ทดลองเขียน|หน้าทดลองเขียน]]</span><br><br>ดูรายละเอียดเกี่ยวกับการร่วมแก้ไขในวิกิพีเดียได้ที่ [[:w:th:วิกิพีเดีย:เริ่มต้น|การเริ่มต้นวิกิพีเดีย]] [[:w:th:วิกิพีเดีย:นโยบาย|นโยบายวิกิพีเดีย]] และ[[:w:th:วิกิพีเดีย:อะไรที่ไม่ใช่วิกิพีเดีย|อะไรที่ไม่ใช่วิกิพีเดีย]]<br />ถามเกี่ยวกับการใช้งานวิกิพีเดียได้ที่[[:w:th:วิกิพีเดีย:แผนกช่วยเหลือ|แผนกช่วยเหลือ]] และสำหรับคำถามอื่น ๆ สามารถถามได้ที่[[:w:th:วิกิพีเดีย:ปุจฉา-วิสัชนา|ปุจฉา-วิสัชนา]]<br />
'''กรุณาอย่าสร้างบทความใหม่เพียงเพื่อถามคำถาม มีเนื้อหาสั้นไม่เกินประโยค โฆษณา หรือคัดลอกข้อมูลจากแหล่งอื่น'''<br>'''และกรุณาอย่านำใส่หรือนำออกซึ่งเนื้อหาในวิกิพีเดีย โดยไม่เป็นการช่วยเหลือหรือเกี่ยวข้องกับบทความ หรือเป็นเรื่องไร้สาระ'''
|}<noinclude>
{{doc}}
</noinclude>
7597q92hwa608k3m8688j2txp4fjvut
25 ปีวิกิพีเดีย/ปฏิทิน/แบบสำรวจ
0
90
352
351
2025-11-30T07:18:34Z
Wutkh
9
352
wikitext
text/x-wiki
# ชื่อบัญชีผู้ใช้
# ชื่อผู้รับ
# ที่อยู่ผู้รับ
#* (บรรทัดที่ 1, เลขที่ห้อง เลขที่ตั้ง ชื่ออาคาร/หมู่บ้าน หมู่ ซอย ถนน)
#* (บรรทัดที่ 2, ตำบลและอำเภอ หรือ แขวงและเขต สำหรับ กทม.)
#* (บรรทัดที่ 3, เฉพาะจังหวัดและรหัสไปรษณีย์)
# เลือกประเภทขนส่ง
#* ไปรษณีย์ไทย
#* ขนส่งเอกชนกรุณาระบุ หมายเลขโทรศัพท์
#* ไม่จำกัดประเภทขนส่งกรุณาระบุ หมายเลขโทรศัพท์
# อีเมลสำหรับติดต่อแจ้งเลข tracking (verified)
# ยินดีรับการจัดสรรมากกว่าที่เคยขอไว้ (เช่น ลงชื่อรับไว้ 2 เล่ม แต่ยินดีรับได้ไม่เกิน 5 เล่มเพื่อส่งต่อความรู้เสรีแก่ผู้อื่น)
----
; แบบสำรวจ
(1) ภายใต้งบประมาณการผลิต 50-200 บาท โปรดระบุความสนใจและความคุ้มค่า ในระดับคะแนน 1-5 สำหรับสิ่งต่อไปนี้ ที่มีสัญลักษณ์ของวิกิมีเดียประเทศไทย (rating)
''กลุ่มคงทนถาวร''
* เสื้อกันหนาวหรือเสื้อ Jacket (ขนาดเดียว)
* เสื้อยืด (ต้องจัดทำหลายขนาดและอาจมีปัญหาไม่สามารถแจกในขนาดที่ต้องการได้)
* กระบอกน้ำ (พลาสติก แก้ว หรือ สแตนเลส) แก้วน้ำ (เซรามิก แก้ว หรือเมลามีน) พร้อมแผ่นรองแก้ว จัดเป็นชุด gift set รวมกันตามความเหมาะสม
* ย่าม กระเป๋า รวมถึงถุงผ้า จัดเป็นชุด gift set รวมกันตามความเหมาะสม
* flash drive แผ่นรองเมาส์ และแท่นวางโทรศัพท์เคลื่อนที่ จัดเป็นชุด gift set รวมกันตามความเหมาะสม
* ร่มกันแดดกันฝน (เฉพาะชนิดพับได้เพื่อง่ายต่อการขนส่ง)
* เข็มกลัด พวงกุญแจ สติกเกอร์ แผ่นแม่เหล็กติดฝาตู้เย็นหรือพื้นผิวโลหะ จัดเป็นชุด gift set รวมกันตามความเหมาะสม
''กลุ่มใช้แล้วหมดไป''
* ปฏิทินตั้งโต๊ะ (ผลิตปีต่อปีเท่านั้น)
* planner สมุดจดบันทึก (ขนาดไม่เกิน 128 แผ่น = 256 หน้า ที่มีปฏิทินล่วงหน้า 3-5 ปี มีเลขหน้าและข้อความที่ใช้คล้ายกับไดอารี่แต่ให้เติมวันที่ลงได้เองเพื่อเก็บไว้ใช้งานได้ข้ามปี)
* face mask หน้ากากสำหรับกันฝุ่นหรือเชื้อโรค (ชนิดใช้แล้วทิ้ง ไม่สามารถซักใหม่) (หนึ่งแพ็คอาจมี 5-20 ชิ้น)
* ปากกา ดินสอ กระดาษ post-it จัดเป็นชุด gift set รวมกันตามความเหมาะสม
(2) หากวิกิมีเดียประเทศไทยต้องการสะสมของที่ระลึกคงคลังไว้ไม่เกิน 5 SKUs (เสื้อที่มีหลายขนาดจะนับ SKU แยกกันสำหรับทุกขนาดที่ต้องเก็บไว้ในคลัง) ขอให้เลือกจากรายการข้างต้นไม่เกิน 5 รายการ (check box)
(3) ท่านเคยได้รับของที่ระลึกจากวิกิมีเดียประเทศไทยมาก่อนหรือไม่ และมีความคิดเห็นอย่างไรกับของที่ท่านได้รับ (free text)
k08kpoe7sb9l06fufg48n7r8wuz2hoz
25 ปีวิกิพีเดีย/ปฏิทิน/สถานะ
0
91
430
427
2025-12-12T11:14:18Z
Wutkh
9
430
wikitext
text/x-wiki
{| class="wikitable sortable"
|+ สถานะการจัดสรรปฏิทิน พ.ศ. 2569 (Manual update)
|-
! ชื่อผู้ใช้ !! สถานะ
|-
| [[ผู้ใช้:Wutkh|Wutkh]] || จัดส่งสำเร็จแล้วเมื่อ 12/12/2568
|-
| [[ผู้ใช้:Patsagorn Y.|Patsagorn Y.]] || จัดส่งสำเร็จแล้วเมื่อ 12/12/2568
|-
| [[ผู้ใช้:Chainwit.|Chainwit.]] || จัดส่งสำเร็จแล้วเมื่อ 09/12/2568
|-
| [[ผู้ใช้:วณิพก|วณิพก]] || จัดส่งสำเร็จแล้วเมื่อ 11/12/2568
|-
| [[ผู้ใช้:Guntipet|Guntipet]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:ไทๆ|ไทๆ]] || จัดส่งสำเร็จแล้วเมื่อ 11/12/2568
|-
| [[ผู้ใช้:Sawasdeeee|Sawasdeeee]] || จัดส่งสำเร็จแล้วเมื่อ 11/12/2568
|-
| [[ผู้ใช้:Supphachoke Sukjamlong|Supphachoke Sukjamlong]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:NiratLover|NiratLover]] || จัดส่งสำเร็จแล้วเมื่อ 11/12/2568
|-
| [[ผู้ใช้:PPichit|PPichit]] || จัดส่งสำเร็จแล้วเมื่อ 09/12/2568
|-
| [[ผู้ใช้:Waniosa Amedestir|Waniosa Amedestir]] || จัดส่งสำเร็จแล้วเมื่อ 12/12/2568
|-
| [[ผู้ใช้:GinkoLusitania|GinkoLusitania]] || จัดส่งสำเร็จแล้วเมื่อ 11/12/2568
|-
| [[ผู้ใช้:Minener's|Minener's]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:Tvcccp|Tvcccp]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:Kaojinapong|Kaojinapong]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:Poonpun2016|Poonpun2016]] || ''งดจัดสรร''<ref>เนื่องจากไม่มีการติดต่อภายในเวลาที่กำหนด เมื่อ 07/12/2568</ref>
|-
| [[ผู้ใช้:Just Sayori|Just Sayori]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:ร้อยตรี โชคดี|ร้อยตรี โชคดี]] || จัดส่งสำเร็จแล้วเมื่อ 12/12/2568
|-
| [[ผู้ใช้:JustRandomThai|JustRandomThai]] || จัดส่งสำเร็จแล้วเมื่อ 11/12/2568
|-
| [[ผู้ใช้:แอนเดอร์สัน|แอนเดอร์สัน]] || กรณีพิเศษ - จัดส่งไม่สำเร็จเมื่อ 11/12/2568
|-
| [[ผู้ใช้:Bank0303|Bank0303]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:Jothefiredragon|Jothefiredragon]] || จัดส่งสำเร็จแล้วเมื่อ 09/12/2568
|-
| [[ผู้ใช้:Ekminarin|Ekminarin]] || จัดส่งสำเร็จแล้วเมื่อ 12/12/2568
|-
| [[ผู้ใช้:Siam2019|Siam2019]] || จัดส่งสำเร็จแล้วเมื่อ 10/12/2568
|-
| [[ผู้ใช้:Edigines|Edigines]] || จัดส่งสำเร็จแล้วเมื่อ 09/12/2568
|-
| [[ผู้ใช้:Tadano Earth|Tadano Earth]] || จัดส่งสำเร็จแล้วเมื่อ 09/12/2568
|-
| [[ผู้ใช้:PloveShin|PloveShin]] || จัดส่งสำเร็จแล้วเมื่อ 12/12/2568
|}
<noinclude>ชื่อบัญชีผู้ใช้ มีสิทธิรับจัดสรร/? ส่งอีเมลแล้ว/ส่งอีเมลไม่สำเร็จ แจ้งหมายเลขพัสดุแล้ว/ข้อมูลไม่ครบถ้วนรอแก้ไข จัดส่งแล้ว/? แจ้ง tracking no. แล้ว/? จัดส่งสำเร็จแล้ว/?</noinclude>
mxxsbz9xxl7xyqan3fs010bkbeu9v56