CINXE.COM
Xem mã nguồn của Mô đun:Documentation – Wikipedia tiếng Việt
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available" lang="vi" dir="ltr"> <head> <meta charset="UTF-8"> <title>Xem mã nguồn của Mô đun:Documentation – Wikipedia tiếng Việt</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )viwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":true,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"f82ae0e0-7b05-40a6-9a2a-517bf8056d10","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Mô_đun:Documentation","wgTitle":"Documentation","wgCurRevisionId":71935726,"wgRevisionId":0,"wgArticleId":3675680,"wgIsArticle":false,"wgIsRedirect":false,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Mô_đun:Documentation","wgRelevantArticleId":3675680,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["templateeditor"],"wgRestrictionMove":["templateeditor"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0, "wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":40000,"wgCodeEditorCurrentLanguage":"lua","wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.gadget.charinsert-styles":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready", "ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.codeEditor.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","mediawiki.ui.button":"ready","ext.charinsert.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.codeEditor","ext.scribunto.edit","mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","skins.vector.js","ext.centralNotice.geoIP","ext.charinsert","ext.gadget.did_you_mean","ext.gadget.ReferenceTooltips","ext.gadget.AVIM","ext.gadget.AVIM_portlet","ext.gadget.charinsert","ext.gadget.refToolbar","ext.gadget.wikibugs","ext.gadget.purgetab","ext.gadget.switcher","ext.gadget.AdvancedSiteNotices","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init", "ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=vi&modules=ext.charinsert.styles%7Cext.codeEditor.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cmediawiki.ui.button%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=vi&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=vi&modules=ext.gadget.charinsert-styles&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=vi&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.5"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Xem mã nguồn của Mô đun:Documentation – Wikipedia tiếng Việt"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//vi.m.wikipedia.org/wiki/M%C3%B4_%C4%91un:Documentation"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (vi)"> <link rel="EditURI" type="application/rsd+xml" href="//vi.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://vi.wikipedia.org/wiki/M%C3%B4_%C4%91un:Documentation"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.vi"> <link rel="alternate" type="application/atom+xml" title="Nguồn cấp Atom của Wikipedia" href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:Thay_%C4%91%E1%BB%95i_g%E1%BA%A7n_%C4%91%C3%A2y&feed=atom"> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="codeeditor-loading skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Mô_đun_Documentation rootpage-Mô_đun_Documentation skin-vector-2022 action-edit"><a class="mw-jump-link" href="#bodyContent">Bước tới nội dung</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Trang Web"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Trình đơn chính" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Trình đơn chính</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Trình đơn chính</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">chuyển sang thanh bên</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">ẩn</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Điều hướng </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Trang_Ch%C3%ADnh" title="Xem trang chính [z]" accesskey="z"><span>Trang Chính</span></a></li><li id="n-wikipedia-featuredcontent" class="mw-list-item"><a href="/wiki/C%E1%BB%95ng_th%C3%B4ng_tin:N%E1%BB%99i_dung_ch%E1%BB%8Dn_l%E1%BB%8Dc"><span>Nội dung chọn lọc</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ng%E1%BA%ABu_nhi%C3%AAn" title="Xem trang ngẫu nhiên [x]" accesskey="x"><span>Bài viết ngẫu nhiên</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Thay_%C4%91%E1%BB%95i_g%E1%BA%A7n_%C4%91%C3%A2y" title="Danh sách thay đổi gần đây trong wiki [r]" accesskey="r"><span>Thay đổi gần đây</span></a></li><li id="n-bug_in_article" class="mw-list-item"><a href="/wiki/Wikipedia:B%C3%A1o_l%E1%BB%97i_b%C3%A0i_vi%E1%BA%BFt"><span>Báo lỗi nội dung</span></a></li> </ul> </div> </div> <div id="p-wikipedia-interaction" class="vector-menu mw-portlet mw-portlet-wikipedia-interaction" > <div class="vector-menu-heading"> Tương tác </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-wikipedia-helppage" class="mw-list-item"><a href="/wiki/Wikipedia:S%C3%A1ch_h%C6%B0%E1%BB%9Bng_d%E1%BA%ABn"><span>Hướng dẫn</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:Gi%E1%BB%9Bi_thi%E1%BB%87u"><span>Giới thiệu Wikipedia</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:C%E1%BB%99ng_%C4%91%E1%BB%93ng" title="Giới thiệu dự án, cách sử dụng và tìm kiếm thông tin ở đây"><span>Cộng đồng</span></a></li><li id="n-wikipedia-villagepump" class="mw-list-item"><a href="/wiki/Wikipedia:Th%E1%BA%A3o_lu%E1%BA%ADn"><span>Thảo luận chung</span></a></li><li id="n-wikipedia-helpdesk" class="mw-list-item"><a href="/wiki/Wikipedia:Gi%C3%BAp_s%E1%BB%AD_d%E1%BB%A5ng_Wikipedia"><span>Giúp sử dụng</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//vi.wikipedia.org/wiki/Wikipedia:Liên_lạc"><span>Liên lạc</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:Tr%C3%ACnh_t%E1%BA%A3i_l%C3%AAn_t%E1%BA%ADp_tin"><span>Tải lên tập tin</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Trang_Ch%C3%ADnh" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="Bách khoa toàn thư mở" src="/static/images/mobile/copyright/wikipedia-tagline-vi.svg" width="120" height="10" style="width: 7.5em; height: 0.625em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:T%C3%ACm_ki%E1%BA%BFm" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Tìm kiếm Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Tìm kiếm</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Tìm kiếm trên Wikipedia" aria-label="Tìm kiếm trên Wikipedia" autocapitalize="sentences" title="Tìm kiếm Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Đặc_biệt:Tìm_kiếm"> </div> <button class="cdx-button cdx-search-input__end-button">Tìm kiếm</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Công cụ cá nhân"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Giao diện"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Giao diện" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Giao diện</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_vi.wikipedia.org&uselang=vi" class=""><span>Quyên góp</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:M%E1%BB%9F_t%C3%A0i_kho%E1%BA%A3n&returnto=M%C3%B4+%C4%91un%3ADocumentation&returntoquery=action%3Dedit" title="Bạn được khuyến khích mở tài khoản và đăng nhập; tuy nhiên, không bắt buộc phải có tài khoản" class=""><span>Tạo tài khoản</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C4%83ng_nh%E1%BA%ADp&returnto=M%C3%B4+%C4%91un%3ADocumentation&returntoquery=action%3Dedit" title="Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc. [o]" accesskey="o" class=""><span>Đăng nhập</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Thêm tùy chọn" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Công cụ cá nhân" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Công cụ cá nhân</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Bảng chọn thành viên" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="//donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_vi.wikipedia.org&uselang=vi"><span>Quyên góp</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:M%E1%BB%9F_t%C3%A0i_kho%E1%BA%A3n&returnto=M%C3%B4+%C4%91un%3ADocumentation&returntoquery=action%3Dedit" title="Bạn được khuyến khích mở tài khoản và đăng nhập; tuy nhiên, không bắt buộc phải có tài khoản"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Tạo tài khoản</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C4%83ng_nh%E1%BA%ADp&returnto=M%C3%B4+%C4%91un%3ADocumentation&returntoquery=action%3Dedit" title="Đăng nhập sẽ có lợi hơn, tuy nhiên không bắt buộc. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Đăng nhập</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Trang dành cho người dùng chưa đăng nhập <a href="/wiki/Tr%E1%BB%A3_gi%C3%BAp:Gi%E1%BB%9Bi_thi%E1%BB%87u" aria-label="Tìm hiểu thêm về sửa đổi"><span>tìm hiểu thêm</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C3%B3ng_g%C3%B3p_c%E1%BB%A7a_t%C3%B4i" title="Danh sách các sửa đổi được thực hiện qua địa chỉ IP này [y]" accesskey="y"><span>Đóng góp</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Th%E1%BA%A3o_lu%E1%BA%ADn_t%C3%B4i" title="Thảo luận với địa chỉ IP này [n]" accesskey="n"><span>Thảo luận cho địa chỉ IP này</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Trang Web"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading">Xem mã nguồn của Mô đun:Documentation</h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Bài viết này chỉ tồn tại bằng ngôn ngữ này. Thêm bài viết cho các ngôn ngữ khác" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-0" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">Thêm ngôn ngữ</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="uls-after-portlet-link"></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Không gian tên"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-module" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/M%C3%B4_%C4%91un:Documentation" title="Xem mô đun [c]" accesskey="c"><span>Mô đun</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Documentation" rel="discussion" title="Thảo luận về trang này [t]" accesskey="t"><span>Thảo luận</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Thay đổi biến thể ngôn ngữ" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Giao diện"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="vector-tab-noicon mw-list-item"><a href="/wiki/M%C3%B4_%C4%91un:Documentation"><span>Đọc</span></a></li><li id="ca-viewsource" class="selected vector-tab-noicon mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=edit" title="Trang này được khóa. Bạn có thể xem mã nguồn. [e]" accesskey="e"><span>Xem mã nguồn</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=history" title="Các phiên bản cũ của trang này [h]" accesskey="h"><span>Xem lịch sử</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Công cụ trang"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Công cụ" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Công cụ</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Công cụ</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">chuyển sang thanh bên</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">ẩn</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Thêm tùy chọn" > <div class="vector-menu-heading"> Tác vụ </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="vector-more-collapsible-item mw-list-item"><a href="/wiki/M%C3%B4_%C4%91un:Documentation"><span>Đọc</span></a></li><li id="ca-more-viewsource" class="selected vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=edit"><span>Xem mã nguồn</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=history"><span>Xem lịch sử</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Chung </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Li%C3%AAn_k%E1%BA%BFt_%C4%91%E1%BA%BFn_%C4%91%C3%A2y/M%C3%B4_%C4%91un:Documentation" title="Các trang liên kết đến đây [j]" accesskey="j"><span>Các liên kết đến đây</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Thay_%C4%91%E1%BB%95i_li%C3%AAn_quan/M%C3%B4_%C4%91un:Documentation" rel="nofollow" title="Thay đổi gần đây của các trang liên kết đến đây [k]" accesskey="k"><span>Thay đổi liên quan</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Trang_%C4%91%E1%BA%B7c_bi%E1%BB%87t" title="Một danh sách chứa tất cả trang đặc biệt [q]" accesskey="q"><span>Trang đặc biệt</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=info" title="Thêm chi tiết về trang này"><span>Thông tin trang</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:UrlShortener&url=https%3A%2F%2Fvi.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DM%25C3%25B4_%25C4%2591un%3ADocumentation%26action%3Dedit"><span>Lấy URL ngắn gọn</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:QrCode&url=https%3A%2F%2Fvi.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DM%25C3%25B4_%25C4%2591un%3ADocumentation%26action%3Dedit"><span>Tải mã QR</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> Tại dự án khác </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q14357839" title="Liên kết đến khoản mục kết nối trong kho dữ liệu [g]" accesskey="g"><span>Khoản mục Wikidata</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Công cụ trang"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Giao diện"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Giao diện</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">chuyển sang thanh bên</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">ẩn</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> </div> <div id="contentSub"><div id="mw-content-subtitle">← <a href="/wiki/M%C3%B4_%C4%91un:Documentation" title="Mô đun:Documentation">Mô đun:Documentation</a></div></div> <div id="mw-content-text" class="mw-body-content"><p>Bạn không được quyền sửa đổi trang này, vì các lý do sau: </p> <ul class="permissions-errors"><li class="mw-permissionerror-protectedpagetext"><div class="mw-parser-output"><style data-mw-deduplicate="TemplateStyles:r69621137">.mw-parser-output .pptext-whywhat h2{margin-top:1em;border-bottom:0;font-size:130%;font-weight:bold;padding:0.15em}.mw-parser-output .pptext-submit{list-style:none;display:inline;text-align:center}.mw-parser-output .pptext-whywhat{display:flex;flex-wrap:wrap;column-gap:2em}.mw-parser-output .pptext-whywhat>div{flex:1 1 400px}</style><table id="mw-protectedpagetext" class="plainlinks fmbox fmbox-system" role="presentation" style="border-style:none;"><tbody><tr><td class="mbox-text"><table class="plainlinks ombox ombox-protection" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Template-protection-shackle-brace-FF0066.svg/40px-Template-protection-shackle-brace-FF0066.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Template-protection-shackle-brace-FF0066.svg/60px-Template-protection-shackle-brace-FF0066.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/43/Template-protection-shackle-brace-FF0066.svg/80px-Template-protection-shackle-brace-FF0066.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span></td><td class="mbox-text" style="font-weight:bold; font-size:130%;">Trang này hiện đang bị <a href="/wiki/Wikipedia:Quy_%C4%91%E1%BB%8Bnh_kh%C3%B3a_trang#Khóa_bản_mẫu" title="Wikipedia:Quy định khóa trang">khóa</a>, chỉ có <a href="/wiki/Wikipedia:B%E1%BA%A3o_qu%E1%BA%A3n_vi%C3%AAn" title="Wikipedia:Bảo quản viên">bảo quản viên</a> và <a href="/wiki/Wikipedia:K%E1%BB%B9_thu%E1%BA%ADt_vi%C3%AAn_b%E1%BA%A3n_m%E1%BA%ABu" title="Wikipedia:Kỹ thuật viên bản mẫu">kỹ thuật viên bản mẫu</a> mới có thể sửa đổi trang.</td></tr></tbody></table> <div class="pptext-whywhat"> <div class="pptext-why"> <div class="mw-heading mw-heading2"><h2 id="Tại_sao_trang_này_bị_khóa?"><span id="T.E1.BA.A1i_sao_trang_n.C3.A0y_b.E1.BB.8B_kh.C3.B3a.3F"></span>Tại sao trang này bị khóa?</h2></div> <ul> <li>Một vài <a href="/wiki/Tr%E1%BB%A3_gi%C3%BAp:B%E1%BA%A3n_m%E1%BA%ABu" title="Trợ giúp:Bản mẫu">bản mẫu</a> và các trang giao diện trang web <a href="/wiki/Wikipedia:Quy_%C4%91%E1%BB%8Bnh_kh%C3%B3a_trang#Khóa_bản_mẫu" title="Wikipedia:Quy định khóa trang">bị khóa</a> hoàn toàn do mức độ phổ biến. Hầu hết bản mẫu có thể được sửa đổi bởi bất cứ người nào.</li> <li>Lý do cụ thể của việc khóa trang có thể được tìm thấy trong <a class="external text" href="https://vi.wikipedia.org/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:Log&type=protect&page=M%C3%B4+%C4%91un%3ADocumentation">nhật trình khóa</a>. Nếu không có mục nào liên quan trong nhật trình, trang này có thể đã bị <a class="external text" href="https://vi.wikipedia.org/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:Log&type=move&page=M%C3%B4_%C4%91un:Documentation">di chuyển</a> sau khi khóa. </li> </ul> </div> <div class="pptext-what"> <div class="mw-heading mw-heading2"><h2 id="Tôi_có_thể_làm_gì?"><span id="T.C3.B4i_c.C3.B3_th.E1.BB.83_l.C3.A0m_g.C3.AC.3F"></span>Tôi có thể làm gì?</h2></div> <ul> <li> <a href="/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Documentation" title="Thảo luận Mô đun:Documentation">Thảo luận về trang này</a> với người dùng khác.</li> <li> Nếu bạn muốn đổi tên trang đã bị khóa, hãy đề nghị tại <a href="/wiki/Wikipedia:Y%C3%AAu_c%E1%BA%A7u_di_chuy%E1%BB%83n_trang" title="Wikipedia:Yêu cầu di chuyển trang">yêu cầu di chuyển trang</a>.</li> <li> <a href="/wiki/Wikipedia:Y%C3%AAu_c%E1%BA%A7u_kh%C3%B3a_hay_m%E1%BB%9F_kh%C3%B3a_trang" title="Wikipedia:Yêu cầu khóa hay mở khóa trang">Yêu cầu mở khóa</a> trang này.</li> <li> Đây là lần đầu tiên bạn vào Wikipedia? Hãy xem qua trang <a href="/wiki/Wikipedia:Ch%C3%A0o_m%E1%BB%ABng_ng%C6%B0%E1%BB%9Di_m%E1%BB%9Bi_%C4%91%E1%BA%BFn" title="Wikipedia:Chào mừng người mới đến">chào mừng thành viên mới</a> để tìm hiểu thêm làm sao để bắt đầu sửa đổi trên Wikipedia.</li> <li>Nếu bạn nhận ra có sai sót hoặc muốn đề xuất một vài thay đổi đơn giản, không gây tranh cãi, hãy yêu cầu sửa trang bị khóa bằng cách bấm nút bên dưới và làm theo hướng dẫn. Một <a href="/wiki/Wikipedia:B%E1%BA%A3o_qu%E1%BA%A3n_vi%C3%AAn" title="Wikipedia:Bảo quản viên">bảo quản viên</a> hoặc <a href="/wiki/Wikipedia:K%E1%BB%B9_thu%E1%BA%ADt_vi%C3%AAn_b%E1%BA%A3n_m%E1%BA%ABu" title="Wikipedia:Kỹ thuật viên bản mẫu">kỹ thuật viên bản mẫu</a> sẽ xem xét và thực hiện yêu cầu sửa đổi đó của bạn. Hãy kiểm tra <a href="/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Documentation" title="Thảo luận Mô đun:Documentation">trang thảo luận</a> trước, có thể vấn đề bạn muốn đề xuất đang được bàn luận ở đó.</li> <li class="pptext-submit"><div> <p><span class="plainlinks"><a class="external text" href="https://vi.wikipedia.org/w/index.php?title=Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un%3ADocumentation&preload=B%E1%BA%A3n+m%E1%BA%ABu%3AY%C3%AAu+c%E1%BA%A7u+s%E1%BB%ADa+trang+kh%C3%B3a%2Fpreload&action=edit&section=new&editintro=B%E1%BA%A3n+m%E1%BA%ABu%3AS%E1%BB%ADa+trang+kh%C3%B3a%2Feditintro&preloadtitle=Y%C3%AAu+c%E1%BA%A7u+s%E1%BB%ADa+trang+b%E1%BB%8B+kh%C3%B3a+b%E1%BA%A3n+m%E1%BA%ABu+ng%C3%A0y+28+th%C3%A1ng+11+n%C4%83m+2024&preloadparams%5B%5D=S%E1%BB%ADa+trang+kh%C3%B3a+b%E1%BA%A3n+m%E1%BA%ABu&preloadparams%5B%5D=M%C3%B4+%C4%91un%3ADocumentation"><span class="mw-ui-button mw-ui-progressive">Yêu cầu sửa trang này</span></a></span> </p> </div></li> <li>Nếu bạn đã viết bất kỳ thứ gì, vui lòng lưu nó tạm thời vào thiết bị của bạn cho đến khi bạn có thể sửa đổi trang này.</li> </ul> </div> </div></td></tr></tbody></table></div></li><li class="mw-permissionerror-globalblocking-blockedtext-range"><b>Your IP address is in a range that has been <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Global_blocks" class="extiw" title="m:Special:MyLanguage/Global blocks">blocked on all Wikimedia Foundation wikis</a>.</b> <p>The block was made by <a href="/wiki/Th%C3%A0nh_vi%C3%AAn:Jon_Kolbert" title="Thành viên:Jon Kolbert">Jon Kolbert</a>. The reason given is <i><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/NOP" class="extiw" title="m:Special:MyLanguage/NOP">Open proxy/Webhost</a>: See the <a href="https://meta.wikimedia.org/wiki/WM:OP/H" class="extiw" title="m:WM:OP/H">help page</a> if you are affected </i>. </p> <ul><li>Start of block: 15:12, ngày 27 tháng 8 năm 2023</li> <li>Expiry of block: 15:12, ngày 27 tháng 8 năm 2028</li></ul> <p>Your current IP address is 8.222.208.146. The blocked range is 8.222.128.0/17. </p><p>Xin hãy cung cấp tất cả các thông tin trên vào thư yêu cầu của bạn. Nếu bạn bị cấm do sự nhầm lẫn, bạn có thể xem thêm thông tin và hướng dẫn tại quy định toàn cục <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/No_open_proxies" class="extiw" title="m:Special:MyLanguage/No open proxies">Không cho phép các proxy mở</a>. </p> Để thảo luận về vụ cấm này, xin vui lòng <a href="https://meta.wikimedia.org/wiki/Steward_requests/Global" class="extiw" title="m:Steward requests/Global">yêu cầu kiểm tra lại tại Meta-Wiki</a>. You could also send an email to the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Stewards" class="extiw" title="m:Special:MyLanguage/Stewards">stewards</a> <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/VRT" class="extiw" title="m:Special:MyLanguage/VRT">VRT</a> queue at <kbd>stewards@wikimedia.org</kbd> including all above details.</li></ul><hr /> <div id="viewsourcetext">Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:</div><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="en" dir="ltr" name="wpTextbox1">-- Mô đun này thực hiện {{tài liệu}}. -- Get required modules. local getArgs = require('Mô đun:Arguments').getArgs -- Get the config table. local cfg = mw.loadData('Mô đun: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('tin nhắn: gõ lỗi trong tin nhắn cfg.' .. cfgKey .. ' (' .. expectType .. ' mong đợi, có ' .. type(msg) .. ')', 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error('tin nhắn: không tìm thấy giá trị cho từ khóa $' .. match .. ' trong tin nhắn 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, ' &#124; ') ) 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)) -- 'Mô đun: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 Đặc_biệt:So_sánh_trang 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 [[Đặc_biệt:So_sánh_trang]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.canonicalUrl( 'Đặc_biệt:So_sánh_trang', { 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' --> '[[Hình:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'Đây là $1 cho $2.' -- 'sandbox-notice-diff-blurb' --> 'Đây là $1 cho $2 ($3).' -- 'sandbox-notice-pagetype-template' --> 'trang [[:en:Wikipedia:Template test cases|chỗ thử bản mẫu]]' -- 'sandbox-notice-pagetype-module' --> 'trang [[:en:Wikipedia:Template test cases|chỗ thử mô đun]]' -- 'sandbox-notice-pagetype-other' --> 'trang chỗ thử' -- 'sandbox-notice-compare-link-display' --> 'khác' -- 'sandbox-notice-testcases-blurb' --> 'Xem thêm trang con so sánh cho $1.' -- 'sandbox-notice-testcases-link-display' --> 'trường hợp kiểm thử' -- 'sandbox-category' --> 'Chỗ thử bản mẫu' -- '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 -- "Đây là chỗ thử bản mẫu cho [[Bản mẫu:Foo]] (khác)." 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 -- "Xem thêm trang con so sánh cho [[Bản mẫu:Foo/testcases|trường hợp kiểm thử]]." 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('Mô đun: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('Mô đun: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('Mô đun: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 [xem] [sửa] [lịch sử] [làm mới] 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 [xem] [sửa] [lịch sử] [làm mới] 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' --> 'xem' -- 'edit-link-display' --> 'sửa' -- 'history-link-display' --> 'lịch sử' -- 'purge-link-display' --> 'làm mới' -- 'module-preload' --> 'Bản mẫu:Tài liệu/preload-module-doc' -- 'docpage-preload' --> 'Bản mẫu:Tài liệu/preload' -- 'create-link-display' --> 'tạo' --]] 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 [xem][sửa][lịch sử][làm mới] or [tạo] 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("Đặc_biệt:Purge/" .. data.title.prefixedText, data.purgeLinkDisplay) if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeWikilink("Đặc_biệt:EditPage/" .. docTitle.prefixedText, data.editLinkDisplay) local historyLink = makeWikilink("Đặc_biệt:PageHistory/" .. docTitle.prefixedText, data.historyLinkDisplay) return "&#91;" .. viewLink .. "&#93; &#91;" .. editLink .. "&#93; &#91;" .. historyLink .. "&#93; &#91;" .. purgeLink .. "&#93;" else local createLink = makeUrlLink(docTitle:canonicalUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) return "&#91;" .. createLink .. "&#93; &#91;" .. purgeLink .. "&#93;" 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 [xem][sửa][lịch sử][làm mới] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[Tập tin:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]' -- 'template-namespace-heading' --> 'Tài liệu bản mẫu' -- 'module-namespace-heading' --> 'Tài liệu mô đun' -- 'file-namespace-heading' --> 'Tóm lược' -- 'other-namespaces-heading' --> 'Tài liệu' -- 'testcases-create-link-display' --> 'tạo' --]=] 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 [xem][sửa][lịch sử][làm mới] or [tạo] 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 "=== Đầu đề ===" 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 '') -- "Tài liệu này được truyền tải từ [[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. -- "Biên tập viên sửa đổi có thể thử nghiệm trong các trang chỗ thử và trường hợp kiểm thử của bản mẫu này." text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />' if not args.content and not args[1] then -- "Vui lòng bổ sung các thể loại vào trang con /doc." -- 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 "Tài liệu này được truyền tải từ [[Bản mẫu:Foo]] (sửa, lịch sử)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'sửa' -- 'history-link-display' --> 'lịch sử' -- 'transcluded-from-blurb' --> -- '[[Wikipedia:Template documentation|Tài liệu]] bên trên -- [[Help:Transclusion|được truyền tải]] từ $1.' -- 'module-preload' --> 'Bản mẫu:Tài liệu/preload-module-doc' -- 'create-link-display' --> 'tạo' -- 'create-module-doc-blurb' --> -- 'Bạn có thể muốn $1 một trang tài liệu cho [[Wikipedia:Lua|mô đun Scribunto]] này.' --]=] 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("Đặc_biệt:EditPage/" .. docTitle.prefixedText, editDisplay) local historyDisplay = message('history-link-display') local historyLink = makeWikilink("Đặc_biệt: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 "Biên tập viên sửa đổi có thể thử nghiệm trong các trang chỗ thử (sửa | khác) và trường hợp kiểm thử (sửa) của bản mẫu này." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'chỗ thử' -- 'sandbox-edit-link-display' --> 'sửa' -- 'compare-link-display' --> 'khác' -- 'module-sandbox-preload' --> 'Bản mẫu:Tài liệu/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Bản mẫu:Tài liệu/preload-sandbox' -- 'sandbox-create-link-display' --> 'tạo' -- 'mirror-edit-summary' --> 'Tạo phiên bản chỗ thử của $1' -- 'mirror-link-display' --> 'sao' -- 'mirror-link-preload' --> 'Bản mẫu:Tài liệu/mirror' -- 'sandbox-link-display' --> 'chỗ thử' -- 'testcases-link-display' --> 'trường hợp kiểm thử' -- 'testcases-edit-link-display'--> 'sửa' -- 'template-sandbox-preload' --> 'Bản mẫu:Tài liệu/preload-sandbox' -- 'testcases-create-link-display' --> 'tạo' -- 'testcases-link-display' --> 'trường hợp kiểm thử' -- 'testcases-edit-link-display' --> 'sửa' -- 'module-testcases-preload' --> 'Bản mẫu:Tài liệu/preload-module-testcases' -- 'template-testcases-preload' --> 'Bản mẫu:Tài liệu/preload-testcases' -- 'experiment-blurb-module' --> 'Biên tập viên sửa đổi có thể thử nghiệm trong các trang $1 và $2 của mô đun này.' -- 'experiment-blurb-template' --> 'Biên tập viên sửa đổi có thể thử nghiệm trong các trang $1 và $2 của bản mẫu này.' --]] 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("Đặc_biệt: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("Đặc_biệt: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 "Vui lòng bổ sung các thể loại vào trang con /doc." -- @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' --> 'Vui lòng bổ sung các thể loại vào trang con $1.' --]] 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 "Các trang con của bản mẫu này" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'bản mẫu' -- 'module-pagetype' --> 'mô đun' -- 'default-pagetype' --> 'trang' -- 'subpages-link-display' --> 'Các trang con của $1 này' --]] 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( 'Đặc_biệt:Tiền_tố/' .. 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' --> 'Các trang Wikipedia có cách sử dụng ((tài liệu)) lạ' -- -- /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 </textarea><div id="mw-scribunto-console"></div><div class="templatesUsed"><div class="mw-templatesUsedExplanation"><p>Các bản mẫu dùng trong trang này: </p></div><ul> <li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Lua" title="Bản mẫu:Lua">Bản mẫu:Lua</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Lua&action=edit" title="Bản mẫu:Lua">xem mã nguồn</a>) (bị khóa hạn chế sửa đổi)</li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Module_other" title="Bản mẫu:Module other">Bản mẫu:Module other</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Module_other&action=edit" title="Bản mẫu:Module other">xem mã nguồn</a>) (bị khóa hạn chế sửa đổi)</li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Module_rating" title="Bản mẫu:Module rating">Bản mẫu:Module rating</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Module_rating&action=edit" title="Bản mẫu:Module rating">sửa đổi</a>) </li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Ombox" title="Bản mẫu:Ombox">Bản mẫu:Ombox</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Ombox&action=edit" title="Bản mẫu:Ombox">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Sandbox_other" title="Bản mẫu:Sandbox other">Bản mẫu:Sandbox other</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Sandbox_other&action=edit" title="Bản mẫu:Sandbox other">sửa đổi</a>) </li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Tl" title="Bản mẫu:Tl">Bản mẫu:Tl</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Tl&action=edit" title="Bản mẫu:Tl">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:T%C3%A0i_li%E1%BB%87u" title="Bản mẫu:Tài liệu">Bản mẫu:Tài liệu</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:T%C3%A0i_li%E1%BB%87u&action=edit" title="Bản mẫu:Tài liệu">xem mã nguồn</a>) (hạn chế cho phép kỹ thuật viên bản mẫu sửa đổi)</li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Used_in_system" title="Bản mẫu:Used in system">Bản mẫu:Used in system</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Used_in_system&action=edit" title="Bản mẫu:Used in system">sửa đổi</a>) </li><li><a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Uses_TemplateStyles" title="Bản mẫu:Uses TemplateStyles">Bản mẫu:Uses TemplateStyles</a> (<a href="/w/index.php?title=B%E1%BA%A3n_m%E1%BA%ABu:Uses_TemplateStyles&action=edit" title="Bản mẫu:Uses TemplateStyles">sửa đổi</a>) </li><li><a href="/wiki/M%C3%B4_%C4%91un:Arguments" title="Mô đun:Arguments">Mô đun:Arguments</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Arguments&action=edit" title="Mô đun:Arguments">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Documentation" title="Mô đun:Documentation">Mô đun:Documentation</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=edit" title="Mô đun:Documentation">xem mã nguồn</a>) (hạn chế cho phép kỹ thuật viên bản mẫu sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Documentation/config" title="Mô đun:Documentation/config">Mô đun:Documentation/config</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation/config&action=edit" title="Mô đun:Documentation/config">xem mã nguồn</a>) (hạn chế cho thành viên xác nhận mở rộng)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Documentation/doc" title="Mô đun:Documentation/doc">Mô đun:Documentation/doc</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation/doc&action=edit" title="Mô đun:Documentation/doc">sửa đổi</a>) </li><li><a href="/wiki/M%C3%B4_%C4%91un:Documentation/styles.css" title="Mô đun:Documentation/styles.css">Mô đun:Documentation/styles.css</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation/styles.css&action=edit" title="Mô đun:Documentation/styles.css">xem mã nguồn</a>) (hạn chế cho thành viên xác nhận mở rộng)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Documentation/t%C3%A0i_li%E1%BB%87u" class="mw-redirect" title="Mô đun:Documentation/tài liệu">Mô đun:Documentation/tài liệu</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Documentation/t%C3%A0i_li%E1%BB%87u&action=edit" class="mw-redirect" title="Mô đun:Documentation/tài liệu">sửa đổi</a>) </li><li><a href="/wiki/M%C3%B4_%C4%91un:Effective_protection_expiry" title="Mô đun:Effective protection expiry">Mô đun:Effective protection expiry</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Effective_protection_expiry&action=edit" title="Mô đun:Effective protection expiry">xem mã nguồn</a>) (bị khóa hạn chế sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Effective_protection_level" title="Mô đun:Effective protection level">Mô đun:Effective protection level</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Effective_protection_level&action=edit" title="Mô đun:Effective protection level">xem mã nguồn</a>) (hạn chế cho thành viên xác nhận mở rộng)</li><li><a href="/wiki/M%C3%B4_%C4%91un:File_link" title="Mô đun:File link">Mô đun:File link</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:File_link&action=edit" title="Mô đun:File link">xem mã nguồn</a>) (bị khóa hạn chế sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:High-use" title="Mô đun:High-use">Mô đun:High-use</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:High-use&action=edit" title="Mô đun:High-use">xem mã nguồn</a>) (hạn chế cho phép kỹ thuật viên bản mẫu sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:List" title="Mô đun:List">Mô đun:List</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:List&action=edit" title="Mô đun:List">xem mã nguồn</a>) (hạn chế cho phép kỹ thuật viên bản mẫu sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Lua_banner" title="Mô đun:Lua banner">Mô đun:Lua banner</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Lua_banner&action=edit" title="Mô đun:Lua banner">xem mã nguồn</a>) (bị khóa hạn chế sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Message_box" title="Mô đun:Message box">Mô đun:Message box</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Message_box&action=edit" title="Mô đun:Message box">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Message_box/configuration" title="Mô đun:Message box/configuration">Mô đun:Message box/configuration</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Message_box/configuration&action=edit" title="Mô đun:Message box/configuration">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Protection_banner" title="Mô đun:Protection banner">Mô đun:Protection banner</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner&action=edit" title="Mô đun:Protection banner">xem mã nguồn</a>) (hạn chế cho phép kỹ thuật viên bản mẫu sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Protection_banner/config" title="Mô đun:Protection banner/config">Mô đun:Protection banner/config</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner/config&action=edit" title="Mô đun:Protection banner/config">xem mã nguồn</a>) (hạn chế cho phép kỹ thuật viên bản mẫu sửa đổi)</li><li><a href="/wiki/M%C3%B4_%C4%91un:String" title="Mô đun:String">Mô đun:String</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:String&action=edit" title="Mô đun:String">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/M%C3%B4_%C4%91un:TableTools" title="Mô đun:TableTools">Mô đun:TableTools</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:TableTools&action=edit" title="Mô đun:TableTools">xem mã nguồn</a>) (bị khóa)</li><li><a href="/wiki/M%C3%B4_%C4%91un:Transclusion_count" title="Mô đun:Transclusion count">Mô đun:Transclusion count</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Transclusion_count&action=edit" title="Mô đun:Transclusion count">sửa đổi</a>) </li><li><a href="/wiki/M%C3%B4_%C4%91un:Transclusion_count/data/D" title="Mô đun:Transclusion count/data/D">Mô đun:Transclusion count/data/D</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Transclusion_count/data/D&action=edit" title="Mô đun:Transclusion count/data/D">sửa đổi</a>) </li><li><a href="/wiki/M%C3%B4_%C4%91un:Uses_TemplateStyles" title="Mô đun:Uses TemplateStyles">Mô đun:Uses TemplateStyles</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Uses_TemplateStyles&action=edit" title="Mô đun:Uses TemplateStyles">sửa đổi</a>) </li><li><a href="/wiki/M%C3%B4_%C4%91un:Yesno" title="Mô đun:Yesno">Mô đun:Yesno</a> (<a href="/w/index.php?title=M%C3%B4_%C4%91un:Yesno&action=edit" title="Mô đun:Yesno">xem mã nguồn</a>) (bị khóa)</li></ul></div><p id="mw-returnto">Trở lại <a href="/wiki/M%C3%B4_%C4%91un:Documentation" title="Mô đun:Documentation">Mô đun:Documentation</a>.</p> <!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Lấy từ “<a dir="ltr" href="https://vi.wikipedia.org/wiki/Mô_đun:Documentation">https://vi.wikipedia.org/wiki/Mô_đun:Documentation</a>”</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Quy định quyền riêng tư</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:Gi%E1%BB%9Bi_thi%E1%BB%87u">Giới thiệu Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Ph%E1%BB%A7_nh%E1%BA%ADn_chung">Lời phủ nhận</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Bộ Quy tắc Ứng xử Chung</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Lập trình viên</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/vi.wikipedia.org">Thống kê</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Tuyên bố về cookie</a></li> <li id="footer-places-mobileview"><a href="//vi.m.wikipedia.org/w/index.php?title=M%C3%B4_%C4%91un:Documentation&action=edit&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Phiên bản di động</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"mediawiki.ui.button\".\n[1.41] Please use Codex. See migration guidelines: https://www.mediawiki.org/wiki/Codex/Migrating_from_MediaWiki_UI");mw.config.set({"wgHostname":"mw-web.codfw.main-847495b4dd-rvq2h","wgBackendResponseTime":339,"wgPageParseReport":{"limitreport":{"cputime":"0.070","walltime":"0.104","ppvisitednodes":{"value":251,"limit":1000000},"postexpandincludesize":{"value":41262,"limit":2097152},"templateargumentsize":{"value":896,"limit":2097152},"expansiondepth":{"value":20,"limit":100},"expensivefunctioncount":{"value":7,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":431,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 84.419 1 -total"," 83.37% 70.377 1 Bản_mẫu:Văn_bản_trang_khóa/bản_mẫu"," 78.03% 65.872 1 Bản_mẫu:Văn_bản_trang_khóa"," 63.85% 53.903 1 Bản_mẫu:Fmbox"," 30.66% 25.887 1 Bản_mẫu:Yêu_cầu_sửa_trang_khóa"," 16.46% 13.899 1 Bản_mẫu:Thông_báo_sửa_đổi_của_trang"," 14.40% 12.159 1 Bản_mẫu:Thông_báo_sửa_đổi_của_trang/nội_dung"," 12.23% 10.323 1 Bản_mẫu:Thông_báo_sửa_đổi_của_trang/Nguồn"," 6.47% 5.466 1 Bản_mẫu:Mbox"," 5.19% 4.382 2 Bản_mẫu:Ns_has_subpages"]},"scribunto":{"limitreport-timeusage":{"value":"0.023","limit":"10.000"},"limitreport-memusage":{"value":953491,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-847495b4dd-rvq2h","timestamp":"20241128130348","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>