https://wiki.projectcitybuild.com/w/api.php?action=feedcontributions&user=TheOctopus&feedformat=atomPCBWiki - User contributions [en-gb]2024-03-28T13:29:13ZUser contributionsMediaWiki 1.37.1https://wiki.projectcitybuild.com/w/index.php?title=Economy&diff=4252Economy2022-09-19T10:36:15Z<p>TheOctopus: </p>
<hr />
<div>The economy is a system that revolves around PCB's virtual currency system. Over the years there has been a variety of ways to earn and spend currency. Currently, the economy has been removed in PCB due to disinterest and lack of use. There are no plans to revitalize it in the future.<br />
<br />
== History ==<br />
The currency system was first implemented in late 2011(?), shortly after the launch of the Survival server.<br />
<br />
==== Previous Ways to Earn Currency ====<br />
* Killing mobs used to net currency rewards based on the difficulty of the enemy. This was later scrapped when player-made mob grinders became a rising issue.<br />
* [[Jump Quests]] used to reward the player currency upon each successful completion.<br />
* The stock exchange acted like a real-life stock exchange, in that stock values would constantly fluctuate and the players could invest their currency freely. This was removed during the switch to Survival 1.7 due to plugin incompatibility.<br />
* Houses used to be creatable and then sellable using a sign. A player could purchase the property and full own it.<br />
* A lottery was previously available. Tickets could be purchased via commands and a weekly draw awarded the winner the prize pool.<br />
* Bank interest (see below)<br />
<br />
==== The PCB Bank ====<br />
In the early days of Survival, players were able to deposit currency into a bank via commands. The bank would provide compound interest for leaving money in there.<br />
<br />
====Removal====<br />
The economy was removed across survival and creative worlds in [year]. It is still disabled today.<br />
<br />
== The Market (Overview) ==<br />
{{See also|Survival 1.7 Market|Survival 1.10 Market}}<br />
<br />
The marketplace has been the central hub for item purchase/trade since the beginning of the Survival server. Players can purchase a single plot to build their own customizable shop, which could then automatically sell items to other players via chests. Additionally items can purchase/sold to the [[Admin Shops]] at inflated prices (as the stock is unlimited).<br />
<br />
==== Diamond Price Cap ====<br />
The Diamond Price Cap is a price cap that was implemented in the Market world so that a store could no longer sell diamonds at a lower price than the Admin Shop. Sometime during mid-2015, this price cap was created when staff discovered The_Jacob selling diamonds at a lower price compared to the Admin Shop.[[Category:History of PCB]]<br />
<br />
[[Category:Migrated to Portal]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Website_History&diff=4251Website History2022-09-19T09:53:20Z<p>TheOctopus: </p>
<hr />
<div>The PCB website is the central hub of the community. Having undergone makeovers throughout the years, it is currently on its 3rd iteration.<br />
<br />
== Version History ==<br />
=== Version 1 ===<br />
[[File:Pcb website v1.jpg|thumb|Version 1]]<br />
<br />
The original PCB website was hastily put together in order to unify the community both off and on the server. Launched several days after the classic server first opened, the website featured only basic information and a forum.<br />
<br />
=== Version 2 ===<br />
[[File:Pcb website v2.jpg|thumb|Version 2]]<br />
<br />
Version 2 was scrapped quite early into its life cycle after launch. The website however is notable for integrating with the Minecraft servers, bringing features such as player economy balances, player avatars and real-time maps.<br />
<br />
=== Version 3 ===<br />
[[File:Web-v3.jpg|thumb|Version 3]]<br />
Version 3 has been the face of PCB since late 2011. It brought with it even further integration with the servers, featuring:<br />
* In-depth economy stats<br />
* A real-time player ban list<br />
* Real time player economy balances<br />
* Server and forum rank synchronization<br />
* Staff promoting and more<br />
<br />
=== Version 3.5 ===<br />
[[File:Homepage v3.5.png|thumbnail|300x300px|Version 3.5]]<br />
Version 3.5 was the first step in upgrading PCB's website to Version 4. On 17 February 2018 a new homepage was launched with the old-style forums remaining.<br />
<br />
==== Transition to Discourse ====<br />
On the 15th of April, 2018 PCB completed the forum migration from SMF to Discourse. Planning began as early as late August, 2017 and took a great deal of time and effort due to the need to convert data from SMF's format. Additionally, SMF accounts were converted into 'PCB' accounts - integrated with Discourse and OAuth providers Facebook, Twitter and Google Plus - further increasing the complexity of the transition.<br />
<br />
{{Stub}}<br />
[[Category:History of PCB]]<br />
[[Category:Migrated to Portal]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=User:TheOctopus&diff=4194User:TheOctopus2022-01-01T18:58:54Z<p>TheOctopus: Remove test</p>
<hr />
<div>Hey, I run this place.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=User:TheOctopus&diff=4193User:TheOctopus2022-01-01T18:58:45Z<p>TheOctopus: Just a test :)</p>
<hr />
<div>Hey, I run this place. Test!</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Administrator&diff=4067Administrator2020-12-25T01:46:48Z<p>TheOctopus: Update redirect</p>
<hr />
<div>#REDIRECT [[Ranks#Administrator]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:Old_Info_Required&diff=3938Template:Old Info Required2020-11-05T21:03:33Z<p>TheOctopus: </p>
<hr />
<div>{{ambox<br />
| type = notice<br />
| imageright = [[File:Nuvola apps clock.png|40px]]<br />
| subst = <includeonly>{{subst:substcheck}}</includeonly><br />
| text = '''This article requires information from previous servers or maps.'''<br> Information can be found by [https://forums.projectcitybuild.com/search searching the forums] or by requesting the help from other players.<br />
| all = Old Information Required<br />
}}<br />
<noinclude>[[Category: Templates]]</noinclude></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=User:TheOctopus&diff=3380User:TheOctopus2020-07-20T19:55:08Z<p>TheOctopus: test</p>
<hr />
<div>Hey, I run this place.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=User:TheOctopus&diff=3379User:TheOctopus2020-07-20T19:54:17Z<p>TheOctopus: </p>
<hr />
<div>Hey, I run this place.<br />
<br />
Just testing things aren't broken.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=User:TheOctopus&diff=3232User:TheOctopus2019-11-26T13:41:42Z<p>TheOctopus: More test edits</p>
<hr />
<div>Hey, I run this place.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=User:TheOctopus&diff=3231User:TheOctopus2019-11-26T13:41:16Z<p>TheOctopus: Add testing text to user page</p>
<hr />
<div>Hey, I run this place</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=MediaWiki:Sitenotice&diff=3090MediaWiki:Sitenotice2019-10-15T13:39:07Z<p>TheOctopus: </p>
<hr />
<div>{{Ombox<br />
| type = notice<br />
| image = none<br />
| text = Please make sure your email address matches [[Special:Preferences#mw-prefsection-personal|on the wiki]] and [https://projectcitybuild.com/account/settings website] as we'll be migrating to PCB logins in the near future.<br />
| plainlinks = yes<br />
}}</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=MediaWiki:Sitenotice&diff=3089MediaWiki:Sitenotice2019-10-15T13:37:32Z<p>TheOctopus: Add auth migration site notice</p>
<hr />
<div>{{Ombox<br />
| type = notice<br />
| image = [[File:Ambox info soft.svg|40px]]<br />
| text = Please make sure your email address matches [[Special:Preferences#mw-prefsection-personal|on the wiki]] and [https://projectcitybuild.com/account/settings website] as we'll be migrating to PCB logins in the near future.<br />
| plainlinks = yes<br />
}}</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Emfitty&diff=2566Emfitty2019-07-22T14:42:01Z<p>TheOctopus: TheOctopus moved page FittyCent to Emfitty without leaving a redirect</p>
<hr />
<div>'''Emfitty''' also known as ''FittyCent'', ''Queen MayhEM'', ''Empress Dowager Dumplings'', or simply ''Emily'' is a [[Senior Operator]] of PCB. Since joining in November 2010, she has become known for her endless stream of bitchy remarks, as well as her ability to effectively resolve conflict through becoming annoyed at both parties until they stop.<br />
<br />
== History ==<br />
* '''June 2013''': Promotion to Trusted<br />
* '''June 2014''': Promotion to Operator<br />
* '''February 2015''': Demotion to Trusted<br />
* █████████████<br />
* ██████████████<br />
* ████████ UltraGuest™<br />
* ██████████████████<br />
* █████████████<br />
* '''March 2018''': Promotion to Senior Operator<br />
[[Category:Notable players]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Emfitty&diff=2565Emfitty2019-07-22T14:41:13Z<p>TheOctopus: Created initial article at Emily's 'request'</p>
<hr />
<div>'''Emfitty''' also known as ''FittyCent'', ''Queen MayhEM'', ''Empress Dowager Dumplings'', or simply ''Emily'' is a [[Senior Operator]] of PCB. Since joining in November 2010, she has become known for her endless stream of bitchy remarks, as well as her ability to effectively resolve conflict through becoming annoyed at both parties until they stop.<br />
<br />
== History ==<br />
* '''June 2013''': Promotion to Trusted<br />
* '''June 2014''': Promotion to Operator<br />
* '''February 2015''': Demotion to Trusted<br />
* █████████████<br />
* ██████████████<br />
* ████████ UltraGuest™<br />
* ██████████████████<br />
* █████████████<br />
* '''March 2018''': Promotion to Senior Operator<br />
[[Category:Notable players]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=MediaWiki:Sitenotice&diff=2514MediaWiki:Sitenotice2019-06-12T09:45:40Z<p>TheOctopus: Blank sitenotice</p>
<hr />
<div></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=MediaWiki:Sitenotice&diff=2513MediaWiki:Sitenotice2019-06-09T08:41:26Z<p>TheOctopus: Add visualeditor broken site notice</p>
<hr />
<div>{{Ombox<br />
| type = notice<br />
| image = [[File:Gnome-face-sad.svg|40px]]<br />
| text = VisualEditor is currently down, sorry for the inconvenience<br />
| plainlinks = no<br />
}}</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=List_of_Staff_Members&diff=2302List of Staff Members2019-03-15T08:58:27Z<p>TheOctopus: /* Operators */ Add Filli's head</p>
<hr />
<div>This is a list of all current staff members on the server. For staff members who are no longer active, see [[List of Former Staff Members]]<br />
<br />
Additional dates are listed in ''italics'' if a staff member's forum registration date differs from when they first joined the server.<br /><br />
Aliases are listed in '''bold''' if a staff members owns or uses another Minecraft account with that username.<br />
<br />
== Admins ==<br />
{| class="wikitable"<br />
|-<br />
! Name !! Join Date<br />''Registration Date'' !! Skin !! Aliases !! Notes<br />
|-<br />
| [[_andy]] || 19 October 2010 || [[File: Andy Head.png|64px]] || --- || Founder of PCB<br />
|-<br />
| [[_specialk]] || 19 October 2010<br />''1 March 2011'' || [[File: Specialk Head.png|64px]] || --- || Founder of PCB. <br />
|-<br />
| [[Kyle8910]] || 19 October 2010 || [[File: Kyle8910 Head.png|64px]] || --- || PCB's first staff member.<br />
|-<br />
| [[Mannriah]] || 25 May 2015 || [[File: Mannriah Head 64.png|64px]] || vrajitor94<br />VRA ||<br />
|-<br />
|[[TheOctopus]]<br />
|17 August 2013<br />
|[[File:Theoctopus_skull_(ugliest_out_of_them_all_;)).png|64x64px]]<br />
|TheUKOctopus<br />
|<br />
|-<br />
| [[Wairoa]] || 15 October 2011 || [[File: Wairoa Head.png|64px]] || Saintnizair ||<br />
|}<br />
<br />
== Senior Operators ==<br />
{| class="wikitable"<br />
|-<br />
! Name !! Join Date<br />''Registration Date'' !! Skin !! Aliases !! Notes<br />
|-<br />
| [[Emfitty]] <br />
|10 November 2010 <br />
|[[File:Emfitty_skull.png|64x64px]]<br />
| ---<br />
| <br />
|-<br />
| [[MrFerf]] <br />
|December 2011<br />''7 July 2012''<br />
|[[File:MrFerf_skull.png|64x64px]]<br />
|ferfer313<br />
| <br />
|-<br />
| [[Ouhai_Ruby]] <br />
|5 December 2010<br />''15 January 2011'' <br />
| [[File: Ouhai Ruby Head.png|64px]] <br />
| ---<br />
|<br />
|-<br />
|[[Penguina]]<br />
|12 April 2014<br />
|[[File:Penguina Head.png|64x64px]]<br />
| ---<br />
|<br />
|}<br />
<br />
== Operators ==<br />
{| class="wikitable"<br />
|-<br />
! Name !! Join Date<br />''Registration Date'' !! Skin !! Aliases !! Notes<br />
|-<br />
|0Silver0<br />
|27 June 2014<br />
|[[File:0Silver0 Head.jpg|frameless|64x64px]]<br />
|Silverhawk_<br />zwinky12<br />
|<br />
|-<br />
|Filipingus<br />
|20 April 2011<br />
|[[File:Filipingus Skull.png|64x64px]]<br />
| Firideeks<br />Fili2K15<br />Filipenis<br />
|<br />
|-<br />
| hywel || 5 March 2016 || [[File:Hywel Head.png|64x64px]] || --- ||<br />
|-<br />
| Lysithea_ciel<br />
|28 January 2016<br />
|[[File:Lysithea_ciel Head.png|64x64px]]<br />
|Lyra_ciel<br />
|<br />
|-<br />
| Poctivy_Ani || 13 February 2015 || [[File:BroodingSet Head.png|64x64px]] || BroodingSet ||<br />
|-<br />
|Ramona<br />
|2 April 2014<br />''1 March 2016''<br />''3 January 2019''<br />
|[[File:Cabal Head.jpg|frameless|64x64px]]<br />
|'''Cabal'''<br />ImAMemer<br />MCHearts<br />TheKingOfSweden<br />Morpeus<br />atmarj<br />
|<br />
|-<br />
|Vexnorz<br />
|16 October 2015<br />
|[[File:Skin of vexnorz (150x150 pixels).jpg|frameless|64x64px]]<br />
| ---<br />
|<br />
|}<br />
<br />
== Moderators ==<br />
{| class="wikitable"<br />
|-<br />
! Name !! Join Date<br />''Registration Date'' !! Skin !! Aliases !! Notes<br />
|-<br />
|AuhsojNala<br />
|2 December 2011<br />
|[[File:AuhsojNala Head.png|64x64px]]<br />
|ShoggothDumps<br />CanIHaveThisName<br />Joshm0nkey<br />
|<br />
|-<br />
| masterboatman<br />
|20 August 2015<br />
|[[File:masterboatman Head.png|64x64px]]<br />
| ---<br />
|<br />
|-<br />
|MattDB<br />
|6 June 2015<br />
|[[File:Skin of MattDB (150x150 pixels).jpg|frameless|64x64px]]<br />
|ForbiddenMatt<br />GodlyOx<br />
|<br />
|}<br />
<br />
== Ancillary Staff ==<br />
{| class="wikitable"<br />
|-<br />
! Name !! Join Date<br />''Registration Date'' !! Skin !! Aliases !! Notes<br />
|-<br />
|Brodur<br />
|22 March 2011<br />
|[[File:Brodur Head.png|64x64px]]<br />
| ---<br />
|[[Modded Server|Feed the Beast]] staff, Operator-equivalent<br />
|-<br />
|crassclown<br />
|12 November 2010<br />
|[[File:crassclown Head.png|64x64px]]<br />
| ---<br />
|Feed the Beast staff, Operator-equivalent<br />
|-<br />
| fasto12321<br />
|27 November 2010<br />
|[[File:fasto12321 Head.png|64x64px]]<br />
| ---<br />
|Feed the Beast staff, Senior Operator-equivalent<br />
|-</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=File:Fasto12321_Head.png&diff=2301File:Fasto12321 Head.png2019-03-15T08:57:33Z<p>TheOctopus: </p>
<hr />
<div></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=File:Crassclown_Head.png&diff=2300File:Crassclown Head.png2019-03-15T08:56:19Z<p>TheOctopus: </p>
<hr />
<div></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Pendord.mp3&diff=2284Pendord.mp32019-01-21T20:20:07Z<p>TheOctopus: Added book screenshot</p>
<hr />
<div>{{Stub}}<br />
<br />
'''pendord.mp3''' is a PCB Meme created in 2014. It is a text-to-speech edit of an anonymous book received by [[Penguina]].<br />
<br />
== Origin ==<br />
Some time in 2014<ref>Date provided by Penguina</ref>, the affections of a PCB member towards [[Penguina]] were detailed in an in-game [https://minecraft.net/ Minecraft] [https://minecraft.gamepedia.com/Book book]. The author of this book kept their name unknown, only identifying themselves as "a girl, the best PCB [[Ranks|OP]]" in the message. The author was requested to keep the details private, however they claimed they were unable to keep it a secret anymore, especially from Penguina herself. The identity of the author soon became fairly obvious to active members at the time, however this information will not be disclosed in this article.<br />
<br />
== Book Contents / Transcript ==<br />
[[File:Pendord book.png|centre|thumbnail|1000x1000px|A screenshot of the original books contents]]<br />
<br />
The book read as follows:<blockquote>Hello Penguina, you won't expect who this is.<!-- Needs completing --></blockquote><br />
<br />
=== Dramatisation and Spread ===<br />
The contents of the book soon became a server wide meme, helped by a [https://s3.wasabisys.com/pcbdl/media-archive/pendord.mp3 dramatised recording]<ref>Audio created and provided by TheOctopus</ref> created by [[TheOctopus]], which featured a robotic voice narrator, reading the book as a script, with backing music ''[[wikipedia:They're All Gonna Laugh at You!|At a Medium Pace]]''. The [[wikipedia:Speech_synthesis#Text-to-speech_systems|text-to-speech system]] used to create the narrator struggled to pronounce certain words, adding to the humour of the script; changing Penguina [pɛŋ-gwin-e] to Penguinah [pɛŋ-gwən-a].<br />
<br />
=== Disclaimer ===<br />
Permission for the creation of this page was given by Penguina, due to the potentially personal content.<blockquote>"Penny: I mean it's the best thing that happened in 2014. [...] Permission granted."<ref>Quote from Penguina, in Discord staff-casual channel. 18:56 21st January 2019.</ref></blockquote><br />
<br />
== References ==<br />
<references /></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=File:Pendord_book.png&diff=2283File:Pendord book.png2019-01-21T20:18:44Z<p>TheOctopus: </p>
<hr />
<div>Screenshots of the original book</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Pendord.mp3&diff=2282Pendord.mp32019-01-21T20:17:50Z<p>TheOctopus: Added intro and changed MC wiki link</p>
<hr />
<div>{{Stub}}<br />
<br />
'''pendord.mp3''' is a PCB Meme created in 2014. It is a text-to-speech edit of an anonymous book received by [[Penguina]].<br />
<br />
== Origin ==<br />
Some time in 2014<ref>Date provided by Penguina</ref>, the affections of a PCB member towards [[Penguina]] were detailed in an in-game [https://minecraft.net/ Minecraft] [https://minecraft.gamepedia.com/Book book]. The author of this book kept their name unknown, only identifying themselves as "a girl, the best PCB [[Ranks|OP]]" in the message. The author was requested to keep the details private, however they claimed they were unable to keep it a secret anymore, especially from Penguina herself. The identity of the author soon became fairly obvious to active members at the time, however this information will not be disclosed in this article.<br />
<br />
== Book Contents / Transcript ==<br />
The book read as follows:<blockquote>Hello Penguina, you won't expect who this is.<!-- Needs completing --></blockquote><br />
<br />
=== Dramatisation and Spread ===<br />
The contents of the book soon became a server wide meme, helped by a [https://s3.wasabisys.com/pcbdl/media-archive/pendord.mp3 dramatised recording]<ref>Audio created and provided by TheOctopus</ref> created by [[TheOctopus]], which featured a robotic voice narrator, reading the book as a script, with backing music ''[[wikipedia:They're All Gonna Laugh at You!|At a Medium Pace]]''. The [[wikipedia:Speech_synthesis#Text-to-speech_systems|text-to-speech system]] used to create the narrator struggled to pronounce certain words, adding to the humour of the script; changing Penguina [pɛŋ-gwin-e] to Penguinah [pɛŋ-gwən-a].<br />
<br />
=== Disclaimer ===<br />
Permission for the creation of this page was given by Penguina, due to the potentially personal content.<blockquote>"Penny: I mean it's the best thing that happened in 2014. [...] Permission granted."<ref>Quote from Penguina, in Discord staff-casual channel. 18:56 21st January 2019.</ref></blockquote><br />
<br />
== References ==<br />
<references /></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Reverly&diff=2133Reverly2018-07-18T10:51:50Z<p>TheOctopus: Added infobox</p>
<hr />
<div>{{Infobox Town|name = Reverly|screenshot = Store Building in Reverly.png|screenshot_alt = |caption = Store Building in Reverly|founder = FurtenFur|map = [[Creative 1.12]]|warp = Reverly|theme = Apocalyptic}}Reverly is an [[en:Apocalyptic]] themed city on the [[Creative 1.12]] map. Showcased in this YouTube video [https://www.youtube.com/watch?v=oiJHiRhQh7c Here]. Reverly is not a part of any nation, with 0 residents as of 2018, making it one of the lest population dense city's on PCB.<br />
<br />
= History =<br />
Reverly had a very high population around 30 years prior to the virus that wiped out the entire city population in 1986. After the virus eliminated the entire population nature took over the entire city, leaving sidewalk bricks cracked, buildings crumbled and cracked, and trees almost everywhere. Reverly is located in the Mesa Biome southeast of [[Master City|Master city]]. Reverly used to be a center of businesses in 1986, factory work, fishing, finance, and arts.<br />
<br />
== Before 1986 ==<br />
Before 1986 Reverly was a city booming with business and tourists. Local shops open around the [[wikipedia:Seawall|seawall]] for tourists and locals to enjoy during the summer season, when most tourists are around Reverly. <br />
[[File:Fishing.png|alt=Local c|left|thumbnail|'''Local civilian fishing at the revelry [[wikipedia:Seawall|seawall]]''']]<br />
Reverly was a huge tourists attraction because of the seawall and the large sewers, in the summer season tourists would flood into Reverly looking for fun and enjoyment. [[wikipedia:Tourism|Tourism]] was one of the main sources of income for the local businesses in Reverly. Reverly had 6 buildings all packed with clothing, food, and goodies at the seawall, and multiple buildings behind those. For the tourists and locals to use for day to day life, in 2018 these buildings are barely standing.<br />
<br />
Before 1986 Reverly had a fairly large wheat factory, with over 500 workers. The wheat factory was one of the main business in Reverly, being only a few minutes away from the downtown of Reverly. Reverly also had a subway that people could use for transportation anytime they pleased.<br />
<br />
== 2018 ==<br />
[[File:Reverly Factory.png|left|thumbnail|'''Reverly wheat factory.''']][[File:English and French signs in Reverly.png|left|thumbnail|300x300px|English and French sigs in Reverly.]][[File:Reverly Subway.png|left|thumbnail|'''Reverly subway entrance'''|300x300px]]<br />
[[File:Reverly on a large scale map.png|left|thumbnail|Reverly on a large scale map]]In 2018 Reverly is almost completely destroyed with very little of any building remaining. Around 30 years ago when the virus wiped out the entire population of Reverly, Reverly had no one to take care of the buildings <br />
<br />
so nature took over the entire city leaving vines, trees, and rocks all over the city. Reverly is now a safety hazard for anyone which explains why no one lives in Reverly anymore. Reverly roads in 2018 are covered in dead bushes and grass and impossible to drive on. Along with the sidewalks being broken upon repair, covered in cracks, moss, and pebbles. Any life in Reverly has not been spotted in 30 years this trend will most likely consist. Skeletons of people are often found in the roads and sidewalks of Reverly the likelihood of these people dying of the virus in the road is highly unlikely, it has been said that they were dropped there to keep the virus away from the people who had not yet caught the virus.<br />
<br />
= Language =<br />
The main language in Revelry is English, some people do speak French but the main language is English only 0.4% of the population before 1984 reported French being the language spoken most in their home. In the public signs, stores, and anything with writing is in English sometimes with a French translation under the English.<br />
= Transportation =<br />
Revery has a [https://www.google.ca/search?q=wiki+subway&rlz=1C1CHBF_enCA747CA747&oq=wiki+subway&aqs=chrome..69i57j0l5.3838j0j7&sourceid=chrome&ie=UTF-8 subway] along with roads and sidewalks for transportation. Cars and the subway are the main modes of transportation in Reverly. The subway was used quite often before 1984, having over 300 passengers daily. The subway would go all the way to the other side of the city to the wheat factory until that part of the subway got shut down. The road was used for cars and bikes. The sidewalk was used for [[wikipedia:Pedestrian|pedestrians]].<br />
<br />
= Sewers =<br />
Reverly has a large sewer system, it is contaminated and badly polluted now but was a large tourist attraction when the city was still active. Tourists enjoyed taking tours of the sewers. It was local legend that a huge sea monster (See Lore) may have lived in the sewers or swam through them, this was the reason the sewers were so popular among the tourists.<br />
<br />
= Name =<br />
The name of Reverly came from the song [https://www.youtube.com/watch?v=d6uIsM7s6pY Neck Deep - Can't Kick Up The Roots]. The definition of [https://www.google.ca/search?rlz=1C1CHBF_enCA747CA747&q=Dictionary#dobs=revelry Revelry] states lively and noisy festivities, especially when these involve drinking a large amount of alcohol.<br />
<br />
= Lore =<br />
It was a local legend that a huge red, blue, pink, and green sea monster spanning over 10 km would lurk around the seawall late at night looking for prey. This myth was started when local children would trick tourists into thinking a huge monster was living in the waters of Reverly. This monster had many different names, but was never given an official name. Some called it Ecthelion, Poseidon, or Octopian. People had claimed to see this monster describing it being over 10 km long with a long scaly body and emerald green eyes. It was also said that this beast swam around the sewers as well. Local children would tell tourists that in the dark of night this beast would watch and wait for a lone sole walking on the seawall, then the huge beast would pounce upon them picking them up into the air above the water, then devouring them alive despite their efforts to get away. This monster was said to have razor sharp teeth spanning over 10cm and a pink tongue covered in teeth and claws. The monster had insanely sharp plates on its back and tale. It was very commonly believed that this monster could control the weather often creating storms and restless waters, people believed that the beast would create storms when he was hungry or angry. The fictional monster had scared so many tourists that in the late hours of the night nobody could be seen anywhere in sight of the waters or the sewers for the fear of being attacked or eaten by the beast was too great. <br />
[[File:Reverly school E-52.png|left|thumbnail|Reverly school E-52]]<br />
[[File:Reverly 552 school.png|thumbnail|Reverly 552 school|left]]<br />
<br />
= Education =<br />
Reverly has an elementary school number 552 (See below), and a secondary school E-52 (See below), In Reverly the schools go by numbers instead of names. All schools in Reverly are in the same school district board, RPSB. <br />
<br />
== E-52 ==<br />
Reverlys school E-52 is located beside the wheat factory, further away from the downtown. E-52 is for grade 9 to grade 12, some students would retake grade 12 if they pleased. E-52 had classes in woodworking, maths, sciences, language classes, etc. The school is now abandoned as the rest of the city is. The feeder school for E-52 is school 552 (See below). The school colours were blue and yellow. This school was in the school board RPSB. The school had multiple sports teams such as a basketball team, a soccer team, a hockey team, and a football team. Along with a marching band. E-52 had a high graduation rate in 1984 and was at its highest then<br />
<br />
== 552 ==<br />
The school 552 is located further out from the town just before the turn to the wheat factory. 552 supports grade 1 to grade 8 then the students are sent to E-52 (See above). This school supported basic classes such as maths, science, English, gym, etc. 552 is a feeder school for E-52 (See above) .he school colours were white, blue, and red. The school had some sports teams including a soccer team, a basketball team, and a track team. This school was in the school board RPSB. <br />
<br />
= Public Spaces =<br />
[[File:Reverly skate park.png|left|thumbnail|Reverly skate park]]<br />
[[File:Reverly coffee Shop.png|thumbnail|Reverly coffee Shop]]<br />
Revery has multiple public spaces including a skate park, Public coffee shops, etc . The skate park is located to the left of town hall. Before the virus wiped out the entire population kids were often seen skateboarding BMX biking and scootering at the park. The skate park was often a good hangout area for high school kids. Anyone can go to the coffee shop and ages of people were spotted there. <br />
<br />
= Crime =<br />
In 1984 The crime rate in Reverly had gone down drastically, with the murder rate being the lowest ever. Although fraud rates had increased by 3% in 1982. Reverly never had any known large crime groups or organizations. <br />
<br />
= Flag =<br />
Reverly's flag was never found and to this day it is unknown what it looks like. Researchers searched for the flag but never found it. It is also a possibility that Reverly never had a flag, because no flag poles have been spotted in all of Reverly. <br />
<br />
= Cityscape =<br />
[[File:Reverly large banner.png|none|thumbnail|1596x1596px|Picture taken from the roof of a building near town hall]]<br />
<br />
= Gallary =<br />
[[File:Reverly Building.png|thumbnail|738x738px|Buildings on Reverly's seawall, located close to the town hall.]]<br />
[[File:Reverly.png|thumbnail|Old, cracked, and worn roads of Reverly|none|739x739px]]<br />
[[File:Reverly Sewers..png|left|thumbnail|Located not too far under Reverly lies the sewer system, the badly contaminated sewers.|740x740px]]<br />
[[File:Reverly Town hall.png|thumbnail|734x734px|The first and only library in Reverly, equipped with emergency lights and alarms. |alt=The first and only library in Reverly, equipped with emergency lights and alarms. ]][[File:Buildings in Reverly.png|thumbnail|734x734px|Buildings on Reverly's seawall, located close to the town hall.]]<br />
[[File:Inside Reverly's one and only library.png|thumbnail|734x734px|Inside Reverly's one and only library]]<br />
[[File:Reverly Parking garage.png|none|thumbnail|738x738px|Parking garage near town hall]][[File:Reverly Buildings.png|none|thumbnail|738x738px|Buildings on Reverly's seawall, located close to the town hall. These buildings were quite common among the tourists]]<br />
<br />
[[Category:Creative 1.12 Towns]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Reverly&diff=2132Reverly2018-07-18T10:45:32Z<p>TheOctopus: Page cleanup</p>
<hr />
<div>[[File:Reverly seawall.png|alt=A picture of Reverly's seawall|thumbnail|[[File:Reverly Light posts.png|left|thumbnail|300x300px|Reverly Light posts]][[File:Store Building in Reverly.png|thumbnail|300x300px|Store Building in Reverly]]<br />
<br />
'''__________________________________________''' '''Founder:''' FurtenFur<br />
__________________________________________ '''Large contributors:''' Shrimp, Bread '''__________________________________________''' '''Theme:''' Apocalyptic<br />
__________________________________________ '''Map:''' Creative 1.12<br />
__________________________________________<br />
<br />
'''Postal Code:''' <br />
<br />
4K9 L0A<br />
__________________________________________<br />
<br />
'''Warp:'''<br />
<br />
/warp Raverly<br />
__________________________________________<br />
<br />
'''Population:'''<br />
<br />
2018, 0<br />
1884, 27315<br />
__________________________________________<br />
<br />
'''Time Zone:'''<br />
<br />
EST (UTC−5)<br />
__________________________________________<br />
<br />
'''Coordinates:'''<br />
<br />
-2986, 77, 10265<br />
__________________________________________<br />
<br />
'''Established:'''<br />
<br />
Warp approved June 25, 2018, By Masteboatman. Warp approved June 25, 2018, By Hywel. Warp approved June 26, 2018, By Mannriah. Warp set June 26, 2018, By Mannriah (as Reverly)<br />
__________[[File:Weather.png|thumbnail|'''Weather in Reverly today'''|287x287px|none]][[File:Reverly Climate.png|thumbnail|'''Reverly Climate'''|none]]'''__________________________________________''' <br />
<br />
]]<br />
Reverly is an [[wikipedia:Apocalyptic|apocalyptic]] themed city on [https://projectcitybuild.com/ Project City Builds] creative 1.12 map. Showcased in this YouTube video [https://www.youtube.com/watch?v=oiJHiRhQh7c Here]. Reverly is not a part of any nation, with 0 residents as of 2018, making it one of the lest population dense city's on PCB. Reverly had a very high population around 30 years prior to the virus that wiped out the entire city population in 1986. After the virus eliminated the entire population nature took over the entire city, leaving sidewalk bricks cracked, buildings crumbled and cracked, and trees almost everywhere. Reverly is located in the Mesa Biome southeast of [[Master City|Master city]]. Reverly used to be a center of businesses in 1986, factory work, fishing, finance, and arts.<br />
<br />
= History =<br />
<br />
== Before 1986 ==<br />
Before 1986 Reverly was a city booming with business and tourists. Local shops open around the [[wikipedia:Seawall|seawall]] for tourists and locals to enjoy during the summer season, when most tourists are around Reverly. <br />
[[File:Fishing.png|alt=Local c|left|thumbnail|'''Local civilian fishing at the revelry [[wikipedia:Seawall|seawall]]''']]<br />
Reverly was a huge tourists attraction because of the seawall and the large sewers, in the summer season tourists would flood into Reverly looking for fun and enjoyment. [[wikipedia:Tourism|Tourism]] was one of the main sources of income for the local businesses in Reverly. Reverly had 6 buildings all packed with clothing, food, and goodies at the seawall, and multiple buildings behind those. For the tourists and locals to use for day to day life, in 2018 these buildings are barely standing.<br />
<br />
Before 1986 Reverly had a fairly large wheat factory, with over 500 workers. The wheat factory was one of the main business in Reverly, being only a few minutes away from the downtown of Reverly. Reverly also had a subway that people could use for transportation anytime they pleased.<br />
<br />
== 2018 ==<br />
[[File:Reverly Factory.png|left|thumbnail|'''Reverly wheat factory.''']][[File:English and French signs in Reverly.png|left|thumbnail|300x300px|English and French sigs in Reverly.]][[File:Reverly Subway.png|left|thumbnail|'''Reverly subway entrance'''|300x300px]]<br />
[[File:Reverly on a large scale map.png|left|thumbnail|Reverly on a large scale map]]In 2018 Reverly is almost completely destroyed with very little of any building remaining. Around 30 years ago when the virus wiped out the entire population of Reverly, Reverly had no one to take care of the buildings <br />
<br />
so nature took over the entire city leaving vines, trees, and rocks all over the city. Reverly is now a safety hazard for anyone which explains why no one lives in Reverly anymore. Reverly roads in 2018 are covered in dead bushes and grass and impossible to drive on. Along with the sidewalks being broken upon repair, covered in cracks, moss, and pebbles. Any life in Reverly has not been spotted in 30 years this trend will most likely consist. Skeletons of people are often found in the roads and sidewalks of Reverly the likelihood of these people dying of the virus in the road is highly unlikely, it has been said that they were dropped there to keep the virus away from the people who had not yet caught the virus.<br />
<br />
= Language =<br />
The main language in Revelry is English, some people do speak French but the main language is English only 0.4% of the population before 1984 reported French being the language spoken most in their home. In the public signs, stores, and anything with writing is in English sometimes with a French translation under the English.<br />
= Transportation =<br />
Revery has a [https://www.google.ca/search?q=wiki+subway&rlz=1C1CHBF_enCA747CA747&oq=wiki+subway&aqs=chrome..69i57j0l5.3838j0j7&sourceid=chrome&ie=UTF-8 subway] along with roads and sidewalks for transportation. Cars and the subway are the main modes of transportation in Reverly. The subway was used quite often before 1984, having over 300 passengers daily. The subway would go all the way to the other side of the city to the wheat factory until that part of the subway got shut down. The road was used for cars and bikes. The sidewalk was used for [[wikipedia:Pedestrian|pedestrians]].<br />
<br />
= Sewers =<br />
Reverly has a large sewer system, it is contaminated and badly polluted now but was a large tourist attraction when the city was still active. Tourists enjoyed taking tours of the sewers. It was local legend that a huge sea monster (See Lore) may have lived in the sewers or swam through them, this was the reason the sewers were so popular among the tourists.<br />
<br />
= Name =<br />
The name of Reverly came from the song [https://www.youtube.com/watch?v=d6uIsM7s6pY Neck Deep - Can't Kick Up The Roots]. The definition of [https://www.google.ca/search?rlz=1C1CHBF_enCA747CA747&q=Dictionary#dobs=revelry Revelry] states lively and noisy festivities, especially when these involve drinking a large amount of alcohol.<br />
<br />
= Lore =<br />
It was a local legend that a huge red, blue, pink, and green sea monster spanning over 10 km would lurk around the seawall late at night looking for prey. This myth was started when local children would trick tourists into thinking a huge monster was living in the waters of Reverly. This monster had many different names, but was never given an official name. Some called it Ecthelion, Poseidon, or Octopian. People had claimed to see this monster describing it being over 10 km long with a long scaly body and emerald green eyes. It was also said that this beast swam around the sewers as well. Local children would tell tourists that in the dark of night this beast would watch and wait for a lone sole walking on the seawall, then the huge beast would pounce upon them picking them up into the air above the water, then devouring them alive despite their efforts to get away. This monster was said to have razor sharp teeth spanning over 10cm and a pink tongue covered in teeth and claws. The monster had insanely sharp plates on its back and tale. It was very commonly believed that this monster could control the weather often creating storms and restless waters, people believed that the beast would create storms when he was hungry or angry. The fictional monster had scared so many tourists that in the late hours of the night nobody could be seen anywhere in sight of the waters or the sewers for the fear of being attacked or eaten by the beast was too great. <br />
[[File:Reverly school E-52.png|left|thumbnail|Reverly school E-52]]<br />
[[File:Reverly 552 school.png|thumbnail|Reverly 552 school|left]]<br />
<br />
= Education =<br />
Reverly has an elementary school number 552 (See below), and a secondary school E-52 (See below), In Reverly the schools go by numbers instead of names. All schools in Reverly are in the same school district board, RPSB. <br />
<br />
== E-52 ==<br />
Reverlys school E-52 is located beside the wheat factory, further away from the downtown. E-52 is for grade 9 to grade 12, some students would retake grade 12 if they pleased. E-52 had classes in woodworking, maths, sciences, language classes, etc. The school is now abandoned as the rest of the city is. The feeder school for E-52 is school 552 (See below). The school colours were blue and yellow. This school was in the school board RPSB. The school had multiple sports teams such as a basketball team, a soccer team, a hockey team, and a football team. Along with a marching band. E-52 had a high graduation rate in 1984 and was at its highest then<br />
<br />
== 552 ==<br />
The school 552 is located further out from the town just before the turn to the wheat factory. 552 supports grade 1 to grade 8 then the students are sent to E-52 (See above). This school supported basic classes such as maths, science, English, gym, etc. 552 is a feeder school for E-52 (See above) .he school colours were white, blue, and red. The school had some sports teams including a soccer team, a basketball team, and a track team. This school was in the school board RPSB. <br />
<br />
= Public Spaces =<br />
[[File:Reverly skate park.png|left|thumbnail|Reverly skate park]]<br />
[[File:Reverly coffee Shop.png|thumbnail|Reverly coffee Shop]]<br />
Revery has multiple public spaces including a skate park, Public coffee shops, etc . The skate park is located to the left of town hall. Before the virus wiped out the entire population kids were often seen skateboarding BMX biking and scootering at the park. The skate park was often a good hangout area for high school kids. Anyone can go to the coffee shop and ages of people were spotted there. <br />
<br />
= Crime =<br />
In 1984 The crime rate in Reverly had gone down drastically, with the murder rate being the lowest ever. Although fraud rates had increased by 3% in 1982. Reverly never had any known large crime groups or organizations. <br />
<br />
= Flag =<br />
Reverly's flag was never found and to this day it is unknown what it looks like. Researchers searched for the flag but never found it. It is also a possibility that Reverly never had a flag, because no flag poles have been spotted in all of Reverly. <br />
<br />
= Cityscape =<br />
[[File:Reverly large banner.png|none|thumbnail|1596x1596px|Picture taken from the roof of a building near town hall]]<br />
<br />
= Gallary =<br />
[[File:Reverly Building.png|thumbnail|738x738px|Buildings on Reverly's seawall, located close to the town hall.]]<br />
[[File:Reverly.png|thumbnail|Old, cracked, and worn roads of Reverly|none|739x739px]]<br />
[[File:Reverly Sewers..png|left|thumbnail|Located not too far under Reverly lies the sewer system, the badly contaminated sewers.|740x740px]]<br />
[[File:Reverly Town hall.png|thumbnail|734x734px|The first and only library in Reverly, equipped with emergency lights and alarms. |alt=The first and only library in Reverly, equipped with emergency lights and alarms. ]][[File:Buildings in Reverly.png|thumbnail|734x734px|Buildings on Reverly's seawall, located close to the town hall.]]<br />
[[File:Inside Reverly's one and only library.png|thumbnail|734x734px|Inside Reverly's one and only library]]<br />
[[File:Reverly Parking garage.png|none|thumbnail|738x738px|Parking garage near town hall]][[File:Reverly Buildings.png|none|thumbnail|738x738px|Buildings on Reverly's seawall, located close to the town hall. These buildings were quite common among the tourists]]<br />
<br />
[[Category:Creative 1.12 Towns]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Coral_Shores&diff=2131Coral Shores2018-07-18T10:41:16Z<p>TheOctopus: Added infobox</p>
<hr />
<div>{{Infobox Town|name = Coral Shores|screenshot = Coral Shores cityscape.png|screenshot_alt = |caption = |founder = [[PrinceMark]]|map = [[Creative 1.12]]|warp = CoralShores|theme = Modern}}Coral Shores, Florida is a city located in the South East region of Creative 1.12. Established as a Project City Build official warp on November 1, 2017 (/warp Coralshores), Coral Shores began development much further away from other budding cities in an effort to set its grounds as both a popular travel destination and ideal choice for residents that long for clear skies, great beach weather, and the sweet smell of freshly paved cement. Today the city is known for its bright green grass, a plethora of palm trees, navigable canal for resident-use, and bright colored buildings.<br />
<br />
<u>Demographics & Geography:</u><br />
<br />
According to a Project City Build census, the estimated population as of June 2017 stands at 27,345. The city has a total area of 15 square miles (24 km). Coral Shores was incorporated as a valley to the mountainous area in the North and high hills to the West. However, due to heavy demands and gratuitous donations are taken into consideration, the high hills to the West have since been decimated to include continued city development. Coral Shores resides along the Coral Strait and is 1/4 miles across from Palm Beach Island. The Coral Strait suffered a great loss to its coral reefs underwater and since the establishment of the city, it is believed that it was among the most beautiful reefs in the region. The Society of Natural Preservation in Coral Shores have major plans to bring back new coral reefs to the city's waters using new underwater technology coming before the end of Summer 2018.<br />
<br />
<u>Points of Interest:</u><br />
<br />
To the East crossing the Grande Lewis (a raised bridge built by immigrant Australians new to the city) is Palm Island Beach, the most popular of hotspots in Coral Shores.<br />
<br />
= Cityscape =<br />
[[File:Coral shores cityscape 2.png|centre|thumbnail|1183x1183px]]<br />
<br />
= Gallery =<br />
[[File:Coral Shores water.png|thumbnail|765x765px|Coral Shores water fountain ]]<br />
[[File:Stores located in Coral Shores.png|thumbnail|765x765px|Stores located in Coral Shores]]<br />
[[File:Coral shores road.png|none|thumbnail|765x765px|Coral Shores, in the dark of night.]]<br />
[[File:Coral Shores sunrise.png|left|thumbnail|765x765px|Sunrise in Coral Shores]]<br />
[[File:Coral shores buildings.png|thumbnail|765x765px|Buildings in Coral Shores]]<br />
[[File:Coral Shores gas station.png|left|thumbnail|765x765px|Coral Shores gas station]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Monarch&diff=1869Monarch2018-06-27T10:34:20Z<p>TheOctopus: Clarified build height change</p>
<hr />
<div>{{Old Info Required}}<br />
[[Category: History of PCB]]<br />
<br />
{{infobox Town<br />
| name = Big City<br />
| founder = Various staff members - currently run by Wairoa<br />
|screenshot = Bigcity-15.04.18.jpg|screenshot_alt = |map = |caption = Big City in April 2018|theme = Large scale realistic}}<br />
Big City is PCB's premier city, designed to provide a place for professional buildings.<br />
<br />
The version list below does not include the "NewBigCity" map on the Classic server.<br />
<br />
== Version 1 ==<br />
[[File:XR1tOzG.jpg|thumb|The first version of Big City]]<br />
Big City was originally the showcase map of PCB's classic server. The map was accessible for viewing by any guest or member, but editable only by Adv. Builders+.<br />
<br />
==== Notable features / builds ====<br />
* An underground sewer connected to many major buildings<br />
* A power plant that pumped 'electricity' via wires<br />
* A small airport with an enter-able plane<br />
* Port<br />
* F1 Racecourse<br />
* A freeway and tunnel<br />
<br />
==== Major contributors ====<br />
* _andy (Founder)<br />
* _specialk (Founder)<br />
* TKPenalty<br />
* Kedji<br />
<br />
== Version 2 ==<br />
[[File:VZHuOLc.png|thumb|Big City v2]]<br />
Upon launch of PCB's survival server, a second version of Big City was created to test the now larger palette of blocks available.<br />
<br />
The most notorious change was the use of naturally generated terrain as opposed to the flat-map of version 1. Several buildings from version 1 were recreated block-by-block, including Kedji's apartment and _andy's skyscraper. Version 2 to date has been the only map to not utilize a grid-style road system.<br />
<br />
Due to the limitations of Survival Mode, materials had to be spawned in for building. As this was before multiple maps were available, Big City was located on the same map as the survival area, but located extremely far away from the map spawn point, and accessible via a warp. During this time, there was no definitive way of knowing if materials meant for Big City were being used in players' survival creations.<br />
<br />
<br />
<br />
<br />
== Version 3 ==<br />
[[File:OkHEehq.png|thumb|Big City v3]]<br />
General displeasure with the terrain used for version 2 lead to the creation of Big City version 3, with the return to flat-map as a terrain. This version of Big City was located in the Creative map, which was on a separate server to the Survival map at the time. This led to a few issues with players building very close to the boundary of Big City.<br />
<br />
The city was later used as a lobby - the first location new players who entered the server would spawn at.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Version 4 ==<br />
[[File:UFemYqy.png|thumb|Big City v4]]<br />
Whilst version 4 was discarded quite early into its creation, it is worth mentioning due to the switch to a larger building scale. Version 4 was the version to use the 256 build height limit, which was added when Version 4 was in conception.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
== Version 5 ==<br />
This is the current version of Big City, and the 1st to be located on its own map.<br />
<br />
''(Under construction)''<br />
<br />
=== Terrain ===<br />
The map for Big City version 5 is a standard flat map. At some point the map reverted to standard world generation for an unknown reason, so towards the edges of the map, large areas of vanilla terrain can be found.<br />
The floor level has been artificially raised to a y level of 23 to allow for the construction of subways, sewers, basements, and other underground structures. The map also includes a coastline along the eastern edge, and a wide river to the south of the main downtown area. While the flat terrain is very convenient for building, the complete lack of height variation in the terrain does go against the realistic style used by the structures in the city.<br />
<br />
=== Districts/Areas ===<br />
''(Under construction)''<br />
==== Central Big City ====<br />
<br />
==== SoHo ====<br />
Based on the SoHo districts of London and New York.<br />
<br />
==== East Shores ====<br />
Coastal region of Big City<br />
<br />
==== Southbank ====<br />
The riverside area. Named such because it is the riverbank which marks the historic southern edge of Big City. It is in fact the northern bank of the river.<br />
<br />
==== South Big City ====<br />
Located south of the river. Mostly low rise and suburban development. Currently still in the planning stages. Unlikely to ever be completed due to upcoming Version 6 of Big City.<br />
<br />
==== Financial District ====<br />
Located centrally. Contains replicas of multiple skyscrapers primarily used for finance, such as Willis Tower, and parts of the New York World Trade Center complex. <br />
<br />
=== Scale and Restrictions ===<br />
The scale in Version 5 of Big City is defined in the rules as a minimum of 5 blocks room height on the lowest 2 floors, and a minimum of 3 blocks room height on all other floors. In practice, the majority of buildings have a 5 block room height throughout. Most buildings have 2 block thick floors/ceilings, although this varies.<br />
<br />
Throughout the city, builds are required to meet any existing sidewalk, either by the building edge touching the existing sidewalk, extending the sidewalk to meet the building edge, or by inclusion of some kind of garden or other feature between the building edge and the sidewalk.<br />
<br />
Large roads are not to be edited without permission, although small roads may be edited to suit player's builds.<br />
<br />
The theme of Big City is a modern city. It should be noted that this does not exclusively mean modern style architecture, rather any building which would not be out of place in a large modern day city. Big City currently takes most of its architectural influences from Australian, North American, and European cities. In particular, Melbourne, London, New York, and Berlin.<br />
<br />
=== Notable Structures ===<br />
''(Under construction)''<br />
{| class="wikitable sortable"<br />
|-<br />
! Building !! Built By !! Image !! Notes<br />
|-<br />
| Oaks Aurora Tower || Wairoa || Coming Soon™ || Big City Big Build Winner. Previously used as the server spawn. Based on real life counterpart in Brisbane, Australia.<br />
|-<br />
| No Name || _andy || Coming Soon™ || The 1st skyscraper in Big City v5.<br />
|-<br />
| Big City Station || _specialk || Coming Soon™ || Loosely based on Southern Cross Station in Melbourne, Australia.<br />
|-<br />
| The Cheesegrater || Ouhai_Ruby || Coming Soon™ || Based on real life counterpart in London, UK.<br />
|-<br />
| Flatiron Building || KelzioAuditore || Coming Soon™ || Based on real life counterpart in New York, NY.<br />
|-<br />
| Big City Convention Center || Piehole314 || Coming Soon™ ||<br />
|-<br />
| Modern Apartment Complex || Ouhai_Ruby || Coming Soon™ || <br />
|-<br />
| Budapest Opera House || tuzao, Leobhz, and EstevaoBuilder || Coming Soon™ || Originally built in Budapest on the creative map. Copied into Big City to preserve it from a map reset.<br />
|-<br />
| Big City Ferris Wheel || Wairoa || Coming Soon™ || Giant Ferris Wheel.<br />
|-<br />
| UN Tower || Namillo || Coming Soon™ || Current spawn building for Big City.<br />
|}<br />
=== Contributor List ===<br />
All users in this list have contributed at least 1 build to Big City Version 5, and are credited on the Wall of Contributors at the BigCity warp.<br />
<br />
Major Contributors are players who have put substantial time and resources into the city. It is estimated that the founders and major contributors combined have created 70-80% of all builds within the city.<br />
{| class="wikitable mw-collapsible mw-collapsed"<br />
! Contributors<br />
|-<br />
| _andy (Founder)<br />
|-<br />
| _specialk (Founder)<br />
|-<br />
| Ouhai_Ruby (Major Contributor)<br />
|-<br />
| Wairoa (Major Contributor)<br />
|-<br />
| Animaz<br />
|-<br />
| BroodingSet<br />
|-<br />
| Clauliflower<br />
|-<br />
| DavidJT<br />
|-<br />
| Ducky<br />
|-<br />
| EstevaoBuilder<br />
|-<br />
| Firideeks<br />
|-<br />
| geeawf<br />
|-<br />
| Hard24get<br />
|-<br />
| iRubix<br />
|-<br />
| ItalianChild<br />
|-<br />
| Javi<br />
|-<br />
| jmvvana<br />
|-<br />
| KelzioAuditore<br />
|-<br />
| lach97<br />
|-<br />
| Leobhz<br />
|-<br />
| Lyra_ciel<br />
|-<br />
| madant79<br />
|-<br />
| Mannriah<br />
|-<br />
| MrFerf<br />
|-<br />
| Namillo<br />
|-<br />
| orvilleman<br />
|-<br />
| Piehole314<br />
|-<br />
| PrinceMark<br />
|-<br />
| Rebzy<br />
|-<br />
| The_Jacob<br />
|-<br />
| tuzao<br />
|-<br />
| whbilbo<br />
|-<br />
| Willink<br />
|-<br />
| Wolfy9<br />
|-<br />
| wooly19<br />
|-<br />
| Yoichi<br />
|-<br />
| Yomigaere<br />
|}</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=History_of_Project_City_Build&diff=1865History of Project City Build2018-06-25T14:23:43Z<p>TheOctopus: new new information</p>
<hr />
<div>[[Category: History of PCB]]<br />
<br />
== Early History ==<br />
Project City Build was founded on October 19th 2010 as a classic server the day after one of its founders [[_andy]] was banned from the Big Build For Fun server for no reason. It was at that moment when [[_andy]], [[Kyle8910]] and [[_specialk]] decided to create their own vision of how a Minecraft server should be run; a large active community, with friendly staff who are not ban trigger-happy.<br />
<br />
== Server History ==<br />
<br />
=== Classic ===<br />
<br />
[[File:XR1tOzG.jpg|thumb|Big City in PCB Classic]]In the following months, Project City Build grew to become one of the most active classic servers going round. The classic server had a guest map called Flat-grass whilst the main map was named Big City. The server had an emphasis on building realistic looking cities and was featured on various Minecraft blogs and gaming websites. This first iteration of the server saw the introduction of two new admins; Kyle8910 and TKPenalty.<br />
<br />
But in January 2011, PCB's service provider mysteriously lost all their data and their offsite data. At the time, Fatso12321 was running a [[Fallback Server]] for our community whenever the main server was offline and took over running the classic server whilst _andy and _specialk took a break from Minecraft. On Febuary 18th 2011, _andy and _specialk returned with a brand new server. Running Minecraft Beta 1.2_02, this server marked PCB's transition from classic to survival multiplayer.<br />
<br />
=== Survival Multiplayer===<br />
[[File:Crafthub pcb article.jpg|thumb|PCB featured in a web article]]<br />
<br />
This server was a hybrid between survival mode and creative; players had the resources if they wanted to build structures but also had the opportunity to play a true survival mode. A new version of [[Big City]] was built, with many of the classic server's buildings recreated. Notable towns included, [[Sandy Point]], [[Paradise Falls]], [[Forsyth]] and [[Milton]].<br />
<br />
On September 17th 2011 in time for the Adventure Update, PCB split from two servers (classic, SMP) to three servers. The SMP server was moved to separate creative and survival servers to enhance the game-play experience. New towns were established in both servers, with notable builds from Filipenis and his sprawling realistic road systems. Big City 2 was also created, improving on the designs of the last two versions.<br />
<br />
On June 17th 2012, the survival and creative servers were merged together to form a central Minecraft server<ref>[http://projectcitybuild.com/forums/index.php?topic=3206.msg56817#msg56817 http://projectcitybuild.com/forums/index.php?topic=3206]</ref>. Having undergone major hardware upgrades, the server was now capable of serving multiple maps and a larger number of simultaneous online players.<br />
<br />
== Major Events ==<br />
<br />
== See also ==<br />
* [[Website History]]<br />
<br />
== References ==<br />
<references /></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=History_of_Project_City_Build&diff=1864History of Project City Build2018-06-25T14:20:18Z<p>TheOctopus: Updated with info from em</p>
<hr />
<div>[[Category: History of PCB]]<br />
<br />
== Early History ==<br />
Project City Build was founded on October 19th 2010 as a classic server the day after one of its founders [[_andy]] was banned from the Big Build For Fun server for no reason. It was at that moment when [[_andy]] along with [[Kyle8910]] decided to create their own vision of how a Minecraft server should be run; a large active community, with friendly staff who are not ban trigger-happy.<br />
<br />
== Server History ==<br />
<br />
=== Classic ===<br />
<br />
[[File:XR1tOzG.jpg|thumb|Big City in PCB Classic]]In the following months, Project City Build grew to become one of the most active classic servers going round. The classic server had a guest map called Flat-grass whilst the main map was named Big City. The server had an emphasis on building realistic looking cities and was featured on various Minecraft blogs and gaming websites. This first iteration of the server saw the introduction of two new admins; Kyle8910 and TKPenalty.<br />
<br />
But in January 2011, PCB's service provider mysteriously lost all their data and their offsite data. At the time, Fatso12321 was running a [[Fallback Server]] for our community whenever the main server was offline and took over running the classic server whilst _andy and _specialk took a break from Minecraft. On Febuary 18th 2011, _andy and _specialk returned with a brand new server. Running Minecraft Beta 1.2_02, this server marked PCB's transition from classic to survival multiplayer.<br />
<br />
=== Survival Multiplayer===<br />
[[File:Crafthub pcb article.jpg|thumb|PCB featured in a web article]]<br />
<br />
This server was a hybrid between survival mode and creative; players had the resources if they wanted to build structures but also had the opportunity to play a true survival mode. A new version of [[Big City]] was built, with many of the classic server's buildings recreated. Notable towns included, [[Sandy Point]], [[Paradise Falls]], [[Forsyth]] and [[Milton]].<br />
<br />
On September 17th 2011 in time for the Adventure Update, PCB split from two servers (classic, SMP) to three servers. The SMP server was moved to separate creative and survival servers to enhance the game-play experience. New towns were established in both servers, with notable builds from Filipenis and his sprawling realistic road systems. Big City 2 was also created, improving on the designs of the last two versions.<br />
<br />
On June 17th 2012, the survival and creative servers were merged together to form a central Minecraft server<ref>[http://projectcitybuild.com/forums/index.php?topic=3206.msg56817#msg56817 http://projectcitybuild.com/forums/index.php?topic=3206]</ref>. Having undergone major hardware upgrades, the server was now capable of serving multiple maps and a larger number of simultaneous online players.<br />
<br />
== Major Events ==<br />
<br />
== See also ==<br />
* [[Website History]]<br />
<br />
== References ==<br />
<references /></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=PCB:Contributing&diff=1861PCB:Contributing2018-06-24T10:27:49Z<p>TheOctopus: /* Help */ Grammar fix</p>
<hr />
<div>== The 3 Ns ==<br />
Before you contribute to PCB, please ensure your contribution is:<br />
<br />
* Notable<br />
* Neutral<br />
* Needed<br />
<br />
Articles that do not abide by these guidelines will be modified or outright removed.<br />
<br />
=== Notable ===<br />
Your page should be something that matters to PCB. Notable articles include:<br />
<br />
* Warps<br />
* Server Events<br />
* Server Maps<br />
<br />
Non-notable articles include:<br />
<br />
* Individual players<br />
* Bans or griefs<br />
<br />
=== Neutral ===<br />
<br />
The page should be neutral and written as a 3rd party<br />
<br />
Good: SomethingTown is a town owned by Player1 and Player2<br />
<br />
Bad: SomethingTown is a town owned by Player2 and I.<br />
<br />
The page should also be written in a neutral tone, that is not praising or disparaging.<br />
<br />
=== Needed ===<br />
<br />
An article should be something that is required. An article about Minecraft itself is not needed, Minecraft has its own wiki. An article about a town is needed, there is no other source on it.<br />
<br />
==Use Documentive Style==<br />
Write your articles to '''document''', not to '''tell a story.''' The wiki is intended to be a complete list of factual articles about Project City Build. However, you can include fiction in it's own section, which helps prevent conflict with fact.<br />
<br />
Good: "SomethingTown is a city in the north-eastern region of the map, owned by Player2."<br />
<br />
Bad: "SomethingTown is a major port, with many varieties of items sold here."<br />
<br />
== Help ==<br />
If you need help using PCB Wiki, check the [[Help:Contents|Help pages]].<br />
<br />
==Fictional history guidelines==<br />
This is a list of guidelines intended to help players write their fictional history in an wiki-like manner. It is by no means rules meant to be enforced, but rather a way to ensure that your stories remain sensible and logical.<br />
* Try not to exaggerate - "the world ended" vs "the world was in a state of economic crisis"<br />
* Check your grammar and spelling<br />
* Don't present a timeline, rather, write in an paragraphic manner - "1973: Oil was found." verus "Oil was found in the north-eastern region of the city in 1973."<br />
* Present political references sanely - do not dramatise your writing by involving large amounts of mergers, wars, and independence struggles. While these help make a story more exciting, it may sound irrelogical when overused.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=PCB:Contributing&diff=1860PCB:Contributing2018-06-24T10:27:36Z<p>TheOctopus: Added link to help section</p>
<hr />
<div>== The 3 Ns ==<br />
Before you contribute to PCB, please ensure your contribution is:<br />
<br />
* Notable<br />
* Neutral<br />
* Needed<br />
<br />
Articles that do not abide by these guidelines will be modified or outright removed.<br />
<br />
=== Notable ===<br />
Your page should be something that matters to PCB. Notable articles include:<br />
<br />
* Warps<br />
* Server Events<br />
* Server Maps<br />
<br />
Non-notable articles include:<br />
<br />
* Individual players<br />
* Bans or griefs<br />
<br />
=== Neutral ===<br />
<br />
The page should be neutral and written as a 3rd party<br />
<br />
Good: SomethingTown is a town owned by Player1 and Player2<br />
<br />
Bad: SomethingTown is a town owned by Player2 and I.<br />
<br />
The page should also be written in a neutral tone, that is not praising or disparaging.<br />
<br />
=== Needed ===<br />
<br />
An article should be something that is required. An article about Minecraft itself is not needed, Minecraft has its own wiki. An article about a town is needed, there is no other source on it.<br />
<br />
==Use Documentive Style==<br />
Write your articles to '''document''', not to '''tell a story.''' The wiki is intended to be a complete list of factual articles about Project City Build. However, you can include fiction in it's own section, which helps prevent conflict with fact.<br />
<br />
Good: "SomethingTown is a city in the north-eastern region of the map, owned by Player2."<br />
<br />
Bad: "SomethingTown is a major port, with many varieties of items sold here."<br />
<br />
== Help ==<br />
If you need help using PCB Wiki, check the [[Help:Contents|Help pages]]<br />
<br />
==Fictional history guidelines==<br />
This is a list of guidelines intended to help players write their fictional history in an wiki-like manner. It is by no means rules meant to be enforced, but rather a way to ensure that your stories remain sensible and logical.<br />
* Try not to exaggerate - "the world ended" vs "the world was in a state of economic crisis"<br />
* Check your grammar and spelling<br />
* Don't present a timeline, rather, write in an paragraphic manner - "1973: Oil was found." verus "Oil was found in the north-eastern region of the city in 1973."<br />
* Present political references sanely - do not dramatise your writing by involving large amounts of mergers, wars, and independence struggles. While these help make a story more exciting, it may sound irrelogical when overused.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Help:Simple_Starting_Guide&diff=1826Help:Simple Starting Guide2018-06-21T16:31:45Z<p>TheOctopus: More typo fixes</p>
<hr />
<div>{{Help page}}<br />
Welcome to PCB Wiki's Simple Starting Guide. This guide will teach you the basics of using MediaWiki and VisualEditor. This guide is always under construction, if there's something unclear let the [[Help:Get Help|wiki admins know]] and we'll add it to this guide.<br />
<br />
== 0. Important Terminology ==<br />
Here are some important terms you may hear:<br />
* '''Namespace''': The wiki is divided into several namespaces. The Main namespace is where most articles are placed and it has no prefix. Files are under the File: namespace, talk pages under the Talk: namespace and so on.<br />
<br />
== 1. Creating Pages ==<br />
There are a few ways to create a page:<br />
* Click a [[red link]], which are links that go to pages that don't exist yet<br />
* Type a page into the form on the homepage<br />
* Search for a page (top right) that doesn't exist<br />
<br />
Some of these methods will put you in the VisualEditor and some will put you in the Source editor. Unfortunately there's no way to set the VisualEditor as default yet. If you're put in the Source editor, use the '''Create''' tab at the top-right to change to VisualEditor.<br />
[[File:Visualeditor Button.png|1000px|frame|center|The '''Create''' tab is for the VisualEditor, the '''Create Source''' button is for the Soure editor.]]<br />
<br />
== 2. Editing Pages ==<br />
To edit an existing page, click the Edit button in the top-right. You must be signed into a wiki account to edit.<br />
<br />
== 2. VisualEditor ==<br />
[[File:VisualEditor toolbar-en.png|frameless|835x835px]]<br />
<br />
This is the VisualEditor toolbar which appears when you begin to edit a page. Most of the buttons shown here are fairly self-explanatory. Wikipedia [[wikipedia:Help:Introduction_to_editing_with_VisualEditor/1|has a good tutorial]] on how to use the VisualEditor.<br />
<br />
== 3. Categories ==<br />
Articles can be added to categories so they can be found more easily. The icons on the [[Welcome to PCB Wiki|homepage]] link to some main categories, and you can see a list of all categories on the [[Special:Categories]] page. Some categories on this page are automatically added to by the wiki software, and some have pages added to them manually.<br />
Try and add articles to the most specific category possible. If you want to add a category to an article about a Creative 1.8 town, rather than adding a town to [[:Category:Towns]] add it to [[:Category:Creative 1.8 Towns]].<br />
<br />
To add category to an article, click the [[File:VisualEditor - Icon - Menu.svg|link=]] icon. Then select the [[File:OOjs UI icon tag.svg|link=]]Categories option. From this menu you can add categories or remove existing ones.<br />
__NOTOC__</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Help:Simple_Starting_Guide&diff=1825Help:Simple Starting Guide2018-06-21T16:29:32Z<p>TheOctopus: /* 1. Creating Pages */ Fixed typo</p>
<hr />
<div>{{Help page}}<br />
Welcome to PCB Wiki's Simple Starting Guide. This guide will teach you the basics of using MediaWiki and VisualEditor. This guide is always under construction, if there's something unclear let the [[Help:Get Help|wiki admins know]] and we'll add it to this guide.<br />
<br />
== 0. Important Terminology ==<br />
Here are some important terms you may hear:<br />
* '''Namespace''': The wiki is divided into several namespaces. The Main namespace is where most articles are placed and it has no prefix. Files are under the File: namespace, talk pages under the Talk: namespace and so on.<br />
<br />
== 1. Creating Pages ==<br />
There are a few ways to create a page:<br />
* Click a [[red link]], which are links that go to pages that don't exist yet<br />
* Type a page into the form on the homepage<br />
* Search for a page (top right) that doesn't exist<br />
<br />
Some of these methods will put you in the VisualEditor and some will put you in the Source editor. Unfortunately there's no way to set eh VisualEditor as default yet. If you're put in the Source editor, use the '''Create''' tab at the top-right to change to VisualEditor.<br />
[[File:Visualeditor Button.png|1000px|frame|center|The '''Create''' tab is for the VisualEditor, the '''Create Source''' button is for the Soure editor.]]<br />
<br />
== 2. Editing Pages ==<br />
To edit an existing page, click the Edit button in the top-right. You must be signed into a wiki account to edit.<br />
<br />
== 2. VisualEditor ==<br />
[[File:VisualEditor toolbar-en.png|frameless|835x835px]]<br />
<br />
This is the VisualEditor toolbar which appears when you begin to edit a page. Most of the buttons shown here are fairly self-explanatory. Wikipedia [[wikipedia:Help:Introduction_to_editing_with_VisualEditor/1|has a good tutorial]] on how to use the VisualEditor.<br />
<br />
== 3. Categories ==<br />
Articles can be added to categories so they can be found more easily. The icons on the [[Welcome to PCB Wiki|homepage]] link to some main categories, and you can see a list of all categories on the [[Special:Categories]] page. Some categories on this page are automatically added to by the wiki software, and some have pages added to them manually.<br />
Try and add articles to the most specific category possible. If you want to add a category to an article about a Creative 1.8 town, rather than adding a town to [[:Category:Towns]] add it to [[:Category:Creative 1.8 Towns]].<br />
<br />
To add category to an article, click the [[File:VisualEditor - Icon - Menu.svg|link=]] icon. Then select the [[File:OOjs UI icon tag.svg|link=]]Categories option. From this menu you can add categories or remove existing ones.<br />
__NOTOC__</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Help:Images/Infobox&diff=1789Help:Images/Infobox2018-06-20T17:48:29Z<p>TheOctopus: Changed template inclusion</p>
<hr />
<div>{{Help page}}{{Help Wizard Choice|choice = I want to add an image to an Infobox|backlink = Help:Images}}Before you start, there are a few things you should check:<br />
*The image has a suitable name<br />
*The image is 2MB in size or less (if it's bigger, try an [http://optimizilla.com/ image optimiser])<br />
== Upload the file ==<br />
{{Help:Images/Using Special Page}}<br />
== Adding the image ==<br />
# In the infobox field you want to add the image to type the name of the image ''without'' the File: prefix</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Help:Images/Source_Editor&diff=1788Help:Images/Source Editor2018-06-20T17:46:41Z<p>TheOctopus: Added noinclude tags to top box</p>
<hr />
<div><noinclude>{{Help page}}{{Help Wizard Choice|choice = I want to add an image to an article with the Source Editor|backlink = Help:Images}}</noinclude><br />
<br />
== Uploading the image ==<br />
{{Help:Images/Using Special Page}}<br />
<br />
== Adding the Image ==<br />
# Click the [[File:Toolbar insert file.png]] icon<br />
# Enter the name of the image<br />
# Enter a caption<br />
# Select an image type<br />
# If you want to display the image at a different size, enter one. This will set the size of the longest side.</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Economy&diff=1753Economy2018-06-18T15:49:58Z<p>TheOctopus: /* The Market (Overview) */ Switched to see also template</p>
<hr />
<div>The economy revolves around PCB's virtual currency system. Over the years there has been a variety of ways to earn and spend currency.<br />
<br />
== History ==<br />
The currency system was first implemented in late 2011(?), shortly after the launch of the Survival server.<br />
<br />
==== Previous Ways to Earn Currency ====<br />
* Killing mobs used to net currency rewards based on the difficulty of the enemy. This was later scrapped when player-made mob grinders became a rising issue.<br />
* [[Jump Quests]] used to reward the player currency upon each successful completion.<br />
* The stock exchange acted like a real-life stock exchange, in that stock values would constantly fluctuate and the players could invest their currency freely. This was removed during the switch to Survival 1.7 due to plugin incompatibility.<br />
* Houses used to be creatable and then sellable using a sign. A player could purchase the property and full own it.<br />
* A lottery was previously available. Tickets could be purchased via commands and a weekly draw awarded the winner the prize pool.<br />
* Bank interest (see below)<br />
<br />
==== The PCB Bank ====<br />
In the early days of Survival, players were able to deposit currency into a bank via commands. The bank would provide compound interest for leaving money in there.<br />
<br />
== The Market (Overview) ==<br />
{{See also|Survival 1.7 Market|Survival 1.10 Market}}<br />
<br />
The marketplace has been the central hub for item purchase/trade since the beginning of the Survival server. Players can purchase a single plot to build their own customizable shop, which could then automatically sell items to other players via chests. Additionally items can purchase/sold to the [[Admin Shops]] at inflated prices (as the stock is unlimited).<br />
<br />
==== Diamond Price Cap ====<br />
The Diamond Price Cap is a price cap that was implemented in the Market world so that a store could no longer sell diamonds at a lower price than the Admin Shop. Sometime during mid-2015, this price cap was created when staff discovered The_Jacob selling diamonds at a lower price compared to the Admin Shop.[[Category:History of PCB]]</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Protection_banner/config&diff=1752Module:Protection banner/config2018-06-18T15:47:03Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>-- This module provides configuration data for [[Module:Protection banner]].<br />
<br />
return {<br />
<br />
--------------------------------------------------------------------------------<br />
--<br />
-- BANNER DATA<br />
--<br />
--------------------------------------------------------------------------------<br />
<br />
--[[<br />
-- Banner data consists of six fields:<br />
-- * text - the main protection text that appears at the top of protection<br />
-- banners.<br />
-- * explanation - the text that appears below the main protection text, used<br />
-- to explain the details of the protection.<br />
-- * tooltip - the tooltip text you see when you move the mouse over a small<br />
-- padlock icon.<br />
-- * link - the page that the small padlock icon links to.<br />
-- * alt - the alt text for the small padlock icon. This is also used as tooltip<br />
-- text for the large protection banners.<br />
-- * image - the padlock image used in both protection banners and small padlock<br />
-- icons.<br />
--<br />
-- The module checks in three separate tables to find a value for each field.<br />
-- First it checks the banners table, which has values specific to the reason<br />
-- for the page being protected. Then the module checks the defaultBanners<br />
-- table, which has values specific to each protection level. Finally, the<br />
-- module checks the masterBanner table, which holds data for protection<br />
-- templates to use if no data has been found in the previous two tables.<br />
--<br />
-- The values in the banner data can take parameters. These are specified<br />
-- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name<br />
-- enclosed in curly braces).<br />
--<br />
-- Available parameters:<br />
--<br />
-- ${CURRENTVERSION} - a link to the page history or the move log, with the<br />
-- display message "current-version-edit-display" or<br />
-- "current-version-move-display".<br />
--<br />
-- ${EDITREQUEST} - a link to create an edit request for the current page.<br />
--<br />
-- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes<br />
-- on the talk page; you may submit a request to ask an administrator to make<br />
-- an edit if it is minor or supported by consensus."<br />
--<br />
-- ${IMAGELINK} - a link to set the image to, depending on the protection<br />
-- action and protection level.<br />
--<br />
-- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry<br />
-- is set. E.g. "Editing of this page by new or unregistered users is currently <br />
-- disabled until dd Month YYYY."<br />
--<br />
-- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation<br />
-- so that it can be used in run-on sentences.<br />
--<br />
-- ${PAGETYPE} - the type of the page, e.g. "article" or "template".<br />
-- Defined in the cfg.pagetypes table.<br />
--<br />
-- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g.<br />
-- "Editing of this page by new or unregistered users is currently disabled"<br />
--<br />
-- ${PROTECTIONDATE} - the protection date, if it has been supplied to the<br />
-- template.<br />
--<br />
-- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or<br />
-- "semi-protected".<br />
--<br />
-- ${PROTECTIONLOG} - a link to the protection log or the pending changes log,<br />
-- depending on the protection action.<br />
--<br />
-- ${TALKPAGE} - a link to the talk page. If a section is specified, links<br />
-- straight to that talk page section.<br />
--<br />
-- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to<br />
-- create a blurb like "This template is semi-protected", or "This article is<br />
-- move-protected until DD Month YYYY".<br />
--<br />
-- ${VANDAL} - links for the specified username (or the root page name)<br />
-- using Module:Vandal-m.<br />
--<br />
-- Functions<br />
--<br />
-- For advanced users, it is possible to use Lua functions instead of strings<br />
-- in the banner config tables. Using functions gives flexibility that is not<br />
-- possible just by using parameters. Functions take two arguments, the<br />
-- protection object and the template arguments, and they must output a string.<br />
--<br />
-- For example:<br />
--<br />
-- text = function (protectionObj, args)<br />
-- if protectionObj.level == 'autoconfirmed' then<br />
-- return 'foo'<br />
-- else<br />
-- return 'bar'<br />
-- end<br />
-- end<br />
--<br />
-- Some protection object properties and methods that may be useful:<br />
-- protectionObj.action - the protection action<br />
-- protectionObj.level - the protection level<br />
-- protectionObj.reason - the protection reason<br />
-- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set<br />
-- to indefinite, and the protection time in unix time if temporary.<br />
-- protectionObj.protectionDate - the protection date in unix time, or nil if<br />
-- unspecified.<br />
-- protectionObj.bannerConfig - the banner config found by the module. Beware<br />
-- of editing the config field used by the function, as it could create an<br />
-- infinite loop.<br />
-- protectionObj:isProtected - returns a boolean showing whether the page is<br />
-- protected.<br />
-- protectionObj:isTemporary - returns a boolean showing whether the expiry is<br />
-- temporary.<br />
-- protectionObj:isIncorrect - returns a boolean showing whether the protection<br />
-- template is incorrect.<br />
--]]<br />
<br />
-- The master banner data, used if no values have been found in banners or<br />
-- defaultBanners.<br />
masterBanner = {<br />
text = '${INTROBLURB}',<br />
explanation = '${EXPLANATIONBLURB}',<br />
tooltip = '${TOOLTIPBLURB}',<br />
link = '${IMAGELINK}',<br />
alt = 'Page ${PROTECTIONLEVEL}'<br />
},<br />
<br />
-- The default banner data. This holds banner data for different protection<br />
-- levels.<br />
-- *required* - this table needs edit, move, autoreview and upload subtables.<br />
defaultBanners = {<br />
edit = {},<br />
move = {},<br />
autoreview = {<br />
autoconfirmed = {<br />
alt = 'Page protected with pending changes level 1',<br />
tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users',<br />
image = 'Padlock-silver-light.svg'<br />
},<br />
default = {<br />
alt = 'Page protected with pending changes level 2',<br />
tooltip = 'All edits by users who are not reviewers or administrators are'<br />
.. ' subject to review prior to becoming visible to unregistered users',<br />
image = 'Padlock-orange.svg'<br />
}<br />
},<br />
upload = {}<br />
},<br />
<br />
-- The banner data. This holds banner data for different protection reasons.<br />
-- In fact, the reasons specified in this table control which reasons are<br />
-- valid inputs to the first positional parameter.<br />
--<br />
-- There is also a non-standard "description" field that can be used for items<br />
-- in this table. This is a description of the protection reason for use in the<br />
-- module documentation.<br />
--<br />
-- *required* - this table needs edit, move, autoreview and upload subtables.<br />
banners = {<br />
edit = {<br />
blp = {<br />
description = 'For pages protected to promote compliance with the'<br />
.. ' [[Wikipedia:Biographies of living persons'<br />
.. '|biographies of living persons]] policy',<br />
text = '${INTROFRAGMENT} to promote compliance with'<br />
.. ' [[Wikipedia:Biographies of living persons'<br />
.. "|Wikipedia's&nbsp;policy on&nbsp;the&nbsp;biographies"<br />
.. ' of&nbsp;living&nbsp;people]].',<br />
tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on'<br />
.. ' biographies of living people',<br />
},<br />
dmca = {<br />
description = 'For pages protected by the Wikimedia Foundation'<br />
.. ' due to [[Digital Millennium Copyright Act]] takedown requests',<br />
explanation = function (protectionObj, args)<br />
local ret = 'Pursuant to a rights owner notice under the Digital'<br />
.. ' Millennium Copyright Act (DMCA) regarding some content'<br />
.. ' in this article, the Wikimedia Foundation acted under'<br />
.. ' applicable law and took down and restricted the content'<br />
.. ' in question.'<br />
if args.notice then<br />
ret = ret .. ' A copy of the received notice can be found here: '<br />
.. args.notice .. '.'<br />
end<br />
ret = ret .. ' For more information, including websites discussing'<br />
.. ' how to file a counter-notice, please see'<br />
.. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}."<br />
.. "'''Do not remove this template from the article until the"<br />
.. " restrictions are withdrawn'''."<br />
return ret<br />
end,<br />
image = 'Padlock-black.svg',<br />
},<br />
dispute = {<br />
description = 'For pages protected due to editing disputes',<br />
text = function (protectionObj, args)<br />
-- Find the value of "disputes".<br />
local display = 'disputes'<br />
local disputes<br />
if args.section then<br />
disputes = string.format(<br />
'[[%s:%s#%s|%s]]',<br />
mw.site.namespaces[protectionObj.title.namespace].talk.name,<br />
protectionObj.title.text,<br />
args.section,<br />
display<br />
)<br />
else<br />
disputes = display<br />
end<br />
<br />
-- Make the blurb, depending on the expiry.<br />
local msg<br />
if type(protectionObj.expiry) == 'number' then<br />
msg = '${INTROFRAGMENT} or until editing %s have been resolved.'<br />
else<br />
msg = '${INTROFRAGMENT} until editing %s have been resolved.'<br />
end<br />
return string.format(msg, disputes)<br />
end,<br />
explanation = "This protection is '''not''' an endorsement of the"<br />
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',<br />
tooltip = '${TOOLTIPFRAGMENT} due to editing disputes',<br />
},<br />
ecp = {<br />
description = 'For articles in topic areas authorized by'<br />
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] or'<br />
.. ' meets the criteria for community use',<br />
tooltip = 'This ${PAGETYPE} is extended-confirmed protected',<br />
alt = 'Extended-protected ${PAGETYPE}',<br />
},<br />
mainpage = {<br />
description = 'For pages protected for being displayed on the [[Main Page]]',<br />
text = 'This file is currently'<br />
.. ' [[Wikipedia:This page is protected|protected]] from'<br />
.. ' editing because it is currently or will soon be displayed'<br />
.. ' on the [[Main Page]].',<br />
explanation = 'Images on the Main Page are protected due to their high'<br />
.. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.'<br />
.. '<br /><span style="font-size:90%;">'<br />
.. "'''Administrators:''' Once this image is definitely off the Main Page,"<br />
.. ' please unprotect this file, or reduce to semi-protection,'<br />
.. ' as appropriate.</span>',<br />
},<br />
office = {<br />
description = 'For pages protected by the Wikimedia Foundation',<br />
text = function (protectionObj, args)<br />
local ret = 'This ${PAGETYPE} is currently under the'<br />
.. ' scrutiny of the'<br />
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'<br />
.. ' and is protected.'<br />
if protectionObj.protectionDate then<br />
ret = ret .. ' It has been protected since ${PROTECTIONDATE}.'<br />
end<br />
return ret<br />
end,<br />
explanation = "If you can edit this page, please discuss all changes and"<br />
.. " additions on the ${TALKPAGE} first. '''Do not remove protection from this"<br />
.. " page unless you are authorized by the Wikimedia Foundation to do"<br />
.. " so.'''",<br />
image = 'Padlock-black.svg',<br />
},<br />
reset = {<br />
description = 'For pages protected by the Wikimedia Foundation and'<br />
.. ' "reset" to a bare-bones version',<br />
text = 'This ${PAGETYPE} is currently under the'<br />
.. ' scrutiny of the'<br />
.. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]'<br />
.. ' and is protected.',<br />
explanation = function (protectionObj, args)<br />
local ret = ''<br />
if protectionObj.protectionDate then<br />
ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was'<br />
else<br />
ret = ret .. 'This ${PAGETYPE} has been'<br />
end<br />
ret = ret .. ' reduced to a'<br />
.. ' simplified, "bare bones" version so that it may be completely'<br />
.. ' rewritten to ensure it meets the policies of'<br />
.. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].'<br />
.. ' Standard Wikipedia policies will apply to its rewriting—which'<br />
.. ' will eventually be open to all editors—and will be strictly'<br />
.. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while'<br />
.. ' it is being rebuilt.\n\n'<br />
.. 'Any insertion of material directly from'<br />
.. ' pre-protection revisions of the ${PAGETYPE} will be removed, as'<br />
.. ' will any material added to the ${PAGETYPE} that is not properly'<br />
.. ' sourced. The associated talk page(s) were also cleared on the'<br />
.. " same date.\n\n"<br />
.. "If you can edit this page, please discuss all changes and"<br />
.. " additions on the ${TALKPAGE} first. '''Do not override"<br />
.. " this action, and do not remove protection from this page,"<br />
.. " unless you are authorized by the Wikimedia Foundation"<br />
.. " to do so. No editor may remove this notice.'''"<br />
<br />
return ret<br />
end,<br />
image = 'Padlock-black.svg',<br />
},<br />
sock = {<br />
description = 'For pages protected due to'<br />
.. ' [[Wikipedia:Sock puppetry|sock puppetry]]',<br />
text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of'<br />
.. ' [[Wikipedia:Blocking policy|blocked]] or'<br />
.. ' [[Wikipedia:Banning policy|banned users]]'<br />
.. ' from editing it.',<br />
tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from'<br />
.. ' editing it',<br />
},<br />
template = {<br />
description = 'For [[Wikipedia:High-risk templates|high-risk]]'<br />
.. ' templates and Lua modules',<br />
text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},'<br />
.. ' as it is [[Wikipedia:High-risk templates|high-risk]].',<br />
explanation = 'Please discuss any changes on the ${TALKPAGE}; you may'<br />
.. ' ${EDITREQUEST} to ask an'<br />
.. ' [[Wikipedia:Administrators|administrator]] or'<br />
.. ' [[Wikipedia:Template editor|template editor]] to make an edit if'<br />
.. ' it is [[Help:Minor edit#When to mark an edit as a minor edit'<br />
.. '|uncontroversial]] or supported by'<br />
.. ' [[Wikipedia:Consensus|consensus]]. You can also'<br />
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'<br />
.. ' unprotected.',<br />
tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}'<br />
.. ' to prevent vandalism',<br />
alt = 'Permanently protected ${PAGETYPE}',<br />
},<br />
usertalk = {<br />
description = 'For pages protected against disruptive edits by a'<br />
.. ' particular user',<br />
text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,'<br />
.. ' such as abusing the'<br />
.. ' &#123;&#123;[[Template:unblock|unblock]]&#125;&#125; template.',<br />
explanation = 'If you cannot edit this user talk page and you need to'<br />
.. ' make a change or leave a message, you can'<br />
.. ' [[Wikipedia:Requests for page protection'<br />
.. '#Current requests for edits to a protected page'<br />
.. '|request an edit]],'<br />
.. ' [[Wikipedia:Requests for page protection'<br />
.. '#Current requests for reduction in protection level'<br />
.. '|request unprotection]],'<br />
.. ' [[Special:Userlogin|log in]],'<br />
.. ' or [[Special:UserLogin/signup|create an account]].',<br />
},<br />
vandalism = {<br />
description = 'For pages protected against'<br />
.. ' [[Wikipedia:Vandalism|vandalism]]',<br />
text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].',<br />
explanation = function (protectionObj, args)<br />
local ret = ''<br />
if protectionObj.level == 'sysop' then<br />
ret = ret .. "This protection is '''not''' an endorsement of the"<br />
.. ' ${CURRENTVERSION}. '<br />
end<br />
return ret .. '${EXPLANATIONBLURB}'<br />
end,<br />
tooltip = '${TOOLTIPFRAGMENT} due to vandalism',<br />
}<br />
},<br />
move = {<br />
dispute = {<br />
description = 'For pages protected against page moves due to'<br />
.. ' disputes over the page title',<br />
explanation = "This protection is '''not''' an endorsement of the"<br />
.. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}',<br />
image = 'Padlock-olive.svg'<br />
},<br />
vandalism = {<br />
description = 'For pages protected against'<br />
.. ' [[Wikipedia:Vandalism#Page-move vandalism'<br />
.. ' |page-move vandalism]]'<br />
}<br />
},<br />
autoreview = {},<br />
upload = {}<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
--<br />
-- GENERAL DATA TABLES<br />
--<br />
--------------------------------------------------------------------------------<br />
<br />
--------------------------------------------------------------------------------<br />
-- Protection blurbs<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table produces the protection blurbs available with the<br />
-- ${PROTECTIONBLURB} parameter. It is sorted by protection action and<br />
-- protection level, and is checked by the module in the following order:<br />
-- 1. page's protection action, page's protection level<br />
-- 2. page's protection action, default protection level<br />
-- 3. "edit" protection action, default protection level<br />
--<br />
-- It is possible to use banner parameters inside this table.<br />
-- *required* - this table needs edit, move, autoreview and upload subtables.<br />
protectionBlurbs = {<br />
edit = {<br />
default = 'This ${PAGETYPE} is currently [[Help:Protection|'<br />
.. 'protected]] from editing',<br />
autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access'<br />
.. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered'<br />
.. ' users|unregistered]] users is currently [[Help:Protection|disabled]]',<br />
extendedconfirmed = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} as a result of'<br />
.. ' [[Wikipedia:Arbitration Committee|ArbCom]] enforcement or meets the'<br />
.. ' [[Wikipedia:Protection policy#extended|criteria for community use]]',<br />
},<br />
move = {<br />
default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]'<br />
.. ' from [[Help:Moving a page|page moves]]'<br />
},<br />
autoreview = {<br />
autoconfirmed = 'All edits made to this ${PAGETYPE} by'<br />
.. ' [[Wikipedia:User access levels#New users|new]] or'<br />
.. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]'<br />
.. ' users are currently'<br />
.. ' [[Wikipedia:Pending changes|subject to review]]',<br />
default = 'All edits made to this ${PAGETYPE} by users who are not'<br />
.. ' [[Wikipedia:Reviewing|reviewers]] or'<br />
.. ' [[Wikipedia:Administrators|administrators]] are currently'<br />
.. ' [[Wikipedia:Pending changes|subject to review]]'<br />
},<br />
upload = {<br />
default = 'Uploading new versions of this ${PAGETYPE} is currently disabled'<br />
}<br />
},<br />
<br />
<br />
--------------------------------------------------------------------------------<br />
-- Explanation blurbs<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table produces the explanation blurbs available with the<br />
-- ${EXPLANATIONBLURB} parameter. It is sorted by protection action,<br />
-- protection level, and whether the page is a talk page or not. If the page is<br />
-- a talk page it will have a talk key of "talk"; otherwise it will have a talk<br />
-- key of "subject". The table is checked in the following order:<br />
-- 1. page's protection action, page's protection level, page's talk key<br />
-- 2. page's protection action, page's protection level, default talk key<br />
-- 3. page's protection action, default protection level, page's talk key<br />
-- 4. page's protection action, default protection level, default talk key<br />
--<br />
-- It is possible to use banner parameters inside this table.<br />
-- *required* - this table needs edit, move, autoreview and upload subtables.<br />
explanationBlurbs = {<br />
edit = {<br />
autoconfirmed = {<br />
subject = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'<br />
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'<br />
.. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},'<br />
.. ' [[Wikipedia:Requests for page protection'<br />
.. '#Current requests for reduction in protection level'<br />
.. '|request unprotection]], [[Special:Userlogin|log in]], or'<br />
.. ' [[Special:UserLogin/signup|create an account]].',<br />
default = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details. If you'<br />
.. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can'<br />
.. ' [[Wikipedia:Requests for page protection'<br />
.. '#Current requests for reduction in protection level'<br />
.. '|request unprotection]], [[Special:Userlogin|log in]], or'<br />
.. ' [[Special:UserLogin/signup|create an account]].',<br />
},<br />
extendedconfirmed = {<br />
default = 'Extended confirmed protection prevents edits from all IP editors'<br />
.. ' and registered users with fewer than 30 days tenure and 500 edits.'<br />
.. ' The [[Wikipedia:Protection policy#extended|policy on community use]]'<br />
.. ' specifies that extended confirmed protection can be applied to combat'<br />
.. ' disruption, if semi-protection has proven to be ineffective.'<br />
.. ' Please discuss any changes on the ${TALKPAGE}; you may'<br />
.. ' ${EDITREQUEST} to ask for unconversial changes supported by'<br />
.. ' [[Wikipedia:Consensus|consensus]].'<br />
},<br />
default = {<br />
subject = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' Please discuss any changes on the ${TALKPAGE}; you'<br />
.. ' may ${EDITREQUEST} to ask an'<br />
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'<br />
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'<br />
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'<br />
.. '|consensus]]. You may also [[Wikipedia:Requests for'<br />
.. ' page protection#Current requests for reduction in protection level'<br />
.. '|request]] that this page be unprotected.',<br />
default = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' You may [[Wikipedia:Requests for page'<br />
.. ' protection#Current requests for edits to a protected page|request an'<br />
.. ' edit]] to this page, or [[Wikipedia:Requests for'<br />
.. ' page protection#Current requests for reduction in protection level'<br />
.. '|ask]] for it to be unprotected.'<br />
}<br />
},<br />
move = {<br />
default = {<br />
subject = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' The page may still be edited but cannot be moved'<br />
.. ' until unprotected. Please discuss any suggested moves on the'<br />
.. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also'<br />
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'<br />
.. ' unprotected.',<br />
default = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' The page may still be edited but cannot be moved'<br />
.. ' until unprotected. Please discuss any suggested moves at'<br />
.. ' [[Wikipedia:Requested moves]]. You can also'<br />
.. ' [[Wikipedia:Requests for page protection|request]] that the page be'<br />
.. ' unprotected.'<br />
}<br />
},<br />
autoreview = {<br />
default = {<br />
reviewer = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' Edits to this ${PAGETYPE} will not be visible to readers'<br />
.. ' until they are accepted by a reviewer or an administrator.'<br />
.. ' To avoid the need for your edits to be reviewed, you may'<br />
.. ' [[Wikipedia:Requests for page protection'<br />
.. '#Current requests for reduction in protection level'<br />
.. '|request unprotection]]. Experienced editors may also'<br />
.. ' request the [[Wikipedia:Reviewing|reviewer user right]].',<br />
default = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' Edits to this ${PAGETYPE} by new and unregistered users'<br />
.. ' will not be visible to readers until they are accepted by'<br />
.. ' a reviewer. To avoid the need for your edits to be'<br />
.. ' reviewed, you may'<br />
.. ' [[Wikipedia:Requests for page protection'<br />
.. '#Current requests for reduction in protection level'<br />
.. '|request unprotection]], [[Special:Userlogin|log in]], or'<br />
.. ' [[Special:UserLogin/signup|create an account]].'<br />
},<br />
},<br />
upload = {<br />
default = {<br />
default = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' The page may still be edited but new versions of the file'<br />
.. ' cannot be uploaded until it is unprotected. You can'<br />
.. ' request that a new version be uploaded by using a'<br />
.. ' [[Wikipedia:Edit requests|protected edit request]], or you'<br />
.. ' can [[Wikipedia:Requests for page protection|request]]'<br />
.. ' that the file be unprotected.'<br />
}<br />
}<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Protection levels<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table provides the data for the ${PROTECTIONLEVEL} parameter, which<br />
-- produces a short label for different protection levels. It is sorted by<br />
-- protection action and protection level, and is checked in the following<br />
-- order:<br />
-- 1. page's protection action, page's protection level<br />
-- 2. page's protection action, default protection level<br />
-- 3. "edit" protection action, default protection level<br />
--<br />
-- It is possible to use banner parameters inside this table.<br />
-- *required* - this table needs edit, move, autoreview and upload subtables.<br />
protectionLevels = {<br />
edit = {<br />
default = 'protected',<br />
templateeditor = 'template-protected',<br />
extendedconfirmed = 'extended-protected',<br />
autoconfirmed = 'semi-protected',<br />
},<br />
move = {<br />
default = 'move-protected'<br />
},<br />
autoreview = {<br />
},<br />
upload = {<br />
default = 'upload-protected'<br />
}<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Images<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table lists different padlock images for each protection action and<br />
-- protection level. It is used if an image is not specified in any of the<br />
-- banner data tables, and if the page does not satisfy the conditions for using<br />
-- the ['image-filename-indef'] image. It is checked in the following order:<br />
-- 1. page's protection action, page's protection level<br />
-- 2. page's protection action, default protection level<br />
images = {<br />
edit = {<br />
default = 'Padlock.svg',<br />
templateeditor = 'Padlock-pink.svg',<br />
extendedconfirmed = 'Padlock-blue.svg',<br />
autoconfirmed = 'Padlock-silver.svg'<br />
},<br />
move = {<br />
default = 'Padlock-olive.svg',<br />
},<br />
autoreview = {<br />
autoconfirmed = 'Padlock-silver-light.svg',<br />
default = 'Padlock-orange.svg'<br />
},<br />
upload = {<br />
default = 'Padlock-purple.svg'<br />
}<br />
},<br />
<br />
-- Pages with a reason specified in this table will show the special "indef"<br />
-- padlock, defined in the 'image-filename-indef' message, if no expiry is set.<br />
indefImageReasons = {<br />
template = true<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Image links<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table provides the data for the ${IMAGELINK} parameter, which gets<br />
-- the image link for small padlock icons based on the page's protection action<br />
-- and protection level. It is checked in the following order:<br />
-- 1. page's protection action, page's protection level<br />
-- 2. page's protection action, default protection level<br />
-- 3. "edit" protection action, default protection level<br />
--<br />
-- It is possible to use banner parameters inside this table.<br />
-- *required* - this table needs edit, move, autoreview and upload subtables.<br />
imageLinks = {<br />
edit = {<br />
default = 'Wikipedia:Protection policy#full',<br />
templateeditor = 'Wikipedia:Protection policy#template',<br />
extendedconfirmed = 'Wikipedia:Protection policy#extended',<br />
autoconfirmed = 'Wikipedia:Protection policy#semi'<br />
},<br />
move = {<br />
default = 'Wikipedia:Protection policy#move'<br />
},<br />
autoreview = {<br />
autoconfirmed = 'Wikipedia:Protection policy#pc1',<br />
reviewer = 'Wikipedia:Protection policy#pc2'<br />
},<br />
upload = {<br />
default = 'Wikipedia:Protection policy#upload'<br />
}<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Padlock indicator names<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table provides the "name" attribute for the <indicator> extension tag<br />
-- with which small padlock icons are generated. All indicator tags on a page<br />
-- are displayed in alphabetical order based on this attribute, and with<br />
-- indicator tags with duplicate names, the last tag on the page wins.<br />
-- The attribute is chosen based on the protection action; table keys must be a<br />
-- protection action name or the string "default".<br />
padlockIndicatorNames = {<br />
autoreview = 'pp-autoreview',<br />
default = 'pp-default'<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Protection categories<br />
--------------------------------------------------------------------------------<br />
<br />
--[[<br />
-- The protection categories are stored in the protectionCategories table.<br />
-- Keys to this table are made up of the following strings:<br />
--<br />
-- 1. the expiry date<br />
-- 2. the namespace<br />
-- 3. the protection reason (e.g. "dispute" or "vandalism")<br />
-- 4. the protection level (e.g. "sysop" or "autoconfirmed")<br />
-- 5. the action (e.g. "edit" or "move")<br />
-- <br />
-- When the module looks up a category in the table, first it will will check to<br />
-- see a key exists that corresponds to all five parameters. For example, a<br />
-- user page semi-protected from vandalism for two weeks would have the key<br />
-- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module<br />
-- changes the first part of the key to "all" and checks the table again. It<br />
-- keeps checking increasingly generic key combinations until it finds the<br />
-- field, or until it reaches the key "all-all-all-all-all".<br />
--<br />
-- The module uses a binary matrix to determine the order in which to search.<br />
-- This is best demonstrated by a table. In this table, the "0" values<br />
-- represent "all", and the "1" values represent the original data (e.g.<br />
-- "indef" or "file" or "vandalism").<br />
--<br />
-- expiry namespace reason level action<br />
-- order<br />
-- 1 1 1 1 1 1<br />
-- 2 0 1 1 1 1<br />
-- 3 1 0 1 1 1<br />
-- 4 0 0 1 1 1<br />
-- 5 1 1 0 1 1<br />
-- 6 0 1 0 1 1<br />
-- 7 1 0 0 1 1<br />
-- 8 0 0 0 1 1<br />
-- 9 1 1 1 0 1<br />
-- 10 0 1 1 0 1<br />
-- 11 1 0 1 0 1<br />
-- 12 0 0 1 0 1<br />
-- 13 1 1 0 0 1<br />
-- 14 0 1 0 0 1<br />
-- 15 1 0 0 0 1<br />
-- 16 0 0 0 0 1<br />
-- 17 1 1 1 1 0<br />
-- 18 0 1 1 1 0<br />
-- 19 1 0 1 1 0<br />
-- 20 0 0 1 1 0<br />
-- 21 1 1 0 1 0<br />
-- 22 0 1 0 1 0<br />
-- 23 1 0 0 1 0<br />
-- 24 0 0 0 1 0<br />
-- 25 1 1 1 0 0<br />
-- 26 0 1 1 0 0<br />
-- 27 1 0 1 0 0<br />
-- 28 0 0 1 0 0<br />
-- 29 1 1 0 0 0<br />
-- 30 0 1 0 0 0<br />
-- 31 1 0 0 0 0<br />
-- 32 0 0 0 0 0<br />
--<br />
-- In this scheme the action has the highest priority, as it is the last<br />
-- to change, and the expiry has the least priority, as it changes the most.<br />
-- The priorities of the expiry, the protection level and the action are<br />
-- fixed, but the priorities of the reason and the namespace can be swapped<br />
-- through the use of the cfg.bannerDataNamespaceHasPriority table.<br />
--]]<br />
<br />
-- If the reason specified to the template is listed in this table,<br />
-- namespace data will take priority over reason data in the protectionCategories<br />
-- table.<br />
reasonsWithNamespacePriority = {<br />
vandalism = true,<br />
},<br />
<br />
-- The string to use as a namespace key for the protectionCategories table for each<br />
-- namespace number.<br />
categoryNamespaceKeys = {<br />
[ 2] = 'user',<br />
[ 3] = 'user',<br />
[ 4] = 'project',<br />
[ 6] = 'file',<br />
[ 8] = 'mediawiki',<br />
[ 10] = 'template',<br />
[ 12] = 'project',<br />
[ 14] = 'category',<br />
[100] = 'portal',<br />
[828] = 'module',<br />
},<br />
<br />
protectionCategories = {<br />
['all|all|all|all|all'] = 'Wikipedia fully protected pages',<br />
['all|all|office|all|all'] = 'Wikipedia Office-protected pages',<br />
['all|all|reset|all|all'] = 'Wikipedia Office-protected pages',<br />
['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages',<br />
['all|all|mainpage|all|all'] = 'Wikipedia fully-protected main page files',<br />
['all|all|all|extendedconfirmed|all'] = 'Wikipedia pages under 30-500 editing restriction',<br />
['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia pages under 30-500 editing restriction',<br />
['all|template|all|all|edit'] = 'Wikipedia fully-protected templates',<br />
['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages',<br />
['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages',<br />
['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people',<br />
['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people',<br />
['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute',<br />
['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users',<br />
['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism',<br />
['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories',<br />
['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files',<br />
['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals',<br />
['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages',<br />
['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages',<br />
['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates',<br />
['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages',<br />
['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates',<br />
['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people',<br />
['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people',<br />
['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute',<br />
['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users',<br />
['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism',<br />
['all|category|all|sysop|edit'] = 'Wikipedia protected categories',<br />
['all|file|all|sysop|edit'] = 'Wikipedia fully-protected files',<br />
['all|project|all|sysop|edit'] = 'Wikipedia fully-protected project pages',<br />
['all|talk|all|sysop|edit'] = 'Wikipedia fully-protected talk pages',<br />
['all|template|all|sysop|edit'] = 'Wikipedia fully-protected templates',<br />
['all|user|all|sysop|edit'] = 'Wikipedia protected user and user talk pages',<br />
['all|module|all|all|edit'] = 'Wikipedia fully-protected modules',<br />
['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules',<br />
['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules',<br />
['all|all|all|sysop|move'] = 'Wikipedia move-protected pages',<br />
['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages',<br />
['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute',<br />
['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism',<br />
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',<br />
['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals',<br />
['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages',<br />
['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages',<br />
['all|template|all|sysop|move'] = 'Wikipedia move-protected templates',<br />
['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages',<br />
['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages',<br />
['all|all|all|reviewer|autoreview'] = 'Wikipedia pending changes protected pages (level 2)',<br />
['all|file|all|all|upload'] = 'Wikipedia upload-protected files',<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Expiry category config<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table configures the expiry category behaviour for each protection<br />
-- action.<br />
-- * If set to true, setting that action will always categorise the page if<br />
-- an expiry parameter is not set.<br />
-- * If set to false, setting that action will never categorise the page.<br />
-- * If set to nil, the module will categorise the page if:<br />
-- 1) an expiry parameter is not set, and<br />
-- 2) a reason is provided, and<br />
-- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck<br />
-- table.<br />
<br />
expiryCheckActions = {<br />
edit = nil,<br />
move = false,<br />
autoreview = true,<br />
upload = false<br />
},<br />
<br />
reasonsWithoutExpiryCheck = {<br />
blp = true,<br />
template = true,<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Pagetypes<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table produces the page types available with the ${PAGETYPE} parameter.<br />
-- Keys are namespace numbers, or the string "default" for the default value.<br />
pagetypes = {<br />
[0] = 'article',<br />
[6] = 'file',<br />
[10] = 'template',<br />
[14] = 'category',<br />
[828] = 'module',<br />
default = 'page'<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Strings marking indefinite protection<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table contains values passed to the expiry parameter that mean the page<br />
-- is protected indefinitely.<br />
indefStrings = {<br />
['indef'] = true,<br />
['indefinite'] = true,<br />
['indefinitely'] = true,<br />
['infinite'] = true,<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Group hierarchy<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table maps each group to all groups that have a superset of the original<br />
-- group's page editing permissions.<br />
hierarchy = {<br />
sysop = {},<br />
reviewer = {'sysop'},<br />
filemover = {'sysop'},<br />
templateeditor = {'sysop'},<br />
extendedconfirmed = {'sysop'},<br />
autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'},<br />
user = {'autoconfirmed'},<br />
['*'] = {'user'}<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- Wrapper templates and their default arguments<br />
--------------------------------------------------------------------------------<br />
<br />
-- This table contains wrapper templates used with the module, and their<br />
-- default arguments. Templates specified in this table should contain the<br />
-- following invocation, and no other template content:<br />
--<br />
-- {{#invoke:Protection banner|main}}<br />
--<br />
-- If other content is desired, it can be added between<br />
-- <noinclude>...</noinclude> tags.<br />
--<br />
-- When a user calls one of these wrapper templates, they will use the<br />
-- default arguments automatically. However, users can override any of the<br />
-- arguments.<br />
wrappers = {<br />
['Template:Pp'] = {},<br />
['Template:Pp-30-500'] = {'ecp'},<br />
['Template:Pp-blp'] = {'blp'},<br />
-- we don't need Template:Pp-create<br />
['Template:Pp-dispute'] = {'dispute'},<br />
['Template:Pp-main-page'] = {'mainpage'},<br />
['Template:Pp-move'] = {action = 'move'},<br />
['Template:Pp-move-dispute'] = {'dispute', action = 'move'},<br />
-- we don't need Template:Pp-move-indef<br />
['Template:Pp-move-vandalism'] = {'vandalism', action = 'move'},<br />
['Template:Pp-office'] = {'office'},<br />
['Template:Pp-office-dmca'] = {'dmca'},<br />
['Template:Pp-pc1'] = {action = 'autoreview', small = true},<br />
['Template:Pp-pc2'] = {action = 'autoreview', small = true},<br />
['Template:Pp-reset'] = {'reset'},<br />
['Template:Pp-semi-indef'] = {small = true},<br />
['Template:Pp-sock'] = {'sock'},<br />
['Template:Pp-template'] = {'template', small = true},<br />
['Template:Pp-upload'] = {action = 'upload'},<br />
['Template:Pp-usertalk'] = {'usertalk'},<br />
['Template:Pp-vandalism'] = {'vandalism'},<br />
},<br />
<br />
--------------------------------------------------------------------------------<br />
-- <br />
-- MESSAGES<br />
-- <br />
--------------------------------------------------------------------------------<br />
<br />
msg = {<br />
<br />
--------------------------------------------------------------------------------<br />
-- Intro blurb and intro fragment<br />
--------------------------------------------------------------------------------<br />
<br />
-- These messages specify what is produced by the ${INTROBLURB} and<br />
-- ${INTROFRAGMENT} parameters. If the protection is temporary they use the<br />
-- intro-blurb-expiry or intro-fragment-expiry, and if not they use<br />
-- intro-blurb-noexpiry or intro-fragment-noexpiry.<br />
-- It is possible to use banner parameters in these messages.<br />
['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.',<br />
['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.',<br />
['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},',<br />
['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Tooltip blurb<br />
--------------------------------------------------------------------------------<br />
<br />
-- These messages specify what is produced by the ${TOOLTIPBLURB} parameter.<br />
-- If the protection is temporary the tooltip-blurb-expiry message is used, and<br />
-- if not the tooltip-blurb-noexpiry message is used.<br />
-- It is possible to use banner parameters in these messages.<br />
['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.',<br />
['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.',<br />
['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},',<br />
['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Special explanation blurb<br />
--------------------------------------------------------------------------------<br />
<br />
-- An explanation blurb for pages that cannot be unprotected, e.g. for pages<br />
-- in the MediaWiki namespace.<br />
-- It is possible to use banner parameters in this message.<br />
['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|'<br />
.. 'protection policy]] and ${PROTECTIONLOG} for more details.'<br />
.. ' Please discuss any changes on the ${TALKPAGE}; you'<br />
.. ' may ${EDITREQUEST} to ask an'<br />
.. ' [[Wikipedia:Administrators|administrator]] to make an edit if it'<br />
.. ' is [[Help:Minor edit#When to mark an edit as a minor edit'<br />
.. '|uncontroversial]] or supported by [[Wikipedia:Consensus'<br />
.. '|consensus]].',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Protection log display values<br />
--------------------------------------------------------------------------------<br />
<br />
-- These messages determine the display values for the protection log link<br />
-- or the pending changes log link produced by the ${PROTECTIONLOG} parameter.<br />
-- It is possible to use banner parameters in these messages.<br />
['protection-log-display'] = 'protection log',<br />
['pc-log-display'] = 'pending changes log',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Current version display values<br />
--------------------------------------------------------------------------------<br />
<br />
-- These messages determine the display values for the page history link<br />
-- or the move log link produced by the ${CURRENTVERSION} parameter.<br />
-- It is possible to use banner parameters in these messages.<br />
['current-version-move-display'] = 'current title',<br />
['current-version-edit-display'] = 'current version',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Talk page<br />
--------------------------------------------------------------------------------<br />
<br />
-- This message determines the display value of the talk page link produced<br />
-- with the ${TALKPAGE} parameter.<br />
-- It is possible to use banner parameters in this message.<br />
['talk-page-link-display'] = 'talk page',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Edit requests<br />
--------------------------------------------------------------------------------<br />
<br />
-- This message determines the display value of the edit request link produced<br />
-- with the ${EDITREQUEST} parameter.<br />
-- It is possible to use banner parameters in this message.<br />
['edit-request-display'] = 'submit an edit request',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Expiry date format<br />
--------------------------------------------------------------------------------<br />
<br />
-- This is the format for the blurb expiry date. It should be valid input for<br />
-- the first parameter of the #time parser function.<br />
['expiry-date-format'] = 'F j, Y',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Tracking categories<br />
--------------------------------------------------------------------------------<br />
<br />
-- These messages determine which tracking categories the module outputs.<br />
['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates',<br />
['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules',<br />
<br />
--------------------------------------------------------------------------------<br />
-- Images<br />
--------------------------------------------------------------------------------<br />
<br />
-- These are images that are not defined by their protection action and protection level.<br />
['image-filename-indef'] = 'Padlock.svg',<br />
['image-filename-default'] = 'Transparent.gif',<br />
<br />
--------------------------------------------------------------------------------<br />
-- End messages<br />
--------------------------------------------------------------------------------<br />
}<br />
<br />
--------------------------------------------------------------------------------<br />
-- End configuration<br />
--------------------------------------------------------------------------------<br />
}</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Navbox&diff=1750Module:Navbox2018-06-18T15:47:02Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>--<br />
-- This module implements {{Navbox}}<br />
--<br />
<br />
local p = {}<br />
<br />
local navbar = require('Module:Navbar')._navbar<br />
local getArgs -- lazily initialized<br />
<br />
local args<br />
local border<br />
local listnums = {}<br />
local ODD_EVEN_MARKER = '\127_ODDEVEN_\127'<br />
local RESTART_MARKER = '\127_ODDEVEN0_\127'<br />
local REGEX_MARKER = '\127_ODDEVEN(%d?)_\127'<br />
<br />
local function striped(wikitext)<br />
-- Return wikitext with markers replaced for odd/even striping.<br />
-- Child (subgroup) navboxes are flagged with a category that is removed<br />
-- by parent navboxes. The result is that the category shows all pages<br />
-- where a child navbox is not contained in a parent navbox.<br />
local orphanCat = '[[Category:Navbox orphans]]'<br />
if border == 'subgroup' and args.orphan ~= 'yes' then<br />
-- No change; striping occurs in outermost navbox.<br />
return wikitext .. orphanCat<br />
end<br />
local first, second = 'odd', 'even'<br />
if args.evenodd then<br />
if args.evenodd == 'swap' then<br />
first, second = second, first<br />
else<br />
first = args.evenodd<br />
second = first<br />
end<br />
end<br />
local changer<br />
if first == second then<br />
changer = first<br />
else<br />
local index = 0<br />
changer = function (code)<br />
if code == '0' then<br />
-- Current occurrence is for a group before a nested table.<br />
-- Set it to first as a valid although pointless class.<br />
-- The next occurrence will be the first row after a title<br />
-- in a subgroup and will also be first.<br />
index = 0<br />
return first<br />
end<br />
index = index + 1<br />
return index % 2 == 1 and first or second<br />
end<br />
end<br />
local regex = orphanCat:gsub('([%[%]])', '%%%1')<br />
return (wikitext:gsub(regex, ''):gsub(REGEX_MARKER, changer)) -- () omits gsub count<br />
end<br />
<br />
local function processItem(item, nowrapitems)<br />
if item:sub(1, 2) == '{|' then<br />
-- Applying nowrap to lines in a table does not make sense.<br />
-- Add newlines to compensate for trim of x in |parm=x in a template.<br />
return '\n' .. item ..'\n'<br />
end<br />
if nowrapitems == 'yes' then<br />
local lines = {}<br />
for line in (item .. '\n'):gmatch('([^\n]*)\n') do<br />
local prefix, content = line:match('^([*:;#]+)%s*(.*)')<br />
if prefix and not content:match('^<span class="nowrap">') then<br />
line = prefix .. '<span class="nowrap">' .. content .. '</span>'<br />
end<br />
table.insert(lines, line)<br />
end<br />
item = table.concat(lines, '\n')<br />
end<br />
if item:match('^[*:;#]') then<br />
return '\n' .. item ..'\n'<br />
end<br />
return item<br />
end<br />
<br />
local function renderNavBar(titleCell)<br />
<br />
if args.navbar ~= 'off' and args.navbar ~= 'plain' and not (not args.name and mw.getCurrentFrame():getParent():getTitle():gsub('/sandbox$', '') == 'Template:Navbox') then<br />
titleCell:wikitext(navbar{<br />
args.name,<br />
mini = 1,<br />
fontstyle = (args.basestyle or '') .. ';' .. (args.titlestyle or '') .. ';background:none transparent;border:none;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;'<br />
})<br />
end<br />
<br />
end<br />
<br />
--<br />
-- Title row<br />
--<br />
local function renderTitleRow(tbl)<br />
if not args.title then return end<br />
<br />
local titleRow = tbl:tag('tr')<br />
<br />
if args.titlegroup then<br />
titleRow<br />
:tag('th')<br />
:attr('scope', 'row')<br />
:addClass('navbox-group')<br />
:addClass(args.titlegroupclass)<br />
:cssText(args.basestyle)<br />
:cssText(args.groupstyle)<br />
:cssText(args.titlegroupstyle)<br />
:wikitext(args.titlegroup)<br />
end<br />
<br />
local titleCell = titleRow:tag('th'):attr('scope', 'col')<br />
<br />
if args.titlegroup then<br />
titleCell<br />
:css('border-left', '2px solid #fdfdfd')<br />
:css('width', '100%')<br />
end<br />
<br />
local titleColspan = 2<br />
if args.imageleft then titleColspan = titleColspan + 1 end<br />
if args.image then titleColspan = titleColspan + 1 end<br />
if args.titlegroup then titleColspan = titleColspan - 1 end<br />
<br />
titleCell<br />
:cssText(args.basestyle)<br />
:cssText(args.titlestyle)<br />
:addClass('navbox-title')<br />
:attr('colspan', titleColspan)<br />
<br />
renderNavBar(titleCell)<br />
<br />
titleCell<br />
:tag('div')<br />
-- id for aria-labelledby attribute<br />
:attr('id', mw.uri.anchorEncode(args.title))<br />
:addClass(args.titleclass)<br />
:css('font-size', '114%')<br />
:css('margin', '0 4em')<br />
:wikitext(processItem(args.title))<br />
end<br />
<br />
--<br />
-- Above/Below rows<br />
--<br />
<br />
local function getAboveBelowColspan()<br />
local ret = 2<br />
if args.imageleft then ret = ret + 1 end<br />
if args.image then ret = ret + 1 end<br />
return ret<br />
end<br />
<br />
local function renderAboveRow(tbl)<br />
if not args.above then return end<br />
<br />
tbl:tag('tr')<br />
:tag('td')<br />
:addClass('navbox-abovebelow')<br />
:addClass(args.aboveclass)<br />
:cssText(args.basestyle)<br />
:cssText(args.abovestyle)<br />
:attr('colspan', getAboveBelowColspan())<br />
:tag('div')<br />
-- id for aria-labelledby attribute, if no title<br />
:attr('id', args.title and nil or mw.uri.anchorEncode(args.above))<br />
:wikitext(processItem(args.above, args.nowrapitems))<br />
end<br />
<br />
local function renderBelowRow(tbl)<br />
if not args.below then return end<br />
<br />
tbl:tag('tr')<br />
:tag('td')<br />
:addClass('navbox-abovebelow')<br />
:addClass(args.belowclass)<br />
:cssText(args.basestyle)<br />
:cssText(args.belowstyle)<br />
:attr('colspan', getAboveBelowColspan())<br />
:tag('div')<br />
:wikitext(processItem(args.below, args.nowrapitems))<br />
end<br />
<br />
--<br />
-- List rows<br />
--<br />
local function renderListRow(tbl, index, listnum)<br />
local row = tbl:tag('tr')<br />
<br />
if index == 1 and args.imageleft then<br />
row<br />
:tag('td')<br />
:addClass('navbox-image')<br />
:addClass(args.imageclass)<br />
:css('width', '1px') -- Minimize width<br />
:css('padding', '0px 2px 0px 0px')<br />
:cssText(args.imageleftstyle)<br />
:attr('rowspan', #listnums)<br />
:tag('div')<br />
:wikitext(processItem(args.imageleft))<br />
end<br />
<br />
if args['group' .. listnum] then<br />
local groupCell = row:tag('th')<br />
<br />
-- id for aria-labelledby attribute, if lone group with no title or above<br />
if listnum == 1 and not (args.title or args.above or args.group2) then<br />
groupCell<br />
:attr('id', mw.uri.anchorEncode(args.group1))<br />
end<br />
<br />
groupCell<br />
:attr('scope', 'row')<br />
:addClass('navbox-group')<br />
:addClass(args.groupclass)<br />
:cssText(args.basestyle)<br />
:css('width', args.groupwidth or '1%') -- If groupwidth not specified, minimize width<br />
<br />
groupCell<br />
:cssText(args.groupstyle)<br />
:cssText(args['group' .. listnum .. 'style'])<br />
:wikitext(args['group' .. listnum])<br />
end<br />
<br />
local listCell = row:tag('td')<br />
<br />
if args['group' .. listnum] then<br />
listCell<br />
:css('text-align', 'left')<br />
:css('border-left-width', '2px')<br />
:css('border-left-style', 'solid')<br />
else<br />
listCell:attr('colspan', 2)<br />
end<br />
<br />
if not args.groupwidth then<br />
listCell:css('width', '100%')<br />
end<br />
<br />
local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing<br />
if index % 2 == 1 then<br />
rowstyle = args.oddstyle<br />
else<br />
rowstyle = args.evenstyle<br />
end<br />
<br />
local listText = args['list' .. listnum]<br />
local oddEven = ODD_EVEN_MARKER<br />
if listText:sub(1, 12) == '</div><table' then<br />
-- Assume list text is for a subgroup navbox so no automatic striping for this row.<br />
oddEven = listText:find('<th[^>]*"navbox%-title"') and RESTART_MARKER or 'odd'<br />
end<br />
listCell<br />
:css('padding', '0px')<br />
:cssText(args.liststyle)<br />
:cssText(rowstyle)<br />
:cssText(args['list' .. listnum .. 'style'])<br />
:addClass('navbox-list')<br />
:addClass('navbox-' .. oddEven)<br />
:addClass(args.listclass)<br />
:tag('div')<br />
:css('padding', (index == 1 and args.list1padding) or args.listpadding or '0em 0.25em')<br />
:wikitext(processItem(listText, args.nowrapitems))<br />
<br />
if index == 1 and args.image then<br />
row<br />
:tag('td')<br />
:addClass('navbox-image')<br />
:addClass(args.imageclass)<br />
:css('width', '1px') -- Minimize width<br />
:css('padding', '0px 0px 0px 2px')<br />
:cssText(args.imagestyle)<br />
:attr('rowspan', #listnums)<br />
:tag('div')<br />
:wikitext(processItem(args.image))<br />
end<br />
end<br />
<br />
<br />
--<br />
-- Tracking categories<br />
--<br />
<br />
local function needsHorizontalLists()<br />
if border == 'subgroup' or args.tracking == 'no' then<br />
return false<br />
end<br />
local listClasses = {<br />
['plainlist'] = true, ['hlist'] = true, ['hlist hnum'] = true,<br />
['hlist hwrap'] = true, ['hlist vcard'] = true, ['vcard hlist'] = true,<br />
['hlist vevent'] = true,<br />
}<br />
return not (listClasses[args.listclass] or listClasses[args.bodyclass])<br />
end<br />
<br />
local function hasBackgroundColors()<br />
for _, key in ipairs({'titlestyle', 'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do<br />
if tostring(args[key]):find('background', 1, true) then<br />
return true<br />
end<br />
end<br />
end<br />
<br />
local function hasBorders()<br />
for _, key in ipairs({'groupstyle', 'basestyle', 'abovestyle', 'belowstyle'}) do<br />
if tostring(args[key]):find('border', 1, true) then<br />
return true<br />
end<br />
end<br />
end<br />
<br />
local function isIllegible()<br />
local styleratio = require('Module:Color contrast')._styleratio<br />
<br />
for key, style in pairs(args) do<br />
if tostring(key):match("style$") then<br />
if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then<br />
return true<br />
end<br />
end<br />
end<br />
return false<br />
end<br />
<br />
local function getTrackingCategories()<br />
local cats = {}<br />
if needsHorizontalLists() then table.insert(cats, 'Navigational boxes without horizontal lists') end<br />
if hasBackgroundColors() then table.insert(cats, 'Navboxes using background colours') end<br />
if isIllegible() then table.insert(cats, 'Potentially illegible navboxes') end<br />
if hasBorders() then table.insert(cats, 'Navboxes using borders') end<br />
return cats<br />
end<br />
<br />
local function renderTrackingCategories(builder)<br />
local title = mw.title.getCurrentTitle()<br />
if title.namespace ~= 10 then return end -- not in template space<br />
local subpage = title.subpageText<br />
if subpage == 'doc' or subpage == 'sandbox' or subpage == 'testcases' then return end<br />
<br />
for _, cat in ipairs(getTrackingCategories()) do<br />
builder:wikitext('[[Category:' .. cat .. ']]')<br />
end<br />
end<br />
<br />
--<br />
-- Main navbox tables<br />
--<br />
local function renderMainTable()<br />
local tbl = mw.html.create('table')<br />
:addClass('nowraplinks')<br />
:addClass(args.bodyclass)<br />
<br />
if args.title and (args.state ~= 'plain' and args.state ~= 'off') then<br />
tbl<br />
:addClass('collapsible')<br />
:addClass(args.state or 'autocollapse')<br />
end<br />
<br />
tbl:css('border-spacing', 0)<br />
if border == 'subgroup' or border == 'none' then<br />
tbl<br />
:addClass('navbox-subgroup')<br />
:cssText(args.bodystyle)<br />
:cssText(args.style)<br />
else -- regular navbox - bodystyle and style will be applied to the wrapper table<br />
tbl<br />
:addClass('navbox-inner')<br />
:css('background', 'transparent')<br />
:css('color', 'inherit')<br />
end<br />
tbl:cssText(args.innerstyle)<br />
<br />
renderTitleRow(tbl)<br />
renderAboveRow(tbl)<br />
for i, listnum in ipairs(listnums) do<br />
renderListRow(tbl, i, listnum)<br />
end<br />
renderBelowRow(tbl)<br />
<br />
return tbl<br />
end<br />
<br />
function p._navbox(navboxArgs)<br />
args = navboxArgs<br />
<br />
for k, _ in pairs(args) do<br />
if type(k) == 'string' then<br />
local listnum = k:match('^list(%d+)$')<br />
if listnum then table.insert(listnums, tonumber(listnum)) end<br />
end<br />
end<br />
table.sort(listnums)<br />
<br />
border = mw.text.trim(args.border or args[1] or '')<br />
if border == 'child' then<br />
border = 'subgroup'<br />
end<br />
<br />
-- render the main body of the navbox<br />
local tbl = renderMainTable()<br />
<br />
-- render the appropriate wrapper around the navbox, depending on the border param<br />
local res = mw.html.create()<br />
if border == 'none' then<br />
local nav = res:tag('div')<br />
:attr('role', 'navigation')<br />
:node(tbl)<br />
-- aria-labelledby title, otherwise above, otherwise lone group<br />
if args.title or args.above or (args.group1 and not args.group2) then<br />
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))<br />
else<br />
nav:attr('aria-label', 'Navbox')<br />
end<br />
elseif border == 'subgroup' then<br />
-- We assume that this navbox is being rendered in a list cell of a parent navbox, and is<br />
-- therefore inside a div with padding:0em 0.25em. We start with a </div> to avoid the<br />
-- padding being applied, and at the end add a <div> to balance out the parent's </div><br />
res<br />
:wikitext('</div>')<br />
:node(tbl)<br />
:wikitext('<div>')<br />
else<br />
local nav = res:tag('div')<br />
:attr('role', 'navigation')<br />
:addClass('navbox')<br />
:cssText(args.bodystyle)<br />
:cssText(args.style)<br />
:css('padding', '3px')<br />
:node(tbl)<br />
-- aria-labelledby title, otherwise above, otherwise lone group<br />
if args.title or args.above or (args.group1 and not args.group2) then<br />
nav:attr('aria-labelledby', mw.uri.anchorEncode(args.title or args.above or args.group1))<br />
else<br />
nav:attr('aria-label', 'Navbox')<br />
end<br />
end<br />
<br />
renderTrackingCategories(res)<br />
<br />
return striped(tostring(res))<br />
end<br />
<br />
function p.navbox(frame)<br />
if not getArgs then<br />
getArgs = require('Module:Arguments').getArgs<br />
end<br />
args = getArgs(frame, {wrappers = {'Template:Navbox', 'Template:Navbox subgroup'}})<br />
if frame.args.border then<br />
-- This allows Template:Navbox_subgroup to use {{#invoke:Navbox|navbox|border=...}}.<br />
args.border = frame.args.border<br />
end<br />
<br />
-- Read the arguments in the order they'll be output in, to make references number in the right order.<br />
local _<br />
_ = args.title<br />
_ = args.above<br />
for i = 1, 20 do<br />
_ = args["group" .. tostring(i)]<br />
_ = args["list" .. tostring(i)]<br />
end<br />
_ = args.below<br />
<br />
return p._navbox(args)<br />
end<br />
<br />
return p</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Navbar&diff=1748Module:Navbar2018-06-18T15:47:01Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>local p = {}<br />
<br />
local getArgs<br />
local ul<br />
<br />
function p.addItem (mini, full, link, descrip, args, url)<br />
local l<br />
if url then<br />
l = {'[', '', ']'}<br />
else<br />
l = {'[[', '|', ']]'}<br />
end<br />
ul:tag('li')<br />
:addClass('nv-'..full)<br />
:wikitext(l[1] .. link .. l[2])<br />
:tag(args.mini and 'abbr' or 'span')<br />
:attr('title', descrip..' this template')<br />
:cssText(args.fontstyle)<br />
:wikitext(args.mini and mini or full)<br />
:done()<br />
:wikitext(l[3])<br />
end<br />
<br />
function p.brackets (position, c, args, div)<br />
if args.brackets then<br />
div<br />
:tag('span')<br />
:css('margin-'..position, '-0.125em')<br />
:cssText(args.fontstyle)<br />
:wikitext(c)<br />
end<br />
end<br />
<br />
function p._navbar(args)<br />
local show = {true, true, true, false, false, false}<br />
local titleArg = 1<br />
<br />
if args.collapsible then<br />
titleArg = 2<br />
if not args.plain then args.mini = 1 end<br />
if args.fontcolor then<br />
args.fontstyle = 'color:' .. args.fontcolor .. ';'<br />
end<br />
args.style = 'float:left; text-align:left'<br />
end<br />
<br />
if args.template then<br />
titleArg = 'template'<br />
show = {true, false, false, false, false, false}<br />
local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6}<br />
for k,v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do<br />
local num = index[v]<br />
if num then show[num] = true end<br />
end<br />
end<br />
<br />
if args.noedit then show[3] = false end<br />
<br />
local titleText = args[titleArg] or (':' .. mw.getCurrentFrame():getParent():getTitle())<br />
local title = mw.title.new(mw.text.trim(titleText), 'Template')<br />
if not title then<br />
error('Invalid title ' .. titleText)<br />
end<br />
local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or ''<br />
<br />
local div = mw.html.create():tag('div')<br />
div<br />
:addClass('plainlinks')<br />
:addClass('hlist')<br />
:addClass('navbar')<br />
:cssText(args.style)<br />
<br />
if args.mini then div:addClass('mini') end<br />
<br />
if not (args.mini or args.plain) then<br />
div<br />
:tag('span')<br />
:css('word-spacing', 0)<br />
:cssText(args.fontstyle)<br />
:wikitext(args.text or 'This box:')<br />
:wikitext(' ')<br />
end<br />
<br />
p.brackets('right', '&#91; ', args, div)<br />
<br />
ul = div:tag('ul')<br />
if show[1] then p.addItem('v', 'view', title.fullText, 'View', args) end<br />
if show[2] then p.addItem('t', 'talk', talkpage, 'Discuss', args) end<br />
if show[3] then p.addItem('e', 'edit', title:fullUrl('action=edit'), 'Edit', args, true) end<br />
if show[4] then p.addItem('h', 'hist', title:fullUrl('action=history'), 'History of', args, true) end<br />
if show[5] then<br />
local move = mw.title.new ('Special:Movepage')<br />
p.addItem('m', 'move', move:fullUrl('target='..title.fullText), 'Move', args, true) end<br />
if show[6] then p.addItem('w', 'watch', title:fullUrl('action=watch'), 'Watch', args, true) end<br />
<br />
p.brackets('left', ' &#93;', args, div)<br />
<br />
if args.collapsible then<br />
div<br />
:done()<br />
:tag('div')<br />
:css('font-size', '114%')<br />
:css('margin', args.mini and '0 4em' or '0 7em')<br />
:cssText(args.fontstyle)<br />
:wikitext(args[1])<br />
end<br />
<br />
return tostring(div:done())<br />
end<br />
<br />
function p.navbar(frame)<br />
if not getArgs then<br />
getArgs = require('Module:Arguments').getArgs<br />
end<br />
return p._navbar(getArgs(frame))<br />
end<br />
<br />
return p</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Message_box&diff=1746Module:Message box2018-06-18T15:47:01Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>-- This is a meta-module for producing message box templates, including<br />
-- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}.<br />
<br />
-- Load necessary modules.<br />
require('Module:No globals')<br />
local getArgs<br />
local yesno = require('Module:Yesno')<br />
<br />
-- Get a language object for formatDate and ucfirst.<br />
local lang = mw.language.getContentLanguage()<br />
<br />
-- Define constants<br />
local CONFIG_MODULE = 'Module:Message box/configuration'<br />
<br />
--------------------------------------------------------------------------------<br />
-- Helper functions<br />
--------------------------------------------------------------------------------<br />
<br />
local function getTitleObject(...)<br />
-- Get the title object, passing the function through pcall<br />
-- in case we are over the expensive function count limit.<br />
local success, title = pcall(mw.title.new, ...)<br />
if success then<br />
return title<br />
end<br />
end<br />
<br />
local function union(t1, t2)<br />
-- Returns the union of two arrays.<br />
local vals = {}<br />
for i, v in ipairs(t1) do<br />
vals[v] = true<br />
end<br />
for i, v in ipairs(t2) do<br />
vals[v] = true<br />
end<br />
local ret = {}<br />
for k in pairs(vals) do<br />
table.insert(ret, k)<br />
end<br />
table.sort(ret)<br />
return ret<br />
end<br />
<br />
local function getArgNums(args, prefix)<br />
local nums = {}<br />
for k, v in pairs(args) do<br />
local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$')<br />
if num then<br />
table.insert(nums, tonumber(num))<br />
end<br />
end<br />
table.sort(nums)<br />
return nums<br />
end<br />
<br />
--------------------------------------------------------------------------------<br />
-- Box class definition<br />
--------------------------------------------------------------------------------<br />
<br />
local MessageBox = {}<br />
MessageBox.__index = MessageBox<br />
<br />
function MessageBox.new(boxType, args, cfg)<br />
args = args or {}<br />
local obj = {}<br />
<br />
-- Set the title object and the namespace.<br />
obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()<br />
<br />
-- Set the config for our box type.<br />
obj.cfg = cfg[boxType]<br />
if not obj.cfg then<br />
local ns = obj.title.namespace<br />
-- boxType is "mbox" or invalid input<br />
if ns == 0 then<br />
obj.cfg = cfg.ambox -- main namespace<br />
elseif ns == 6 then<br />
obj.cfg = cfg.imbox -- file namespace<br />
elseif ns == 14 then<br />
obj.cfg = cfg.cmbox -- category namespace<br />
else<br />
local nsTable = mw.site.namespaces[ns]<br />
if nsTable and nsTable.isTalk then<br />
obj.cfg = cfg.tmbox -- any talk namespace<br />
else<br />
obj.cfg = cfg.ombox -- other namespaces or invalid input<br />
end<br />
end<br />
end<br />
<br />
-- Set the arguments, and remove all blank arguments except for the ones<br />
-- listed in cfg.allowBlankParams.<br />
do<br />
local newArgs = {}<br />
for k, v in pairs(args) do<br />
if v ~= '' then<br />
newArgs[k] = v<br />
end<br />
end<br />
for i, param in ipairs(obj.cfg.allowBlankParams or {}) do<br />
newArgs[param] = args[param]<br />
end<br />
obj.args = newArgs<br />
end<br />
<br />
-- Define internal data structure.<br />
obj.categories = {}<br />
obj.classes = {}<br />
-- For lazy loading of [[Module:Category handler]].<br />
obj.hasCategories = false<br />
<br />
return setmetatable(obj, MessageBox)<br />
end<br />
<br />
function MessageBox:addCat(ns, cat, sort)<br />
if not cat then<br />
return nil<br />
end<br />
if sort then<br />
cat = string.format('[[Category:%s|%s]]', cat, sort)<br />
else<br />
cat = string.format('[[Category:%s]]', cat)<br />
end<br />
self.hasCategories = true<br />
self.categories[ns] = self.categories[ns] or {}<br />
table.insert(self.categories[ns], cat)<br />
end<br />
<br />
function MessageBox:addClass(class)<br />
if not class then<br />
return nil<br />
end<br />
table.insert(self.classes, class)<br />
end<br />
<br />
function MessageBox:setParameters()<br />
local args = self.args<br />
local cfg = self.cfg<br />
<br />
-- Get type data.<br />
self.type = args.type<br />
local typeData = cfg.types[self.type]<br />
self.invalidTypeError = cfg.showInvalidTypeError<br />
and self.type<br />
and not typeData<br />
typeData = typeData or cfg.types[cfg.default]<br />
self.typeClass = typeData.class<br />
self.typeImage = typeData.image<br />
<br />
-- Find if the box has been wrongly substituted.<br />
self.isSubstituted = cfg.substCheck and args.subst == 'SUBST'<br />
<br />
-- Find whether we are using a small message box.<br />
self.isSmall = cfg.allowSmall and (<br />
cfg.smallParam and args.small == cfg.smallParam<br />
or not cfg.smallParam and yesno(args.small)<br />
)<br />
<br />
-- Add attributes, classes and styles.<br />
self.id = args.id<br />
if yesno(args.plainlinks) ~= false then<br />
self:addClass('plainlinks')<br />
end<br />
for _, class in ipairs(cfg.classes or {}) do<br />
self:addClass(class)<br />
end<br />
if self.isSmall then<br />
self:addClass(cfg.smallClass or 'mbox-small')<br />
end<br />
self:addClass(self.typeClass)<br />
self:addClass(args.class)<br />
self.style = args.style<br />
self.attrs = args.attrs<br />
<br />
-- Set text style.<br />
self.textstyle = args.textstyle<br />
<br />
-- Find if we are on the template page or not. This functionality is only<br />
-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory<br />
-- and cfg.templateCategoryRequireName are set.<br />
self.useCollapsibleTextFields = cfg.useCollapsibleTextFields<br />
if self.useCollapsibleTextFields<br />
or cfg.templateCategory<br />
and cfg.templateCategoryRequireName<br />
then<br />
self.name = args.name<br />
if self.name then<br />
local templateName = mw.ustring.match(<br />
self.name,<br />
'^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$'<br />
) or self.name<br />
templateName = 'Template:' .. templateName<br />
self.templateTitle = getTitleObject(templateName)<br />
end<br />
self.isTemplatePage = self.templateTitle<br />
and mw.title.equals(self.title, self.templateTitle)<br />
end<br />
<br />
-- Process data for collapsible text fields. At the moment these are only<br />
-- used in {{ambox}}.<br />
if self.useCollapsibleTextFields then<br />
-- Get the self.issue value.<br />
if self.isSmall and args.smalltext then<br />
self.issue = args.smalltext<br />
else<br />
local sect<br />
if args.sect == '' then<br />
sect = 'This ' .. (cfg.sectionDefault or 'page')<br />
elseif type(args.sect) == 'string' then<br />
sect = 'This ' .. args.sect<br />
end<br />
local issue = args.issue<br />
issue = type(issue) == 'string' and issue ~= '' and issue or nil<br />
local text = args.text<br />
text = type(text) == 'string' and text or nil<br />
local issues = {}<br />
table.insert(issues, sect)<br />
table.insert(issues, issue)<br />
table.insert(issues, text)<br />
self.issue = table.concat(issues, ' ')<br />
end<br />
<br />
-- Get the self.talk value.<br />
local talk = args.talk<br />
-- Show talk links on the template page or template subpages if the talk<br />
-- parameter is blank.<br />
if talk == ''<br />
and self.templateTitle<br />
and (<br />
mw.title.equals(self.templateTitle, self.title)<br />
or self.title:isSubpageOf(self.templateTitle)<br />
)<br />
then<br />
talk = '#'<br />
elseif talk == '' then<br />
talk = nil<br />
end<br />
if talk then<br />
-- If the talk value is a talk page, make a link to that page. Else<br />
-- assume that it's a section heading, and make a link to the talk<br />
-- page of the current page with that section heading.<br />
local talkTitle = getTitleObject(talk)<br />
local talkArgIsTalkPage = true<br />
if not talkTitle or not talkTitle.isTalkPage then<br />
talkArgIsTalkPage = false<br />
talkTitle = getTitleObject(<br />
self.title.text,<br />
mw.site.namespaces[self.title.namespace].talk.id<br />
)<br />
end<br />
if talkTitle and talkTitle.exists then<br />
local talkText = 'Relevant discussion may be found on'<br />
if talkArgIsTalkPage then<br />
talkText = string.format(<br />
'%s [[%s|%s]].',<br />
talkText,<br />
talk,<br />
talkTitle.prefixedText<br />
)<br />
else<br />
talkText = string.format(<br />
'%s the [[%s#%s|talk page]].',<br />
talkText,<br />
talkTitle.prefixedText,<br />
talk<br />
)<br />
end<br />
self.talk = talkText<br />
end<br />
end<br />
<br />
-- Get other values.<br />
self.fix = args.fix ~= '' and args.fix or nil<br />
local date<br />
if args.date and args.date ~= '' then<br />
date = args.date<br />
elseif args.date == '' and self.isTemplatePage then<br />
date = lang:formatDate('F Y')<br />
end<br />
if date then<br />
self.date = string.format(" <small>''(%s)''</small>", date)<br />
end<br />
self.info = args.info<br />
if yesno(args.removalnotice) then<br />
self.removalNotice = cfg.removalNotice<br />
end<br />
end<br />
<br />
-- Set the non-collapsible text field. At the moment this is used by all box<br />
-- types other than ambox, and also by ambox when small=yes.<br />
if self.isSmall then<br />
self.text = args.smalltext or args.text<br />
else<br />
self.text = args.text<br />
end<br />
<br />
-- Set the below row.<br />
self.below = cfg.below and args.below<br />
<br />
-- General image settings.<br />
self.imageCellDiv = not self.isSmall and cfg.imageCellDiv<br />
self.imageEmptyCell = cfg.imageEmptyCell<br />
if cfg.imageEmptyCellStyle then<br />
self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px'<br />
end<br />
<br />
-- Left image settings.<br />
local imageLeft = self.isSmall and args.smallimage or args.image<br />
if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none'<br />
or not cfg.imageCheckBlank and imageLeft ~= 'none'<br />
then<br />
self.imageLeft = imageLeft<br />
if not imageLeft then<br />
local imageSize = self.isSmall<br />
and (cfg.imageSmallSize or '30x30px')<br />
or '40x40px'<br />
self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage<br />
or 'Imbox notice.png', imageSize)<br />
end<br />
end<br />
<br />
-- Right image settings.<br />
local imageRight = self.isSmall and args.smallimageright or args.imageright<br />
if not (cfg.imageRightNone and imageRight == 'none') then<br />
self.imageRight = imageRight<br />
end<br />
end<br />
<br />
function MessageBox:setMainspaceCategories()<br />
local args = self.args<br />
local cfg = self.cfg<br />
<br />
if not cfg.allowMainspaceCategories then<br />
return nil<br />
end<br />
<br />
local nums = {}<br />
for _, prefix in ipairs{'cat', 'category', 'all'} do<br />
args[prefix .. '1'] = args[prefix]<br />
nums = union(nums, getArgNums(args, prefix))<br />
end<br />
<br />
-- The following is roughly equivalent to the old {{Ambox/category}}.<br />
local date = args.date<br />
date = type(date) == 'string' and date<br />
local preposition = 'from'<br />
for _, num in ipairs(nums) do<br />
local mainCat = args['cat' .. tostring(num)]<br />
or args['category' .. tostring(num)]<br />
local allCat = args['all' .. tostring(num)]<br />
mainCat = type(mainCat) == 'string' and mainCat<br />
allCat = type(allCat) == 'string' and allCat<br />
if mainCat and date and date ~= '' then<br />
local catTitle = string.format('%s %s %s', mainCat, preposition, date)<br />
self:addCat(0, catTitle)<br />
catTitle = getTitleObject('Category:' .. catTitle)<br />
if not catTitle or not catTitle.exists then<br />
self:addCat(0, 'Articles with invalid date parameter in template')<br />
end<br />
elseif mainCat and (not date or date == '') then<br />
self:addCat(0, mainCat)<br />
end<br />
if allCat then<br />
self:addCat(0, allCat)<br />
end<br />
end<br />
end<br />
<br />
function MessageBox:setTemplateCategories()<br />
local args = self.args<br />
local cfg = self.cfg<br />
<br />
-- Add template categories.<br />
if cfg.templateCategory then<br />
if cfg.templateCategoryRequireName then<br />
if self.isTemplatePage then<br />
self:addCat(10, cfg.templateCategory)<br />
end<br />
elseif not self.title.isSubpage then<br />
self:addCat(10, cfg.templateCategory)<br />
end<br />
end<br />
<br />
-- Add template error categories.<br />
if cfg.templateErrorCategory then<br />
local templateErrorCategory = cfg.templateErrorCategory<br />
local templateCat, templateSort<br />
if not self.name and not self.title.isSubpage then<br />
templateCat = templateErrorCategory<br />
elseif self.isTemplatePage then<br />
local paramsToCheck = cfg.templateErrorParamsToCheck or {}<br />
local count = 0<br />
for i, param in ipairs(paramsToCheck) do<br />
if not args[param] then<br />
count = count + 1<br />
end<br />
end<br />
if count > 0 then<br />
templateCat = templateErrorCategory<br />
templateSort = tostring(count)<br />
end<br />
if self.categoryNums and #self.categoryNums > 0 then<br />
templateCat = templateErrorCategory<br />
templateSort = 'C'<br />
end<br />
end<br />
self:addCat(10, templateCat, templateSort)<br />
end<br />
end<br />
<br />
function MessageBox:setAllNamespaceCategories()<br />
-- Set categories for all namespaces.<br />
if self.invalidTypeError then<br />
local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText<br />
self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort)<br />
end<br />
if self.isSubstituted then<br />
self:addCat('all', 'Pages with incorrectly substituted templates')<br />
end<br />
end<br />
<br />
function MessageBox:setCategories()<br />
if self.title.namespace == 0 then<br />
self:setMainspaceCategories()<br />
elseif self.title.namespace == 10 then<br />
self:setTemplateCategories()<br />
end<br />
self:setAllNamespaceCategories()<br />
end<br />
<br />
function MessageBox:renderCategories()<br />
if not self.hasCategories then<br />
-- No categories added, no need to pass them to Category handler so,<br />
-- if it was invoked, it would return the empty string.<br />
-- So we shortcut and return the empty string.<br />
return ""<br />
end<br />
-- Convert category tables to strings and pass them through<br />
-- [[Module:Category handler]].<br />
return require('Module:Category handler')._main{<br />
main = table.concat(self.categories[0] or {}),<br />
template = table.concat(self.categories[10] or {}),<br />
all = table.concat(self.categories.all or {}),<br />
nocat = self.args.nocat,<br />
page = self.args.page<br />
}<br />
end<br />
<br />
function MessageBox:export()<br />
local root = mw.html.create()<br />
<br />
-- Add the subst check error.<br />
if self.isSubstituted and self.name then<br />
root:tag('b')<br />
:addClass('error')<br />
:wikitext(string.format(<br />
'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.',<br />
mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}')<br />
))<br />
end<br />
<br />
-- Create the box table.<br />
local boxTable = root:tag('table')<br />
boxTable:attr('id', self.id or nil)<br />
for i, class in ipairs(self.classes or {}) do<br />
boxTable:addClass(class or nil)<br />
end<br />
boxTable<br />
:cssText(self.style or nil)<br />
:attr('role', 'presentation')<br />
<br />
if self.attrs then<br />
boxTable:attr(self.attrs)<br />
end<br />
<br />
-- Add the left-hand image.<br />
local row = boxTable:tag('tr')<br />
if self.imageLeft then<br />
local imageLeftCell = row:tag('td'):addClass('mbox-image')<br />
if self.imageCellDiv then<br />
-- If we are using a div, redefine imageLeftCell so that the image<br />
-- is inside it. Divs use style="width: 52px;", which limits the<br />
-- image width to 52px. If any images in a div are wider than that,<br />
-- they may overlap with the text or cause other display problems.<br />
imageLeftCell = imageLeftCell:tag('div'):css('width', '52px')<br />
end<br />
imageLeftCell:wikitext(self.imageLeft or nil)<br />
elseif self.imageEmptyCell then<br />
-- Some message boxes define an empty cell if no image is specified, and<br />
-- some don't. The old template code in templates where empty cells are<br />
-- specified gives the following hint: "No image. Cell with some width<br />
-- or padding necessary for text cell to have 100% width."<br />
row:tag('td')<br />
:addClass('mbox-empty-cell')<br />
:cssText(self.imageEmptyCellStyle or nil)<br />
end<br />
<br />
-- Add the text.<br />
local textCell = row:tag('td'):addClass('mbox-text')<br />
if self.useCollapsibleTextFields then<br />
-- The message box uses advanced text parameters that allow things to be<br />
-- collapsible. At the moment, only ambox uses this.<br />
textCell:cssText(self.textstyle or nil)<br />
local textCellDiv = textCell:tag('div')<br />
textCellDiv<br />
:addClass('mbox-text-span')<br />
:wikitext(self.issue or nil)<br />
if (self.talk or self.fix) and not self.isSmall then<br />
textCellDiv:tag('span')<br />
:addClass('hide-when-compact')<br />
:wikitext(self.talk and (' ' .. self.talk) or nil)<br />
:wikitext(self.fix and (' ' .. self.fix) or nil)<br />
end<br />
textCellDiv:wikitext(self.date and (' ' .. self.date) or nil)<br />
if self.info and not self.isSmall then<br />
textCellDiv<br />
:tag('span')<br />
:addClass('hide-when-compact')<br />
:wikitext(self.info and (' ' .. self.info) or nil)<br />
end<br />
if self.removalNotice then<br />
textCellDiv:tag('small')<br />
:addClass('hide-when-compact')<br />
:tag('i')<br />
:wikitext(string.format(" (%s)", self.removalNotice))<br />
end<br />
else<br />
-- Default text formatting - anything goes.<br />
textCell<br />
:cssText(self.textstyle or nil)<br />
:wikitext(self.text or nil)<br />
end<br />
<br />
-- Add the right-hand image.<br />
if self.imageRight then<br />
local imageRightCell = row:tag('td'):addClass('mbox-imageright')<br />
if self.imageCellDiv then<br />
-- If we are using a div, redefine imageRightCell so that the image<br />
-- is inside it.<br />
imageRightCell = imageRightCell:tag('div'):css('width', '52px')<br />
end<br />
imageRightCell<br />
:wikitext(self.imageRight or nil)<br />
end<br />
<br />
-- Add the below row.<br />
if self.below then<br />
boxTable:tag('tr')<br />
:tag('td')<br />
:attr('colspan', self.imageRight and '3' or '2')<br />
:addClass('mbox-text')<br />
:cssText(self.textstyle or nil)<br />
:wikitext(self.below or nil)<br />
end<br />
<br />
-- Add error message for invalid type parameters.<br />
if self.invalidTypeError then<br />
root:tag('div')<br />
:css('text-align', 'center')<br />
:wikitext(string.format(<br />
'This message box is using an invalid "type=%s" parameter and needs fixing.',<br />
self.type or ''<br />
))<br />
end<br />
<br />
-- Add categories.<br />
root:wikitext(self:renderCategories() or nil)<br />
<br />
return tostring(root)<br />
end<br />
<br />
--------------------------------------------------------------------------------<br />
-- Exports<br />
--------------------------------------------------------------------------------<br />
<br />
local p, mt = {}, {}<br />
<br />
function p._exportClasses()<br />
-- For testing.<br />
return {<br />
MessageBox = MessageBox<br />
}<br />
end<br />
<br />
function p.main(boxType, args, cfgTables)<br />
local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))<br />
box:setParameters()<br />
box:setCategories()<br />
return box:export()<br />
end<br />
<br />
function mt.__index(t, k)<br />
return function (frame)<br />
if not getArgs then<br />
getArgs = require('Module:Arguments').getArgs<br />
end<br />
return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))<br />
end<br />
end<br />
<br />
return setmetatable(p, mt)</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Lua_banner&diff=1744Module:Lua banner2018-06-18T15:47:00Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>-- This module implements the {{lua}} template.<br />
local yesno = require('Module:Yesno')<br />
local mList = require('Module:List')<br />
local mTableTools = require('Module:TableTools')<br />
local mMessageBox = require('Module:Message box')<br />
<br />
local p = {}<br />
<br />
function p.main(frame)<br />
local origArgs = frame:getParent().args<br />
local args = {}<br />
for k, v in pairs(origArgs) do<br />
v = v:match('^%s*(.-)%s*$')<br />
if v ~= '' then<br />
args[k] = v<br />
end<br />
end<br />
return p._main(args)<br />
end<br />
<br />
function p._main(args)<br />
local modules = mTableTools.compressSparseArray(args)<br />
local box = p.renderBox(modules)<br />
local trackingCategories = p.renderTrackingCategories(args, modules)<br />
return box .. trackingCategories<br />
end<br />
<br />
function p.renderBox(modules)<br />
local boxArgs = {}<br />
if #modules < 1 then<br />
boxArgs.text = '<strong class="error">Error: no modules specified</strong>'<br />
else<br />
local moduleLinks = {}<br />
for i, module in ipairs(modules) do<br />
moduleLinks[i] = string.format('[[:%s]]', module)<br />
end<br />
local moduleList = mList.makeList('bulleted', moduleLinks)<br />
boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList<br />
end<br />
boxArgs.type = 'notice'<br />
boxArgs.small = true<br />
boxArgs.image = '[[File:Lua-logo-nolabel.svg|30px|alt=|link=]]'<br />
return mMessageBox.main('mbox', boxArgs)<br />
end<br />
<br />
function p.renderTrackingCategories(args, modules, titleObj)<br />
if yesno(args.nocat) then<br />
return ''<br />
end<br />
<br />
local cats = {}<br />
<br />
-- Error category<br />
if #modules < 1 then<br />
cats[#cats + 1] = 'Lua templates with errors'<br />
end<br />
<br />
-- Lua templates category<br />
titleObj = titleObj or mw.title.getCurrentTitle()<br />
local subpageBlacklist = {<br />
doc = true,<br />
sandbox = true,<br />
sandbox2 = true,<br />
testcases = true<br />
}<br />
if titleObj.namespace == 10 <br />
and not subpageBlacklist[titleObj.subpageText]<br />
then<br />
local category = args.category<br />
if not category then<br />
local categories = {<br />
['Module:String'] = 'Lua String-based templates',<br />
['Module:Math'] = 'Templates based on the Math Lua module',<br />
['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module',<br />
['Module:Citation'] = 'Lua-based citation templates'<br />
}<br />
categories['Module:Citation/CS1'] = categories['Module:Citation']<br />
category = modules[1] and categories[modules[1]]<br />
category = category or 'Lua-based templates'<br />
end<br />
cats[#cats + 1] = category<br />
local protLevels = {<br />
autoconfirmed = 1,<br />
extendedconfirmed = 2,<br />
templateeditor = 3,<br />
sysop = 4<br />
}<br />
local currentProt = titleObj.protectionLevels["edit"][1]<br />
if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end<br />
for i, module in ipairs(modules) do<br />
local moduleProt = mw.title.new(module).protectionLevels["edit"][1]<br />
if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end<br />
if moduleProt < currentProt then<br />
cats[#cats + 1] = "Templates using under-protected Lua modules"<br />
break<br />
end<br />
end<br />
end<br />
<br />
for i, cat in ipairs(cats) do<br />
cats[i] = string.format('[[Category:%s]]', cat)<br />
end<br />
return table.concat(cats)<br />
end<br />
<br />
return p</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Labelled_list_hatnote&diff=1742Module:Labelled list hatnote2018-06-18T15:47:00Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>--------------------------------------------------------------------------------<br />
-- Labelled list --<br />
-- --<br />
-- This module does the core work of creating a hatnote composed of a list --<br />
-- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", --<br />
-- for {{see also}} and similar templates. --<br />
--------------------------------------------------------------------------------<br />
<br />
local mHatnote = require('Module:Hatnote')<br />
local mHatlist = require('Module:Hatnote list')<br />
local mArguments --initialize lazily<br />
local p = {}<br />
<br />
-- Defaults global to this module<br />
local defaults = {<br />
label = 'See also', --Final fallback for label argument<br />
labelForm = '%s: %s',<br />
prefixes = {'label', 'label ', 'l'},<br />
template = 'Module:Labelled list hatnote'<br />
}<br />
<br />
-- Helper function that pre-combines display parameters into page arguments.<br />
-- Also compresses sparse arrays, as a desirable side-effect.<br />
function p.preprocessDisplays (args, prefixes)<br />
-- Prefixes specify which parameters, in order, to check for display options<br />
-- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1'<br />
prefixes = prefixes or defaults.prefixes<br />
local pages = {}<br />
for k, v in pairs(args) do<br />
if type(k) == 'number' then<br />
local display<br />
for i = 1, #prefixes do<br />
display = args[prefixes[i] .. k]<br />
if display then break end<br />
end<br />
local page = display and<br />
string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v<br />
pages[#pages + 1] = page<br />
end<br />
end<br />
return pages<br />
end<br />
<br />
-- Produces a labelled pages-list hatnote.<br />
-- The main frame (template definition) takes 1 or 2 arguments, for a singular<br />
-- and (optionally) plural label respectively:<br />
-- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}}<br />
-- The resulting template takes pagename & label parameters normally.<br />
function p.labelledList (frame)<br />
mArguments = require('Module:Arguments')<br />
local labels = {frame.args[1] or defaults.label}<br />
labels[2] = frame.args[2] or labels[1]<br />
local template = frame:getParent():getTitle()<br />
local args = mArguments.getArgs(frame, {parentOnly = true})<br />
local pages = p.preprocessDisplays(args)<br />
local options = {<br />
extraclasses = frame.args.extraclasses,<br />
category = args.category,<br />
selfref = frame.args.selfref or args.selfref,<br />
template = template<br />
}<br />
return p._labelledList(pages, labels, options)<br />
end<br />
<br />
function p._labelledList (pages, labels, options)<br />
labels = labels or {}<br />
if #pages == 0 then<br />
return mHatnote.makeWikitextError(<br />
'no page names specified',<br />
(options.template or defaults.template) .. '#Errors',<br />
options.category<br />
)<br />
end<br />
label = (#pages == 1 and labels[1] or labels[2]) or defaults.label<br />
local text = string.format(<br />
options.labelForm or defaults.labelForm,<br />
label,<br />
mHatlist.andList(pages, true)<br />
)<br />
local hnOptions = {<br />
extraclasses = options.extraclasses,<br />
selfref = options.selfref<br />
}<br />
return mHatnote._hatnote(text, hnOptions)<br />
end<br />
<br />
return p</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Effective_protection_level&diff=1740Module:Effective protection level2018-06-18T15:46:59Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>local p = {}<br />
<br />
-- Returns the permission required to perform a given action on a given title.<br />
-- If no title is specified, the title of the page being displayed is used.<br />
function p._main(action, pagename)<br />
local title<br />
if type(pagename) == 'table' and pagename.prefixedText then<br />
title = pagename<br />
elseif pagename then<br />
title = mw.title.new(pagename)<br />
else<br />
title = mw.title.getCurrentTitle()<br />
end<br />
pagename = title.prefixedText<br />
if action == 'autoreview' then<br />
local level = mw.ext.FlaggedRevs.getStabilitySettings(title)<br />
level = level and level.autoreview<br />
if level == 'review' then<br />
return 'reviewer'<br />
elseif level ~= '' then<br />
return level<br />
else<br />
return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review<br />
end<br />
elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then<br />
error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 )<br />
end<br />
if title.namespace == 8 then -- MediaWiki namespace<br />
return 'sysop'<br />
elseif title.namespace == 2 and title.isSubpage and ( title.contentModel == 'javascript' or title.contentModel == 'css' or title.contentModel == 'json' ) then -- user JS, CSS or JSON page<br />
return 'sysop'<br />
end<br />
local level = title.protectionLevels[action] and title.protectionLevels[action][1]<br />
if level == 'sysop' or level == 'editprotected' then<br />
return 'sysop'<br />
elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page<br />
return 'sysop'<br />
elseif level == 'templateeditor' then<br />
return 'templateeditor'<br />
elseif action == 'move' then<br />
local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move.<br />
if blacklistentry and not blacklistentry.params.autoconfirmed then<br />
return 'templateeditor'<br />
elseif title.namespace == 6 then<br />
return 'filemover'<br />
elseif level == 'extendedconfirmed' then<br />
return 'extendedconfirmed'<br />
else<br />
return 'autoconfirmed'<br />
end<br />
end<br />
local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename)<br />
if blacklistentry then<br />
if not blacklistentry.params.autoconfirmed then<br />
return 'templateeditor'<br />
elseif level == 'extendedconfirmed' then<br />
return 'extendedconfirmed'<br />
else<br />
return 'autoconfirmed'<br />
end<br />
elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason<br />
return 'autoconfirmed'<br />
elseif level then<br />
return level<br />
elseif action == 'upload' then<br />
return 'autoconfirmed'<br />
elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts<br />
return 'user'<br />
else<br />
return '*'<br />
end<br />
end<br />
<br />
setmetatable(p, { __index = function(t, k)<br />
return function(frame)<br />
return t._main(k, frame.args[1])<br />
end<br />
end })<br />
<br />
return p</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Module:Color_contrast&diff=1738Module:Color contrast2018-06-18T15:46:58Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>--<br />
-- This module implements <br />
-- {{Color contrast ratio}}<br />
-- {{Greater color contrast ratio}}<br />
-- {{ColorToLum}}<br />
-- {{RGBColorToLum}}<br />
--<br />
local p = {}<br />
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )<br />
<br />
local function sRGB ( v ) <br />
if (v <= 0.03928) then <br />
v = v / 12.92<br />
else<br />
v = math.pow((v+0.055)/1.055, 2.4)<br />
end<br />
return v<br />
end<br />
<br />
local function rgbdec2lum( R, G, B )<br />
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then<br />
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)<br />
else<br />
return ''<br />
end<br />
end<br />
<br />
local function hsl2lum( h, s, l )<br />
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then<br />
local c = (1 - math.abs(2*l - 1))*s<br />
local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )<br />
local m = l - c/2<br />
<br />
local r, g, b = m, m, m<br />
if( 0 <= h and h < 60 ) then<br />
r = r + c<br />
g = g + x<br />
elseif( 60 <= h and h < 120 ) then<br />
r = r + x<br />
g = g + c<br />
elseif( 120 <= h and h < 180 ) then<br />
g = g + c<br />
b = b + x<br />
elseif( 180 <= h and h < 240 ) then<br />
g = g + x<br />
b = b + c<br />
elseif( 240 <= h and h < 300 ) then<br />
r = r + x<br />
b = b + c<br />
elseif( 300 <= h and h < 360 ) then<br />
r = r + c<br />
b = b + x<br />
end<br />
return rgbdec2lum(255*r, 255*g, 255*b)<br />
else<br />
return ''<br />
end<br />
end<br />
<br />
local function color2lum( c )<br />
<br />
if (c == nil) then<br />
return ''<br />
end<br />
-- whitespace<br />
c = c:match( '^%s*(.-)[%s;]*$' )<br />
<br />
-- unstrip nowiki strip markers<br />
c = mw.text.unstripNoWiki(c)<br />
<br />
-- lowercase<br />
c = c:lower()<br />
<br />
-- first try to look it up<br />
local L = HTMLcolor[c]<br />
if (L ~= nil) then<br />
return L<br />
end<br />
<br />
-- convert from hsl<br />
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then<br />
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')<br />
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)<br />
end<br />
<br />
-- convert from rgb<br />
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then<br />
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')<br />
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))<br />
end<br />
<br />
-- convert from rgb percent<br />
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then<br />
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')<br />
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)<br />
end<br />
<br />
-- remove leading # (if there is one) and whitespace<br />
c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$')<br />
<br />
-- split into rgb<br />
local cs = mw.text.split(c or '', '')<br />
if( #cs == 6 ) then<br />
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2])<br />
local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4])<br />
local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6])<br />
<br />
return rgbdec2lum(R, G, B)<br />
elseif ( #cs == 3 ) then<br />
local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1])<br />
local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2])<br />
local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3])<br />
<br />
return rgbdec2lum(R, G, B)<br />
end<br />
<br />
-- failure, return blank<br />
return ''<br />
end<br />
<br />
function p._greatercontrast(args)<br />
local bias = tonumber(args['bias'] or '0') or 0<br />
local css = (args['css'] and args['css'] ~= '') and true or false<br />
local v1 = color2lum(args[1] or '')<br />
local c2 = args[2] or '#FFFFFF'<br />
local v2 = color2lum(c2)<br />
local c3 = args[3] or '#000000'<br />
local v3 = color2lum(c3)<br />
local ratio1 = -1;<br />
local ratio2 = -1;<br />
if (type(v1) == 'number' and type(v2) == 'number') then<br />
ratio1 = (v2 + 0.05)/(v1 + 0.05)<br />
ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1<br />
end<br />
if (type(v1) == 'number' and type(v3) == 'number') then<br />
ratio2 = (v3 + 0.05)/(v1 + 0.05)<br />
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2<br />
end<br />
<br />
if css then<br />
local c1 = args[1] or ''<br />
if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or<br />
mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then<br />
c1 = '#' .. c1<br />
end<br />
if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or<br />
mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then<br />
c2 = '#' .. c2<br />
end<br />
if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or<br />
mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then<br />
c3 = '#' .. c3<br />
end<br />
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'<br />
end<br />
<br />
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''<br />
end<br />
<br />
function p._ratio(args)<br />
local v1 = color2lum(args[1])<br />
local v2 = color2lum(args[2])<br />
if (type(v1) == 'number' and type(v2) == 'number') then<br />
-- v1 should be the brighter of the two.<br />
if v2 > v1 then<br />
v1, v2 = v2, v1<br />
end<br />
return (v1 + 0.05)/(v2 + 0.05)<br />
else<br />
return args['error'] or '?'<br />
end<br />
end<br />
<br />
function p._styleratio(args)<br />
local style = (args[1] or ''):lower()<br />
local bg, fg = 'white', 'black'<br />
local lum_bg, lum_fg = 1, 0<br />
<br />
if args[2] then<br />
local lum = color2lum(args[2])<br />
if lum ~= '' then bg, lum_bg = args[2], lum end<br />
end<br />
if args[3] then<br />
local lum = color2lum(args[3])<br />
if lum ~= '' then fg, lum_fg = args[3], lum end<br />
end<br />
<br />
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '&#35;', '#'), ';')<br />
for k = 1,#slist do<br />
local s = slist[k]<br />
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' )<br />
k = k or ''<br />
v = v or ''<br />
if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then<br />
local lum = color2lum(v)<br />
if( lum ~= '' ) then bg, lum_bg = v, lum end<br />
elseif (k:match('^[%s]*(color)[%s]*$')) then<br />
local lum = color2lum(v)<br />
if( lum ~= '' ) then bg, lum_fg = v, lum end<br />
end<br />
end<br />
if lum_bg > lum_fg then<br />
return (lum_bg + 0.05)/(lum_fg + 0.05)<br />
else<br />
return (lum_fg + 0.05)/(lum_bg + 0.05)<br />
end<br />
end<br />
<br />
function p.lum(frame)<br />
return color2lum(frame.args[1] or frame:getParent().args[1])<br />
end<br />
<br />
function p.ratio(frame)<br />
local args = frame.args[1] and frame.args or frame:getParent().args<br />
return p._ratio(args)<br />
end<br />
<br />
function p.styleratio(frame)<br />
local args = frame.args[1] and frame.args or frame:getParent().args<br />
return p._styleratio(args)<br />
end<br />
<br />
function p.greatercontrast(frame)<br />
local args = frame.args[1] and frame.args or frame:getParent().args<br />
return p._greatercontrast(args)<br />
end<br />
<br />
return p</div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:Tl&diff=1736Template:Tl2018-06-18T15:46:57Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>&#123;&#123;[[Template:{{{1}}}|{{{1}}}]]&#125;&#125;<noinclude><br />
{{documentation}}<br />
<!-- Categories go on the /doc subpage and interwikis go on Wikidata. --><br />
</noinclude></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:See_also/doc&diff=1734Template:See also/doc2018-06-18T15:46:57Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>{{documentation subpage}}<br />
{{lua|Module:Labelled list hatnote}}<br />
{{high-risk|118000+}}<br />
<br />
This template is used to create [[WP:Hatnotes|hatnotes]] to point to a small number of other related titles at the '''top''' of [[Help:Section|article sections]] according to [[Wikipedia:Layout]]. It looks like this:<br />
<br />
{{See also|Article}}<br />
<br />
Do not use this template inside the ''"See also" section'' at the end of an article, or for links to other articles or subsections of the same article within regular article text. Where subsections are linked to, [[Template:Section link]] may be suitable instead.<br />
<br />
Refer to the examples below to see how the template handles link targets containing section links and commas.<br />
<br />
==Usage==<br />
; Basic usage:<br />
&#123;{See also|''page1''|''page2''|''page3''|...}}<br />
<br />
; All parameters:<br />
&#123;{See also|''page1''|''page2''|''page3''| ...<br />
|label 1 = ''label 1''|label 2 = ''label2''|label 3 = ''label3''| ...<br />
|l1 = ''label1''|l2 = ''label2''|l3 = ''label3''| ...<br />
|selfref = ''yes''|category = ''no''}}<br />
<br />
==Parameters==<br />
This template accepts the following parameters:<br />
* <code>1</code>, <code>2</code>, <code>3</code>, ... – the pages to link to. At least one page name is required. Categories and files are automatically escaped with the [[Help:Colon trick|colon trick]], and links to sections are automatically formatted as ''page § section'', rather than the MediaWiki default of ''page#section''.<br />
* <code>label 1</code>, <code>label 2</code>, <code>label 3</code>, ...; or <code>l1</code>, <code>l2</code>, <code>l3</code>, ...; optional labels for each of the pages to link to.<br />
* <code>selfref</code> – if set to "yes", "y", "true" or "1", adds the CSS class "selfref". This is used to denote self-references to Wikipedia. See [[Template:Selfref]] for more information.<br />
* <code>category</code> – if set to "no", "n", "false", or "0", suppresses the error tracking category ([[:Category:Hatnote templates with errors]]). This only has an effect if the first positional parameter (the page to link to) is omitted.<br />
<br />
== Examples ==<br />
<br />
* <code><nowiki>{{See also|Article}}</nowiki></code> → {{See also|Article}}<br />
* <code><nowiki>{{See also|Article#Section}}</nowiki></code> → {{See also|Article#Section}}<br />
* <code><nowiki>{{See also|Article#Section|label 1=Custom section label}}</nowiki></code> → {{See also|Article#Section|label 1=Custom section label}}<br />
* <code><nowiki>{{See also|Article1|Article2|Article3}}</nowiki></code> → {{See also|Article1|Article2|Article3}}<br />
* <code><nowiki>{{See also|Article1|Article,2|Article3}}</nowiki></code> → {{See also|Article1|Article,2|Article3}}<br />
* <code><nowiki>{{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}</nowiki></code> → {{See also|Article1|l1=Custom label 1|Article2|l2=Custom label 2}}<br />
* <code><nowiki>{{See also|Veni, vidi, vici|Julius Caesar}}</nowiki></code> → {{See also|Veni, vidi, vici|Julius Caesar}}<br />
* <code><nowiki>{{See also|Veni, vidi, vici|Julius Caesar#Civil war}}</nowiki></code> → {{See also|Veni, vidi, vici|Julius Caesar#Civil war}}<br />
* <code><nowiki>{{See also|Julius Caesar#Civil war|Veni, vidi, vici}}</nowiki></code> → {{See also|Julius Caesar#Civil war|Veni, vidi, vici}}<br />
* <code><nowiki>{{See also|Julius Caesar#Civil war|Crossing the Rubicon}}</nowiki></code> → {{See also|Julius Caesar#Civil war|Crossing the Rubicon}}<br />
<br />
==Errors==<br />
If no page names are supplied, the template will output the following message:<br />
*{{See also|category=no}}<br />
<br />
If you see this error message, it is for one of four reasons:<br />
# No parameters were specified (the template code was <code><nowiki>{{See also}}</nowiki></code>). Please use <code><nowiki>{{See also|</nowiki>''page''<nowiki>}}</nowiki></code> instead.<br />
# Some parameters were specified, but no page names were included. For example, the template text <code><nowiki>{{See also|selfref=yes}}</nowiki></code> will produce this error. Please use (for example) <code><nowiki>{{See also|</nowiki>''page''<nowiki>|selfref=yes}}</nowiki></code> instead.<br />
# A page name was specified, but it contains an equals sign ("="). The equals sign has a special meaning in template code, and because of this it cannot be used in template parameters that do not specify a parameter name. For example, the template code <code><nowiki>{{See also|1+1=2|2+2=4}}</nowiki></code> will produce this error. To work around this, you can specify the parameter name explicitly by using <code>1=</code>, <code>2</code>, etc., before the page name, like this: <code><nowiki>{{See also|1=1+1=2|2=2+2=4}}</nowiki></code>.<br />
# You tried to access [[Module:See also]] directly by using <code><nowiki>{{#invoke:See also|seealso|</nowiki>''text''<nowiki>}}</nowiki></code>. Use of #invoke in this way has been disabled for performance reasons. Please use <code><nowiki>{{See also|</nowiki>''text''<nowiki>}}</nowiki></code> instead.<br />
<br />
If you see this error message and are unsure of what to do, please post a message on [[WP:HD|the help desk]], and someone should be able to help you.<br />
<br />
Pages that contain this error message are tracked in [[:Category:Hatnote templates with errors]].<br />
<br />
==See also==<br />
*{{tl|Category see also}}<br />
*{{tl|Main}}<br />
*{{tl|See}} (redirect to {{tl|Further information}})<br />
<br />
{{Hatnote templates}}<br />
{{Collapse top|TemplateData}}<br />
{{TemplateDataHeader}}<br />
<templatedata><br />
{<br />
"description": "This template creates a hatnote to point to a small number of related pages. It is placed at the top of a section, directly underneath the section heading.",<br />
"params": {<br />
"1": {<br />
"label": "Page 1",<br />
"description": "The name of the first page that you want to link to.",<br />
"type": "wiki-page-name",<br />
"required": true<br />
},<br />
"2": {<br />
"label": "Page 2",<br />
"description": "The name of the second page that you want to link to.",<br />
"type": "wiki-page-name",<br />
"required": false<br />
},<br />
"3": {<br />
"label": "Page 3",<br />
"description": "The name of the third page that you want to link to. More pages can be added using the parameters \"4\", \"5\", \"6\", etc.",<br />
"type": "wiki-page-name",<br />
"required": false<br />
},<br />
"label 1": {<br />
"label": "Label 1",<br />
"type": "string",<br />
"description": "What the first linked article is to be displayed as. ",<br />
"aliases": [<br />
"l1"<br />
]<br />
},<br />
"label 2": {<br />
"label": "Label 2",<br />
"type": "string",<br />
"description": "What the second linked article is to be displayed as.",<br />
"aliases": [<br />
"l2"<br />
]<br />
},<br />
"selfref": {<br />
"type": "boolean",<br />
"label": "Self reference",<br />
"description": "Set to \"yes\" if the template is a self-reference to Wikipedia that would not make sense on mirrors or forks of the Wikipedia site.",<br />
"example": "yes",<br />
"default": "no"<br />
},<br />
"category": {<br />
"label": "Category",<br />
"description": "Set to \"no\", \"n\", \"false\", or \"0\" to suppresses the error tracking category (Category:Hatnote templates with errors). This only has an effect if no page names are specified.",<br />
"type": "boolean",<br />
"default": "yes",<br />
"example": "no"<br />
},<br />
"label 3": {<br />
"aliases": [<br />
"l3"<br />
],<br />
"type": "string",<br />
"label": "Label 3",<br />
"description": "What the third linked article is to be displayed as. Other labels can be added by using increasing numbers (starting with \"label 4\" or \"l4\" for page 4) as parameter names."<br />
}<br />
},<br />
"format": "inline"<br />
}<br />
</templatedata><br />
{{Collapse bottom}}<br />
<br />
<includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox||<br />
<!-- Categories go here and interwikis go in Wikidata. --><br />
[[Category:Cross-reference templates]]<br />
[[Category:Exclude in print]]<br />
[[Category:Hatnote templates]]<br />
[[Category:Related-topic templates]]<br />
[[Category:Wikipedia page-section templates]]<br />
[[Category:Wikipedia see also]]<br />
}}</includeonly></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:High-risk&diff=1732Template:High-risk2018-06-18T15:46:46Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div><noinclude>{{Being deleted|2018 May 5|Template:High-risk|merge=Template:High-use}}</noinclude>{{ombox<br />
| type = content<br />
| image = [[File:Ambox warning orange.svg|40px|alt=Warning|link=]]<br />
| imageright =<br />
| text = <br />
'''This {{<br />
#switch:{{NAMESPACE}}<br />
|Module=Lua module<br />
|#default=template<br />
}} is used on <span class="plainlinks">[https://tools.wmflabs.org/templatecount/index.php?lang=en&namespace={{NAMESPACENUMBER:{{FULLPAGENAME}}}}&name={{urlencode:{{<br />
#switch: {{SUBPAGENAME}}<br />
| doc | sandbox = {{BASEPAGENAME}}<br />
| #default = {{PAGENAME}}<br />
}}}} {{#if:{{{1|}}}|{{formatnum:{{{1}}}}}|a very large number of}} pages]</span>.'''{{#if:{{{info|}}}|<br />{{{info}}}}}<br />To avoid large-scale disruption and unnecessary server load, any changes to it should first be tested in its [[{{<br />
#switch: {{SUBPAGENAME}}<br />
| doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}}<br />
| #default = {{SUBJECTPAGENAME}}<br />
}}/sandbox|/sandbox]] or [[{{<br />
#switch: {{SUBPAGENAME}}<br />
| doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}}<br />
| #default = {{SUBJECTPAGENAME}}<br />
}}/testcases|/testcases]] subpages{{<br />
#switch:{{NAMESPACE}}<br />
|Module=.<br />
|#default=&#32;or in your own [[Wikipedia:Subpages#How to create user subpages|user subpage]].<br />
}} The tested changes can then be added to this page in a single edit. Please consider discussing any changes {{#if:{{{2|}}}|at [[{{{2}}}]]|on the [[{{<br />
#switch: {{SUBPAGENAME}}<br />
| doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}}<br />
| #default = {{TALKPAGENAME}}<br />
}}|talk page]]}} before implementing them.<br />
}}<noinclude><br />
{{Documentation}}<br />
<!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --><br />
</noinclude></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:Hatnote_templates&diff=1730Template:Hatnote templates2018-06-18T15:46:45Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div>{{Navbox<br />
| name = Hatnote templates<br />
| state = {{{state|<includeonly>autocollapse</includeonly>}}}<br />
| bodyclass = hlist<br />
| belowclass = hlist<br />
| title = [[WP:Hatnote#Hatnote templates|Hatnote templates]]<br />
<br />
| above =<br />
*[[Wikipedia:Hatnote]]<br />
*[[Wikipedia:Disambiguation]]<br />
*[[Wikipedia:Redirect]]<br />
<br />
| group1 = Main articles<br />
| list1 =<br />
*{{tl|Main}}<br />
*{{tl|Cat main}} (for categories)<br />
<br />
| group2 = Generic<br />
| list2 =<br />
*{{tl|Hatnote}}<br />
*{{tl|Selfref}} (for [[WP:Manual of Style/Self-references to avoid|self-references]])<br />
<br />
| group3 = Other uses<br />
| list3 =<br />
*{{tl|About}}<br />
*Variations: {{tl|Other uses}}<br />
*{{tl|Other uses2}} (automatically supplies disambiguation suffix)<br />
*{{tl|Other uses of}} (provides context for disambiguation)<br />
*{{tl|Distinguish-otheruses}}<br />
*{{tl|Distinguish-otheruses2}} (automatically supplies disambiguation suffix)<br />
<br />
| group4 = For (other topic)<br />
| list4 =<br />
*{{tl|For}}<br />
*{{tl|For2}} (for custom text)<br />
<br />
| group5 = Further information<br />
| list5 =<br />
*{{tl|Further}}<br />
*{{tl|Further2}} (for custom text)<br />
*{{tl|For outline}}<br />
*{{tl|Broader}}<br />
<br />
| group6 = See<br />
| list6 =<br />
*{{tl|See also}}<br />
*{{tl|Category see also}}<br />
*{{tl|Category see also if exists}}<br />
*{{tl|See introduction}}<br />
*{{tl|See Wiktionary}}<br />
<br />
| group7 = Other people<br />
| list7 =<br />
*{{tl|Other people}}<br />
*{{tl|About-otherpeople|USE|NAME|PAGE1}} (adds "about" description)<br />
*{{tl|Other people5}} (for "similar" names)<br />
<br />
| group8 = Other topics<br />
| list8 =<br />
*{{tl|Other hurricanes}}<br />
*{{tl|Other places}}<br />
*{{tl|Other ships}}<br />
<br />
| group9 = Redirect<br />
| list9 =<br />
*{{tl|Redirect}}<br />
*{{tl|Redirect2}} (for two redirects)<br />
*{{tl|Redirect-multi}} (for multiple redirects)<br />
*{{tl|Redirect-several}} (for several redirects, without listing each)<br />
*{{tl|Redirect-synonym}}<br />
*{{tl|technical reasons}}<br />
<br />
| group10 = Distinguish<br />
| list10 =<br />
*{{tl|Distinguish}} (supports custom text too)<br />
*{{tl|Redirect-distinguish}}<br />
*{{tl|Redirect-distinguish2}} (for custom text)<br />
*{{tl|Redirect-distinguish6}}<br />
*{{tl|About-distinguish}}<br />
*{{tl|About-distinguish2}} (for custom text)<br />
<br />
| group11 = Transclusion<br />
| list11 =<br />
*{{tl|Transcluding article}}<br />
*{{tl|Transcluded section}}<br />
<br />
| group12 = Subject specific<br />
| list12 = <br />
* {{tl|Year dab}}<br />
* {{tl|Highway detail hatnote}}<br />
* {{tl|Pope Stephen ToP Dab}}<br />
* {{tl|For LMST}}<br />
* {{tl|WikiIPA}}<br />
* {{tl|Other MeSH codes}}<br />
* {{tl|Other Pennsylvania townships}}<br />
<br />
| group13 = Hatnote categories<br />
| list13 =<br />
*[[:Category:Hatnote templates|Hatnote templates]]<br />
*[[:Category:Hatnote modules|Hatnote modules]]<br />
*[[:Category:Hatnote templates for category pages|for category pages]]<br />
*[[:Category:Hatnote templates for names|for [family] names]]<br />
*[[:Category:Hatnote templates for lists|for lists]]<br />
*[[:Category:Hatnote templates for user pages|for user pages]]<br />
<br />
| below =<br />
*[[WP:Hatnote#Hatnote templates|Hatnote templates documentation]]<br />
*{{Icon|cat}} [[:Category:Hatnote templates]]<br />
}}<noinclude>{{Documentation}}<br />
==TemplateData for [[mw:Extension:VisualEditor|VisualEditor]]==<br />
<templatedata><br />
{<br />
"params": {<br />
"state": {}<br />
}<br />
}<br />
</templatedata><br />
</noinclude></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:Collapse_top&diff=1728Template:Collapse top2018-06-18T15:46:43Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div><div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section --><br />
{| <!-- Template:Collapse top --> class="mw-collapsible {{{{{|safesubst:}}}#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{{{{|safesubst:}}}#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;"<br />
|-<br />
! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{{{{|safesubst:}}}#if:{{{left|}}}|left|center}}; {{{{{|safesubst:}}}#if:{{{fc|}}}|color: {{{fc}}};|}}" | <span style="font-size:115%">{{{1|{{{title|{{{reason|{{{header|{{{heading|Extended content}}} }}} }}} }}} }}}</span> <br />
{{{{{|safesubst:}}}#if:{{{warning|{{{2|}}}}}}<br />
|{{{{{|safesubst:}}}!}}-<br />
{{{{{|safesubst:}}}!}} style="text-align:center; font-style:italic;" {{{{{|safesubst:}}}!}} {{{2|The following is a closed debate. {{strongbad|Please do not modify it.}} }}} }}<br />
|-<br />
| style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{{{{|safesubst:}}}!}}<noinclude><br />
{{lorem ipsum|3}}<br />
{{Collapse bottom}}<br />
{{Documentation}}<br />
{{Collapse top/TemplateData}}<br />
</noinclude></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Template:See_also&diff=1726Template:See also2018-06-18T15:46:43Z<p>TheOctopus: 1 revision imported: Imported see also</p>
<hr />
<div><includeonly>{{#invoke:Labelled list hatnote|labelledList|See also}}</includeonly><noinclude><br />
{{documentation}}<br />
<!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --><br />
</noinclude></div>TheOctopushttps://wiki.projectcitybuild.com/w/index.php?title=Charlie_the_Creeper&diff=1724Charlie the Creeper2018-06-18T15:36:55Z<p>TheOctopus: Added references heading</p>
<hr />
<div>{{Cquote<br />
|quote = Creepers are filled with gunpowder and crunchy leaves. But not Charlie. He was also filled with love.<br />
|source = NekTM<br />
}}<br />
[[Category:History of PCB]]<br />
<br />
Charlie the Creeper was the name given to a friendly creeper spotted in the wild. As a result of a glitch in the creeper's AI, the creeper would roam around not targeting anyone<ref>https://forums.projectcitybuild.com/t/charlie/12730<br />
</ref>. He was originally spotted in the first version of PCB's survival map by players NekTM and Melatron on the 9th of April, 2011. Unfortunately due to a player hitting Charlie, the creeper's AI reactivated before shortly blowing up.<br />
<br />
== Remembrance ==<br />
At the time, a gravestone was erected near the spawn's busiest walkway.<ref>https://forums.projectcitybuild.com/t/charlie-the-creeper/13176</ref><br />
<br />
== Second Sighting ==<br />
The original PCB survival map was later temporarily uploaded onto the server, when suddenly another friendly creeper was spotted next to Charlie's grave.<br />
[[File:Charlie the Creeper Grave.png|thumb|Charlie the (Ghost) Creeper]]<br />
<br />
== References ==<br />
<references /></div>TheOctopus