CINXE.COM

View source for Module:Category series navigation - Wikipedia

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>View source for Module:Category series navigation - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-disabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-not-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":true,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat": "dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"3800699f-9b9d-4544-9e1f-0a841c4b081b","wgCanonicalNamespace":"Module","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":828,"wgPageName":"Module:Category_series_navigation","wgTitle":"Category series navigation","wgCurRevisionId":1246889161,"wgRevisionId":0,"wgArticleId":60472752,"wgIsArticle":false,"wgIsRedirect":false,"wgAction":"edit","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"Scribunto","wgRelevantPageName":"Module:Category_series_navigation","wgRelevantArticleId":60472752,"wgIsProbablyEditable":false,"wgRelevantPageIsProbablyEditable":false,"wgRestrictionEdit":["templateeditor"],"wgRestrictionMove":["templateeditor"],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}}, "wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":90000,"wgCodeEditorCurrentLanguage":"lua","wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles": "ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.codeEditor.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","mediawiki.ui.button":"ready","ext.charinsert.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.codeEditor","ext.scribunto.edit","mediawiki.action.edit.collapsibleFooter","site","mediawiki.page.ready","jquery.makeCollapsible","skins.vector.js","ext.centralNotice.geoIP","ext.charinsert","ext.gadget.ReferenceTooltips","ext.gadget.charinsert","ext.gadget.extra-toolbar-buttons","ext.gadget.refToolbar","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init", "ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.checkUser.clientHints","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.charinsert.styles%7Cext.codeEditor.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cmediawiki.ui.button%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="noindex,nofollow,max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="View source for Module:Category series navigation - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Module:Category_series_navigation"> <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 (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Module:Category_series_navigation"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="codeeditor-loading skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-828 ns-subject page-Module_Category_series_navigation rootpage-Module_Category_series_navigation skin-vector-2022 action-edit"><a class="mw-jump-link" href="#bodyContent">Jump to content</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="Site"> <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="Main menu" > <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">Main menu</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">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" 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="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </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/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</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="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search 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="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <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="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;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="Appearance" > <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">Appearance</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="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en" class=""><span>Donate</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=Special:CreateAccount&amp;returnto=Module%3ACategory+series+navigation&amp;returntoquery=action%3Dedit" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</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=Special:UserLogin&amp;returnto=Module%3ACategory+series+navigation&amp;returntoquery=action%3Dedit" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o" class=""><span>Log in</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="Log in and more options" > <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="Personal tools" > <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">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <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="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=Module%3ACategory+series+navigation&amp;returntoquery=action%3Dedit" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=Module%3ACategory+series+navigation&amp;returntoquery=action%3Dedit" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</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"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</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/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</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="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <h1 id="firstHeading" class="firstHeading mw-first-heading">View source for Module:Category series navigation</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="This article exist only in this language. Add the article for other languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-0" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">Add languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> <div class="after-portlet after-portlet-lang"><span class="uls-after-portlet-link"></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <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/Module:Category_series_navigation" title="View the module page [c]" accesskey="c"><span>Module</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Module_talk:Category_series_navigation" rel="discussion" class="mw-redirect" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</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="Change language variant" > <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="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="vector-tab-noicon mw-list-item"><a href="/wiki/Module:Category_series_navigation"><span>Read</span></a></li><li id="ca-viewsource" class="selected vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Category_series_navigation&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e"><span>View source</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Module:Category_series_navigation&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <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="Tools" > <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">Tools</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">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="vector-more-collapsible-item mw-list-item"><a href="/wiki/Module:Category_series_navigation"><span>Read</span></a></li><li id="ca-more-viewsource" class="selected vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:Category_series_navigation&amp;action=edit"><span>View source</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Module:Category_series_navigation&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Module:Category_series_navigation" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Module:Category_series_navigation" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Module:Category_series_navigation&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DModule%3ACategory_series_navigation%26action%3Dedit"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DModule%3ACategory_series_navigation%26action%3Dedit"><span>Download QR code</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"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q63352421" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</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="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <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">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> </div> <div id="contentSub"><div id="mw-content-subtitle">← <a href="/wiki/Module:Category_series_navigation" title="Module:Category series navigation">Module:Category series navigation</a></div></div> <div id="mw-content-text" class="mw-body-content"><p>You do not have permission to edit this page, for the following reasons: </p> <ul class="permissions-errors"><li class="mw-permissionerror-protectedpagetext"><div class="mw-parser-output"> <div class="mw-parser-output"><style data-mw-deduplicate="TemplateStyles:r1099782930">.mw-parser-output .pptext-whywhat h2{margin-top:1em;border-bottom:0;font-size:130%;font-weight:bold;padding:0.15em}.mw-parser-output .pptext-submit{list-style:none;display:inline;text-align:center}.mw-parser-output .pptext-whywhat{display:flex;flex-wrap:wrap;column-gap:2em}.mw-parser-output .pptext-whywhat>div{flex:1 1 400px}</style><style data-mw-deduplicate="TemplateStyles:r1238441935">.mw-parser-output .fmbox{clear:both;margin:0.2em 0;width:100%;border:1px solid #a2a9b1;background-color:var(--background-color-interactive-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .fmbox-warning{border:1px solid #bb7070;background-color:#ffdbdb}.mw-parser-output .fmbox-editnotice{background-color:transparent}.mw-parser-output .fmbox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .fmbox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .fmbox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .fmbox .mbox-invalid-type{text-align:center}@media screen{html.skin-theme-clientpref-night .mw-parser-output .fmbox-warning{background-color:#300}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .fmbox-warning{background-color:#300}}</style><table id="mw-protectedpagetext" class="plainlinks fmbox fmbox-system" role="presentation" style="border-style:none;"><tbody><tr><td class="mbox-text"><style data-mw-deduplicate="TemplateStyles:r1238436933">.mw-parser-output .ombox{margin:4px 0;border-collapse:collapse;border:1px solid #a2a9b1;background-color:var(--background-color-neutral-subtle,#f8f9fa);box-sizing:border-box;color:var(--color-base,#202122)}.mw-parser-output .ombox.mbox-small{font-size:88%;line-height:1.25em}.mw-parser-output .ombox-speedy{border:2px solid #b32424;background-color:#fee7e6}.mw-parser-output .ombox-delete{border:2px solid #b32424}.mw-parser-output .ombox-content{border:1px solid #f28500}.mw-parser-output .ombox-style{border:1px solid #fc3}.mw-parser-output .ombox-move{border:1px solid #9932cc}.mw-parser-output .ombox-protection{border:2px solid #a2a9b1}.mw-parser-output .ombox .mbox-text{border:none;padding:0.25em 0.9em;width:100%}.mw-parser-output .ombox .mbox-image{border:none;padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .ombox .mbox-imageright{border:none;padding:2px 0.9em 2px 0;text-align:center}.mw-parser-output .ombox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ombox .mbox-invalid-type{text-align:center}@media(min-width:720px){.mw-parser-output .ombox{margin:4px 10%}.mw-parser-output .ombox.mbox-small{clear:right;float:right;margin:4px 0 4px 1em;width:238px}}body.skin--responsive .mw-parser-output table.ombox img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .ombox-speedy{background-color:#310402}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .ombox-speedy{background-color:#310402}}</style><table class="plainlinks ombox ombox-protection" role="presentation"><tbody><tr><td class="mbox-image"><span typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/5/53/Template-protection-shackle.svg/40px-Template-protection-shackle.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/5/53/Template-protection-shackle.svg/60px-Template-protection-shackle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/5/53/Template-protection-shackle.svg/80px-Template-protection-shackle.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span></td><td class="mbox-text" style="font-weight:bold; font-size:130%;"><div style="text-align: center;">This page is currently <a href="/wiki/Wikipedia:Protection_policy#Template_protection" title="Wikipedia:Protection policy">protected</a> so that only <a href="/wiki/Wikipedia:Template_editor" title="Wikipedia:Template editor">template editors</a> and <a href="/wiki/Wikipedia:Administrators" title="Wikipedia:Administrators">administrators</a> can edit it.</div></td></tr></tbody></table> <div class="pptext-whywhat"> <div class="pptext-why"> <div class="mw-heading mw-heading2"><h2 id="Why_is_the_page_protected?"><span id="Why_is_the_page_protected.3F"></span>Why is the page protected?</h2></div> <ul> <li>Some <a href="/wiki/Wikipedia:Template_messages" class="mw-redirect" title="Wikipedia:Template messages">templates</a> and site interface pages are permanently <a href="/wiki/Wikipedia:Protection_policy#Template_protection" title="Wikipedia:Protection policy">protected</a> due to visibility. Most templates can be edited by anyone.</li> <li>The reason for protection can be found in the <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Special:Log&amp;type=protect&amp;page=Module%3ACategory+series+navigation">protection log</a>. If there are no relevant entries in the protection log, the page may have been moved after being protected. </li> </ul> </div> <div class="pptext-what"> <div class="mw-heading mw-heading2"><h2 id="What_can_I_do?"><span id="What_can_I_do.3F"></span>What can I do?</h2></div> <ul> <li><a href="/wiki/Module_talk:Category_series_navigation" class="mw-redirect" title="Module talk:Category series navigation">Discuss this page</a> with others.</li> <li>For move-protected pages, see <a href="/wiki/Wikipedia:Requested_moves" title="Wikipedia:Requested moves">requested moves</a>.</li> <li><a href="/wiki/Wikipedia:Requests_for_page_protection#Current_requests_for_reduction_in_protection_level" title="Wikipedia:Requests for page protection">Request that the page's protection level be reduced</a>.</li> <li><a href="/wiki/Help:Introduction" title="Help:Introduction">Find out more about how to get started editing Wikipedia</a>.</li> <li>If you have noticed an error or have a suggestion for a <b>simple, non-controversial change</b>, you can submit an edit request by clicking the button below and following the instructions. An <a href="/wiki/Wikipedia:Administrators" title="Wikipedia:Administrators">administrator</a> or <a href="/wiki/Wikipedia:Template_editor" title="Wikipedia:Template editor">template editor</a> may then make the change on your behalf. Please check <a href="/wiki/Module_talk:Category_series_navigation" class="mw-redirect" title="Module talk:Category series navigation">the talk page</a> first in case the issue is already being discussed.</li> <li class="pptext-submit"><div> <p><span class="plainlinks clickbutton"><a class="external text" href="https://en.wikipedia.org/w/index.php?title=Template_talk%3ACategory_series_navigation&amp;preload=Template%3ASubmit+an+edit+request%2Fpreload&amp;action=edit&amp;section=new&amp;editintro=Template%3AEdit+template-protected%2Feditintro&amp;preloadtitle=Template-protected+edit+request+on+24+November+2024&amp;preloadparams%5B%5D=edit+template-protected&amp;preloadparams%5B%5D=Module%3ACategory+series+navigation"><span class="mw-ui-button mw-ui-progressive">Submit an edit request</span></a></span> </p> </div></li> <li>If you wrote any text, please save it temporarily to your device until you can edit this page.</li> </ul> </div> </div></td></tr></tbody></table></div> </div></li><li class="mw-permissionerror-blockedtext"> <div id="mw-blocked-text" style="border: 1px solid #AAA; background-color: var(--background-color-warning-subtle, ivory); color: inherit; padding: 1.5em; width: 100%; box-sizing: border-box;"> <div style="text-align: center;"><span style="font-size: 26px;"><span typeof="mw:File"><a href="/wiki/File:Stop_hand_nuvola.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/50px-Stop_hand_nuvola.svg.png" decoding="async" width="50" height="50" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/75px-Stop_hand_nuvola.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/100px-Stop_hand_nuvola.svg.png 2x" data-file-width="240" data-file-height="240" /></a></span><b> This IP address has been <a href="/wiki/Wikipedia:Blocking_policy" title="Wikipedia:Blocking policy">blocked</a> from <i>editing</i> Wikipedia.</b></span><br /><span style="font-size: 18px;">This does not affect your ability to <i>read</i> Wikipedia pages.</span></div><div class="paragraphbreak" style="margin-top:0.5em"></div><b>Most people who see this message have done nothing wrong.</b> Some kinds of blocks restrict editing from specific service providers or telecom companies in response to recent abuse or vandalism, and can sometimes affect other users who are unrelated to that abuse. Review the information below for assistance if you do not believe that you have done anything wrong.<div class="paragraphbreak" style="margin-top:0.5em"></div> <p>The IP address or range 8.222.128.0/17 has been <a href="/wiki/Wikipedia:Blocking_policy" title="Wikipedia:Blocking policy">blocked</a> by <a href="/wiki/User:L235" title="User:L235">‪L235‬</a> for the following reason(s): </p> <div style="padding:10px; background:var(--background-color-base, white); color:inherit; border:1px #666 solid;"> <div class="user-block colocation-webhost" style="margin-bottom: 0.5em; background-color: #ffefd5; border: 1px solid #AAA; padding: 0.7em;"> <figure class="mw-halign-left" typeof="mw:File"><span><img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/53/Server-multiple.svg/40px-Server-multiple.svg.png" decoding="async" width="40" height="57" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/53/Server-multiple.svg/60px-Server-multiple.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/53/Server-multiple.svg/80px-Server-multiple.svg.png 2x" data-file-width="744" data-file-height="1052" /></span><figcaption></figcaption></figure><b>The <a href="/wiki/IP_address" title="IP address">IP address</a> that you are currently using has been blocked because it is believed to be a <a href="/wiki/Web_hosting_service" title="Web hosting service">web host provider</a> or <a href="/wiki/Colocation_centre" title="Colocation centre">colocation provider</a>.</b> To prevent abuse, <a href="/wiki/Wikipedia:Open_proxies" title="Wikipedia:Open proxies">web hosts and colocation providers may be blocked</a> from editing Wikipedia. <div style="border-top: 1px solid #AAA; clear: both">You will not be able to edit Wikipedia using a web host or colocation provider because it hides your IP address, much like a <a href="/wiki/Wikipedia:Open_proxies" title="Wikipedia:Open proxies">proxy</a> or <a href="/wiki/Virtual_private_network" title="Virtual private network">VPN</a>. <p><b>We recommend that you attempt to use another connection to edit.</b> For example, if you use a proxy or VPN to connect to the internet, turn it off when editing Wikipedia. If you edit using a mobile connection, try using a Wi-Fi connection, and vice versa. If you are using a corporate internet connection, switch to a different Wi-Fi network. If you have a Wikipedia account, please log in. </p><p>If you do not have any other way to edit Wikipedia, you will need to <a href="/wiki/Wikipedia:IP_block_exemption#Requesting_and_granting_exemption" title="Wikipedia:IP block exemption">request an IP block exemption</a>. </p> <style data-mw-deduplicate="TemplateStyles:r1214851843">.mw-parser-output .hidden-begin{box-sizing:border-box;width:100%;padding:5px;border:none;font-size:95%}.mw-parser-output .hidden-title{font-weight:bold;line-height:1.6;text-align:left}.mw-parser-output .hidden-content{text-align:left}@media all and (max-width:500px){.mw-parser-output .hidden-begin{width:auto!important;clear:none!important;float:none!important}}</style><div class="hidden-begin mw-collapsible mw-collapsed" style=""><div class="hidden-title skin-nightmode-reset-color" style="text-align:center;">How to appeal if you are confident that your connection does not use a colocation provider's IP address:</div><div class="hidden-content mw-collapsible-content" style=""> If you are confident that you are not using a web host, you may <a href="/wiki/Wikipedia:Appealing_a_block" title="Wikipedia:Appealing a block">appeal this block</a> by adding the following text on your <a href="/wiki/Help:Talk_pages" title="Help:Talk pages">talk page</a>: <code>&#123;&#123;<a href="/wiki/Template:Unblock" title="Template:Unblock">unblock</a>&#124;reason=Caught by a colocation web host block but this host or IP is not a web host. My IP address is _______. <i>Place any further information here.</i> &#126;&#126;&#126;&#126;&#125;&#125;</code>. <b>You must fill in the blank with your IP address for this block to be investigated.</b> Your IP address can be determined <span class="plainlinks"><b><a class="external text" href="https://en.wikipedia.org/wiki/Wikipedia:Get_my_IP_address?withJS=MediaWiki:Get-my-ip.js">here</a></b></span>. Alternatively, if you wish to keep your IP address private you can use the <a href="/wiki/Wikipedia:Unblock_Ticket_Request_System" title="Wikipedia:Unblock Ticket Request System">unblock ticket request system</a>. There are several reasons you might be editing using the IP address of a web host or colocation provider (such as if you are using VPN software or a business network); please use this method of appeal only if you think your IP address is in fact not a web host or colocation provider.</div></div> <p><span class="sysop-show" style="font-size: 85%;"><span style="border:#707070 solid 1px;background-color:#ffe0e0;padding:2px"><b>Administrators:</b></span> The <a href="/wiki/Wikipedia:IP_block_exemption" title="Wikipedia:IP block exemption">IP block exemption</a> user right should only be applied to allow users to edit using web host in exceptional circumstances, and requests should usually be directed to the functionaries team via email. If you intend to give the IPBE user right, a <a href="/wiki/Wikipedia:CheckUser" title="Wikipedia:CheckUser">CheckUser</a> needs to take a look at the account. This can be requested most easily at <a href="/wiki/Wikipedia:SPI#Quick_CheckUser_requests" class="mw-redirect" title="Wikipedia:SPI">SPI Quick Checkuser Requests</a>. <b>Unblocking</b> an IP or IP range with this template <b>is highly discouraged</b> without at least contacting the blocking administrator.</span> </p> </div></div> </div> <p>This block will expire on 18:23, 24 August 2026. Your current IP address is 8.222.208.146. </p> <div class="paragraphbreak" style="margin-top:0.5em"></div><div style="font-size: 16px;"> <p>Even when blocked, you will <i>usually</i> still be able to edit your <a href="/wiki/Special:MyTalk" title="Special:MyTalk">user talk page</a>, as well as <a href="/wiki/Wikipedia:Emailing_users" title="Wikipedia:Emailing users">email</a> administrators and other editors. </p> </div> <div class="paragraphbreak" style="margin-top:0.5em"></div><div style="font-size: 16px;"> <p>For information on how to proceed, please read the <b><a href="/wiki/Wikipedia:Appealing_a_block#Common_questions" title="Wikipedia:Appealing a block">FAQ for blocked users</a></b> and the <a href="/wiki/Wikipedia:Appealing_a_block" title="Wikipedia:Appealing a block">guideline on block appeals</a>. The <a href="/wiki/Wikipedia:Guide_to_appealing_blocks" title="Wikipedia:Guide to appealing blocks">guide to appealing blocks</a> may also be helpful. </p> </div> <p>Other useful links: <a href="/wiki/Wikipedia:Blocking_policy" title="Wikipedia:Blocking policy">Blocking policy</a> &#183; <a href="/wiki/Help:I_have_been_blocked" title="Help:I have been blocked">Help:I have been blocked</a> </p> </div></li><li class="mw-permissionerror-globalblocking-blockedtext-range"> <div id="mw-blocked-text" style="border: 1px solid #AAA; background-color: var(--background-color-warning-subtle, ivory); color: inherit; padding: 1.5em; width: 100%; box-sizing: border-box;"> <div style="text-align: center;"><span style="font-size: 26px;"><span typeof="mw:File"><a href="/wiki/File:Stop_hand_nuvola.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/50px-Stop_hand_nuvola.svg.png" decoding="async" width="50" height="50" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/75px-Stop_hand_nuvola.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/f/f1/Stop_hand_nuvola.svg/100px-Stop_hand_nuvola.svg.png 2x" data-file-width="240" data-file-height="240" /></a></span><b> This IP address range has been <a href="https://meta.wikimedia.org/wiki/Global_blocks" class="extiw" title="m:Global blocks">globally blocked</a>.</b></span><br /><span style="font-size: 18px;">This does not affect your ability to <i>read</i> Wikipedia pages.</span></div><div class="paragraphbreak" style="margin-top:0.5em"></div><b>Most people who see this message have done nothing wrong.</b> Some kinds of blocks restrict editing from specific service providers or telecom companies in response to recent abuse or vandalism, and can sometimes affect other users who are unrelated to that abuse. Review the information below for assistance if you do not believe that you have done anything wrong.<div class="paragraphbreak" style="margin-top:0.5em"></div><div class="paragraphbreak" style="margin-top:0.5em"></div> <p>This block affects editing on all Wikimedia wikis. </p><p>The IP address or range 8.222.128.0/17 has been globally <a href="/wiki/Wikipedia:Blocking_policy" title="Wikipedia:Blocking policy">blocked</a> by <a href="/wiki/User:Jon_Kolbert" title="User:Jon Kolbert">‪Jon Kolbert‬</a> for the following reason(s): </p> <div style="padding:10px; background:var(--background-color-base, white); color:inherit; border:1px #666 solid;"> <p><a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/NOP" class="extiw" title="m:Special:MyLanguage/NOP">Open proxy/Webhost</a>: See the <a href="https://meta.wikimedia.org/wiki/WM:OP/H" class="extiw" title="m:WM:OP/H">help page</a> if you are affected </p> </div> <p>This block will expire on 15:12, 27 August 2028. Your current IP address is 8.222.208.146. </p> <div class="paragraphbreak" style="margin-top:0.5em"></div><div style="font-size: 16px;"> <p>Even while globally blocked, you will <i>usually</i> still be able to edit pages on <a href="https://meta.wikimedia.org/wiki/" class="extiw" title="m:">Meta-Wiki</a>. </p> </div> <div class="paragraphbreak" style="margin-top:0.5em"></div><div style="font-size: 16px;"> <p>If you believe you were blocked by mistake, you can find additional information and instructions in the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/No_open_proxies" class="extiw" title="m:Special:MyLanguage/No open proxies">No open proxies</a> global policy. Otherwise, to discuss the block please <a href="https://meta.wikimedia.org/wiki/Steward_requests/Global" class="extiw" title="m:Steward requests/Global">post a request for review on Meta-Wiki</a>. You could also send an email to the <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/Stewards" class="extiw" title="m:Special:MyLanguage/Stewards">stewards</a> <a href="https://meta.wikimedia.org/wiki/Special:MyLanguage/VRT" class="extiw" title="m:Special:MyLanguage/VRT">VRT</a> queue at <kbd>stewards@wikimedia.org</kbd> including all above details. </p> </div> <p>Other useful links: <a href="https://meta.wikimedia.org/wiki/Global_blocks" class="extiw" title="m:Global blocks">Global blocks</a> &#183; <a href="/wiki/Help:I_have_been_blocked" title="Help:I have been blocked">Help:I have been blocked</a> </p> </div></li></ul><hr /> <div id="viewsourcetext">You can view and copy the source of this page:</div><textarea readonly="" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="en" dir="ltr" name="wpTextbox1">require('strict') local p = {} local horizontal = require('Module:List').horizontal --[[==========================================================================]] --[[ Globals ]] --[[==========================================================================]] local currtitle = mw.title.getCurrentTitle() local nexistingcats = 0 local errors = '' local testcasecolon = '' local testcases = string.match(currtitle.subpageText, '^testcases') if testcases then testcasecolon = ':' end local navborder = true local followRs = true local skipgaps = false local skipgaps_limit = 50 local term_limit = 10 local hgap_limit = 6 local ygap_limit = 5 local listall = false local tlistall = {} local tlistallbwd = {} local tlistallfwd = {} local ttrackingcats = { --when reindexing, Ctrl+H 'trackcat(13,' &amp; 'ttrackingcats[16]' '', -- [1] placeholder for [[Category:Category series navigation using cat parameter]] '', -- [2] placeholder for [[Category:Category series navigation using testcase parameter]] '', -- [3] placeholder for [[Category:Category series navigation using unknown parameter]] '', -- [4] placeholder for [[Category:Category series navigation range not using en dash]] '', -- [5] placeholder for [[Category:Category series navigation range abbreviated (MOS)]] '', -- [6] placeholder for [[Category:Category series navigation range redirected (base change)]] '', -- [7] placeholder for [[Category:Category series navigation range redirected (var change)]] '', -- [8] placeholder for [[Category:Category series navigation range redirected (end)]] '', -- [9] placeholder for [[Category:Category series navigation range redirected (MOS)]] '', --[10] placeholder for [[Category:Category series navigation range redirected (other)]] '', --[11] placeholder for [[Category:Category series navigation range gaps]] '', --[12] placeholder for [[Category:Category series navigation range irregular]] '', --[13] placeholder for [[Category:Category series navigation range irregular, 0-length]] '', --[14] placeholder for [[Category:Category series navigation range ends (present)]] '', --[15] placeholder for [[Category:Category series navigation range ends (blank, MOS)]] '', --[16] placeholder for [[Category:Category series navigation isolated]] '', --[17] placeholder for [[Category:Category series navigation default season gap size]] '', --[18] placeholder for [[Category:Category series navigation decade redirected]] '', --[19] placeholder for [[Category:Category series navigation year redirected (base change)]] '', --[20] placeholder for [[Category:Category series navigation year redirected (var change)]] '', --[21] placeholder for [[Category:Category series navigation year redirected (other)]] '', --[22] placeholder for [[Category:Category series navigation roman numeral redirected]] '', --[23] placeholder for [[Category:Category series navigation nordinal redirected]] '', --[24] placeholder for [[Category:Category series navigation wordinal redirected]] '', --[25] placeholder for [[Category:Category series navigation TV season redirected]] '', --[26] placeholder for [[Category:Category series navigation using skip-gaps parameter]] '', --[27] placeholder for [[Category:Category series navigation year and range]] '', --[28] placeholder for [[Category:Category series navigation year and decade]] '', --[29] placeholder for [[Category:Category series navigation decade and century]] '', --[30] placeholder for [[Category:Category series navigation in mainspace]] '', --[31] placeholder for [[Category:Category series navigation redirection error]] } local avoidself = (not string.match(currtitle.text, 'Category series navigation with') and not string.match(currtitle.text, 'Category series navigation.*/doc') and not string.match(currtitle.text, 'Category series navigation.*/sandbox') and currtitle.text ~= 'Category series navigation' and currtitle.nsText:gsub('_', ' ') ~= 'User talk' and -- [[phab:T369784]] currtitle.nsText:gsub('_', ' ') ~= 'Template talk' and (currtitle.nsText ~= 'Template' or testcases)) --avoid nested transclusion errors (i.e. {{Infilmdecade}}) --[[==========================================================================]] --[[ Utility &amp; category functions ]] --[[==========================================================================]] --Determine if a category exists (in a function for easier localization). local function catexists( title ) return mw.title.new( title, 'Category' ).exists end --Error message handling. function p.errorclass( msg ) return mw.text.tag( 'span', {class='error mw-ext-cite-error'}, '&lt;b>Error!&lt;/b> '..string.gsub(msg, '&amp;#', '&amp;amp;#') ) end --Failure handling. function p.failedcat( errors, sortkey ) if avoidself then return (errors or '')..'&amp;#42;&amp;#42;&amp;#42;Category series navigation failed to generate navbox***'.. '[['..testcasecolon..'Category:Category series navigation failed to generate navbox|'..(sortkey or 'O')..']]\n' end return '' end --Tracking cat handling. -- key: 15 (when reindexing ttrackingcats{}, Ctrl+H 'trackcat(13,' &amp; 'ttrackingcats[16]') -- cat: 'Category series navigation isolated'; '' to remove --Used by main, all nav_*(), &amp; several utility functions. local function trackcat( key, cat ) if avoidself and key and cat then if cat ~= '' then ttrackingcats[key] = '[['..testcasecolon..'Category:'..cat..']]' else ttrackingcats[key] = '' end end return end --Check for unknown parameters. --Used by main only. local function checkforunknownparams( tbl ) local knownparams = { --parameter whitelist ['min'] = 'min', ['max'] = 'max', ['cat'] = 'cat', ['show'] = 'show', ['testcase'] = 'testcase', ['testcasegap'] = 'testcasegap', ['skip-gaps'] = 'skip-gaps', ['list-all-links'] = 'list-all-links', ['follow-redirects'] = 'follow-redirects', } for k, _ in pairs (tbl) do if knownparams[k] == nil then trackcat(3, 'Category series navigation using unknown parameter') break end end end --Check for nav_*() navigational isolation (not necessarily an error). --Used by all nav_*(). local function isolatedcat() if nexistingcats == 0 then trackcat(16, 'Category series navigation isolated') end end --Returns the target of {{Category redirect}}, if it exists, else returns the original cat. --{{Title year}}, etc., if found, are evaluated. --Used by catlinkfollowr(), and so indirectly by all nav_*(). local function rtarget( frame, cat ) local catcontent = mw.title.new( cat or '', 'Category' ):getContent() if string.match( catcontent or '', '{{ *[Cc]at' ) then --prelim test local getRegex = require('Module:Template redirect regex').main local tregex = getRegex('Category redirect') for _, v in pairs (tregex) do local rtarget = mw.ustring.match( catcontent, v..'%s*|%s*([^|}]+)' ) if rtarget then if string.match(rtarget, '{{') then --{{Title year}}, etc., exists; evaluate local regex_ty = '%s*|%s*([^{}]*{{([^{|}]+)}}[^{}]-)%s*}}' --eval null-param templates only; expanded if/as needed local rtarget_orig, ty = mw.ustring.match( catcontent, v..regex_ty ) if rtarget_orig then local ty_eval = frame:expandTemplate{ title = ty, args = { page = cat } } --frame:newChild doesn't work, use 'page' param instead local rtarget_eval = mw.ustring.gsub(rtarget_orig, '{{%s*'..ty..'%s*}}', ty_eval ) return rtarget_eval else --sub-parameters present; track &amp; return default trackcat(31, 'Category series navigation redirection error') end end rtarget = mw.ustring.gsub(rtarget, '^1%s*=%s*', '') rtarget = string.gsub(rtarget, '^[Cc]ategory:', '') return rtarget end end --for end --if return cat end --Similar to {{LinkCatIfExists2}}: make a piped link to a category, if it exists; --if it doesn't exist, just display the greyed link title without linking. --Follows {{Category redirect}}s. --Returns { -- ['cat'] = cat, -- ['catexists'] = true, -- ['rtarget'] = &lt;#R target>, -- ['navelement'] = &lt;#R target navelement>, -- ['displaytext'] = displaytext, -- } -- if #R followed; --returns { -- ['cat'] = cat, -- ['catexists'] = &lt;true|false>, -- ['rtarget'] = nil, -- ['navelement'] = &lt;cat navelement>, -- ['displaytext'] = displaytext, -- } -- otherwise. --Used by all nav_*(). local function catlinkfollowr( frame, cat, displaytext, displayend, listoverride ) cat = mw.text.trim(cat or '') displaytext = mw.text.trim(displaytext or '') displayend = displayend or false --bool flag to override displaytext IIF the cat/target is terminal (e.g. "2021–present" or "2021–") local disp = cat if displaytext ~= '' then --use 'displaytext' parameter if present disp = mw.ustring.gsub(displaytext, '%s+%(.+$', ''); --strip any trailing disambiguator end local link, nilorR local exists = catexists(cat) if exists then nexistingcats = nexistingcats + 1 if followRs then local R = rtarget(frame, cat) --find &amp; follow #R if R ~= cat then --#R followed nilorR = R end if displayend then local y, hyph, ending = mw.ustring.match(R, '^.-(%d+)([–-])(.*)$') if ending == 'present' then disp = y..hyph..ending elseif ending == '' then disp = y..hyph..'&lt;span style="visibility:hidden">'..y..'&lt;/span>' --hidden y to match spacing end end link = '[[:Category:'..R..'|'..disp..']]' else link = '[[:Category:'..cat..'|'..disp..']]' end else link = '&lt;span class="categorySeriesNavigation-item-inactive">'..disp..'&lt;/span>' end if listall and listoverride == nil then if nilorR then --#R followed table.insert( tlistall, '[[:Category:'..cat..']] → '..'[[:Category:'..nilorR..']] ('..link..')' ) else --no #R table.insert( tlistall, '[[:Category:'..cat..']] ('..link..')' ) end end return { ['cat'] = cat, ['catexists'] = exists, ['rtarget'] = nilorR, ['navelement'] = link, ['displaytext'] = disp, } end --Returns a numbered list of all {{Category redirect}}s followed by catlinkfollowr() -> rtarget(). --For a nav_hyphen() cat, also returns a formatted list of all cats searched for &amp; found, &amp; all loop indices. --Used by all nav_*(). local function listalllinks() local nl = '\n# ' local out = '' if currtitle.nsText == 'Category' then errors = p.errorclass('The &lt;b>&lt;code>|list-all-links=yes&lt;/code>&lt;/b> parameter/utility '.. 'should not be saved in category space, only previewed.') out = p.failedcat(errors, 'Z') end local bwd, fwd = '', '' if tlistallbwd[1] then bwd = '\n\nbackward search:'..nl..table.concat(tlistallbwd, nl) end if tlistallfwd[1] then fwd = '\n\nforward search:'..nl..table.concat(tlistallfwd, nl) end if tlistall[1] then return out..nl..table.concat(tlistall, nl)..bwd..fwd else return out..nl..'No links found!?'..bwd..fwd end end --Returns the difference b/w 2 ints separated by endash|hyphen, nil if error. --Used by nav_hyphen() only. local function find_duration( cat ) local from, to = mw.ustring.match(cat, '(%d+)[–-](%d+)') if from and to then if to == '00' then return nil end --doesn't follow MOS:DATERANGE if (#from == 4) and (#to == 2) then --1900-01 to = string.match(from, '(%d%d)%d%d')..to --1900-1901 elseif (#from == 2) and (#to == 4) then -- 01-1902 from = string.match(to, '(%d%d)%d%d')..from --1901-1902 end return (tonumber(to) - tonumber(from)) end return 0 end --Returns the ending of a terminal cat, and sets the appropriate tracking cat, else nil. --Used by nav_hyphen() only. local function find_terminaltxt( cat ) local terminaltxt = nil if mw.ustring.match(cat, '%d+[–-]present$') then terminaltxt = 'present' trackcat(14, 'Category series navigation range ends (present)') elseif mw.ustring.match(cat, '%d+[–-]$') then terminaltxt = '' trackcat(15, 'Category series navigation range ends (blank, MOS)') end return terminaltxt end --Returns an unsigned string of the 1-4 digit decade ending in "0", else nil. --Used by nav_decade() only. local function sterilizedec( decade ) if decade == nil or decade == '' then return nil end local dec = string.match(decade, '^[-%+]?(%d?%d?%d?0)$') or string.match(decade, '^[-%+]?(%d?%d?%d?0)%D') if dec then return dec else --fix 2-4 digit decade local decade_fixed234 = string.match(decade, '^[-%+]?(%d%d?%d?)%d$') or string.match(decade, '^[-%+]?(%d%d?%d?)%d%D') if decade_fixed234 then return decade_fixed234..'0' end --fix 1-digit decade local decade_fixed1 = string.match(decade, '^[-%+]?(%d)$') or string.match(decade, '^[-%+]?(%d)%D') if decade_fixed1 then return '0' end --unfixable return nil end end --Check for nav_hyphen default gap size + isolatedcat() (not necessarily an error). --Used by nav_hyphen() only. local function defaultgapcat( bool ) if bool and nexistingcats == 0 then --using "nexistingcats > 0" isn't as useful, since the default gap size obviously worked trackcat(17, 'Category series navigation default season gap size') end end --12 -> 12th, etc. --Used by nav_nordinal() &amp; nav_wordinal(). function p.addord( i ) if tonumber(i) then local s = tostring(i) local tens = string.match(s, '1%d$') if tens then return s..'th' end local ones = string.match(s, '%d$') if ones == '1' then return s..'st' elseif ones == '2' then return s..'nd' elseif ones == '3' then return s..'rd' end return s..'th' end return i end --Returns the properly formatted central nav element. --Expects an integer i, and a catlinkfollowr() table. --Used by nav_decade() &amp; nav_ordinal() only. local function navcenter( i, catlink ) if i == 0 then --center nav element if navborder == true then return '&lt;b>'..catlink.displaytext..'&lt;/b>' else return '&lt;b>'..catlink.navelement..'&lt;/b>' end else return catlink.navelement end end --Wrap one or two navs in a &lt;div> with ARIA attributes; add TemplateStyles --before it. This also aligns the navs in case some floating element (like a --portal box) breaks their alignment. --Used by main only. local function wrap( nav1, nav2 ) local templatestyles = require("Module:TemplateStyles")( "Module:Category series navigation/styles.css" ) local prepare = function (nav) if nav then nav = '\n'..nav else nav = '' end return nav end return templatestyles.. '&lt;div class="categorySeriesNavigation" role="navigation" aria-label="Range">'.. prepare(nav1)..prepare(nav2).. '\n&lt;/div>' end --[[==========================================================================]] --[[ Formerly separated templates/modules ]] --[[==========================================================================]] --[[==========================={{ nav_hyphen }}=============================]] local function nav_hyphen( frame, start, hyph, finish, firstpart, lastpart, minseas, maxseas, testgap ) --Expects a PAGENAME of the form "Some sequential 2015–16 example cat", where -- start = 2015 -- hyph = – -- finish = 16 (sequential years can be abbreviated, but others should be full year, e.g. "2001–2005") -- firstpart = Some sequential -- lastpart = example cat -- minseas = 1800 ('min' starting season shown; optional; defaults to -9999) -- maxseas = 2000 ('max' starting season shown; optional; defaults to 9999; 2000 will show 2000-01) -- testgap = 0 (testcasegap parameter for easier testing; optional) --sterilize start if string.match(start or '', '^%d%d?%d?%d?$') == nil then --1-4 digits, AD only local start_fixed = mw.ustring.match(start or '', '^%s*(%d%d?%d?%d?)%D') if start_fixed then start = start_fixed else errors = p.errorclass('Function nav_hyphen can\'t recognize the number "'..(start or '')..'" '.. 'in the first part of the "season" that was passed to it. '.. 'For e.g. "2015–16", "2015" is expected via "|2015|–|16|".') return p.failedcat(errors, 'H') end end local nstart = tonumber(start) --en dash check if hyph ~= '–' then trackcat(4, 'Category series navigation range not using en dash') --nav still processable, but track end --sterilize finish &amp; check for weird parents local tgaps = {} --table of gap sizes found b/w terms { [&lt;gap size found>] = 1 } for -3 &lt;= j &lt;= 3 local tgapsj4 = {} --table of gap sizes found b/w terms { [&lt;gap size found>] = 1 } for j = { -4, 4 } local ttlens = {} --table of term lengths found w/i terms { [&lt;term length found>] = 1 } local tirregs = {} --table of ir/regular-term-length cats' "from"s &amp; "to"s found local regularparent = true if (finish == -1) or --"Members of the Scottish Parliament 2021–present" (finish == 0) --"Members of the Scottish Parliament 2021–" then regularparent = false if maxseas == nil or maxseas == '' then maxseas = start --hide subsequent ranges end if finish == -1 then trackcat(14, 'Category series navigation range ends (present)') else trackcat(15, 'Category series navigation range ends (blank, MOS)') end elseif (start == finish) and (ttrackingcats[16] ~= '') --nav_year found isolated; check for surrounding hyphenated terms (e.g. UK MPs 1974) then trackcat(16, '') --reset for another check later trackcat(13, 'Category series navigation range irregular, 0-length') ttlens[0] = 1 --calc ttlens for std cases below regularparent = 'isolated' end if (string.match(finish or '', '^%d+$') == nil) and (string.match(finish or '', '^%-%d+$') == nil) then local finish_fixed = mw.ustring.match(finish or '', '^%s*(%d%d?%d?%d?)%D') if finish_fixed then finish = finish_fixed else errors = p.errorclass('Function nav_hyphen can\'t recognize "'..(finish or '')..'" '.. 'in the second part of the "season" that was passed to it. '.. 'For e.g. "2015–16", "16" is expected via "|2015|–|16|".') return p.failedcat(errors, 'I') end else if string.len(finish) >= 5 then errors = p.errorclass('The second part of the season passed to function nav_hyphen should only be four or fewer digits, not "'..(finish or '')..'". '.. 'See [[MOS:DATERANGE]] for details.') return p.failedcat(errors, 'J') end end local nfinish = tonumber(finish) --save sterilized parent range for easier lookup later tirregs['from0'] = nstart tirregs['to0'] = nfinish --sterilize min/max local nminseas_default = -9999 local nmaxseas_default = 9999 local nminseas = tonumber(minseas) or nminseas_default --same behavior as nav_year local nmaxseas = tonumber(maxseas) or nmaxseas_default --same behavior as nav_year if nminseas > nstart then nminseas = nstart end if nmaxseas &lt; nstart then nmaxseas = nstart end local lspace = ' ' --assume a leading space (most common) local tspace = ' ' --assume a trailing space (most common) if string.match(firstpart, '%($') then lspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats if string.match(lastpart, '^%)') then tspace = '' end --DNE for "Madrid city councillors (2007–2011)"-type cats --calculate term length/intRAseason size &amp; finishing year local t = 1 while t &lt;= term_limit and regularparent == true do local nish = nstart + t --use switchADBC to flip this sign to work for years BC, if/when the time comes if (nish == nfinish) or (string.match(nish, '%d?%d$') == finish) then ttlens[t] = 1 break end if t == term_limit then errors = p.errorclass('Function nav_hyphen can\'t determine a reasonable term length for "'..start..hyph..finish..'".') return p.failedcat(errors, 'K') end t = t + 1 end --apply MOS:DATERANGE to parent local lenstart = string.len(start) local lenfinish = string.len(finish) if lenstart == 4 and regularparent == true then --"2001–..." if t == 1 then --"2001–02" &amp; "2001–2002" both allowed if lenfinish ~= 2 and lenfinish ~= 4 then errors = p.errorclass('The second part of the season passed to function nav_hyphen should be two or four digits, not "'..finish..'".') return p.failedcat(errors, 'L') end else --"2001–2005" is required for t > 1; track "2001–05"; anything else = error if lenfinish == 2 then trackcat(5, 'Category series navigation range abbreviated (MOS)') elseif lenfinish ~= 4 then errors = p.errorclass('The second part of the season passed to function nav_hyphen should be four digits, not "'..finish..'".') return p.failedcat(errors, 'M') end end if finish == '00' then --full year required regardless of term length trackcat(5, 'Category series navigation range abbreviated (MOS)') end end --calculate intERseason gap size local hgap_default = 0 --assume &amp; start at the most common case: 2001–02 -> 2002–03, etc. local hgap_limit_reg = hgap_limit --less expensive per-increment (inc x 4) local hgap_limit_irreg = hgap_limit --more expensive per-increment (inc x 23 = inc x (k_bwd + k_fwd) = inc x (12 + 11)) local hgap_success = false local hgap = hgap_default while hgap &lt;= hgap_limit_reg and regularparent == true do --verify local prevseason2 = firstpart..lspace..(nstart-t-hgap)..hyph..string.match(nstart-hgap, '%d?%d$') ..tspace..lastpart local nextseason2 = firstpart..lspace..(nstart+t+hgap)..hyph..string.match(nstart+2*t+hgap, '%d?%d$')..tspace..lastpart local prevseason4 = firstpart..lspace..(nstart-t-hgap)..hyph..(nstart-hgap) ..tspace..lastpart local nextseason4 = firstpart..lspace..(nstart+t+hgap)..hyph..(nstart+2*t+hgap)..tspace..lastpart if t == 1 then --test abbreviated range first, then full range, to be frugal with expensive functions if catexists(prevseason2) or --use 'or', in case we're at the edge of the cat structure, catexists(nextseason2) or --or we hit a "–00"/"–2000" situation on one side catexists(prevseason4) or catexists(nextseason4) then hgap_success = true break end elseif t > 1 then --test full range first, then abbreviated range, to be frugal with expensive functions if catexists(prevseason4) or --use 'or', in case we're at the edge of the cat structure, catexists(nextseason4) or --or we hit a "–00"/"–2000" situation on one side catexists(prevseason2) or catexists(nextseason2) then hgap_success = true break end end hgap = hgap + 1 end if hgap_success == false then hgap = tonumber(testgap) or hgap_default --tracked via defaultgapcat() end --preliminary scan to determine ir/regular spacing of nearby cats; --to limit expensive function calls, MOS:DATERANGE-violating cats are ignored; --an irregular-term-length series should follow "YYYY..hyph..YYYY" throughout local jlimit = 4 --4-a-side if all YYYY-YY, 3-a-side if all YYYY-YYYY, with some threshold in between if hgap &lt;= hgap_limit_reg then --also to isolate temp vars --find # of nav-visible ir/regular-term-length cats local bwanchor = nstart --backward anchor/common year local fwanchor = bwanchor + t --forward anchor/common year if regularparent == 'isolated' then fwanchor = bwanchor end local spangreen = '[&lt;span style="color:green">j, g, k = ' --used for/when debugging via list-all-links=yes local spanblue = '&lt;span style="color:blue">' local spanred = ' (&lt;span style="color:red">' local span = '&lt;/span>' local lastg = nil --to check for run-on searches local lastk = nil --to check for run-on searches local endfound = false --switch used to stop searching forward local iirregs = 0 --index of tirregs[] for j &lt; 0, since search starts from parent local j = -jlimit --index of tirregs[] for j > 0 &amp; pseudo navh position while j &lt;= jlimit do if j &lt; 0 then --search backward from parent local gbreak = false --switch used to break out of g-loop local g = 0 --gap size while g &lt;= hgap_limit_irreg do local k = 0 --term length: 0 = "0-length", 1+ = normal while k &lt;= term_limit do local from = bwanchor - k - g local to = bwanchor - g local full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart ) if k == 0 then if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise to = '0-length' full = mw.text.trim( firstpart..lspace..from..tspace..lastpart ) if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' ) full, to = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy end end end if (k >= 1) or --the normal case; only continue k = 0 if 0-length found (to == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc. then table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full ) if (k == 1) and -- (g == 0 or g == 1) and --commented to match j>0 case ("1995–96 in Federal Republic of Yugoslavia basketball") (catexists(full) == false) then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series local to2 = string.match(to, '%d%d$') if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000) to = to2 full = mw.text.trim( firstpart..lspace..from..hyph..to..tspace..lastpart ) table.insert( tlistallbwd, spangreen..j..', '..g..', '..k..span..'] '..full ) end end if catexists(full) then if to == '0-length' then trackcat(13, 'Category series navigation range irregular, 0-length') end tlistallbwd[#tlistallbwd] = spanblue..tlistallbwd[#tlistallbwd]..span..' (found)' ttlens[ find_duration(full) ] = 1 if j == -1 then tgapsj4[g] = 1 -- -1 since bwd search starts from parent @ -4 and ends at -1 else tgaps[g] = 1 end iirregs = iirregs + 1 tirregs['from-'..iirregs] = from tirregs['to-'..iirregs] = to bwanchor = from --ratchet down if to ~= '0-length' then gbreak = true break else g = 0 --soft-reset g, to keep stepping thru k j = j + 1 --save, but keep searching thru k if j > 0 then --(restore "> 3" if acts up) lest we keep searching bwd &amp; finding 0-length cats ("MEPs for the Republic of Ireland 1973" &amp; down) j = -1 --allow a normal, full search fwd after break gbreak = true break end end elseif (j >= 0) and (lastg and lastk) and ((lastg >= hgap_limit_irreg) or (lastk >= term_limit)) then --bwd search exhausted and/or done (runaway bwd search on "2018–19 FIA World Endurance Championship season") j = -1 --allow a normal, full search fwd after break gbreak = true break end end --ghetto "continue" k = k + 1 lastk = k end --while k &lt;= term_limit do if gbreak == true then break end g = g + 1 lastg = g end --while g &lt;= hgap_limit_irreg do end --if j &lt; 0 if j > 0 and endfound == false then --search forward from parent local gbreak = false --switch used to break out of g-loop local g = 0 --gap size while g &lt;= hgap_limit_irreg do local k = -2 --term length: -2 = "0-length", -1 = "2020–present", 0 = "2020–", 1+ = normal while k &lt;= term_limit do local from = fwanchor + g local to4 = fwanchor + k + g --override carefully local to2 = nil --last 2 digits of to4, IIF exists if k == -1 then to4 = 'present' --see if end-cat exists (present) elseif k == 0 then to4 = '' end --see if end-cat exists (blank) local full = mw.text.trim( firstpart..lspace..from..hyph..to4..tspace..lastpart ) if k == -2 then if regularparent ~= 'isolated' then --+restrict to g == 0 if repeating year problems arise to4 = '0-length' --see if 0-length cat exists full = mw.text.trim( firstpart..lspace..from..tspace..lastpart ) if catlinkfollowr( frame, full ).rtarget ~= nil then --#R followed table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full..spanred..'#R ignored'..span..')' ) full, to4 = '', '' --don't use/follow 0-length cat #Rs from nav_hyphen(); otherwise gets messy end end end if (k >= -1) or --only continue k = -2 if 0-length found (to4 == '0-length') --ghetto "continue" (thx Lua) to avoid expensive searches for "UK MPs 1974-1974", etc. then table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full ) if (k == 1) and -- (g == 0 or g == 1) and --commented to let "2002–03 in Scottish women's football" find "2008–09 in Scottish women's football" (catexists(full) == false) then --allow bare-bones MOS:DATERANGE alternation, in case we're on a 0|1-gap, 1-year term series to2 = string.match(to4, '%d%d$') if to2 and to2 ~= '00' then --and not at a century transition (i.e. 1999–2000) full = mw.text.trim( firstpart..lspace..from..hyph..to2..tspace..lastpart ) table.insert( tlistallfwd, spangreen..j..', '..g..', '..k..span..'] '..full ) end end if catexists(full) then if to4 == '0-length' then if rtarget(frame, full) == full then --only use 0-length cats that don't #R trackcat(13, 'Category series navigation range irregular, 0-length') end end tirregs['from'..j] = from tirregs['to'..j] = (to2 or to4) if (k == -1) or (k == 0) then endfound = true --tentative else --k == { -2, > 0 } tlistallfwd[#tlistallfwd] = spanblue..tlistallfwd[#tlistallfwd]..span..' (found)' ttlens[ find_duration(full) ] = 1 if j == 4 then tgapsj4[g] = 1 else tgaps[g] = 1 end endfound = false if to4 ~= '0-length' then --k > 0 fwanchor = to4 --ratchet up gbreak = true break --only break on k > 0 b/c old end-cat #Rs still exist like "Members of the Scottish Parliament 2011–" else --k == -2 j = j + 1 --save, but keep searching k's, in case "1974" → "1974-1979" if j > jlimit then --lest we keep searching &amp; finding 0-length cats ("2018 CONCACAF Champions League" &amp; up) gbreak = true break elseif g == hgap_limit_irreg then --keep searching, since not a runaway, just far away ("American soccer clubs 1958–59 season") hgap_limit_irreg = hgap_limit_irreg + 1 end end end end end --ghetto "continue" k = k + 1 lastk = k end --while k &lt;= term_limit do if gbreak == true then break end g = g + 1 lastg = g end --while g &lt;= hgap_limit_irreg do end --if j > 0 and endfound == false then if (lastg and lastk) and (lastg > hgap_limit_irreg) and (lastk > term_limit) then --search exhausted if j &lt; 0 then j = 0 --bwd search exhausted; continue fwd elseif j > 0 then break end --fwd search exhausted end j = j + 1 end --while j &lt;= jlimit end --if hgap &lt;= hgap_limit_reg --determine # of displayed navh elements based on "YYYY-YY" vs. "YYYY-YYYY" counts local Ythreshold = 3.3 --((YYYY-YY x 7) + (YYYY-YYYY x 2))/18 = 3.222; ((YYYY-YY x 6) + (YYYY-YYYY x 3))/18 = 3.333 local Ycount = 0 --"Y" count local ycount = 0 --tirregs counter; # of contiguous #s for k, v in pairs (tirregs) do local dummy, dunce = mw.ustring.gsub(tostring(v), '%d', '') --why can't gsub just return a table?? Ycount = Ycount + dunce ycount = ycount + 1 end local ycount_limit = ((jlimit * 2) + 1) * 2 --i.e. ((4 * 2) + 1) * 2 = 18 if ycount &lt; ycount_limit then --fill in the blanks with Ycount_parent, since hidden/dne cats aren't in tirregs local dummy_finish = finish if not regularparent then dummy_finish = start end local dummy, dunce_from = mw.ustring.gsub(start, '%d', '') local dummy, dunce_to = mw.ustring.gsub(dummy_finish, '%d', '') local Ycount_parent_avg = (dunce_from + dunce_to)/2 --"YYYY-YYYY" = 4; "YYYY-YY" = 3 Ycount = Ycount + (Ycount_parent_avg * (ycount_limit - ycount)) ycount = ycount_limit end local iwidth = 3 --default to 3-a-side, 7 total local Y_per_y = Ycount / ycount --normalized range: [3-4] if Y_per_y &lt; Ythreshold then iwidth = 4 --extend to 4-a-side, 9 total end --begin navhyphen local navh = '&lt;div class="toccolours categorySeriesNavigation-range">\n' local navlist = {} local terminalcat = false --switch used to hide future cats local terminaltxt = nil local i = -iwidth --nav position while i &lt;= iwidth do local from = nstart + i*(t+hgap) --the logical, but not necessarily correct, 'from' if tirregs['from'..i] then --prefer the irregular term table from = tonumber(tirregs['from'..i]) else --fallback to lazy/naive 'from' if i > 0 and tirregs['from'..(i-1)] and tirregs['from'..(i-1)] >= from then --end of the line: avoid dups/past, and create reasonable grey'd ranges local greyto = tonumber(tirregs['to' .. (i-1)]) or -9999 local greyfrom = tonumber(tirregs['from'..(i-1)]) or -9999 local grey = greyto --prefer 'to' if greyfrom > greyto then grey = greyfrom end --'from' fallback, in case "1995–96", "1995-present", etc. if grey > -9999 then if grey ~= greyto then from = grey + t + hgap --account for missing/incomplete 'to' else from = grey + hgap end tirregs['from'..i] = from --remember tirregs['to' .. i] = from + t end elseif i &lt; 0 then local greyfrom local ii = 0 while ii &lt; 3 do ii = ii + 1 greyfrom = tonumber(tirregs['from'..(i+ii)]) if greyfrom then break end end from = (greyfrom or nstart) - ii*(t+hgap) tirregs['from'..i] = from --remember tirregs['to' .. i] = from + t end end local from2 = string.match(from, '%d?%d$') local to = tostring(from+t) --the logical, naive range, but if tirregs['to'..i] then --prefer irregular term table to = tirregs['to'..i] elseif regularparent == false and tirregs and i > 0 then to = tirregs['to-1'] --special treatment for parent terminal cats, since they have no natural 'to' end local to2 = string.match(to, '%d?%d$') local tofinal = (to2 or '') --assume t=1 and abbreviated 'to' (the most common case) if t > 1 or --per MOS:DATERANGE (e.g. 1999-2004) (from2 - (to2 or from2)) > 0 --century transition exception (e.g. 1999–2000) then tofinal = (to or '') --default to the MOS-correct format, in case no fallbacks found end if to == '0-length' then tofinal = to end --check existance of 4-digit, MOS-correct range, with abbreviation fallback if tofinal ~= '0-length' then if t > 1 and string.len(from) == 4 then --e.g. 1999-2004 --determine which link exists (full or abbr) local full = firstpart..lspace..from..hyph..tofinal..tspace..lastpart if not catexists(full) then local abbr = firstpart..lspace..from..hyph..to2..tspace..lastpart if catexists(abbr) then tofinal = (to2 or '') --rv to MOS-incorrect format; if full AND abbr DNE, then tofinal is still in its MOS-correct format end end elseif t == 1 then --full-year consecutive ranges are also allowed local abbr = firstpart..lspace..from..hyph..tofinal..tspace..lastpart --assume tofinal is in abbr format if not catexists(abbr) and tofinal ~= to then local full = firstpart..lspace..from..hyph..to..tspace..lastpart if catexists(full) then tofinal = (to or '') --if abbr AND full DNE, then tofinal is still in its abbr format (unless it's a century transition) end end end end --populate navh if i ~= 0 then --left/right navh local orig = firstpart..lspace..from..hyph..tofinal..tspace..lastpart local disp = from..hyph..tofinal if tofinal == '0-length' then orig = firstpart..lspace..from..tspace..lastpart disp = from end local catlink = catlinkfollowr(frame, orig, disp, true) --force terminal cat display if terminalcat == false then terminaltxt = find_terminaltxt( disp ) --also sets tracking cats terminalcat = (terminaltxt ~= nil) end if catlink.rtarget and avoidself then --a {{Category redirect}} was followed, figure out why --determine new term length &amp; gap size ttlens[ find_duration( catlink.rtarget ) ] = 1 if i > -iwidth then local lastto = tirregs['to'..(i-1)] if lastto == nil then local lastfrom = nstart + (i-1)*(t+hgap) lastto = lastfrom+t --use last logical 'from' to calc lastto end if lastto then local gapcat = lastto..'-'..from --dummy cat to calc with local gap = find_duration(gapcat) or -1 --in case of nil, if iwidth == 4 then tgapsj4[ gap ] = 1 --tgapsj4[-1] are ignored later else tgaps[ gap ] = 1 --tgaps[-1] are ignored later end end end --display/tracking handling local base_regex = '%d+[–-]%d+' local origbase = mw.ustring.gsub(orig, base_regex, '') local rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex, '') if rtarbase_success == 0 then local base_regex_lax = '%d%d%d%d' --in case rtarget is a year cat rtarbase, rtarbase_success = mw.ustring.gsub(catlink.rtarget, base_regex_lax, '') end local terminal_regex = '%d+[–-]'..(terminaltxt or '')..'$' --more manual ORs bc Lua regex sux if mw.ustring.match(orig, terminal_regex) then origbase = mw.ustring.gsub(orig, terminal_regex, '') end if mw.ustring.match(catlink.rtarget, terminal_regex) then --finagle/overload terminalcat type to set nmaxseas on 1st occurence only if terminalcat == false then terminalcat = 1 end local dummy = find_terminaltxt( catlink.rtarget ) --also sets tracking cats rtarbase = mw.ustring.gsub(catlink.rtarget, terminal_regex, '') end origbase = mw.text.trim(origbase) rtarbase = mw.text.trim(rtarbase) if origbase ~= rtarbase then trackcat(6, 'Category series navigation range redirected (base change)') elseif terminalcat == 1 then trackcat(8, 'Category series navigation range redirected (end)') else --origbase == rtarbase local all4s_regex = '%d%d%d%d[–-]%d%d%d%d' local orig_all4s = mw.ustring.match(orig, all4s_regex) local rtar_all4s = mw.ustring.match(catlink.rtarget, all4s_regex) if orig_all4s and rtar_all4s then trackcat(10, 'Category series navigation range redirected (other)') else local year_regex1 = '%d%d%d%d$' local year_regex2 = '%d%d%d%d[%s%)]' local year_rtar = mw.ustring.match(catlink.rtarget, year_regex1) or mw.ustring.match(catlink.rtarget, year_regex2) if orig_all4s and year_rtar then trackcat(7, 'Category series navigation range redirected (var change)') else trackcat(9, 'Category series navigation range redirected (MOS)') end end end end if terminalcat then --true or 1 if type(terminalcat) ~= 'boolean' then nmaxseas = from end --only want to do this once terminalcat = true --done finagling/overloading end if (from >= 0) and (nminseas &lt;= from) and (from &lt;= nmaxseas) then table.insert(navlist, catlink.navelement) if terminalcat then nmaxseas = nminseas_default end --prevent display of future ranges else local hidden = '&lt;span style="visibility:hidden">'..disp..'&lt;/span>' table.insert(navlist, hidden) if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')' end end else --center navh if finish == -1 then finish = 'present' elseif finish == 0 then finish = '&lt;span style="visibility:hidden">'..start..'&lt;/span>' end local disp = start..hyph..finish if regularparent == 'isolated' then disp = start end table.insert(navlist, '&lt;b>'..disp..'&lt;/b>') end i = i + 1 end -- add the list navh = navh..horizontal(navlist)..'\n' --tracking cats &amp; finalize if avoidself then local igaps = 0 --# of diff gap sizes > 0 found local itlens = 0 --# of diff term lengths found for s = 1, hgap_limit_reg do --must loop; #tgaps, #ttlens unreliable igaps = igaps + (tgaps[s] or 0) end if iwidth == 4 then --only count gaps if they were displayed ("Karnataka MLAs 1957–1962") for s = 1, hgap_limit_reg do igaps = igaps + (tgapsj4[s] or 0) end end for s = 0, term_limit do itlens = itlens + (ttlens[s] or 0) end if igaps > 0 then trackcat(11, 'Category series navigation range gaps') end if itlens > 1 and ttrackingcats[13] == '' then --avoid duplication in "Category series navigation range irregular, 0-length" trackcat(12, 'Category series navigation range irregular') end end isolatedcat() defaultgapcat(not hgap_success) if listall then return listalllinks() else return navh..'&lt;/div>' end end --[[=========================={{ nav_tvseason }}============================]] local function nav_tvseason( frame, firstpart, tv, lastpart, maximumtv ) --Expects a PAGENAME of the form "Futurama season 1 episodes", where -- firstpart = Futurama season -- tv = 1 -- lastpart = episodes -- maximumtv = 7 ('max' tv season parameter; optional; defaults to 9999) tv = tonumber(tv) if tv == nil then errors = p.errorclass('Function nav_tvseason can\'t recognize the TV season number sent to its 3rd parameter.') return p.failedcat(errors, 'T') end --"(season 1) episodes" -> "season 1 episodes" following March 2024 RfC: --[[Wikipedia talk:Naming conventions (television)#Follow-up RfC on TV season article titles]] -- [[Special:Permalink/1216885280#Follow-up RfC on TV season article titles]] local tspace = ' ' --"season 1 episodes" local parenth_check = string.match(lastpart, '^%)') if parenth_check then tspace = '' end --accommodate old style "(season 1) episodes" just in case local maxtv_default = 9999 local maxtv = tonumber(maximumtv) or maxtv_default --allow +/- qualifier if maxtv &lt; tv then maxtv = tv end --input error; maxtv should be >= parent --begin navtvseason local navt = '&lt;div class="toccolours categorySeriesNavigation-range">\n' local navlist = {} local prepad = '' local i = -5 --nav position while i &lt;= 5 do local t = tv + i if i ~= 0 then --left/right navt local catlink = catlinkfollowr( frame, firstpart..' '..t..tspace..lastpart, t ) if t >= 1 and t &lt;= maxtv then --hardcode mintv if catlink.rtarget then --a {{Category redirect}} was followed trackcat(25, 'Category series navigation TV season redirected') end if catlink.catexists or (maxtv ~= maxtv_default and t &lt;= maxtv) then table.insert(navlist, prepad..catlink.navelement) --display normally prepad = '' else local postpad = '&lt;span style="visibility:hidden"> • '..t..'&lt;/span>' navlist[#navlist] = navlist[#navlist]..postpad if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end end elseif t &lt; 1 then prepad = prepad..'&lt;span style="visibility:hidden"> • '..'0'..'&lt;/span>' if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end else --t > maxtv local postpad = '&lt;span style="visibility:hidden"> • '..t..'&lt;/span>' navlist[#navlist] = navlist[#navlist]..postpad if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end end else --center navt table.insert(navlist, prepad..'&lt;b>'..tv..'&lt;/b>') prepad = '' end i = i + 1 end -- add the list navt = navt..horizontal(navlist)..'\n' isolatedcat() if listall then return listalllinks() else return navt..'&lt;/div>' end end --[[==========================={{ nav_decade }}=============================]] local function nav_decade( frame, firstpart, decade, lastpart, mindecade, maxdecade ) --Expects a PAGENAME of the form "Some sequential 2000 example cat", where -- firstpart = Some sequential -- decade = 2000 -- lastpart = example cat -- mindecade = 1800 ('min' decade parameter; optional; defaults to -9999) -- maxdecade = 2020 ('max' decade parameter; optional; defaults to 9999) --sterilize dec local dec = sterilizedec(decade) if dec == nil then errors = p.errorclass('Function nav_decade was sent "'..(decade or '')..'" as its 2nd parameter, '.. 'but expects a 1 to 4-digit year ending in "0".') return p.failedcat(errors, 'D') end local ndec = tonumber(dec) --sterilize mindecade &amp; determine AD/BC local mindefault = '-9999' local mindec = sterilizedec(mindecade) --returns a tostring(unsigned int), or nil if mindec then if string.match(mindecade, '-%d') or string.match(mindecade, 'BC') then mindec = '-'..mindec --better +/-0 behavior with strings (0-initialized int == "-0" string...) end elseif mindec == nil and mindecade and mindecade ~= '' then errors = p.errorclass('Function nav_decade was sent "'..(mindecade or '')..'" as its 4th parameter, '.. 'but expects a 1 to 4-digit year ending in "0", the earliest decade to be shown.') return p.failedcat(errors, 'E') else --mindec == nil mindec = mindefault --tonumber() later, after error checks end --sterilize maxdecade &amp; determine AD/BC local maxdefault = '9999' local maxdec = sterilizedec(maxdecade) --returns a tostring(unsigned int), or nil + error if maxdec then if string.match(maxdecade, '-%d') or string.match(maxdecade, 'BC') then --better +/-0 behavior with strings (0-initialized int == "-0" string...), maxdec = '-'..maxdec --but a "-0" string -> tonumber() -> tostring() = "-0", end --and a "0" string -> tonumber() -> tostring() = "0" elseif maxdec == nil and maxdecade and maxdecade ~= '' then errors = p.errorclass('Function nav_decade was sent "'..(maxdecade or '')..'" as its 5th parameter, '.. 'but expects a 1 to 4-digit year ending in "0", the highest decade to be shown.') return p.failedcat(errors, 'F') else --maxdec == nil maxdec = maxdefault end local tspace = ' ' --assume trailing space for "1950s in X"-type cats if string.match(lastpart, '^-') then tspace = '' end --DNE for "1970s-related"-type cats --AD/BC switches &amp; vars local parentBC = string.match(lastpart, '^BC') --following the "0s BC" convention for all years BC lastpart = mw.ustring.gsub(lastpart, '^BC%s*', '') --handle BC separately; AD never used --TODO?: handle BCE, but only if it exists in the wild local dec0to40AD = (ndec >= 0 and ndec &lt;= 40 and not parentBC) --special behavior in this range local switchADBC = 1 -- 1=AD parent if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later local BCdisp = '' local D = -math.huge --secondary switch &amp; iterator for AD/BC transition --check non-default min/max more carefully if mindec ~= mindefault then if tonumber(mindec) > ndec*switchADBC then mindec = tostring(ndec*switchADBC) --input error; mindec should be &lt;= parent end end if maxdec ~= maxdefault then if tonumber(maxdec) &lt; ndec*switchADBC then maxdec = tostring(ndec*switchADBC) --input error; maxdec should be >= parent end end local nmindec = tonumber(mindec) --similar behavior to nav_year &amp; nav_nordinal local nmaxdec = tonumber(maxdec) --similar behavior to nav_nordinal --begin navdecade local bnb = '' --border/no border if navborder == false then --for Category series navigation year and decade bnb = 'categorySeriesNavigation-range-transparent' end local navd = '&lt;div class="toccolours categorySeriesNavigation-range '..bnb..'">\n' local navlist = {} local i = -50 --nav position x 10 while i &lt;= 50 do local d = ndec + i*switchADBC local BC = '' BCdisp = '' if dec0to40AD then if D &lt; -10 then d = math.abs(d + 10) --b/c 2 "0s" decades exist: "0s BC" &amp; "0s" (AD) BC = 'BC ' if d == 0 then D = -10 --track 1st d = 0 use (BC) end elseif D >= -10 then D = D + 10 --now iterate from 0s AD d = D --2nd d = 0 use end elseif parentBC then if switchADBC == -1 then --parentBC looking at the BC side (the common case) BC = 'BC ' if d == 0 then --prepare to switch to the AD side on the next iteration switchADBC = 1 --1st d = 0 use (BC) D = -10 --prep end elseif switchADBC == 1 then --switched to the AD side D = D + 10 --now iterate from 0s AD d = D --2nd d = 0 use (on first use) end end if BC ~= '' and ndec &lt;= 50 then BCdisp = ' BC' --show BC for all BC decades whenever a "0s" is displayed on the nav end --determine target cat local disp = d..'s'..BCdisp local catlink = catlinkfollowr( frame, firstpart..' '..d..'s'..tspace..BC..lastpart, disp ) if catlink.rtarget then --a {{Category redirect}} was followed trackcat(18, 'Category series navigation decade redirected') end --populate left/right navd local shown = navcenter(i, catlink) local hidden = '&lt;span style="visibility:hidden">'..disp..'&lt;/span>' local dsign = d --use d for display &amp; dsign for logic if BC ~= '' then dsign = -dsign end if (nmindec &lt;= dsign) and (dsign &lt;= nmaxdec) then if dsign == 0 and (nmindec == 0 or nmaxdec == 0) then --distinguish b/w -0 (BC) &amp; 0 (AD) --"zoom in" on +/- 0 and turn dsign/min/max temporarily into +/- 1 for easier processing local zsign, zmin, zmax = 1, nmindec, nmaxdec if BC ~= '' then zsign = -1 end if mindec == '-0' then zmin = -1 elseif mindec == '0' then zmin = 1 end if maxdec == '-0' then zmax = -1 elseif maxdec == '0' then zmax = 1 end if (zmin &lt;= zsign) and (zsign &lt;= zmax) then table.insert(navlist, shown) hidden = nil else table.insert(navlist, hidden) end else table.insert(navlist, shown)--the common case hidden = nil end else table.insert(navlist, hidden) end if listall and hidden then tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')' end i = i + 10 end -- add the list navd = navd..horizontal(navlist)..'\n' isolatedcat() if listall then return listalllinks() else return navd..'&lt;/div>' end end --[[============================{{ nav_year }}==============================]] local function nav_year( frame, firstpart, year, lastpart, minimumyear, maximumyear ) --Expects a PAGENAME of the form "Some sequential 1760 example cat", where -- firstpart = Some sequential -- year = 1760 -- lastpart = example cat -- minimumyear = 1758 ('min' year parameter; optional) -- maximumyear = 1800 ('max' year parameter; optional) local minyear_default = -9999 local maxyear_default = 9999 year = tonumber(year) or tonumber(mw.ustring.match(year or '', '^%s*(%d*)')) local minyear = tonumber(string.match(minimumyear or '', '-?%d+')) or minyear_default --allow +/- qualifier local maxyear = tonumber(string.match(maximumyear or '', '-?%d+')) or maxyear_default --allow +/- qualifier if string.match(minimumyear or '', 'BC') then minyear = -math.abs(minyear) end --allow BC qualifier (AD otherwise assumed) if string.match(maximumyear or '', 'BC') then maxyear = -math.abs(maxyear) end --allow BC qualifier (AD otherwise assumed) if year == nil then errors = p.errorclass('Function nav_year can\'t recognize the year sent to its 3rd parameter.') return p.failedcat(errors, 'Y') end --AD/BC switches &amp; vars local yearBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown --"BCE" removed to match both AD &amp; BCE cats; easier &amp; faster than multiple string.match()s ['example_Hebrew people_example'] = 'BCE', --example entry format; add to &amp; adjust as needed } local parentAD = string.match(firstpart, 'AD$') --following the "AD 1" convention from AD 1 to AD 10 local parentBC = string.match(lastpart, '^BCE?') --following the "1 BC" convention for all years BC firstpart = mw.ustring.gsub(firstpart, '%s*AD$', '') --handle AD/BC separately for easier &amp; faster accounting lastpart = mw.ustring.gsub(lastpart, '^BCE?%s*', '') local BCe = parentBC or yearBCElastparts[lastpart] or 'BC' --"BC" default local year1to10 = (year >= 1 and year &lt;= 10) local year1to10ADBC = year1to10 and (parentBC or parentAD) --special behavior 1-10 for low-# non-year series local year1to15AD = (year >= 1 and year &lt;= 15 and not parentBC) --special behavior 1-15 for AD/BC display local switchADBC = 1 -- 1=AD parent if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later local Y = 0 --secondary iterator for AD-on-a-BC-parent if minyear > year*switchADBC then minyear = year*switchADBC end --input error; minyear should be &lt;= parent if maxyear &lt; year*switchADBC then maxyear = year*switchADBC end --input error; maxyear should be >= parent local lspace = ' ' --leading space before year, after firstpart if string.match(firstpart, '[%-VW]$') then lspace = '' --e.g. "Straight-8 engines" end local tspace = ' ' --trailing space after year, before lastpart if string.match(lastpart, '^-') then tspace = '' --e.g. "2018-related timelines" end --determine interyear gap size to condense special category types, if possible local ygapdefault = 1 --assume/start at the most common case: 2001, 2002, etc. local ygap = ygapdefault if string.match(lastpart, 'presidential') then local ygap1, ygap2 = ygapdefault, ygapdefault --need to determine previous &amp; next year gaps indepedently local ygap1_success, ygap2_success = false, false local prevseason = nil while ygap1 &lt;= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms prevseason = firstpart..lspace..(year-ygap1)..tspace..lastpart if catexists(prevseason) then ygap1_success = true break end ygap1 = ygap1 + 1 end local nextseason = nil while ygap2 &lt;= ygap_limit do --Czech Republic, Poland, Sri Lanka, etc. have 5-year terms nextseason = firstpart..lspace..(year+ygap2)..tspace..lastpart if catexists(nextseason) then ygap2_success = true break end ygap2 = ygap2 + 1 end if ygap1_success and ygap2_success then if ygap1 == ygap2 then ygap = ygap1 end elseif ygap1_success then ygap = ygap1 elseif ygap2_success then ygap = ygap2 end end --skip non-existing years, if requested local ynogaps = {} --populate with existing years in the range, at most, [year - (skipgaps_limit * 5), year + (skipgaps_limit * 5)] if skipgaps then if minyear == minyear_default then minyear = 0 --automatically set minyear to 0, as AD/BC not supported anyway end if (year > 70) or --add support for AD/BC (&lt;= AD 10) if/when needed (minyear >= 0 and --must be a non-year series like "AC with 0 elements" not parentAD and not parentBC) then local yskipped = {} --track skipped y's to avoid double-checking local cat, found, Yeary --populate nav element queue outwards positively from the parent local Year = year --to save/ratchet progression local i = 1 while i &lt;= 5 do local y = 1 while y &lt;= skipgaps_limit do found = false Yeary = Year + y if yskipped[Yeary] == nil then yskipped[Yeary] = Yeary cat = firstpart..lspace..Yeary..tspace..lastpart found = catexists(cat) if found then break end end y = y + 1 end if found then Year = Yeary else Year = Year + 1 end ynogaps[i] = Year i = i + 1 end ynogaps[0] = year --the parent --populate nav element queue outwards negatively from the parent Year = year --reset ratchet i = -1 while i >= -5 do local y = -1 while y >= -skipgaps_limit do found = false Yeary = Year + y if yskipped[Yeary] == nil then yskipped[Yeary] = Yeary cat = firstpart..lspace..Yeary..tspace..lastpart found = catexists(cat) if found then break end end y = y - 1 end if found then Year = Yeary else Year = Year - 1 end ynogaps[i] = Year i = i - 1 end else skipgaps = false --TODO: AD/BC support, then lift BC restrictions @ [[Template:Establishment category BC]] &amp; [[Template:Year category header/core]] end end --begin navyears local navy = '&lt;div class="toccolours categorySeriesNavigation-range">\n' local navlist = {} local y local j = 0 --decrementor for special cases "2021 World Rugby Sevens Series" -> "2021–2022" local i = -5 --nav position while i &lt;= 5 do if skipgaps then y = ynogaps[i] else y = year + i*ygap*switchADBC - j end local BCdisp = '' if i ~= 0 then --left/right navy local AD = '' local BC = '' if year1to15AD and not (year1to10 and not year1to10ADBC) --don't AD/BC 1-10's if parents don't contain AD/BC then if year >= 11 then --parent = AD 11-15 if y &lt;= 10 then --prepend AD on y = 1-10 cats only, per existing cats AD = 'AD ' end elseif year >= 1 then --parent = AD 1-10 if y &lt;= 0 then BC = BCe..' ' y = math.abs(y - 1) --skip y = 0 (DNE) elseif y >= 1 and y &lt;= 10 then --prepend AD on y = 1-10 cats only, per existing cats AD = 'AD ' end end elseif parentBC then if switchADBC == -1 then --displayed y is in the BC regime if y >= 1 then --the common case BC = BCe..' ' elseif y == 0 then --switch from BC to AD regime switchADBC = 1 end end if switchADBC == 1 then --displayed y is now in the AD regime Y = Y + 1 --skip y = 0 (DNE) y = Y --easiest solution: start another iterator for these AD y's displayed on a BC year parent AD = 'AD ' end end if BC ~= '' and year &lt;= 5 then --only show 'BC' for parent years &lt;= 5: saves room, easier to read, BCdisp = ' '..BCe --and 6 is the first/last nav year that doesn't need a disambiguator; end --the center/parent year will always show BC, so no need to show it another 10x --populate left/right navy local ysign = y --use y for display &amp; ysign for logic local disp = y..BCdisp if BC ~= '' then ysign = -ysign end local firsttry = firstpart..lspace..AD..y..tspace..BC..lastpart if (minyear &lt;= ysign) and (ysign &lt;= maxyear) then local catlinkAD = catlinkfollowr( frame, firsttry, disp ) --try AD local catlink = catlinkAD --tentative winner if AD ~= '' then --for "ACArt with 5 suppressed elements"-type cats local catlinkNoAD = catlinkfollowr( frame, firstpart..lspace..y..tspace..BC..lastpart, disp ) --try !AD if catlinkNoAD.catexists == true then catlink = catlinkNoAD --usurp elseif listall then tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)&lt;sup>1&lt;/sup>' end end if (AD..BC == '') and (catlink.catexists == false) and (y >= 1000) then --!ADBC &amp; DNE; 4-digit only, to be frugal --try basic hyphenated cats: 1-year, endash, MOS-correct only, no #Rs local yHyph_4 = y..'–'..(y+1) --try 2010–2011 type cats local catlinkHyph_4 = catlinkfollowr( frame, firstpart..lspace..yHyph_4..tspace..BC..lastpart, yHyph_4 ) if catlinkHyph_4.catexists and catlinkHyph_4.rtarget == nil then --exists &amp; no #Rs catlink = catlinkHyph_4 --usurp trackcat(27, 'Category series navigation year and range') else if listall then tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)&lt;sup>2&lt;/sup>' end local yHyph_2 = y..'–'..string.match(y+1, '%d%d$') --try 2010–11 type cats if i == 1 then local yHyph_2_special = (y-1)..'–'..string.match(y, '%d%d$') --try special case 2021 -> 2021–22 local catlinkHyph_2_special = catlinkfollowr( frame, firstpart..lspace..yHyph_2_special..tspace..BC..lastpart, yHyph_2_special ) if catlinkHyph_2_special.catexists and catlinkHyph_2_special.rtarget == nil then --exists &amp; no #Rs catlink = catlinkHyph_2_special --usurp trackcat(27, 'Category series navigation year and range') j = 1 elseif listall then tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)&lt;sup>3&lt;/sup>' end end if not (i == 1 and j == 1) then local catlinkHyph_2 = catlinkfollowr( frame, firstpart..lspace..yHyph_2..tspace..BC..lastpart, yHyph_2 ) if catlinkHyph_2.catexists and catlinkHyph_2.rtarget == nil then --exists &amp; no #Rs catlink = catlinkHyph_2 --usurp trackcat(27, 'Category series navigation year and range') elseif listall then tlistall[#tlistall] = tlistall[#tlistall]..' (tried; not displayed)&lt;sup>4&lt;/sup>' end end end end if catlink.rtarget then --#R followed; determine why local r = catlink.rtarget local c = catlink.cat local year_regex = '%d%d%d%d[–-]?%d?%d?%d?%d?' --prioritize year/range stripping, e.g. for "2006 Super 14 season" local hyph_regex = '%d%d%d%d[–-]%d+' --stricter local num_regex = '%d+' --strip any number otherwise local final_regex = nil --best choice goes here if mw.ustring.match(r, year_regex) and mw.ustring.match(c, year_regex) then final_regex = year_regex elseif mw.ustring.match(r, num_regex) and mw.ustring.match(c, num_regex) then final_regex = num_regex end if final_regex then local r_base = mw.ustring.gsub(r, final_regex, '') local c_base = mw.ustring.gsub(c, final_regex, '') if r_base ~= c_base then trackcat(19, 'Category series navigation year redirected (base change)') --acceptable #R target elseif mw.ustring.match(r, hyph_regex) then trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "2008 in Scottish women's football" to "2008–09" else trackcat(21, 'Category series navigation year redirected (other)') --exceptions go here end else trackcat(20, 'Category series navigation year redirected (var change)') --e.g. "V2 engines" to "V-twin engines" end end table.insert(navlist, catlink.navelement) else --OOB vs min/max local hidden = '&lt;span style="visibility:hidden">'..disp..'&lt;/span>' table.insert(navlist, hidden) if listall then local dummy = catlinkfollowr( frame, firsttry, disp ) tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')' end end else --center navy if parentBC then BCdisp = ' '..BCe end table.insert(navlist, '&lt;b>'..year..BCdisp..'&lt;/b>') end i = i + 1 end --add the list navy = navy..horizontal(navlist)..'\n' isolatedcat() if listall then return listalllinks() else return navy..'&lt;/div>' end end --[[==========================={{ nav_roman }}==============================]] local function nav_roman( frame, firstpart, roman, lastpart, minimumrom, maximumrom ) local toarabic = require('Module:ConvertNumeric').roman_to_numeral local toroman = require('Module:Roman').main --sterilize/convert rom/num local num = tonumber(toarabic(roman)) local rom = toroman({ [1] = num }) if num == nil or rom == nil then --out of range or some other error errors = p.errorclass('Function nav_roman can\'t recognize one or more of "'..(num or 'nil')..'" &amp; "'.. (rom or 'nil')..'" in category "'..firstpart..' '..roman..' '..lastpart..'".') return p.failedcat(errors, 'R') end --sterilize min/max local minrom = tonumber(minimumrom or '') or tonumber(toarabic(minimumrom or '')) local maxrom = tonumber(maximumrom or '') or tonumber(toarabic(maximumrom or '')) if minrom &lt; 1 then minrom = 1 end --toarabic() returns -1 on error if maxrom &lt; 1 then maxrom = 9999 end --toarabic() returns -1 on error if minrom > num then minrom = num end if maxrom &lt; num then maxrom = num end --begin navroman local navr = '&lt;div class="toccolours categorySeriesNavigation-range">\n' local navlist = {} local i = -5 --nav position while i &lt;= 5 do local n = num + i if n >= 1 then local r = toroman({ [1] = n }) if i ~= 0 then --left/right navr local catlink = catlinkfollowr( frame, firstpart..' '..r..' '..lastpart, r ) if minrom &lt;= n and n &lt;= maxrom then if catlink.rtarget then --a {{Category redirect}} was followed trackcat(22, 'Category series navigation roman numeral redirected') end table.insert(navlist, catlink.navelement) else local hidden = '&lt;span style="visibility:hidden">'..r..'&lt;/span>' table.insert(navlist, hidden) if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')' end end else --center navr table.insert(navlist, '&lt;b>'..r..'&lt;/b>') end else table.insert(navlist, '&lt;span style="visibility:hidden">I&lt;/span>') end i = i + 1 end -- add the list navr = navr..horizontal(navlist)..'\n' isolatedcat() if listall then return listalllinks() else return navr..'&lt;/div>' end end --[[=========================={{ nav_nordinal }}============================]] local function nav_nordinal( frame, firstpart, ord, lastpart, minimumord, maximumord ) local nord = tonumber(ord) local minord = tonumber(string.match(minimumord or '', '(-?%d+)[snrt]?[tdh]?')) or -9999 --allow full ord &amp; +/- qualifier local maxord = tonumber(string.match(maximumord or '', '(-?%d+)[snrt]?[tdh]?')) or 9999 --allow full ord &amp; +/- qualifier if string.match(minimumord or '', 'BC') then minord = -math.abs(minord) end --allow BC qualifier (AD otherwise assumed) if string.match(maximumord or '', 'BC') then maxord = -math.abs(maxord) end --allow BC qualifier (AD otherwise assumed) local temporal = string.match(lastpart, 'century') or string.match(lastpart, 'millennium') local tspace = ' ' --assume a trailing space after ordinal if string.match(lastpart, '^-') then tspace = '' end --DNE for "19th-century"-type cats --AD/BC switches &amp; vars local ordBCElastparts = { --needed for parent = AD 1-5, when the BC/E format is unknown --lists the lastpart of valid BCE cats --"BCE" removed to match both AD &amp; BCE cats; easier &amp; faster than multiple string.match()s ['-century Hebrew people'] = 'BCE', --WP:CFD/Log/2016 June 21#Category:11th-century BC Hebrew people ['-century Jews'] = 'BCE', --co-nominated ['-century Judaism'] = 'BCE', --co-nominated ['-century rabbis'] = 'BCE', --co-nominated ['-century High Priests of Israel'] = 'BCE', } local parentBC = mw.ustring.match(lastpart, '%s(BCE?)') --"1st-century BC" format local lastpartNoBC = mw.ustring.gsub(lastpart, '%sBCE?', '') --easier than splitting lastpart up in 2; AD never used local BCe = parentBC or ordBCElastparts[lastpartNoBC] or 'BC' --"BC" default local switchADBC = 1 -- 1=AD parent if parentBC then switchADBC = -1 end -- -1=BC parent; possibly adjusted later local O = 0 --secondary iterator for AD-on-a-BC-parent if not temporal and minord &lt; 1 then minord = 1 end --nothing before "1st parliament", etc. if minord > nord*switchADBC then minord = nord*switchADBC end --input error; minord should be &lt;= parent if maxord &lt; nord*switchADBC then maxord = nord*switchADBC end --input error; maxord should be >= parent --begin navnordinal local bnb = '' --border/no border if navborder == false then --for Category series navigation decade and century bnb = 'categorySeriesNavigation-range-transparent' end local navo = '&lt;div class="toccolours categorySeriesNavigation-range '..bnb..'">\n' local navlist = {} local i = -5 --nav position while i &lt;= 5 do local o = nord + i*switchADBC local BC = '' local BCdisp = '' if parentBC then if switchADBC == -1 then --parentBC looking at the BC side if o >= 1 then --the common case BC = ' '..BCe elseif o == 0 then --switch to the AD side BC = '' switchADBC = 1 end end if switchADBC == 1 then --displayed o is now in the AD regime O = O + 1 --skip o = 0 (DNE) o = O --easiest solution: start another iterator for these AD o's displayed on a BC year parent end elseif o &lt;= 0 then --parentAD looking at BC side BC = ' '..BCe o = math.abs(o - 1) --skip o = 0 (DNE) end if BC ~= '' and nord &lt;= 5 then --only show 'BC' for parent ords &lt;= 5: saves room, easier to read, BCdisp = ' '..BCe --and 6 is the first/last nav ord that doesn't need a disambiguator; end --the center/parent ord will always show BC, so no need to show it another 10x --populate left/right navo local oth = p.addord(o) local osign = o --use o for display &amp; osign for logic if BC ~= '' then osign = -osign end local hidden = '&lt;span style="visibility:hidden">'..oth..'&lt;/span>' if temporal then --e.g. "3rd-century BC" local lastpart = lastpartNoBC --lest we recursively add multiple "BC"s if BC ~= '' then lastpart = string.gsub(lastpart, temporal, temporal..BC) --replace BC if needed end local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth..BCdisp ) if (minord &lt;= osign) and (osign &lt;= maxord) then if catlink.rtarget then --a {{Category redirect}} was followed trackcat(23, 'Category series navigation nordinal redirected') end table.insert(navlist, navcenter(i, catlink)) else table.insert(navlist, hidden) if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..hidden..')' end end elseif BC == '' and minord &lt;= osign and osign &lt;= maxord then --e.g. >= "1st parliament" local catlink = catlinkfollowr( frame, firstpart..' '..oth..tspace..lastpart, oth ) if catlink.rtarget then --a {{Category redirect}} was followed trackcat(23, 'Category series navigation nordinal redirected') end table.insert(navlist, navcenter(i, catlink)) else --either out-of-range (hide), or non-temporal + BC = something might be wrong (2nd X parliament BC?); handle exceptions if/as they arise table.insert(navlist, hidden) end i = i + 1 end navo = navo..horizontal(navlist)..'\n' isolatedcat() if listall then return listalllinks() else return navo..'&lt;/div>' end end --[[========================={{ nav_wordinal }}=============================]] local function nav_wordinal( frame, firstpart, word, lastpart, minimumword, maximumword, ordinal, frame ) --Module:ConvertNumeric.spell_number2() args: -- ordinal == true : 'second' is output instead of 'two' -- ordinal == false: 'two' is output instead of 'second' local ord2eng = require('Module:ConvertNumeric').spell_number2 local eng2ord = require('Module:ConvertNumeric').english_to_ordinal local th = 'th' if not ordinal then th = '' eng2ord = require('Module:ConvertNumeric').english_to_numeral end local capitalize = nil ~= string.match(word, '^%u') --determine capitalization local nord = eng2ord(string.lower(word)) --operate on/with lowercase, and restore any capitalization later local lspace = ' ' --assume a leading space (most common) local tspace = ' ' --assume a trailing space (most common) if string.match(firstpart, '[%-%(]$') then lspace = '' end --DNE for "Straight-eight engines"-type cats if string.match(lastpart, '^[%-%)]' ) then tspace = '' end --DNE for "Nine-cylinder engines"-type cats --sterilize min/max local maxword_default = 99 local maxword = maxword_default local minword = 1 if minimumword then local num = tonumber(minimumword) if num and 0 &lt; num and num &lt; maxword then minword = num else local ord = eng2ord(minimumword) if 0 &lt; ord and ord &lt; maxword then minword = ord end end end if maximumword then local num = tonumber(maximumword) if num and 0 &lt; num and num &lt; maxword then maxword = num else local ord = eng2ord(maximumword) if 0 &lt; ord and ord &lt; maxword then maxword = ord end end end if minword > nord then minword = nord end if maxword &lt; nord then maxword = nord end --determine max existing cat local listoverride = true local n_max = nord local m = 1 while m &lt;= 5 do local n = nord + m local nth = p.addord(n) if not ordinal then nth = n end local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize } local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth, nil, listoverride ) if catlink.catexists then n_max = n end m = m + 1 end --begin navwordinal local navw = '&lt;div class="toccolours categorySeriesNavigation-range">\n' local navlist = {} local prepad = '' local i = -5 --nav position while i &lt;= 5 do local n = nord + i if n >= 1 then local nth = p.addord(n) if not ordinal then nth = n end if i ~= 0 then --left/right navw local w = ord2eng{ num = n, ordinal = ordinal, capitalize = capitalize } local catlink = catlinkfollowr( frame, firstpart..lspace..w..tspace..lastpart, nth ) if minword &lt;= n and n &lt;= maxword then if catlink.rtarget then --a {{Category redirect}} was followed trackcat(24, 'Category series navigation wordinal redirected') end if n &lt;= n_max or maxword ~= maxword_default then table.insert(navlist, prepad..catlink.navelement) --display normally prepad = '' else local postpad = '&lt;span style="visibility:hidden"> • '..nth..'&lt;/span>' navlist[#navlist] = (navlist[#navlist] or '')..postpad if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end end else local postpad = '&lt;span style="visibility:hidden"> • '..nth..'&lt;/span>' navlist[#navlist] = (navlist[#navlist] or '')..postpad if listall then tlistall[#tlistall] = tlistall[#tlistall]..' ('..postpad..')' end end else --center navw table.insert(navlist, prepad..'&lt;b>'..nth..'&lt;/b>') prepad = '' end else --n &lt; 1 prepad = prepad..'&lt;span style="visibility:hidden"> • '..'0'..th..'&lt;/span>' if listall then tlistall[#tlistall] = (tlistall[#tlistall] or '')..' (x)' end end i = i + 1 end -- Add the list navw = navw..horizontal(navlist)..'\n' isolatedcat() if listall then return listalllinks() else return navw..'&lt;/div>' end end --[[==========================={{ find_var }}===============================]] local function find_var( pn ) --Extracts the variable text (e.g. 2015, 2015–16, 2000s, 3rd, III, etc.) from a string, --and returns { ['vtype'] = &lt;'year'|'season'|etc.>, &lt;v> = &lt;2015|2015–16|etc.> } local pagename = currtitle.text if pn and pn ~= '' then pagename = pn end local cpagename = 'Category:'..pagename --limited-Lua-regex workaround local d_season = mw.ustring.match(cpagename, ':(%d+s).+%(%d+[–-]%d+%)') --i.e. "1760s in the Province of Quebec (1763–1791)" local y_season = mw.ustring.match(cpagename, ':(%d+) .+%(%d+[–-]%d+%)') --i.e. "1763 establishments in the Province of Quebec (1763–1791)" local e_season = mw.ustring.match(cpagename, '%s(%d+[–-])$') or --irreg; ending unknown, e.g. "Members of the Scottish Parliament 2021–" mw.ustring.match(cpagename, '%s(%d+[–-]present)$') --e.g. "UK MPs 2019–present" local season = mw.ustring.match(cpagename, '[:%s%(](%d+[–-]%d+)[%)%s]') or --split in 2 b/c you can't frontier '$'/eos? mw.ustring.match(cpagename, '[:%s](%d+[–-]%d+)$') local tvseason = mw.ustring.match(cpagename, 'season (%d+)') or mw.ustring.match(cpagename, 'series (%d+)') local nordinal = mw.ustring.match(cpagename, '[:%s](%d+[snrt][tdh])[-%s]') or mw.ustring.match(cpagename, '[:%s](%d+[snrt][tdh])$') local decade = mw.ustring.match(cpagename, '[:%s](%d+s)[%s-]') or mw.ustring.match(cpagename, '[:%s](%d+s)$') local year = mw.ustring.match(cpagename, '[:%s](%d%d%d%d)%s') or --prioritize 4-digit years mw.ustring.match(cpagename, '[:%s](%d%d%d%d)$') or mw.ustring.match(cpagename, '[:%s](%d+)%s') or mw.ustring.match(cpagename, '[:%s](%d+)$') or --expand/combine exceptions below as needed mw.ustring.match(cpagename, '[:%s](%d+)-related') or mw.ustring.match(cpagename, '[:%s](%d+)-cylinder') or mw.ustring.match(cpagename, '[:%-VW](%d+)%s') --e.g. "Straight-8 engines" local roman = mw.ustring.match(cpagename, '%s([IVXLCDM]+)%s') local found = d_season or y_season or e_season or season or tvseason or nordinal or decade or year or roman if found then if string.match(found, '%d%d%d%d%d') == nil then --return in order of decreasing complexity/chance for duplication if nordinal and season --i.e. "18th-century establishments in the Province of Quebec (1763–1791)" then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end if d_season then return { ['vtype'] = 'decade', ['v'] = d_season } end if y_season then return { ['vtype'] = 'year', ['v'] = y_season } end if e_season then return { ['vtype'] = 'ending', ['v'] = e_season } end if season then return { ['vtype'] = 'season', ['v'] = season } end if tvseason then return { ['vtype'] = 'tvseason', ['v'] = tvseason } end if nordinal then return { ['vtype'] = 'nordinal', ['v'] = nordinal } end if decade then return { ['vtype'] = 'decade', ['v'] = decade } end if year then return { ['vtype'] = 'year', ['v'] = year } end if roman then return { ['vtype'] = 'roman', ['v'] = roman } end end else --try wordinals ('zeroth' to 'ninety-ninth' only) local eng2ord = require('Module:ConvertNumeric').english_to_ordinal local split = mw.text.split(pagename, ' ') for i=1, #split do if eng2ord(split[i]) > -1 then return { ['vtype'] = 'wordinal', ['v'] = split[i] } end end --try English numerics ('one'/'single' to 'ninety-nine' only) local eng2num = require('Module:ConvertNumeric').english_to_numeral local split = mw.text.split(pagename, '[%s%-]') --e.g. "Nine-cylinder engines" for i=1, #split do if eng2num(split[i]) > -1 then return { ['vtype'] = 'enumeric', ['v'] = split[i] } end end end errors = p.errorclass('Function find_var can\'t find the variable text in category "'..pagename..'".') return { ['vtype'] = 'error', ['v'] = p.failedcat(errors, 'V') } end --[[==========================================================================]] --[[ Main ]] --[[==========================================================================]] function p.csn( frame ) --arg checks &amp; handling local args = frame:getParent().args checkforunknownparams(args) --for template args checkforunknownparams(frame.args) --for #invoke'd args local cat = args['cat'] --'testcase' alias for catspace local list = args['list-all-links'] --debugging utility to output all links &amp; followed #Rs local follow = args['follow-redirects'] --default 'yes' local testcase = args['testcase'] local testcasegap = args['testcasegap'] local minimum = args['min'] local maximum = args['max'] local skip_gaps = args['skip-gaps'] local show = args['show'] if show and show ~= '' then if show == 'skip-gaps' then return skipgaps_limit elseif show == 'term-limit' then return term_limit elseif show == 'hgap-limit' then return hgap_limit elseif show == 'ygap-limit' then return ygap_limit end end --apply args local pagename = testcase or cat or currtitle.text local testcaseindent = '' if testcasecolon == ':' then testcaseindent = '\n::' end if follow and follow == 'no' then followRs = false end if list and list == 'yes' then listall = true end if skip_gaps and skip_gaps == 'yes' then skipgaps = true trackcat(26, 'Category series navigation using skip-gaps parameter') end --ns checks if currtitle.nsText == 'Category' then if cat and cat ~= '' then trackcat(1, 'Category series navigation using cat parameter') end if testcase and testcase ~= '' then trackcat(2, 'Category series navigation using testcase parameter') end elseif currtitle.nsText == '' then trackcat(30, 'Category series navigation in mainspace') end --find the variable parts of pagename local findvar = find_var(pagename) if findvar.vtype == 'error' then --basic format error checking in find_var() return findvar.v..table.concat(ttrackingcats) end local start = string.match(findvar.v, '^%d+') --the rest is static local findvar_escaped = string.gsub( findvar.v, '%-', '%%%-') local firstpart, lastpart = string.match(pagename, '^(.-)'..findvar_escaped..'(.*)$') if findvar.vtype == 'tvseason' then --double check for cases like "30 Rock (season 3) episodes" firstpart, lastpart = string.match(pagename, '^(.-season )'..findvar_escaped..'(.*)$') if firstpart == nil then firstpart, lastpart = string.match(pagename, '^(.-series )'..findvar_escaped..'(.*)$') end end firstpart = mw.text.trim(firstpart or '') lastpart = mw.text.trim(lastpart or '') --call the appropriate nav function, in order of decreasing popularity if findvar.vtype == 'year' then --e.g. "500", "2001"; nav_year..nav_decade; ~75% of cats local nav1 = nav_year( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) local dec = math.floor(findvar.v/10) local decadecat = nil local firstpart_dec = firstpart if firstpart_dec ~= '' then firstpart_dec = firstpart_dec..' the' elseif firstpart_dec == 'AD' and dec &lt;= 1 then firstpart_dec = '' if dec == 0 then dec = '' end end local decade = dec..'0s ' decadecat = mw.text.trim( firstpart_dec..' '..decade..lastpart ) local exists = catexists(decadecat) if exists then navborder = false trackcat(28, 'Category series navigation year and decade') local nav2 = nav_decade( frame, firstpart_dec, decade, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) return wrap( nav1, nav2 ) elseif ttrackingcats[16] ~= '' then --nav_year isolated; check nav_hyphen (e.g. UK MPs 1974, Moldovan MPs 2009, etc.) local hyphen = '–' local finish = start local nav2 = nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) if ttrackingcats[16] ~= '' then return wrap( nav1 ) --still isolated; rv to nav_year else return wrap( nav2 ) end else --regular nav_year return wrap( nav1 ) end elseif findvar.vtype == 'decade' then --e.g. "0s", "2010s"; nav_decade..nav_nordinal; ~12% of cats local nav1 = nav_decade( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) local decade = tonumber(string.match(findvar.v, '^(%d+)s')) local century = math.floor( ((decade-1)/100) + 1 ) --from {{CENTURY}} if century == 0 then century = 1 end --no 0th century if string.match(decade, '00$') then century = century + 1 --'2000' is in the 20th, but the rest of the 2000s is in the 21st end local clastpart = ' century '..lastpart local centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart ) local exists = catexists(centurycat) if not exists then --check for hyphenated century clastpart = '-century '..lastpart centurycat = mw.text.trim( firstpart..' '..p.addord(century)..clastpart ) exists = catexists(centurycat) end if exists then navborder = false trackcat(29, 'Category series navigation decade and century') local nav2 = nav_nordinal( frame, firstpart, century, clastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) return wrap( nav1, nav2 ) else return wrap( nav1 ) end elseif findvar.vtype == 'nordinal' then --e.g. "1st", "99th"; ~7.5% of cats return wrap( nav_nordinal( frame, firstpart, start, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) ) elseif findvar.vtype == 'season' then --e.g. "1–4", "1999–2000", "2001–02", "2001–2002", "2005–2010", etc.; ~5.25% local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])(%d+)') --ascii 150 &amp; 45 (ndash &amp; keyboard hyphen); mw req'd return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) ) elseif findvar.vtype == 'tvseason' then --e.g. "1", "15" but preceded with "season" or "series"; &lt;1% of cats return wrap( nav_tvseason( frame, firstpart, start, lastpart, maximum )..testcaseindent..table.concat(ttrackingcats) ) --"minimum" defaults to 1 elseif findvar.vtype == 'wordinal' then --e.g. "first", "ninety-ninth"; &lt;&lt;1% of cats local ordinal = true return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) ) elseif findvar.vtype == 'enumeric' then --e.g. "one", "ninety-nine"; &lt;&lt;1% of cats local ordinal = false return wrap( nav_wordinal( frame, firstpart, findvar.v, lastpart, minimum, maximum, ordinal, frame )..testcaseindent..table.concat(ttrackingcats) ) elseif findvar.vtype == 'roman' then --e.g. "I", "XXVIII"; &lt;&lt;1% of cats return wrap( nav_roman( frame, firstpart, findvar.v, lastpart, minimum, maximum )..testcaseindent..table.concat(ttrackingcats) ) elseif findvar.vtype == 'ending' then --e.g. "2021–" (irregular; ending unknown); &lt;&lt;&lt;1% of cats local hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])present$'), -1 --ascii 150 &amp; 45 (ndash &amp; keyboard hyphen); mw req'd if hyphen == nil then hyphen, finish = mw.ustring.match(findvar.v, '%d([–-])$'), 0 --0/-1 are hardcoded switches for nav_hyphen() end return wrap( nav_hyphen( frame, start, hyphen, finish, firstpart, lastpart, minimum, maximum, testcasegap )..testcaseindent..table.concat(ttrackingcats) ) else --malformed errors = p.errorclass('Failed to determine the appropriate nav function from malformed season "'..findvar.v..'". ') return p.failedcat(errors, 'N')..table.concat(ttrackingcats) end end return p </textarea><div id="mw-scribunto-console"></div><div class="templatesUsed"><div class="mw-templatesUsedExplanation"><p><span id="templatesused">Pages transcluded onto the current version of this page<span class="posteditwindowhelplinks"> (<a href="/wiki/Help:Transclusion" title="Help:Transclusion">help</a>)</span>:</span> </p></div><ul> <li><a href="/wiki/Template:C" class="mw-redirect" title="Template:C">Template:C</a> (<a href="/w/index.php?title=Template:C&amp;action=edit" class="mw-redirect" title="Template:C">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Category_link_with_count" title="Template:Category link with count">Template:Category link with count</a> (<a href="/w/index.php?title=Template:Category_link_with_count&amp;action=edit" title="Template:Category link with count">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Category_link_without_namespace" title="Template:Category link without namespace">Template:Category link without namespace</a> (<a href="/w/index.php?title=Template:Category_link_without_namespace&amp;action=edit" title="Template:Category link without namespace">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Category_series_navigation" title="Template:Category series navigation">Template:Category series navigation</a> (<a href="/w/index.php?title=Template:Category_series_navigation&amp;action=edit" title="Template:Category series navigation">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Category_series_navigation/doc" title="Template:Category series navigation/doc">Template:Category series navigation/doc</a> (<a href="/w/index.php?title=Template:Category_series_navigation/doc&amp;action=edit" title="Template:Category series navigation/doc">edit</a>) </li><li><a href="/wiki/Template:Clear" title="Template:Clear">Template:Clear</a> (<a href="/w/index.php?title=Template:Clear&amp;action=edit" title="Template:Clear">view source</a>) (protected)</li><li><a href="/wiki/Template:Column" title="Template:Column">Template:Column</a> (<a href="/w/index.php?title=Template:Column&amp;action=edit" title="Template:Column">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Column/styles.css" title="Template:Column/styles.css">Template:Column/styles.css</a> (<a href="/w/index.php?title=Template:Column/styles.css&amp;action=edit" title="Template:Column/styles.css">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Columns-end" title="Template:Columns-end">Template:Columns-end</a> (<a href="/w/index.php?title=Template:Columns-end&amp;action=edit" title="Template:Columns-end">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Columns-start" title="Template:Columns-start">Template:Columns-start</a> (<a href="/w/index.php?title=Template:Columns-start&amp;action=edit" title="Template:Columns-start">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Documentation_subpage" title="Template:Documentation subpage">Template:Documentation subpage</a> (<a href="/w/index.php?title=Template:Documentation_subpage&amp;action=edit" title="Template:Documentation subpage">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Endplainlist" title="Template:Endplainlist">Template:Endplainlist</a> (<a href="/w/index.php?title=Template:Endplainlist&amp;action=edit" title="Template:Endplainlist">view source</a>) (protected)</li><li><a href="/wiki/Template:High-use" title="Template:High-use">Template:High-use</a> (<a href="/w/index.php?title=Template:High-use&amp;action=edit" title="Template:High-use">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Hlist/styles.css" title="Template:Hlist/styles.css">Template:Hlist/styles.css</a> (<a href="/w/index.php?title=Template:Hlist/styles.css&amp;action=edit" title="Template:Hlist/styles.css">view source</a>) (protected)</li><li><a href="/wiki/Template:Lua" title="Template:Lua">Template:Lua</a> (<a href="/w/index.php?title=Template:Lua&amp;action=edit" title="Template:Lua">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Lua_sidebar" title="Template:Lua sidebar">Template:Lua sidebar</a> (<a href="/w/index.php?title=Template:Lua_sidebar&amp;action=edit" title="Template:Lua sidebar">edit</a>) </li><li><a href="/wiki/Template:Lua_sidebar/styles.css" title="Template:Lua sidebar/styles.css">Template:Lua sidebar/styles.css</a> (<a href="/w/index.php?title=Template:Lua_sidebar/styles.css&amp;action=edit" title="Template:Lua sidebar/styles.css">edit</a>) </li><li><a href="/wiki/Template:Nowrap" title="Template:Nowrap">Template:Nowrap</a> (<a href="/w/index.php?title=Template:Nowrap&amp;action=edit" title="Template:Nowrap">view source</a>) (protected)</li><li><a href="/wiki/Template:Para" title="Template:Para">Template:Para</a> (<a href="/w/index.php?title=Template:Para&amp;action=edit" title="Template:Para">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Plainlist" title="Template:Plainlist">Template:Plainlist</a> (<a href="/w/index.php?title=Template:Plainlist&amp;action=edit" title="Template:Plainlist">view source</a>) (protected)</li><li><a href="/wiki/Template:Plainlist/styles.css" title="Template:Plainlist/styles.css">Template:Plainlist/styles.css</a> (<a href="/w/index.php?title=Template:Plainlist/styles.css&amp;action=edit" title="Template:Plainlist/styles.css">view source</a>) (protected)</li><li><a href="/wiki/Template:Purge" title="Template:Purge">Template:Purge</a> (<a href="/w/index.php?title=Template:Purge&amp;action=edit" title="Template:Purge">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Sandbox_other" title="Template:Sandbox other">Template:Sandbox other</a> (<a href="/w/index.php?title=Template:Sandbox_other&amp;action=edit" title="Template:Sandbox other">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Sidebar" title="Template:Sidebar">Template:Sidebar</a> (<a href="/w/index.php?title=Template:Sidebar&amp;action=edit" title="Template:Sidebar">view source</a>) (template editor protected)</li><li><a href="/wiki/Template:Template_link" title="Template:Template link">Template:Template link</a> (<a href="/w/index.php?title=Template:Template_link&amp;action=edit" title="Template:Template link">view source</a>) (protected)</li><li><a href="/wiki/Template:Tl" class="mw-redirect" title="Template:Tl">Template:Tl</a> (<a href="/w/index.php?title=Template:Tl&amp;action=edit" class="mw-redirect" title="Template:Tl">view source</a>) (protected)</li><li><a href="/wiki/Category:10th_Lok_Sabha" title="Category:10th Lok Sabha">Category:10th Lok Sabha</a> (<a href="/w/index.php?title=Category:10th_Lok_Sabha&amp;action=edit" title="Category:10th Lok Sabha">edit</a>) </li><li><a href="/wiki/Category:11th_Lok_Sabha" title="Category:11th Lok Sabha">Category:11th Lok Sabha</a> (<a href="/w/index.php?title=Category:11th_Lok_Sabha&amp;action=edit" title="Category:11th Lok Sabha">edit</a>) </li><li><a href="/wiki/Category:12th_Lok_Sabha" title="Category:12th Lok Sabha">Category:12th Lok Sabha</a> (<a href="/w/index.php?title=Category:12th_Lok_Sabha&amp;action=edit" title="Category:12th Lok Sabha">edit</a>) </li><li><a href="/wiki/Category:13th_Lok_Sabha" title="Category:13th Lok Sabha">Category:13th Lok Sabha</a> (<a href="/w/index.php?title=Category:13th_Lok_Sabha&amp;action=edit" title="Category:13th Lok Sabha">edit</a>) </li><li><a href="/wiki/Category:14th_Lok_Sabha" title="Category:14th Lok Sabha">Category:14th Lok Sabha</a> (<a href="/w/index.php?title=Category:14th_Lok_Sabha&amp;action=edit" title="Category:14th Lok Sabha">edit</a>) </li><li><a href="/wiki/Category:15th_century_in_Scotland" title="Category:15th century in Scotland">Category:15th century in Scotland</a> (<a href="/w/index.php?title=Category:15th_century_in_Scotland&amp;action=edit" title="Category:15th century in Scotland">edit</a>) </li><li><a href="/wiki/Category:16th_century_in_Scotland" title="Category:16th century in Scotland">Category:16th century in Scotland</a> (<a href="/w/index.php?title=Category:16th_century_in_Scotland&amp;action=edit" title="Category:16th century in Scotland">edit</a>) </li><li><a href="/wiki/Category:1760s_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1760s establishments in the Province of Quebec (1763–1791)">Category:1760s establishments in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1760s_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1760s establishments in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1760s_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1760s in the Province of Quebec (1763–1791)">Category:1760s in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1760s_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1760s in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1770s_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1770s establishments in the Province of Quebec (1763–1791)">Category:1770s establishments in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1770s_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1770s establishments in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1770s_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1770s in the Province of Quebec (1763–1791)">Category:1770s in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1770s_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1770s in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1774_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1774 establishments in the Province of Quebec (1763–1791)">Category:1774 establishments in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1774_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1774 establishments in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1779_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1779 establishments in the Province of Quebec (1763–1791)">Category:1779 establishments in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1779_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1779 establishments in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1780s_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1780s establishments in the Province of Quebec (1763–1791)">Category:1780s establishments in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1780s_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1780s establishments in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1780s_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1780s in the Province of Quebec (1763–1791)">Category:1780s in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1780s_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1780s in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1781_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1781 establishments in the Province of Quebec (1763–1791)">Category:1781 establishments in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1781_establishments_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1781 establishments in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:1790s_in_the_Province_of_Quebec_(1763%E2%80%931791)" title="Category:1790s in the Province of Quebec (1763–1791)">Category:1790s in the Province of Quebec (1763–1791)</a> (<a href="/w/index.php?title=Category:1790s_in_the_Province_of_Quebec_(1763%E2%80%931791)&amp;action=edit" title="Category:1790s in the Province of Quebec (1763–1791)">edit</a>) </li><li><a href="/wiki/Category:17th_century_in_Scotland" title="Category:17th century in Scotland">Category:17th century in Scotland</a> (<a href="/w/index.php?title=Category:17th_century_in_Scotland&amp;action=edit" title="Category:17th century in Scotland">edit</a>) </li><li><a href="/wiki/Category:18th_century_in_Scotland" title="Category:18th century in Scotland">Category:18th century in Scotland</a> (<a href="/w/index.php?title=Category:18th_century_in_Scotland&amp;action=edit" title="Category:18th century in Scotland">edit</a>) </li><li><a href="/wiki/Category:1940s_in_Scotland" title="Category:1940s in Scotland">Category:1940s in Scotland</a> (<a href="/w/index.php?title=Category:1940s_in_Scotland&amp;action=edit" title="Category:1940s in Scotland">edit</a>) </li><li><a href="/wiki/Category:1950s_in_Scotland" title="Category:1950s in Scotland">Category:1950s in Scotland</a> (<a href="/w/index.php?title=Category:1950s_in_Scotland&amp;action=edit" title="Category:1950s in Scotland">edit</a>) </li><li><a href="/wiki/Category:1960s_in_Scotland" title="Category:1960s in Scotland">Category:1960s in Scotland</a> (<a href="/w/index.php?title=Category:1960s_in_Scotland&amp;action=edit" title="Category:1960s in Scotland">edit</a>) </li><li><a href="/wiki/Category:1970s_in_Scotland" title="Category:1970s in Scotland">Category:1970s in Scotland</a> (<a href="/w/index.php?title=Category:1970s_in_Scotland&amp;action=edit" title="Category:1970s in Scotland">edit</a>) </li><li><a href="/wiki/Category:1980s_in_Scotland" title="Category:1980s in Scotland">Category:1980s in Scotland</a> (<a href="/w/index.php?title=Category:1980s_in_Scotland&amp;action=edit" title="Category:1980s in Scotland">edit</a>) </li><li><a href="/wiki/Category:1990s_in_Scotland" title="Category:1990s in Scotland">Category:1990s in Scotland</a> (<a href="/w/index.php?title=Category:1990s_in_Scotland&amp;action=edit" title="Category:1990s in Scotland">edit</a>) </li><li><a href="/wiki/Category:1994_in_Scotland" title="Category:1994 in Scotland">Category:1994 in Scotland</a> (<a href="/w/index.php?title=Category:1994_in_Scotland&amp;action=edit" title="Category:1994 in Scotland">edit</a>) </li><li><a href="/wiki/Category:1995_in_Scotland" title="Category:1995 in Scotland">Category:1995 in Scotland</a> (<a href="/w/index.php?title=Category:1995_in_Scotland&amp;action=edit" title="Category:1995 in Scotland">edit</a>) </li><li><a href="/wiki/Category:1996_in_Scotland" title="Category:1996 in Scotland">Category:1996 in Scotland</a> (<a href="/w/index.php?title=Category:1996_in_Scotland&amp;action=edit" title="Category:1996 in Scotland">edit</a>) </li><li><a href="/wiki/Category:1997_in_Scotland" title="Category:1997 in Scotland">Category:1997 in Scotland</a> (<a href="/w/index.php?title=Category:1997_in_Scotland&amp;action=edit" title="Category:1997 in Scotland">edit</a>) </li><li><a href="/wiki/Category:1997%E2%80%9398_FA_Cup" title="Category:1997–98 FA Cup">Category:1997–98 FA Cup</a> (<a href="/w/index.php?title=Category:1997%E2%80%9398_FA_Cup&amp;action=edit" title="Category:1997–98 FA Cup">edit</a>) </li><li><a href="/wiki/Category:1998_in_Scotland" title="Category:1998 in Scotland">Category:1998 in Scotland</a> (<a href="/w/index.php?title=Category:1998_in_Scotland&amp;action=edit" title="Category:1998 in Scotland">edit</a>) </li><li><a href="/wiki/Category:1998%E2%80%9399_FA_Cup" title="Category:1998–99 FA Cup">Category:1998–99 FA Cup</a> (<a href="/w/index.php?title=Category:1998%E2%80%9399_FA_Cup&amp;action=edit" title="Category:1998–99 FA Cup">edit</a>) </li><li><a href="/wiki/Category:1999%E2%80%932000_FA_Cup" title="Category:1999–2000 FA Cup">Category:1999–2000 FA Cup</a> (<a href="/w/index.php?title=Category:1999%E2%80%932000_FA_Cup&amp;action=edit" title="Category:1999–2000 FA Cup">edit</a>) </li><li><a href="/wiki/Category:19th_century_in_Scotland" title="Category:19th century in Scotland">Category:19th century in Scotland</a> (<a href="/w/index.php?title=Category:19th_century_in_Scotland&amp;action=edit" title="Category:19th century in Scotland">edit</a>) </li><li><a href="/wiki/Category:1st-century_BCE_rabbis" title="Category:1st-century BCE rabbis">Category:1st-century BCE rabbis</a> (<a href="/w/index.php?title=Category:1st-century_BCE_rabbis&amp;action=edit" title="Category:1st-century BCE rabbis">edit</a>) </li><li><a href="/wiki/Category:1st-century_rabbis" title="Category:1st-century rabbis">Category:1st-century rabbis</a> (<a href="/w/index.php?title=Category:1st-century_rabbis&amp;action=edit" title="Category:1st-century rabbis">edit</a>) </li><li><a href="/wiki/Category:2000_in_Scotland" title="Category:2000 in Scotland">Category:2000 in Scotland</a> (<a href="/w/index.php?title=Category:2000_in_Scotland&amp;action=edit" title="Category:2000 in Scotland">edit</a>) </li><li><a href="/wiki/Category:2000s_in_Scotland" title="Category:2000s in Scotland">Category:2000s in Scotland</a> (<a href="/w/index.php?title=Category:2000s_in_Scotland&amp;action=edit" title="Category:2000s in Scotland">edit</a>) </li><li><a href="/wiki/Category:2000%E2%80%9301_FA_Cup" title="Category:2000–01 FA Cup">Category:2000–01 FA Cup</a> (<a href="/w/index.php?title=Category:2000%E2%80%9301_FA_Cup&amp;action=edit" title="Category:2000–01 FA Cup">edit</a>) </li><li><a href="/wiki/Category:2001_in_Scotland" title="Category:2001 in Scotland">Category:2001 in Scotland</a> (<a href="/w/index.php?title=Category:2001_in_Scotland&amp;action=edit" title="Category:2001 in Scotland">edit</a>) </li><li><a href="/wiki/Category:2002_in_Scotland" title="Category:2002 in Scotland">Category:2002 in Scotland</a> (<a href="/w/index.php?title=Category:2002_in_Scotland&amp;action=edit" title="Category:2002 in Scotland">edit</a>) </li><li><a href="/wiki/Category:2002%E2%80%9303_FA_Cup" title="Category:2002–03 FA Cup">Category:2002–03 FA Cup</a> (<a href="/w/index.php?title=Category:2002%E2%80%9303_FA_Cup&amp;action=edit" title="Category:2002–03 FA Cup">edit</a>) </li><li><a href="/wiki/Category:2003_in_Scotland" title="Category:2003 in Scotland">Category:2003 in Scotland</a> (<a href="/w/index.php?title=Category:2003_in_Scotland&amp;action=edit" title="Category:2003 in Scotland">edit</a>) </li><li><a href="/wiki/Category:2003%E2%80%9304_FA_Cup" title="Category:2003–04 FA Cup">Category:2003–04 FA Cup</a> (<a href="/w/index.php?title=Category:2003%E2%80%9304_FA_Cup&amp;action=edit" title="Category:2003–04 FA Cup">edit</a>) </li><li><a href="/wiki/Category:2004_in_Scotland" title="Category:2004 in Scotland">Category:2004 in Scotland</a> (<a href="/w/index.php?title=Category:2004_in_Scotland&amp;action=edit" title="Category:2004 in Scotland">edit</a>) </li><li><a href="/wiki/Category:2004%E2%80%9305_FA_Cup" title="Category:2004–05 FA Cup">Category:2004–05 FA Cup</a> (<a href="/w/index.php?title=Category:2004%E2%80%9305_FA_Cup&amp;action=edit" title="Category:2004–05 FA Cup">edit</a>) </li><li><a href="/wiki/Category:2005%E2%80%9306_FA_Cup" title="Category:2005–06 FA Cup">Category:2005–06 FA Cup</a> (<a href="/w/index.php?title=Category:2005%E2%80%9306_FA_Cup&amp;action=edit" title="Category:2005–06 FA Cup">edit</a>) </li><li><a href="/wiki/Category:2010s_in_Scotland" title="Category:2010s in Scotland">Category:2010s in Scotland</a> (<a href="/w/index.php?title=Category:2010s_in_Scotland&amp;action=edit" title="Category:2010s in Scotland">edit</a>) </li><li><a href="/wiki/Category:2020s_in_Scotland" title="Category:2020s in Scotland">Category:2020s in Scotland</a> (<a href="/w/index.php?title=Category:2020s_in_Scotland&amp;action=edit" title="Category:2020s in Scotland">edit</a>) </li><li><a href="/wiki/Category:20th_century_in_Scotland" title="Category:20th century in Scotland">Category:20th century in Scotland</a> (<a href="/w/index.php?title=Category:20th_century_in_Scotland&amp;action=edit" title="Category:20th century in Scotland">edit</a>) </li><li><a href="/wiki/Category:21st_century_in_Scotland" title="Category:21st century in Scotland">Category:21st century in Scotland</a> (<a href="/w/index.php?title=Category:21st_century_in_Scotland&amp;action=edit" title="Category:21st century in Scotland">edit</a>) </li><li><a href="/wiki/Category:2nd-century_BCE_rabbis" title="Category:2nd-century BCE rabbis">Category:2nd-century BCE rabbis</a> (<a href="/w/index.php?title=Category:2nd-century_BCE_rabbis&amp;action=edit" title="Category:2nd-century BCE rabbis">edit</a>) </li><li><a href="/wiki/Category:2nd-century_rabbis" title="Category:2nd-century rabbis">Category:2nd-century rabbis</a> (<a href="/w/index.php?title=Category:2nd-century_rabbis&amp;action=edit" title="Category:2nd-century rabbis">edit</a>) </li><li><a href="/wiki/Category:3rd-century_BCE_rabbis" title="Category:3rd-century BCE rabbis">Category:3rd-century BCE rabbis</a> (<a href="/w/index.php?title=Category:3rd-century_BCE_rabbis&amp;action=edit" title="Category:3rd-century BCE rabbis">edit</a>) </li><li><a href="/wiki/Category:3rd-century_rabbis" title="Category:3rd-century rabbis">Category:3rd-century rabbis</a> (<a href="/w/index.php?title=Category:3rd-century_rabbis&amp;action=edit" title="Category:3rd-century rabbis">edit</a>) </li><li><a href="/wiki/Category:4th-century_rabbis" title="Category:4th-century rabbis">Category:4th-century rabbis</a> (<a href="/w/index.php?title=Category:4th-century_rabbis&amp;action=edit" title="Category:4th-century rabbis">edit</a>) </li><li><a href="/wiki/Category:5th-century_rabbis" title="Category:5th-century rabbis">Category:5th-century rabbis</a> (<a href="/w/index.php?title=Category:5th-century_rabbis&amp;action=edit" title="Category:5th-century rabbis">edit</a>) </li><li><a href="/wiki/Category:6th-century_rabbis" title="Category:6th-century rabbis">Category:6th-century rabbis</a> (<a href="/w/index.php?title=Category:6th-century_rabbis&amp;action=edit" title="Category:6th-century rabbis">edit</a>) </li><li><a href="/wiki/Category:7th-century_rabbis" title="Category:7th-century rabbis">Category:7th-century rabbis</a> (<a href="/w/index.php?title=Category:7th-century_rabbis&amp;action=edit" title="Category:7th-century rabbis">edit</a>) </li><li><a href="/wiki/Category:9th_Lok_Sabha" title="Category:9th Lok Sabha">Category:9th Lok Sabha</a> (<a href="/w/index.php?title=Category:9th_Lok_Sabha&amp;action=edit" title="Category:9th Lok Sabha">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1836" title="Category:Amusement parks opened in 1836">Category:Amusement parks opened in 1836</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1836&amp;action=edit" title="Category:Amusement parks opened in 1836">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1843" title="Category:Amusement parks opened in 1843">Category:Amusement parks opened in 1843</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1843&amp;action=edit" title="Category:Amusement parks opened in 1843">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1846" title="Category:Amusement parks opened in 1846">Category:Amusement parks opened in 1846</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1846&amp;action=edit" title="Category:Amusement parks opened in 1846">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1847" title="Category:Amusement parks opened in 1847">Category:Amusement parks opened in 1847</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1847&amp;action=edit" title="Category:Amusement parks opened in 1847">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1870" title="Category:Amusement parks opened in 1870">Category:Amusement parks opened in 1870</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1870&amp;action=edit" title="Category:Amusement parks opened in 1870">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1879" title="Category:Amusement parks opened in 1879">Category:Amusement parks opened in 1879</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1879&amp;action=edit" title="Category:Amusement parks opened in 1879">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1880" title="Category:Amusement parks opened in 1880">Category:Amusement parks opened in 1880</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1880&amp;action=edit" title="Category:Amusement parks opened in 1880">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1883" title="Category:Amusement parks opened in 1883">Category:Amusement parks opened in 1883</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1883&amp;action=edit" title="Category:Amusement parks opened in 1883">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1885" title="Category:Amusement parks opened in 1885">Category:Amusement parks opened in 1885</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1885&amp;action=edit" title="Category:Amusement parks opened in 1885">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_1888" title="Category:Amusement parks opened in 1888">Category:Amusement parks opened in 1888</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_1888&amp;action=edit" title="Category:Amusement parks opened in 1888">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1830s" title="Category:Amusement parks opened in the 1830s">Category:Amusement parks opened in the 1830s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1830s&amp;action=edit" title="Category:Amusement parks opened in the 1830s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1840s" title="Category:Amusement parks opened in the 1840s">Category:Amusement parks opened in the 1840s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1840s&amp;action=edit" title="Category:Amusement parks opened in the 1840s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1870s" title="Category:Amusement parks opened in the 1870s">Category:Amusement parks opened in the 1870s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1870s&amp;action=edit" title="Category:Amusement parks opened in the 1870s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1880s" title="Category:Amusement parks opened in the 1880s">Category:Amusement parks opened in the 1880s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1880s&amp;action=edit" title="Category:Amusement parks opened in the 1880s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1890s" title="Category:Amusement parks opened in the 1890s">Category:Amusement parks opened in the 1890s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1890s&amp;action=edit" title="Category:Amusement parks opened in the 1890s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1900s" title="Category:Amusement parks opened in the 1900s">Category:Amusement parks opened in the 1900s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1900s&amp;action=edit" title="Category:Amusement parks opened in the 1900s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1910s" title="Category:Amusement parks opened in the 1910s">Category:Amusement parks opened in the 1910s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1910s&amp;action=edit" title="Category:Amusement parks opened in the 1910s">edit</a>) </li><li><a href="/wiki/Category:Amusement_parks_opened_in_the_1920s" title="Category:Amusement parks opened in the 1920s">Category:Amusement parks opened in the 1920s</a> (<a href="/w/index.php?title=Category:Amusement_parks_opened_in_the_1920s&amp;action=edit" title="Category:Amusement parks opened in the 1920s">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_1980_United_States_presidential_election" title="Category:Candidates in the 1980 United States presidential election">Category:Candidates in the 1980 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_1980_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 1980 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_1984_United_States_presidential_election" title="Category:Candidates in the 1984 United States presidential election">Category:Candidates in the 1984 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_1984_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 1984 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_1988_United_States_presidential_election" title="Category:Candidates in the 1988 United States presidential election">Category:Candidates in the 1988 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_1988_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 1988 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_1992_United_States_presidential_election" title="Category:Candidates in the 1992 United States presidential election">Category:Candidates in the 1992 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_1992_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 1992 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_1996_United_States_presidential_election" title="Category:Candidates in the 1996 United States presidential election">Category:Candidates in the 1996 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_1996_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 1996 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_2004_United_States_presidential_election" title="Category:Candidates in the 2004 United States presidential election">Category:Candidates in the 2004 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_2004_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 2004 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_2008_United_States_presidential_election" title="Category:Candidates in the 2008 United States presidential election">Category:Candidates in the 2008 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_2008_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 2008 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_2012_United_States_presidential_election" title="Category:Candidates in the 2012 United States presidential election">Category:Candidates in the 2012 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_2012_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 2012 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_2016_United_States_presidential_election" title="Category:Candidates in the 2016 United States presidential election">Category:Candidates in the 2016 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_2016_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 2016 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Candidates_in_the_2020_United_States_presidential_election" title="Category:Candidates in the 2020 United States presidential election">Category:Candidates in the 2020 United States presidential election</a> (<a href="/w/index.php?title=Category:Candidates_in_the_2020_United_States_presidential_election&amp;action=edit" title="Category:Candidates in the 2020 United States presidential election">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_IX_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature IX of the Kingdom of Italy">Category:Deputies of Legislature IX of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_IX_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature IX of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_VIII_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature VIII of the Kingdom of Italy">Category:Deputies of Legislature VIII of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_VIII_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature VIII of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_XIII_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature XIII of the Kingdom of Italy">Category:Deputies of Legislature XIII of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_XIII_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature XIII of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_XII_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature XII of the Kingdom of Italy">Category:Deputies of Legislature XII of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_XII_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature XII of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_XIV_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature XIV of the Kingdom of Italy">Category:Deputies of Legislature XIV of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_XIV_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature XIV of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_XI_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature XI of the Kingdom of Italy">Category:Deputies of Legislature XI of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_XI_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature XI of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Deputies_of_Legislature_XV_of_the_Kingdom_of_Italy" title="Category:Deputies of Legislature XV of the Kingdom of Italy">Category:Deputies of Legislature XV of the Kingdom of Italy</a> (<a href="/w/index.php?title=Category:Deputies_of_Legislature_XV_of_the_Kingdom_of_Italy&amp;action=edit" title="Category:Deputies of Legislature XV of the Kingdom of Italy">edit</a>) </li><li><a href="/wiki/Category:Fifth_Dynasty_of_Egypt" title="Category:Fifth Dynasty of Egypt">Category:Fifth Dynasty of Egypt</a> (<a href="/w/index.php?title=Category:Fifth_Dynasty_of_Egypt&amp;action=edit" title="Category:Fifth Dynasty of Egypt">edit</a>) </li><li><a href="/wiki/Category:Fourth_Dynasty_of_Egypt" title="Category:Fourth Dynasty of Egypt">Category:Fourth Dynasty of Egypt</a> (<a href="/w/index.php?title=Category:Fourth_Dynasty_of_Egypt&amp;action=edit" title="Category:Fourth Dynasty of Egypt">edit</a>) </li><li><a href="/wiki/Category:Futurama_season_2_episodes" title="Category:Futurama season 2 episodes">Category:Futurama season 2 episodes</a> (<a href="/w/index.php?title=Category:Futurama_season_2_episodes&amp;action=edit" title="Category:Futurama season 2 episodes">edit</a>) </li><li><a href="/wiki/Category:Futurama_season_3_episodes" title="Category:Futurama season 3 episodes">Category:Futurama season 3 episodes</a> (<a href="/w/index.php?title=Category:Futurama_season_3_episodes&amp;action=edit" title="Category:Futurama season 3 episodes">edit</a>) </li><li><a href="/wiki/Category:Futurama_season_4_episodes" title="Category:Futurama season 4 episodes">Category:Futurama season 4 episodes</a> (<a href="/w/index.php?title=Category:Futurama_season_4_episodes&amp;action=edit" title="Category:Futurama season 4 episodes">edit</a>) </li><li><a href="/wiki/Category:Futurama_season_5_episodes" title="Category:Futurama season 5 episodes">Category:Futurama season 5 episodes</a> (<a href="/w/index.php?title=Category:Futurama_season_5_episodes&amp;action=edit" title="Category:Futurama season 5 episodes">edit</a>) </li><li><a href="/wiki/Category:Futurama_season_6_episodes" title="Category:Futurama season 6 episodes">Category:Futurama season 6 episodes</a> (<a href="/w/index.php?title=Category:Futurama_season_6_episodes&amp;action=edit" title="Category:Futurama season 6 episodes">edit</a>) </li><li><a href="/wiki/Category:MEPs_1989%E2%80%931994" title="Category:MEPs 1989–1994">Category:MEPs 1989–1994</a> (<a href="/w/index.php?title=Category:MEPs_1989%E2%80%931994&amp;action=edit" title="Category:MEPs 1989–1994">edit</a>) </li><li><a href="/wiki/Category:MEPs_1994%E2%80%931999" title="Category:MEPs 1994–1999">Category:MEPs 1994–1999</a> (<a href="/w/index.php?title=Category:MEPs_1994%E2%80%931999&amp;action=edit" title="Category:MEPs 1994–1999">edit</a>) </li><li><a href="/wiki/Category:MEPs_1999%E2%80%932004" title="Category:MEPs 1999–2004">Category:MEPs 1999–2004</a> (<a href="/w/index.php?title=Category:MEPs_1999%E2%80%932004&amp;action=edit" title="Category:MEPs 1999–2004">edit</a>) </li><li><a href="/wiki/Category:MEPs_2009%E2%80%932014" title="Category:MEPs 2009–2014">Category:MEPs 2009–2014</a> (<a href="/w/index.php?title=Category:MEPs_2009%E2%80%932014&amp;action=edit" title="Category:MEPs 2009–2014">edit</a>) </li><li><a href="/wiki/Category:MEPs_2014%E2%80%932019" title="Category:MEPs 2014–2019">Category:MEPs 2014–2019</a> (<a href="/w/index.php?title=Category:MEPs_2014%E2%80%932019&amp;action=edit" title="Category:MEPs 2014–2019">edit</a>) </li><li><a href="/wiki/Category:MEPs_2019%E2%80%932024" title="Category:MEPs 2019–2024">Category:MEPs 2019–2024</a> (<a href="/w/index.php?title=Category:MEPs_2019%E2%80%932024&amp;action=edit" title="Category:MEPs 2019–2024">edit</a>) </li><li><a href="/wiki/Category:Second_Dynasty_of_Egypt" title="Category:Second Dynasty of Egypt">Category:Second Dynasty of Egypt</a> (<a href="/w/index.php?title=Category:Second_Dynasty_of_Egypt&amp;action=edit" title="Category:Second Dynasty of Egypt">edit</a>) </li><li><a href="/wiki/Category:Sixth_Dynasty_of_Egypt" title="Category:Sixth Dynasty of Egypt">Category:Sixth Dynasty of Egypt</a> (<a href="/w/index.php?title=Category:Sixth_Dynasty_of_Egypt&amp;action=edit" title="Category:Sixth Dynasty of Egypt">edit</a>) </li><li><a href="/wiki/Category:Third_Dynasty_of_Egypt" title="Category:Third Dynasty of Egypt">Category:Third Dynasty of Egypt</a> (<a href="/w/index.php?title=Category:Third_Dynasty_of_Egypt&amp;action=edit" title="Category:Third Dynasty of Egypt">edit</a>) </li><li><a href="/wiki/Category:Wales_AMs_1999%E2%80%932003" title="Category:Wales AMs 1999–2003">Category:Wales AMs 1999–2003</a> (<a href="/w/index.php?title=Category:Wales_AMs_1999%E2%80%932003&amp;action=edit" title="Category:Wales AMs 1999–2003">edit</a>) </li><li><a href="/wiki/Category:Wales_AMs_2007%E2%80%932011" title="Category:Wales AMs 2007–2011">Category:Wales AMs 2007–2011</a> (<a href="/w/index.php?title=Category:Wales_AMs_2007%E2%80%932011&amp;action=edit" title="Category:Wales AMs 2007–2011">edit</a>) </li><li><a href="/wiki/Category:Wales_AMs_2011%E2%80%932016" title="Category:Wales AMs 2011–2016">Category:Wales AMs 2011–2016</a> (<a href="/w/index.php?title=Category:Wales_AMs_2011%E2%80%932016&amp;action=edit" title="Category:Wales AMs 2011–2016">edit</a>) </li><li><a href="/wiki/Category:Wales_AMs_2016%E2%80%932021" title="Category:Wales AMs 2016–2021">Category:Wales AMs 2016–2021</a> (<a href="/w/index.php?title=Category:Wales_AMs_2016%E2%80%932021&amp;action=edit" title="Category:Wales AMs 2016–2021">edit</a>) </li><li><a href="/wiki/Module:Arguments" title="Module:Arguments">Module:Arguments</a> (<a href="/w/index.php?title=Module:Arguments&amp;action=edit" title="Module:Arguments">view source</a>) (protected)</li><li><a href="/wiki/Module:Category_series_navigation" title="Module:Category series navigation">Module:Category series navigation</a> (<a href="/w/index.php?title=Module:Category_series_navigation&amp;action=edit" title="Module:Category series navigation">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Category_series_navigation/doc" title="Module:Category series navigation/doc">Module:Category series navigation/doc</a> (<a href="/w/index.php?title=Module:Category_series_navigation/doc&amp;action=edit" title="Module:Category series navigation/doc">edit</a>) </li><li><a href="/wiki/Module:Category_series_navigation/styles.css" title="Module:Category series navigation/styles.css">Module:Category series navigation/styles.css</a> (<a href="/w/index.php?title=Module:Category_series_navigation/styles.css&amp;action=edit" title="Module:Category series navigation/styles.css">view source</a>) (extended confirmed protected)</li><li><a href="/wiki/Module:ConvertNumeric" title="Module:ConvertNumeric">Module:ConvertNumeric</a> (<a href="/w/index.php?title=Module:ConvertNumeric&amp;action=edit" title="Module:ConvertNumeric">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Documentation" title="Module:Documentation">Module:Documentation</a> (<a href="/w/index.php?title=Module:Documentation&amp;action=edit" title="Module:Documentation">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Documentation/config" title="Module:Documentation/config">Module:Documentation/config</a> (<a href="/w/index.php?title=Module:Documentation/config&amp;action=edit" title="Module:Documentation/config">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Documentation/styles.css" title="Module:Documentation/styles.css">Module:Documentation/styles.css</a> (<a href="/w/index.php?title=Module:Documentation/styles.css&amp;action=edit" title="Module:Documentation/styles.css">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Effective_protection_expiry" title="Module:Effective protection expiry">Module:Effective protection expiry</a> (<a href="/w/index.php?title=Module:Effective_protection_expiry&amp;action=edit" title="Module:Effective protection expiry">view source</a>) (protected)</li><li><a href="/wiki/Module:Effective_protection_level" title="Module:Effective protection level">Module:Effective protection level</a> (<a href="/w/index.php?title=Module:Effective_protection_level&amp;action=edit" title="Module:Effective protection level">view source</a>) (protected)</li><li><a href="/wiki/Module:File_link" title="Module:File link">Module:File link</a> (<a href="/w/index.php?title=Module:File_link&amp;action=edit" title="Module:File link">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:High-use" title="Module:High-use">Module:High-use</a> (<a href="/w/index.php?title=Module:High-use&amp;action=edit" title="Module:High-use">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:List" title="Module:List">Module:List</a> (<a href="/w/index.php?title=Module:List&amp;action=edit" title="Module:List">view source</a>) (protected)</li><li><a href="/wiki/Module:Lua_banner" title="Module:Lua banner">Module:Lua banner</a> (<a href="/w/index.php?title=Module:Lua_banner&amp;action=edit" title="Module:Lua banner">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Message_box" title="Module:Message box">Module:Message box</a> (<a href="/w/index.php?title=Module:Message_box&amp;action=edit" title="Module:Message box">view source</a>) (protected)</li><li><a href="/wiki/Module:Message_box/configuration" title="Module:Message box/configuration">Module:Message box/configuration</a> (<a href="/w/index.php?title=Module:Message_box/configuration&amp;action=edit" title="Module:Message box/configuration">view source</a>) (protected)</li><li><a href="/wiki/Module:Message_box/ombox.css" title="Module:Message box/ombox.css">Module:Message box/ombox.css</a> (<a href="/w/index.php?title=Module:Message_box/ombox.css&amp;action=edit" title="Module:Message box/ombox.css">view source</a>) (protected)</li><li><a href="/wiki/Module:Protection_banner" title="Module:Protection banner">Module:Protection banner</a> (<a href="/w/index.php?title=Module:Protection_banner&amp;action=edit" title="Module:Protection banner">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Protection_banner/config" title="Module:Protection banner/config">Module:Protection banner/config</a> (<a href="/w/index.php?title=Module:Protection_banner/config&amp;action=edit" title="Module:Protection banner/config">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Purge" title="Module:Purge">Module:Purge</a> (<a href="/w/index.php?title=Module:Purge&amp;action=edit" title="Module:Purge">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Redirect" title="Module:Redirect">Module:Redirect</a> (<a href="/w/index.php?title=Module:Redirect&amp;action=edit" title="Module:Redirect">view source</a>) (protected)</li><li><a href="/wiki/Module:Roman" title="Module:Roman">Module:Roman</a> (<a href="/w/index.php?title=Module:Roman&amp;action=edit" title="Module:Roman">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Sidebar" title="Module:Sidebar">Module:Sidebar</a> (<a href="/w/index.php?title=Module:Sidebar&amp;action=edit" title="Module:Sidebar">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Sidebar/configuration" title="Module:Sidebar/configuration">Module:Sidebar/configuration</a> (<a href="/w/index.php?title=Module:Sidebar/configuration&amp;action=edit" title="Module:Sidebar/configuration">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Sidebar/styles.css" title="Module:Sidebar/styles.css">Module:Sidebar/styles.css</a> (<a href="/w/index.php?title=Module:Sidebar/styles.css&amp;action=edit" title="Module:Sidebar/styles.css">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:String" title="Module:String">Module:String</a> (<a href="/w/index.php?title=Module:String&amp;action=edit" title="Module:String">view source</a>) (protected)</li><li><a href="/wiki/Module:TableTools" title="Module:TableTools">Module:TableTools</a> (<a href="/w/index.php?title=Module:TableTools&amp;action=edit" title="Module:TableTools">view source</a>) (protected)</li><li><a href="/wiki/Module:TemplateStyles" title="Module:TemplateStyles">Module:TemplateStyles</a> (<a href="/w/index.php?title=Module:TemplateStyles&amp;action=edit" title="Module:TemplateStyles">view source</a>) (extended confirmed protected)</li><li><a href="/wiki/Module:Template_redirect_regex" title="Module:Template redirect regex">Module:Template redirect regex</a> (<a href="/w/index.php?title=Module:Template_redirect_regex&amp;action=edit" title="Module:Template redirect regex">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Transclusion_count" title="Module:Transclusion count">Module:Transclusion count</a> (<a href="/w/index.php?title=Module:Transclusion_count&amp;action=edit" title="Module:Transclusion count">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Transclusion_count/data/C" title="Module:Transclusion count/data/C">Module:Transclusion count/data/C</a> (<a href="/w/index.php?title=Module:Transclusion_count/data/C&amp;action=edit" title="Module:Transclusion count/data/C">view source</a>) (template editor protected)</li><li><a href="/wiki/Module:Yesno" title="Module:Yesno">Module:Yesno</a> (<a href="/w/index.php?title=Module:Yesno&amp;action=edit" title="Module:Yesno">view source</a>) (protected)</li></ul></div><p id="mw-returnto">Return to <a href="/wiki/Module:Category_series_navigation" title="Module:Category series navigation">Module:Category series navigation</a>.</p> <!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/wiki/Module:Category_series_navigation">https://en.wikipedia.org/wiki/Module:Category_series_navigation</a>"</div></div> <div id="catlinks" class="catlinks catlinks-allhidden" data-mw="interface"></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Module:Category_series_navigation&amp;action=edit&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.log.warn("This page is using the deprecated ResourceLoader module \"mediawiki.ui.button\".\n[1.41] Please use Codex. See migration guidelines: https://www.mediawiki.org/wiki/Codex/Migrating_from_MediaWiki_UI");mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-g2nql","wgBackendResponseTime":662,"wgPageParseReport":{"limitreport":{"cputime":"0.168","walltime":"0.246","ppvisitednodes":{"value":683,"limit":1000000},"postexpandincludesize":{"value":50385,"limit":2097152},"templateargumentsize":{"value":7249,"limit":2097152},"expansiondepth":{"value":22,"limit":100},"expensivefunctioncount":{"value":8,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":3557,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 200.047 1 -total"," 71.32% 142.677 1 Template:Protected_page_text/template"," 69.56% 139.151 1 Template:Protected_page_text"," 64.33% 128.686 1 Template:Fmbox"," 35.83% 71.669 1 Template:Submit_an_edit_request"," 20.97% 41.959 2 Template:Blocked_text"," 10.15% 20.310 1 Template:Colocationwebhost"," 9.20% 18.395 1 Template:Mbox"," 8.58% 17.164 1 Template:Hidden"," 7.51% 15.017 1 Template:Editnotice_load"]},"scribunto":{"limitreport-timeusage":{"value":"0.070","limit":"10.000"},"limitreport-memusage":{"value":1579762,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-g2nql","timestamp":"20241124173205","ttl":2592000,"transientcontent":false}}});});</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10