CINXE.COM
Mô đun:Protection banner – 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-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="vi" dir="ltr"> <head> <meta charset="UTF-8"> <title>Mô đun:Protection banner – 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-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-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":false,"wgSeparatorTransformTable":[",\t.",".\t,"],"wgDigitTransformTable":["",""], "wgDefaultDateFormat":"vi normal","wgMonthNames":["","tháng 1","tháng 2","tháng 3","tháng 4","tháng 5","tháng 6","tháng 7","tháng 8","tháng 9","tháng 10","tháng 11","tháng 12"],"wgRequestId":"3b25b4d4-dab4-4e08-8fdb-1d72b2d25430","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Mô_đun:Protection_banner","wgTitle":"Protection banner","wgCurRevisionId":69439787,"wgRevisionId":69439787,"wgArticleId":3280209,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Trang bị khóa hẳn"],"wgPageViewLanguage":"vi","wgPageContentLanguage":"vi","wgPageContentModel":"Scribunto","wgRelevantPageName":"Mô_đun:Protection_banner","wgRelevantArticleId":3280209,"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":30000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q18084584","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.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","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","wikibase.client.vector-2022","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.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&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="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Mô đun:Protection banner – 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:Protection_banner"> <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:Protection_banner"> <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="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Mô_đun_Protection_banner rootpage-Mô_đun_Protection_banner skin-vector-2022 action-view"><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%3AProtection+banner" 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%3AProtection+banner" 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%3AProtection+banner" 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%3AProtection+banner" 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 class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Nội dung" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Nội dung</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.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-toc.unpin">ẩn</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Đầu</div> </a> </li> <li id="toc-Sử_dụng" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Sử_dụng"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Sử dụng</span> </div> </a> <button aria-controls="toc-Sử_dụng-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Hiện/ẩn mục Sử dụng</span> </button> <ul id="toc-Sử_dụng-sublist" class="vector-toc-list"> <li id="toc-Từ_wikitext" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Từ_wikitext"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Từ wikitext</span> </div> </a> <ul id="toc-Từ_wikitext-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Từ_Lua" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Từ_Lua"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>Từ Lua</span> </div> </a> <ul id="toc-Từ_Lua-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Tham_số" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Tham_số"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Tham số</span> </div> </a> <ul id="toc-Tham_số-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lý_do" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Lý_do"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Lý do</span> </div> </a> <ul id="toc-Lý_do-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lỗi" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Lỗi"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Lỗi</span> </div> </a> <button aria-controls="toc-Lỗi-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Hiện/ẩn mục Lỗi</span> </button> <ul id="toc-Lỗi-sublist" class="vector-toc-list"> <li id="toc-Sai_ngày_khóa_trang" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Sai_ngày_khóa_trang"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Sai ngày khóa trang</span> </div> </a> <ul id="toc-Sai_ngày_khóa_trang-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Sai_hành_động" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Sai_hành_động"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>Sai hành động</span> </div> </a> <ul id="toc-Sai_hành_động-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lý_do_không_thể_chứa_ký_tự_cây_đứng" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Lý_do_không_thể_chứa_ký_tự_cây_đứng"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.3</span> <span>Lý do không thể chứa ký tự cây đứng</span> </div> </a> <ul id="toc-Lý_do_không_thể_chứa_ký_tự_cây_đứng-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Một_số_lỗi_khác" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Một_số_lỗi_khác"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.4</span> <span>Một số lỗi khác</span> </div> </a> <ul id="toc-Một_số_lỗi_khác-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Thông_tin_kỹ_thuật" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Thông_tin_kỹ_thuật"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Thông tin kỹ thuật</span> </div> </a> <ul id="toc-Thông_tin_kỹ_thuật-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Nội dung" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Đóng mở mục lục" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-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-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Đóng mở mục lục</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-namespace">Mô đun</span><span class="mw-page-title-separator">:</span><span class="mw-page-title-main">Protection banner</span></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="Xem bài viết trong ngôn ngữ khác. Bài có sẵn trong 109 ngôn ngữ" > <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-109" 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">109 ngôn ngữ</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Afrikaans" lang="af" hreflang="af" data-title="Module:Protection banner" data-language-autonym="Afrikaans" data-language-local-name="Tiếng Afrikaans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-smn mw-list-item"><a href="https://smn.wikipedia.org/wiki/Mooduul:Protection_banner" title="Mooduul:Protection banner – Tiếng Inari Sami" lang="smn" hreflang="smn" data-title="Mooduul:Protection banner" data-language-autonym="Anarâškielâ" data-language-local-name="Tiếng Inari Sami" class="interlanguage-link-target"><span>Anarâškielâ</span></a></li><li class="interlanguage-link interwiki-ab mw-list-item"><a href="https://ab.wikipedia.org/wiki/%D0%90%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Амодуль:Protection banner – Tiếng Abkhazia" lang="ab" hreflang="ab" data-title="Амодуль:Protection banner" data-language-autonym="Аԥсшәа" data-language-local-name="Tiếng Abkhazia" class="interlanguage-link-target"><span>Аԥсшәа</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:Protection_banner" title="وحدة:Protection banner – Tiếng Ả Rập" lang="ar" hreflang="ar" data-title="وحدة:Protection banner" data-language-autonym="العربية" data-language-local-name="Tiếng Ả Rập" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-hyw mw-list-item"><a href="https://hyw.wikipedia.org/wiki/%D5%84%D5%B8%D5%A4%D5%B8%D6%82%D5%AC:Protection_banner" title="Մոդուլ:Protection banner – Western Armenian" lang="hyw" hreflang="hyw" data-title="Մոդուլ:Protection banner" data-language-autonym="Արեւմտահայերէն" data-language-local-name="Western Armenian" class="interlanguage-link-target"><span>Արեւմտահայերէն</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/M%C3%B3dulu:Protection_banner" title="Módulu:Protection banner – Tiếng Asturias" lang="ast" hreflang="ast" data-title="Módulu:Protection banner" data-language-autonym="Asturianu" data-language-local-name="Tiếng Asturias" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-av mw-list-item"><a href="https://av.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Модуль:Protection banner – Tiếng Avaric" lang="av" hreflang="av" data-title="Модуль:Protection banner" data-language-autonym="Авар" data-language-local-name="Tiếng Avaric" class="interlanguage-link-target"><span>Авар</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Azerbaijan" lang="az" hreflang="az" data-title="Modul:Protection banner" data-language-autonym="Azərbaycanca" data-language-local-name="Tiếng Azerbaijan" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-azb mw-list-item"><a href="https://azb.wikipedia.org/wiki/%D9%85%D8%A7%DA%98%D9%88%D9%84:Protection_banner" title="ماژول:Protection banner – South Azerbaijani" lang="azb" hreflang="azb" data-title="ماژول:Protection banner" data-language-autonym="تۆرکجه" data-language-local-name="South Azerbaijani" class="interlanguage-link-target"><span>تۆرکجه</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Indonesia" lang="id" hreflang="id" data-title="Modul:Protection banner" data-language-autonym="Bahasa Indonesia" data-language-local-name="Tiếng Indonesia" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Mã Lai" lang="ms" hreflang="ms" data-title="Modul:Protection banner" data-language-autonym="Bahasa Melayu" data-language-local-name="Tiếng Mã Lai" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-ban mw-list-item"><a href="https://ban.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Bali" lang="ban" hreflang="ban" data-title="Modul:Protection banner" data-language-autonym="Basa Bali" data-language-local-name="Tiếng Bali" class="interlanguage-link-target"><span>Basa Bali</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%AE%E0%A6%A1%E0%A6%BF%E0%A6%89%E0%A6%B2:%E0%A6%B8%E0%A7%81%E0%A6%B0%E0%A6%95%E0%A7%8D%E0%A6%B7%E0%A6%BE_%E0%A6%AC%E0%A7%8D%E0%A6%AF%E0%A6%BE%E0%A6%A8%E0%A6%BE%E0%A6%B0" title="মডিউল:সুরক্ষা ব্যানার – Tiếng Bangla" lang="bn" hreflang="bn" data-title="মডিউল:সুরক্ষা ব্যানার" data-language-autonym="বাংলা" data-language-local-name="Tiếng Bangla" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-bjn mw-list-item"><a href="https://bjn.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Banjar" lang="bjn" hreflang="bjn" data-title="Modul:Protection banner" data-language-autonym="Banjar" data-language-local-name="Tiếng Banjar" class="interlanguage-link-target"><span>Banjar</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:Protection_banner" title="模組:Protection banner – Tiếng Mân Nam" lang="nan" hreflang="nan" data-title="模組:Protection banner" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Tiếng Mân Nam" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Модуль:Protection banner – Tiếng Belarus" lang="be" hreflang="be" data-title="Модуль:Protection banner" data-language-autonym="Беларуская" data-language-local-name="Tiếng Belarus" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-be-x-old mw-list-item"><a href="https://be-tarask.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:%D0%90%D0%B1%D0%B2%D0%B5%D1%81%D1%82%D0%BA%D0%B0_%D0%BF%D1%80%D0%B0_%D0%B0%D0%B1%D0%B0%D1%80%D0%BE%D0%BD%D1%83" title="Модуль:Абвестка пра абарону – Belarusian (Taraškievica orthography)" lang="be-tarask" hreflang="be-tarask" data-title="Модуль:Абвестка пра абарону" data-language-autonym="Беларуская (тарашкевіца)" data-language-local-name="Belarusian (Taraškievica orthography)" class="interlanguage-link-target"><span>Беларуская (тарашкевіца)</span></a></li><li class="interlanguage-link interwiki-mad mw-list-item"><a href="https://mad.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Madura" lang="mad" hreflang="mad" data-title="Modul:Protection banner" data-language-autonym="Madhurâ" data-language-local-name="Tiếng Madura" class="interlanguage-link-target"><span>Madhurâ</span></a></li><li class="interlanguage-link interwiki-bh mw-list-item"><a href="https://bh.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Bhojpuri" lang="bh" hreflang="bh" data-title="Module:Protection banner" data-language-autonym="भोजपुरी" data-language-local-name="Bhojpuri" class="interlanguage-link-target"><span>भोजपुरी</span></a></li><li class="interlanguage-link interwiki-bcl mw-list-item"><a href="https://bcl.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Central Bikol" lang="bcl" hreflang="bcl" data-title="Module:Protection banner" data-language-autonym="Bikol Central" data-language-local-name="Central Bikol" class="interlanguage-link-target"><span>Bikol Central</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Bosnia" lang="bs" hreflang="bs" data-title="Modul:Protection banner" data-language-autonym="Bosanski" data-language-local-name="Tiếng Bosnia" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-bxr mw-list-item"><a href="https://bxr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Модуль:Protection banner – Russia Buriat" lang="bxr" hreflang="bxr" data-title="Модуль:Protection banner" data-language-autonym="Буряад" data-language-local-name="Russia Buriat" class="interlanguage-link-target"><span>Буряад</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/M%C3%B2dul:Protection_banner" title="Mòdul:Protection banner – Tiếng Catalan" lang="ca" hreflang="ca" data-title="Mòdul:Protection banner" data-language-autonym="Català" data-language-local-name="Tiếng Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-ceb mw-list-item"><a href="https://ceb.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Cebuano" lang="ceb" hreflang="ceb" data-title="Module:Protection banner" data-language-autonym="Cebuano" data-language-local-name="Tiếng Cebuano" class="interlanguage-link-target"><span>Cebuano</span></a></li><li class="interlanguage-link interwiki-co mw-list-item"><a href="https://co.wikipedia.org/wiki/Modulo:Protection_banner" title="Modulo:Protection banner – Tiếng Corsica" lang="co" hreflang="co" data-title="Modulo:Protection banner" data-language-autonym="Corsu" data-language-local-name="Tiếng Corsica" class="interlanguage-link-target"><span>Corsu</span></a></li><li class="interlanguage-link interwiki-cy mw-list-item"><a href="https://cy.wikipedia.org/wiki/Modiwl:Protection_banner" title="Modiwl:Protection banner – Tiếng Wales" lang="cy" hreflang="cy" data-title="Modiwl:Protection banner" data-language-autonym="Cymraeg" data-language-local-name="Tiếng Wales" class="interlanguage-link-target"><span>Cymraeg</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Đan Mạch" lang="da" hreflang="da" data-title="Modul:Protection banner" data-language-autonym="Dansk" data-language-local-name="Tiếng Đan Mạch" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-ary mw-list-item"><a href="https://ary.wikipedia.org/wiki/%D9%85%D9%88%D8%AF%D9%88%D9%84:Protection_banner" title="مودول:Protection banner – Moroccan Arabic" lang="ary" hreflang="ary" data-title="مودول:Protection banner" data-language-autonym="الدارجة" data-language-local-name="Moroccan Arabic" class="interlanguage-link-target"><span>الدارجة</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Hy Lạp" lang="el" hreflang="el" data-title="Module:Protection banner" data-language-autonym="Ελληνικά" data-language-local-name="Tiếng Hy Lạp" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Anh" lang="en" hreflang="en" data-title="Module:Protection banner" data-language-autonym="English" data-language-local-name="Tiếng Anh" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Modulu:Protection_banner" title="Modulu:Protection banner – Tiếng Basque" lang="eu" hreflang="eu" data-title="Modulu:Protection banner" data-language-autonym="Euskara" data-language-local-name="Tiếng Basque" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%BE%D9%88%D8%AF%D9%85%D8%A7%D9%86:Protection_banner" title="پودمان:Protection banner – Tiếng Ba Tư" lang="fa" hreflang="fa" data-title="پودمان:Protection banner" data-language-autonym="فارسی" data-language-local-name="Tiếng Ba Tư" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-hif mw-list-item"><a href="https://hif.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Fiji Hindi" lang="hif" hreflang="hif" data-title="Module:Protection banner" data-language-autonym="Fiji Hindi" data-language-local-name="Tiếng Fiji Hindi" class="interlanguage-link-target"><span>Fiji Hindi</span></a></li><li class="interlanguage-link interwiki-fo mw-list-item"><a href="https://fo.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Faroe" lang="fo" hreflang="fo" data-title="Module:Protection banner" data-language-autonym="Føroyskt" data-language-local-name="Tiếng Faroe" class="interlanguage-link-target"><span>Føroyskt</span></a></li><li class="interlanguage-link interwiki-ff mw-list-item"><a href="https://ff.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Fulah" lang="ff" hreflang="ff" data-title="Module:Protection banner" data-language-autonym="Fulfulde" data-language-local-name="Tiếng Fulah" class="interlanguage-link-target"><span>Fulfulde</span></a></li><li class="interlanguage-link interwiki-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Ireland" lang="ga" hreflang="ga" data-title="Module:Protection banner" data-language-autonym="Gaeilge" data-language-local-name="Tiếng Ireland" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-sm mw-list-item"><a href="https://sm.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Samoa" lang="sm" hreflang="sm" data-title="Module:Protection banner" data-language-autonym="Gagana Samoa" data-language-local-name="Tiếng Samoa" class="interlanguage-link-target"><span>Gagana Samoa</span></a></li><li class="interlanguage-link interwiki-gan mw-list-item"><a href="https://gan.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:Protection_banner" title="模組:Protection banner – Tiếng Cám" lang="gan" hreflang="gan" data-title="模組:Protection banner" data-language-autonym="贛語" data-language-local-name="Tiếng Cám" class="interlanguage-link-target"><span>贛語</span></a></li><li class="interlanguage-link interwiki-gu mw-list-item"><a href="https://gu.wikipedia.org/wiki/%E0%AA%B5%E0%AA%BF%E0%AA%AD%E0%AA%BE%E0%AA%97:Protection_banner" title="વિભાગ:Protection banner – Tiếng Gujarati" lang="gu" hreflang="gu" data-title="વિભાગ:Protection banner" data-language-autonym="ગુજરાતી" data-language-local-name="Tiếng Gujarati" class="interlanguage-link-target"><span>ગુજરાતી</span></a></li><li class="interlanguage-link interwiki-gom mw-list-item"><a href="https://gom.wikipedia.org/wiki/%E0%A4%8F%E0%A4%95%E0%A4%95:Protection_banner" title="एकक:Protection banner – Tiếng Goan Konkani" lang="gom" hreflang="gom" data-title="एकक:Protection banner" data-language-autonym="गोंयची कोंकणी / Gõychi Konknni" data-language-local-name="Tiếng Goan Konkani" class="interlanguage-link-target"><span>गोंयची कोंकणी / Gõychi Konknni</span></a></li><li class="interlanguage-link interwiki-hak mw-list-item"><a href="https://hak.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:Protection_banner" title="模組:Protection banner – Tiếng Khách Gia" lang="hak" hreflang="hak" data-title="模組:Protection banner" data-language-autonym="客家語 / Hak-kâ-ngî" data-language-local-name="Tiếng Khách Gia" class="interlanguage-link-target"><span>客家語 / Hak-kâ-ngî</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%93%88:Protection_banner" title="모듈:Protection banner – Tiếng Hàn" lang="ko" hreflang="ko" data-title="모듈:Protection banner" data-language-autonym="한국어" data-language-local-name="Tiếng Hàn" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-haw mw-list-item"><a href="https://haw.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Hawaii" lang="haw" hreflang="haw" data-title="Module:Protection banner" data-language-autonym="Hawaiʻi" data-language-local-name="Tiếng Hawaii" class="interlanguage-link-target"><span>Hawaiʻi</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/%D5%84%D5%B8%D5%A4%D5%B8%D6%82%D5%AC:Protection_banner" title="Մոդուլ:Protection banner – Tiếng Armenia" lang="hy" hreflang="hy" data-title="Մոդուլ:Protection banner" data-language-autonym="Հայերեն" data-language-local-name="Tiếng Armenia" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%89%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%82%E0%A4%B2:Protection_banner" title="मॉड्यूल:Protection banner – Tiếng Hindi" lang="hi" hreflang="hi" data-title="मॉड्यूल:Protection banner" data-language-autonym="हिन्दी" data-language-local-name="Tiếng Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-ilo mw-list-item"><a href="https://ilo.wikipedia.org/wiki/Modulo:Banderola_ti_salaknib" title="Modulo:Banderola ti salaknib – Tiếng Iloko" lang="ilo" hreflang="ilo" data-title="Modulo:Banderola ti salaknib" data-language-autonym="Ilokano" data-language-local-name="Tiếng Iloko" class="interlanguage-link-target"><span>Ilokano</span></a></li><li class="interlanguage-link interwiki-zu mw-list-item"><a href="https://zu.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Zulu" lang="zu" hreflang="zu" data-title="Module:Protection banner" data-language-autonym="IsiZulu" data-language-local-name="Tiếng Zulu" class="interlanguage-link-target"><span>IsiZulu</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Iceland" lang="is" hreflang="is" data-title="Module:Protection banner" data-language-autonym="Íslenska" data-language-local-name="Tiếng Iceland" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-jv mw-list-item"><a href="https://jv.wikipedia.org/wiki/Modhul:Protection_banner" title="Modhul:Protection banner – Tiếng Java" lang="jv" hreflang="jv" data-title="Modhul:Protection banner" data-language-autonym="Jawa" data-language-local-name="Tiếng Java" class="interlanguage-link-target"><span>Jawa</span></a></li><li class="interlanguage-link interwiki-kn mw-list-item"><a href="https://kn.wikipedia.org/wiki/%E0%B2%AE%E0%B2%BE%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:Protection_banner" title="ಮಾಡ್ಯೂಲ್:Protection banner – Tiếng Kannada" lang="kn" hreflang="kn" data-title="ಮಾಡ್ಯೂಲ್:Protection banner" data-language-autonym="ಕನ್ನಡ" data-language-local-name="Tiếng Kannada" class="interlanguage-link-target"><span>ಕನ್ನಡ</span></a></li><li class="interlanguage-link interwiki-pam mw-list-item"><a href="https://pam.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Pampanga" lang="pam" hreflang="pam" data-title="Module:Protection banner" data-language-autonym="Kapampangan" data-language-local-name="Tiếng Pampanga" class="interlanguage-link-target"><span>Kapampangan</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Kazakh" lang="kk" hreflang="kk" data-title="Module:Protection banner" data-language-autonym="Қазақша" data-language-local-name="Tiếng Kazakh" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-kw mw-list-item"><a href="https://kw.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Cornwall" lang="kw" hreflang="kw" data-title="Module:Protection banner" data-language-autonym="Kernowek" data-language-local-name="Tiếng Cornwall" class="interlanguage-link-target"><span>Kernowek</span></a></li><li class="interlanguage-link interwiki-rn mw-list-item"><a href="https://rn.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Rundi" lang="rn" hreflang="rn" data-title="Module:Protection banner" data-language-autonym="Ikirundi" data-language-local-name="Tiếng Rundi" class="interlanguage-link-target"><span>Ikirundi</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Kurd" lang="ku" hreflang="ku" data-title="Modul:Protection banner" data-language-autonym="Kurdî" data-language-local-name="Tiếng Kurd" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-lld mw-list-item"><a href="https://lld.wikipedia.org/wiki/Modulo:Protection_banner" title="Modulo:Protection banner – Ladin" lang="lld" hreflang="lld" data-title="Modulo:Protection banner" data-language-autonym="Ladin" data-language-local-name="Ladin" class="interlanguage-link-target"><span>Ladin</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Modulis:Protection_banner" title="Modulis:Protection banner – Tiếng Latvia" lang="lv" hreflang="lv" data-title="Modulis:Protection banner" data-language-autonym="Latviešu" data-language-local-name="Tiếng Latvia" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-lg mw-list-item"><a href="https://lg.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Ganda" lang="lg" hreflang="lg" data-title="Module:Protection banner" data-language-autonym="Luganda" data-language-local-name="Tiếng Ganda" class="interlanguage-link-target"><span>Luganda</span></a></li><li class="interlanguage-link interwiki-mai mw-list-item"><a href="https://mai.wikipedia.org/wiki/%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%81%E0%A4%B2:Protection_banner" title="मोड्युल:Protection banner – Tiếng Maithili" lang="mai" hreflang="mai" data-title="मोड्युल:Protection banner" data-language-autonym="मैथिली" data-language-local-name="Tiếng Maithili" class="interlanguage-link-target"><span>मैथिली</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Protection_banner" title="Модул:Protection banner – Tiếng Macedonia" lang="mk" hreflang="mk" data-title="Модул:Protection banner" data-language-autonym="Македонски" data-language-local-name="Tiếng Macedonia" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%98%E0%B4%9F%E0%B4%95%E0%B4%82:Protection_banner" title="ഘടകം:Protection banner – Tiếng Malayalam" lang="ml" hreflang="ml" data-title="ഘടകം:Protection banner" data-language-autonym="മലയാളം" data-language-local-name="Tiếng Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mi mw-list-item"><a href="https://mi.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Māori" lang="mi" hreflang="mi" data-title="Module:Protection banner" data-language-autonym="Māori" data-language-local-name="Tiếng Māori" class="interlanguage-link-target"><span>Māori</span></a></li><li class="interlanguage-link interwiki-mr mw-list-item"><a href="https://mr.wikipedia.org/wiki/%E0%A4%B5%E0%A4%BF%E0%A4%AD%E0%A4%BE%E0%A4%97:Protection_banner" title="विभाग:Protection banner – Tiếng Marathi" lang="mr" hreflang="mr" data-title="विभाग:Protection banner" data-language-autonym="मराठी" data-language-local-name="Tiếng Marathi" class="interlanguage-link-target"><span>मराठी</span></a></li><li class="interlanguage-link interwiki-arz mw-list-item"><a href="https://arz.wikipedia.org/wiki/%D9%88%D8%AD%D8%AF%D8%A9:Protection_banner" title="وحدة:Protection banner – Tiếng Ả Rập Ai Cập" lang="arz" hreflang="arz" data-title="وحدة:Protection banner" data-language-autonym="مصرى" data-language-local-name="Tiếng Ả Rập Ai Cập" class="interlanguage-link-target"><span>مصرى</span></a></li><li class="interlanguage-link interwiki-mzn mw-list-item"><a href="https://mzn.wikipedia.org/wiki/%D9%85%D8%A7%DA%98%D9%88%D9%84:Protection_banner" title="ماژول:Protection banner – Tiếng Mazanderani" lang="mzn" hreflang="mzn" data-title="ماژول:Protection banner" data-language-autonym="مازِرونی" data-language-local-name="Tiếng Mazanderani" class="interlanguage-link-target"><span>مازِرونی</span></a></li><li class="interlanguage-link interwiki-min mw-list-item"><a href="https://min.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Minangkabau" lang="min" hreflang="min" data-title="Modul:Protection banner" data-language-autonym="Minangkabau" data-language-local-name="Tiếng Minangkabau" class="interlanguage-link-target"><span>Minangkabau</span></a></li><li class="interlanguage-link interwiki-mdf mw-list-item"><a href="https://mdf.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Модуль:Protection banner – Tiếng Moksha" lang="mdf" hreflang="mdf" data-title="Модуль:Protection banner" data-language-autonym="Мокшень" data-language-local-name="Tiếng Moksha" class="interlanguage-link-target"><span>Мокшень</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Mông Cổ" lang="mn" hreflang="mn" data-title="Module:Protection banner" data-language-autonym="Монгол" data-language-local-name="Tiếng Mông Cổ" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:Protection_banner" title="မော်ဂျူး:Protection banner – Tiếng Miến Điện" lang="my" hreflang="my" data-title="မော်ဂျူး:Protection banner" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="Tiếng Miến Điện" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-ne mw-list-item"><a href="https://ne.wikipedia.org/wiki/%E0%A4%AE%E0%A5%8B%E0%A4%A1%E0%A5%8D%E0%A4%AF%E0%A5%81%E0%A4%B2:Protection_banner" title="मोड्युल:Protection banner – Tiếng Nepal" lang="ne" hreflang="ne" data-title="मोड्युल:Protection banner" data-language-autonym="नेपाली" data-language-local-name="Tiếng Nepal" class="interlanguage-link-target"><span>नेपाली</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB:Protection_banner" title="モジュール:Protection banner – Tiếng Nhật" lang="ja" hreflang="ja" data-title="モジュール:Protection banner" data-language-autonym="日本語" data-language-local-name="Tiếng Nhật" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-ce mw-list-item"><a href="https://ce.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Модуль:Protection banner – Tiếng Chechen" lang="ce" hreflang="ce" data-title="Модуль:Protection banner" data-language-autonym="Нохчийн" data-language-local-name="Tiếng Chechen" class="interlanguage-link-target"><span>Нохчийн</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Na Uy (Bokmål)" lang="nb" hreflang="nb" data-title="Modul:Protection banner" data-language-autonym="Norsk bokmål" data-language-local-name="Tiếng Na Uy (Bokmål)" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-or mw-list-item"><a href="https://or.wikipedia.org/wiki/%E0%AC%AE%E0%AC%A1%E0%AD%8D%E0%AD%9F%E0%AD%81%E0%AC%B2:Protection_banner" title="ମଡ୍ୟୁଲ:Protection banner – Tiếng Odia" lang="or" hreflang="or" data-title="ମଡ୍ୟୁଲ:Protection banner" data-language-autonym="ଓଡ଼ିଆ" data-language-local-name="Tiếng Odia" class="interlanguage-link-target"><span>ଓଡ଼ିଆ</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Uzbek" lang="uz" hreflang="uz" data-title="Modul:Protection banner" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="Tiếng Uzbek" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%AE%E0%A9%8C%E0%A8%A1%E0%A8%BF%E0%A8%8A%E0%A8%B2:Protection_banner" title="ਮੌਡਿਊਲ:Protection banner – Tiếng Punjab" lang="pa" hreflang="pa" data-title="ਮੌਡਿਊਲ:Protection banner" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="Tiếng Punjab" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-blk mw-list-item"><a href="https://blk.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%80%AC%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0%E1%80%B8:Protection_banner" title="မော်ဂျူး:Protection banner – Pa'O" lang="blk" hreflang="blk" data-title="မော်ဂျူး:Protection banner" data-language-autonym="ပအိုဝ်ႏဘာႏသာႏ" data-language-local-name="Pa'O" class="interlanguage-link-target"><span>ပအိုဝ်ႏဘာႏသာႏ</span></a></li><li class="interlanguage-link interwiki-ps mw-list-item"><a href="https://ps.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Pashto" lang="ps" hreflang="ps" data-title="Module:Protection banner" data-language-autonym="پښتو" data-language-local-name="Tiếng Pashto" class="interlanguage-link-target"><span>پښتو</span></a></li><li class="interlanguage-link interwiki-shn mw-list-item"><a href="https://shn.wikipedia.org/wiki/%E1%80%99%E1%80%B1%E1%82%83%E1%82%87%E1%81%B5%E1%80%BB%E1%80%B0%E1%80%B8:Protection_banner" title="မေႃႇၵျူး:Protection banner – Tiếng Shan" lang="shn" hreflang="shn" data-title="မေႃႇၵျူး:Protection banner" data-language-autonym="ၽႃႇသႃႇတႆး " data-language-local-name="Tiếng Shan" class="interlanguage-link-target"><span>ၽႃႇသႃႇတႆး </span></a></li><li class="interlanguage-link interwiki-mnw mw-list-item"><a href="https://mnw.wikipedia.org/wiki/%E1%80%99%E1%80%9D%E1%80%BA%E1%80%82%E1%80%BB%E1%80%B0:Protection_banner" title="မဝ်ဂျူ:Protection banner – Mon" lang="mnw" hreflang="mnw" data-title="မဝ်ဂျူ:Protection banner" data-language-autonym="ဘာသာမန်" data-language-local-name="Mon" class="interlanguage-link-target"><span>ဘာသာမန်</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/M%C3%B3dulo:Protection_banner" title="Módulo:Protection banner – Tiếng Bồ Đào Nha" lang="pt" hreflang="pt" data-title="Módulo:Protection banner" data-language-autonym="Português" data-language-local-name="Tiếng Bồ Đào Nha" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-sa mw-list-item"><a href="https://sa.wikipedia.org/wiki/%E0%A4%AA%E0%A4%9F%E0%A4%B2%E0%A4%AE%E0%A5%8D:Protection_banner" title="पटलम्:Protection banner – Tiếng Phạn" lang="sa" hreflang="sa" data-title="पटलम्:Protection banner" data-language-autonym="संस्कृतम्" data-language-local-name="Tiếng Phạn" class="interlanguage-link-target"><span>संस्कृतम्</span></a></li><li class="interlanguage-link interwiki-sco mw-list-item"><a href="https://sco.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Scots" lang="sco" hreflang="sco" data-title="Module:Protection banner" data-language-autonym="Scots" data-language-local-name="Tiếng Scots" class="interlanguage-link-target"><span>Scots</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Moduli:Protection_banner" title="Moduli:Protection banner – Tiếng Albania" lang="sq" hreflang="sq" data-title="Moduli:Protection banner" data-language-autonym="Shqip" data-language-local-name="Tiếng Albania" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Sinhala" lang="si" hreflang="si" data-title="Module:Protection banner" data-language-autonym="සිංහල" data-language-local-name="Tiếng Sinhala" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Simple English" lang="en-simple" hreflang="en-simple" data-title="Module:Protection banner" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sd mw-list-item"><a href="https://sd.wikipedia.org/wiki/%D9%85%D8%A7%DA%8A%D9%8A%D9%88%D9%84:Protection_banner" title="ماڊيول:Protection banner – Tiếng Sindhi" lang="sd" hreflang="sd" data-title="ماڊيول:Protection banner" data-language-autonym="سنڌي" data-language-local-name="Tiếng Sindhi" class="interlanguage-link-target"><span>سنڌي</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Slovenia" lang="sl" hreflang="sl" data-title="Modul:Protection banner" data-language-autonym="Slovenščina" data-language-local-name="Tiếng Slovenia" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-so mw-list-item"><a href="https://so.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Somali" lang="so" hreflang="so" data-title="Module:Protection banner" data-language-autonym="Soomaaliga" data-language-local-name="Tiếng Somali" class="interlanguage-link-target"><span>Soomaaliga</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:Protection_banner" title="مۆدیوول:Protection banner – Tiếng Kurd Miền Trung" lang="ckb" hreflang="ckb" data-title="مۆدیوول:Protection banner" data-language-autonym="کوردی" data-language-local-name="Tiếng Kurd Miền Trung" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Protection_banner" title="Модул:Protection banner – Tiếng Serbia" lang="sr" hreflang="sr" data-title="Модул:Protection banner" data-language-autonym="Српски / srpski" data-language-local-name="Tiếng Serbia" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Modul:Protection_banner" title="Modul:Protection banner – Tiếng Serbo-Croatia" lang="sh" hreflang="sh" data-title="Modul:Protection banner" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Tiếng Serbo-Croatia" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-fi mw-list-item"><a href="https://fi.wikipedia.org/wiki/Moduuli:Protection_banner" title="Moduuli:Protection banner – Tiếng Phần Lan" lang="fi" hreflang="fi" data-title="Moduuli:Protection banner" data-language-autonym="Suomi" data-language-local-name="Tiếng Phần Lan" class="interlanguage-link-target"><span>Suomi</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Tagalog" lang="tl" hreflang="tl" data-title="Module:Protection banner" data-language-autonym="Tagalog" data-language-local-name="Tiếng Tagalog" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Tamil" lang="ta" hreflang="ta" data-title="Module:Protection banner" data-language-autonym="தமிழ்" data-language-local-name="Tiếng Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-kab mw-list-item"><a href="https://kab.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Kabyle" lang="kab" hreflang="kab" data-title="Module:Protection banner" data-language-autonym="Taqbaylit" data-language-local-name="Tiếng Kabyle" class="interlanguage-link-target"><span>Taqbaylit</span></a></li><li class="interlanguage-link interwiki-te mw-list-item"><a href="https://te.wikipedia.org/wiki/%E0%B0%AE%E0%B0%BE%E0%B0%A1%E0%B1%8D%E0%B0%AF%E0%B1%82%E0%B0%B2%E0%B1%8D:Protection_banner" title="మాడ్యూల్:Protection banner – Tiếng Telugu" lang="te" hreflang="te" data-title="మాడ్యూల్:Protection banner" data-language-autonym="తెలుగు" data-language-local-name="Tiếng Telugu" class="interlanguage-link-target"><span>తెలుగు</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A1%E0%B8%AD%E0%B8%94%E0%B8%B9%E0%B8%A5:Protection_banner" title="มอดูล:Protection banner – Tiếng Thái" lang="th" hreflang="th" data-title="มอดูล:Protection banner" data-language-autonym="ไทย" data-language-local-name="Tiếng Thái" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB:Protection_banner" title="Модул:Protection banner – Tiếng Tajik" lang="tg" hreflang="tg" data-title="Модул:Protection banner" data-language-autonym="Тоҷикӣ" data-language-local-name="Tiếng Tajik" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tcy mw-list-item"><a href="https://tcy.wikipedia.org/wiki/%E0%B2%AE%E0%B3%8B%E0%B2%A1%E0%B3%8D%E0%B2%AF%E0%B3%82%E0%B2%B2%E0%B3%8D:Protection_banner" title="ಮೋಡ್ಯೂಲ್:Protection banner – Tulu" lang="tcy" hreflang="tcy" data-title="ಮೋಡ್ಯೂಲ್:Protection banner" data-language-autonym="ತುಳು" data-language-local-name="Tulu" class="interlanguage-link-target"><span>ತುಳು</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Mod%C3%BCl:Koruma_kutu" title="Modül:Koruma kutu – Tiếng Thổ Nhĩ Kỳ" lang="tr" hreflang="tr" data-title="Modül:Koruma kutu" data-language-autonym="Türkçe" data-language-local-name="Tiếng Thổ Nhĩ Kỳ" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Protection_banner" title="Модуль:Protection banner – Tiếng Ukraina" lang="uk" hreflang="uk" data-title="Модуль:Protection banner" data-language-autonym="Українська" data-language-local-name="Tiếng Ukraina" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%D9%85%D8%A7%DA%88%DB%8C%D9%88%D9%84:Protection_banner" title="ماڈیول:Protection banner – Tiếng Urdu" lang="ur" hreflang="ur" data-title="ماڈیول:Protection banner" data-language-autonym="اردو" data-language-local-name="Tiếng Urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-zh-classical mw-list-item"><a href="https://zh-classical.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:Protection_banner" title="模組:Protection banner – Literary Chinese" lang="lzh" hreflang="lzh" data-title="模組:Protection banner" data-language-autonym="文言" data-language-local-name="Literary Chinese" class="interlanguage-link-target"><span>文言</span></a></li><li class="interlanguage-link interwiki-war mw-list-item"><a href="https://war.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Waray" lang="war" hreflang="war" data-title="Module:Protection banner" data-language-autonym="Winaray" data-language-local-name="Tiếng Waray" class="interlanguage-link-target"><span>Winaray</span></a></li><li class="interlanguage-link interwiki-wuu mw-list-item"><a href="https://wuu.wikipedia.org/wiki/%E6%A8%A1%E5%9D%97:Protection_banner" title="模块:Protection banner – Tiếng Ngô" lang="wuu" hreflang="wuu" data-title="模块:Protection banner" data-language-autonym="吴语" data-language-local-name="Tiếng Ngô" class="interlanguage-link-target"><span>吴语</span></a></li><li class="interlanguage-link interwiki-yo mw-list-item"><a href="https://yo.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Yoruba" lang="yo" hreflang="yo" data-title="Module:Protection banner" data-language-autonym="Yorùbá" data-language-local-name="Tiếng Yoruba" class="interlanguage-link-target"><span>Yorùbá</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E6%A8%A1%E7%B5%84:Protection_banner" title="模組:Protection banner – Tiếng Quảng Đông" lang="yue" hreflang="yue" data-title="模組:Protection banner" data-language-autonym="粵語" data-language-local-name="Tiếng Quảng Đông" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Module:Protection_banner" title="Module:Protection banner – Tiếng Trung" lang="zh" hreflang="zh" data-title="Module:Protection banner" data-language-autonym="中文" data-language-local-name="Tiếng Trung" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q18084584#sitelinks-wikipedia" title="Sửa liên kết giữa ngôn ngữ" class="wbc-editpage">Sửa liên kết</a></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:Protection_banner" title="Xem mô đun [c]" accesskey="c"><span>Mô đun</span></a></li><li id="ca-talk" class="new vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Protection_banner&action=edit&redlink=1" rel="discussion" class="new" title="Thảo luận về trang này (trang không tồn tại) [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="selected vector-tab-noicon mw-list-item"><a href="/wiki/M%C3%B4_%C4%91un:Protection_banner"><span>Đọc</span></a></li><li id="ca-viewsource" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner&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:Protection_banner&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="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/M%C3%B4_%C4%91un:Protection_banner"><span>Đọc</span></a></li><li id="ca-more-viewsource" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner&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:Protection_banner&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:Protection_banner" 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:Protection_banner" 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-permalink" class="mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner&oldid=69439787" title="Liên kết thường trực đến phiên bản này của trang"><span>Liên kết thường trực</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner&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%2Fwiki%2FM%25C3%25B4_%25C4%2591un%3AProtection_banner"><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%2Fwiki%2FM%25C3%25B4_%25C4%2591un%3AProtection_banner"><span>Tải mã QR</span></a></li> </ul> </div> </div> <div id="p-electronpdfservice-sidebar-portlet-heading" class="vector-menu mw-portlet mw-portlet-electronpdfservice-sidebar-portlet-heading" > <div class="vector-menu-heading"> In/xuất ra </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="electron-print_pdf" class="mw-list-item"><a href="/w/index.php?title=%C4%90%E1%BA%B7c_bi%E1%BB%87t:DownloadAsPdf&page=M%C3%B4_%C4%91un%3AProtection_banner&action=show-download-screen"><span>Tải về PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="javascript:print();" rel="alternate" title="Bản để in ra của trang [p]" accesskey="p"><span>Bản để in ra</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 class="wb-otherproject-link wb-otherproject-meta mw-list-item"><a href="https://meta.wikimedia.org/wiki/Module:Protection_banner" hreflang="en"><span>Meta-Wiki</span></a></li><li class="wb-otherproject-link wb-otherproject-outreach mw-list-item"><a href="https://outreach.wikimedia.org/wiki/Module:Protection_banner" hreflang="en"><span>Wikimedia Outreach</span></a></li><li class="wb-otherproject-link wb-otherproject-sources mw-list-item"><a href="https://wikisource.org/wiki/Module:Protection_banner" hreflang="en"><span>Wikisource đa ngôn ngữ</span></a></li><li class="wb-otherproject-link wb-otherproject-species mw-list-item"><a href="https://species.wikimedia.org/wiki/Module:Protection_banner" hreflang="en"><span>Wikispecies</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://vi.wikibooks.org/wiki/M%C3%B4_%C4%91un:Protection_banner" hreflang="vi"><span>Wikibooks</span></a></li><li class="wb-otherproject-link wb-otherproject-wikidata mw-list-item"><a href="https://www.wikidata.org/wiki/Module:Protection_banner" hreflang="en"><span>Wikidata</span></a></li><li class="wb-otherproject-link wb-otherproject-wikifunctions mw-list-item"><a href="https://www.wikifunctions.org/wiki/Module:Protection_banner" hreflang="en"><span>Wikifunctions</span></a></li><li class="wb-otherproject-link wb-otherproject-wikimania mw-list-item"><a href="https://wikimania.wikimedia.org/wiki/Module:Protection_banner" hreflang="en"><span>Wikimania</span></a></li><li class="wb-otherproject-link wb-otherproject-wikisource mw-list-item"><a href="https://vi.wikisource.org/wiki/M%C3%B4_%C4%91un:Protection_banner" hreflang="vi"><span>Wikisource</span></a></li><li class="wb-otherproject-link wb-otherproject-wikivoyage mw-list-item"><a href="https://vi.wikivoyage.org/wiki/M%C3%B4_%C4%91un:Protection_banner" hreflang="vi"><span>Wikivoyage</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q18084584" 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 id="mw-indicator-pp-default" class="mw-indicator"><div class="mw-parser-output"><span typeof="mw:File"><a href="/wiki/Wikipedia:Quy_%C4%91%E1%BB%8Bnh_kh%C3%B3a_trang#Khóa_bản_mẫu" title="Trang mô đun nguy hiểm cao này đã bị khóa bản mẫu vô hạn để ngăn chặn phá hoại"><img alt="Trang mô đun bị khóa vô hạn" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Template-protection-shackle-brace-FF0066.svg/20px-Template-protection-shackle-brace-FF0066.svg.png" decoding="async" width="20" height="20" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Template-protection-shackle-brace-FF0066.svg/30px-Template-protection-shackle-brace-FF0066.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/43/Template-protection-shackle-brace-FF0066.svg/40px-Template-protection-shackle-brace-FF0066.svg.png 2x" data-file-width="512" data-file-height="512" /></a></span></div></div> </div> <div id="siteSub" class="noprint">Bách khoa toàn thư mở Wikipedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="vi" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r71935964">.mw-parser-output .documentation,.mw-parser-output .documentation-metadata{border:1px solid #a2a9b1;background-color:#ecfcf4;clear:both}.mw-parser-output .documentation{margin:1em 0 0 0;padding:1em}.mw-parser-output .documentation-metadata{margin:0.2em 0;font-style:italic;padding:0.4em 1em}.mw-parser-output .documentation-startbox{padding-bottom:3px;border-bottom:1px solid #aaa;margin-bottom:1ex}.mw-parser-output .documentation-heading{font-weight:bold;font-size:125%}.mw-parser-output .documentation-clear{clear:both}.mw-parser-output .documentation-toolbar{font-style:normal;font-size:85%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .documentation,html.skin-theme-clientpref-night .mw-parser-output .documentation-metadata{background-color:#0b1e1c}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .documentation,html.skin-theme-clientpref-os .mw-parser-output .documentation-metadata{background-color:#0b1e1c}}</style><div class="documentation-container" role="complementary" aria-labelledby="documentation-heading"> <div class="documentation"> <div class="documentation-startbox"> <span class="documentation-heading" id="documentation-heading"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/50px-Test_Template_Info-Icon_-_Version_%282%29.svg.png" decoding="async" width="50" height="22" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/75px-Test_Template_Info-Icon_-_Version_%282%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/4/43/Test_Template_Info-Icon_-_Version_%282%29.svg/100px-Test_Template_Info-Icon_-_Version_%282%29.svg.png 2x" data-file-width="1792" data-file-height="800" /></span></span> Tài liệu mô đun</span><span class="mw-editsection-like plainlinks">[<a href="/wiki/M%C3%B4_%C4%91un:Protection_banner/t%C3%A0i_li%E1%BB%87u" title="Mô đun:Protection banner/tài liệu">xem</a>] [<a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:EditPage/M%C3%B4_%C4%91un:Protection_banner/t%C3%A0i_li%E1%BB%87u" title="Đặc biệt:EditPage/Mô đun:Protection banner/tài liệu">sửa</a>] [<a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:PageHistory/M%C3%B4_%C4%91un:Protection_banner/t%C3%A0i_li%E1%BB%87u" title="Đặc biệt:PageHistory/Mô đun:Protection banner/tài liệu">lịch sử</a>] [<a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Purge/M%C3%B4_%C4%91un:Protection_banner" title="Đặc biệt:Purge/Mô đun:Protection banner">làm mới</a>]</span></div> <table class="plainlinks ombox ombox-notice" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="Protected" 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">Mô-đun này là loại cần được khóa. Nó là một <a href="https://en.wikipedia.org/wiki/Wikipedia:High-risk_templates" class="extiw" title="en:Wikipedia:High-risk templates">mô-đun nhìn thấy rõ</a> được sử dụng bởi một số lượng lớn các trang, hoặc là các <a href="/wiki/Wikipedia:SUBST" class="mw-redirect" title="Wikipedia:SUBST">thay thế</a> rất thường xuyên. Bởi vì phá hoại hoặc lỗi sai khi sửa sẽ ảnh hưởng đến nhiều trang và thậm chí chỉnh sửa tầm thường có thể gây ra tải đáng kể cho các máy chủ, nó <a href="/wiki/Wikipedia:KHOA" class="mw-redirect" title="Wikipedia:KHOA">được khóa bảo vệ</a> hạn chế sửa đổi.</td></tr></tbody></table> <p>Mô-đun này tạo biểu ngữ bảo vệ và biểu tượng ổ khóa được đặt ở đầu trang được khóa. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Sử_dụng"><span id="S.E1.BB.AD_d.E1.BB.A5ng"></span>Sử dụng</h2></div> <p>Hầu hết người dùng sẽ không cần sử dụng mô-đun này trực tiếp. Để thêm các bản mẫu khóa vào các trang, bạn có thể sử dụng bản mẫu {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a" title="Bản mẫu:Khóa">Khóa</a>}} hoặc bạn có thể thấy thuận tiện hơn khi sử dụng một trong các bản mẫu khóa cụ thể hơn trong bảng bên dưới. </p> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r71573313">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Bản_mẫu_khóa" style="padding:3px"><table class="nowraplinks mw-collapsible mw-collapsed navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Bản_mẫu_khóa" style="font-size:114%;margin:0 4em"><a href="/wiki/Th%E1%BB%83_lo%E1%BA%A1i:B%E1%BA%A3n_m%E1%BA%ABu_kh%C3%B3a" title="Thể loại:Bản mẫu khóa">Bản mẫu khóa</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><table style="border:1px solid #aaa;font-size:110%;margin:0 auto;"><tbody><tr style="vertical-align:top"><th scope="col" class="navbox-group" style="background:none;border-bottom:1px solid #bbf;"></th><th scope="col" style="background:none;padding-bottom:0.25em;border-bottom:1px solid #bbf;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> <span style="font-family:sans-serif;">Sửa đổi</span></th><th scope="col" style="background:none;padding-bottom:0.25em;border-bottom:1px solid #bbf;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> <span style="font-family:sans-serif;">Di chuyển</span></th><th scope="col" style="background:none;padding-bottom:0.25em;border-bottom:1px solid #bbf;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> <span style="font-family:sans-serif;">Tải lên</span></th></tr><tr style="vertical-align:top"><td class="navbox-group" style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Chung</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a" title="Bản mẫu:Khóa">Khóa</a>}} {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Pp-protected" class="mw-redirect" title="Bản mẫu:Pp-protected">pp-protected</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> <span class="nowrap">{{Khóa}}</span> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-di_chuy%E1%BB%83n" title="Bản mẫu:Khóa-di chuyển">Khóa-di chuyển</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> <span class="nowrap">{{Khóa}}</span> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-t%E1%BA%A3i_l%C3%AAn" title="Bản mẫu:Khóa-tải lên">Khóa-tải lên</a>}}</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> <a href="/wiki/Wikipedia:TSNDS" class="mw-redirect" title="Wikipedia:TSNDS">WP:TSNDS</a></td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-tsnds" title="Bản mẫu:Khóa-tsnds">Khóa-tsnds</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Tranh chấp</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-tranh_ch%E1%BA%A5p" title="Bản mẫu:Khóa-tranh chấp">Khóa-tranh chấp</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-di_chuy%E1%BB%83n-tranh_ch%E1%BA%A5p" title="Bản mẫu:Khóa-di chuyển-tranh chấp">Khóa-di chuyển-tranh chấp</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> <a href="/wiki/Wikipedia:Quy_%C4%91%E1%BB%8Bnh_kh%C3%B3a_trang#Extended" title="Wikipedia:Quy định khóa trang">Hạn chế cho thành viên xác nhận mở rộng</a></td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-m%E1%BB%9F_r%E1%BB%99ng" title="Bản mẫu:Khóa-mở rộng">Khóa-mở rộng</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-m%E1%BB%9F_r%E1%BB%99ng" title="Bản mẫu:Khóa-mở rộng">Khóa-mở rộng</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> <a href="/wiki/Trang_ch%C3%ADnh" class="mw-redirect" title="Trang chính">Trang chính</a></td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-Commons" title="Bản mẫu:Khóa-Commons">Khóa-Commons</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> <a href="https://en.wikipedia.org/wiki/Wikipedia:Office_actions" class="extiw" title="en:Wikipedia:Office actions">Văn phòng</a></td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-v%C4%83n_ph%C3%B2ng" title="Bản mẫu:Khóa-văn phòng">Khóa-văn phòng</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> <span class="nowrap">{{Khóa-văn phòng}}</span></td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Con rối</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-r%E1%BB%91i" title="Bản mẫu:Khóa-rối">Khóa-rối</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Nguy cơ cao</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-b%E1%BA%A3n_m%E1%BA%ABu" title="Bản mẫu:Khóa-bản mẫu">Khóa-bản mẫu</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Trang thảo luận của thành viên bị cấm</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-th%E1%BA%A3o_lu%E1%BA%ADn_th%C3%A0nh_vi%C3%AAn" title="Bản mẫu:Khóa-thảo luận thành viên">Khóa-thảo luận thành viên</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Phá hoại</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-ph%C3%A1_ho%E1%BA%A1i" title="Bản mẫu:Khóa-phá hoại">Khóa-phá hoại</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-di_chuy%E1%BB%83n-ph%C3%A1_ho%E1%BA%A1i" title="Bản mẫu:Khóa-di chuyển-phá hoại">Khóa-di chuyển-phá hoại</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Trang thảo luận</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Th%E1%BA%A3o_lu%E1%BA%ADn_trang_kh%C3%B3a" title="Bản mẫu:Thảo luận trang khóa">Thảo luận trang khóa</a>}} {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Th%E1%BA%A3o_lu%E1%BA%ADn_trang_kh%C3%B3a_t%E1%BA%A1m_th%E1%BB%9Di" title="Bản mẫu:Thảo luận trang khóa tạm thời">Thảo luận trang khóa tạm thời</a>}}</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td><td style="background:whitesmoke;;vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr><tr style="vertical-align:top"><td class="navbox-group" style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;background:#ddf;font-family:sans-serif;"> Dài hạn</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-h%E1%BA%A1n_ch%E1%BA%BF_s%E1%BB%ADa_%C4%91%E1%BB%95i-v%C3%B4_h%E1%BA%A1n" title="Bản mẫu:Khóa-hạn chế sửa đổi-vô hạn">Khóa-hạn chế sửa đổi-vô hạn</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a-di_chuy%E1%BB%83n-v%C3%B4_h%E1%BA%A1n" title="Bản mẫu:Khóa-di chuyển-vô hạn">Khóa-di chuyển-vô hạn</a>}}</td><td style="vertical-align:middle;padding-left:1.0em;padding-right:1.0em;;"> –</td></tr></tbody></table></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div><a class="mw-selflink selflink">Module:Protection banner</a></div></td></tr></tbody></table></div> <div class="mw-heading mw-heading3"><h3 id="Từ_wikitext"><span id="T.E1.BB.AB_wikitext"></span>Từ wikitext</h3></div> <pre>{{#invoke:Protection banner|main | 1 = <i>lý do</i> | small = <i>yes/no</i> | action = <i>hành động</i> | date = <i>ngày khóa</i> | user = <i>tên thành viên</i> | section = <i>tên đề mục trang thảo luận</i> | category = <i>no</i> }} </pre> <p>Cú pháp #invoke có thể được sử dụng để tạo các bản mẫu khóa cụ thể hơn {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a" title="Bản mẫu:Khóa"> khóa</a>}}. Ví dụ: có thể tạo một bản mẫu khóa luôn hiển thị biểu tượng ổ khóa bằng cách sử dụng mã <code>{{#invoke:Protection banner|main|small=yes}}</code>. Các trang gọi bản mẫu này vẫn có thể sử dụng các đối số khác, như <i>action</i>. Tuy nhiên, điều này chỉ hoạt động sâu một cấp; một trang gọi một bản mẫu gọi một bản mẫu khác chứa mã ở trên sẽ không thể tự động sử dụng các tham số như <i>action</i>. </p><p><i><b>Note:</b> Bạn không còn có thể chỉ định hết hạn, vì nó được tự động truy xuất trong mọi trường hợp.</i> </p> <div class="mw-heading mw-heading3"><h3 id="Từ_Lua"><span id="T.E1.BB.AB_Lua"></span>Từ Lua</h3></div> <p>Đầu tiên, gọi mô đun: </p><p><syntaxhightlight lang="lua"> local mProtectionBanner = require('Module:Protection banner') </syntaxhightlight> </p><p>Sau đó, bạn có thể tạo các biểu ngữ bảo vệ bằng cách sử dụng chức năng _main. </p><p><syntaxhightlight lang="lua"> mProtectionBanner._main(args, cfg, titleObj) </syntaxhightlight> </p><p><var>args</var> là một bảng các đối số để truyền cho mô-đun. Để biết các khóa và giá trị có thể cho bảng này, hãy xem <a href="#Tham_số">phần tham số</a>. Biến <var>cfg</var> và <var>titleObj</var> chỉ dành cho thử nghiệm; <var>cfg</var> chỉ định một bảng cấu hình tùy chỉnh để sử dụng thay vì <a href="/wiki/M%C3%B4_%C4%91un:Protection_banner/config" title="Mô đun:Protection banner/config">Module:Protection banner/config</a>, and <var>titleObj</var> chỉ định một đối tượng mw.title để sử dụng thay vì tiêu đề hiện tại. <var>args</var>, <var>cfg</var> và <var>titleObj</var> đều là tùy chọn. </p> <div class="mw-heading mw-heading2"><h2 id="Tham_số"><span id="Tham_s.E1.BB.91"></span>Tham số</h2></div> <p>Tất cả tham số đều là tùy chọn: </p> <ul><li><b>1</b> – Lý do mà trang được khóa. Nếu được đặt, đây phải là một trong các giá trị được liệt kê trong <a href="#Lý_do">bảng lý do</a>.</li> <li><b>small</b> – Nếu đặt là "yes", "y", "1", hoặc "true", một biểu tượng ổ khóa được tạo ra thay vì biểu ngữ khóa đầy đủ.</li> <li><b>action</b> – Các hành động khóa. Phải là một trong số các dạng sau đây: "edit" (đối với khóa thông thường), "move" (đối với khóa di chuyển). Giá trị mặc định là "edit".</li> <li><b>date</b> – Ngày khóa. Đây phải là đầu vào hợp lệ cho tham số thứ hai của <a href="https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time" class="extiw" title="mw:Help:Extension:ParserFunctions">#time parser function</a>. Đối số này có hiệu lực vì những lý do sử dụng tham số PROTECTIONDATE trong cấu hình của chúng. Đối số này chỉ có hiệu lực cho các lý do "office" và "reset".</li> <li><b>user</b> – Tên thành viên của thành viên để tạo liên kết cho. Kể từ tháng 7 năm 2014, điều này chỉ có hiệu lực khi lý do "usertalk" được chỉ định.</li> <li><b>section</b> – Tên phần của trang thảo luận của trang được khóa nơi diễn ra cuộc thảo luận. Tham số này hầu hết đều hoạt động, nhưng không phải tất cả, các giá trị của <i>reason</i>.</li> <li><b>category</b> – Không thêm thể loại nếu tham số này được đặt thành "no", "n", "0", hoặc "false".</li></ul> <div class="mw-heading mw-heading2"><h2 id="Lý_do"><span id="L.C3.BD_do"></span>Lý do</h2></div> <p>Bảng sau đây chứa các lý do có sẵn, cộng với các hành động có sẵn. </p> <table class="wikitable"> <tbody><tr> <th>Lý do </th> <th>Hành động </th> <th>Miêu tả </th></tr> <tr> <td>blp </td> <td>edit </td> <td>Đối với các trang được khóa để tuân thủ quy định về <a href="/wiki/Wikipedia:Ti%E1%BB%83u_s%E1%BB%AD_ng%C6%B0%E1%BB%9Di_%C4%91ang_s%E1%BB%91ng" title="Wikipedia:Tiểu sử người đang sống">Tiểu sử người đang sống</a> </td></tr> <tr> <td>dispute </td> <td>edit </td> <td>Đối với các trang được khóa do tranh chấp sửa đổi </td></tr> <tr> <td>dmca </td> <td>edit </td> <td>Đối với các trang được khóa bởi Wikimedia Foundation do yêu cầu gỡ xuống từ <a href="https://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act" class="extiw" title="en:Digital Millennium Copyright Act">en:Digital Millennium Copyright Act</a> </td></tr> <tr> <td>ecp </td> <td>edit </td> <td>Đối với các bài viết trong lĩnh vực chủ đề được ủy quyền bởi <a href="https://en.wikipedia.org/wiki/Wikipedia:Arbitration_Committee" class="extiw" title="en:Wikipedia:Arbitration Committee">ArbCom</a> hoặc đáp ứng tiêu chí sử dụng của cộng đồng </td></tr> <tr> <td>mainpage </td> <td>edit </td> <td>Đối với các trang được khóa để được hiển thị trên <a href="/wiki/Trang_ch%C3%ADnh" class="mw-redirect" title="Trang chính">Trang chính</a> </td></tr> <tr> <td>office </td> <td>edit </td> <td>Đối với các trang được khóa bởi Wikimedia Foundation </td></tr> <tr> <td>reset </td> <td>edit </td> <td>Đối với các trang được khóa bởi Wikimedia Foundation và "đặt lại" đến phiên bản thường </td></tr> <tr> <td>sock </td> <td>edit </td> <td>Đối với các trang được khóa do <a href="/wiki/Wikipedia:T%C3%A0i_kho%E1%BA%A3n_con_r%E1%BB%91i" title="Wikipedia:Tài khoản con rối">rối phá hoại</a> </td></tr> <tr> <td>template </td> <td>edit </td> <td>Đối với các bản mẫu và mô-đun Lua <a href="https://en.wikipedia.org/wiki/Wikipedia:High-risk_templates" class="extiw" title="en:Wikipedia:High-risk templates">nguy hiểm cao</a> </td></tr> <tr> <td>usertalk </td> <td>edit </td> <td>Đối với các trang được bảo vệ chống lại các sửa đổi gây rối bởi thành viên cụ thể </td></tr> <tr> <td>vandalism </td> <td>edit </td> <td>Đối với các trang được khóa để ngăn chặn <a href="/wiki/Wikipedia:Ph%C3%A1_ho%E1%BA%A1i" title="Wikipedia:Phá hoại">phá hoại</a> </td></tr> <tr> <td>dispute </td> <td>move </td> <td>Đối với các trang được khóa chống lại việc di chuyển trang do tranh chấp về tiêu đề trang </td></tr> <tr> <td>vandalism </td> <td>move </td> <td>Đối với các trang được khóa chống lại <a href="/wiki/Wikipedia:Ph%C3%A1_ho%E1%BA%A1i#Các_dạng_phá_hoại" title="Wikipedia:Phá hoại">phá hoại trang di chuyển</a> </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Lỗi"><span id="L.E1.BB.97i"></span>Lỗi</h2></div> <p>Dưới đây là danh sách một số lỗi phổ biến mà mô-đun này có thể tạo ra và cách khắc phục chúng. </p> <div class="mw-heading mw-heading3"><h3 id="Sai_ngày_khóa_trang"><span id="Sai_ng.C3.A0y_kh.C3.B3a_trang"></span>Sai ngày khóa trang</h3></div> <p><strong class="error">Lỗi: sai ngày khóa ("abc")</strong> </p><p>Lỗi này được tạo ra nếu bạn cung cấp một tham số <code class="nowrap" style="">|date=</code> mà giá trị của nó không được công nhận là ngày hợp lệ bởi chức năng phân tích cú pháp #time. Nếu nghi ngờ, bạn chỉ có thể sử dụng một ngày ở định dạng "dd Month YYYY", ví dụ "5 tháng 12 2024". Để xem đầy đủ các đầu vào hợp lệ, xem <a href="https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions##time" class="extiw" title="mw:Help:Extension:ParserFunctions">#time documentation</a> (chỉ tham số đầu tiên, <i>chuỗi định dạng</i>, có thể được chỉ định). </p> <div class="mw-heading mw-heading3"><h3 id="Sai_hành_động"><span id="Sai_h.C3.A0nh_.C4.91.E1.BB.99ng"></span>Sai hành động</h3></div> <p><strong class="error">Lỗi: sai hành động ("abc")</strong> </p><p>Lỗi này được tạo ra nếu bạn chỉ định một hành động khóa không hợp lệ. Chỉ có ba hành động hợp lệ: <code>edit</code> (mặc định, cho khóa thường) và <code>move</code> (cho khóa di chuyển). Điều này chỉ có thể nếu bạn đang sử dụng một bản mẫu hỗ trợ chỉ định thủ công hành động khóa, chẳng hạn như {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:Kh%C3%B3a" title="Bản mẫu:Khóa">Khóa</a>}} hoặc nếu bạn đang sử dụng trực tiếp #invoke. Nếu đây không phải là trường hợp, vui lòng để lại tin nhắn trên <a href="/w/index.php?title=Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Protection_banner&action=edit&redlink=1" class="new" title="Thảo luận Mô đun:Protection banner (trang không tồn tại)">Thảo luận Mô đun:Protection banner</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Lý_do_không_thể_chứa_ký_tự_cây_đứng"><span id="L.C3.BD_do_kh.C3.B4ng_th.E1.BB.83_ch.E1.BB.A9a_k.C3.BD_t.E1.BB.B1_c.C3.A2y_.C4.91.E1.BB.A9ng"></span>Lý do không thể chứa ký tự cây đứng</h3></div> <p><strong class="error">Lỗi: lý do không thể chứa ký tự cây đứng ("|")</strong> </p><p>Lỗi này được tạo ra nếu bạn chỉ định một lý do sử dụng tham số <code class="nowrap" style="">|1=</code> bao gồm ký tự cây đứng ("|"). Vui lòng kiểm tra xem bạn có đang nhập sai bản mẫu {{<a href="/wiki/B%E1%BA%A3n_m%E1%BA%ABu:!" title="Bản mẫu:!">!</a>}} vào tham số này không. Ký tự cây đứng không được phép vì mô-đun sử dụng nó trong nội bộ. Có thể xem danh sách các lý do hợp lệ trong phần <a href="#lý_do">lý do</a>. </p> <div class="mw-heading mw-heading3"><h3 id="Một_số_lỗi_khác"><span id="M.E1.BB.99t_s.E1.BB.91_l.E1.BB.97i_kh.C3.A1c"></span>Một số lỗi khác</h3></div> <p>Nếu bạn thấy một lỗi khác ngoài các lỗi ở trên, đó có thể là lỗi trong mô-đun hoặc lỗi trong cấu hình. Xin vui lòng gửi một tin nhắn về nó tại <a href="/w/index.php?title=Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Protection_banner&action=edit&redlink=1" class="new" title="Thảo luận Mô đun:Protection banner (trang không tồn tại)">Thảo luận Mô đun:Protection banner</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Thông_tin_kỹ_thuật"><span id="Th.C3.B4ng_tin_k.E1.BB.B9_thu.E1.BA.ADt"></span>Thông tin kỹ thuật</h2></div> <p>Mô-đun này sử dụng dữ liệu cấu hình từ <a href="/wiki/M%C3%B4_%C4%91un:Protection_banner/config" title="Mô đun:Protection banner/config">Module:Protection banner/config</a>. Hầu hết các hành vi của mô-đun có thể được cấu hình ở đó, làm cho nó dễ dàng di chuyển qua các wiki khác nhau và các ngôn ngữ khác nhau. </p><p>Các trường hợp thử nghiệm chung cho mô-đun có thể được tìm thấy tại <a href="https://en.wikipedia.org/wiki/en:Module:Protection_banner/testcases" class="extiw" title="w:en:Module:Protection banner/testcases">Module:Protection banner/testcases</a>, và các trường hợp thử nghiệm cụ thể cho cấu hình của enwiki có thể được tìm thấy tại <a href="https://en.wikipedia.org/wiki/en:Module:Protection_banner/config/testcases" class="extiw" title="w:en:Module:Protection banner/config/testcases">Module:Protection banner/config/testcases</a>. </p><p>Báo cáo lỗi và yêu cầu tính năng nên được thực hiện trên <a href="https://en.wikipedia.org/wiki/en:Module_talk:Protection_banner" class="extiw" title="w:en:Module talk:Protection banner">the module's talk page</a>. </p> <div class="documentation-clear"></div> </div> <div role="note" class="documentation-metadata plainlinks"><a href="/wiki/Wikipedia:T%C3%A0i_li%E1%BB%87u_b%E1%BA%A3n_m%E1%BA%ABu" title="Wikipedia:Tài liệu bản mẫu">Tài liệu</a> bên trên <a href="https://en.wikipedia.org/wiki/Wikipedia:Transclusion" class="extiw" title="en:Wikipedia:Transclusion">được truyền tải</a> từ <a href="/wiki/M%C3%B4_%C4%91un:Protection_banner/t%C3%A0i_li%E1%BB%87u" title="Mô đun:Protection banner/tài liệu">Mô đun:Protection banner/tài liệu</a>. <span class="documentation-toolbar">(<a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:EditPage/M%C3%B4_%C4%91un:Protection_banner/t%C3%A0i_li%E1%BB%87u" title="Đặc biệt:EditPage/Mô đun:Protection banner/tài liệu">sửa</a> | <a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:PageHistory/M%C3%B4_%C4%91un:Protection_banner/t%C3%A0i_li%E1%BB%87u" title="Đặc biệt:PageHistory/Mô đun:Protection banner/tài liệu">lịch sử</a>)</span><br />Biên tập viên sửa đổi có thể thử nghiệm trong các trang chỗ thử <span class="documentation-toolbar">(<a class="external text" href="https://vi.wikipedia.org/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner/sandbox&action=edit&preload=B%E1%BA%A3n+m%E1%BA%ABu%3AT%C3%A0i+li%E1%BB%87u%2Fpreload-module-sandbox">tạo</a> | <a class="external text" href="https://vi.wikipedia.org/w/index.php?title=M%C3%B4_%C4%91un:Protection_banner/sandbox&preload=M%C3%B4+%C4%91un%3AProtection+banner&action=edit&summary=T%E1%BA%A1o+phi%C3%AAn+b%E1%BA%A3n+ch%E1%BB%97+th%E1%BB%AD+c%E1%BB%A7a+%5B%5BM%C3%B4+%C4%91un%3AProtection+banner%5D%5D">sao</a>)</span> và <a href="/wiki/M%C3%B4_%C4%91un:Protection_banner/testcases" title="Mô đun:Protection banner/testcases">trường hợp kiểm thử</a> <span class="documentation-toolbar">(<a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:EditPage/M%C3%B4_%C4%91un:Protection_banner/testcases" title="Đặc biệt:EditPage/Mô đun:Protection banner/testcases">sửa</a> | <a href="/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn_M%C3%B4_%C4%91un:Protection_banner/testcases" title="Thảo luận Mô đun:Protection banner/testcases">chạy</a>)</span> của mô đun này.<br /> <a href="/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ti%E1%BB%81n_t%E1%BB%91/M%C3%B4_%C4%91un:Protection_banner/" title="Đặc biệt:Tiền tố/Mô đun:Protection banner/">Các trang con của mô đun này</a>.</div></div> <p><span id="code"></span> </p><div class="mw-highlight mw-highlight-lang-lua mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos" data-line="1"></span></a><span class="c1">-- This module implements {{pp-meta}} and its daughter templates such as</span> </span><span id="L-2"><a href="#L-2"><span class="linenos" data-line="2"></span></a><span class="c1">-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}.</span> </span><span id="L-3"><a href="#L-3"><span class="linenos" data-line="3"></span></a> </span><span id="L-4"><a href="#L-4"><span class="linenos" data-line="4"></span></a><span class="c1">-- Initialise necessary modules.</span> </span><span id="L-5"><a href="#L-5"><span class="linenos" data-line="5"></span></a><span class="nb">require</span><span class="p">(</span><span class="s1">'strict'</span><span class="p">)</span> </span><span id="L-6"><a href="#L-6"><span class="linenos" data-line="6"></span></a><span class="kd">local</span> <span class="n">makeFileLink</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Mô đun:File link'</span><span class="p">).</span><span class="n">_main</span> </span><span id="L-7"><a href="#L-7"><span class="linenos" data-line="7"></span></a><span class="kd">local</span> <span class="n">effectiveProtectionLevel</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Mô đun:Effective protection level'</span><span class="p">).</span><span class="n">_main</span> </span><span id="L-8"><a href="#L-8"><span class="linenos" data-line="8"></span></a><span class="kd">local</span> <span class="n">effectiveProtectionExpiry</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Mô đun:Effective protection expiry'</span><span class="p">).</span><span class="n">_main</span> </span><span id="L-9"><a href="#L-9"><span class="linenos" data-line="9"></span></a><span class="kd">local</span> <span class="n">yesno</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Mô đun:Yesno'</span><span class="p">)</span> </span><span id="L-10"><a href="#L-10"><span class="linenos" data-line="10"></span></a> </span><span id="L-11"><a href="#L-11"><span class="linenos" data-line="11"></span></a><span class="c1">-- Lazily initialise modules and objects we don't always need.</span> </span><span id="L-12"><a href="#L-12"><span class="linenos" data-line="12"></span></a><span class="kd">local</span> <span class="n">getArgs</span><span class="p">,</span> <span class="n">makeMessageBox</span><span class="p">,</span> <span class="n">lang</span> </span><span id="L-13"><a href="#L-13"><span class="linenos" data-line="13"></span></a> </span><span id="L-14"><a href="#L-14"><span class="linenos" data-line="14"></span></a><span class="c1">-- Set constants.</span> </span><span id="L-15"><a href="#L-15"><span class="linenos" data-line="15"></span></a><span class="kd">local</span> <span class="n">CONFIG_MODULE</span> <span class="o">=</span> <span class="s1">'Mô đun:Protection banner/config'</span> </span><span id="L-16"><a href="#L-16"><span class="linenos" data-line="16"></span></a> </span><span id="L-17"><a href="#L-17"><span class="linenos" data-line="17"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-18"><a href="#L-18"><span class="linenos" data-line="18"></span></a><span class="c1">-- Helper functions</span> </span><span id="L-19"><a href="#L-19"><span class="linenos" data-line="19"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-20"><a href="#L-20"><span class="linenos" data-line="20"></span></a> </span><span id="L-21"><a href="#L-21"><span class="linenos" data-line="21"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">makeCategoryLink</span><span class="p">(</span><span class="n">cat</span><span class="p">,</span> <span class="n">sort</span><span class="p">)</span> </span><span id="L-22"><a href="#L-22"><span class="linenos" data-line="22"></span></a> <span class="kr">if</span> <span class="n">cat</span> <span class="kr">then</span> </span><span id="L-23"><a href="#L-23"><span class="linenos" data-line="23"></span></a> <span class="kr">return</span> <span class="nb">string.format</span><span class="p">(</span> </span><span id="L-24"><a href="#L-24"><span class="linenos" data-line="24"></span></a> <span class="s1">'[[%s:%s|%s]]'</span><span class="p">,</span> </span><span id="L-25"><a href="#L-25"><span class="linenos" data-line="25"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">site</span><span class="p">.</span><span class="n">namespaces</span><span class="p">[</span><span class="mi">14</span><span class="p">].</span><span class="n">name</span><span class="p">,</span> </span><span id="L-26"><a href="#L-26"><span class="linenos" data-line="26"></span></a> <span class="n">cat</span><span class="p">,</span> </span><span id="L-27"><a href="#L-27"><span class="linenos" data-line="27"></span></a> <span class="n">sort</span> </span><span id="L-28"><a href="#L-28"><span class="linenos" data-line="28"></span></a> <span class="p">)</span> </span><span id="L-29"><a href="#L-29"><span class="linenos" data-line="29"></span></a> <span class="kr">end</span> </span><span id="L-30"><a href="#L-30"><span class="linenos" data-line="30"></span></a><span class="kr">end</span> </span><span id="L-31"><a href="#L-31"><span class="linenos" data-line="31"></span></a> </span><span id="L-32"><a href="#L-32"><span class="linenos" data-line="32"></span></a><span class="c1">-- Validation function for the expiry and the protection date</span> </span><span id="L-33"><a href="#L-33"><span class="linenos" data-line="33"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">validateDate</span><span class="p">(</span><span class="n">dateString</span><span class="p">,</span> <span class="n">dateType</span><span class="p">)</span> </span><span id="L-34"><a href="#L-34"><span class="linenos" data-line="34"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">lang</span> <span class="kr">then</span> </span><span id="L-35"><a href="#L-35"><span class="linenos" data-line="35"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">language</span><span class="p">.</span><span class="n">getContentLanguage</span><span class="p">()</span> </span><span id="L-36"><a href="#L-36"><span class="linenos" data-line="36"></span></a> <span class="kr">end</span> </span><span id="L-37"><a href="#L-37"><span class="linenos" data-line="37"></span></a> <span class="kd">local</span> <span class="n">success</span><span class="p">,</span> <span class="n">result</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span><span class="n">lang</span><span class="p">.</span><span class="n">formatDate</span><span class="p">,</span> <span class="n">lang</span><span class="p">,</span> <span class="s1">'U'</span><span class="p">,</span> <span class="n">dateString</span><span class="p">)</span> </span><span id="L-38"><a href="#L-38"><span class="linenos" data-line="38"></span></a> <span class="kr">if</span> <span class="n">success</span> <span class="kr">then</span> </span><span id="L-39"><a href="#L-39"><span class="linenos" data-line="39"></span></a> <span class="n">result</span> <span class="o">=</span> <span class="nb">tonumber</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> </span><span id="L-40"><a href="#L-40"><span class="linenos" data-line="40"></span></a> <span class="kr">if</span> <span class="n">result</span> <span class="kr">then</span> </span><span id="L-41"><a href="#L-41"><span class="linenos" data-line="41"></span></a> <span class="kr">return</span> <span class="n">result</span> </span><span id="L-42"><a href="#L-42"><span class="linenos" data-line="42"></span></a> <span class="kr">end</span> </span><span id="L-43"><a href="#L-43"><span class="linenos" data-line="43"></span></a> <span class="kr">end</span> </span><span id="L-44"><a href="#L-44"><span class="linenos" data-line="44"></span></a> <span class="nb">error</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span> </span><span id="L-45"><a href="#L-45"><span class="linenos" data-line="45"></span></a> <span class="s1">'sai %s: %s'</span><span class="p">,</span> </span><span id="L-46"><a href="#L-46"><span class="linenos" data-line="46"></span></a> <span class="n">dateType</span><span class="p">,</span> </span><span id="L-47"><a href="#L-47"><span class="linenos" data-line="47"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">dateString</span><span class="p">)</span> </span><span id="L-48"><a href="#L-48"><span class="linenos" data-line="48"></span></a> <span class="p">),</span> <span class="mi">4</span><span class="p">)</span> </span><span id="L-49"><a href="#L-49"><span class="linenos" data-line="49"></span></a><span class="kr">end</span> </span><span id="L-50"><a href="#L-50"><span class="linenos" data-line="50"></span></a> </span><span id="L-51"><a href="#L-51"><span class="linenos" data-line="51"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">makeFullUrl</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">display</span><span class="p">)</span> </span><span id="L-52"><a href="#L-52"><span class="linenos" data-line="52"></span></a> <span class="kr">return</span> <span class="nb">string.format</span><span class="p">(</span> </span><span id="L-53"><a href="#L-53"><span class="linenos" data-line="53"></span></a> <span class="s1">'[%s %s]'</span><span class="p">,</span> </span><span id="L-54"><a href="#L-54"><span class="linenos" data-line="54"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">mw</span><span class="p">.</span><span class="n">uri</span><span class="p">.</span><span class="n">fullUrl</span><span class="p">(</span><span class="n">page</span><span class="p">,</span> <span class="n">query</span><span class="p">)),</span> </span><span id="L-55"><a href="#L-55"><span class="linenos" data-line="55"></span></a> <span class="n">display</span> </span><span id="L-56"><a href="#L-56"><span class="linenos" data-line="56"></span></a> <span class="p">)</span> </span><span id="L-57"><a href="#L-57"><span class="linenos" data-line="57"></span></a><span class="kr">end</span> </span><span id="L-58"><a href="#L-58"><span class="linenos" data-line="58"></span></a> </span><span id="L-59"><a href="#L-59"><span class="linenos" data-line="59"></span></a><span class="c1">-- Given a directed graph formatted as node -> table of direct successors,</span> </span><span id="L-60"><a href="#L-60"><span class="linenos" data-line="60"></span></a><span class="c1">-- get a table of all nodes reachable from a given node (though always</span> </span><span id="L-61"><a href="#L-61"><span class="linenos" data-line="61"></span></a><span class="c1">-- including the given node).</span> </span><span id="L-62"><a href="#L-62"><span class="linenos" data-line="62"></span></a><span class="kd">local</span> <span class="kr">function</span> <span class="nf">getReachableNodes</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">start</span><span class="p">)</span> </span><span id="L-63"><a href="#L-63"><span class="linenos" data-line="63"></span></a> <span class="kd">local</span> <span class="n">toWalk</span><span class="p">,</span> <span class="n">retval</span> <span class="o">=</span> <span class="p">{[</span><span class="n">start</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span><span class="p">},</span> <span class="p">{}</span> </span><span id="L-64"><a href="#L-64"><span class="linenos" data-line="64"></span></a> <span class="kr">while</span> <span class="kc">true</span> <span class="kr">do</span> </span><span id="L-65"><a href="#L-65"><span class="linenos" data-line="65"></span></a> <span class="c1">-- Can't use pairs() since we're adding and removing things as we're iterating</span> </span><span id="L-66"><a href="#L-66"><span class="linenos" data-line="66"></span></a> <span class="kd">local</span> <span class="n">k</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="n">toWalk</span><span class="p">)</span> <span class="c1">-- This always gets the "first" key</span> </span><span id="L-67"><a href="#L-67"><span class="linenos" data-line="67"></span></a> <span class="kr">if</span> <span class="n">k</span> <span class="o">==</span> <span class="kc">nil</span> <span class="kr">then</span> </span><span id="L-68"><a href="#L-68"><span class="linenos" data-line="68"></span></a> <span class="kr">return</span> <span class="n">retval</span> </span><span id="L-69"><a href="#L-69"><span class="linenos" data-line="69"></span></a> <span class="kr">end</span> </span><span id="L-70"><a href="#L-70"><span class="linenos" data-line="70"></span></a> <span class="n">toWalk</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="kc">nil</span> </span><span id="L-71"><a href="#L-71"><span class="linenos" data-line="71"></span></a> <span class="n">retval</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-72"><a href="#L-72"><span class="linenos" data-line="72"></span></a> <span class="kr">for</span> <span class="n">_</span><span class="p">,</span><span class="n">v</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">graph</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="kr">do</span> </span><span id="L-73"><a href="#L-73"><span class="linenos" data-line="73"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">retval</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-74"><a href="#L-74"><span class="linenos" data-line="74"></span></a> <span class="n">toWalk</span><span class="p">[</span><span class="n">v</span><span class="p">]</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-75"><a href="#L-75"><span class="linenos" data-line="75"></span></a> <span class="kr">end</span> </span><span id="L-76"><a href="#L-76"><span class="linenos" data-line="76"></span></a> <span class="kr">end</span> </span><span id="L-77"><a href="#L-77"><span class="linenos" data-line="77"></span></a> <span class="kr">end</span> </span><span id="L-78"><a href="#L-78"><span class="linenos" data-line="78"></span></a><span class="kr">end</span> </span><span id="L-79"><a href="#L-79"><span class="linenos" data-line="79"></span></a> </span><span id="L-80"><a href="#L-80"><span class="linenos" data-line="80"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-81"><a href="#L-81"><span class="linenos" data-line="81"></span></a><span class="c1">-- Protection class</span> </span><span id="L-82"><a href="#L-82"><span class="linenos" data-line="82"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-83"><a href="#L-83"><span class="linenos" data-line="83"></span></a> </span><span id="L-84"><a href="#L-84"><span class="linenos" data-line="84"></span></a><span class="kd">local</span> <span class="n">Protection</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-85"><a href="#L-85"><span class="linenos" data-line="85"></span></a><span class="n">Protection</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Protection</span> </span><span id="L-86"><a href="#L-86"><span class="linenos" data-line="86"></span></a> </span><span id="L-87"><a href="#L-87"><span class="linenos" data-line="87"></span></a><span class="n">Protection</span><span class="p">.</span><span class="n">supportedActions</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-88"><a href="#L-88"><span class="linenos" data-line="88"></span></a> <span class="n">edit</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-89"><a href="#L-89"><span class="linenos" data-line="89"></span></a> <span class="n">move</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-90"><a href="#L-90"><span class="linenos" data-line="90"></span></a> <span class="n">autoreview</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-91"><a href="#L-91"><span class="linenos" data-line="91"></span></a> <span class="n">upload</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-92"><a href="#L-92"><span class="linenos" data-line="92"></span></a><span class="p">}</span> </span><span id="L-93"><a href="#L-93"><span class="linenos" data-line="93"></span></a> </span><span id="L-94"><a href="#L-94"><span class="linenos" data-line="94"></span></a><span class="n">Protection</span><span class="p">.</span><span class="n">bannerConfigFields</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-95"><a href="#L-95"><span class="linenos" data-line="95"></span></a> <span class="s1">'text'</span><span class="p">,</span> </span><span id="L-96"><a href="#L-96"><span class="linenos" data-line="96"></span></a> <span class="s1">'explanation'</span><span class="p">,</span> </span><span id="L-97"><a href="#L-97"><span class="linenos" data-line="97"></span></a> <span class="s1">'tooltip'</span><span class="p">,</span> </span><span id="L-98"><a href="#L-98"><span class="linenos" data-line="98"></span></a> <span class="s1">'alt'</span><span class="p">,</span> </span><span id="L-99"><a href="#L-99"><span class="linenos" data-line="99"></span></a> <span class="s1">'link'</span><span class="p">,</span> </span><span id="L-100"><a href="#L-100"><span class="linenos" data-line="100"></span></a> <span class="s1">'image'</span> </span><span id="L-101"><a href="#L-101"><span class="linenos" data-line="101"></span></a><span class="p">}</span> </span><span id="L-102"><a href="#L-102"><span class="linenos" data-line="102"></span></a> </span><span id="L-103"><a href="#L-103"><span class="linenos" data-line="103"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">cfg</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span> </span><span id="L-104"><a href="#L-104"><span class="linenos" data-line="104"></span></a> <span class="kd">local</span> <span class="n">obj</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-105"><a href="#L-105"><span class="linenos" data-line="105"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_cfg</span> <span class="o">=</span> <span class="n">cfg</span> </span><span id="L-106"><a href="#L-106"><span class="linenos" data-line="106"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span> <span class="ow">or</span> <span class="n">mw</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">getCurrentTitle</span><span class="p">()</span> </span><span id="L-107"><a href="#L-107"><span class="linenos" data-line="107"></span></a> </span><span id="L-108"><a href="#L-108"><span class="linenos" data-line="108"></span></a> <span class="c1">-- Set action</span> </span><span id="L-109"><a href="#L-109"><span class="linenos" data-line="109"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">.</span><span class="n">action</span> <span class="kr">then</span> </span><span id="L-110"><a href="#L-110"><span class="linenos" data-line="110"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">action</span> <span class="o">=</span> <span class="s1">'edit'</span> </span><span id="L-111"><a href="#L-111"><span class="linenos" data-line="111"></span></a> <span class="kr">elseif</span> <span class="n">Protection</span><span class="p">.</span><span class="n">supportedActions</span><span class="p">[</span><span class="n">args</span><span class="p">.</span><span class="n">action</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-112"><a href="#L-112"><span class="linenos" data-line="112"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">action</span> <span class="o">=</span> <span class="n">args</span><span class="p">.</span><span class="n">action</span> </span><span id="L-113"><a href="#L-113"><span class="linenos" data-line="113"></span></a> <span class="kr">else</span> </span><span id="L-114"><a href="#L-114"><span class="linenos" data-line="114"></span></a> <span class="nb">error</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span> </span><span id="L-115"><a href="#L-115"><span class="linenos" data-line="115"></span></a> <span class="s1">'sai hành động: %s'</span><span class="p">,</span> </span><span id="L-116"><a href="#L-116"><span class="linenos" data-line="116"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">action</span><span class="p">)</span> </span><span id="L-117"><a href="#L-117"><span class="linenos" data-line="117"></span></a> <span class="p">),</span> <span class="mi">3</span><span class="p">)</span> </span><span id="L-118"><a href="#L-118"><span class="linenos" data-line="118"></span></a> <span class="kr">end</span> </span><span id="L-119"><a href="#L-119"><span class="linenos" data-line="119"></span></a> </span><span id="L-120"><a href="#L-120"><span class="linenos" data-line="120"></span></a> <span class="c1">-- Set level</span> </span><span id="L-121"><a href="#L-121"><span class="linenos" data-line="121"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">level</span> <span class="o">=</span> <span class="n">args</span><span class="p">.</span><span class="n">demolevel</span> <span class="ow">or</span> <span class="n">effectiveProtectionLevel</span><span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">,</span> <span class="n">obj</span><span class="p">.</span><span class="n">title</span><span class="p">)</span> </span><span id="L-122"><a href="#L-122"><span class="linenos" data-line="122"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">.</span><span class="n">level</span> <span class="ow">or</span> <span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span> <span class="o">==</span> <span class="s1">'move'</span> <span class="ow">and</span> <span class="n">obj</span><span class="p">.</span><span class="n">level</span> <span class="o">==</span> <span class="s1">'autoconfirmed'</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-123"><a href="#L-123"><span class="linenos" data-line="123"></span></a> <span class="c1">-- Users need to be autoconfirmed to move pages anyway, so treat</span> </span><span id="L-124"><a href="#L-124"><span class="linenos" data-line="124"></span></a> <span class="c1">-- semi-move-protected pages as unprotected.</span> </span><span id="L-125"><a href="#L-125"><span class="linenos" data-line="125"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">level</span> <span class="o">=</span> <span class="s1">'*'</span> </span><span id="L-126"><a href="#L-126"><span class="linenos" data-line="126"></span></a> <span class="kr">end</span> </span><span id="L-127"><a href="#L-127"><span class="linenos" data-line="127"></span></a> </span><span id="L-128"><a href="#L-128"><span class="linenos" data-line="128"></span></a> <span class="c1">-- Set expiry</span> </span><span id="L-129"><a href="#L-129"><span class="linenos" data-line="129"></span></a> <span class="kd">local</span> <span class="n">effectiveExpiry</span> <span class="o">=</span> <span class="n">effectiveProtectionExpiry</span><span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">,</span> <span class="n">obj</span><span class="p">.</span><span class="n">title</span><span class="p">)</span> </span><span id="L-130"><a href="#L-130"><span class="linenos" data-line="130"></span></a> <span class="kr">if</span> <span class="n">effectiveExpiry</span> <span class="o">==</span> <span class="s1">'infinity'</span> <span class="kr">then</span> </span><span id="L-131"><a href="#L-131"><span class="linenos" data-line="131"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">expiry</span> <span class="o">=</span> <span class="s1">'indef'</span> </span><span id="L-132"><a href="#L-132"><span class="linenos" data-line="132"></span></a> <span class="kr">elseif</span> <span class="n">effectiveExpiry</span> <span class="o">~=</span> <span class="s1">'unknown'</span> <span class="kr">then</span> </span><span id="L-133"><a href="#L-133"><span class="linenos" data-line="133"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">expiry</span> <span class="o">=</span> <span class="n">validateDate</span><span class="p">(</span><span class="n">effectiveExpiry</span><span class="p">,</span> <span class="s1">'expiry date'</span><span class="p">)</span> </span><span id="L-134"><a href="#L-134"><span class="linenos" data-line="134"></span></a> <span class="kr">end</span> </span><span id="L-135"><a href="#L-135"><span class="linenos" data-line="135"></span></a> </span><span id="L-136"><a href="#L-136"><span class="linenos" data-line="136"></span></a> <span class="c1">-- Set reason</span> </span><span id="L-137"><a href="#L-137"><span class="linenos" data-line="137"></span></a> <span class="kr">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-138"><a href="#L-138"><span class="linenos" data-line="138"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">reason</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">ustring</span><span class="p">.</span><span class="n">lower</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> </span><span id="L-139"><a href="#L-139"><span class="linenos" data-line="139"></span></a> <span class="kr">if</span> <span class="n">obj</span><span class="p">.</span><span class="n">reason</span><span class="p">:</span><span class="n">find</span><span class="p">(</span><span class="s1">'|'</span><span class="p">)</span> <span class="kr">then</span> </span><span id="L-140"><a href="#L-140"><span class="linenos" data-line="140"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s1">'lý do không thể chứa ký tự cây đứng ("|")'</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span> </span><span id="L-141"><a href="#L-141"><span class="linenos" data-line="141"></span></a> <span class="kr">end</span> </span><span id="L-142"><a href="#L-142"><span class="linenos" data-line="142"></span></a> <span class="kr">end</span> </span><span id="L-143"><a href="#L-143"><span class="linenos" data-line="143"></span></a> </span><span id="L-144"><a href="#L-144"><span class="linenos" data-line="144"></span></a> <span class="c1">-- Set protection date</span> </span><span id="L-145"><a href="#L-145"><span class="linenos" data-line="145"></span></a> <span class="kr">if</span> <span class="n">args</span><span class="p">.</span><span class="n">date</span> <span class="kr">then</span> </span><span id="L-146"><a href="#L-146"><span class="linenos" data-line="146"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">protectionDate</span> <span class="o">=</span> <span class="n">validateDate</span><span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">date</span><span class="p">,</span> <span class="s1">'protection date'</span><span class="p">)</span> </span><span id="L-147"><a href="#L-147"><span class="linenos" data-line="147"></span></a> <span class="kr">end</span> </span><span id="L-148"><a href="#L-148"><span class="linenos" data-line="148"></span></a> </span><span id="L-149"><a href="#L-149"><span class="linenos" data-line="149"></span></a> <span class="c1">-- Set banner config</span> </span><span id="L-150"><a href="#L-150"><span class="linenos" data-line="150"></span></a> <span class="kr">do</span> </span><span id="L-151"><a href="#L-151"><span class="linenos" data-line="151"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">bannerConfig</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-152"><a href="#L-152"><span class="linenos" data-line="152"></span></a> <span class="kd">local</span> <span class="n">configTables</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-153"><a href="#L-153"><span class="linenos" data-line="153"></span></a> <span class="kr">if</span> <span class="n">cfg</span><span class="p">.</span><span class="n">banners</span><span class="p">[</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-154"><a href="#L-154"><span class="linenos" data-line="154"></span></a> <span class="n">configTables</span><span class="p">[</span><span class="o">#</span><span class="n">configTables</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">banners</span><span class="p">[</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">][</span><span class="n">obj</span><span class="p">.</span><span class="n">reason</span><span class="p">]</span> </span><span id="L-155"><a href="#L-155"><span class="linenos" data-line="155"></span></a> <span class="kr">end</span> </span><span id="L-156"><a href="#L-156"><span class="linenos" data-line="156"></span></a> <span class="kr">if</span> <span class="n">cfg</span><span class="p">.</span><span class="n">defaultBanners</span><span class="p">[</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-157"><a href="#L-157"><span class="linenos" data-line="157"></span></a> <span class="n">configTables</span><span class="p">[</span><span class="o">#</span><span class="n">configTables</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">defaultBanners</span><span class="p">[</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">][</span><span class="n">obj</span><span class="p">.</span><span class="n">level</span><span class="p">]</span> </span><span id="L-158"><a href="#L-158"><span class="linenos" data-line="158"></span></a> <span class="n">configTables</span><span class="p">[</span><span class="o">#</span><span class="n">configTables</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">defaultBanners</span><span class="p">[</span><span class="n">obj</span><span class="p">.</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> </span><span id="L-159"><a href="#L-159"><span class="linenos" data-line="159"></span></a> <span class="kr">end</span> </span><span id="L-160"><a href="#L-160"><span class="linenos" data-line="160"></span></a> <span class="n">configTables</span><span class="p">[</span><span class="o">#</span><span class="n">configTables</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">masterBanner</span> </span><span id="L-161"><a href="#L-161"><span class="linenos" data-line="161"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">field</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">Protection</span><span class="p">.</span><span class="n">bannerConfigFields</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-162"><a href="#L-162"><span class="linenos" data-line="162"></span></a> <span class="kr">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">t</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">configTables</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-163"><a href="#L-163"><span class="linenos" data-line="163"></span></a> <span class="kr">if</span> <span class="n">t</span><span class="p">[</span><span class="n">field</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-164"><a href="#L-164"><span class="linenos" data-line="164"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">bannerConfig</span><span class="p">[</span><span class="n">field</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span><span class="p">[</span><span class="n">field</span><span class="p">]</span> </span><span id="L-165"><a href="#L-165"><span class="linenos" data-line="165"></span></a> <span class="kr">break</span> </span><span id="L-166"><a href="#L-166"><span class="linenos" data-line="166"></span></a> <span class="kr">end</span> </span><span id="L-167"><a href="#L-167"><span class="linenos" data-line="167"></span></a> <span class="kr">end</span> </span><span id="L-168"><a href="#L-168"><span class="linenos" data-line="168"></span></a> <span class="kr">end</span> </span><span id="L-169"><a href="#L-169"><span class="linenos" data-line="169"></span></a> <span class="kr">end</span> </span><span id="L-170"><a href="#L-170"><span class="linenos" data-line="170"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Protection</span><span class="p">)</span> </span><span id="L-171"><a href="#L-171"><span class="linenos" data-line="171"></span></a><span class="kr">end</span> </span><span id="L-172"><a href="#L-172"><span class="linenos" data-line="172"></span></a> </span><span id="L-173"><a href="#L-173"><span class="linenos" data-line="173"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">:</span><span class="nf">isProtected</span><span class="p">()</span> </span><span id="L-174"><a href="#L-174"><span class="linenos" data-line="174"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">.</span><span class="n">level</span> <span class="o">~=</span> <span class="s1">'*'</span> </span><span id="L-175"><a href="#L-175"><span class="linenos" data-line="175"></span></a><span class="kr">end</span> </span><span id="L-176"><a href="#L-176"><span class="linenos" data-line="176"></span></a> </span><span id="L-177"><a href="#L-177"><span class="linenos" data-line="177"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">:</span><span class="nf">isTemporary</span><span class="p">()</span> </span><span id="L-178"><a href="#L-178"><span class="linenos" data-line="178"></span></a> <span class="kr">return</span> <span class="nb">type</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">expiry</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> </span><span id="L-179"><a href="#L-179"><span class="linenos" data-line="179"></span></a><span class="kr">end</span> </span><span id="L-180"><a href="#L-180"><span class="linenos" data-line="180"></span></a> </span><span id="L-181"><a href="#L-181"><span class="linenos" data-line="181"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">:</span><span class="nf">makeProtectionCategory</span><span class="p">()</span> </span><span id="L-182"><a href="#L-182"><span class="linenos" data-line="182"></span></a> <span class="kd">local</span> <span class="n">cfg</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span> </span><span id="L-183"><a href="#L-183"><span class="linenos" data-line="183"></span></a> <span class="kd">local</span> <span class="n">title</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">title</span> </span><span id="L-184"><a href="#L-184"><span class="linenos" data-line="184"></span></a> </span><span id="L-185"><a href="#L-185"><span class="linenos" data-line="185"></span></a> <span class="c1">-- Exit if the page is not protected.</span> </span><span id="L-186"><a href="#L-186"><span class="linenos" data-line="186"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">self</span><span class="p">:</span><span class="n">isProtected</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-187"><a href="#L-187"><span class="linenos" data-line="187"></span></a> <span class="kr">return</span> <span class="s1">''</span> </span><span id="L-188"><a href="#L-188"><span class="linenos" data-line="188"></span></a> <span class="kr">end</span> </span><span id="L-189"><a href="#L-189"><span class="linenos" data-line="189"></span></a> </span><span id="L-190"><a href="#L-190"><span class="linenos" data-line="190"></span></a> <span class="c1">-- Get the expiry key fragment.</span> </span><span id="L-191"><a href="#L-191"><span class="linenos" data-line="191"></span></a> <span class="kd">local</span> <span class="n">expiryFragment</span> </span><span id="L-192"><a href="#L-192"><span class="linenos" data-line="192"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">expiry</span> <span class="o">==</span> <span class="s1">'indef'</span> <span class="kr">then</span> </span><span id="L-193"><a href="#L-193"><span class="linenos" data-line="193"></span></a> <span class="n">expiryFragment</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">expiry</span> </span><span id="L-194"><a href="#L-194"><span class="linenos" data-line="194"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">expiry</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> <span class="kr">then</span> </span><span id="L-195"><a href="#L-195"><span class="linenos" data-line="195"></span></a> <span class="n">expiryFragment</span> <span class="o">=</span> <span class="s1">'temp'</span> </span><span id="L-196"><a href="#L-196"><span class="linenos" data-line="196"></span></a> <span class="kr">end</span> </span><span id="L-197"><a href="#L-197"><span class="linenos" data-line="197"></span></a> </span><span id="L-198"><a href="#L-198"><span class="linenos" data-line="198"></span></a> <span class="c1">-- Get the namespace key fragment.</span> </span><span id="L-199"><a href="#L-199"><span class="linenos" data-line="199"></span></a> <span class="kd">local</span> <span class="n">namespaceFragment</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">categoryNamespaceKeys</span><span class="p">[</span><span class="n">title</span><span class="p">.</span><span class="n">namespace</span><span class="p">]</span> </span><span id="L-200"><a href="#L-200"><span class="linenos" data-line="200"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">namespaceFragment</span> <span class="ow">and</span> <span class="n">title</span><span class="p">.</span><span class="n">namespace</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-201"><a href="#L-201"><span class="linenos" data-line="201"></span></a> <span class="n">namespaceFragment</span> <span class="o">=</span> <span class="s1">'talk'</span> </span><span id="L-202"><a href="#L-202"><span class="linenos" data-line="202"></span></a> <span class="kr">end</span> </span><span id="L-203"><a href="#L-203"><span class="linenos" data-line="203"></span></a> </span><span id="L-204"><a href="#L-204"><span class="linenos" data-line="204"></span></a> <span class="c1">-- Define the order that key fragments are tested in. This is done with an</span> </span><span id="L-205"><a href="#L-205"><span class="linenos" data-line="205"></span></a> <span class="c1">-- array of tables containing the value to be tested, along with its</span> </span><span id="L-206"><a href="#L-206"><span class="linenos" data-line="206"></span></a> <span class="c1">-- position in the cfg.protectionCategories table.</span> </span><span id="L-207"><a href="#L-207"><span class="linenos" data-line="207"></span></a> <span class="kd">local</span> <span class="n">order</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-208"><a href="#L-208"><span class="linenos" data-line="208"></span></a> <span class="p">{</span><span class="n">val</span> <span class="o">=</span> <span class="n">expiryFragment</span><span class="p">,</span> <span class="n">keypos</span> <span class="o">=</span> <span class="mi">1</span><span class="p">},</span> </span><span id="L-209"><a href="#L-209"><span class="linenos" data-line="209"></span></a> <span class="p">{</span><span class="n">val</span> <span class="o">=</span> <span class="n">namespaceFragment</span><span class="p">,</span> <span class="n">keypos</span> <span class="o">=</span> <span class="mi">2</span><span class="p">},</span> </span><span id="L-210"><a href="#L-210"><span class="linenos" data-line="210"></span></a> <span class="p">{</span><span class="n">val</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">reason</span><span class="p">,</span> <span class="n">keypos</span> <span class="o">=</span> <span class="mi">3</span><span class="p">},</span> </span><span id="L-211"><a href="#L-211"><span class="linenos" data-line="211"></span></a> <span class="p">{</span><span class="n">val</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">level</span><span class="p">,</span> <span class="n">keypos</span> <span class="o">=</span> <span class="mi">4</span><span class="p">},</span> </span><span id="L-212"><a href="#L-212"><span class="linenos" data-line="212"></span></a> <span class="p">{</span><span class="n">val</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">action</span><span class="p">,</span> <span class="n">keypos</span> <span class="o">=</span> <span class="mi">5</span><span class="p">}</span> </span><span id="L-213"><a href="#L-213"><span class="linenos" data-line="213"></span></a> <span class="p">}</span> </span><span id="L-214"><a href="#L-214"><span class="linenos" data-line="214"></span></a> </span><span id="L-215"><a href="#L-215"><span class="linenos" data-line="215"></span></a> <span class="cm">--[[</span> </span><span id="L-216"><a href="#L-216"><span class="linenos" data-line="216"></span></a><span class="cm"> -- The old protection templates used an ad-hoc protection category system,</span> </span><span id="L-217"><a href="#L-217"><span class="linenos" data-line="217"></span></a><span class="cm"> -- with some templates prioritising namespaces in their categories, and</span> </span><span id="L-218"><a href="#L-218"><span class="linenos" data-line="218"></span></a><span class="cm"> -- others prioritising the protection reason. To emulate this in this module</span> </span><span id="L-219"><a href="#L-219"><span class="linenos" data-line="219"></span></a><span class="cm"> -- we use the config table cfg.reasonsWithNamespacePriority to set the</span> </span><span id="L-220"><a href="#L-220"><span class="linenos" data-line="220"></span></a><span class="cm"> -- reasons for which namespaces have priority over protection reason.</span> </span><span id="L-221"><a href="#L-221"><span class="linenos" data-line="221"></span></a><span class="cm"> -- If we are dealing with one of those reasons, move the namespace table to</span> </span><span id="L-222"><a href="#L-222"><span class="linenos" data-line="222"></span></a><span class="cm"> -- the end of the order table, i.e. give it highest priority. If not, the</span> </span><span id="L-223"><a href="#L-223"><span class="linenos" data-line="223"></span></a><span class="cm"> -- reason should have highest priority, so move that to the end of the table</span> </span><span id="L-224"><a href="#L-224"><span class="linenos" data-line="224"></span></a><span class="cm"> -- instead.</span> </span><span id="L-225"><a href="#L-225"><span class="linenos" data-line="225"></span></a><span class="cm"> --]]</span> </span><span id="L-226"><a href="#L-226"><span class="linenos" data-line="226"></span></a> <span class="nb">table.insert</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="nb">table.remove</span><span class="p">(</span><span class="n">order</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">reason</span> <span class="ow">and</span> <span class="n">cfg</span><span class="p">.</span><span class="n">reasonsWithNamespacePriority</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">reason</span><span class="p">]</span> <span class="ow">and</span> <span class="mi">2</span> <span class="ow">or</span> <span class="mi">3</span><span class="p">))</span> </span><span id="L-227"><a href="#L-227"><span class="linenos" data-line="227"></span></a> </span><span id="L-228"><a href="#L-228"><span class="linenos" data-line="228"></span></a> <span class="cm">--[[</span> </span><span id="L-229"><a href="#L-229"><span class="linenos" data-line="229"></span></a><span class="cm"> -- Define the attempt order. Inactive subtables (subtables with nil "value"</span> </span><span id="L-230"><a href="#L-230"><span class="linenos" data-line="230"></span></a><span class="cm"> -- fields) are moved to the end, where they will later be given the key</span> </span><span id="L-231"><a href="#L-231"><span class="linenos" data-line="231"></span></a><span class="cm"> -- "all". This is to cut down on the number of table lookups in</span> </span><span id="L-232"><a href="#L-232"><span class="linenos" data-line="232"></span></a><span class="cm"> -- cfg.protectionCategories, which grows exponentially with the number of</span> </span><span id="L-233"><a href="#L-233"><span class="linenos" data-line="233"></span></a><span class="cm"> -- non-nil keys. We keep track of the number of active subtables with the</span> </span><span id="L-234"><a href="#L-234"><span class="linenos" data-line="234"></span></a><span class="cm"> -- noActive parameter.</span> </span><span id="L-235"><a href="#L-235"><span class="linenos" data-line="235"></span></a><span class="cm"> --]]</span> </span><span id="L-236"><a href="#L-236"><span class="linenos" data-line="236"></span></a> <span class="kd">local</span> <span class="n">noActive</span><span class="p">,</span> <span class="n">attemptOrder</span> </span><span id="L-237"><a href="#L-237"><span class="linenos" data-line="237"></span></a> <span class="kr">do</span> </span><span id="L-238"><a href="#L-238"><span class="linenos" data-line="238"></span></a> <span class="kd">local</span> <span class="n">active</span><span class="p">,</span> <span class="n">inactive</span> <span class="o">=</span> <span class="p">{},</span> <span class="p">{}</span> </span><span id="L-239"><a href="#L-239"><span class="linenos" data-line="239"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">order</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-240"><a href="#L-240"><span class="linenos" data-line="240"></span></a> <span class="kr">if</span> <span class="n">t</span><span class="p">.</span><span class="n">val</span> <span class="kr">then</span> </span><span id="L-241"><a href="#L-241"><span class="linenos" data-line="241"></span></a> <span class="n">active</span><span class="p">[</span><span class="o">#</span><span class="n">active</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span> </span><span id="L-242"><a href="#L-242"><span class="linenos" data-line="242"></span></a> <span class="kr">else</span> </span><span id="L-243"><a href="#L-243"><span class="linenos" data-line="243"></span></a> <span class="n">inactive</span><span class="p">[</span><span class="o">#</span><span class="n">inactive</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span> </span><span id="L-244"><a href="#L-244"><span class="linenos" data-line="244"></span></a> <span class="kr">end</span> </span><span id="L-245"><a href="#L-245"><span class="linenos" data-line="245"></span></a> <span class="kr">end</span> </span><span id="L-246"><a href="#L-246"><span class="linenos" data-line="246"></span></a> <span class="n">noActive</span> <span class="o">=</span> <span class="o">#</span><span class="n">active</span> </span><span id="L-247"><a href="#L-247"><span class="linenos" data-line="247"></span></a> <span class="n">attemptOrder</span> <span class="o">=</span> <span class="n">active</span> </span><span id="L-248"><a href="#L-248"><span class="linenos" data-line="248"></span></a> <span class="kr">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">inactive</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-249"><a href="#L-249"><span class="linenos" data-line="249"></span></a> <span class="n">attemptOrder</span><span class="p">[</span><span class="o">#</span><span class="n">attemptOrder</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span> </span><span id="L-250"><a href="#L-250"><span class="linenos" data-line="250"></span></a> <span class="kr">end</span> </span><span id="L-251"><a href="#L-251"><span class="linenos" data-line="251"></span></a> <span class="kr">end</span> </span><span id="L-252"><a href="#L-252"><span class="linenos" data-line="252"></span></a> </span><span id="L-253"><a href="#L-253"><span class="linenos" data-line="253"></span></a> <span class="cm">--[[</span> </span><span id="L-254"><a href="#L-254"><span class="linenos" data-line="254"></span></a><span class="cm"> -- Check increasingly generic key combinations until we find a match. If a</span> </span><span id="L-255"><a href="#L-255"><span class="linenos" data-line="255"></span></a><span class="cm"> -- specific category exists for the combination of key fragments we are</span> </span><span id="L-256"><a href="#L-256"><span class="linenos" data-line="256"></span></a><span class="cm"> -- given, that match will be found first. If not, we keep trying different</span> </span><span id="L-257"><a href="#L-257"><span class="linenos" data-line="257"></span></a><span class="cm"> -- key fragment combinations until we match using the key</span> </span><span id="L-258"><a href="#L-258"><span class="linenos" data-line="258"></span></a><span class="cm"> -- "all-all-all-all-all".</span> </span><span id="L-259"><a href="#L-259"><span class="linenos" data-line="259"></span></a><span class="cm"> --</span> </span><span id="L-260"><a href="#L-260"><span class="linenos" data-line="260"></span></a><span class="cm"> -- To generate the keys, we index the key subtables using a binary matrix</span> </span><span id="L-261"><a href="#L-261"><span class="linenos" data-line="261"></span></a><span class="cm"> -- with indexes i and j. j is only calculated up to the number of active</span> </span><span id="L-262"><a href="#L-262"><span class="linenos" data-line="262"></span></a><span class="cm"> -- subtables. For example, if there were three active subtables, the matrix</span> </span><span id="L-263"><a href="#L-263"><span class="linenos" data-line="263"></span></a><span class="cm"> -- would look like this, with 0 corresponding to the key fragment "all", and</span> </span><span id="L-264"><a href="#L-264"><span class="linenos" data-line="264"></span></a><span class="cm"> -- 1 corresponding to other key fragments.</span> </span><span id="L-265"><a href="#L-265"><span class="linenos" data-line="265"></span></a><span class="cm"> -- </span> </span><span id="L-266"><a href="#L-266"><span class="linenos" data-line="266"></span></a><span class="cm"> -- j 1 2 3</span> </span><span id="L-267"><a href="#L-267"><span class="linenos" data-line="267"></span></a><span class="cm"> -- i </span> </span><span id="L-268"><a href="#L-268"><span class="linenos" data-line="268"></span></a><span class="cm"> -- 1 1 1 1</span> </span><span id="L-269"><a href="#L-269"><span class="linenos" data-line="269"></span></a><span class="cm"> -- 2 0 1 1</span> </span><span id="L-270"><a href="#L-270"><span class="linenos" data-line="270"></span></a><span class="cm"> -- 3 1 0 1</span> </span><span id="L-271"><a href="#L-271"><span class="linenos" data-line="271"></span></a><span class="cm"> -- 4 0 0 1</span> </span><span id="L-272"><a href="#L-272"><span class="linenos" data-line="272"></span></a><span class="cm"> -- 5 1 1 0</span> </span><span id="L-273"><a href="#L-273"><span class="linenos" data-line="273"></span></a><span class="cm"> -- 6 0 1 0</span> </span><span id="L-274"><a href="#L-274"><span class="linenos" data-line="274"></span></a><span class="cm"> -- 7 1 0 0</span> </span><span id="L-275"><a href="#L-275"><span class="linenos" data-line="275"></span></a><span class="cm"> -- 8 0 0 0</span> </span><span id="L-276"><a href="#L-276"><span class="linenos" data-line="276"></span></a><span class="cm"> -- </span> </span><span id="L-277"><a href="#L-277"><span class="linenos" data-line="277"></span></a><span class="cm"> -- Values of j higher than the number of active subtables are set</span> </span><span id="L-278"><a href="#L-278"><span class="linenos" data-line="278"></span></a><span class="cm"> -- to the string "all".</span> </span><span id="L-279"><a href="#L-279"><span class="linenos" data-line="279"></span></a><span class="cm"> --</span> </span><span id="L-280"><a href="#L-280"><span class="linenos" data-line="280"></span></a><span class="cm"> -- A key for cfg.protectionCategories is constructed for each value of i.</span> </span><span id="L-281"><a href="#L-281"><span class="linenos" data-line="281"></span></a><span class="cm"> -- The position of the value in the key is determined by the keypos field in</span> </span><span id="L-282"><a href="#L-282"><span class="linenos" data-line="282"></span></a><span class="cm"> -- each subtable.</span> </span><span id="L-283"><a href="#L-283"><span class="linenos" data-line="283"></span></a><span class="cm"> --]]</span> </span><span id="L-284"><a href="#L-284"><span class="linenos" data-line="284"></span></a> <span class="kd">local</span> <span class="n">cats</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">protectionCategories</span> </span><span id="L-285"><a href="#L-285"><span class="linenos" data-line="285"></span></a> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="o">^</span><span class="n">noActive</span> <span class="kr">do</span> </span><span id="L-286"><a href="#L-286"><span class="linenos" data-line="286"></span></a> <span class="kd">local</span> <span class="n">key</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-287"><a href="#L-287"><span class="linenos" data-line="287"></span></a> <span class="kr">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">t</span> <span class="kr">in</span> <span class="nb">ipairs</span><span class="p">(</span><span class="n">attemptOrder</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-288"><a href="#L-288"><span class="linenos" data-line="288"></span></a> <span class="kr">if</span> <span class="n">j</span> <span class="o">></span> <span class="n">noActive</span> <span class="kr">then</span> </span><span id="L-289"><a href="#L-289"><span class="linenos" data-line="289"></span></a> <span class="n">key</span><span class="p">[</span><span class="n">t</span><span class="p">.</span><span class="n">keypos</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'all'</span> </span><span id="L-290"><a href="#L-290"><span class="linenos" data-line="290"></span></a> <span class="kr">else</span> </span><span id="L-291"><a href="#L-291"><span class="linenos" data-line="291"></span></a> <span class="kd">local</span> <span class="n">quotient</span> <span class="o">=</span> <span class="n">i</span> <span class="o">/</span> <span class="mi">2</span> <span class="o">^</span> <span class="p">(</span><span class="n">j</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> </span><span id="L-292"><a href="#L-292"><span class="linenos" data-line="292"></span></a> <span class="n">quotient</span> <span class="o">=</span> <span class="nb">math.ceil</span><span class="p">(</span><span class="n">quotient</span><span class="p">)</span> </span><span id="L-293"><a href="#L-293"><span class="linenos" data-line="293"></span></a> <span class="kr">if</span> <span class="n">quotient</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="kr">then</span> </span><span id="L-294"><a href="#L-294"><span class="linenos" data-line="294"></span></a> <span class="n">key</span><span class="p">[</span><span class="n">t</span><span class="p">.</span><span class="n">keypos</span><span class="p">]</span> <span class="o">=</span> <span class="n">t</span><span class="p">.</span><span class="n">val</span> </span><span id="L-295"><a href="#L-295"><span class="linenos" data-line="295"></span></a> <span class="kr">else</span> </span><span id="L-296"><a href="#L-296"><span class="linenos" data-line="296"></span></a> <span class="n">key</span><span class="p">[</span><span class="n">t</span><span class="p">.</span><span class="n">keypos</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'all'</span> </span><span id="L-297"><a href="#L-297"><span class="linenos" data-line="297"></span></a> <span class="kr">end</span> </span><span id="L-298"><a href="#L-298"><span class="linenos" data-line="298"></span></a> <span class="kr">end</span> </span><span id="L-299"><a href="#L-299"><span class="linenos" data-line="299"></span></a> <span class="kr">end</span> </span><span id="L-300"><a href="#L-300"><span class="linenos" data-line="300"></span></a> <span class="n">key</span> <span class="o">=</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="s1">'|'</span><span class="p">)</span> </span><span id="L-301"><a href="#L-301"><span class="linenos" data-line="301"></span></a> <span class="kd">local</span> <span class="n">attempt</span> <span class="o">=</span> <span class="n">cats</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> </span><span id="L-302"><a href="#L-302"><span class="linenos" data-line="302"></span></a> <span class="kr">if</span> <span class="n">attempt</span> <span class="kr">then</span> </span><span id="L-303"><a href="#L-303"><span class="linenos" data-line="303"></span></a> <span class="kr">return</span> <span class="n">makeCategoryLink</span><span class="p">(</span><span class="n">attempt</span><span class="p">,</span> <span class="n">title</span><span class="p">.</span><span class="n">text</span><span class="p">)</span> </span><span id="L-304"><a href="#L-304"><span class="linenos" data-line="304"></span></a> <span class="kr">end</span> </span><span id="L-305"><a href="#L-305"><span class="linenos" data-line="305"></span></a> <span class="kr">end</span> </span><span id="L-306"><a href="#L-306"><span class="linenos" data-line="306"></span></a> <span class="kr">return</span> <span class="s1">''</span> </span><span id="L-307"><a href="#L-307"><span class="linenos" data-line="307"></span></a><span class="kr">end</span> </span><span id="L-308"><a href="#L-308"><span class="linenos" data-line="308"></span></a> </span><span id="L-309"><a href="#L-309"><span class="linenos" data-line="309"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">:</span><span class="nf">isIncorrect</span><span class="p">()</span> </span><span id="L-310"><a href="#L-310"><span class="linenos" data-line="310"></span></a> <span class="kd">local</span> <span class="n">expiry</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">expiry</span> </span><span id="L-311"><a href="#L-311"><span class="linenos" data-line="311"></span></a> <span class="kr">return</span> <span class="ow">not</span> <span class="n">self</span><span class="p">:</span><span class="n">isProtected</span><span class="p">()</span> </span><span id="L-312"><a href="#L-312"><span class="linenos" data-line="312"></span></a> <span class="ow">or</span> <span class="nb">type</span><span class="p">(</span><span class="n">expiry</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> <span class="ow">and</span> <span class="n">expiry</span> <span class="o"><</span> <span class="nb">os.time</span><span class="p">()</span> </span><span id="L-313"><a href="#L-313"><span class="linenos" data-line="313"></span></a><span class="kr">end</span> </span><span id="L-314"><a href="#L-314"><span class="linenos" data-line="314"></span></a> </span><span id="L-315"><a href="#L-315"><span class="linenos" data-line="315"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">:</span><span class="nf">isTemplateProtectedNonTemplate</span><span class="p">()</span> </span><span id="L-316"><a href="#L-316"><span class="linenos" data-line="316"></span></a> <span class="kd">local</span> <span class="n">action</span><span class="p">,</span> <span class="n">namespace</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">action</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">namespace</span> </span><span id="L-317"><a href="#L-317"><span class="linenos" data-line="317"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">.</span><span class="n">level</span> <span class="o">==</span> <span class="s1">'templateeditor'</span> </span><span id="L-318"><a href="#L-318"><span class="linenos" data-line="318"></span></a> <span class="ow">and</span> <span class="p">(</span> </span><span id="L-319"><a href="#L-319"><span class="linenos" data-line="319"></span></a> <span class="p">(</span><span class="n">action</span> <span class="o">~=</span> <span class="s1">'edit'</span> <span class="ow">and</span> <span class="n">action</span> <span class="o">~=</span> <span class="s1">'move'</span><span class="p">)</span> </span><span id="L-320"><a href="#L-320"><span class="linenos" data-line="320"></span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">namespace</span> <span class="o">~=</span> <span class="mi">10</span> <span class="ow">and</span> <span class="n">namespace</span> <span class="o">~=</span> <span class="mi">828</span><span class="p">)</span> </span><span id="L-321"><a href="#L-321"><span class="linenos" data-line="321"></span></a> <span class="p">)</span> </span><span id="L-322"><a href="#L-322"><span class="linenos" data-line="322"></span></a><span class="kr">end</span> </span><span id="L-323"><a href="#L-323"><span class="linenos" data-line="323"></span></a> </span><span id="L-324"><a href="#L-324"><span class="linenos" data-line="324"></span></a><span class="kr">function</span> <span class="nc">Protection</span><span class="p">:</span><span class="nf">makeCategoryLinks</span><span class="p">()</span> </span><span id="L-325"><a href="#L-325"><span class="linenos" data-line="325"></span></a> <span class="kd">local</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">msg</span> </span><span id="L-326"><a href="#L-326"><span class="linenos" data-line="326"></span></a> <span class="kd">local</span> <span class="n">ret</span> <span class="o">=</span> <span class="p">{</span> <span class="n">self</span><span class="p">:</span><span class="n">makeProtectionCategory</span><span class="p">()</span> <span class="p">}</span> </span><span id="L-327"><a href="#L-327"><span class="linenos" data-line="327"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">:</span><span class="n">isIncorrect</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-328"><a href="#L-328"><span class="linenos" data-line="328"></span></a> <span class="n">ret</span><span class="p">[</span><span class="o">#</span><span class="n">ret</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">makeCategoryLink</span><span class="p">(</span> </span><span id="L-329"><a href="#L-329"><span class="linenos" data-line="329"></span></a> <span class="n">msg</span><span class="p">[</span><span class="s1">'tracking-category-incorrect'</span><span class="p">],</span> </span><span id="L-330"><a href="#L-330"><span class="linenos" data-line="330"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">text</span> </span><span id="L-331"><a href="#L-331"><span class="linenos" data-line="331"></span></a> <span class="p">)</span> </span><span id="L-332"><a href="#L-332"><span class="linenos" data-line="332"></span></a> <span class="kr">end</span> </span><span id="L-333"><a href="#L-333"><span class="linenos" data-line="333"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">:</span><span class="n">isTemplateProtectedNonTemplate</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-334"><a href="#L-334"><span class="linenos" data-line="334"></span></a> <span class="n">ret</span><span class="p">[</span><span class="o">#</span><span class="n">ret</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">makeCategoryLink</span><span class="p">(</span> </span><span id="L-335"><a href="#L-335"><span class="linenos" data-line="335"></span></a> <span class="n">msg</span><span class="p">[</span><span class="s1">'tracking-category-template'</span><span class="p">],</span> </span><span id="L-336"><a href="#L-336"><span class="linenos" data-line="336"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">text</span> </span><span id="L-337"><a href="#L-337"><span class="linenos" data-line="337"></span></a> <span class="p">)</span> </span><span id="L-338"><a href="#L-338"><span class="linenos" data-line="338"></span></a> <span class="kr">end</span> </span><span id="L-339"><a href="#L-339"><span class="linenos" data-line="339"></span></a> <span class="kr">return</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> </span><span id="L-340"><a href="#L-340"><span class="linenos" data-line="340"></span></a><span class="kr">end</span> </span><span id="L-341"><a href="#L-341"><span class="linenos" data-line="341"></span></a> </span><span id="L-342"><a href="#L-342"><span class="linenos" data-line="342"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-343"><a href="#L-343"><span class="linenos" data-line="343"></span></a><span class="c1">-- Blurb class</span> </span><span id="L-344"><a href="#L-344"><span class="linenos" data-line="344"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-345"><a href="#L-345"><span class="linenos" data-line="345"></span></a> </span><span id="L-346"><a href="#L-346"><span class="linenos" data-line="346"></span></a><span class="kd">local</span> <span class="n">Blurb</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-347"><a href="#L-347"><span class="linenos" data-line="347"></span></a><span class="n">Blurb</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Blurb</span> </span><span id="L-348"><a href="#L-348"><span class="linenos" data-line="348"></span></a> </span><span id="L-349"><a href="#L-349"><span class="linenos" data-line="349"></span></a><span class="n">Blurb</span><span class="p">.</span><span class="n">bannerTextFields</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-350"><a href="#L-350"><span class="linenos" data-line="350"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-351"><a href="#L-351"><span class="linenos" data-line="351"></span></a> <span class="n">explanation</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-352"><a href="#L-352"><span class="linenos" data-line="352"></span></a> <span class="n">tooltip</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-353"><a href="#L-353"><span class="linenos" data-line="353"></span></a> <span class="n">alt</span> <span class="o">=</span> <span class="kc">true</span><span class="p">,</span> </span><span id="L-354"><a href="#L-354"><span class="linenos" data-line="354"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="kc">true</span> </span><span id="L-355"><a href="#L-355"><span class="linenos" data-line="355"></span></a><span class="p">}</span> </span><span id="L-356"><a href="#L-356"><span class="linenos" data-line="356"></span></a> </span><span id="L-357"><a href="#L-357"><span class="linenos" data-line="357"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-358"><a href="#L-358"><span class="linenos" data-line="358"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">({</span> </span><span id="L-359"><a href="#L-359"><span class="linenos" data-line="359"></span></a> <span class="n">_cfg</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">,</span> </span><span id="L-360"><a href="#L-360"><span class="linenos" data-line="360"></span></a> <span class="n">_protectionObj</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">,</span> </span><span id="L-361"><a href="#L-361"><span class="linenos" data-line="361"></span></a> <span class="n">_args</span> <span class="o">=</span> <span class="n">args</span> </span><span id="L-362"><a href="#L-362"><span class="linenos" data-line="362"></span></a> <span class="p">},</span> <span class="n">Blurb</span><span class="p">)</span> </span><span id="L-363"><a href="#L-363"><span class="linenos" data-line="363"></span></a><span class="kr">end</span> </span><span id="L-364"><a href="#L-364"><span class="linenos" data-line="364"></span></a> </span><span id="L-365"><a href="#L-365"><span class="linenos" data-line="365"></span></a><span class="c1">-- Private methods --</span> </span><span id="L-366"><a href="#L-366"><span class="linenos" data-line="366"></span></a> </span><span id="L-367"><a href="#L-367"><span class="linenos" data-line="367"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_formatDate</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> </span><span id="L-368"><a href="#L-368"><span class="linenos" data-line="368"></span></a> <span class="c1">-- Formats a Unix timestamp into dd Month, YYYY format.</span> </span><span id="L-369"><a href="#L-369"><span class="linenos" data-line="369"></span></a> <span class="n">lang</span> <span class="o">=</span> <span class="n">lang</span> <span class="ow">or</span> <span class="n">mw</span><span class="p">.</span><span class="n">language</span><span class="p">.</span><span class="n">getContentLanguage</span><span class="p">()</span> </span><span id="L-370"><a href="#L-370"><span class="linenos" data-line="370"></span></a> <span class="kd">local</span> <span class="n">success</span><span class="p">,</span> <span class="n">date</span> <span class="o">=</span> <span class="nb">pcall</span><span class="p">(</span> </span><span id="L-371"><a href="#L-371"><span class="linenos" data-line="371"></span></a> <span class="n">lang</span><span class="p">.</span><span class="n">formatDate</span><span class="p">,</span> </span><span id="L-372"><a href="#L-372"><span class="linenos" data-line="372"></span></a> <span class="n">lang</span><span class="p">,</span> </span><span id="L-373"><a href="#L-373"><span class="linenos" data-line="373"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">msg</span><span class="p">[</span><span class="s1">'expiry-date-format'</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">'F j Y'</span><span class="p">,</span> </span><span id="L-374"><a href="#L-374"><span class="linenos" data-line="374"></span></a> <span class="s1">'@'</span> <span class="o">..</span> <span class="nb">tostring</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> </span><span id="L-375"><a href="#L-375"><span class="linenos" data-line="375"></span></a> <span class="p">)</span> </span><span id="L-376"><a href="#L-376"><span class="linenos" data-line="376"></span></a> <span class="kr">if</span> <span class="n">success</span> <span class="kr">then</span> </span><span id="L-377"><a href="#L-377"><span class="linenos" data-line="377"></span></a> <span class="kr">return</span> <span class="n">date</span> </span><span id="L-378"><a href="#L-378"><span class="linenos" data-line="378"></span></a> <span class="kr">end</span> </span><span id="L-379"><a href="#L-379"><span class="linenos" data-line="379"></span></a><span class="kr">end</span> </span><span id="L-380"><a href="#L-380"><span class="linenos" data-line="380"></span></a> </span><span id="L-381"><a href="#L-381"><span class="linenos" data-line="381"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_getExpandedMessage</span><span class="p">(</span><span class="n">msgKey</span><span class="p">)</span> </span><span id="L-382"><a href="#L-382"><span class="linenos" data-line="382"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">msg</span><span class="p">[</span><span class="n">msgKey</span><span class="p">])</span> </span><span id="L-383"><a href="#L-383"><span class="linenos" data-line="383"></span></a><span class="kr">end</span> </span><span id="L-384"><a href="#L-384"><span class="linenos" data-line="384"></span></a> </span><span id="L-385"><a href="#L-385"><span class="linenos" data-line="385"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-386"><a href="#L-386"><span class="linenos" data-line="386"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">self</span><span class="p">.</span><span class="n">_params</span> <span class="kr">then</span> </span><span id="L-387"><a href="#L-387"><span class="linenos" data-line="387"></span></a> <span class="kd">local</span> <span class="n">parameterFuncs</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-388"><a href="#L-388"><span class="linenos" data-line="388"></span></a> </span><span id="L-389"><a href="#L-389"><span class="linenos" data-line="389"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">CURRENTVERSION</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeCurrentVersionParameter</span> </span><span id="L-390"><a href="#L-390"><span class="linenos" data-line="390"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">EDITREQUEST</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeEditRequestParameter</span> </span><span id="L-391"><a href="#L-391"><span class="linenos" data-line="391"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">EXPIRY</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeExpiryParameter</span> </span><span id="L-392"><a href="#L-392"><span class="linenos" data-line="392"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">EXPLANATIONBLURB</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeExplanationBlurbParameter</span> </span><span id="L-393"><a href="#L-393"><span class="linenos" data-line="393"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">IMAGELINK</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeImageLinkParameter</span> </span><span id="L-394"><a href="#L-394"><span class="linenos" data-line="394"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">INTROBLURB</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeIntroBlurbParameter</span> </span><span id="L-395"><a href="#L-395"><span class="linenos" data-line="395"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">INTROFRAGMENT</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeIntroFragmentParameter</span> </span><span id="L-396"><a href="#L-396"><span class="linenos" data-line="396"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">PAGETYPE</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makePagetypeParameter</span> </span><span id="L-397"><a href="#L-397"><span class="linenos" data-line="397"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">PROTECTIONBLURB</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeProtectionBlurbParameter</span> </span><span id="L-398"><a href="#L-398"><span class="linenos" data-line="398"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">PROTECTIONDATE</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeProtectionDateParameter</span> </span><span id="L-399"><a href="#L-399"><span class="linenos" data-line="399"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">PROTECTIONLEVEL</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeProtectionLevelParameter</span> </span><span id="L-400"><a href="#L-400"><span class="linenos" data-line="400"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">PROTECTIONLOG</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeProtectionLogParameter</span> </span><span id="L-401"><a href="#L-401"><span class="linenos" data-line="401"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">TALKPAGE</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeTalkPageParameter</span> </span><span id="L-402"><a href="#L-402"><span class="linenos" data-line="402"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">TOOLTIPBLURB</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeTooltipBlurbParameter</span> </span><span id="L-403"><a href="#L-403"><span class="linenos" data-line="403"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">TOOLTIPFRAGMENT</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeTooltipFragmentParameter</span> </span><span id="L-404"><a href="#L-404"><span class="linenos" data-line="404"></span></a> <span class="n">parameterFuncs</span><span class="p">.</span><span class="n">VANDAL</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_makeVandalTemplateParameter</span> </span><span id="L-405"><a href="#L-405"><span class="linenos" data-line="405"></span></a> </span><span id="L-406"><a href="#L-406"><span class="linenos" data-line="406"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">_params</span> <span class="o">=</span> <span class="nb">setmetatable</span><span class="p">({},</span> <span class="p">{</span> </span><span id="L-407"><a href="#L-407"><span class="linenos" data-line="407"></span></a> <span class="n">__index</span> <span class="o">=</span> <span class="kr">function</span> <span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span> </span><span id="L-408"><a href="#L-408"><span class="linenos" data-line="408"></span></a> <span class="kd">local</span> <span class="n">param</span> </span><span id="L-409"><a href="#L-409"><span class="linenos" data-line="409"></span></a> <span class="kr">if</span> <span class="n">parameterFuncs</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-410"><a href="#L-410"><span class="linenos" data-line="410"></span></a> <span class="n">param</span> <span class="o">=</span> <span class="n">parameterFuncs</span><span class="p">[</span><span class="n">k</span><span class="p">](</span><span class="n">self</span><span class="p">)</span> </span><span id="L-411"><a href="#L-411"><span class="linenos" data-line="411"></span></a> <span class="kr">end</span> </span><span id="L-412"><a href="#L-412"><span class="linenos" data-line="412"></span></a> <span class="n">param</span> <span class="o">=</span> <span class="n">param</span> <span class="ow">or</span> <span class="s1">''</span> </span><span id="L-413"><a href="#L-413"><span class="linenos" data-line="413"></span></a> <span class="n">t</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">param</span> </span><span id="L-414"><a href="#L-414"><span class="linenos" data-line="414"></span></a> <span class="kr">return</span> <span class="n">param</span> </span><span id="L-415"><a href="#L-415"><span class="linenos" data-line="415"></span></a> <span class="kr">end</span> </span><span id="L-416"><a href="#L-416"><span class="linenos" data-line="416"></span></a> <span class="p">})</span> </span><span id="L-417"><a href="#L-417"><span class="linenos" data-line="417"></span></a> <span class="kr">end</span> </span><span id="L-418"><a href="#L-418"><span class="linenos" data-line="418"></span></a> </span><span id="L-419"><a href="#L-419"><span class="linenos" data-line="419"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span><span class="p">:</span><span class="n">gsub</span><span class="p">(</span><span class="s1">'${(%u+)}'</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">_params</span><span class="p">)</span> </span><span id="L-420"><a href="#L-420"><span class="linenos" data-line="420"></span></a> <span class="kr">return</span> <span class="n">msg</span> </span><span id="L-421"><a href="#L-421"><span class="linenos" data-line="421"></span></a><span class="kr">end</span> </span><span id="L-422"><a href="#L-422"><span class="linenos" data-line="422"></span></a> </span><span id="L-423"><a href="#L-423"><span class="linenos" data-line="423"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeCurrentVersionParameter</span><span class="p">()</span> </span><span id="L-424"><a href="#L-424"><span class="linenos" data-line="424"></span></a> <span class="c1">-- A link to the page history or the move log, depending on the kind of</span> </span><span id="L-425"><a href="#L-425"><span class="linenos" data-line="425"></span></a> <span class="c1">-- protection.</span> </span><span id="L-426"><a href="#L-426"><span class="linenos" data-line="426"></span></a> <span class="kd">local</span> <span class="n">pagename</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">prefixedText</span> </span><span id="L-427"><a href="#L-427"><span class="linenos" data-line="427"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> <span class="o">==</span> <span class="s1">'move'</span> <span class="kr">then</span> </span><span id="L-428"><a href="#L-428"><span class="linenos" data-line="428"></span></a> <span class="c1">-- We need the move log link.</span> </span><span id="L-429"><a href="#L-429"><span class="linenos" data-line="429"></span></a> <span class="kr">return</span> <span class="n">makeFullUrl</span><span class="p">(</span> </span><span id="L-430"><a href="#L-430"><span class="linenos" data-line="430"></span></a> <span class="s1">'Special:Log'</span><span class="p">,</span> </span><span id="L-431"><a href="#L-431"><span class="linenos" data-line="431"></span></a> <span class="p">{</span><span class="nb">type</span> <span class="o">=</span> <span class="s1">'move'</span><span class="p">,</span> <span class="n">page</span> <span class="o">=</span> <span class="n">pagename</span><span class="p">},</span> </span><span id="L-432"><a href="#L-432"><span class="linenos" data-line="432"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'current-version-move-display'</span><span class="p">)</span> </span><span id="L-433"><a href="#L-433"><span class="linenos" data-line="433"></span></a> <span class="p">)</span> </span><span id="L-434"><a href="#L-434"><span class="linenos" data-line="434"></span></a> <span class="kr">else</span> </span><span id="L-435"><a href="#L-435"><span class="linenos" data-line="435"></span></a> <span class="c1">-- We need the history link.</span> </span><span id="L-436"><a href="#L-436"><span class="linenos" data-line="436"></span></a> <span class="kr">return</span> <span class="n">makeFullUrl</span><span class="p">(</span> </span><span id="L-437"><a href="#L-437"><span class="linenos" data-line="437"></span></a> <span class="n">pagename</span><span class="p">,</span> </span><span id="L-438"><a href="#L-438"><span class="linenos" data-line="438"></span></a> <span class="p">{</span><span class="n">action</span> <span class="o">=</span> <span class="s1">'history'</span><span class="p">},</span> </span><span id="L-439"><a href="#L-439"><span class="linenos" data-line="439"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'current-version-edit-display'</span><span class="p">)</span> </span><span id="L-440"><a href="#L-440"><span class="linenos" data-line="440"></span></a> <span class="p">)</span> </span><span id="L-441"><a href="#L-441"><span class="linenos" data-line="441"></span></a> <span class="kr">end</span> </span><span id="L-442"><a href="#L-442"><span class="linenos" data-line="442"></span></a><span class="kr">end</span> </span><span id="L-443"><a href="#L-443"><span class="linenos" data-line="443"></span></a> </span><span id="L-444"><a href="#L-444"><span class="linenos" data-line="444"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeEditRequestParameter</span><span class="p">()</span> </span><span id="L-445"><a href="#L-445"><span class="linenos" data-line="445"></span></a> <span class="kd">local</span> <span class="n">mEditRequest</span> <span class="o">=</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Submit an edit request'</span><span class="p">)</span> </span><span id="L-446"><a href="#L-446"><span class="linenos" data-line="446"></span></a> <span class="kd">local</span> <span class="n">action</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> </span><span id="L-447"><a href="#L-447"><span class="linenos" data-line="447"></span></a> <span class="kd">local</span> <span class="n">level</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-448"><a href="#L-448"><span class="linenos" data-line="448"></span></a> </span><span id="L-449"><a href="#L-449"><span class="linenos" data-line="449"></span></a> <span class="c1">-- Get the edit request type.</span> </span><span id="L-450"><a href="#L-450"><span class="linenos" data-line="450"></span></a> <span class="kd">local</span> <span class="n">requestType</span> </span><span id="L-451"><a href="#L-451"><span class="linenos" data-line="451"></span></a> <span class="kr">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'edit'</span> <span class="kr">then</span> </span><span id="L-452"><a href="#L-452"><span class="linenos" data-line="452"></span></a> <span class="kr">if</span> <span class="n">level</span> <span class="o">==</span> <span class="s1">'autoconfirmed'</span> <span class="kr">then</span> </span><span id="L-453"><a href="#L-453"><span class="linenos" data-line="453"></span></a> <span class="n">requestType</span> <span class="o">=</span> <span class="s1">'semi'</span> </span><span id="L-454"><a href="#L-454"><span class="linenos" data-line="454"></span></a> <span class="kr">elseif</span> <span class="n">level</span> <span class="o">==</span> <span class="s1">'extendedconfirmed'</span> <span class="kr">then</span> </span><span id="L-455"><a href="#L-455"><span class="linenos" data-line="455"></span></a> <span class="n">requestType</span> <span class="o">=</span> <span class="s1">'extended'</span> </span><span id="L-456"><a href="#L-456"><span class="linenos" data-line="456"></span></a> <span class="kr">elseif</span> <span class="n">level</span> <span class="o">==</span> <span class="s1">'templateeditor'</span> <span class="kr">then</span> </span><span id="L-457"><a href="#L-457"><span class="linenos" data-line="457"></span></a> <span class="n">requestType</span> <span class="o">=</span> <span class="s1">'template'</span> </span><span id="L-458"><a href="#L-458"><span class="linenos" data-line="458"></span></a> <span class="kr">end</span> </span><span id="L-459"><a href="#L-459"><span class="linenos" data-line="459"></span></a> <span class="kr">end</span> </span><span id="L-460"><a href="#L-460"><span class="linenos" data-line="460"></span></a> <span class="n">requestType</span> <span class="o">=</span> <span class="n">requestType</span> <span class="ow">or</span> <span class="s1">'full'</span> </span><span id="L-461"><a href="#L-461"><span class="linenos" data-line="461"></span></a> </span><span id="L-462"><a href="#L-462"><span class="linenos" data-line="462"></span></a> <span class="c1">-- Get the display value.</span> </span><span id="L-463"><a href="#L-463"><span class="linenos" data-line="463"></span></a> <span class="kd">local</span> <span class="n">display</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'edit-request-display'</span><span class="p">)</span> </span><span id="L-464"><a href="#L-464"><span class="linenos" data-line="464"></span></a> </span><span id="L-465"><a href="#L-465"><span class="linenos" data-line="465"></span></a> <span class="kr">return</span> <span class="n">mEditRequest</span><span class="p">.</span><span class="n">_link</span><span class="p">{</span><span class="nb">type</span> <span class="o">=</span> <span class="n">requestType</span><span class="p">,</span> <span class="n">display</span> <span class="o">=</span> <span class="n">display</span><span class="p">}</span> </span><span id="L-466"><a href="#L-466"><span class="linenos" data-line="466"></span></a><span class="kr">end</span> </span><span id="L-467"><a href="#L-467"><span class="linenos" data-line="467"></span></a> </span><span id="L-468"><a href="#L-468"><span class="linenos" data-line="468"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeExpiryParameter</span><span class="p">()</span> </span><span id="L-469"><a href="#L-469"><span class="linenos" data-line="469"></span></a> <span class="kd">local</span> <span class="n">expiry</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">expiry</span> </span><span id="L-470"><a href="#L-470"><span class="linenos" data-line="470"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">expiry</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> <span class="kr">then</span> </span><span id="L-471"><a href="#L-471"><span class="linenos" data-line="471"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_formatDate</span><span class="p">(</span><span class="n">expiry</span><span class="p">)</span> </span><span id="L-472"><a href="#L-472"><span class="linenos" data-line="472"></span></a> <span class="kr">else</span> </span><span id="L-473"><a href="#L-473"><span class="linenos" data-line="473"></span></a> <span class="kr">return</span> <span class="n">expiry</span> </span><span id="L-474"><a href="#L-474"><span class="linenos" data-line="474"></span></a> <span class="kr">end</span> </span><span id="L-475"><a href="#L-475"><span class="linenos" data-line="475"></span></a><span class="kr">end</span> </span><span id="L-476"><a href="#L-476"><span class="linenos" data-line="476"></span></a> </span><span id="L-477"><a href="#L-477"><span class="linenos" data-line="477"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeExplanationBlurbParameter</span><span class="p">()</span> </span><span id="L-478"><a href="#L-478"><span class="linenos" data-line="478"></span></a> <span class="c1">-- Cover special cases first.</span> </span><span id="L-479"><a href="#L-479"><span class="linenos" data-line="479"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">namespace</span> <span class="o">==</span> <span class="mi">8</span> <span class="kr">then</span> </span><span id="L-480"><a href="#L-480"><span class="linenos" data-line="480"></span></a> <span class="c1">-- MediaWiki namespace</span> </span><span id="L-481"><a href="#L-481"><span class="linenos" data-line="481"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'explanation-blurb-nounprotect'</span><span class="p">)</span> </span><span id="L-482"><a href="#L-482"><span class="linenos" data-line="482"></span></a> <span class="kr">end</span> </span><span id="L-483"><a href="#L-483"><span class="linenos" data-line="483"></span></a> </span><span id="L-484"><a href="#L-484"><span class="linenos" data-line="484"></span></a> <span class="c1">-- Get explanation blurb table keys</span> </span><span id="L-485"><a href="#L-485"><span class="linenos" data-line="485"></span></a> <span class="kd">local</span> <span class="n">action</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> </span><span id="L-486"><a href="#L-486"><span class="linenos" data-line="486"></span></a> <span class="kd">local</span> <span class="n">level</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-487"><a href="#L-487"><span class="linenos" data-line="487"></span></a> <span class="kd">local</span> <span class="n">talkKey</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">isTalkPage</span> <span class="ow">and</span> <span class="s1">'talk'</span> <span class="ow">or</span> <span class="s1">'subject'</span> </span><span id="L-488"><a href="#L-488"><span class="linenos" data-line="488"></span></a> </span><span id="L-489"><a href="#L-489"><span class="linenos" data-line="489"></span></a> <span class="c1">-- Find the message in the explanation blurb table and substitute any</span> </span><span id="L-490"><a href="#L-490"><span class="linenos" data-line="490"></span></a> <span class="c1">-- parameters.</span> </span><span id="L-491"><a href="#L-491"><span class="linenos" data-line="491"></span></a> <span class="kd">local</span> <span class="n">explanations</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">explanationBlurbs</span> </span><span id="L-492"><a href="#L-492"><span class="linenos" data-line="492"></span></a> <span class="kd">local</span> <span class="n">msg</span> </span><span id="L-493"><a href="#L-493"><span class="linenos" data-line="493"></span></a> <span class="kr">if</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> <span class="ow">and</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">][</span><span class="n">talkKey</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-494"><a href="#L-494"><span class="linenos" data-line="494"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">][</span><span class="n">talkKey</span><span class="p">]</span> </span><span id="L-495"><a href="#L-495"><span class="linenos" data-line="495"></span></a> <span class="kr">elseif</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> <span class="ow">and</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">].</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-496"><a href="#L-496"><span class="linenos" data-line="496"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">].</span><span class="n">default</span> </span><span id="L-497"><a href="#L-497"><span class="linenos" data-line="497"></span></a> <span class="kr">elseif</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> <span class="ow">and</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span><span class="p">[</span><span class="n">talkKey</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-498"><a href="#L-498"><span class="linenos" data-line="498"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span><span class="p">[</span><span class="n">talkKey</span><span class="p">]</span> </span><span id="L-499"><a href="#L-499"><span class="linenos" data-line="499"></span></a> <span class="kr">elseif</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> <span class="ow">and</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span><span class="p">.</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-500"><a href="#L-500"><span class="linenos" data-line="500"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">explanations</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span><span class="p">.</span><span class="n">default</span> </span><span id="L-501"><a href="#L-501"><span class="linenos" data-line="501"></span></a> <span class="kr">else</span> </span><span id="L-502"><a href="#L-502"><span class="linenos" data-line="502"></span></a> <span class="nb">error</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span> </span><span id="L-503"><a href="#L-503"><span class="linenos" data-line="503"></span></a> <span class="s1">'không thể tìm thấy lời giải thích cho hành động "%s", cấp độ "%s" và key thảo luận "%s"'</span><span class="p">,</span> </span><span id="L-504"><a href="#L-504"><span class="linenos" data-line="504"></span></a> <span class="n">action</span><span class="p">,</span> </span><span id="L-505"><a href="#L-505"><span class="linenos" data-line="505"></span></a> <span class="n">level</span><span class="p">,</span> </span><span id="L-506"><a href="#L-506"><span class="linenos" data-line="506"></span></a> <span class="n">talkKey</span> </span><span id="L-507"><a href="#L-507"><span class="linenos" data-line="507"></span></a> <span class="p">),</span> <span class="mi">8</span><span class="p">)</span> </span><span id="L-508"><a href="#L-508"><span class="linenos" data-line="508"></span></a> <span class="kr">end</span> </span><span id="L-509"><a href="#L-509"><span class="linenos" data-line="509"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-510"><a href="#L-510"><span class="linenos" data-line="510"></span></a><span class="kr">end</span> </span><span id="L-511"><a href="#L-511"><span class="linenos" data-line="511"></span></a> </span><span id="L-512"><a href="#L-512"><span class="linenos" data-line="512"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeImageLinkParameter</span><span class="p">()</span> </span><span id="L-513"><a href="#L-513"><span class="linenos" data-line="513"></span></a> <span class="kd">local</span> <span class="n">imageLinks</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">imageLinks</span> </span><span id="L-514"><a href="#L-514"><span class="linenos" data-line="514"></span></a> <span class="kd">local</span> <span class="n">action</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> </span><span id="L-515"><a href="#L-515"><span class="linenos" data-line="515"></span></a> <span class="kd">local</span> <span class="n">level</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-516"><a href="#L-516"><span class="linenos" data-line="516"></span></a> <span class="kd">local</span> <span class="n">msg</span> </span><span id="L-517"><a href="#L-517"><span class="linenos" data-line="517"></span></a> <span class="kr">if</span> <span class="n">imageLinks</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-518"><a href="#L-518"><span class="linenos" data-line="518"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">imageLinks</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> </span><span id="L-519"><a href="#L-519"><span class="linenos" data-line="519"></span></a> <span class="kr">elseif</span> <span class="n">imageLinks</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-520"><a href="#L-520"><span class="linenos" data-line="520"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">imageLinks</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> </span><span id="L-521"><a href="#L-521"><span class="linenos" data-line="521"></span></a> <span class="kr">else</span> </span><span id="L-522"><a href="#L-522"><span class="linenos" data-line="522"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">imageLinks</span><span class="p">.</span><span class="n">edit</span><span class="p">.</span><span class="n">default</span> </span><span id="L-523"><a href="#L-523"><span class="linenos" data-line="523"></span></a> <span class="kr">end</span> </span><span id="L-524"><a href="#L-524"><span class="linenos" data-line="524"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-525"><a href="#L-525"><span class="linenos" data-line="525"></span></a><span class="kr">end</span> </span><span id="L-526"><a href="#L-526"><span class="linenos" data-line="526"></span></a> </span><span id="L-527"><a href="#L-527"><span class="linenos" data-line="527"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeIntroBlurbParameter</span><span class="p">()</span> </span><span id="L-528"><a href="#L-528"><span class="linenos" data-line="528"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">:</span><span class="n">isTemporary</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-529"><a href="#L-529"><span class="linenos" data-line="529"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'intro-blurb-expiry'</span><span class="p">)</span> </span><span id="L-530"><a href="#L-530"><span class="linenos" data-line="530"></span></a> <span class="kr">else</span> </span><span id="L-531"><a href="#L-531"><span class="linenos" data-line="531"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'intro-blurb-noexpiry'</span><span class="p">)</span> </span><span id="L-532"><a href="#L-532"><span class="linenos" data-line="532"></span></a> <span class="kr">end</span> </span><span id="L-533"><a href="#L-533"><span class="linenos" data-line="533"></span></a><span class="kr">end</span> </span><span id="L-534"><a href="#L-534"><span class="linenos" data-line="534"></span></a> </span><span id="L-535"><a href="#L-535"><span class="linenos" data-line="535"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeIntroFragmentParameter</span><span class="p">()</span> </span><span id="L-536"><a href="#L-536"><span class="linenos" data-line="536"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">:</span><span class="n">isTemporary</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-537"><a href="#L-537"><span class="linenos" data-line="537"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'intro-fragment-expiry'</span><span class="p">)</span> </span><span id="L-538"><a href="#L-538"><span class="linenos" data-line="538"></span></a> <span class="kr">else</span> </span><span id="L-539"><a href="#L-539"><span class="linenos" data-line="539"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'intro-fragment-noexpiry'</span><span class="p">)</span> </span><span id="L-540"><a href="#L-540"><span class="linenos" data-line="540"></span></a> <span class="kr">end</span> </span><span id="L-541"><a href="#L-541"><span class="linenos" data-line="541"></span></a><span class="kr">end</span> </span><span id="L-542"><a href="#L-542"><span class="linenos" data-line="542"></span></a> </span><span id="L-543"><a href="#L-543"><span class="linenos" data-line="543"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makePagetypeParameter</span><span class="p">()</span> </span><span id="L-544"><a href="#L-544"><span class="linenos" data-line="544"></span></a> <span class="kd">local</span> <span class="n">pagetypes</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">pagetypes</span> </span><span id="L-545"><a href="#L-545"><span class="linenos" data-line="545"></span></a> <span class="kr">return</span> <span class="n">pagetypes</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">namespace</span><span class="p">]</span> </span><span id="L-546"><a href="#L-546"><span class="linenos" data-line="546"></span></a> <span class="ow">or</span> <span class="n">pagetypes</span><span class="p">.</span><span class="n">default</span> </span><span id="L-547"><a href="#L-547"><span class="linenos" data-line="547"></span></a> <span class="ow">or</span> <span class="nb">error</span><span class="p">(</span><span class="s1">'không có kiểu trang mặc định được định nghĩa'</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> </span><span id="L-548"><a href="#L-548"><span class="linenos" data-line="548"></span></a><span class="kr">end</span> </span><span id="L-549"><a href="#L-549"><span class="linenos" data-line="549"></span></a> </span><span id="L-550"><a href="#L-550"><span class="linenos" data-line="550"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeProtectionBlurbParameter</span><span class="p">()</span> </span><span id="L-551"><a href="#L-551"><span class="linenos" data-line="551"></span></a> <span class="kd">local</span> <span class="n">protectionBlurbs</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">protectionBlurbs</span> </span><span id="L-552"><a href="#L-552"><span class="linenos" data-line="552"></span></a> <span class="kd">local</span> <span class="n">action</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> </span><span id="L-553"><a href="#L-553"><span class="linenos" data-line="553"></span></a> <span class="kd">local</span> <span class="n">level</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-554"><a href="#L-554"><span class="linenos" data-line="554"></span></a> <span class="kd">local</span> <span class="n">msg</span> </span><span id="L-555"><a href="#L-555"><span class="linenos" data-line="555"></span></a> <span class="kr">if</span> <span class="n">protectionBlurbs</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-556"><a href="#L-556"><span class="linenos" data-line="556"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">protectionBlurbs</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> </span><span id="L-557"><a href="#L-557"><span class="linenos" data-line="557"></span></a> <span class="kr">elseif</span> <span class="n">protectionBlurbs</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-558"><a href="#L-558"><span class="linenos" data-line="558"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">protectionBlurbs</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> </span><span id="L-559"><a href="#L-559"><span class="linenos" data-line="559"></span></a> <span class="kr">elseif</span> <span class="n">protectionBlurbs</span><span class="p">.</span><span class="n">edit</span><span class="p">.</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-560"><a href="#L-560"><span class="linenos" data-line="560"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">protectionBlurbs</span><span class="p">.</span><span class="n">edit</span><span class="p">.</span><span class="n">default</span> </span><span id="L-561"><a href="#L-561"><span class="linenos" data-line="561"></span></a> <span class="kr">else</span> </span><span id="L-562"><a href="#L-562"><span class="linenos" data-line="562"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s1">'không có blurb khóa được định nghĩa cho protectionBlurbs.edit.default'</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> </span><span id="L-563"><a href="#L-563"><span class="linenos" data-line="563"></span></a> <span class="kr">end</span> </span><span id="L-564"><a href="#L-564"><span class="linenos" data-line="564"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-565"><a href="#L-565"><span class="linenos" data-line="565"></span></a><span class="kr">end</span> </span><span id="L-566"><a href="#L-566"><span class="linenos" data-line="566"></span></a> </span><span id="L-567"><a href="#L-567"><span class="linenos" data-line="567"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeProtectionDateParameter</span><span class="p">()</span> </span><span id="L-568"><a href="#L-568"><span class="linenos" data-line="568"></span></a> <span class="kd">local</span> <span class="n">protectionDate</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">protectionDate</span> </span><span id="L-569"><a href="#L-569"><span class="linenos" data-line="569"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">protectionDate</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'number'</span> <span class="kr">then</span> </span><span id="L-570"><a href="#L-570"><span class="linenos" data-line="570"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_formatDate</span><span class="p">(</span><span class="n">protectionDate</span><span class="p">)</span> </span><span id="L-571"><a href="#L-571"><span class="linenos" data-line="571"></span></a> <span class="kr">else</span> </span><span id="L-572"><a href="#L-572"><span class="linenos" data-line="572"></span></a> <span class="kr">return</span> <span class="n">protectionDate</span> </span><span id="L-573"><a href="#L-573"><span class="linenos" data-line="573"></span></a> <span class="kr">end</span> </span><span id="L-574"><a href="#L-574"><span class="linenos" data-line="574"></span></a><span class="kr">end</span> </span><span id="L-575"><a href="#L-575"><span class="linenos" data-line="575"></span></a> </span><span id="L-576"><a href="#L-576"><span class="linenos" data-line="576"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeProtectionLevelParameter</span><span class="p">()</span> </span><span id="L-577"><a href="#L-577"><span class="linenos" data-line="577"></span></a> <span class="kd">local</span> <span class="n">protectionLevels</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">protectionLevels</span> </span><span id="L-578"><a href="#L-578"><span class="linenos" data-line="578"></span></a> <span class="kd">local</span> <span class="n">action</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> </span><span id="L-579"><a href="#L-579"><span class="linenos" data-line="579"></span></a> <span class="kd">local</span> <span class="n">level</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-580"><a href="#L-580"><span class="linenos" data-line="580"></span></a> <span class="kd">local</span> <span class="n">msg</span> </span><span id="L-581"><a href="#L-581"><span class="linenos" data-line="581"></span></a> <span class="kr">if</span> <span class="n">protectionLevels</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-582"><a href="#L-582"><span class="linenos" data-line="582"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">protectionLevels</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> </span><span id="L-583"><a href="#L-583"><span class="linenos" data-line="583"></span></a> <span class="kr">elseif</span> <span class="n">protectionLevels</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-584"><a href="#L-584"><span class="linenos" data-line="584"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">protectionLevels</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> </span><span id="L-585"><a href="#L-585"><span class="linenos" data-line="585"></span></a> <span class="kr">elseif</span> <span class="n">protectionLevels</span><span class="p">.</span><span class="n">edit</span><span class="p">.</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-586"><a href="#L-586"><span class="linenos" data-line="586"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">protectionLevels</span><span class="p">.</span><span class="n">edit</span><span class="p">.</span><span class="n">default</span> </span><span id="L-587"><a href="#L-587"><span class="linenos" data-line="587"></span></a> <span class="kr">else</span> </span><span id="L-588"><a href="#L-588"><span class="linenos" data-line="588"></span></a> <span class="nb">error</span><span class="p">(</span><span class="s1">'không có cấp độ khóa được định nghĩa cho protectionLevels.edit.default'</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span> </span><span id="L-589"><a href="#L-589"><span class="linenos" data-line="589"></span></a> <span class="kr">end</span> </span><span id="L-590"><a href="#L-590"><span class="linenos" data-line="590"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-591"><a href="#L-591"><span class="linenos" data-line="591"></span></a><span class="kr">end</span> </span><span id="L-592"><a href="#L-592"><span class="linenos" data-line="592"></span></a> </span><span id="L-593"><a href="#L-593"><span class="linenos" data-line="593"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeProtectionLogParameter</span><span class="p">()</span> </span><span id="L-594"><a href="#L-594"><span class="linenos" data-line="594"></span></a> <span class="kd">local</span> <span class="n">pagename</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">prefixedText</span> </span><span id="L-595"><a href="#L-595"><span class="linenos" data-line="595"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">action</span> <span class="o">==</span> <span class="s1">'autoreview'</span> <span class="kr">then</span> </span><span id="L-596"><a href="#L-596"><span class="linenos" data-line="596"></span></a> <span class="c1">-- We need the pending changes log.</span> </span><span id="L-597"><a href="#L-597"><span class="linenos" data-line="597"></span></a> <span class="kr">return</span> <span class="n">makeFullUrl</span><span class="p">(</span> </span><span id="L-598"><a href="#L-598"><span class="linenos" data-line="598"></span></a> <span class="s1">'Đặc biệt:Nhật trình'</span><span class="p">,</span> </span><span id="L-599"><a href="#L-599"><span class="linenos" data-line="599"></span></a> <span class="p">{</span><span class="nb">type</span> <span class="o">=</span> <span class="s1">'stable'</span><span class="p">,</span> <span class="n">page</span> <span class="o">=</span> <span class="n">pagename</span><span class="p">},</span> </span><span id="L-600"><a href="#L-600"><span class="linenos" data-line="600"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'pc-log-display'</span><span class="p">)</span> </span><span id="L-601"><a href="#L-601"><span class="linenos" data-line="601"></span></a> <span class="p">)</span> </span><span id="L-602"><a href="#L-602"><span class="linenos" data-line="602"></span></a> <span class="kr">else</span> </span><span id="L-603"><a href="#L-603"><span class="linenos" data-line="603"></span></a> <span class="c1">-- We need the protection log.</span> </span><span id="L-604"><a href="#L-604"><span class="linenos" data-line="604"></span></a> <span class="kr">return</span> <span class="n">makeFullUrl</span><span class="p">(</span> </span><span id="L-605"><a href="#L-605"><span class="linenos" data-line="605"></span></a> <span class="s1">'Đặc biệt:Nhật trình'</span><span class="p">,</span> </span><span id="L-606"><a href="#L-606"><span class="linenos" data-line="606"></span></a> <span class="p">{</span><span class="nb">type</span> <span class="o">=</span> <span class="s1">'protect'</span><span class="p">,</span> <span class="n">page</span> <span class="o">=</span> <span class="n">pagename</span><span class="p">},</span> </span><span id="L-607"><a href="#L-607"><span class="linenos" data-line="607"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'protection-log-display'</span><span class="p">)</span> </span><span id="L-608"><a href="#L-608"><span class="linenos" data-line="608"></span></a> <span class="p">)</span> </span><span id="L-609"><a href="#L-609"><span class="linenos" data-line="609"></span></a> <span class="kr">end</span> </span><span id="L-610"><a href="#L-610"><span class="linenos" data-line="610"></span></a><span class="kr">end</span> </span><span id="L-611"><a href="#L-611"><span class="linenos" data-line="611"></span></a> </span><span id="L-612"><a href="#L-612"><span class="linenos" data-line="612"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeTalkPageParameter</span><span class="p">()</span> </span><span id="L-613"><a href="#L-613"><span class="linenos" data-line="613"></span></a> <span class="kr">return</span> <span class="nb">string.format</span><span class="p">(</span> </span><span id="L-614"><a href="#L-614"><span class="linenos" data-line="614"></span></a> <span class="s1">'[[%s:%s#%s|%s]]'</span><span class="p">,</span> </span><span id="L-615"><a href="#L-615"><span class="linenos" data-line="615"></span></a> <span class="n">mw</span><span class="p">.</span><span class="n">site</span><span class="p">.</span><span class="n">namespaces</span><span class="p">[</span><span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">namespace</span><span class="p">].</span><span class="n">talk</span><span class="p">.</span><span class="n">name</span><span class="p">,</span> </span><span id="L-616"><a href="#L-616"><span class="linenos" data-line="616"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">text</span><span class="p">,</span> </span><span id="L-617"><a href="#L-617"><span class="linenos" data-line="617"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">_args</span><span class="p">.</span><span class="n">section</span> <span class="ow">or</span> <span class="s1">'top'</span><span class="p">,</span> </span><span id="L-618"><a href="#L-618"><span class="linenos" data-line="618"></span></a> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'talk-page-link-display'</span><span class="p">)</span> </span><span id="L-619"><a href="#L-619"><span class="linenos" data-line="619"></span></a> <span class="p">)</span> </span><span id="L-620"><a href="#L-620"><span class="linenos" data-line="620"></span></a><span class="kr">end</span> </span><span id="L-621"><a href="#L-621"><span class="linenos" data-line="621"></span></a> </span><span id="L-622"><a href="#L-622"><span class="linenos" data-line="622"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeTooltipBlurbParameter</span><span class="p">()</span> </span><span id="L-623"><a href="#L-623"><span class="linenos" data-line="623"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">:</span><span class="n">isTemporary</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-624"><a href="#L-624"><span class="linenos" data-line="624"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'tooltip-blurb-expiry'</span><span class="p">)</span> </span><span id="L-625"><a href="#L-625"><span class="linenos" data-line="625"></span></a> <span class="kr">else</span> </span><span id="L-626"><a href="#L-626"><span class="linenos" data-line="626"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'tooltip-blurb-noexpiry'</span><span class="p">)</span> </span><span id="L-627"><a href="#L-627"><span class="linenos" data-line="627"></span></a> <span class="kr">end</span> </span><span id="L-628"><a href="#L-628"><span class="linenos" data-line="628"></span></a><span class="kr">end</span> </span><span id="L-629"><a href="#L-629"><span class="linenos" data-line="629"></span></a> </span><span id="L-630"><a href="#L-630"><span class="linenos" data-line="630"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeTooltipFragmentParameter</span><span class="p">()</span> </span><span id="L-631"><a href="#L-631"><span class="linenos" data-line="631"></span></a> <span class="kr">if</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">:</span><span class="n">isTemporary</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-632"><a href="#L-632"><span class="linenos" data-line="632"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'tooltip-fragment-expiry'</span><span class="p">)</span> </span><span id="L-633"><a href="#L-633"><span class="linenos" data-line="633"></span></a> <span class="kr">else</span> </span><span id="L-634"><a href="#L-634"><span class="linenos" data-line="634"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_getExpandedMessage</span><span class="p">(</span><span class="s1">'tooltip-fragment-noexpiry'</span><span class="p">)</span> </span><span id="L-635"><a href="#L-635"><span class="linenos" data-line="635"></span></a> <span class="kr">end</span> </span><span id="L-636"><a href="#L-636"><span class="linenos" data-line="636"></span></a><span class="kr">end</span> </span><span id="L-637"><a href="#L-637"><span class="linenos" data-line="637"></span></a> </span><span id="L-638"><a href="#L-638"><span class="linenos" data-line="638"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">_makeVandalTemplateParameter</span><span class="p">()</span> </span><span id="L-639"><a href="#L-639"><span class="linenos" data-line="639"></span></a> <span class="kr">return</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Mô đun:Vandal-m'</span><span class="p">).</span><span class="n">_main</span><span class="p">{</span> </span><span id="L-640"><a href="#L-640"><span class="linenos" data-line="640"></span></a> <span class="n">self</span><span class="p">.</span><span class="n">_args</span><span class="p">.</span><span class="n">user</span> <span class="ow">or</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">baseText</span> </span><span id="L-641"><a href="#L-641"><span class="linenos" data-line="641"></span></a> <span class="p">}</span> </span><span id="L-642"><a href="#L-642"><span class="linenos" data-line="642"></span></a><span class="kr">end</span> </span><span id="L-643"><a href="#L-643"><span class="linenos" data-line="643"></span></a> </span><span id="L-644"><a href="#L-644"><span class="linenos" data-line="644"></span></a><span class="c1">-- Public methods --</span> </span><span id="L-645"><a href="#L-645"><span class="linenos" data-line="645"></span></a> </span><span id="L-646"><a href="#L-646"><span class="linenos" data-line="646"></span></a><span class="kr">function</span> <span class="nc">Blurb</span><span class="p">:</span><span class="nf">makeBannerText</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> </span><span id="L-647"><a href="#L-647"><span class="linenos" data-line="647"></span></a> <span class="c1">-- Validate input.</span> </span><span id="L-648"><a href="#L-648"><span class="linenos" data-line="648"></span></a> <span class="kr">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">Blurb</span><span class="p">.</span><span class="n">bannerTextFields</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-649"><a href="#L-649"><span class="linenos" data-line="649"></span></a> <span class="nb">error</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span> </span><span id="L-650"><a href="#L-650"><span class="linenos" data-line="650"></span></a> <span class="s1">'"%s" không phải là trường cấu hình biểu ngữ hợp lệ'</span><span class="p">,</span> </span><span id="L-651"><a href="#L-651"><span class="linenos" data-line="651"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> </span><span id="L-652"><a href="#L-652"><span class="linenos" data-line="652"></span></a> <span class="p">),</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-653"><a href="#L-653"><span class="linenos" data-line="653"></span></a> <span class="kr">end</span> </span><span id="L-654"><a href="#L-654"><span class="linenos" data-line="654"></span></a> </span><span id="L-655"><a href="#L-655"><span class="linenos" data-line="655"></span></a> <span class="c1">-- Generate the text.</span> </span><span id="L-656"><a href="#L-656"><span class="linenos" data-line="656"></span></a> <span class="kd">local</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">.</span><span class="n">bannerConfig</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> </span><span id="L-657"><a href="#L-657"><span class="linenos" data-line="657"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-658"><a href="#L-658"><span class="linenos" data-line="658"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-659"><a href="#L-659"><span class="linenos" data-line="659"></span></a> <span class="kr">elseif</span> <span class="nb">type</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="o">==</span> <span class="s1">'function'</span> <span class="kr">then</span> </span><span id="L-660"><a href="#L-660"><span class="linenos" data-line="660"></span></a> <span class="n">msg</span> <span class="o">=</span> <span class="n">msg</span><span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">_protectionObj</span><span class="p">,</span> <span class="n">self</span><span class="p">.</span><span class="n">_args</span><span class="p">)</span> </span><span id="L-661"><a href="#L-661"><span class="linenos" data-line="661"></span></a> <span class="kr">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="o">~=</span> <span class="s1">'string'</span> <span class="kr">then</span> </span><span id="L-662"><a href="#L-662"><span class="linenos" data-line="662"></span></a> <span class="nb">error</span><span class="p">(</span><span class="nb">string.format</span><span class="p">(</span> </span><span id="L-663"><a href="#L-663"><span class="linenos" data-line="663"></span></a> <span class="s1">'đầu ra xấu từ chức năng cấu hình banner với key "%s"'</span> </span><span id="L-664"><a href="#L-664"><span class="linenos" data-line="664"></span></a> <span class="o">..</span> <span class="s1">' (chuỗi thiếu, có %s)'</span><span class="p">,</span> </span><span id="L-665"><a href="#L-665"><span class="linenos" data-line="665"></span></a> <span class="nb">tostring</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> </span><span id="L-666"><a href="#L-666"><span class="linenos" data-line="666"></span></a> <span class="nb">type</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-667"><a href="#L-667"><span class="linenos" data-line="667"></span></a> <span class="p">),</span> <span class="mi">4</span><span class="p">)</span> </span><span id="L-668"><a href="#L-668"><span class="linenos" data-line="668"></span></a> <span class="kr">end</span> </span><span id="L-669"><a href="#L-669"><span class="linenos" data-line="669"></span></a> <span class="kr">return</span> <span class="n">self</span><span class="p">:</span><span class="n">_substituteParameters</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> </span><span id="L-670"><a href="#L-670"><span class="linenos" data-line="670"></span></a> <span class="kr">end</span> </span><span id="L-671"><a href="#L-671"><span class="linenos" data-line="671"></span></a><span class="kr">end</span> </span><span id="L-672"><a href="#L-672"><span class="linenos" data-line="672"></span></a> </span><span id="L-673"><a href="#L-673"><span class="linenos" data-line="673"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-674"><a href="#L-674"><span class="linenos" data-line="674"></span></a><span class="c1">-- BannerTemplate class</span> </span><span id="L-675"><a href="#L-675"><span class="linenos" data-line="675"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-676"><a href="#L-676"><span class="linenos" data-line="676"></span></a> </span><span id="L-677"><a href="#L-677"><span class="linenos" data-line="677"></span></a><span class="kd">local</span> <span class="n">BannerTemplate</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-678"><a href="#L-678"><span class="linenos" data-line="678"></span></a><span class="n">BannerTemplate</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">BannerTemplate</span> </span><span id="L-679"><a href="#L-679"><span class="linenos" data-line="679"></span></a> </span><span id="L-680"><a href="#L-680"><span class="linenos" data-line="680"></span></a><span class="kr">function</span> <span class="nc">BannerTemplate</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-681"><a href="#L-681"><span class="linenos" data-line="681"></span></a> <span class="kd">local</span> <span class="n">obj</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-682"><a href="#L-682"><span class="linenos" data-line="682"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_cfg</span> <span class="o">=</span> <span class="n">cfg</span> </span><span id="L-683"><a href="#L-683"><span class="linenos" data-line="683"></span></a> </span><span id="L-684"><a href="#L-684"><span class="linenos" data-line="684"></span></a> <span class="c1">-- Set the image filename.</span> </span><span id="L-685"><a href="#L-685"><span class="linenos" data-line="685"></span></a> <span class="kd">local</span> <span class="n">imageFilename</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">bannerConfig</span><span class="p">.</span><span class="n">image</span> </span><span id="L-686"><a href="#L-686"><span class="linenos" data-line="686"></span></a> <span class="kr">if</span> <span class="n">imageFilename</span> <span class="kr">then</span> </span><span id="L-687"><a href="#L-687"><span class="linenos" data-line="687"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_imageFilename</span> <span class="o">=</span> <span class="n">imageFilename</span> </span><span id="L-688"><a href="#L-688"><span class="linenos" data-line="688"></span></a> <span class="kr">else</span> </span><span id="L-689"><a href="#L-689"><span class="linenos" data-line="689"></span></a> <span class="c1">-- If an image filename isn't specified explicitly in the banner config,</span> </span><span id="L-690"><a href="#L-690"><span class="linenos" data-line="690"></span></a> <span class="c1">-- generate it from the protection status and the namespace.</span> </span><span id="L-691"><a href="#L-691"><span class="linenos" data-line="691"></span></a> <span class="kd">local</span> <span class="n">action</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">action</span> </span><span id="L-692"><a href="#L-692"><span class="linenos" data-line="692"></span></a> <span class="kd">local</span> <span class="n">level</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-693"><a href="#L-693"><span class="linenos" data-line="693"></span></a> <span class="kd">local</span> <span class="n">namespace</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">namespace</span> </span><span id="L-694"><a href="#L-694"><span class="linenos" data-line="694"></span></a> <span class="kd">local</span> <span class="n">reason</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">reason</span> </span><span id="L-695"><a href="#L-695"><span class="linenos" data-line="695"></span></a> </span><span id="L-696"><a href="#L-696"><span class="linenos" data-line="696"></span></a> <span class="c1">-- Deal with special cases first.</span> </span><span id="L-697"><a href="#L-697"><span class="linenos" data-line="697"></span></a> <span class="kr">if</span> <span class="p">(</span> </span><span id="L-698"><a href="#L-698"><span class="linenos" data-line="698"></span></a> <span class="n">namespace</span> <span class="o">==</span> <span class="mi">10</span> </span><span id="L-699"><a href="#L-699"><span class="linenos" data-line="699"></span></a> <span class="ow">or</span> <span class="n">namespace</span> <span class="o">==</span> <span class="mi">828</span> </span><span id="L-700"><a href="#L-700"><span class="linenos" data-line="700"></span></a> <span class="ow">or</span> <span class="n">reason</span> <span class="ow">and</span> <span class="n">obj</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">indefImageReasons</span><span class="p">[</span><span class="n">reason</span><span class="p">]</span> </span><span id="L-701"><a href="#L-701"><span class="linenos" data-line="701"></span></a> <span class="p">)</span> </span><span id="L-702"><a href="#L-702"><span class="linenos" data-line="702"></span></a> <span class="ow">and</span> <span class="n">action</span> <span class="o">==</span> <span class="s1">'edit'</span> </span><span id="L-703"><a href="#L-703"><span class="linenos" data-line="703"></span></a> <span class="ow">and</span> <span class="n">level</span> <span class="o">==</span> <span class="s1">'sysop'</span> </span><span id="L-704"><a href="#L-704"><span class="linenos" data-line="704"></span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">protectionObj</span><span class="p">:</span><span class="n">isTemporary</span><span class="p">()</span> </span><span id="L-705"><a href="#L-705"><span class="linenos" data-line="705"></span></a> <span class="kr">then</span> </span><span id="L-706"><a href="#L-706"><span class="linenos" data-line="706"></span></a> <span class="c1">-- Fully protected modules and templates get the special red "indef"</span> </span><span id="L-707"><a href="#L-707"><span class="linenos" data-line="707"></span></a> <span class="c1">-- padlock.</span> </span><span id="L-708"><a href="#L-708"><span class="linenos" data-line="708"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_imageFilename</span> <span class="o">=</span> <span class="n">obj</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">msg</span><span class="p">[</span><span class="s1">'image-filename-indef'</span><span class="p">]</span> </span><span id="L-709"><a href="#L-709"><span class="linenos" data-line="709"></span></a> <span class="kr">else</span> </span><span id="L-710"><a href="#L-710"><span class="linenos" data-line="710"></span></a> <span class="c1">-- Deal with regular protection types.</span> </span><span id="L-711"><a href="#L-711"><span class="linenos" data-line="711"></span></a> <span class="kd">local</span> <span class="n">images</span> <span class="o">=</span> <span class="n">obj</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">images</span> </span><span id="L-712"><a href="#L-712"><span class="linenos" data-line="712"></span></a> <span class="kr">if</span> <span class="n">images</span><span class="p">[</span><span class="n">action</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-713"><a href="#L-713"><span class="linenos" data-line="713"></span></a> <span class="kr">if</span> <span class="n">images</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> <span class="kr">then</span> </span><span id="L-714"><a href="#L-714"><span class="linenos" data-line="714"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_imageFilename</span> <span class="o">=</span> <span class="n">images</span><span class="p">[</span><span class="n">action</span><span class="p">][</span><span class="n">level</span><span class="p">]</span> </span><span id="L-715"><a href="#L-715"><span class="linenos" data-line="715"></span></a> <span class="kr">elseif</span> <span class="n">images</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> <span class="kr">then</span> </span><span id="L-716"><a href="#L-716"><span class="linenos" data-line="716"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_imageFilename</span> <span class="o">=</span> <span class="n">images</span><span class="p">[</span><span class="n">action</span><span class="p">].</span><span class="n">default</span> </span><span id="L-717"><a href="#L-717"><span class="linenos" data-line="717"></span></a> <span class="kr">end</span> </span><span id="L-718"><a href="#L-718"><span class="linenos" data-line="718"></span></a> <span class="kr">end</span> </span><span id="L-719"><a href="#L-719"><span class="linenos" data-line="719"></span></a> <span class="kr">end</span> </span><span id="L-720"><a href="#L-720"><span class="linenos" data-line="720"></span></a> <span class="kr">end</span> </span><span id="L-721"><a href="#L-721"><span class="linenos" data-line="721"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">BannerTemplate</span><span class="p">)</span> </span><span id="L-722"><a href="#L-722"><span class="linenos" data-line="722"></span></a><span class="kr">end</span> </span><span id="L-723"><a href="#L-723"><span class="linenos" data-line="723"></span></a> </span><span id="L-724"><a href="#L-724"><span class="linenos" data-line="724"></span></a><span class="kr">function</span> <span class="nc">BannerTemplate</span><span class="p">:</span><span class="nf">renderImage</span><span class="p">()</span> </span><span id="L-725"><a href="#L-725"><span class="linenos" data-line="725"></span></a> <span class="kd">local</span> <span class="n">filename</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_imageFilename</span> </span><span id="L-726"><a href="#L-726"><span class="linenos" data-line="726"></span></a> <span class="ow">or</span> <span class="n">self</span><span class="p">.</span><span class="n">_cfg</span><span class="p">.</span><span class="n">msg</span><span class="p">[</span><span class="s1">'image-filename-default'</span><span class="p">]</span> </span><span id="L-727"><a href="#L-727"><span class="linenos" data-line="727"></span></a> <span class="ow">or</span> <span class="s1">'Transparent.gif'</span> </span><span id="L-728"><a href="#L-728"><span class="linenos" data-line="728"></span></a> <span class="kr">return</span> <span class="n">makeFileLink</span><span class="p">{</span> </span><span id="L-729"><a href="#L-729"><span class="linenos" data-line="729"></span></a> <span class="n">file</span> <span class="o">=</span> <span class="n">filename</span><span class="p">,</span> </span><span id="L-730"><a href="#L-730"><span class="linenos" data-line="730"></span></a> <span class="n">size</span> <span class="o">=</span> <span class="p">(</span><span class="n">self</span><span class="p">.</span><span class="n">imageWidth</span> <span class="ow">or</span> <span class="mi">20</span><span class="p">)</span> <span class="o">..</span> <span class="s1">'px'</span><span class="p">,</span> </span><span id="L-731"><a href="#L-731"><span class="linenos" data-line="731"></span></a> <span class="n">alt</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_imageAlt</span><span class="p">,</span> </span><span id="L-732"><a href="#L-732"><span class="linenos" data-line="732"></span></a> <span class="n">link</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_imageLink</span><span class="p">,</span> </span><span id="L-733"><a href="#L-733"><span class="linenos" data-line="733"></span></a> <span class="n">caption</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">imageCaption</span> </span><span id="L-734"><a href="#L-734"><span class="linenos" data-line="734"></span></a> <span class="p">}</span> </span><span id="L-735"><a href="#L-735"><span class="linenos" data-line="735"></span></a><span class="kr">end</span> </span><span id="L-736"><a href="#L-736"><span class="linenos" data-line="736"></span></a> </span><span id="L-737"><a href="#L-737"><span class="linenos" data-line="737"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-738"><a href="#L-738"><span class="linenos" data-line="738"></span></a><span class="c1">-- Banner class</span> </span><span id="L-739"><a href="#L-739"><span class="linenos" data-line="739"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-740"><a href="#L-740"><span class="linenos" data-line="740"></span></a> </span><span id="L-741"><a href="#L-741"><span class="linenos" data-line="741"></span></a><span class="kd">local</span> <span class="n">Banner</span> <span class="o">=</span> <span class="nb">setmetatable</span><span class="p">({},</span> <span class="n">BannerTemplate</span><span class="p">)</span> </span><span id="L-742"><a href="#L-742"><span class="linenos" data-line="742"></span></a><span class="n">Banner</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Banner</span> </span><span id="L-743"><a href="#L-743"><span class="linenos" data-line="743"></span></a> </span><span id="L-744"><a href="#L-744"><span class="linenos" data-line="744"></span></a><span class="kr">function</span> <span class="nc">Banner</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">blurbObj</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-745"><a href="#L-745"><span class="linenos" data-line="745"></span></a> <span class="kd">local</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">BannerTemplate</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> <span class="c1">-- This doesn't need the blurb.</span> </span><span id="L-746"><a href="#L-746"><span class="linenos" data-line="746"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">imageWidth</span> <span class="o">=</span> <span class="mi">40</span> </span><span id="L-747"><a href="#L-747"><span class="linenos" data-line="747"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">imageCaption</span> <span class="o">=</span> <span class="n">blurbObj</span><span class="p">:</span><span class="n">makeBannerText</span><span class="p">(</span><span class="s1">'alt'</span><span class="p">)</span> <span class="c1">-- Large banners use the alt text for the tooltip.</span> </span><span id="L-748"><a href="#L-748"><span class="linenos" data-line="748"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_reasonText</span> <span class="o">=</span> <span class="n">blurbObj</span><span class="p">:</span><span class="n">makeBannerText</span><span class="p">(</span><span class="s1">'text'</span><span class="p">)</span> </span><span id="L-749"><a href="#L-749"><span class="linenos" data-line="749"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_explanationText</span> <span class="o">=</span> <span class="n">blurbObj</span><span class="p">:</span><span class="n">makeBannerText</span><span class="p">(</span><span class="s1">'explanation'</span><span class="p">)</span> </span><span id="L-750"><a href="#L-750"><span class="linenos" data-line="750"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_page</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">.</span><span class="n">prefixedText</span> <span class="c1">-- Only makes a difference in testing.</span> </span><span id="L-751"><a href="#L-751"><span class="linenos" data-line="751"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Banner</span><span class="p">)</span> </span><span id="L-752"><a href="#L-752"><span class="linenos" data-line="752"></span></a><span class="kr">end</span> </span><span id="L-753"><a href="#L-753"><span class="linenos" data-line="753"></span></a> </span><span id="L-754"><a href="#L-754"><span class="linenos" data-line="754"></span></a><span class="kr">function</span> <span class="nc">Banner</span><span class="p">:</span><span class="nf">__tostring</span><span class="p">()</span> </span><span id="L-755"><a href="#L-755"><span class="linenos" data-line="755"></span></a> <span class="c1">-- Renders the banner.</span> </span><span id="L-756"><a href="#L-756"><span class="linenos" data-line="756"></span></a> <span class="n">makeMessageBox</span> <span class="o">=</span> <span class="n">makeMessageBox</span> <span class="ow">or</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Module:Message box'</span><span class="p">).</span><span class="n">main</span> </span><span id="L-757"><a href="#L-757"><span class="linenos" data-line="757"></span></a> <span class="kd">local</span> <span class="n">reasonText</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_reasonText</span> <span class="ow">or</span> <span class="nb">error</span><span class="p">(</span><span class="s1">'không có đặt văn bản lý do'</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> </span><span id="L-758"><a href="#L-758"><span class="linenos" data-line="758"></span></a> <span class="kd">local</span> <span class="n">explanationText</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_explanationText</span> </span><span id="L-759"><a href="#L-759"><span class="linenos" data-line="759"></span></a> <span class="kd">local</span> <span class="n">mbargs</span> <span class="o">=</span> <span class="p">{</span> </span><span id="L-760"><a href="#L-760"><span class="linenos" data-line="760"></span></a> <span class="n">page</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_page</span><span class="p">,</span> </span><span id="L-761"><a href="#L-761"><span class="linenos" data-line="761"></span></a> <span class="nb">type</span> <span class="o">=</span> <span class="s1">'protection'</span><span class="p">,</span> </span><span id="L-762"><a href="#L-762"><span class="linenos" data-line="762"></span></a> <span class="n">image</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">renderImage</span><span class="p">(),</span> </span><span id="L-763"><a href="#L-763"><span class="linenos" data-line="763"></span></a> <span class="n">text</span> <span class="o">=</span> <span class="nb">string.format</span><span class="p">(</span> </span><span id="L-764"><a href="#L-764"><span class="linenos" data-line="764"></span></a> <span class="s2">"'''%s'''%s"</span><span class="p">,</span> </span><span id="L-765"><a href="#L-765"><span class="linenos" data-line="765"></span></a> <span class="n">reasonText</span><span class="p">,</span> </span><span id="L-766"><a href="#L-766"><span class="linenos" data-line="766"></span></a> <span class="n">explanationText</span> <span class="ow">and</span> <span class="s1">'<br />'</span> <span class="o">..</span> <span class="n">explanationText</span> <span class="ow">or</span> <span class="s1">''</span> </span><span id="L-767"><a href="#L-767"><span class="linenos" data-line="767"></span></a> <span class="p">)</span> </span><span id="L-768"><a href="#L-768"><span class="linenos" data-line="768"></span></a> <span class="p">}</span> </span><span id="L-769"><a href="#L-769"><span class="linenos" data-line="769"></span></a> <span class="kr">return</span> <span class="n">makeMessageBox</span><span class="p">(</span><span class="s1">'mbox'</span><span class="p">,</span> <span class="n">mbargs</span><span class="p">)</span> </span><span id="L-770"><a href="#L-770"><span class="linenos" data-line="770"></span></a><span class="kr">end</span> </span><span id="L-771"><a href="#L-771"><span class="linenos" data-line="771"></span></a> </span><span id="L-772"><a href="#L-772"><span class="linenos" data-line="772"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-773"><a href="#L-773"><span class="linenos" data-line="773"></span></a><span class="c1">-- Padlock class</span> </span><span id="L-774"><a href="#L-774"><span class="linenos" data-line="774"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-775"><a href="#L-775"><span class="linenos" data-line="775"></span></a> </span><span id="L-776"><a href="#L-776"><span class="linenos" data-line="776"></span></a><span class="kd">local</span> <span class="n">Padlock</span> <span class="o">=</span> <span class="nb">setmetatable</span><span class="p">({},</span> <span class="n">BannerTemplate</span><span class="p">)</span> </span><span id="L-777"><a href="#L-777"><span class="linenos" data-line="777"></span></a><span class="n">Padlock</span><span class="p">.</span><span class="n">__index</span> <span class="o">=</span> <span class="n">Padlock</span> </span><span id="L-778"><a href="#L-778"><span class="linenos" data-line="778"></span></a> </span><span id="L-779"><a href="#L-779"><span class="linenos" data-line="779"></span></a><span class="kr">function</span> <span class="nc">Padlock</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">blurbObj</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-780"><a href="#L-780"><span class="linenos" data-line="780"></span></a> <span class="kd">local</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">BannerTemplate</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> <span class="c1">-- This doesn't need the blurb.</span> </span><span id="L-781"><a href="#L-781"><span class="linenos" data-line="781"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">imageWidth</span> <span class="o">=</span> <span class="mi">20</span> </span><span id="L-782"><a href="#L-782"><span class="linenos" data-line="782"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">imageCaption</span> <span class="o">=</span> <span class="n">blurbObj</span><span class="p">:</span><span class="n">makeBannerText</span><span class="p">(</span><span class="s1">'tooltip'</span><span class="p">)</span> </span><span id="L-783"><a href="#L-783"><span class="linenos" data-line="783"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_imageAlt</span> <span class="o">=</span> <span class="n">blurbObj</span><span class="p">:</span><span class="n">makeBannerText</span><span class="p">(</span><span class="s1">'alt'</span><span class="p">)</span> </span><span id="L-784"><a href="#L-784"><span class="linenos" data-line="784"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_imageLink</span> <span class="o">=</span> <span class="n">blurbObj</span><span class="p">:</span><span class="n">makeBannerText</span><span class="p">(</span><span class="s1">'link'</span><span class="p">)</span> </span><span id="L-785"><a href="#L-785"><span class="linenos" data-line="785"></span></a> <span class="n">obj</span><span class="p">.</span><span class="n">_indicatorName</span> <span class="o">=</span> <span class="n">cfg</span><span class="p">.</span><span class="n">padlockIndicatorNames</span><span class="p">[</span><span class="n">protectionObj</span><span class="p">.</span><span class="n">action</span><span class="p">]</span> </span><span id="L-786"><a href="#L-786"><span class="linenos" data-line="786"></span></a> <span class="ow">or</span> <span class="n">cfg</span><span class="p">.</span><span class="n">padlockIndicatorNames</span><span class="p">.</span><span class="n">default</span> </span><span id="L-787"><a href="#L-787"><span class="linenos" data-line="787"></span></a> <span class="ow">or</span> <span class="s1">'pp-default'</span> </span><span id="L-788"><a href="#L-788"><span class="linenos" data-line="788"></span></a> <span class="kr">return</span> <span class="nb">setmetatable</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">Padlock</span><span class="p">)</span> </span><span id="L-789"><a href="#L-789"><span class="linenos" data-line="789"></span></a><span class="kr">end</span> </span><span id="L-790"><a href="#L-790"><span class="linenos" data-line="790"></span></a> </span><span id="L-791"><a href="#L-791"><span class="linenos" data-line="791"></span></a><span class="kr">function</span> <span class="nc">Padlock</span><span class="p">:</span><span class="nf">__tostring</span><span class="p">()</span> </span><span id="L-792"><a href="#L-792"><span class="linenos" data-line="792"></span></a> <span class="kd">local</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">mw</span><span class="p">.</span><span class="n">getCurrentFrame</span><span class="p">()</span> </span><span id="L-793"><a href="#L-793"><span class="linenos" data-line="793"></span></a> <span class="c1">-- The nowiki tag helps prevent whitespace at the top of articles.</span> </span><span id="L-794"><a href="#L-794"><span class="linenos" data-line="794"></span></a> <span class="kr">return</span> <span class="n">frame</span><span class="p">:</span><span class="n">extensionTag</span><span class="p">{</span><span class="n">name</span> <span class="o">=</span> <span class="s1">'nowiki'</span><span class="p">}</span> <span class="o">..</span> <span class="n">frame</span><span class="p">:</span><span class="n">extensionTag</span><span class="p">{</span> </span><span id="L-795"><a href="#L-795"><span class="linenos" data-line="795"></span></a> <span class="n">name</span> <span class="o">=</span> <span class="s1">'indicator'</span><span class="p">,</span> </span><span id="L-796"><a href="#L-796"><span class="linenos" data-line="796"></span></a> <span class="n">args</span> <span class="o">=</span> <span class="p">{</span><span class="n">name</span> <span class="o">=</span> <span class="n">self</span><span class="p">.</span><span class="n">_indicatorName</span><span class="p">},</span> </span><span id="L-797"><a href="#L-797"><span class="linenos" data-line="797"></span></a> <span class="n">content</span> <span class="o">=</span> <span class="n">self</span><span class="p">:</span><span class="n">renderImage</span><span class="p">()</span> </span><span id="L-798"><a href="#L-798"><span class="linenos" data-line="798"></span></a> <span class="p">}</span> </span><span id="L-799"><a href="#L-799"><span class="linenos" data-line="799"></span></a><span class="kr">end</span> </span><span id="L-800"><a href="#L-800"><span class="linenos" data-line="800"></span></a> </span><span id="L-801"><a href="#L-801"><span class="linenos" data-line="801"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-802"><a href="#L-802"><span class="linenos" data-line="802"></span></a><span class="c1">-- Exports</span> </span><span id="L-803"><a href="#L-803"><span class="linenos" data-line="803"></span></a><span class="c1">--------------------------------------------------------------------------------</span> </span><span id="L-804"><a href="#L-804"><span class="linenos" data-line="804"></span></a> </span><span id="L-805"><a href="#L-805"><span class="linenos" data-line="805"></span></a><span class="kd">local</span> <span class="n">p</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-806"><a href="#L-806"><span class="linenos" data-line="806"></span></a> </span><span id="L-807"><a href="#L-807"><span class="linenos" data-line="807"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_exportClasses</span><span class="p">()</span> </span><span id="L-808"><a href="#L-808"><span class="linenos" data-line="808"></span></a> <span class="c1">-- This is used for testing purposes.</span> </span><span id="L-809"><a href="#L-809"><span class="linenos" data-line="809"></span></a> <span class="kr">return</span> <span class="p">{</span> </span><span id="L-810"><a href="#L-810"><span class="linenos" data-line="810"></span></a> <span class="n">Protection</span> <span class="o">=</span> <span class="n">Protection</span><span class="p">,</span> </span><span id="L-811"><a href="#L-811"><span class="linenos" data-line="811"></span></a> <span class="n">Blurb</span> <span class="o">=</span> <span class="n">Blurb</span><span class="p">,</span> </span><span id="L-812"><a href="#L-812"><span class="linenos" data-line="812"></span></a> <span class="n">BannerTemplate</span> <span class="o">=</span> <span class="n">BannerTemplate</span><span class="p">,</span> </span><span id="L-813"><a href="#L-813"><span class="linenos" data-line="813"></span></a> <span class="n">Banner</span> <span class="o">=</span> <span class="n">Banner</span><span class="p">,</span> </span><span id="L-814"><a href="#L-814"><span class="linenos" data-line="814"></span></a> <span class="n">Padlock</span> <span class="o">=</span> <span class="n">Padlock</span><span class="p">,</span> </span><span id="L-815"><a href="#L-815"><span class="linenos" data-line="815"></span></a> <span class="p">}</span> </span><span id="L-816"><a href="#L-816"><span class="linenos" data-line="816"></span></a><span class="kr">end</span> </span><span id="L-817"><a href="#L-817"><span class="linenos" data-line="817"></span></a> </span><span id="L-818"><a href="#L-818"><span class="linenos" data-line="818"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">_main</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">cfg</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span> </span><span id="L-819"><a href="#L-819"><span class="linenos" data-line="819"></span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">args</span> <span class="ow">or</span> <span class="p">{}</span> </span><span id="L-820"><a href="#L-820"><span class="linenos" data-line="820"></span></a> <span class="n">cfg</span> <span class="o">=</span> <span class="n">cfg</span> <span class="ow">or</span> <span class="nb">require</span><span class="p">(</span><span class="n">CONFIG_MODULE</span><span class="p">)</span> </span><span id="L-821"><a href="#L-821"><span class="linenos" data-line="821"></span></a> </span><span id="L-822"><a href="#L-822"><span class="linenos" data-line="822"></span></a> <span class="kd">local</span> <span class="n">protectionObj</span> <span class="o">=</span> <span class="n">Protection</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">cfg</span><span class="p">,</span> <span class="n">title</span><span class="p">)</span> </span><span id="L-823"><a href="#L-823"><span class="linenos" data-line="823"></span></a> </span><span id="L-824"><a href="#L-824"><span class="linenos" data-line="824"></span></a> <span class="kd">local</span> <span class="n">ret</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-825"><a href="#L-825"><span class="linenos" data-line="825"></span></a> </span><span id="L-826"><a href="#L-826"><span class="linenos" data-line="826"></span></a> <span class="c1">-- If a page's edit protection is equally or more restrictive than its</span> </span><span id="L-827"><a href="#L-827"><span class="linenos" data-line="827"></span></a> <span class="c1">-- protection from some other action, then don't bother displaying anything</span> </span><span id="L-828"><a href="#L-828"><span class="linenos" data-line="828"></span></a> <span class="c1">-- for the other action (except categories).</span> </span><span id="L-829"><a href="#L-829"><span class="linenos" data-line="829"></span></a> <span class="kr">if</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">action</span> <span class="o">==</span> <span class="s1">'edit'</span> <span class="ow">or</span> </span><span id="L-830"><a href="#L-830"><span class="linenos" data-line="830"></span></a> <span class="n">args</span><span class="p">.</span><span class="n">demolevel</span> <span class="ow">or</span> </span><span id="L-831"><a href="#L-831"><span class="linenos" data-line="831"></span></a> <span class="ow">not</span> <span class="n">getReachableNodes</span><span class="p">(</span> </span><span id="L-832"><a href="#L-832"><span class="linenos" data-line="832"></span></a> <span class="n">cfg</span><span class="p">.</span><span class="n">hierarchy</span><span class="p">,</span> </span><span id="L-833"><a href="#L-833"><span class="linenos" data-line="833"></span></a> <span class="n">protectionObj</span><span class="p">.</span><span class="n">level</span> </span><span id="L-834"><a href="#L-834"><span class="linenos" data-line="834"></span></a> <span class="p">)[</span><span class="n">effectiveProtectionLevel</span><span class="p">(</span><span class="s1">'edit'</span><span class="p">,</span> <span class="n">protectionObj</span><span class="p">.</span><span class="n">title</span><span class="p">)]</span> </span><span id="L-835"><a href="#L-835"><span class="linenos" data-line="835"></span></a> <span class="kr">then</span> </span><span id="L-836"><a href="#L-836"><span class="linenos" data-line="836"></span></a> <span class="c1">-- Initialise the blurb object</span> </span><span id="L-837"><a href="#L-837"><span class="linenos" data-line="837"></span></a> <span class="kd">local</span> <span class="n">blurbObj</span> <span class="o">=</span> <span class="n">Blurb</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-838"><a href="#L-838"><span class="linenos" data-line="838"></span></a> </span><span id="L-839"><a href="#L-839"><span class="linenos" data-line="839"></span></a> <span class="c1">-- Render the banner</span> </span><span id="L-840"><a href="#L-840"><span class="linenos" data-line="840"></span></a> <span class="kr">if</span> <span class="n">protectionObj</span><span class="p">:</span><span class="n">isProtected</span><span class="p">()</span> <span class="kr">then</span> </span><span id="L-841"><a href="#L-841"><span class="linenos" data-line="841"></span></a> <span class="n">ret</span><span class="p">[</span><span class="o">#</span><span class="n">ret</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tostring</span><span class="p">(</span> </span><span id="L-842"><a href="#L-842"><span class="linenos" data-line="842"></span></a> <span class="p">(</span><span class="n">yesno</span><span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">small</span><span class="p">)</span> <span class="ow">and</span> <span class="n">Padlock</span> <span class="ow">or</span> <span class="n">Banner</span><span class="p">)</span> </span><span id="L-843"><a href="#L-843"><span class="linenos" data-line="843"></span></a> <span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="n">protectionObj</span><span class="p">,</span> <span class="n">blurbObj</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-844"><a href="#L-844"><span class="linenos" data-line="844"></span></a> <span class="p">)</span> </span><span id="L-845"><a href="#L-845"><span class="linenos" data-line="845"></span></a> <span class="kr">end</span> </span><span id="L-846"><a href="#L-846"><span class="linenos" data-line="846"></span></a> <span class="kr">end</span> </span><span id="L-847"><a href="#L-847"><span class="linenos" data-line="847"></span></a> </span><span id="L-848"><a href="#L-848"><span class="linenos" data-line="848"></span></a> <span class="c1">-- Render the categories</span> </span><span id="L-849"><a href="#L-849"><span class="linenos" data-line="849"></span></a> <span class="kr">if</span> <span class="n">yesno</span><span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="n">category</span><span class="p">)</span> <span class="o">~=</span> <span class="kc">false</span> <span class="kr">then</span> </span><span id="L-850"><a href="#L-850"><span class="linenos" data-line="850"></span></a> <span class="n">ret</span><span class="p">[</span><span class="o">#</span><span class="n">ret</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">protectionObj</span><span class="p">:</span><span class="n">makeCategoryLinks</span><span class="p">()</span> </span><span id="L-851"><a href="#L-851"><span class="linenos" data-line="851"></span></a> <span class="kr">end</span> </span><span id="L-852"><a href="#L-852"><span class="linenos" data-line="852"></span></a> </span><span id="L-853"><a href="#L-853"><span class="linenos" data-line="853"></span></a> <span class="kr">return</span> <span class="nb">table.concat</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> </span><span id="L-854"><a href="#L-854"><span class="linenos" data-line="854"></span></a><span class="kr">end</span> </span><span id="L-855"><a href="#L-855"><span class="linenos" data-line="855"></span></a> </span><span id="L-856"><a href="#L-856"><span class="linenos" data-line="856"></span></a><span class="kr">function</span> <span class="nc">p</span><span class="p">.</span><span class="nf">main</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-857"><a href="#L-857"><span class="linenos" data-line="857"></span></a> <span class="n">cfg</span> <span class="o">=</span> <span class="n">cfg</span> <span class="ow">or</span> <span class="nb">require</span><span class="p">(</span><span class="n">CONFIG_MODULE</span><span class="p">)</span> </span><span id="L-858"><a href="#L-858"><span class="linenos" data-line="858"></span></a> </span><span id="L-859"><a href="#L-859"><span class="linenos" data-line="859"></span></a> <span class="c1">-- Find default args, if any.</span> </span><span id="L-860"><a href="#L-860"><span class="linenos" data-line="860"></span></a> <span class="kd">local</span> <span class="n">parent</span> <span class="o">=</span> <span class="n">frame</span><span class="p">.</span><span class="n">getParent</span> <span class="ow">and</span> <span class="n">frame</span><span class="p">:</span><span class="n">getParent</span><span class="p">()</span> </span><span id="L-861"><a href="#L-861"><span class="linenos" data-line="861"></span></a> <span class="kd">local</span> <span class="n">defaultArgs</span> <span class="o">=</span> <span class="n">parent</span> <span class="ow">and</span> <span class="n">cfg</span><span class="p">.</span><span class="n">wrappers</span><span class="p">[</span><span class="n">parent</span><span class="p">:</span><span class="n">getTitle</span><span class="p">():</span><span class="n">gsub</span><span class="p">(</span><span class="s1">'/sandbox$'</span><span class="p">,</span> <span class="s1">''</span><span class="p">)]</span> </span><span id="L-862"><a href="#L-862"><span class="linenos" data-line="862"></span></a> </span><span id="L-863"><a href="#L-863"><span class="linenos" data-line="863"></span></a> <span class="c1">-- Find user args, and use the parent frame if we are being called from a</span> </span><span id="L-864"><a href="#L-864"><span class="linenos" data-line="864"></span></a> <span class="c1">-- wrapper template.</span> </span><span id="L-865"><a href="#L-865"><span class="linenos" data-line="865"></span></a> <span class="n">getArgs</span> <span class="o">=</span> <span class="n">getArgs</span> <span class="ow">or</span> <span class="nb">require</span><span class="p">(</span><span class="s1">'Mô đun:Arguments'</span><span class="p">).</span><span class="n">getArgs</span> </span><span id="L-866"><a href="#L-866"><span class="linenos" data-line="866"></span></a> <span class="kd">local</span> <span class="n">userArgs</span> <span class="o">=</span> <span class="n">getArgs</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span> <span class="p">{</span> </span><span id="L-867"><a href="#L-867"><span class="linenos" data-line="867"></span></a> <span class="n">parentOnly</span> <span class="o">=</span> <span class="n">defaultArgs</span><span class="p">,</span> </span><span id="L-868"><a href="#L-868"><span class="linenos" data-line="868"></span></a> <span class="n">frameOnly</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">defaultArgs</span> </span><span id="L-869"><a href="#L-869"><span class="linenos" data-line="869"></span></a> <span class="p">})</span> </span><span id="L-870"><a href="#L-870"><span class="linenos" data-line="870"></span></a> </span><span id="L-871"><a href="#L-871"><span class="linenos" data-line="871"></span></a> <span class="c1">-- Build the args table. User-specified args overwrite default args.</span> </span><span id="L-872"><a href="#L-872"><span class="linenos" data-line="872"></span></a> <span class="kd">local</span> <span class="n">args</span> <span class="o">=</span> <span class="p">{}</span> </span><span id="L-873"><a href="#L-873"><span class="linenos" data-line="873"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">defaultArgs</span> <span class="ow">or</span> <span class="p">{})</span> <span class="kr">do</span> </span><span id="L-874"><a href="#L-874"><span class="linenos" data-line="874"></span></a> <span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-875"><a href="#L-875"><span class="linenos" data-line="875"></span></a> <span class="kr">end</span> </span><span id="L-876"><a href="#L-876"><span class="linenos" data-line="876"></span></a> <span class="kr">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="kr">in</span> <span class="nb">pairs</span><span class="p">(</span><span class="n">userArgs</span><span class="p">)</span> <span class="kr">do</span> </span><span id="L-877"><a href="#L-877"><span class="linenos" data-line="877"></span></a> <span class="n">args</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> </span><span id="L-878"><a href="#L-878"><span class="linenos" data-line="878"></span></a> <span class="kr">end</span> </span><span id="L-879"><a href="#L-879"><span class="linenos" data-line="879"></span></a> <span class="kr">return</span> <span class="n">p</span><span class="p">.</span><span class="n">_main</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">cfg</span><span class="p">)</span> </span><span id="L-880"><a href="#L-880"><span class="linenos" data-line="880"></span></a><span class="kr">end</span> </span><span id="L-881"><a href="#L-881"><span class="linenos" data-line="881"></span></a> </span><span id="L-882"><a href="#L-882"><span class="linenos" data-line="882"></span></a><span class="kr">return</span> <span class="n">p</span> </span></pre></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐847495b4dd‐d2lcz Cached time: 20241128133242 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.135 seconds Real time usage: 0.289 seconds Preprocessor visited node count: 590/1000000 Post‐expand include size: 118392/2097152 bytes Template argument size: 1792/2097152 bytes Highest expansion depth: 15/100 Expensive parser function count: 5/500 Unstrip recursion depth: 0/20 Unstrip post‐expand size: 3276/5000000 bytes Lua time usage: 0.064/10.000 seconds Lua memory usage: 2062537/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 257.538 1 -total 100.00% 257.538 1 Bản_mẫu:Tài_liệu 75.88% 195.416 1 Mô_đun:Protection_banner/tài_liệu 28.92% 74.483 1 Bản_mẫu:Protection_templates 25.99% 66.923 1 Bản_mẫu:Navbox 10.61% 27.313 1 Bản_mẫu:Aligned_table 5.95% 15.316 1 Bản_mẫu:Module_rating 4.61% 11.863 3 Bản_mẫu:Tlf 4.53% 11.670 1 Bản_mẫu:Module_other 4.25% 10.948 3 Bản_mẫu:Error --> </div><!--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/w/index.php?title=Mô_đun:Protection_banner&oldid=69439787">https://vi.wikipedia.org/w/index.php?title=Mô_đun:Protection_banner&oldid=69439787</a>”</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Thể loại ẩn: <ul><li><a href="/wiki/Th%E1%BB%83_lo%E1%BA%A1i:Trang_b%E1%BB%8B_kh%C3%B3a_h%E1%BA%B3n" title="Thể loại:Trang bị khóa hẳn">Trang bị khóa hẳn</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Trang này được sửa đổi lần cuối vào ngày 17 tháng 12 năm 2022, 11:06.</li> <li id="footer-info-copyright">Văn bản được phát hành theo <a href="/wiki/Wikipedia:Nguy%C3%AAn_v%C4%83n_Gi%E1%BA%A5y_ph%C3%A9p_Creative_Commons_Ghi_c%C3%B4ng%E2%80%93Chia_s%E1%BA%BB_t%C6%B0%C6%A1ng_t%E1%BB%B1_phi%C3%AAn_b%E1%BA%A3n_4.0_Qu%E1%BB%91c_t%E1%BA%BF" title="Wikipedia:Nguyên văn Giấy phép Creative Commons Ghi công–Chia sẻ tương tự phiên bản 4.0 Quốc tế">Giấy phép Creative Commons Ghi công–Chia sẻ tương tự</a>; có thể áp dụng điều khoản bổ sung. Với việc sử dụng trang web này, bạn chấp nhận <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use/vi">Điều khoản Sử dụng</a> và <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy/vi">Quy định quyền riêng tư</a>. Wikipedia® là thương hiệu đã đăng ký của <a rel="nofollow" class="external text" href="https://www.wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, một tổ chức phi lợi nhuận.</li> </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:Protection_banner&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.config.set({"wgHostname":"mw-web.codfw.main-847495b4dd-d2lcz","wgBackendResponseTime":433,"wgPageParseReport":{"limitreport":{"cputime":"0.135","walltime":"0.289","ppvisitednodes":{"value":590,"limit":1000000},"postexpandincludesize":{"value":118392,"limit":2097152},"templateargumentsize":{"value":1792,"limit":2097152},"expansiondepth":{"value":15,"limit":100},"expensivefunctioncount":{"value":5,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":3276,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 257.538 1 -total","100.00% 257.538 1 Bản_mẫu:Tài_liệu"," 75.88% 195.416 1 Mô_đun:Protection_banner/tài_liệu"," 28.92% 74.483 1 Bản_mẫu:Protection_templates"," 25.99% 66.923 1 Bản_mẫu:Navbox"," 10.61% 27.313 1 Bản_mẫu:Aligned_table"," 5.95% 15.316 1 Bản_mẫu:Module_rating"," 4.61% 11.863 3 Bản_mẫu:Tlf"," 4.53% 11.670 1 Bản_mẫu:Module_other"," 4.25% 10.948 3 Bản_mẫu:Error"]},"scribunto":{"limitreport-timeusage":{"value":"0.064","limit":"10.000"},"limitreport-memusage":{"value":2062537,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-847495b4dd-d2lcz","timestamp":"20241128133242","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>