Wikipedia testwiki https://test.wikipedia.org/wiki/Main_Page MediaWiki 1.39.0-wmf.25 first-letter Media Special Talk User User talk Wikipedia Wikipedia talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Thread Thread talk Summary Summary talk Test namespace 1 Test namespace 1 talk Test namespace 2 Test namespace 2 talk Draft Draft talk Campaign Campaign talk TimedText TimedText talk Module Module talk SecurePoll SecurePoll talk CNBanner CNBanner talk Translations Translations talk Gadget Gadget talk Gadget definition Gadget definition talk Topic Newsletter Newsletter talk File:MP sounds-pwb.png 6 78320 539019 532927 2022-08-18T12:40:40Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i 539020 539019 2022-08-18T12:42:49Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i 539053 539020 2022-08-18T14:02:39Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i 539054 539053 2022-08-18T14:04:49Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i 539057 539054 2022-08-18T14:08:34Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i 539058 539057 2022-08-18T14:10:44Z Pywikibot-test 23124 Pywikibot-test uploaded a new version of [[File:MP sounds-pwb.png]] wikitext text/x-wiki pywikibot test mvex885are6ahaz42kwh4kn9swdrp8i User:PhantomTech/common.js 2 81111 539163 519335 2022-08-19T08:54:44Z PhantomTech 27808 rm script javascript text/javascript phoiac9h4m842xq45sp7s6u21eteeq1 Template:Tlx/doc 10 81145 539150 228796 2022-08-18T23:59:56Z 95.185.193.161 Replaced content with "كلترررراب" wikitext text/x-wiki كلترررراب a9gyx4f2cw5q3myzxntcor88awqgy5u 539157 539150 2022-08-19T08:39:18Z PhantomTech 27808 Reverted edits by [[Special:Contributions/95.185.193.161|95.185.193.161]] ([[User talk:95.185.193.161|talk]]) to last revision by [[User:Be..anyone|Be..anyone]] wikitext text/x-wiki {{documentation subpage}} This template creates example usage syntax for a template, and links the name to the template page. The name is derived from "'''T'''emplate '''l'''ist e'''x'''panded". Up to 7 pass parameters (numbered) for the specified template are displayed as 'placeholders', and more parameters are shown as "<kbd>|</kbd>''...''". An optional <kbd>SISTER</kbd> parameter can specify an interwiki prefix to link to another wiki. Examples: {| border="1" cellpadding="4" class="wikitable" ! Code ! Result ! Remark |- |{{Tlx|SISTER=W:|Tlx|x0}} |{{Tlx|SISTER=W:|x0}} ||&#160; |- |{{Tlx|SISTER=W:|Tlx|x1|one}} |{{Tlx|SISTER=W:|x1|one}} ||&#160; |- |{{Tlx|SISTER=W:|Tlx|x2|one|two}} |{{Tlx|SISTER=W:|x2|one|two}} ||&#160; |- |{{Tlx|SISTER=W:|Tlx|x3|1<tt>&#124;</tt>2<tt>&#124;</tt>3}} |{{Tlx|SISTER=W:|x3|1|2|3}} ||&#160; |- |{{Tlx|SISTER=W:|Tlx|x4|1<tt>&#124;</tt>2<tt>&#124;</tt>3|4}} |{{Tlx|SISTER=W:|x4|1|2|3|4}} |up to 7 parameters, then ... |- |{{Tlx|SISTER=W:|Tlx|x4|1<tt>&#124;</tt>2<tt>&#124;</tt>3&amp;#124;4}} |{{Tlx|SISTER=W:|x4|1|2|3&#124;4}} |align="right"|<tt>&amp;#124;</tt> for more |- |{{Tlx|SISTER=W:|Tlx|x1|x&#61;u}} |{{Tlx|SISTER=W:|x1|x=u}} |'''=''' won't work |- |{{Tlx|SISTER=W:|Tlx|x1|x&amp;#61;u}} |{{Tlx|SISTER=W:|x1|x&#61;u}} |align="right"|<tt>&amp;#61;</tt> is okay |- |{{Tlx|SISTER=W:|Tlx|x1|&lt;nowiki&gt;x&#61;u&lt;/nowiki&gt;}} |{{Tlx|SISTER=W:|x1|<nowiki>x=u</nowiki>}} |align="right"|sticky nowiki is okay |- |{{Tlx|SISTER=W:|Tlx|x2|&#160;|two}} |{{Tlx|SISTER=W:|x2| |two}} |empty won't work |- |{{Tlx|SISTER=W:|Tlx|x2|&amp;#32;|two}} |{{Tlx|SISTER=W:|x2|&#32;|two}} |align="right"|<tt>&amp;#32;</tt> is okay |- |{{Tlx|SISTER=W:|Tlx|x2|&amp;nbsp;|two}} |{{Tlx|SISTER=W:|x2|&nbsp;|two}} |align="right"|<tt>&amp;nbsp;</tt> is okay |- |{{Tlx|SISTER=W:|Tlx|x2| &amp;#124; two}} |{{Tlx|SISTER=W:|x2| &#124; two}} |align="right"|<tt>&amp;#124;</tt> is okay |- || {{Tlx|SISTER=W:|Tlx|x2| {&#123;!&#125;} two}} || {{Tlx|SISTER=W:|x2| {{!}} two}} |align="right"|{{Tlx|SISTER=W:|!}} is dubious |- || {{Tlx|SISTER=W:|Tlx|x2|<nowiki>2=</nowiki>|<nowiki>3=two</nowiki>}} || {{Tlx|SISTER=W:|x2|2=|3=two}} |empty really doesn't work |- || {{Tlx|SISTER=W:|Tlx|x2|<nowiki>3=two</nowiki>|<nowiki>2=one</nowiki>}} || {{Tlx|SISTER=W:|x2|3=two|2=one}} |align="right"|right to left okay |}<includeonly>[[Category:Internal link templates|Tlx]][[Category:Interwiki link templates|Tlx]] ---- <templatedata> { "description": "Template list expanded", "params": { "1": { "label": "Template", "description": "Linked template name", "type": "string/wiki-page-name" }, "2": { "label": "Parameter", "description": "Optional parameter", "type": "string" }, "3": { "description": "For 2 parameters", "type": "string" }, "4": { "description": "For 3 parameters", "type": "string" }, "5": { "description": "For 4 parameters", "type": "string" }, "6": { "description": "For 5 parameters", "type": "string" }, "7": { "description": "For 6 parameters", "type": "string" }, "8": { "label": "Overflow", "description": "Overflow shown as ...", "type": "string" }, "SISTER": { "label": "Interwiki", "description": "Optional InterWiki link prefix", "type": "string" } } }</templatedata></includeonly> 1ctdfreqzgv3udxfr9kj0upt2jbdht1 User:John Vandenberg/async test write 2 81547 539014 532909 2022-08-18T12:07:32Z Pywikibot-test 23124 Pywikibot 7.6.0.dev2 wikitext text/x-wiki 1660824442.7179937 4xnhkwtrv4nlwvjb29zimandjz4x5qt 539028 539014 2022-08-18T13:28:14Z Pywikibot-test 23124 Pywikibot 7.5.2 wikitext text/x-wiki 1660829285.1373973 dpfxma0v8w048sinwfp882n4lon5uxw 539037 539028 2022-08-18T13:37:06Z Pywikibot-test 23124 Pywikibot 7.6.0.dev2 wikitext text/x-wiki 1660829817.1312103 a4nvovzbk8s2d44dniktsmcrtjt3mvi EditingHelp 0 81558 539147 443815 2022-08-18T23:41:34Z 95.185.193.161 /* Cp09887 wikitext text/x-wiki 'l {{About|a general introduction on how to edit|the editing policy|Wikipedia:Editing policy|the page on how and where you can contribute|Wikipedia:Contributing to Wikipedia}} <noinclude>{{semiprotected|small=yes}}</noinclude> {{Wikipedia how to|WP:H2EAP|WP:HEP|H:EDIT}} [[File:Wikipedia video tutorial-1-Editing-en.ogv|thumb|250px|Editing tutorial for Wikipedia]] {{Side box|text='''Note''': You can use the [[Wikipedia:Sandbox|sandbox]] to experiment with page editing.|imageright=[[File:Sandbox.svg|52px]]}} [[Wikipedia]] is a [[wiki]], meaning that anyone can edit any [[Wikipedia:Protection policy|unprotected page]] and improve articles immediately for all readers. You do not need to register to do this. Anyone who has edited is known as a "[[Wikipedia: Wikipedian|''Wikipedian'']]" and, no matter how trivial the edit may seem, can be proud that he or she has helped make Wikipedia what it is. All of these edits add up! Wikipedia uses two methods of editing: the new [[Wikipedia:VisualEditor|VisualEditor]] (VE), and classic editing through [[Help:Wiki markup|wiki markup]] (wikitext). <!-- Comment - Good luck with your first edit. --> Some pages are [[WP:Protection policy|protected from editing]]. These pages are denoted by a lock icon on the top right of the page and have a <code>View source</code> tab instead of an <code>Edit</code> tab. You can still edit these pages indirectly, by submitting an "[[Wikipedia:Edit requests|edit request]]"&nbsp;– an editor with the ability to edit the protected page will respond to your request. You can submit a request by clicking on the <code>View source</code> tab on that page and using the "Submit an edit request" link at the bottom right. == Editing articles == {{seealso|Wikipedia:FAQ/Editing|}} === Content protocols === {{see|Wikipedia:Core content policies}} policiepolicWhen adding content and creating new articles an [[Wikipedia:Encyclopedic style|encyclopedic style]] with a [[WP:TONE|formal tone]] is important. Instead of essay-like, argumentative, or opinionated writing, Wikipedia articles should have a straightforward, [[Wikipedia:Summary style|just-the-facts]] style. The goal of a Wikipedia article is to create a comprehensive and [[WP:NPOV|neutrally written]] summary of existing mainstream knowledge about a topic. Accordingly, Wikipedia does not publish [[WP:NOR|original research]]. An encyclopedia is, by its nature, a [[tertiary source]] that provides a survey of information already the subject of publication in the wider world. Ideally all information should be [[Wikipedia:Citing sources|cited]] and [[WP:Verify|verifiable]] by [[Wikipedia:Identifying reliable sources|reliable sources]]. Sourcing requirements are significantly stricter in [[WP:BLP|articles on living persons]]. === Edit screen(s) === {{seealso|Wikipedia:Tutorial/Editing}} Editing most Wikipedia pages is simple. Wikipedia uses two methods of editing: classic editing through [[Help:Wiki markup|wiki markup]] (wikitext) and through a new [[Wikipedia:VisualEditor|VisualEditor]] (VE). Wiki markup editing is chosen by clicking the <tt>Edit</tt> tab at the top of a Wikipedia page (or on a [[Wikipedia: Section|section-edit link]]). This will take you to a new page containing the editable contents of the current page. Wiki markup is used extensively throughout Wikipedia for such things as [[Help:Link|hyperlinks]], [[Help:Table|tables]] and [[Help:Columns|columns]], [[Help:Footnotes|footnotes]], [[Wikipedia:Inline citation|inline citation]], [[Help:Special characters|special characters]] and so on. The VisualEditor option is intended as a user-friendly, [[WYSIWYG|"What You See Is What You Get"]] (WYSIWYG) editing aid allowing one to edit pages without the need to learn wikitext markup, It is only available to registered logged-in users through an opt-in choice available through [[Special:Preferences#mw-prefsection-betafeatures|personal preferences]], see the [[Wikipedia:VisualEditor/User guide|VisualEditor user guide]] for more information. {|cellspacing="10" |+ Two editing environments: wikitext and VisualEditor |[[File:How to edit a page Edit box.png|frameless|center|400px|alt=Text in a large rectangle below two toolbars and next to a scrollbar.]] |[[File:Wikipedia article in VisualEditor 2015-04-17.png|frameless|center|400px|alt=]] |- |valign="top"|{{caption|Edit box showing the [[Help:wiki markup|wikitext markup]] (screenshot from 2012). You can change the formatting and contents of the page by changing what is written in this box.}} |valign="top"|{{caption|Screenshot showing the same article in [[Wikipedia:VisualEditor|VisualEditor]]. Unlike the wiki markup display, VisualEditor will show the text being edited almost as if it were already saved.}} |} The Wikipedia community has developed [[Wikipedia:Manual of Style|style guidelines]] to make articles and facts appear in a standardized form, and Wikipedia easier to use as a whole. A basic list of [[Help:Wiki markup|wiki markup]] can be found on the [[Help:Cheatsheet|cheatsheet]]. An [[Help:Edit toolbar|"edit toolbar"]] is provided just above the edit box (pictured below), which will allow logged in users (by selecting the option in [[Special:Preferences#mw-prefsection-gadgets|personal preferences]]) to automatically place and format various aspects of wiki code. See [[Help:Wiki markup]] for more information, remember that you can't break Wikipedia, and, although there are many protocols, [[WP:PERFECTION|perfection is not required]], as [[WP:WIP|Wikipedia is a work in progress]]. [[File:WikiEditor-advanced menu-en.png|center]] When you have finished editing, you should write a short [[Help:Edit summary|edit summary]] in the small field below the edit box (pictured below). You may use shorthand to describe your changes, as described in the [[Wikipedia:Edit summary legend|legend]]. To see how the page looks with your edits, press the "'''Show preview'''" button. To see the differences between the page with your edits and the previous version of the page, press the "'''Show changes'''" button. If you're satisfied with what you see, '''[[Wikipedia:Be bold|be bold]]''' and press the "'''Save page'''" button. Your changes will immediately be visible to all Wikipedia users. {{EditOptions|align=center|width=50em|font-size=80%}} Note: Do not sign the edit summary line with your <nowiki>~~~~</nowiki> signature, as it does not work there. ==== Minor edits ==== {{Further2|[[Help:Minor edit]]}} [[File:Minor edit.png|thumb|upright|The "minor edit" checkbox (circled) in the wikitext editor]] A check to the "minor edit" box signifies that only superficial differences exist between the version with your edit and the previous version: typo corrections, formatting and presentational changes, rearranging of text without modifying content, etc. A ''minor edit'' is a version that the editor believes requires no review and could never be the subject of a dispute. The "minor edit" option is one of several [[Wikipedia:Why create an account?#New editing options|options]] available only to [[Help:Logging in|registered users]]. Editors should not feel that marking a change as minor devalues their effort. ==== Major edits ==== {{see|Wikipedia:Editing policy#Talking and editing}} All editors are encouraged to [[Wikipedia:Be bold|be bold]], but there are several things that a user can do to ensure that major edits are performed smoothly. Before engaging in a major edit, a user should consider discussing proposed changes on the article discussion/talk page. During the edit, if doing so over an extended period, the {{tlx|In use}} tag can reduce the likelihood of an edit conflict. Once the edit has been completed, the inclusion of an [[Help:Edit summary|edit summary]] will assist in documenting the changes. These steps will help all to ensure that major edits are well received by the Wikipedia community. A major edit should be reviewed to confirm that it is consensual to all concerned editors. Therefore, any change that affects the ''meaning'' of an article is major (not minor), even if the edit is a single word. There are no necessary terms to which you have to agree when doing major edits, but the preceding recommendations have become best practice. If you do it your own way, the likelihood of your edits being reedited may be higher. <!-- Place below here or in intro? --> When performing a large edit, it is suggested that you periodically, and before pressing "Save page", copy your edits into an external text editor (preferably one without formatting, such as [[Notepad (Windows)|Notepad]]). This ensures that in the case of a browser crash you will not lose your work. If you are adding substantial amounts of work, it is also a good idea to save changes in stages. === Adding references === {{see|Wikipedia:Referencing for beginners|Wikipedia:Citing sources}} [[File:Citing sources tutorial, part 1.ogv|thumb|upright|A screencast that walks through the essentials needed in citing your sources. <small>(2:01&nbsp;min)</small>]] [[File:RefTools rework.ogv|thumb|right|upright|A screencast that walks through how to use the various features of RefTools. <small>(5:03&nbsp;min)</small>]] Generally sources are added directly after the facts they support at the end of the sentence and after any punctuation. Wikipedia permits editors to use any citation system that allows the reader to understand where the information came from, and strongly encourages use of [[Wikipedia:Inline citation|inline citations]] to do so. Common methods of placing inline citations include [[Wikipedia:Footnotes|footnotes]], [[Help:Shortened footnotes|shortened footnotes]] and [[Wikipedia:Harvard references|parenthetical references]]. Inline citations are most commonly placed by inserting a reference between <code><nowiki><ref></nowiki></code> ... <code><nowiki></ref></nowiki></code> tags, directly in the text of an article. When one saves, that will ''display'' in the text as a footnote (e.g.<small><sup><span style="color:#002BB8">[1][2]</span></sup></small>), and the source you keyed in will appear on the page in a collated, numbered list corresponding to the footnote numbers in the text, wherever a {{tl|Reflist}} template or <code><nowiki><references /></nowiki></code> tag is present, usually in a section titled "References" or "Notes". If you are creating a new page, or adding references to a page that didn't previously have any, don't forget to add a references section with this display markup. There are a number of tools available to help with citation placement and formatting, some of which are internal tools and scripts while others are available from external sites. For an example of the former, [[Wikipedia:RefToolbar|RefToolbar]] is a [[JavaScript]] toolbar displayed above the edit box that provides the ability to automatically fill out various [[Wikipedia:Citation templates|citation templates]] and insert them in the text already formatting inside <code><nowiki><ref></nowiki></code> ... <code><nowiki></ref></nowiki></code> tags. For an example of the latter, the [http://reftag.appspot.com/ Wikipedia citation tool for Google Books] converts a Google Books address (URL) into a filled-out {{tl|cite book}} template ready to be pasted into an article. See [[Help:Citation tools]] for many others. === Adding images, sounds and videos === {{main|Wikipedia:Creation and usage of media files}} A file that is already hosted on Wikipedia or the [[Wikimedia Commons]] can be inserted with the basic code "<code><nowiki>[[File:FILENAME|thumb|DESCRIPTION]]</nowiki></code>". ("<code>Image:</code>" can be substituted for "<code>File:</code>" with no change in effect; the choice between the two is purely a matter of editorial preference.) Using "<code>thumb</code>" generates a [[thumbnail]] of an image (the most common placement option), which is typically sized differently from the original image. The Wikimedia Commons' [[Commons:Special:UploadWizard|File Upload Wizard]] and Wikipedia's [[Wikipedia:File Upload Wizard|File Upload Wizard]], will guide you through the process of submitting media. All files uploaded are [[mirror (computing)|mirrored]] between Wikipedia and Wikimedia Commons, and searchable from either one. There are various file formats available. == Article creation == {{main|Wikipedia:Your first article}} [[File:How to create a Wikipedia article - Right to science and culture.ogv|upright|thumb|A screencast demonstrating how to create a Wikipedia article manually. <small>(7:50 min)</small>]] Before [[Wikipedia:Starting an article|starting a new article]] please understand [[Wikipedia:Notability|Wikipedia's notability requirements]]. In short, the topic of an article must have already been the subject of publication in [[WP:IRS|reliable sources]], such as books published by major publishing houses, newspapers, magazines, peer-reviewed scholarly journals and websites that meet the same requirements as reputable print-based sources. Information on Wikipedia must be verifiable; if no reliable [[Wikipedia:Third-party sources|third-party]] sources can be found on a topic, then it should not have a separate article. Wikipedia's concept of notability applies this basic standard to avoid [[WP:INDISCRIMINATE|indiscriminate]] inclusion of topics. An [[Wikipedia:Article wizard|Article Wizard]] is available to help you create articles — it is not required but will help you construct better articles. Only [[Special:CreateAccount|registered users]] may create articles directly, though people editing by their IP address can submit a proposed article through the [[Wikipedia:Articles for creation|Articles for Creation]] process, where it will be reviewed and considered for publication. Before creating an article, please [[Wikipedia:Searching|search]] Wikipedia first to make sure that an article does not ''already exist'' on the subject, and please also review the [[Wikipedia:Article titles|article titling policy]] for guidance of what to name the article. == Talk pages == {{Further2|[[Help:Using talk pages]]|[[Wikipedia:Talk page guidelines]]}} [[File:Editing basics - Talk pages.webm|thumb|upright|thumbtime=1|A screencast demonstrating how to use a talk page. <small>(2:43 min)</small>]] Every article on Wikipedia has a [[Wikipedia:Talk pages|talk page]], reached by clicking the <tt>Talk</tt> tab just above the title (for example, [[Talk:Alexander the Great]]). There, editors can discuss improvements to the content of an article. If you ever make a change that gets [[Wikipedia:Reverting|reverted]] by another editor, discuss the change on the talk page! The [[Wikipedia:BOLD, revert, discuss cycle|BOLD, revert, discuss cycle]] is a popular method of reaching consensus. It is very important that you conduct yourself with [[WP:Civility|civility]] and [[WP:AGF|assume good faith]] on the part of others. [[Wikipedia:Edit warring|Edit warring]] (repeatedly overriding or reimplementing contributions) is highly discouraged. Most other [[Wikipedia:Namespace|types of pages]] on Wikipedia also have associated talk pages, including the [[WP:User page|User page]] each editor is assigned once they sign up. When other editors need to contact you, they will usually do this by leaving a message on [[Special:mytalk|your talk page]]. When someone has left you a message that way, you will see a notice the next time you log in or view a page on Wikipedia. :Sign your contributions to a Talk page by using four tildes (<nowiki>~~~~</nowiki>), which produces your username and a time/date stamp. == Protected pages == {{see|Wikipedia:Rough guide to semi-protection}} Some pages are [[WP:PROT|protected from editing]]. These pages have a <code>View source</code> tab instead of an <code>Edit</code> tab. You can still edit these pages indirectly, by submitting an "[[Wikipedia:Edit requests|edit request]]"&nbsp;– an editor with the ability to edit the protected page will respond to your request. You can submit a request by clicking on the <code>View source</code> tab on that page and using the "Submit an edit request" link at the bottom right. == Policies and conventions == {{see|Wikipedia:Simplified ruleset|Wikipedia:Simplified Manual of Style}} [[Wikipedia:List of policies|Policies]], [[Wikipedia:List of guidelines|guidelines]], and [[Wikipedia:Manual of Style/Contents|formatting norms]] are developed by the community to describe the best practices, to clarify principles, resolve conflicts, and otherwise further our goals. Make sure that you submit information which is relevant to Wikipedia's specific purpose, or your content might be deleted. You can always use the [[Help:Talk page|talk pages]] to ask questions or check to see if your idea will be accepted. Please make note of the license your contributions will be covered by. == Further reading == {| style="width:100%;" |- style="vertical-align:top;" |width=47%| ;Helpful tips * [[Help:Wikipedia: The Missing Manual/Editing, Creating, and Maintaining Articles/Editing for the First Time|Editing for the First Time]] * [[Wikipedia:Page size#If you have problems editing a long article|If you have problems editing a long article]] * [[Help:Protection|If the article is protected from editing]] * [[Help:Page history|About page history]] ;Naming and moving * [[Wikipedia:Moving a page|Moving a page to a new name]] * [[Wikipedia:Article titles|Article titles]] * [[Wikipedia:Namespace|Namespace]] |width=2%| |width=47%| ;Style and layout * [[Wikipedia:Layout|Layout]] * [[Wikipedia:Manual of Style|Manual of Style]] * [[Wikipedia:Annotated article|Annotated article]] ;Tools * [[Wikipedia:Tools]] * [[Wikipedia:Text editor support|Text editor support]] {{Portal|Help}} {{Meta}} |} ;Related * [[WP:WikiProject|WikiProjects]], if you are writing an article about something that belongs to a group of topics, check here first! * [[outreach:Bookshelf|Wikimedia Bookshelf]], learning materials, videos, and handouts. ---- {{Offer help}} {{Help navigation}} {{Wikipedia technical help|collapsed}} <noinclude> [[Category:Wikipedia how-to|Editing, Help]] [[Category:Wikipedia basic information|Editing, Help]] [[Category:Wikipedia editing| ]] </noinclude> bhcxs1g085wjc55qgjk7v4ibxx100nw 539158 539147 2022-08-19T08:39:19Z PhantomTech 27808 Reverted edits by [[Special:Contributions/95.185.193.161|95.185.193.161]] ([[User talk:95.185.193.161|talk]]) to last revision by [[User:CommonsDelinker|CommonsDelinker]] wikitext text/x-wiki <!-- This is not the place to practice editing pages; to do so, please use the sandbox. To get there, enter "Wikipedia:Sandbox" in the search bar and press Return/Enter. --> {{About|a general introduction on how to edit|the editing policy|Wikipedia:Editing policy|the page on how and where you can contribute|Wikipedia:Contributing to Wikipedia}} <noinclude>{{semiprotected|small=yes}}</noinclude> {{Wikipedia how to|WP:H2EAP|WP:HEP|H:EDIT}} [[File:Wikipedia video tutorial-1-Editing-en.ogv|thumb|250px|Editing tutorial for Wikipedia]] {{Side box|text='''Note''': You can use the [[Wikipedia:Sandbox|sandbox]] to experiment with page editing.|imageright=[[File:Sandbox.svg|52px]]}} [[Wikipedia]] is a [[wiki]], meaning that anyone can edit any [[Wikipedia:Protection policy|unprotected page]] and improve articles immediately for all readers. You do not need to register to do this. Anyone who has edited is known as a "[[Wikipedia: Wikipedian|''Wikipedian'']]" and, no matter how trivial the edit may seem, can be proud that he or she has helped make Wikipedia what it is. All of these edits add up! Wikipedia uses two methods of editing: the new [[Wikipedia:VisualEditor|VisualEditor]] (VE), and classic editing through [[Help:Wiki markup|wiki markup]] (wikitext). <!-- Comment - Good luck with your first edit. --> Some pages are [[WP:Protection policy|protected from editing]]. These pages are denoted by a lock icon on the top right of the page and have a <code>View source</code> tab instead of an <code>Edit</code> tab. You can still edit these pages indirectly, by submitting an "[[Wikipedia:Edit requests|edit request]]"&nbsp;– an editor with the ability to edit the protected page will respond to your request. You can submit a request by clicking on the <code>View source</code> tab on that page and using the "Submit an edit request" link at the bottom right. == Editing articles == {{seealso|Wikipedia:FAQ/Editing|}} === Content protocols === {{see|Wikipedia:Core content policies}} When adding content and creating new articles an [[Wikipedia:Encyclopedic style|encyclopedic style]] with a [[WP:TONE|formal tone]] is important. Instead of essay-like, argumentative, or opinionated writing, Wikipedia articles should have a straightforward, [[Wikipedia:Summary style|just-the-facts]] style. The goal of a Wikipedia article is to create a comprehensive and [[WP:NPOV|neutrally written]] summary of existing mainstream knowledge about a topic. Accordingly, Wikipedia does not publish [[WP:NOR|original research]]. An encyclopedia is, by its nature, a [[tertiary source]] that provides a survey of information already the subject of publication in the wider world. Ideally all information should be [[Wikipedia:Citing sources|cited]] and [[WP:Verify|verifiable]] by [[Wikipedia:Identifying reliable sources|reliable sources]]. Sourcing requirements are significantly stricter in [[WP:BLP|articles on living persons]]. === Edit screen(s) === {{seealso|Wikipedia:Tutorial/Editing}} Editing most Wikipedia pages is simple. Wikipedia uses two methods of editing: classic editing through [[Help:Wiki markup|wiki markup]] (wikitext) and through a new [[Wikipedia:VisualEditor|VisualEditor]] (VE). Wiki markup editing is chosen by clicking the <tt>Edit</tt> tab at the top of a Wikipedia page (or on a [[Wikipedia: Section|section-edit link]]). This will take you to a new page containing the editable contents of the current page. Wiki markup is used extensively throughout Wikipedia for such things as [[Help:Link|hyperlinks]], [[Help:Table|tables]] and [[Help:Columns|columns]], [[Help:Footnotes|footnotes]], [[Wikipedia:Inline citation|inline citation]], [[Help:Special characters|special characters]] and so on. The VisualEditor option is intended as a user-friendly, [[WYSIWYG|"What You See Is What You Get"]] (WYSIWYG) editing aid allowing one to edit pages without the need to learn wikitext markup, It is only available to registered logged-in users through an opt-in choice available through [[Special:Preferences#mw-prefsection-betafeatures|personal preferences]], see the [[Wikipedia:VisualEditor/User guide|VisualEditor user guide]] for more information. {|cellspacing="10" |+ Two editing environments: wikitext and VisualEditor |[[File:How to edit a page Edit box.png|frameless|center|400px|alt=Text in a large rectangle below two toolbars and next to a scrollbar.]] |[[File:Wikipedia article in VisualEditor 2015-04-17.png|frameless|center|400px|alt=]] |- |valign="top"|{{caption|Edit box showing the [[Help:wiki markup|wikitext markup]] (screenshot from 2012). You can change the formatting and contents of the page by changing what is written in this box.}} |valign="top"|{{caption|Screenshot showing the same article in [[Wikipedia:VisualEditor|VisualEditor]]. Unlike the wiki markup display, VisualEditor will show the text being edited almost as if it were already saved.}} |} The Wikipedia community has developed [[Wikipedia:Manual of Style|style guidelines]] to make articles and facts appear in a standardized form, and Wikipedia easier to use as a whole. A basic list of [[Help:Wiki markup|wiki markup]] can be found on the [[Help:Cheatsheet|cheatsheet]]. An [[Help:Edit toolbar|"edit toolbar"]] is provided just above the edit box (pictured below), which will allow logged in users (by selecting the option in [[Special:Preferences#mw-prefsection-gadgets|personal preferences]]) to automatically place and format various aspects of wiki code. See [[Help:Wiki markup]] for more information, remember that you can't break Wikipedia, and, although there are many protocols, [[WP:PERFECTION|perfection is not required]], as [[WP:WIP|Wikipedia is a work in progress]]. [[File:WikiEditor-advanced menu-en.png|center]] When you have finished editing, you should write a short [[Help:Edit summary|edit summary]] in the small field below the edit box (pictured below). You may use shorthand to describe your changes, as described in the [[Wikipedia:Edit summary legend|legend]]. To see how the page looks with your edits, press the "'''Show preview'''" button. To see the differences between the page with your edits and the previous version of the page, press the "'''Show changes'''" button. If you're satisfied with what you see, '''[[Wikipedia:Be bold|be bold]]''' and press the "'''Save page'''" button. Your changes will immediately be visible to all Wikipedia users. {{EditOptions|align=center|width=50em|font-size=80%}} Note: Do not sign the edit summary line with your <nowiki>~~~~</nowiki> signature, as it does not work there. ==== Minor edits ==== {{Further2|[[Help:Minor edit]]}} [[File:Minor edit.png|thumb|upright|The "minor edit" checkbox (circled) in the wikitext editor]] A check to the "minor edit" box signifies that only superficial differences exist between the version with your edit and the previous version: typo corrections, formatting and presentational changes, rearranging of text without modifying content, etc. A ''minor edit'' is a version that the editor believes requires no review and could never be the subject of a dispute. The "minor edit" option is one of several [[Wikipedia:Why create an account?#New editing options|options]] available only to [[Help:Logging in|registered users]]. Editors should not feel that marking a change as minor devalues their effort. ==== Major edits ==== {{see|Wikipedia:Editing policy#Talking and editing}} All editors are encouraged to [[Wikipedia:Be bold|be bold]], but there are several things that a user can do to ensure that major edits are performed smoothly. Before engaging in a major edit, a user should consider discussing proposed changes on the article discussion/talk page. During the edit, if doing so over an extended period, the {{tlx|In use}} tag can reduce the likelihood of an edit conflict. Once the edit has been completed, the inclusion of an [[Help:Edit summary|edit summary]] will assist in documenting the changes. These steps will help all to ensure that major edits are well received by the Wikipedia community. A major edit should be reviewed to confirm that it is consensual to all concerned editors. Therefore, any change that affects the ''meaning'' of an article is major (not minor), even if the edit is a single word. There are no necessary terms to which you have to agree when doing major edits, but the preceding recommendations have become best practice. If you do it your own way, the likelihood of your edits being reedited may be higher. <!-- Place below here or in intro? --> When performing a large edit, it is suggested that you periodically, and before pressing "Save page", copy your edits into an external text editor (preferably one without formatting, such as [[Notepad (Windows)|Notepad]]). This ensures that in the case of a browser crash you will not lose your work. If you are adding substantial amounts of work, it is also a good idea to save changes in stages. === Adding references === {{see|Wikipedia:Referencing for beginners|Wikipedia:Citing sources}} [[File:Citing sources tutorial, part 1.ogv|thumb|upright|A screencast that walks through the essentials needed in citing your sources. <small>(2:01&nbsp;min)</small>]] [[File:RefTools rework.ogv|thumb|right|upright|A screencast that walks through how to use the various features of RefTools. <small>(5:03&nbsp;min)</small>]] Generally sources are added directly after the facts they support at the end of the sentence and after any punctuation. Wikipedia permits editors to use any citation system that allows the reader to understand where the information came from, and strongly encourages use of [[Wikipedia:Inline citation|inline citations]] to do so. Common methods of placing inline citations include [[Wikipedia:Footnotes|footnotes]], [[Help:Shortened footnotes|shortened footnotes]] and [[Wikipedia:Harvard references|parenthetical references]]. Inline citations are most commonly placed by inserting a reference between <code><nowiki><ref></nowiki></code> ... <code><nowiki></ref></nowiki></code> tags, directly in the text of an article. When one saves, that will ''display'' in the text as a footnote (e.g.<small><sup><span style="color:#002BB8">[1][2]</span></sup></small>), and the source you keyed in will appear on the page in a collated, numbered list corresponding to the footnote numbers in the text, wherever a {{tl|Reflist}} template or <code><nowiki><references /></nowiki></code> tag is present, usually in a section titled "References" or "Notes". If you are creating a new page, or adding references to a page that didn't previously have any, don't forget to add a references section with this display markup. There are a number of tools available to help with citation placement and formatting, some of which are internal tools and scripts while others are available from external sites. For an example of the former, [[Wikipedia:RefToolbar|RefToolbar]] is a [[JavaScript]] toolbar displayed above the edit box that provides the ability to automatically fill out various [[Wikipedia:Citation templates|citation templates]] and insert them in the text already formatting inside <code><nowiki><ref></nowiki></code> ... <code><nowiki></ref></nowiki></code> tags. For an example of the latter, the [http://reftag.appspot.com/ Wikipedia citation tool for Google Books] converts a Google Books address (URL) into a filled-out {{tl|cite book}} template ready to be pasted into an article. See [[Help:Citation tools]] for many others. === Adding images, sounds and videos === {{main|Wikipedia:Creation and usage of media files}} A file that is already hosted on Wikipedia or the [[Wikimedia Commons]] can be inserted with the basic code "<code><nowiki>[[File:FILENAME|thumb|DESCRIPTION]]</nowiki></code>". ("<code>Image:</code>" can be substituted for "<code>File:</code>" with no change in effect; the choice between the two is purely a matter of editorial preference.) Using "<code>thumb</code>" generates a [[thumbnail]] of an image (the most common placement option), which is typically sized differently from the original image. The Wikimedia Commons' [[Commons:Special:UploadWizard|File Upload Wizard]] and Wikipedia's [[Wikipedia:File Upload Wizard|File Upload Wizard]], will guide you through the process of submitting media. All files uploaded are [[mirror (computing)|mirrored]] between Wikipedia and Wikimedia Commons, and searchable from either one. There are various file formats available. == Article creation == {{main|Wikipedia:Your first article}} [[File:How to create a Wikipedia article - Right to science and culture.ogv|upright|thumb|A screencast demonstrating how to create a Wikipedia article manually. <small>(7:50 min)</small>]] Before [[Wikipedia:Starting an article|starting a new article]] please understand [[Wikipedia:Notability|Wikipedia's notability requirements]]. In short, the topic of an article must have already been the subject of publication in [[WP:IRS|reliable sources]], such as books published by major publishing houses, newspapers, magazines, peer-reviewed scholarly journals and websites that meet the same requirements as reputable print-based sources. Information on Wikipedia must be verifiable; if no reliable [[Wikipedia:Third-party sources|third-party]] sources can be found on a topic, then it should not have a separate article. Wikipedia's concept of notability applies this basic standard to avoid [[WP:INDISCRIMINATE|indiscriminate]] inclusion of topics. An [[Wikipedia:Article wizard|Article Wizard]] is available to help you create articles — it is not required but will help you construct better articles. Only [[Special:CreateAccount|registered users]] may create articles directly, though people editing by their IP address can submit a proposed article through the [[Wikipedia:Articles for creation|Articles for Creation]] process, where it will be reviewed and considered for publication. Before creating an article, please [[Wikipedia:Searching|search]] Wikipedia first to make sure that an article does not ''already exist'' on the subject, and please also review the [[Wikipedia:Article titles|article titling policy]] for guidance of what to name the article. == Talk pages == {{Further2|[[Help:Using talk pages]]|[[Wikipedia:Talk page guidelines]]}} [[File:Editing basics - Talk pages.webm|thumb|upright|thumbtime=1|A screencast demonstrating how to use a talk page. <small>(2:43 min)</small>]] Every article on Wikipedia has a [[Wikipedia:Talk pages|talk page]], reached by clicking the <tt>Talk</tt> tab just above the title (for example, [[Talk:Alexander the Great]]). There, editors can discuss improvements to the content of an article. If you ever make a change that gets [[Wikipedia:Reverting|reverted]] by another editor, discuss the change on the talk page! The [[Wikipedia:BOLD, revert, discuss cycle|BOLD, revert, discuss cycle]] is a popular method of reaching consensus. It is very important that you conduct yourself with [[WP:Civility|civility]] and [[WP:AGF|assume good faith]] on the part of others. [[Wikipedia:Edit warring|Edit warring]] (repeatedly overriding or reimplementing contributions) is highly discouraged. Most other [[Wikipedia:Namespace|types of pages]] on Wikipedia also have associated talk pages, including the [[WP:User page|User page]] each editor is assigned once they sign up. When other editors need to contact you, they will usually do this by leaving a message on [[Special:mytalk|your talk page]]. When someone has left you a message that way, you will see a notice the next time you log in or view a page on Wikipedia. :Sign your contributions to a Talk page by using four tildes (<nowiki>~~~~</nowiki>), which produces your username and a time/date stamp. == Protected pages == {{see|Wikipedia:Rough guide to semi-protection}} Some pages are [[WP:PROT|protected from editing]]. These pages have a <code>View source</code> tab instead of an <code>Edit</code> tab. You can still edit these pages indirectly, by submitting an "[[Wikipedia:Edit requests|edit request]]"&nbsp;– an editor with the ability to edit the protected page will respond to your request. You can submit a request by clicking on the <code>View source</code> tab on that page and using the "Submit an edit request" link at the bottom right. == Policies and conventions == {{see|Wikipedia:Simplified ruleset|Wikipedia:Simplified Manual of Style}} [[Wikipedia:List of policies|Policies]], [[Wikipedia:List of guidelines|guidelines]], and [[Wikipedia:Manual of Style/Contents|formatting norms]] are developed by the community to describe the best practices, to clarify principles, resolve conflicts, and otherwise further our goals. Make sure that you submit information which is relevant to Wikipedia's specific purpose, or your content might be deleted. You can always use the [[Help:Talk page|talk pages]] to ask questions or check to see if your idea will be accepted. Please make note of the license your contributions will be covered by. == Further reading == {| style="width:100%;" |- style="vertical-align:top;" |width=47%| ;Helpful tips * [[Help:Wikipedia: The Missing Manual/Editing, Creating, and Maintaining Articles/Editing for the First Time|Editing for the First Time]] * [[Wikipedia:Page size#If you have problems editing a long article|If you have problems editing a long article]] * [[Help:Protection|If the article is protected from editing]] * [[Help:Page history|About page history]] ;Naming and moving * [[Wikipedia:Moving a page|Moving a page to a new name]] * [[Wikipedia:Article titles|Article titles]] * [[Wikipedia:Namespace|Namespace]] |width=2%| |width=47%| ;Style and layout * [[Wikipedia:Layout|Layout]] * [[Wikipedia:Manual of Style|Manual of Style]] * [[Wikipedia:Annotated article|Annotated article]] ;Tools * [[Wikipedia:Tools]] * [[Wikipedia:Text editor support|Text editor support]] {{Portal|Help}} {{Meta}} |} ;Related * [[WP:WikiProject|WikiProjects]], if you are writing an article about something that belongs to a group of topics, check here first! * [[outreach:Bookshelf|Wikimedia Bookshelf]], learning materials, videos, and handouts. ---- {{Offer help}} {{Help navigation}} {{Wikipedia technical help|collapsed}} <noinclude> [[Category:Wikipedia how-to|Editing, Help]] [[Category:Wikipedia basic information|Editing, Help]] [[Category:Wikipedia editing| ]] </noinclude> pd1scwaew3j8onpugpcb8ki5orjatk1 User:John Vandenberg/appendtext test 2 81788 539013 532908 2022-08-18T12:07:22Z Pywikibot-test 23124 wikitext text/x-wiki 1433650768.531433650922.331433651729.111433670166.311433675620.231434189298.391434190713.181434466819.82218051434544025.22135851434556196.60172341435173199.59346151435175699.59451271435227022.74044541435528701.75742911435530425.45590261435603389.080081437231694.72999551437247968.58793571437249806.3797741437298795.05681351437299498.54262071437301447.66920381437302227.7655441437303194.27986031437304101.72397661437310188.7074311437310950.0167771437312161.48824671437313010.34581731437313729.64502261437508795.02368621437509778.81783961437516631.40031891438256915.00195531438380338.75435851438383980.68647171438454064.30758831438457192.55998851438473558.4497151438475370.52737021438888563.82252121439048615.09364531439242551.86522051439284878.94054751439567068.00147221439645869.40761881439653355.34343361439892097.89366271439893989.92894151439937872.74017361439942911.25551271440071096.08264111440280762.25626281440718001.3262011440893319.42683861441040710.94389411441045094.56088661441367039.71286131441492543.00856571441494238.9647241443131370.03606581443212814.54482251454969098.621455143085.01455479939.331458010578.141646415352.6267931646418236.303551646419108.5554141646480673.1255151646486361.30947541646489252.55788281646497776.8472891646500951.96962931646503090.90285371646508464.6270851646557704.72482941646560644.88797711646568704.91856581646573733.00244281646576832.29534481646608917.34515641646654969.60378361646656319.4402261646656560.3573951646667875.37336181646669840.47606131646671473.95034121646674984.85814431646826562.7642131646830600.84946161646833174.90316631646834856.9354641646836733.8114731646848463.33862281646854361.6220061646921244.61630941646929392.52481341646933478.7709891646989628.14013271646993317.0693991647006535.8758381647010068.79893281647067797.81312181647070228.9538041647088146.43666861647129259.68616061647160403.20344641647161418.68453741647165213.34464841647182471.8682351647203984.8648061647204146.85476951647205856.08880071647229928.91692161647232863.2489111647244837.81863951647253131.60572861647253341.66492151647257374.36275241647261586.3715681647328114.68083791647328863.86457971647338369.03202411647345322.46875211647352352.98292641647362207.4400921647376689.68484851647377054.13237741647507817.3071141647520722.49061581647537658.91502861647537706.9929851647537724.92751151647537734.26552411647537734.81241751647537796.29433751647600884.78828861647603345.3407491647607378.26923131647607451.39406541647610335.08369161647619863.80975681647636713.9665881647684938.94061331647686327.2922681647690808.45028761647692744.59212851647732431.32598611647772952.28326751647781284.95441991647800669.47089581647849904.41088181647854192.1383851647860875.18231251647874602.63781051647879297.1874931647883065.4647961647924265.03851251647936769.8719151647951966.8961621648054226.68201351648059130.80152961648060298.43086981648069938.0877581648125306.6112961648143342.68760181648143650.04991751648188528.68711191648196925.6356741648203876.69900561648211369.0150091648230332.54617121648281987.22994761648283693.56241941648285224.71328661648286447.91258651648291573.67376261648291846.70330291648294060.07191231648296246.83941861648298801.97048331648305016.80210021648334644.85586831648379305.4112821648389448.81566381648405605.99447971648411133.04927181648412522.24783181648422117.89680721648446617.8572281648450264.77608821648454199.90044761648467787.75208971648467856.83117841648718888.7086471648726868.34113621648731002.50412491648735298.12991521649690895.66212321649691467.9696281649743553.52938491649755873.90303251649763327.8892521649774138.0124031649777526.37097861649778489.48823021649784790.27565621649860160.37698861649936556.74318031649955430.38933971650002447.5759611650006360.23943541650028605.97354981650039495.475341650041154.52726721650041204.27767731650043469.9524181650182871.47858071650185429.33433821650203503.7359421650214109.96521881650231719.77891951650281824.2778291650288925.13755371650295721.33825951650295882.12538961650300339.22233131650341815.28370641650380832.94509431650402613.69048711650518905.2356281650522569.2941071650530608.544891650531430.3989611650533914.10076831650542738.41888791650546175.9846881650568044.03694751650631023.97239781650632899.72227331650634830.3925491650637007.66384821650640862.5720661650689309.4054381650701657.98250581650703185.78357031650703771.5033541650735123.8095531650738484.06956341650776192.5568211650813066.8977991650848683.918771650861187.31198121650876020.82570171650880474.35385231650881868.45988561650883153.22984271650884549.92777321650886892.40727421650897830.36771461650949494.34935431650949911.4991251650954397.3235271650990281.23737171650995523.8559241651056953.48302131651058845.9713631651060365.91917781651065711.69361521651066891.44208121651068680.67229721651068949.30104371651068950.86070821651069866.21405341651077973.48218511651150569.5798041651150701.53431841651159306.89410231651163972.5414571651207135.13229251651314580.08892971651323639.1569731651335350.97018341651337464.3604491651343671.43810871651358144.34414821651358991.73634841651403991.80600071651408466.43860861651410629.6915031651424095.3323751651424215.430631651424217.16175171651424260.61668921651435316.36143421651477433.62521861651497967.4008731651570956.43188331651571040.13904711651574112.83837941651576178.2236351651585370.21917181651635290.6039241651635576.97641251651635655.45832421651635743.04751161651652652.44804481651673300.35671471651690999.9594171651756658.2204551651756671.9024541651780115.29231761651804123.6068891651841232.36630061651872084.1808571651914696.15967461651915185.17890741651924981.59495141651924985.67764931651947461.11864161652010451.4397451652013169.15126091652018291.04681441652101981.57916931652102144.73755261652205259.24803381652228263.38625721652241111.3187991652241991.0605551652246545.13976341652249133.80611011652345322.74670461652349556.01237941652349776.2655691652350144.64992761652353480.50348451652355561.35055181652355572.5898951652363359.53054261652423597.3604321652425345.54388571652434442.67079141652466898.8122741652467998.09214571652481119.60053971652515900.4313781652516491.8247921652517245.8858371652517458.95822791652523536.91254641652525004.91378931652529117.52156421652530351.27152131652549586.46723871652562013.24319481652614409.32601761652616114.78897861652640389.54013231652701163.91744661652701218.71869951652704583.73101121652736636.34235531652809358.14918331652809500.2787851652885818.32253531652895677.120911652946764.21459771652958152.14900661653025900.08983161653065810.43916341653077663.07969381653095577.50154731653096778.42144161653097676.23765561653097888.80603721653116153.01087381653117420.85944841653118936.11491161653125313.7796781653126335.42993711653134067.09842161653139182.64564281653140672.3829011653154587.25496341653199373.6701311653226953.91169641653231963.08484821653232304.7106561653232554.38019971653232554.62967321653232677.8029061653256433.89535141653299432.4922731653306400.6730731653306472.8736611653393355.7553971653418909.73856261653565475.12498951653565552.10120181653644012.96268871653661508.7837781653661589.44294881653680694.40217831653757986.47126131653758797.5201131653758875.8009641653759516.43632131653815204.55978871653824578.46436481653842638.63208631653842909.72020081653892126.12672331653892420.81626921653892767.61418631653902922.38997861653910982.26115511653911098.50605081653912234.13429621653924819.25348691653941654.93242031653982713.13638191654003151.13523241654003174.6005821654264812.17732931654266724.5675461654268127.23252031654270160.76145861654301043.6971021654301072.0992181654301079.82639071654301896.66440531654334439.6818731654371822.44146631654428936.93347531654437095.0085341654508132.13094881654508335.43588731654520334.84838561654524063.79315451654525364.53509121654534180.4449181654953821.0468051654961938.94488381655036873.3743951655057492.40380381655057801.47854161655062300.50764231655129886.96682861655141011.99076751655166294.6540651655166301.61901331655216132.3208221655223573.8453581655225751.37171321655246178.10818171655296810.23211931655301828.3813591655368778.396751655379956.18857221655380431.36770651655472945.27423521655484574.08949831655507527.0224681655537627.60304521655558615.17976361655563633.72554421655569614.23738551655634387.11088251655645988.83602711655657438.1813961655713626.63884621655721946.37590861655722438.1599561655723778.13386921655725062.77537751655725269.6044051655728370.88312841655752608.5468571655809347.31652141655821992.57788371655831959.40542841655832768.65955691655843607.9513691655847927.774761655910557.06128741655930286.04162761655984718.1677731655984784.72391371656084284.91802841656091464.9171381656108569.03781821656144910.73668431656237464.9551931656238061.17135551656238140.40173581656238882.40057641656238919.37414531656239293.42675191656242411.12083081656246784.30946971656260465.50201821656261907.03887151656263294.21785121656264857.22691631656268330.1211061656268437.60271121656301508.07333091656330302.93307041656330502.12784811656356829.9017161656385974.7934371656387732.02068971656483270.8206721656596673.7715261656635713.02665231656667311.15519761656667757.71407681656693761.8080651656705954.52436731656753744.37684461656763015.42648551656767146.81630661656841740.58635851656845713.36385511656846091.09794041656928094.63535641656948795.61005121656950066.0852351656964699.3929741657002316.55603961657010505.2748941657013544.80798841657015413.77136021657025003.4560941657038750.15809251657039417.24476391657043605.9258891657044407.42733961657051733.92174651657088120.63696361657104460.7448131657108288.86261561657121273.51174641657125154.85219221657140234.29372531657192424.43024661657197439.27889011657198301.67318251657201269.89470821657211198.80976871657271744.8218321657281300.4610831657374150.77523261657476775.62064481657481255.09343081657482599.06296831657497382.093291657539578.63450741657539781.1762681657558369.09502081657799038.87918231657799116.29259251657859471.084171657859516.10439011657962545.19483261657962787.59437661657967228.37440181657974597.18307661658049488.68201351658060577.18078541658064128.90686661658064263.8123631658069341.93958781658077026.34067771658078706.88455961658079600.63347741658081221.23908161658081285.91025161658085023.94248371658128817.5476131658136214.41560361658152834.47753431658166801.45076581658196924.6985691658234310.5858651658247533.30726621658296567.73139791658300378.65953061658303756.00198131658305698.39711261658382887.724681658383856.37543231658384121.3366351658390189.93443231658392025.1128251658412468.54568721658412797.65880041658438616.3758981658471521.65448121658472954.71186351658474751.5916821658474776.28065591658486284.59899661658486319.77809761658486383.9840391658490944.0040541658491220.88122321658494083.36627481658572911.5845361658577899.82729891658587022.79079221658591743.12070351658599637.18309741658603076.26439361658607840.53604631658608068.95690061658632322.36042521658663105.38651751658665771.35931851658667025.4637931658668018.09719041658669787.80982111658691321.1552461658692788.99276071658694425.02418141658719342.8613571658719344.900981658736094.62209821658744041.35345391658748345.99290781658749553.6679561658749620.34319641658764308.11469481658819039.0050441658824812.17245531658842921.14167791658862950.05908541658866951.6806491658867535.5773941658877498.26109531658877516.4155781658896342.94982431658896469.47555181658939089.75173661658940109.93389181658940199.76201341658944478.1677931658949832.38372451658975346.1412181658988816.19879631659008462.91326981659008575.73063641659012991.48196961659082566.04576251659111734.59138541659191868.2587021659192069.37377141659276991.17983721659278060.19959641659278557.4639051659279665.7058661659291621.614421659297216.92868761659331866.86229541659354189.35440971659354306.42374371659361326.9548821659464619.7928551659533068.37608721659559211.29670211659640679.56849721659692194.4455371659694826.56033351659699618.14680341659706153.69699481659708277.1410231659712534.48231081659741263.06693121659801505.29996941659822814.49301031659876301.1942491659882331.1132811659948541.77521731659959539.67876551659961340.3494451660071326.58486721660071391.39187571660110756.72247671660111037.47087141660122573.1154931660124216.86798521660147596.96434471660147634.35918711660178048.02106481660193586.86268121660218841.1327471660218989.31172231660442692.89373641660638035.43595891660824432.1691353 jko5oo1a980zc1d5ojiredhvqyv3ym5 539027 539013 2022-08-18T13:28:04Z Pywikibot-test 23124 wikitext text/x-wiki 1433650768.531433650922.331433651729.111433670166.311433675620.231434189298.391434190713.181434466819.82218051434544025.22135851434556196.60172341435173199.59346151435175699.59451271435227022.74044541435528701.75742911435530425.45590261435603389.080081437231694.72999551437247968.58793571437249806.3797741437298795.05681351437299498.54262071437301447.66920381437302227.7655441437303194.27986031437304101.72397661437310188.7074311437310950.0167771437312161.48824671437313010.34581731437313729.64502261437508795.02368621437509778.81783961437516631.40031891438256915.00195531438380338.75435851438383980.68647171438454064.30758831438457192.55998851438473558.4497151438475370.52737021438888563.82252121439048615.09364531439242551.86522051439284878.94054751439567068.00147221439645869.40761881439653355.34343361439892097.89366271439893989.92894151439937872.74017361439942911.25551271440071096.08264111440280762.25626281440718001.3262011440893319.42683861441040710.94389411441045094.56088661441367039.71286131441492543.00856571441494238.9647241443131370.03606581443212814.54482251454969098.621455143085.01455479939.331458010578.141646415352.6267931646418236.303551646419108.5554141646480673.1255151646486361.30947541646489252.55788281646497776.8472891646500951.96962931646503090.90285371646508464.6270851646557704.72482941646560644.88797711646568704.91856581646573733.00244281646576832.29534481646608917.34515641646654969.60378361646656319.4402261646656560.3573951646667875.37336181646669840.47606131646671473.95034121646674984.85814431646826562.7642131646830600.84946161646833174.90316631646834856.9354641646836733.8114731646848463.33862281646854361.6220061646921244.61630941646929392.52481341646933478.7709891646989628.14013271646993317.0693991647006535.8758381647010068.79893281647067797.81312181647070228.9538041647088146.43666861647129259.68616061647160403.20344641647161418.68453741647165213.34464841647182471.8682351647203984.8648061647204146.85476951647205856.08880071647229928.91692161647232863.2489111647244837.81863951647253131.60572861647253341.66492151647257374.36275241647261586.3715681647328114.68083791647328863.86457971647338369.03202411647345322.46875211647352352.98292641647362207.4400921647376689.68484851647377054.13237741647507817.3071141647520722.49061581647537658.91502861647537706.9929851647537724.92751151647537734.26552411647537734.81241751647537796.29433751647600884.78828861647603345.3407491647607378.26923131647607451.39406541647610335.08369161647619863.80975681647636713.9665881647684938.94061331647686327.2922681647690808.45028761647692744.59212851647732431.32598611647772952.28326751647781284.95441991647800669.47089581647849904.41088181647854192.1383851647860875.18231251647874602.63781051647879297.1874931647883065.4647961647924265.03851251647936769.8719151647951966.8961621648054226.68201351648059130.80152961648060298.43086981648069938.0877581648125306.6112961648143342.68760181648143650.04991751648188528.68711191648196925.6356741648203876.69900561648211369.0150091648230332.54617121648281987.22994761648283693.56241941648285224.71328661648286447.91258651648291573.67376261648291846.70330291648294060.07191231648296246.83941861648298801.97048331648305016.80210021648334644.85586831648379305.4112821648389448.81566381648405605.99447971648411133.04927181648412522.24783181648422117.89680721648446617.8572281648450264.77608821648454199.90044761648467787.75208971648467856.83117841648718888.7086471648726868.34113621648731002.50412491648735298.12991521649690895.66212321649691467.9696281649743553.52938491649755873.90303251649763327.8892521649774138.0124031649777526.37097861649778489.48823021649784790.27565621649860160.37698861649936556.74318031649955430.38933971650002447.5759611650006360.23943541650028605.97354981650039495.475341650041154.52726721650041204.27767731650043469.9524181650182871.47858071650185429.33433821650203503.7359421650214109.96521881650231719.77891951650281824.2778291650288925.13755371650295721.33825951650295882.12538961650300339.22233131650341815.28370641650380832.94509431650402613.69048711650518905.2356281650522569.2941071650530608.544891650531430.3989611650533914.10076831650542738.41888791650546175.9846881650568044.03694751650631023.97239781650632899.72227331650634830.3925491650637007.66384821650640862.5720661650689309.4054381650701657.98250581650703185.78357031650703771.5033541650735123.8095531650738484.06956341650776192.5568211650813066.8977991650848683.918771650861187.31198121650876020.82570171650880474.35385231650881868.45988561650883153.22984271650884549.92777321650886892.40727421650897830.36771461650949494.34935431650949911.4991251650954397.3235271650990281.23737171650995523.8559241651056953.48302131651058845.9713631651060365.91917781651065711.69361521651066891.44208121651068680.67229721651068949.30104371651068950.86070821651069866.21405341651077973.48218511651150569.5798041651150701.53431841651159306.89410231651163972.5414571651207135.13229251651314580.08892971651323639.1569731651335350.97018341651337464.3604491651343671.43810871651358144.34414821651358991.73634841651403991.80600071651408466.43860861651410629.6915031651424095.3323751651424215.430631651424217.16175171651424260.61668921651435316.36143421651477433.62521861651497967.4008731651570956.43188331651571040.13904711651574112.83837941651576178.2236351651585370.21917181651635290.6039241651635576.97641251651635655.45832421651635743.04751161651652652.44804481651673300.35671471651690999.9594171651756658.2204551651756671.9024541651780115.29231761651804123.6068891651841232.36630061651872084.1808571651914696.15967461651915185.17890741651924981.59495141651924985.67764931651947461.11864161652010451.4397451652013169.15126091652018291.04681441652101981.57916931652102144.73755261652205259.24803381652228263.38625721652241111.3187991652241991.0605551652246545.13976341652249133.80611011652345322.74670461652349556.01237941652349776.2655691652350144.64992761652353480.50348451652355561.35055181652355572.5898951652363359.53054261652423597.3604321652425345.54388571652434442.67079141652466898.8122741652467998.09214571652481119.60053971652515900.4313781652516491.8247921652517245.8858371652517458.95822791652523536.91254641652525004.91378931652529117.52156421652530351.27152131652549586.46723871652562013.24319481652614409.32601761652616114.78897861652640389.54013231652701163.91744661652701218.71869951652704583.73101121652736636.34235531652809358.14918331652809500.2787851652885818.32253531652895677.120911652946764.21459771652958152.14900661653025900.08983161653065810.43916341653077663.07969381653095577.50154731653096778.42144161653097676.23765561653097888.80603721653116153.01087381653117420.85944841653118936.11491161653125313.7796781653126335.42993711653134067.09842161653139182.64564281653140672.3829011653154587.25496341653199373.6701311653226953.91169641653231963.08484821653232304.7106561653232554.38019971653232554.62967321653232677.8029061653256433.89535141653299432.4922731653306400.6730731653306472.8736611653393355.7553971653418909.73856261653565475.12498951653565552.10120181653644012.96268871653661508.7837781653661589.44294881653680694.40217831653757986.47126131653758797.5201131653758875.8009641653759516.43632131653815204.55978871653824578.46436481653842638.63208631653842909.72020081653892126.12672331653892420.81626921653892767.61418631653902922.38997861653910982.26115511653911098.50605081653912234.13429621653924819.25348691653941654.93242031653982713.13638191654003151.13523241654003174.6005821654264812.17732931654266724.5675461654268127.23252031654270160.76145861654301043.6971021654301072.0992181654301079.82639071654301896.66440531654334439.6818731654371822.44146631654428936.93347531654437095.0085341654508132.13094881654508335.43588731654520334.84838561654524063.79315451654525364.53509121654534180.4449181654953821.0468051654961938.94488381655036873.3743951655057492.40380381655057801.47854161655062300.50764231655129886.96682861655141011.99076751655166294.6540651655166301.61901331655216132.3208221655223573.8453581655225751.37171321655246178.10818171655296810.23211931655301828.3813591655368778.396751655379956.18857221655380431.36770651655472945.27423521655484574.08949831655507527.0224681655537627.60304521655558615.17976361655563633.72554421655569614.23738551655634387.11088251655645988.83602711655657438.1813961655713626.63884621655721946.37590861655722438.1599561655723778.13386921655725062.77537751655725269.6044051655728370.88312841655752608.5468571655809347.31652141655821992.57788371655831959.40542841655832768.65955691655843607.9513691655847927.774761655910557.06128741655930286.04162761655984718.1677731655984784.72391371656084284.91802841656091464.9171381656108569.03781821656144910.73668431656237464.9551931656238061.17135551656238140.40173581656238882.40057641656238919.37414531656239293.42675191656242411.12083081656246784.30946971656260465.50201821656261907.03887151656263294.21785121656264857.22691631656268330.1211061656268437.60271121656301508.07333091656330302.93307041656330502.12784811656356829.9017161656385974.7934371656387732.02068971656483270.8206721656596673.7715261656635713.02665231656667311.15519761656667757.71407681656693761.8080651656705954.52436731656753744.37684461656763015.42648551656767146.81630661656841740.58635851656845713.36385511656846091.09794041656928094.63535641656948795.61005121656950066.0852351656964699.3929741657002316.55603961657010505.2748941657013544.80798841657015413.77136021657025003.4560941657038750.15809251657039417.24476391657043605.9258891657044407.42733961657051733.92174651657088120.63696361657104460.7448131657108288.86261561657121273.51174641657125154.85219221657140234.29372531657192424.43024661657197439.27889011657198301.67318251657201269.89470821657211198.80976871657271744.8218321657281300.4610831657374150.77523261657476775.62064481657481255.09343081657482599.06296831657497382.093291657539578.63450741657539781.1762681657558369.09502081657799038.87918231657799116.29259251657859471.084171657859516.10439011657962545.19483261657962787.59437661657967228.37440181657974597.18307661658049488.68201351658060577.18078541658064128.90686661658064263.8123631658069341.93958781658077026.34067771658078706.88455961658079600.63347741658081221.23908161658081285.91025161658085023.94248371658128817.5476131658136214.41560361658152834.47753431658166801.45076581658196924.6985691658234310.5858651658247533.30726621658296567.73139791658300378.65953061658303756.00198131658305698.39711261658382887.724681658383856.37543231658384121.3366351658390189.93443231658392025.1128251658412468.54568721658412797.65880041658438616.3758981658471521.65448121658472954.71186351658474751.5916821658474776.28065591658486284.59899661658486319.77809761658486383.9840391658490944.0040541658491220.88122321658494083.36627481658572911.5845361658577899.82729891658587022.79079221658591743.12070351658599637.18309741658603076.26439361658607840.53604631658608068.95690061658632322.36042521658663105.38651751658665771.35931851658667025.4637931658668018.09719041658669787.80982111658691321.1552461658692788.99276071658694425.02418141658719342.8613571658719344.900981658736094.62209821658744041.35345391658748345.99290781658749553.6679561658749620.34319641658764308.11469481658819039.0050441658824812.17245531658842921.14167791658862950.05908541658866951.6806491658867535.5773941658877498.26109531658877516.4155781658896342.94982431658896469.47555181658939089.75173661658940109.93389181658940199.76201341658944478.1677931658949832.38372451658975346.1412181658988816.19879631659008462.91326981659008575.73063641659012991.48196961659082566.04576251659111734.59138541659191868.2587021659192069.37377141659276991.17983721659278060.19959641659278557.4639051659279665.7058661659291621.614421659297216.92868761659331866.86229541659354189.35440971659354306.42374371659361326.9548821659464619.7928551659533068.37608721659559211.29670211659640679.56849721659692194.4455371659694826.56033351659699618.14680341659706153.69699481659708277.1410231659712534.48231081659741263.06693121659801505.29996941659822814.49301031659876301.1942491659882331.1132811659948541.77521731659959539.67876551659961340.3494451660071326.58486721660071391.39187571660110756.72247671660111037.47087141660122573.1154931660124216.86798521660147596.96434471660147634.35918711660178048.02106481660193586.86268121660218841.1327471660218989.31172231660442692.89373641660638035.43595891660824432.16913531660829274.6758416 91479p28kbxalj3gsi6ki2s64r8j7uh 539036 539027 2022-08-18T13:36:56Z Pywikibot-test 23124 wikitext text/x-wiki 1433650768.531433650922.331433651729.111433670166.311433675620.231434189298.391434190713.181434466819.82218051434544025.22135851434556196.60172341435173199.59346151435175699.59451271435227022.74044541435528701.75742911435530425.45590261435603389.080081437231694.72999551437247968.58793571437249806.3797741437298795.05681351437299498.54262071437301447.66920381437302227.7655441437303194.27986031437304101.72397661437310188.7074311437310950.0167771437312161.48824671437313010.34581731437313729.64502261437508795.02368621437509778.81783961437516631.40031891438256915.00195531438380338.75435851438383980.68647171438454064.30758831438457192.55998851438473558.4497151438475370.52737021438888563.82252121439048615.09364531439242551.86522051439284878.94054751439567068.00147221439645869.40761881439653355.34343361439892097.89366271439893989.92894151439937872.74017361439942911.25551271440071096.08264111440280762.25626281440718001.3262011440893319.42683861441040710.94389411441045094.56088661441367039.71286131441492543.00856571441494238.9647241443131370.03606581443212814.54482251454969098.621455143085.01455479939.331458010578.141646415352.6267931646418236.303551646419108.5554141646480673.1255151646486361.30947541646489252.55788281646497776.8472891646500951.96962931646503090.90285371646508464.6270851646557704.72482941646560644.88797711646568704.91856581646573733.00244281646576832.29534481646608917.34515641646654969.60378361646656319.4402261646656560.3573951646667875.37336181646669840.47606131646671473.95034121646674984.85814431646826562.7642131646830600.84946161646833174.90316631646834856.9354641646836733.8114731646848463.33862281646854361.6220061646921244.61630941646929392.52481341646933478.7709891646989628.14013271646993317.0693991647006535.8758381647010068.79893281647067797.81312181647070228.9538041647088146.43666861647129259.68616061647160403.20344641647161418.68453741647165213.34464841647182471.8682351647203984.8648061647204146.85476951647205856.08880071647229928.91692161647232863.2489111647244837.81863951647253131.60572861647253341.66492151647257374.36275241647261586.3715681647328114.68083791647328863.86457971647338369.03202411647345322.46875211647352352.98292641647362207.4400921647376689.68484851647377054.13237741647507817.3071141647520722.49061581647537658.91502861647537706.9929851647537724.92751151647537734.26552411647537734.81241751647537796.29433751647600884.78828861647603345.3407491647607378.26923131647607451.39406541647610335.08369161647619863.80975681647636713.9665881647684938.94061331647686327.2922681647690808.45028761647692744.59212851647732431.32598611647772952.28326751647781284.95441991647800669.47089581647849904.41088181647854192.1383851647860875.18231251647874602.63781051647879297.1874931647883065.4647961647924265.03851251647936769.8719151647951966.8961621648054226.68201351648059130.80152961648060298.43086981648069938.0877581648125306.6112961648143342.68760181648143650.04991751648188528.68711191648196925.6356741648203876.69900561648211369.0150091648230332.54617121648281987.22994761648283693.56241941648285224.71328661648286447.91258651648291573.67376261648291846.70330291648294060.07191231648296246.83941861648298801.97048331648305016.80210021648334644.85586831648379305.4112821648389448.81566381648405605.99447971648411133.04927181648412522.24783181648422117.89680721648446617.8572281648450264.77608821648454199.90044761648467787.75208971648467856.83117841648718888.7086471648726868.34113621648731002.50412491648735298.12991521649690895.66212321649691467.9696281649743553.52938491649755873.90303251649763327.8892521649774138.0124031649777526.37097861649778489.48823021649784790.27565621649860160.37698861649936556.74318031649955430.38933971650002447.5759611650006360.23943541650028605.97354981650039495.475341650041154.52726721650041204.27767731650043469.9524181650182871.47858071650185429.33433821650203503.7359421650214109.96521881650231719.77891951650281824.2778291650288925.13755371650295721.33825951650295882.12538961650300339.22233131650341815.28370641650380832.94509431650402613.69048711650518905.2356281650522569.2941071650530608.544891650531430.3989611650533914.10076831650542738.41888791650546175.9846881650568044.03694751650631023.97239781650632899.72227331650634830.3925491650637007.66384821650640862.5720661650689309.4054381650701657.98250581650703185.78357031650703771.5033541650735123.8095531650738484.06956341650776192.5568211650813066.8977991650848683.918771650861187.31198121650876020.82570171650880474.35385231650881868.45988561650883153.22984271650884549.92777321650886892.40727421650897830.36771461650949494.34935431650949911.4991251650954397.3235271650990281.23737171650995523.8559241651056953.48302131651058845.9713631651060365.91917781651065711.69361521651066891.44208121651068680.67229721651068949.30104371651068950.86070821651069866.21405341651077973.48218511651150569.5798041651150701.53431841651159306.89410231651163972.5414571651207135.13229251651314580.08892971651323639.1569731651335350.97018341651337464.3604491651343671.43810871651358144.34414821651358991.73634841651403991.80600071651408466.43860861651410629.6915031651424095.3323751651424215.430631651424217.16175171651424260.61668921651435316.36143421651477433.62521861651497967.4008731651570956.43188331651571040.13904711651574112.83837941651576178.2236351651585370.21917181651635290.6039241651635576.97641251651635655.45832421651635743.04751161651652652.44804481651673300.35671471651690999.9594171651756658.2204551651756671.9024541651780115.29231761651804123.6068891651841232.36630061651872084.1808571651914696.15967461651915185.17890741651924981.59495141651924985.67764931651947461.11864161652010451.4397451652013169.15126091652018291.04681441652101981.57916931652102144.73755261652205259.24803381652228263.38625721652241111.3187991652241991.0605551652246545.13976341652249133.80611011652345322.74670461652349556.01237941652349776.2655691652350144.64992761652353480.50348451652355561.35055181652355572.5898951652363359.53054261652423597.3604321652425345.54388571652434442.67079141652466898.8122741652467998.09214571652481119.60053971652515900.4313781652516491.8247921652517245.8858371652517458.95822791652523536.91254641652525004.91378931652529117.52156421652530351.27152131652549586.46723871652562013.24319481652614409.32601761652616114.78897861652640389.54013231652701163.91744661652701218.71869951652704583.73101121652736636.34235531652809358.14918331652809500.2787851652885818.32253531652895677.120911652946764.21459771652958152.14900661653025900.08983161653065810.43916341653077663.07969381653095577.50154731653096778.42144161653097676.23765561653097888.80603721653116153.01087381653117420.85944841653118936.11491161653125313.7796781653126335.42993711653134067.09842161653139182.64564281653140672.3829011653154587.25496341653199373.6701311653226953.91169641653231963.08484821653232304.7106561653232554.38019971653232554.62967321653232677.8029061653256433.89535141653299432.4922731653306400.6730731653306472.8736611653393355.7553971653418909.73856261653565475.12498951653565552.10120181653644012.96268871653661508.7837781653661589.44294881653680694.40217831653757986.47126131653758797.5201131653758875.8009641653759516.43632131653815204.55978871653824578.46436481653842638.63208631653842909.72020081653892126.12672331653892420.81626921653892767.61418631653902922.38997861653910982.26115511653911098.50605081653912234.13429621653924819.25348691653941654.93242031653982713.13638191654003151.13523241654003174.6005821654264812.17732931654266724.5675461654268127.23252031654270160.76145861654301043.6971021654301072.0992181654301079.82639071654301896.66440531654334439.6818731654371822.44146631654428936.93347531654437095.0085341654508132.13094881654508335.43588731654520334.84838561654524063.79315451654525364.53509121654534180.4449181654953821.0468051654961938.94488381655036873.3743951655057492.40380381655057801.47854161655062300.50764231655129886.96682861655141011.99076751655166294.6540651655166301.61901331655216132.3208221655223573.8453581655225751.37171321655246178.10818171655296810.23211931655301828.3813591655368778.396751655379956.18857221655380431.36770651655472945.27423521655484574.08949831655507527.0224681655537627.60304521655558615.17976361655563633.72554421655569614.23738551655634387.11088251655645988.83602711655657438.1813961655713626.63884621655721946.37590861655722438.1599561655723778.13386921655725062.77537751655725269.6044051655728370.88312841655752608.5468571655809347.31652141655821992.57788371655831959.40542841655832768.65955691655843607.9513691655847927.774761655910557.06128741655930286.04162761655984718.1677731655984784.72391371656084284.91802841656091464.9171381656108569.03781821656144910.73668431656237464.9551931656238061.17135551656238140.40173581656238882.40057641656238919.37414531656239293.42675191656242411.12083081656246784.30946971656260465.50201821656261907.03887151656263294.21785121656264857.22691631656268330.1211061656268437.60271121656301508.07333091656330302.93307041656330502.12784811656356829.9017161656385974.7934371656387732.02068971656483270.8206721656596673.7715261656635713.02665231656667311.15519761656667757.71407681656693761.8080651656705954.52436731656753744.37684461656763015.42648551656767146.81630661656841740.58635851656845713.36385511656846091.09794041656928094.63535641656948795.61005121656950066.0852351656964699.3929741657002316.55603961657010505.2748941657013544.80798841657015413.77136021657025003.4560941657038750.15809251657039417.24476391657043605.9258891657044407.42733961657051733.92174651657088120.63696361657104460.7448131657108288.86261561657121273.51174641657125154.85219221657140234.29372531657192424.43024661657197439.27889011657198301.67318251657201269.89470821657211198.80976871657271744.8218321657281300.4610831657374150.77523261657476775.62064481657481255.09343081657482599.06296831657497382.093291657539578.63450741657539781.1762681657558369.09502081657799038.87918231657799116.29259251657859471.084171657859516.10439011657962545.19483261657962787.59437661657967228.37440181657974597.18307661658049488.68201351658060577.18078541658064128.90686661658064263.8123631658069341.93958781658077026.34067771658078706.88455961658079600.63347741658081221.23908161658081285.91025161658085023.94248371658128817.5476131658136214.41560361658152834.47753431658166801.45076581658196924.6985691658234310.5858651658247533.30726621658296567.73139791658300378.65953061658303756.00198131658305698.39711261658382887.724681658383856.37543231658384121.3366351658390189.93443231658392025.1128251658412468.54568721658412797.65880041658438616.3758981658471521.65448121658472954.71186351658474751.5916821658474776.28065591658486284.59899661658486319.77809761658486383.9840391658490944.0040541658491220.88122321658494083.36627481658572911.5845361658577899.82729891658587022.79079221658591743.12070351658599637.18309741658603076.26439361658607840.53604631658608068.95690061658632322.36042521658663105.38651751658665771.35931851658667025.4637931658668018.09719041658669787.80982111658691321.1552461658692788.99276071658694425.02418141658719342.8613571658719344.900981658736094.62209821658744041.35345391658748345.99290781658749553.6679561658749620.34319641658764308.11469481658819039.0050441658824812.17245531658842921.14167791658862950.05908541658866951.6806491658867535.5773941658877498.26109531658877516.4155781658896342.94982431658896469.47555181658939089.75173661658940109.93389181658940199.76201341658944478.1677931658949832.38372451658975346.1412181658988816.19879631659008462.91326981659008575.73063641659012991.48196961659082566.04576251659111734.59138541659191868.2587021659192069.37377141659276991.17983721659278060.19959641659278557.4639051659279665.7058661659291621.614421659297216.92868761659331866.86229541659354189.35440971659354306.42374371659361326.9548821659464619.7928551659533068.37608721659559211.29670211659640679.56849721659692194.4455371659694826.56033351659699618.14680341659706153.69699481659708277.1410231659712534.48231081659741263.06693121659801505.29996941659822814.49301031659876301.1942491659882331.1132811659948541.77521731659959539.67876551659961340.3494451660071326.58486721660071391.39187571660110756.72247671660111037.47087141660122573.1154931660124216.86798521660147596.96434471660147634.35918711660178048.02106481660193586.86268121660218841.1327471660218989.31172231660442692.89373641660638035.43595891660824432.16913531660829274.67584161660829806.1389484 3czsi0yh1ssdk4mp1plmjvb6w40fm7r User:Unicodesnowman/DeleteMark 2 82252 539011 532907 2022-08-18T12:07:05Z Pywikibot-test 23124 pywikibot unit test. Do NOT actually delete. wikitext text/x-wiki {{delete|1=pywikibot unit test. Do NOT actually delete.}} foo cymfz8u3wtlps4m6nlzq7086mgmr0cz 539012 539011 2022-08-18T12:07:10Z Pywikibot-test 23124 unit test wikitext text/x-wiki foo 1e6gpc3ehk0mu2jqu8cg42g009s796b 539025 539012 2022-08-18T13:27:47Z Pywikibot-test 23124 pywikibot unit test. Do NOT actually delete. wikitext text/x-wiki {{delete|1=pywikibot unit test. Do NOT actually delete.}} foo cymfz8u3wtlps4m6nlzq7086mgmr0cz 539026 539025 2022-08-18T13:27:52Z Pywikibot-test 23124 unit test wikitext text/x-wiki foo 1e6gpc3ehk0mu2jqu8cg42g009s796b 539034 539026 2022-08-18T13:36:39Z Pywikibot-test 23124 pywikibot unit test. Do NOT actually delete. wikitext text/x-wiki {{delete|1=pywikibot unit test. Do NOT actually delete.}} foo cymfz8u3wtlps4m6nlzq7086mgmr0cz 539035 539034 2022-08-18T13:36:43Z Pywikibot-test 23124 unit test wikitext text/x-wiki foo 1e6gpc3ehk0mu2jqu8cg42g009s796b Wikipedia:Sandbox 4 107092 539130 538969 2022-08-18T21:00:35Z Cewbot 33876 Clear the sandbox. If you want to keep it longer, please test it in [[Special:MyPage/Sandbox|personal sandbox]], you can also check the revision history of the sandbox. wikitext text/x-wiki <noinclude>{{Sandbox}}</noinclude> == Please start your testing below this line == 9v37rcaxoiwjar8n3q9n7dcsjdvcyin 539146 539130 2022-08-18T23:13:23Z 80.195.251.45 wikitext text/x-wiki <noinclude>{{Sandbox}}</noinclude> == Please start your testing below this line ==Hello d5y28cgq0f8l6g4nv365fenqozw6uie User:Hamish/Twinkle/modules/friendlytag.js 2 112079 539151 532407 2022-08-19T00:01:46Z Hamish 40220 Initialise to 1363112af8eb2f8c144e0cdcbd391a47f36347f9 at xi-plus/master javascript text/javascript // <nowiki> (function($) { /* **************************************** *** friendlytag.js: Tag module **************************************** * Mode of invocation: Tab ("Tag") * Active on: Existing articles and drafts; file pages with a corresponding file * which is local (not on Commons); all redirects */ Twinkle.tag = function friendlytag() { // redirect tagging if (Morebits.isPageRedirect()) { Twinkle.tag.mode = wgULS('重定向', '重新導向'); Twinkle.tag.modeEn = 'redirect'; Twinkle.addPortletLink(Twinkle.tag.callback, wgULS('标记', '標記'), 'friendly-tag', wgULS('标记重定向', '標記重新導向')); // file tagging } else if (mw.config.get('wgNamespaceNumber') === 6 && !document.getElementById('mw-sharedupload') && document.getElementById('mw-imagepage-section-filehistory')) { Twinkle.tag.mode = wgULS('文件', '檔案'); Twinkle.tag.modeEn = 'file'; Twinkle.addPortletLink(Twinkle.tag.callback, wgULS('标记', '標記'), 'friendly-tag', wgULS('标记文件', '標記檔案')); // article/draft tagging } else if (([0, 118].indexOf(mw.config.get('wgNamespaceNumber')) !== -1 && mw.config.get('wgCurRevisionId')) || (Morebits.pageNameNorm === Twinkle.getPref('sandboxPage'))) { Twinkle.tag.mode = wgULS('条目', '條目'); Twinkle.tag.modeEn = 'article'; // Can't remove tags when not viewing current version Twinkle.tag.canRemove = (mw.config.get('wgCurRevisionId') === mw.config.get('wgRevisionId')) && // Disabled on latest diff because the diff slider could be used to slide // away from the latest diff without causing the script to reload !mw.config.get('wgDiffNewId'); Twinkle.addPortletLink(Twinkle.tag.callback, wgULS('标记', '標記'), 'friendly-tag', wgULS('标记条目', '標記條目')); } }; Twinkle.tag.checkedTags = []; Twinkle.tag.callback = function friendlytagCallback() { var Window = new Morebits.simpleWindow(630, Twinkle.tag.modeEn === 'article' ? 500 : 400); Window.setScriptName('Twinkle'); Window.addFooterLink(wgULS('标记设置', '標記設定'), 'WP:TW/PREF#tag'); Window.addFooterLink(wgULS('Twinkle帮助', 'Twinkle說明'), 'WP:TW/DOC#tag'); var form = new Morebits.quickForm(Twinkle.tag.callback.evaluate); form.append({ type: 'input', label: wgULS('筛选标记列表:', '篩選標記列表:'), name: 'quickfilter', size: '30', event: function twinkletagquickfilter() { // flush the DOM of all existing underline spans $allCheckboxDivs.find('.search-hit').each(function(i, e) { var label_element = e.parentElement; // This would convert <label>Hello <span class=search-hit>wo</span>rld</label> // to <label>Hello world</label> label_element.innerHTML = label_element.textContent; }); if (this.value) { $allCheckboxDivs.hide(); $allHeaders.hide(); var searchString = this.value; var searchRegex = new RegExp(mw.util.escapeRegExp(searchString), 'i'); $allCheckboxDivs.find('label').each(function () { var label_text = this.textContent; var searchHit = searchRegex.exec(label_text); if (searchHit) { var range = document.createRange(); var textnode = this.childNodes[0]; range.selectNodeContents(textnode); range.setStart(textnode, searchHit.index); range.setEnd(textnode, searchHit.index + searchString.length); var underline_span = $('<span>').addClass('search-hit').css('text-decoration', 'underline')[0]; range.surroundContents(underline_span); this.parentElement.style.display = 'block'; // show } }); } else { $allCheckboxDivs.show(); $allHeaders.show(); } } }); switch (Twinkle.tag.modeEn) { case 'article': Window.setTitle(wgULS('条目维护标记', '條目維護標記')); // Build sorting and lookup object flatObject, which is always // needed but also used to generate the alphabetical list // Would be infinitely better with Object.values, but, alas, IE 11 Twinkle.tag.article.flatObject = {}; Twinkle.tag.article.tagList.forEach(function(group) { group.value.forEach(function(subgroup) { if (subgroup.value) { subgroup.value.forEach(function(item) { Twinkle.tag.article.flatObject[item.tag] = { description: item.description, excludeMI: !!item.excludeMI }; }); } else { Twinkle.tag.article.flatObject[subgroup.tag] = { description: subgroup.description, excludeMI: !!subgroup.excludeMI }; } }); }); form.append({ type: 'select', name: 'sortorder', label: wgULS('查看列表:', '檢視列表:'), tooltip: wgULS('您可以在Twinkle参数设置(WP:TWPREFS)中更改此项。', '您可以在Twinkle偏好設定(WP:TWPREFS)中更改此項。'), event: Twinkle.tag.updateSortOrder, list: [ { type: 'option', value: 'cat', label: wgULS('按类型', '按類別'), selected: Twinkle.getPref('tagArticleSortOrder') === 'cat' }, { type: 'option', value: 'alpha', label: '按字母', selected: Twinkle.getPref('tagArticleSortOrder') === 'alpha' } ] }); if (!Twinkle.tag.canRemove) { var divElement = document.createElement('div'); divElement.innerHTML = wgULS('要移除现有维护标记,请从当前条目版本中打开“标记”菜单', '要移除現有維護標記,請從目前條目版本中打開「標記」選單'); form.append({ type: 'div', name: 'untagnotice', label: divElement }); } form.append({ type: 'div', id: 'tagWorkArea', className: 'morebits-scrollbox', style: 'max-height: 28em' }); form.append({ type: 'checkbox', list: [ { label: wgULS('如可能,合并入{{multiple issues}}', '如可能,合併入{{multiple issues}}'), value: 'group', name: 'group', tooltip: wgULS('如果加入{{multiple issues}}支持的三个以上的模板,所有支持的模板都会被合并入{{multiple issues}}模板中。', '如果加入{{multiple issues}}支援的三個以上的模板,所有支援的模板都會被合併入{{multiple issues}}模板中。'), checked: Twinkle.getPref('groupByDefault') } ] }); form.append({ type: 'input', label: '理由:', name: 'reason', tooltip: wgULS('附加于编辑摘要的可选理由,例如指出条目内容的哪些部分有问题或移除模板的理由,但如果理由很长则应该发表在讨论页。', '附加於編輯摘要的可選理由,例如指出條目內容的哪些部分有問題或移除模板的理由,但如果理由很長則應該發表在討論頁。'), size: '80' }); break; case 'file': Window.setTitle(wgULS('文件维护标记', '檔案維護標記')); Twinkle.tag.fileList.forEach(function(group) { if (group.buildFilename) { group.value.forEach(function(el) { el.subgroup = { type: 'input', label: wgULS('替换的文件:', '替換的檔案:'), tooltip: wgULS('输入替换此文件的文件名称(必填)', '輸入替換此檔案的檔案名稱(必填)'), name: el.value.replace(/ /g, '_') + 'File' }; }); } form.append({ type: 'header', label: group.key }); form.append({ type: 'checkbox', name: 'tags', list: group.value }); }); if (Twinkle.getPref('customFileTagList').length) { form.append({ type: 'header', label: wgULS('自定义模板', '自訂模板') }); form.append({ type: 'checkbox', name: 'tags', list: Twinkle.getPref('customFileTagList') }); } break; case 'redirect': Window.setTitle(wgULS('重定向标记', '重新導向標記')); var i = 1; Twinkle.tag.redirectList.forEach(function(group) { form.append({ type: 'header', id: 'tagHeader' + i, label: group.key }); form.append({ type: 'checkbox', name: 'tags', list: group.value.map(function (item) { return { value: item.tag, label: '{{' + item.tag + '}}:' + item.description, subgroup: item.subgroup }; }) }); }); if (Twinkle.getPref('customRedirectTagList').length) { form.append({ type: 'header', label: wgULS('自定义模板', '自訂模板') }); form.append({ type: 'checkbox', name: 'tags', list: Twinkle.getPref('customRedirectTagList') }); } break; default: alert('Twinkle.tag:未知模式 ' + Twinkle.tag.mode); break; } if (document.getElementsByClassName('patrollink').length) { form.append({ type: 'checkbox', list: [ { label: wgULS('标记页面为已巡查', '標記頁面為已巡查'), value: 'patrol', name: 'patrol', checked: Twinkle.getPref('markTaggedPagesAsPatrolled') } ] }); } form.append({ type: 'submit', className: 'tw-tag-submit' }); var result = form.render(); Window.setContent(result); Window.display(); // for quick filter: $allCheckboxDivs = $(result).find('[name$=tags]').parent(); $allHeaders = $(result).find('h5'); result.quickfilter.focus(); // place cursor in the quick filter field as soon as window is opened result.quickfilter.autocomplete = 'off'; // disable browser suggestions result.quickfilter.addEventListener('keypress', function(e) { if (e.keyCode === 13) { // prevent enter key from accidentally submitting the form e.preventDefault(); return false; } }); if (Twinkle.tag.modeEn === 'article') { Twinkle.tag.alreadyPresentTags = []; if (Twinkle.tag.canRemove) { // Look for existing maintenance tags in the lead section and put them in array // All tags are HTML table elements that are direct children of .mw-parser-output, // except when they are within {{multiple issues}} $('.mw-parser-output').children().each(function parsehtml(i, e) { // break out on encountering the first heading, which means we are no // longer in the lead section if (e.tagName === 'H2') { return false; } // The ability to remove tags depends on the template's {{ambox}} |name= // parameter bearing the template's correct name (preferably) or a name that at // least redirects to the actual name // All tags have their first class name as "box-" + template name if (e.className.indexOf('box-') === 0) { if (e.classList[0] === 'box-问题条目') { $(e).find('.ambox').each(function(idx, e) { if (e.classList[0].indexOf('box-') === 0) { var tag = e.classList[0].slice('box-'.length).replace(/_/g, ' '); Twinkle.tag.alreadyPresentTags.push(tag); } }); return true; // continue } var tag = e.classList[0].slice('box-'.length).replace(/_/g, ' '); Twinkle.tag.alreadyPresentTags.push(tag); } }); // {{Uncategorized}} and {{Improve categories}} are usually placed at the end if ($('.box-Uncategorized').length) { Twinkle.tag.alreadyPresentTags.push('Uncategorized'); } if ($('.box-Improve_categories').length) { Twinkle.tag.alreadyPresentTags.push('Improve categories'); } } // Add status text node after Submit button var statusNode = document.createElement('small'); statusNode.id = 'tw-tag-status'; Twinkle.tag.status = { // initial state; defined like this because these need to be available for reference // in the click event handler numAdded: 0, numRemoved: 0 }; $('button.tw-tag-submit').after(statusNode); // fake a change event on the sort dropdown, to initialize the tag list var evt = document.createEvent('Event'); evt.initEvent('change', true, true); result.sortorder.dispatchEvent(evt); } else { // Redirects and files: Add a link to each template's description page Morebits.quickForm.getElements(result, 'tags').forEach(generateLinks); } }; // $allCheckboxDivs and $allHeaders are defined globally, rather than in the // quickfilter event function, to avoid having to recompute them on every keydown var $allCheckboxDivs, $allHeaders; Twinkle.tag.updateSortOrder = function(e) { var form = e.target.form; var sortorder = e.target.value; Twinkle.tag.checkedTags = form.getChecked('tags'); var container = new Morebits.quickForm.element({ type: 'fragment' }); // function to generate a checkbox, with appropriate subgroup if needed var makeCheckbox = function(tag, description) { var checkbox = { value: tag, label: '{{' + tag + '}}: ' + description }; if (Twinkle.tag.checkedTags.indexOf(tag) !== -1) { checkbox.checked = true; } switch (tag) { case 'Expand language': checkbox.subgroup = [ { name: 'expandLanguage', type: 'input', label: wgULS('外语版本语言代码(必填):', '外語版本語言代碼(必填):') }, { type: 'checkbox', list: [ { name: 'highQualityArticle', label: wgULS('高品质条目', '高品質條目') } ] }, { name: 'expandLanguage2', type: 'input', label: wgULS('外语版本语言代码:', '外語版本語言代碼:') }, { type: 'checkbox', list: [ { name: 'highQualityArticle2', label: wgULS('高品质条目', '高品質條目') } ] }, { name: 'expandLanguage3', type: 'input', label: wgULS('外语版本语言代码:', '外語版本語言代碼:') }, { type: 'checkbox', list: [ { name: 'highQualityArticle3', label: wgULS('高品质条目', '高品質條目') } ] } ]; break; case 'Expert needed': checkbox.subgroup = [ { name: 'expert', type: 'input', label: wgULS('哪个领域的专家(必填):', '哪個領域的專家(必填):'), tooltip: wgULS('必填,可参考 Category:需要专业人士关注的页面 使用现存的分类。', '必填,可參考 Category:需要專業人士關注的頁面 使用現存的分類。') }, { name: 'expert2', type: 'input', label: wgULS('哪个领域的专家:', '哪個領域的專家:'), tooltip: wgULS('可选,可参考 Category:需要专业人士关注的页面 使用现存的分类。', '可選,可參考 Category:需要專業人士關注的頁面 使用現存的分類。') }, { name: 'expert3', type: 'input', label: wgULS('哪个领域的专家:', '哪個領域的專家:'), tooltip: wgULS('可选,可参考 Category:需要专业人士关注的页面 使用现存的分类。', '可選,可參考 Category:需要專業人士關注的頁面 使用現存的分類。') } ]; break; case 'Merge': case 'Merge from': case 'Merge to': var otherTagName = 'Merge'; switch (tag) { case 'Merge from': otherTagName = 'Merge to'; break; case 'Merge to': otherTagName = 'Merge from'; break; // no default } checkbox.subgroup = [ { name: 'mergeTarget', type: 'input', label: wgULS('其他条目:', '其他條目:'), tooltip: wgULS('如指定多个条目,请用管道符分隔:条目甲|条目乙', '如指定多個條目,請用管道符分隔:條目甲|條目乙') }, { type: 'checkbox', list: [ { name: 'mergeTagOther', label: '用{{' + otherTagName + wgULS('}}标记其他条目', '}}標記其他條目'), checked: true, tooltip: wgULS('仅在只输入了一个条目名时可用', '僅在只輸入了一個條目名時可用') } ] } ]; if (mw.config.get('wgNamespaceNumber') === 0) { checkbox.subgroup.push({ name: 'mergeReason', type: 'textarea', label: wgULS('合并理由(会被贴上' + (tag === 'Merge to' ? '其他' : '这') + '条目的讨论页):', '合併理由(會被貼上' + (tag === 'Merge to' ? '其他' : '這') + '條目的討論頁):'), tooltip: wgULS('可选,但强烈推荐。如不需要请留空。仅在只输入了一个条目名时可用。', '可選,但強烈推薦。如不需要請留空。僅在只輸入了一個條目名時可用。') }); } break; case 'Missing information': checkbox.subgroup = { name: 'missingInformation', type: 'input', label: wgULS('缺少的内容(必填):', '缺少的內容(必填):'), tooltip: wgULS('必填,显示为“缺少有关……的信息。”', '必填,顯示為「缺少有關……的資訊。」') }; break; case 'Notability': checkbox.subgroup = { name: 'notability', type: 'select', list: [ { label: '{{Notability}}:' + wgULS('通用的关注度指引', '通用的關注度指引'), value: 'none' }, { label: '{{Notability|Astro}}:' + wgULS('天体', '天體'), value: 'Astro' }, { label: '{{Notability|Biographies}}:' + wgULS('人物传记', '人物傳記'), value: 'Biographies' }, { label: '{{Notability|Book}}:' + wgULS('书籍', '書籍'), value: 'Book' }, { label: '{{Notability|Companies}}:' + wgULS('组织与公司', '組織與公司'), value: 'Companies' }, { label: '{{Notability|Cyclone}}:' + wgULS('气旋', '氣旋'), value: 'Cyclone' }, { label: '{{Notability|Fiction}}:' + wgULS('虚构事物', '虛構事物'), value: 'Fiction' }, { label: '{{Notability|Geographic}}:' + wgULS('地理特征', '地理特徵'), value: 'Geographic' }, { label: '{{Notability|Geometry}}:' + wgULS('几何图形', '幾何圖形'), value: 'Geometry' }, { label: '{{Notability|Invention}}:' + wgULS('发明、研究', '發明、研究'), value: 'Invention' }, { label: '{{Notability|Music}}:' + wgULS('音乐', '音樂'), value: 'Music' }, { label: '{{Notability|Numbers}}:' + wgULS('数字', '數字'), value: 'Numbers' }, { label: '{{Notability|Property}}:' + wgULS('性质表', '性質表'), value: 'Property' }, { label: '{{Notability|Traffic}}:' + '交通', value: 'Traffic' }, { label: '{{Notability|Web}}:' + wgULS('网站、网络内容', '網站、網路內容') + '(非正式指引)', value: 'Web'} ] }; break; case 'Requested move': checkbox.subgroup = [ { name: 'moveTarget', type: 'input', label: wgULS('新名称:', '新名稱:') }, { name: 'moveReason', type: 'textarea', label: wgULS('移动理由(会被粘贴该条目的讨论页):', '移動理由(會被貼上該條目的討論頁):'), tooltip: wgULS('可选,但强烈推荐。如不需要请留空。', '可選,但強烈推薦。如不需要請留空。') } ]; break; case 'Split': checkbox.subgroup = [ { name: 'target1', type: 'input', label: wgULS('页面名1:', '頁面名1:'), tooltip: wgULS('可选。', '可選。') }, { name: 'target2', type: 'input', label: wgULS('页面名2:', '頁面名2:'), tooltip: wgULS('可选。', '可選。') }, { name: 'target3', type: 'input', label: wgULS('页面名3:', '頁面名3:'), tooltip: wgULS('可选。', '可選。') } ]; break; case 'Cleanup': checkbox.subgroup = [ { name: 'cleanupReason', type: 'input', label: '需要清理的理由', tooltip: wgULS('可选,但强烈推荐。如不需要请留空。', '可選,但強烈推薦。如不需要請留空。') } ]; break; default: break; } return checkbox; }; var makeCheckboxesForAlreadyPresentTags = function() { container.append({ type: 'header', id: 'tagHeader0', label: wgULS('已放置的维护标记', '已放置的維護標記') }); var subdiv = container.append({ type: 'div', id: 'tagSubdiv0' }); var checkboxes = []; var unCheckedTags = e.target.form.getUnchecked('existingTags'); Twinkle.tag.alreadyPresentTags.forEach(function(tag) { var checkbox = { value: tag, label: '{{' + tag + '}}' + (Twinkle.tag.article.flatObject[tag] ? ': ' + Twinkle.tag.article.flatObject[tag].description : ''), checked: unCheckedTags.indexOf(tag) === -1 }; checkboxes.push(checkbox); }); subdiv.append({ type: 'checkbox', name: 'existingTags', list: checkboxes }); }; if (sortorder === 'cat') { // categorical sort order // function to iterate through the tags and create a checkbox for each one var doCategoryCheckboxes = function(subdiv, subgroup) { var checkboxes = []; $.each(subgroup, function(k, item) { if (Twinkle.tag.alreadyPresentTags.indexOf(item.tag) === -1) { checkboxes.push(makeCheckbox(item.tag, item.description)); } }); subdiv.append({ type: 'checkbox', name: 'tags', list: checkboxes }); }; if (Twinkle.tag.alreadyPresentTags.length > 0) { makeCheckboxesForAlreadyPresentTags(); } var i = 1; // go through each category and sub-category and append lists of checkboxes Twinkle.tag.article.tagList.forEach(function(group) { container.append({ type: 'header', id: 'tagHeader' + i, label: group.key }); var subdiv = container.append({ type: 'div', id: 'tagSubdiv' + i++ }); if (group.value[0].tag) { doCategoryCheckboxes(subdiv, group.value); } else { group.value.forEach(function(subgroup) { subdiv.append({ type: 'div', label: [ Morebits.htmlNode('b', subgroup.key) ] }); doCategoryCheckboxes(subdiv, subgroup.value); }); } }); } else { // alphabetical sort order if (Twinkle.tag.alreadyPresentTags.length > 0) { makeCheckboxesForAlreadyPresentTags(); container.append({ type: 'header', id: 'tagHeader1', label: wgULS('可用的维护标记', '可用的維護標記') }); } // Avoid repeatedly resorting Twinkle.tag.article.alphabeticalList = Twinkle.tag.article.alphabeticalList || Object.keys(Twinkle.tag.article.flatObject).sort(); var checkboxes = []; Twinkle.tag.article.alphabeticalList.forEach(function(tag) { if (Twinkle.tag.alreadyPresentTags.indexOf(tag) === -1) { checkboxes.push(makeCheckbox(tag, Twinkle.tag.article.flatObject[tag].description)); } }); container.append({ type: 'checkbox', name: 'tags', list: checkboxes }); } // append any custom tags if (Twinkle.getPref('customTagList').length) { container.append({ type: 'header', label: wgULS('自定义模板', '自訂模板') }); container.append({ type: 'checkbox', name: 'tags', list: Twinkle.getPref('customTagList').map(function(el) { el.checked = Twinkle.tag.checkedTags.indexOf(el.value) !== -1; return el; }) }); } var $workarea = $(form).find('#tagWorkArea'); var rendered = container.render(); $workarea.empty().append(rendered); // for quick filter: $allCheckboxDivs = $workarea.find('[name=tags], [name=existingTags]').parent(); $allHeaders = $workarea.find('h5, .quickformDescription'); form.quickfilter.value = ''; // clear search, because the search results are not preserved over mode change form.quickfilter.focus(); // style adjustments $workarea.find('h5').css({ 'font-size': '110%' }); $workarea.find('h5:not(:first-child)').css({ 'margin-top': '1em' }); $workarea.find('div').filter(':has(span.quickformDescription)').css({ 'margin-top': '0.4em' }); Morebits.quickForm.getElements(form, 'existingTags').forEach(generateLinks); Morebits.quickForm.getElements(form, 'tags').forEach(generateLinks); // tally tags added/removed, update statusNode text var statusNode = document.getElementById('tw-tag-status'); $('[name=tags], [name=existingTags]').click(function() { if (this.name === 'tags') { Twinkle.tag.status.numAdded += this.checked ? 1 : -1; } else if (this.name === 'existingTags') { Twinkle.tag.status.numRemoved += this.checked ? -1 : 1; } var firstPart = '加入' + Twinkle.tag.status.numAdded + wgULS('个标记', '個標記'); var secondPart = '移除' + Twinkle.tag.status.numRemoved + wgULS('个标记', '個標記'); statusNode.textContent = (Twinkle.tag.status.numAdded ? ' ' + firstPart : '') + (Twinkle.tag.status.numRemoved ? (Twinkle.tag.status.numAdded ? ';' : ' ') + secondPart : ''); }); }; /** * Adds a link to each template's description page * @param {Morebits.quickForm.element} checkbox associated with the template */ var generateLinks = function(checkbox) { var link = Morebits.htmlNode('a', '>'); link.setAttribute('class', 'tag-template-link'); var tagname = checkbox.values; link.setAttribute('href', mw.util.getUrl( (tagname.indexOf(':') === -1 ? 'Template:' : '') + (tagname.indexOf('|') === -1 ? tagname : tagname.slice(0, tagname.indexOf('|'))) )); link.setAttribute('target', '_blank'); $(checkbox).parent().append(['\u00A0', link]); }; // Tags for ARTICLES start here Twinkle.tag.article = {}; // Tags arranged by category; will be used to generate the alphabetical list, // but tags should be in alphabetical order within the categories // excludeMI: true indicate a tag that *does not* work inside {{multiple issues}} // Add new categories with discretion - the list is long enough as is! Twinkle.tag.article.tagList = [{ key: wgULS('清理和维护模板', '清理和維護模板'), value: [{ key: wgULS('常规清理', '常規清理'), value: [ { tag: 'Cleanup', description: wgULS('可能需要进行清理,以符合维基百科的质量标准', '可能需要進行清理,以符合維基百科的質量標準') }, { tag: 'Cleanup rewrite', description: wgULS('不符合维基百科的质量标准,需要完全重写', '不符合維基百科的質量標準,需要完全重寫') }, { tag: 'Cleanup-jargon', description: wgULS('包含过多行话或专业术语,可能需要简化或提出进一步解释', '包含過多行話或專業術語,可能需要簡化或提出進一步解釋') }, { tag: 'Copy edit', description: wgULS('需要编修,以确保文法、用词、语气、格式、标点等使用恰当', '需要編修,以確保文法、用詞、語氣、格式、標點等使用恰當') } ] }, { key: wgULS('可能多余的内容', '可能多餘的內容'), value: [ { tag: 'Copypaste', description: wgULS('内容可能是从某个来源处拷贝后粘贴', '內容可能是從某個來源處拷貝後貼上') }, { tag: 'External links', description: wgULS('使用外部链接的方式可能不符合维基百科的方针或指引', '使用外部連結的方式可能不符合維基百科的方針或指引') }, { tag: 'Non-free', description: wgULS('可能过多或不当地使用了受著作权保护的文字、图像或多媒体文件', '可能過多或不當地使用了受版權保護的文字、圖像或多媒體檔案') } ] }, { key: wgULS('结构和导言', '結構和導言'), value: [ { tag: 'Lead too long', description: wgULS('导言部分也许过于冗长', '導言部分也許過於冗長') }, { tag: 'Lead too short', description: wgULS('导言部分也许不足以概括其内容', '導言部分也許不足以概括其內容') }, { tag: 'Very long', description: wgULS('可能过于冗长', '可能過於冗長') } ] }, { key: wgULS('虚构作品相关清理', '虛構作品相關清理'), value: [ { tag: 'In-universe', description: wgULS('使用小说故事内的观点描述一个虚构事物', '使用小說故事內的觀點描述一個虛構事物') }, { tag: 'Long plot', description: wgULS('可能包含过于详细的剧情摘要', '可能包含過於詳細的劇情摘要') } ] }] }, { key: wgULS('常规条目问题', '常規條目問題'), value: [{ key: '重要性和知名度', value: [ { tag: 'Notability', description: wgULS('可能不符合通用关注度指引', '可能不符合通用關注度指引'), excludeMI: true }, // has a subgroup with subcategories { tag: 'Notability Unreferenced', description: wgULS('可能具备关注度,但需要来源加以彰显', '可能具備關注度,但需要來源加以彰顯') } ] }, { key: wgULS('写作风格', '寫作風格'), value: [ { tag: 'Advert', description: wgULS('类似广告或宣传性内容', '類似廣告或宣傳性內容') }, { tag: 'Fanpov', description: wgULS('类似爱好者网页', '類似愛好者網頁') }, { tag: 'How-to', description: wgULS('包含指南或教学内容', '包含指南或教學內容') }, { tag: 'Inappropriate person', description: wgULS('使用不适当的第一人称和第二人称', '使用不適當的第一人稱和第二人稱') }, { tag: 'Newsrelease', description: wgULS('阅读起来像是新闻稿及包含过度的宣传性语调', '閱讀起來像是新聞稿及包含過度的宣傳性語調') }, { tag: 'Prose', description: wgULS('使用了日期或时间列表式记述,需要改写为连贯的叙述性文字', '使用了日期或時間列表式記述,需要改寫為連貫的敘述性文字') }, { tag: 'Review', description: wgULS('阅读起来类似评论,需要清理', '閱讀起來類似評論,需要清理') }, { tag: 'Tone', description: wgULS('语调或风格可能不适合百科全书的写作方式', '語調或風格可能不適合百科全書的寫作方式') } ] }, { key: wgULS('内容', '內容'), value: [ { tag: 'Expand language', description: wgULS('可以根据其他语言版本扩展', '可以根據其他語言版本擴充') }, // these three have a subgroup with several options { tag: 'Missing information', description: '缺少必要的信息' }, // these three have a subgroup with several options { tag: 'Substub', description: wgULS('过于短小', '過於短小'), excludeMI: true }, { tag: 'Unencyclopedic', description: wgULS('可能不适合写入百科全书', '可能不適合寫入百科全書') } ] }, { key: wgULS('信息和细节', '資訊和細節'), value: [ { tag: 'Expert needed', description: wgULS('需要精通或熟悉本主题的专业人士(专家)参与及协助编辑', '需要精通或熟悉本主題的專業人士(專家)參與及協助編輯') }, { tag: 'Overly detailed', description: wgULS('包含太多过度细节内容', '包含太多過度細節內容') }, { tag: 'Trivia', description: wgULS('应避免有陈列杂项、琐碎资料的部分', '應避免有陳列雜項、瑣碎資料的部分') } ] }, { key: wgULS('时间性', '時間性'), value: [ { tag: 'Current', description: wgULS('记述新闻动态', '記述新聞動態'), excludeMI: true }, // Works but not intended for use in MI { tag: 'Update', description: wgULS('当前条目或章节需要更新', '當前條目或章節需要更新') } ] }, { key: wgULS('中立、偏见和事实准确性', '中立、偏見和事實準確性'), value: [ { tag: 'Autobiography', description: wgULS('类似一篇自传,或内容主要由条目描述的当事人或组织撰写、编辑', '類似一篇自傳,或內容主要由條目描述的當事人或組織撰寫、編輯') }, { tag: 'COI', description: wgULS('主要贡献者与本条目所宣扬的内容可能存在利益冲突', '主要貢獻者與本條目所宣揚的內容可能存在利益衝突') }, { tag: 'Disputed', description: wgULS('内容疑欠准确,有待查证', '內容疑欠準確,有待查證') }, { tag: 'Globalize', description: wgULS('仅具有一部分地区的信息或观点', '僅具有一部分地區的資訊或觀點') }, { tag: 'Hoax', description: wgULS('真实性被质疑', '真實性被質疑') }, { tag: 'POV', description: wgULS('中立性有争议。内容、语调可能带有明显的个人观点或地方色彩', '中立性有爭議。內容、語調可能帶有明顯的個人觀點或地方色彩') }, { tag: 'Self-contradictory', description: wgULS('内容自相矛盾', '內容自相矛盾') }, { tag: 'Weasel', description: wgULS('语义模棱两可而损及其中立性或准确性', '語意模棱兩可而損及其中立性或準確性') } ] }, { key: wgULS('可供查证和来源', '可供查證和來源'), value: [ { tag: 'BLPdispute', description: wgULS('可能违反了维基百科关于生者传记的方针', '可能違反了維基百科關於生者傳記的方針') }, { tag: 'BLPsources', description: wgULS('生者传记需要补充更多可供查证的来源', '生者傳記需要補充更多可供查證的來源') }, { tag: 'BLP unsourced', description: wgULS('生者传记没有列出任何参考或来源', '生者傳記沒有列出任何參考或來源') }, { tag: 'Citecheck', description: wgULS('可能包含不适用或被曲解的引用资料,部分内容的准确性无法被证实', '可能包含不適用或被曲解的引用資料,部分內容的準確性無法被證實') }, { tag: 'More footnotes needed', description: wgULS('因为文内引用不足,部分字句的来源仍然不明', '因為文內引用不足,部分字句的來源仍然不明') }, { tag: 'No footnotes', description: wgULS('因为没有内文引用而来源仍然不明', '因為沒有內文引用而來源仍然不明') }, { tag: 'Onesource', description: wgULS('极大或完全地依赖于某个单一的来源', '極大或完全地依賴於某個單一的來源') }, { tag: 'Original research', description: wgULS('可能包含原创研究或未查证内容', '可能包含原創研究或未查證內容') }, { tag: 'Primarysources', description: wgULS('依赖第一手来源', '依賴第一手來源') }, { tag: 'Refimprove', description: wgULS('需要补充更多来源', '需要補充更多來源') }, { tag: 'Unreferenced', description: wgULS('没有列出任何参考或来源', '沒有列出任何參考或來源') } ] }] }, { key: wgULS('具体内容问题', '具體內容問題'), value: [{ key: wgULS('语言', '語言'), value: [ { tag: 'NotMandarin', description: wgULS('包含过多不是现代标准汉语的内容', '包含過多不是現代標準漢語的內容'), excludeMI: true }, { tag: 'Rough translation', description: wgULS('翻译品质不佳', '翻譯品質不佳') } ] }, { key: wgULS('链接', '連結'), value: [ { tag: 'Dead end', description: wgULS('需要加上内部链接以构筑百科全书的链接网络', '需要加上內部連結以構築百科全書的連結網絡') }, { tag: 'Orphan', description: wgULS('没有或只有很少链入页面', '沒有或只有很少連入頁面') }, { tag: 'Overlinked', description: wgULS('含有过多、重复、或不必要的内部链接', '含有過多、重複、或不必要的內部連結') }, { tag: 'Underlinked', description: wgULS('需要更多内部链接以构筑百科全书的链接网络', '需要更多內部連結以構築百科全書的連結網絡') } ] }, { key: wgULS('参考技术', '參考技術'), value: [ { tag: 'Citation style', description: wgULS('引用需要进行清理', '引用需要進行清理') } ] }, { key: wgULS('分类', '分類'), value: [ { tag: 'Improve categories', description: wgULS('需要更多页面分类', '需要更多頁面分類'), excludeMI: true }, { tag: 'Uncategorized', description: wgULS('缺少页面分类', '缺少頁面分類'), excludeMI: true } ] }] }, { key: wgULS('合并、拆分、移动', '合併、拆分、移動'), value: [ { tag: 'Merge from', description: wgULS('建议将页面并入本页面', '建議將頁面併入本頁面'), excludeMI: true }, { tag: 'Merge to', description: wgULS('建议将此页面并入页面', '建議將此頁面併入頁面'), excludeMI: true }, { tag: 'Merge', description: wgULS('建议此页面与页面合并', '建議此頁面與頁面合併'), excludeMI: true }, { tag: 'Requested move', description: wgULS('建议将此页面移动到新名称', '建議將此頁面移動到新名稱'), excludeMI: true }, { tag: 'Split', description: wgULS('建议将此页面分割为多个页面', '建議將此頁面分割為多個頁面'), excludeMI: true } ] }]; // Tags for REDIRECTS start here // Not by policy, but the list roughly approximates items with >500 // transclusions from Template:R template index Twinkle.tag.redirectList = [{ key: '常用模板', value: [ { tag: wgULS('合并重定向', '合併重定向'), description: wgULS('保持页面题名至相应主条目,令页面内容在合并后仍能保存其编辑历史', '保持頁面題名至相應主條目,令頁面內容在合併後仍能儲存其編輯歷史') }, { tag: wgULS('简繁重定向', '簡繁重定向'), description: wgULS('引导简体至繁体,或繁体至简体', '引導簡體至繁體,或繁體至簡體') }, { tag: wgULS('关注度重定向', '關注度重定向'), description: wgULS('缺乏关注度的子主题向有关注度的母主题的重定向', '缺乏關注度的子主題向有關注度的母主題的重定向') }, { tag: '模板重定向', description: wgULS('指向模板的重定向页面', '指向模板的重定向頁面') }, { tag: wgULS('别名重定向', '別名重定向'), description: wgULS('标题的其他名称、笔名、绰号、同义字等', '標題的其他名稱、筆名、綽號、同義字等') }, { tag: wgULS('译名重定向', '譯名重定向'), description: wgULS('人物、作品等各项事物的其他翻译名称', '人物、作品等各項事物的其他翻譯名稱') }, { tag: wgULS('缩写重定向', '縮寫重定向'), description: wgULS('标题缩写', '標題縮寫') }, { tag: wgULS('拼写重定向', '拼寫重定向'), description: wgULS('标题的其他不同拼写', '標題的其他不同拼寫') }, { tag: wgULS('错字重定向', '錯字重定向'), description: wgULS('纠正标题的常见错误拼写或误植', '糾正標題的常見錯誤拼寫或誤植') }, { tag: wgULS('旧名重定向', '舊名重定向'), description: wgULS('将事物早前的名称引导至更改后的主题', '將事物早前的名稱引導至更改後的主題') }, { tag: '全名重定向', description: wgULS('标题的完整或更完整名称', '標題的完整或更完整名稱') }, { tag: '短名重定向', description: wgULS('完整标题名称或人物全名的部分、不完整的名称或简称', '完整標題名稱或人物全名的部分、不完整的名稱或簡稱') }, { tag: '姓氏重定向', description: '人物姓氏' }, { tag: '名字重定向', description: '人物人名' }, { tag: '本名重定向', description: '人物本名' }, { tag: '非中文重定向', description: wgULS('非中文标题', '非中文標題'), subgroup: [ { name: 'altLangFrom', type: 'input', label: '本重新導向的語言(可選)', tooltip: '輸入重新導向名稱所使用語言的ISO 639代碼,例如en代表英語,代碼可參見 Template:ISO_639_name' } ] }, { tag: '日文重定向', description: wgULS('日语名称', '日語名稱') } ] }, { key: '偶用模板', value: [ { tag: '角色重定向', description: wgULS('电视剧、电影、书籍等作品的角色', '電視劇、電影、書籍等作品的角色') }, { tag: wgULS('章节重定向', '章節重定向'), description: wgULS('导向至较高密度组织的页面', '導向至較高密度組織的頁面') }, { tag: '列表重定向', description: wgULS('导向至低密度的列表', '導向至低密度的列表') }, { tag: '可能性重定向', description: wgULS('导向至当前提供内容更为详尽的目标页面', '導向至當前提供內容更為詳盡的目標頁面') }, { tag: wgULS('关联字重定向', '關聯字重定向'), description: wgULS('标题名称关联字', '標題名稱關聯字') }, { tag: wgULS('条目请求重定向', '條目請求重定向'), description: wgULS('需要独立条目的页面', '需要獨立條目的頁面'), subgroup: [ { name: 'reqArticleLang', type: 'input', label: '外語語言代碼:', tooltip: '使用ISO 639代碼,可參見 Template:ISO_639_name' }, { name: 'reqArticleTitle', type: 'input', label: '外語頁面名稱:', size: 60 } ] }, { tag: wgULS('快捷方式重定向', '捷徑重定向'), description: wgULS('维基百科快捷方式', '維基百科快捷方式') } ] }, { key: wgULS('鲜用模板', '鮮用模板'), value: [ { tag: wgULS('词组重定向', '詞組重定向'), description: wgULS('将词组/词组/成语指向切题的条目及恰当章节', '將詞組/詞組/成語指向切題的條目及恰當章節') }, { tag: wgULS('消歧义页重定向', '消歧義頁重定向'), description: wgULS('指向消歧义页', '指向消歧義頁') }, { tag: '域名重定向', description: wgULS('域名', '網域名稱') }, { tag: '年代重定向', description: wgULS('于年份条目导向至年代条目', '於年份條目導向至年代條目') }, { tag: wgULS('用户框模板重定向', '用戶框模板重定向'), description: wgULS('用户框模板', '用戶框模板') }, { tag: '重定向模板用重定向', description: wgULS('导向至重定向模板', '導向至重定向模板') }, { tag: 'EXIF重定向', description: wgULS('JPEG图像文件包含EXIF信息', 'JPEG圖檔包含EXIF資訊') } ] }]; // maintenance tags for FILES start here Twinkle.tag.fileList = [{ key: wgULS('著作权和来源问题标签', '著作權和來源問題標籤'), value: [ { label: '{{Non-free reduce}}:' + wgULS('非低分辨率的合理使用图像(或过长的音频剪辑等)', '非低解析度的合理使用圖像(或過長的音頻剪輯等)'), value: 'Non-free reduce' } ] }, { key: wgULS('维基共享资源相关标签', '維基共享資源相關標籤'), value: [ { label: '{{Copy to Wikimedia Commons}}:' + wgULS('自由著作权文件应该被移动至维基共享资源', '自由版權檔案應該被移動至維基共享資源'), value: 'Copy to Wikimedia Commons' }, { label: '{{Do not move to Commons}}:' + wgULS('不要移动至维基共享资源', '不要移動至維基共享資源'), value: 'Do not move to Commons', subgroup: { type: 'input', name: 'DoNotMoveToCommons_reason', label: '原因:', tooltip: wgULS('输入不应该将该图像移动到维基共享资源的原因(必填)。', '輸入不應該將該圖像移動到維基共享資源的原因(必填)。') } }, { label: '{{Keep local}}:' + wgULS('请求在本地保留维基共享资源的文件副本', '請求在本地保留維基共享資源的檔案副本'), value: 'Keep local', subgroup: [ { type: 'input', name: 'keeplocalName', label: wgULS('共享资源的不同图像名称:', '共享資源的不同圖像名稱:'), tooltip: wgULS('输入在共享资源的图像名称(如果不同于本地名称),不包括 File: 前缀', '輸入在共享資源的圖像名稱(如果不同於本地名稱),不包括 File: 字首') }, { type: 'input', name: 'keeplocalReason', label: '原因:', tooltip: wgULS('输入请求在本地保留文件副本的原因(可选):', '輸入請求在本地保留檔案副本的原因(可選):') } ] }, { label: '{{Now Commons}}:' + wgULS('文件已被复制到维基共享资源(CSD F7)', '檔案已被複製到維基共享資源(CSD F7)'), value: 'Now Commons', subgroup: { type: 'input', name: 'nowcommonsName', label: wgULS('共享资源的不同图像名称:', '共享資源的不同圖像名稱:'), tooltip: wgULS('输入在共享资源的图像名称(如果不同于本地名称),不包括 File: 前缀', '輸入在共享資源的圖像名稱(如果不同於本地名稱),不包括 File: 字首') } } ] }, { key: wgULS('清理标签', '清理標籤'), value: [ { label: '{{Watermark}}:' + wgULS('图像包含了水印', '圖像包含了浮水印'), value: 'Watermark' }, { label: '{{Rename media}}:' + wgULS('文件应该根据文件名称指引被重命名', '檔案應該根據檔案名稱指引被重新命名'), value: 'Rename media', subgroup: [ { type: 'input', name: 'renamemediaNewname', label: wgULS('新名称:', '新名稱:'), tooltip: wgULS('输入图像的新名称(可选)', '輸入圖像的新名稱(可選)') }, { type: 'input', name: 'renamemediaReason', label: '原因:', tooltip: wgULS('输入重命名的原因(可选)', '輸入重新命名的原因(可選)') } ] }, { label: '{{Should be SVG}}:' + wgULS('PNG、GIF、JPEG文件应该重制成矢量图形', 'PNG、GIF、JPEG檔案應該重製成向量圖形'), value: 'Should be SVG' } ] }, { key: wgULS('文件取代标签', '檔案取代標籤'), value: [ { label: '{{Obsolete}}:' + wgULS('有新版本可用的过时文件', '有新版本可用的過時檔案'), value: 'Obsolete' }, { label: '{{Vector version available}}:' + wgULS('有矢量图形可用的非矢量图形文件', '有向量圖形可用的非向量圖形檔案'), value: 'Vector version available' } ], buildFilename: true }]; Twinkle.tag.callbacks = { article: function articleCallback(pageobj) { // Remove tags that become superfluous with this action var pageText = pageobj.getPageText().replace(/\{\{\s*([Nn]ew unreviewed article|[Uu]nreviewed|[Uu]serspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/g, ''); var params = pageobj.getCallbackParameters(); /** * Saves the page following the removal of tags if any. The last step. * Called from removeTags() */ var postRemoval = function() { if (params.tagsToRemove.length) { // Remove empty {{multiple issues}} if found pageText = pageText.replace(/\{\{(multiple ?issues|article ?issues|mi|ai|issues|多個問題|多个问题|問題條目|问题条目|數個問題|数个问题)\s*\|\s*\}\}\n?/im, ''); // Remove single-element {{multiple issues}} if found pageText = pageText.replace(/\{\{(?:multiple ?issues|article ?issues|mi|ai|issues|多個問題|多个问题|問題條目|问题条目|數個問題|数个问题)\s*\|\s*(\{\{(?:\{\{[^{}]*\}\}|[^{}])+\}\})\s*\}\}/im, '$1'); } // Build edit summary var makeSentence = function(array) { if (array.length < 3) { return array.join('和'); } var last = array.pop(); return array.join('、') + '和' + last; }; var makeTemplateLink = function(tag) { var text = '{{[['; // if it is a custom tag with a parameter if (tag.indexOf('|') !== -1) { tag = tag.slice(0, tag.indexOf('|')); } text += tag.indexOf(':') !== -1 ? tag : 'Template:' + tag + '|' + tag; return text + ']]}}'; }; var summaryText; var addedTags = params.tags.map(makeTemplateLink); var removedTags = params.tagsToRemove.map(makeTemplateLink); if (addedTags.length) { summaryText = '加入' + makeSentence(addedTags); summaryText += removedTags.length ? '並移除' + makeSentence(removedTags) : ''; } else { summaryText = '移除' + makeSentence(removedTags); } summaryText += wgULS('标记', '標記'); if (params.reason) { summaryText += ':' + params.reason; } // avoid truncated summaries if (summaryText.length > 499) { summaryText = summaryText.replace(/\[\[[^|]+\|([^\]]+)\]\]/g, '$1'); } pageobj.setPageText(pageText); pageobj.setEditSummary(summaryText); pageobj.setChangeTags(Twinkle.changeTags); pageobj.setWatchlist(Twinkle.getPref('watchTaggedPages')); pageobj.setMinorEdit(Twinkle.getPref('markTaggedPagesAsMinor')); pageobj.setCreateOption('nocreate'); pageobj.save(function() { // special functions for merge tags if (params.mergeReason) { // post the rationale on the talk page (only operates in main namespace) var talkpage = new Morebits.wiki.page('Talk:' + params.discussArticle, wgULS('将理由贴进讨论页', '將理由貼進討論頁')); talkpage.setNewSectionText(params.mergeReason.trim() + ' ~~~~'); talkpage.setNewSectionTitle('请求与[[' + params.nonDiscussArticle + ']]合并'); talkpage.setChangeTags(Twinkle.changeTags); talkpage.setWatchlist(Twinkle.getPref('watchMergeDiscussions')); talkpage.setCreateOption('recreate'); talkpage.newSection(); } if (params.mergeTagOther) { // tag the target page if requested var otherTagName = 'Merge'; if (params.mergeTag === 'Merge from') { otherTagName = 'Merge to'; } else if (params.mergeTag === 'Merge to') { otherTagName = 'Merge from'; } var newParams = { tags: [otherTagName], tagsToRemove: [], tagsToRemain: [], mergeTarget: Morebits.pageNameNorm, discussArticle: params.discussArticle, talkDiscussionTitle: params.talkDiscussionTitle, talkDiscussionTitleLinked: params.talkDiscussionTitleLinked }; var otherpage = new Morebits.wiki.page(params.mergeTarget, wgULS('标记其他页面(', '標記其他頁面(') + params.mergeTarget + ')'); otherpage.setCallbackParameters(newParams); otherpage.load(Twinkle.tag.callbacks.article); } // special functions for requested move tags if (params.moveReason) { // post the rationale on the talk page (only operates in main namespace) var moveTalkpageText = '\n\n{{subst:RM|1=' + params.moveReason.trim(); if (params.moveTarget) { moveTalkpageText += '|2=' + params.moveTarget; } moveTalkpageText += '}}'; var moveTalkpage = new Morebits.wiki.page('Talk:' + params.discussArticle, wgULS('将理由贴进讨论页', '將理由貼進討論頁')); moveTalkpage.setAppendText(moveTalkpageText); moveTalkpage.setEditSummary(wgULS('请求移动', '請求移動') + (params.moveTarget ? '至[[' + params.moveTarget + ']]' : '')); moveTalkpage.setChangeTags(Twinkle.changeTags); moveTalkpage.setCreateOption('recreate'); moveTalkpage.append(); } }); if (params.patrol) { pageobj.patrol(); } }; /** * Removes the existing tags that were deselected (if any) * Calls postRemoval() when done */ var removeTags = function removeTags() { if (params.tagsToRemove.length === 0) { postRemoval(); return; } Morebits.status.info(wgULS('信息', '資訊'), wgULS('移除取消选择的已存在标记', '移除取消選擇的已存在標記')); var getRedirectsFor = []; // Remove the tags from the page text, if found in its proper name, // otherwise moves it to `getRedirectsFor` array earmarking it for // later removal params.tagsToRemove.forEach(function removeTag(tag) { var tag_re = new RegExp('\\{\\{' + Morebits.pageNameRegex(tag) + '\\s*(\\|[^}]+)?\\}\\}\\n?'); if (tag_re.test(pageText)) { pageText = pageText.replace(tag_re, ''); } else { getRedirectsFor.push('Template:' + tag); } }); if (!getRedirectsFor.length) { postRemoval(); return; } // Remove tags which appear in page text as redirects var api = new Morebits.wiki.api(wgULS('获取模板重定向', '取得模板重新導向'), { action: 'query', prop: 'linkshere', titles: getRedirectsFor.join('|'), redirects: 1, // follow redirect if the class name turns out to be a redirect page lhnamespace: '10', // template namespace only lhshow: 'redirect', lhlimit: 'max' // 500 is max for normal users, 5000 for bots and sysops }, function removeRedirectTag(apiobj) { $(apiobj.responseXML).find('page').each(function(idx, page) { var removed = false; $(page).find('lh').each(function(idx, el) { var tag = $(el).attr('title').slice(9); var tag_re = new RegExp('\\{\\{' + Morebits.pageNameRegex(tag) + '\\s*(\\|(?:\\{\\{[^{}]*\\}\\}|[^{}])*)?\\}\\}\\n?'); if (tag_re.test(pageText)) { pageText = pageText.replace(tag_re, ''); removed = true; return false; // break out of $.each } }); if (!removed) { Morebits.status.warn(wgULS('信息', '資訊'), wgULS('无法在页面上找到{{', '無法在頁面上找到{{') + $(page).attr('title').slice(9) + wgULS('}}…跳过', '}}…跳過')); } }); postRemoval(); }); api.post(); }; if (!params.tags.length) { removeTags(); return; } var tagRe, tagText = '', tags = [], groupableTags = [], groupableExistingTags = []; // Executes first: addition of selected tags /** * Updates `tagText` with the syntax of `tagName` template with its parameters * @param {number} tagIndex * @param {string} tagName */ var addTag = function articleAddTag(tagIndex, tagName) { var currentTag = ''; if (tagName === 'Uncategorized' || tagName === 'Improve categories') { pageText += '\n\n{{' + tagName + '|time={{subst:#time:c}}}}'; } else { currentTag += '{{' + tagName; // fill in other parameters, based on the tag switch (tagName) { case 'Expand language': currentTag += '|1=' + params.expandLanguage; if (params.highQualityArticle) { currentTag += '|status=yes'; } if (params.expandLanguage2) { currentTag += '|2=' + params.expandLanguage2; if (params.highQualityArticle2) { currentTag += '|status2=yes'; } } if (params.expandLanguage3) { currentTag += '|3=' + params.expandLanguage3; if (params.highQualityArticle3) { currentTag += '|status3=yes'; } } break; case 'Expert needed': currentTag += '|subject=' + params.expert; if (params.expert2) { currentTag += '|subject2=' + params.expert2; } if (params.expert3) { currentTag += '|subject3=' + params.expert3; } break; case 'Merge': case 'Merge to': case 'Merge from': if (params.mergeTarget) { // normalize the merge target for now and later params.mergeTarget = Morebits.string.toUpperCaseFirstChar(params.mergeTarget.replace(/_/g, ' ')); currentTag += '|' + params.mergeTarget; // link to the correct section on the talk page, for article space only if (mw.config.get('wgNamespaceNumber') === 0 && (params.mergeReason || params.discussArticle)) { if (!params.discussArticle) { // discussArticle is the article whose talk page will contain the discussion params.discussArticle = tagName === 'Merge to' ? params.mergeTarget : mw.config.get('wgTitle'); // nonDiscussArticle is the article which won't have the discussion params.nonDiscussArticle = tagName === 'Merge to' ? mw.config.get('wgTitle') : params.mergeTarget; params.talkDiscussionTitle = wgULS('请求与', '請求與') + params.nonDiscussArticle + wgULS('合并', '合併'); } currentTag += '|discuss=Talk:' + params.discussArticle + '#' + params.talkDiscussionTitle; } } break; case 'Missing information': currentTag += '|1=' + params.missingInformation; break; case 'Notability': if (params.notability !== 'none') { currentTag += '|3=' + params.notability; } break; case 'Requested move': if (params.moveTarget) { // normalize the move target for now and later params.moveTarget = Morebits.string.toUpperCaseFirstChar(params.moveTarget.replace(/_/g, ' ')); params.discussArticle = mw.config.get('wgTitle'); currentTag += '|' + params.moveTarget; } break; case 'Split': if (params.target1) { currentTag += '|1=' + params.target1; } if (params.target2) { currentTag += '|2=' + params.target2; } if (params.target3) { currentTag += '|3=' + params.target3; } break; case 'Cleanup': if (params.cleanupReason) { currentTag += '|reason=' + params.cleanupReason; } break; default: break; } currentTag += '|time={{subst:#time:c}}}}\n'; tagText += currentTag; } }; /** * Adds the tags which go outside {{multiple issues}}, either because * these tags aren't supported in {{multiple issues}} or because * {{multiple issues}} is not being added to the page at all */ var addUngroupedTags = function() { $.each(tags, addTag); // Insert tag after short description or any hatnotes, // as well as deletion/protection-related templates var wikipage = new Morebits.wikitext.page(pageText); var templatesAfter = Twinkle.hatnoteRegex + // Protection templates 'pp|pp-.*?|' + // CSD '(?:Delete|Db-reason|D|Deletebecause|Db|速删|速刪|Speedy|SD|快删|快刪|CSD)|' + // AfD '[rsaiftcmv]fd|vfd-(?:b|q|s|source|v|wikt)|(?:移动到维基|移動到維基)(?:教科书|教科書|语录|語錄|文库|文庫|导游|導遊|词典|詞典)'; pageText = wikipage.insertAfterTemplates(tagText, templatesAfter).getText(); removeTags(); }; // Separate tags into groupable ones (`groupableTags`) and non-groupable ones (`tags`) params.tags.forEach(function(tag) { tagRe = new RegExp('\\{\\{' + tag + '(\\||\\}\\})', 'im'); // regex check for preexistence of tag can be skipped if in canRemove mode if (Twinkle.tag.canRemove || !tagRe.exec(pageText)) { if (tag === 'Notability' && (mw.config.get('wgNamespaceNumber') === 0 || confirm(wgULS('该页面不是条目,您仍要提报到关注度提报吗?', '該頁面不是條目,您仍要提報到關注度提報嗎?')))) { var wikipedia_page = new Morebits.wiki.page('Wikipedia:关注度/提报', wgULS('加入关注度记录项', '加入關注度記錄項')); wikipedia_page.setFollowRedirect(true); wikipedia_page.setCallbackParameters(params); wikipedia_page.load(Twinkle.tag.callbacks.notabilityList); } // condition Twinkle.tag.article.tags[tag] to ensure that its not a custom tag // Custom tags are assumed non-groupable, since we don't know whether MI template supports them if (Twinkle.tag.article.flatObject[tag] && !Twinkle.tag.article.flatObject[tag].excludeMI) { groupableTags.push(tag); } else { tags.push(tag); } } else { if (tag === 'Merge from') { tags.push(tag); } else { Morebits.status.warn(wgULS('信息', '資訊'), wgULS('在页面上找到{{', '在頁面上找到{{') + tag + wgULS('}}…跳过', '}}…跳過')); // don't do anything else with merge tags if (['Merge', 'Merge to'].indexOf(tag) !== -1) { params.mergeTarget = params.mergeReason = params.mergeTagOther = null; } } } }); // To-be-retained existing tags that are groupable params.tagsToRemain.forEach(function(tag) { // If the tag is unknown to us, we consider it non-groupable if (Twinkle.tag.article.flatObject[tag] && !Twinkle.tag.article.flatObject[tag].excludeMI) { groupableExistingTags.push(tag); } }); var miTest = /\{\{(multiple ?issues|article ?issues|mi|ai|issues|多個問題|多个问题|問題條目|问题条目|數個問題|数个问题)\s*\|[^}]+\{/im.exec(pageText); if (miTest && groupableTags.length > 0) { Morebits.status.info(wgULS('信息', '資訊'), wgULS('加入支持的标记入已存在的{{multiple issues}}', '加入支援的標記入已存在的{{multiple issues}}')); tagText = ''; $.each(groupableTags, addTag); var miRegex = new RegExp('(\\{\\{\\s*' + miTest[1] + '\\s*(?:\\|(?:\\{\\{[^{}]*\\}\\}|[^{}])*)?)\\}\\}\\s*', 'im'); pageText = pageText.replace(miRegex, '$1' + tagText + '}}\n'); tagText = ''; addUngroupedTags(); } else if (params.group && !miTest && (groupableExistingTags.length + groupableTags.length) >= 2) { Morebits.status.info(wgULS('信息', '資訊'), wgULS('加入支持的标记入{{multiple issues}}', '加入支援的標記入{{multiple issues}}')); tagText += '{{Multiple issues|\n'; /** * Adds newly added tags to MI */ var addNewTagsToMI = function() { $.each(groupableTags, addTag); tagText += '}}\n'; addUngroupedTags(); }; var getRedirectsFor = []; // Reposition the tags on the page into {{multiple issues}}, if found with its // proper name, else moves it to `getRedirectsFor` array to be handled later groupableExistingTags.forEach(function repositionTagIntoMI(tag) { var tag_re = new RegExp('(\\{\\{' + Morebits.pageNameRegex(tag) + '\\s*(\\|[^}]+)?\\}\\}\\n?)'); if (tag_re.test(pageText)) { tagText += tag_re.exec(pageText)[1]; pageText = pageText.replace(tag_re, ''); } else { getRedirectsFor.push('Template:' + tag); } }); if (!getRedirectsFor.length) { addNewTagsToMI(); return; } var api = new Morebits.wiki.api(wgULS('获取模板重定向', '取得模板重新導向'), { action: 'query', prop: 'linkshere', titles: getRedirectsFor.join('|'), redirects: 1, lhnamespace: '10', // template namespace only lhshow: 'redirect', lhlimit: 'max' // 500 is max for normal users, 5000 for bots and sysops }, function replaceRedirectTag(apiobj) { $(apiobj.responseXML).find('page').each(function(idx, page) { var found = false; $(page).find('lh').each(function(idx, el) { var tag = $(el).attr('title').slice(9); var tag_re = new RegExp('(\\{\\{' + Morebits.pageNameRegex(tag) + '\\s*(\\|[^}]*)?\\}\\}\\n?)'); if (tag_re.test(pageText)) { tagText += tag_re.exec(pageText)[1]; pageText = pageText.replace(tag_re, ''); found = true; return false; // break out of $.each } }); if (!found) { Morebits.status.warn(wgULS('信息', '資訊'), wgULS('无法在页面上找到{{', '無法在頁面上找到{{') + $(page).attr('title').slice(9) + wgULS('}}…跳过', '}}…跳過')); } }); addNewTagsToMI(); }); api.post(); } else { tags = tags.concat(groupableTags); addUngroupedTags(); } }, notabilityList: function(pageobj) { // var text = pageobj.getPageText(); // var params = pageobj.getCallbackParameters(); pageobj.setAppendText('\n{{subst:Fameitem|title=' + Morebits.pageNameNorm + '}}'); pageobj.setEditSummary('加入' + '[[' + Morebits.pageNameNorm + ']]'); pageobj.setChangeTags(Twinkle.changeTags); pageobj.setCreateOption('recreate'); pageobj.append(); }, redirect: function redirect(pageobj) { var params = pageobj.getCallbackParameters(), pageText = pageobj.getPageText(), tagRe, tagText = '', summaryText = '加入', tags = [], i; for (i = 0; i < params.tags.length; i++) { tagRe = new RegExp('(\\{\\{' + params.tags[i] + '(\\||\\}\\}))', 'im'); if (!tagRe.exec(pageText)) { tags.push(params.tags[i]); } else { Morebits.status.warn(wgULS('信息', '資訊'), wgULS('在重定向上找到{{', '在重新導向上找到{{') + params.tags[i] + wgULS('}}…跳过', '}}…跳過')); } } var addTag = function redirectAddTag(tagIndex, tagName) { tagText += '\n{{' + tagName; if (tagName === '非中文重定向') { if (params.altLangFrom) { tagText += '|1=' + params.altLangFrom; } } else if (tagName === '条目请求重定向' || tagName === '條目請求重定向') { if (params.reqArticleLang && params.reqArticleTitle) { tagText += '|1=' + params.reqArticleLang; tagText += '|2=' + params.reqArticleTitle; } } tagText += '}}'; if (tagIndex > 0) { if (tagIndex === (tags.length - 1)) { summaryText += '和'; } else if (tagIndex < (tags.length - 1)) { summaryText += '、'; } } summaryText += '{{[[:' + (tagName.indexOf(':') !== -1 ? tagName : 'Template:' + tagName + '|' + tagName) + ']]}}'; }; if (!tags.length) { Morebits.status.warn(wgULS('信息', '資訊'), wgULS('没有标签可供标记', '沒有標籤可供標記')); } tags.sort(); $.each(tags, addTag); // Check for all Rcat shell redirects (from #433) if (pageText.match(/{{(?:redr|this is a redirect|r(?:edirect)?(?:.?cat.*)?[ _]?sh)/i)) { // Regex inspired by [[User:Kephir/gadgets/sagittarius.js]] ([[Special:PermaLink/831402893]]) var oldTags = pageText.match(/(\s*{{[A-Za-z\s]+\|(?:\s*1=)?)((?:[^|{}]|{{[^}]+}})+)(}})\s*/i); pageText = pageText.replace(oldTags[0], oldTags[1] + tagText + oldTags[2] + oldTags[3]); } else { // Fold any pre-existing Rcats into taglist and under Rcatshell var pageTags = pageText.match(/\s*{{.+?重定向.*?}}/img); var oldPageTags = ''; if (pageTags) { pageTags.forEach(function(pageTag) { var pageRe = new RegExp(Morebits.string.escapeRegExp(pageTag), 'img'); pageText = pageText.replace(pageRe, ''); pageTag = pageTag.trim(); oldPageTags += '\n' + pageTag; }); } pageText += '\n{{Redirect category shell|' + tagText + oldPageTags + '\n}}'; } summaryText += (tags.length > 0 ? wgULS('标记', '標記') : '{{Redirect category shell}}') + wgULS('到重定向', '到重新導向'); // avoid truncated summaries if (summaryText.length > 499) { summaryText = summaryText.replace(/\[\[[^|]+\|([^\]]+)\]\]/g, '$1'); } pageobj.setPageText(pageText); pageobj.setEditSummary(summaryText); pageobj.setChangeTags(Twinkle.changeTags); pageobj.setWatchlist(Twinkle.getPref('watchTaggedPages')); pageobj.setMinorEdit(Twinkle.getPref('markTaggedPagesAsMinor')); pageobj.setCreateOption('nocreate'); pageobj.save(); if (params.patrol) { pageobj.patrol(); } }, file: function friendlytagCallbacksFile(pageobj) { var text = pageobj.getPageText(); var params = pageobj.getCallbackParameters(); var summary = '加入'; // Add maintenance tags if (params.tags.length) { var tagtext = '', currentTag; $.each(params.tags, function(k, tag) { // when other commons-related tags are placed, remove "move to Commons" tag if (['Keep local', 'Now Commons', 'Do not move to Commons'].indexOf(tag) !== -1) { text = text.replace(/\{\{(mtc|(copy |move )?to ?commons|move to wikimedia commons|copy to wikimedia commons)[^}]*\}\}/gi, ''); } if (tag === 'Vector version available') { text = text.replace(/\{\{((convert to |convertto|should be |shouldbe|to)?svg|badpng|vectorize)[^}]*\}\}/gi, ''); } currentTag = tag; switch (tag) { case 'Now Commons': currentTag = 'subst:' + currentTag; // subst if (params.nowcommonsName !== '') { currentTag += '|1=' + params.nowcommonsName; } break; case 'Keep local': if (params.keeplocalName !== '') { currentTag += '|1=' + params.keeplocalName; } if (params.keeplocalReason !== '') { currentTag += '|reason=' + params.keeplocalReason; } break; case 'Rename media': if (params.renamemediaNewname !== '') { currentTag += '|1=' + params.renamemediaNewname; } if (params.renamemediaReason !== '') { currentTag += '|2=' + params.renamemediaReason; } break; case 'Vector version available': /* falls through */ case 'Obsolete': currentTag += '|1=' + params[tag.replace(/ /g, '_') + 'File']; break; case 'Do not move to Commons': currentTag += '|reason=' + params.DoNotMoveToCommons_reason; break; case 'Copy to Wikimedia Commons': currentTag += '|human=' + mw.config.get('wgUserName'); break; default: break; // don't care } currentTag = '{{' + currentTag + '}}\n'; tagtext += currentTag; summary += '{{' + tag + '}}、'; }); if (!tagtext) { pageobj.getStatusElement().warn(wgULS('用户取消操作,没什么要做的', '使用者取消操作,沒什麼要做的')); return; } text = tagtext + text; } pageobj.setPageText(text); pageobj.setEditSummary(summary.substring(0, summary.length - 1)); pageobj.setChangeTags(Twinkle.changeTags); pageobj.setWatchlist(Twinkle.getPref('watchTaggedPages')); pageobj.setMinorEdit(Twinkle.getPref('markTaggedPagesAsMinor')); pageobj.setCreateOption('nocreate'); pageobj.save(); if (params.patrol) { pageobj.patrol(); } } }; Twinkle.tag.callback.evaluate = function friendlytagCallbackEvaluate(e) { var form = e.target; var params = Morebits.quickForm.getInputData(form); // Validation // Given an array of incompatible tags, check if we have two or more selected var checkIncompatible = function(conflicts, extra) { var count = conflicts.reduce(function(sum, tag) { return sum += params.tags.indexOf(tag) !== -1; }, 0); if (count > 1) { var message = wgULS('请在以下标签中择一使用', '請在以下標籤中擇一使用') + ':{{' + conflicts.join('}}、{{') + '}}。'; message += extra ? extra : ''; alert(message); return true; } }; // Given a tag, ensure an associate parameter is present // Maybe just sock this away in each function??? var checkParameter = function(tag, parameter, description) { description = description || '理由'; if (params.tags.indexOf(tag) !== -1 && params[parameter].trim() === '') { alert(wgULS('您必须指定', '您必須指定') + '{{' + tag + '}}的' + description + '。'); return true; } }; // We could theoretically put them all checkIncompatible calls in a // forEach loop, but it's probably clearer not to have [[array one], // [array two]] devoid of context. Likewise, all the checkParameter // calls could be in one if, but could be similarly confusing. switch (Twinkle.tag.modeEn) { case 'article': params.tagsToRemove = form.getUnchecked('existingTags'); // not in `input` params.tagsToRemain = params.existingTags || []; // container not created if none present if ((params.tags.indexOf('Merge') !== -1) || (params.tags.indexOf('Merge from') !== -1) || (params.tags.indexOf('Merge to') !== -1)) { if (checkIncompatible(['Merge', 'Merge from', 'Merge to'], wgULS('如果需要多次合并,请使用{{Merge}}并用管道符分隔条目名(但在这种情形中Twinkle不能自动标记其他条目)。', '如果需要多次合併,請使用{{Merge}}並用管道符分隔條目名(但在這種情形中Twinkle不能自動標記其他條目)。'))) { return; } if (!params.mergeTarget) { alert(wgULS('请指定使用于merge模板中的另一个页面标题。', '請指定使用於merge模板中的另一個頁面標題。')); return; } if ((params.mergeTagOther || params.mergeReason) && params.mergeTarget.indexOf('|') !== -1) { alert(wgULS('当前还不支持在一次合并中标记多个条目,与开启关于多个条目的讨论。请不要勾选“标记其他条目”并清空“理由”框后再提交。', '目前還不支援在一次合併中標記多個條目,與開啟關於多個條目的討論。請不要勾選「標記其他條目」並清空「理由」框後再提交。')); return; } } if (checkParameter('Expand language', 'expandLanguage', wgULS('语言代码', '語言代碼'))) { return; } if (checkParameter('Missing information', 'missingInformation', wgULS('缺少的内容', '缺少的內容'))) { return; } if (checkParameter('Expert needed', 'expert', wgULS('专家领域', '專家領域'))) { return; } break; case 'file': // Silly to provide the same string to each of these if (checkParameter('Obsolete', 'ObsoleteFile', wgULS('替换的文件名称', '替換的檔案名稱')) || checkParameter('Vector version available', 'Vector_version_availableFile', wgULS('替换的文件名称', '替換的檔案名稱'))) { return; } if (checkParameter('Do not move to Commons', 'DoNotMoveToCommons_reason')) { return; } break; case 'redirect': break; default: alert('Twinkle.tag:未知模式 ' + Twinkle.tag.mode); break; } // File/redirect: return if no tags selected // Article: return if no tag is selected and no already present tag is deselected if (params.tags.length === 0 && (Twinkle.tag.modeEn !== 'article' || params.tagsToRemove.length === 0)) { alert(wgULS('必须选择至少一个标记!', '必須選擇至少一個標記!')); return; } Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(form); Morebits.wiki.actionCompleted.redirect = Morebits.pageNameNorm; Morebits.wiki.actionCompleted.notice = wgULS('标记完成,将在几秒内刷新页面', '標記完成,將在幾秒內重新整理頁面'); if (Twinkle.tag.modeEn === 'redirect') { Morebits.wiki.actionCompleted.followRedirect = false; } var wikipedia_page = new Morebits.wiki.page(Morebits.pageNameNorm, wgULS('正在标记', '正在標記') + Twinkle.tag.mode); wikipedia_page.setCallbackParameters(params); wikipedia_page.load(Twinkle.tag.callbacks[Twinkle.tag.modeEn]); }; Twinkle.addInitCallback(Twinkle.tag, 'tag'); })(jQuery); // </nowiki> mabixq9vgjuecqdk1qy1wk8upiy7nr0 User:Hamish/Twinkle/modules/twinkleblock.js 2 112081 539152 511471 2022-08-19T00:04:57Z Hamish 40220 Initialise to 1363112af8eb2f8c144e0cdcbd391a47f36347f9 at xi-plus/master javascript text/javascript // <nowiki> (function($) { var api = new mw.Api(), relevantUserName; var menuFormattedNamespaces = $.extend({}, mw.config.get('wgFormattedNamespaces')); menuFormattedNamespaces[0] = wgULS('(条目)', '(條目)'); var blockActionText = { block: wgULS('封禁', '封鎖'), reblock: wgULS('重新封禁', '重新封鎖'), unblock: wgULS('解除封禁', '解除封鎖') }; /* **************************************** *** twinkleblock.js: Block module **************************************** * Mode of invocation: Tab ("Block") * Active on: Any page with relevant user name (userspace, contribs, etc.) */ Twinkle.block = function twinkleblock() { // should show on Contributions or Block pages, anywhere there's a relevant user if (Morebits.wiki.flow.relevantUserName(true) && (Morebits.userIsSysop || !mw.util.isIPAddress(Morebits.wiki.flow.relevantUserName(true), true))) { Twinkle.addPortletLink(Twinkle.block.callback, wgULS('封禁', '封鎖'), 'tw-block', wgULS('封禁相关用户', '封鎖相關使用者')); } }; Twinkle.block.callback = function twinkleblockCallback() { if (Morebits.wiki.flow.relevantUserName(true) === mw.config.get('wgUserName') && !confirm(wgULS('您即将对自己执行封禁相关操作!确认要继续吗?', '您即將對自己執行封鎖相關操作!確認要繼續嗎?'))) { return; } Twinkle.block.currentBlockInfo = undefined; Twinkle.block.field_block_options = {}; Twinkle.block.field_template_options = {}; var Window = new Morebits.simpleWindow(650, 530); // need to be verbose about who we're blocking Window.setTitle(wgULS('封禁或向', '封鎖或向') + Morebits.wiki.flow.relevantUserName(true) + wgULS('发出封禁模板', '發出封鎖模板')); Window.setScriptName('Twinkle'); Window.addFooterLink('封禁模板', 'Wikipedia:模板消息/用戶討論命名空間#封禁'); Window.addFooterLink(wgULS('封禁方针', '封鎖方針'), 'WP:BLOCK'); Window.addFooterLink(wgULS('封禁设置', '封鎖設定'), 'WP:TW/PREF#block'); Window.addFooterLink(wgULS('Twinkle帮助', 'Twinkle說明'), 'WP:TW/DOC#block'); var form = new Morebits.quickForm(Twinkle.block.callback.evaluate); var actionfield = form.append({ type: 'field', label: wgULS('操作类型', '操作類別') }); actionfield.append({ type: 'checkbox', name: 'actiontype', event: Twinkle.block.callback.change_action, list: [ { label: wgULS('封禁用户', '封鎖使用者'), value: 'block', tooltip: wgULS('用选择的选项全站封禁相关用户,如果未勾选部分封禁则为全站封禁。', '用選擇的選項全站封鎖相關使用者,如果未勾選部分封鎖則為全站封鎖。'), hidden: !Morebits.userIsSysop, checked: Morebits.userIsSysop }, { label: wgULS('部分封禁', '部分封鎖'), value: 'partial', tooltip: wgULS('启用部分封禁及部分封禁模板。', '啟用部分封鎖及部分封鎖模板。'), hidden: !Morebits.userIsSysop, checked: Twinkle.getPref('defaultToPartialBlocks') }, { label: wgULS('加入封禁模板到用户讨论页', '加入封鎖模板到使用者討論頁'), value: 'template', tooltip: wgULS('如果执行封禁的管理员忘记发出封禁模板,或你封禁了用户而没有给其发出模板,则你可以用此来发出合适的模板。勾选部分封禁以使用部分封禁模板。', '如果執行封鎖的管理員忘記發出封鎖模板,或你封鎖了使用者而沒有給其發出模板,則你可以用此來發出合適的模板。勾選部分封鎖以使用部分封鎖模板。'), hidden: !Morebits.userIsSysop, checked: Morebits.userIsSysop }, { label: wgULS('标记用户页', '標記使用者頁面'), value: 'tag', tooltip: wgULS('将用户页替换成相关的标记模板,仅限永久封禁使用。', '將使用者頁面替換成相關的標記模板,僅限永久封鎖使用。'), hidden: true, checked: !Morebits.userIsSysop }, { label: wgULS('保护用户页', '保護使用者頁面'), value: 'protect', tooltip: wgULS('全保护用户页,仅限永久封禁使用。', '全保護使用者頁面,僅限永久封鎖使用。'), hidden: true }, { label: wgULS('解除封禁用户', '解除封鎖使用者'), value: 'unblock', tooltip: wgULS('解除封禁相关用户。', '解除封鎖相關使用者。'), hidden: !Morebits.userIsSysop } ] }); form.append({ type: 'field', label: wgULS('默认', '預設'), name: 'field_preset' }); form.append({ type: 'field', label: wgULS('模板选项', '模板選項'), name: 'field_template_options' }); form.append({ type: 'field', label: wgULS('封禁选项', '封鎖選項'), name: 'field_block_options' }); form.append({ type: 'field', label: wgULS('标记用户页', '標記使用者頁面'), name: 'field_tag_options' }); form.append({ type: 'field', label: wgULS('解除封禁选项', '解除封鎖選項'), name: 'field_unblock_options' }); form.append({ type: 'submit', label: '提交' }); var result = form.render(); Window.setContent(result); Window.display(); result.root = result; Twinkle.block.fetchUserInfo(function() { if (Twinkle.block.isRegistered) { var $form = $(result); Morebits.quickForm.setElementVisibility($form.find('[name=actiontype][value=tag]').parent(), true); if (Morebits.userIsSysop) { Morebits.quickForm.setElementVisibility($form.find('[name=actiontype][value=protect]').parent(), true); } } // clean up preset data (defaults, etc.), done exactly once, must be before Twinkle.block.callback.change_action is called Twinkle.block.transformBlockPresets(); // init the controls after user and block info have been fetched var evt = document.createEvent('Event'); evt.initEvent('change', true, true); result.actiontype[0].dispatchEvent(evt); }); }; Twinkle.block.fetchUserInfo = function twinkleblockFetchUserInfo(fn) { var userName = Morebits.wiki.flow.relevantUserName(true); var query = { format: 'json', action: 'query', list: 'blocks|users|logevents', letype: 'block', lelimit: 2, ususers: userName, usprop: 'groupmemberships', letitle: 'User:' + userName }; if (Morebits.ip.isRange(userName)) { query.bkip = userName; } else { query.bkusers = userName; } api.get(query) .then(function(data) { var blockinfo = data.query.blocks[0], userinfo = data.query.users[0]; Twinkle.block.isRegistered = !!userinfo.userid; if (Twinkle.block.isRegistered) { relevantUserName = 'User:' + userName; Twinkle.block.userIsBot = !!userinfo.groupmemberships && userinfo.groupmemberships.map(function(e) { return e.group; }).indexOf('bot') !== -1; } else { relevantUserName = userName; Twinkle.block.userIsBot = false; } if (blockinfo) { // handle frustrating system of inverted boolean values blockinfo.disabletalk = blockinfo.allowusertalk === undefined; blockinfo.hardblock = blockinfo.anononly === undefined; Twinkle.block.currentBlockInfo = blockinfo; } Twinkle.block.hasBlockLog = !!data.query.logevents.length; // Used later to check if block status changed while filling out the form and display block info in window Twinkle.block.blockLogId = Twinkle.block.hasBlockLog ? data.query.logevents[0].logid : false; // Only use block or reblock log Twinkle.block.recentBlockLog = data.query.logevents.length >= 1 && data.query.logevents[0].action !== 'unblock' ? data.query.logevents[0] : data.query.logevents.length >= 2 ? data.query.logevents[1] : null; // Only ongoing block could be unblocked Twinkle.block.manualUnblock = Twinkle.block.hasBlockLog && data.query.logevents[0].action === 'unblock'; if (typeof fn === 'function') { return fn(); } }, function(msg) { Morebits.status.init($('div[name="currentblock"] span').last()[0]); Morebits.status.warn(wgULS('抓取用户信息出错', '抓取使用者資訊出錯'), msg); }); }; Twinkle.block.callback.saveFieldset = function twinkleblockCallbacksaveFieldset(fieldset) { Twinkle.block[$(fieldset).prop('name')] = {}; $(fieldset).serializeArray().forEach(function(el) { // namespaces and pages for partial blocks are overwritten // here, but we're handling them elsewhere so that's fine Twinkle.block[$(fieldset).prop('name')][el.name] = el.value; }); }; Twinkle.block.callback.change_action = function twinkleblockCallbackChangeAction(e) { var field_preset, field_template_options, field_block_options, field_tag_options, field_unblock_options, $form = $(e.target.form); // Make ifs shorter var block = $form.find('[name=actiontype][value=block]'); var blockBox = block.is(':checked'); var template = $form.find('[name=actiontype][value=template]'); var templateBox = template.is(':checked'); var tag = $form.find('[name=actiontype][value=tag]'); var protect = $form.find('[name=actiontype][value=protect]'); var partial = $form.find('[name=actiontype][value=partial]'); var partialBox = partial.is(':checked'); var unblock = $form.find('[name=actiontype][value=unblock]'); var blockGroup = partialBox ? Twinkle.block.blockGroupsPartial : Twinkle.block.blockGroups; if (e.target.value === 'unblock') { if (!Twinkle.block.currentBlockInfo) { unblock.prop('checked', false); return alert(wgULS('用户没有被封禁', '使用者沒有被封鎖')); } block.prop('checked', false); blockBox = false; template.prop('checked', false); templateBox = false; tag.prop('checked', false); protect.prop('checked', false); partial.prop('checked', false); } else { unblock.prop('checked', false); } partial.prop('disabled', !blockBox && !templateBox); Twinkle.block.callback.saveFieldset($('[name=field_block_options]')); Twinkle.block.callback.saveFieldset($('[name=field_template_options]')); Twinkle.block.callback.saveFieldset($('[name=field_tag_options]')); Twinkle.block.callback.saveFieldset($('[name=field_unblock_options]')); if (blockBox) { field_preset = new Morebits.quickForm.element({ type: 'field', label: wgULS('默认', '預設'), name: 'field_preset' }); field_preset.append({ type: 'select', name: 'preset', label: wgULS('选择默认:', '選擇預設:'), event: Twinkle.block.callback.change_preset, list: Twinkle.block.callback.filtered_block_groups(blockGroup) }); field_block_options = new Morebits.quickForm.element({ type: 'field', label: wgULS('封禁选项', '封鎖選項'), name: 'field_block_options' }); field_block_options.append({ type: 'div', name: 'currentblock', label: ' ' }); field_block_options.append({ type: 'div', name: 'hasblocklog', label: ' ' }); field_block_options.append({ type: 'select', name: 'expiry_preset', label: wgULS('过期时间:', '過期時間:'), event: Twinkle.block.callback.change_expiry, list: [ { label: wgULS('自定义', '自訂'), value: 'custom', selected: true }, { label: wgULS('无限期', '無限期'), value: 'infinity' }, { label: wgULS('3小时', '3小時'), value: '3 hours' }, { label: wgULS('12小时', '12小時'), value: '12 hours' }, { label: '1天', value: '1 day' }, { label: wgULS('31小时', '31小時'), value: '31 hours' }, { label: '2天', value: '2 days' }, { label: '3天', value: '3 days' }, { label: wgULS('1周', '1週'), value: '1 week' }, { label: wgULS('2周', '2週'), value: '2 weeks' }, { label: wgULS('1个月', '1個月'), value: '1 month' }, { label: wgULS('3个月', '3個月'), value: '3 months' }, { label: wgULS('6个月', '6個月'), value: '6 months' }, { label: '1年', value: '1 year' }, { label: '2年', value: '2 years' }, { label: '3年', value: '3 years' } ] }); field_block_options.append({ type: 'input', name: 'expiry', label: wgULS('自定义过期时间', '自訂過期時間'), tooltip: wgULS('您可以使用相对时间,如“1 minute”或“19 days”;或绝对时间,“yyyymmddhhmm”(如“200602011405”是2006年2月1日14:05 UTC。)', '您可以使用相對時間,如「1 minute」或「19 days」;或絕對時間,「yyyymmddhhmm」(如「200602011405」是2006年2月1日14:05 UTC。)'), value: Twinkle.block.field_block_options.expiry || Twinkle.block.field_template_options.template_expiry }); if (partialBox) { // Partial block field_block_options.append({ type: 'select', multiple: true, name: 'pagerestrictions', label: wgULS('页面封禁', '頁面封鎖'), value: '', tooltip: wgULS('最多10页面。', '最多10頁面。') }); var ns = field_block_options.append({ type: 'select', multiple: true, name: 'namespacerestrictions', label: wgULS('命名空间封禁', '命名空間封鎖'), value: '', tooltip: wgULS('指定封禁的命名空间。', '指定封鎖的命名空間。') }); $.each(menuFormattedNamespaces, function(number, name) { // Ignore -1: Special; -2: Media; and 2300-2303: Gadget (talk) and Gadget definition (talk) if (number >= 0 && number < 830) { ns.append({ type: 'option', label: name, value: number }); } }); } var blockoptions = [ { checked: Twinkle.block.field_block_options.nocreate, label: wgULS('禁止创建账户', '禁止建立帳號'), name: 'nocreate', value: '1' }, { checked: Twinkle.block.field_block_options.noemail, label: wgULS('电子邮件停用', '電子郵件停用'), name: 'noemail', value: '1' }, { checked: Twinkle.block.field_block_options.disabletalk, label: wgULS('不能编辑自己的讨论页', '不能編輯自己的討論頁'), name: 'disabletalk', value: '1', tooltip: partialBox ? wgULS('如果使用部分封禁,不应选择此项,除非您也想要禁止编辑用户讨论页。', '如果使用部分封鎖,不應選擇此項,除非您也想要禁止編輯使用者討論頁。') : '' } ]; if (Twinkle.block.isRegistered) { blockoptions.push({ checked: Twinkle.block.field_block_options.autoblock, label: wgULS('自动封禁', '自動封鎖'), name: 'autoblock', value: '1' }); } else { blockoptions.push({ checked: Twinkle.block.field_block_options.hardblock, label: wgULS('阻止登录用户使用该IP地址编辑', '阻止登入使用者使用該IP位址編輯'), name: 'hardblock', value: '1' }); } blockoptions.push({ checked: Twinkle.block.field_block_options.watchuser, label: wgULS('监视该用户的用户页和讨论页', '監視該使用者的使用者頁面和討論頁'), name: 'watchuser', value: '1' }); blockoptions.push({ checked: true, label: wgULS('标记当前的破坏中的请求', '標記當前的破壞中的請求'), name: 'closevip', value: '1' }); field_block_options.append({ type: 'checkbox', name: 'blockoptions', list: blockoptions }); field_block_options.append({ type: 'textarea', label: wgULS('理由(用于封禁日志):', '理由(用於封鎖日誌):'), name: 'reason', value: Twinkle.block.field_block_options.reason }); field_block_options.append({ type: 'div', name: 'filerlog_label', label: wgULS('“参见”:', '「參見」:'), style: 'display:inline-block;font-style:normal !important', tooltip: wgULS('在封禁理由中标清特殊情况以供其他管理员参考', '在封鎖理由中標清特殊情況以供其他管理員參考') }); field_block_options.append({ type: 'checkbox', name: 'filter_see_also', event: Twinkle.block.callback.toggle_see_alsos, style: 'display:inline-block; margin-right:5px', list: [ { label: wgULS('过滤器日志', '過濾器日誌'), checked: false, value: wgULS('过滤器日志', '過濾器日誌') } ] }); field_block_options.append({ type: 'checkbox', name: 'deleted_see_also', event: Twinkle.block.callback.toggle_see_alsos, style: 'display:inline-block', list: [ { label: wgULS('已删除的编辑', '已刪除的編輯'), checked: false, value: wgULS('已删除的编辑', '已刪除的編輯') } ] }); field_block_options.append({ type: 'checkbox', name: 'filter_see_also', event: Twinkle.block.callback.toggle_see_alsos, style: 'display:inline-block; margin-right:5px', list: [ { label: wgULS('用户讨论页', '使用者討論頁'), checked: false, value: wgULS('用户讨论页', '使用者討論頁') } ] }); field_block_options.append({ type: 'checkbox', name: 'filter_see_also', event: Twinkle.block.callback.toggle_see_alsos, style: 'display:inline-block; margin-right:5px', list: [ { label: wgULS('过去的封禁记录', '過去的封鎖記錄'), checked: false, value: wgULS('过去的封禁记录', '過去的封鎖記錄') } ] }); field_block_options.append({ type: 'checkbox', name: 'filter_see_also', event: Twinkle.block.callback.toggle_see_alsos, style: 'display:inline-block; margin-right:5px', list: [ { label: wgULS('跨维基贡献', '跨維基貢獻'), checked: false, value: wgULS('跨维基贡献', '跨維基貢獻') } ] }); if (Twinkle.block.currentBlockInfo) { field_block_options.append({ type: 'hidden', name: 'reblock', value: '1' }); } } if (templateBox) { field_template_options = new Morebits.quickForm.element({ type: 'field', label: wgULS('模板选项', '模板選項'), name: 'field_template_options' }); field_template_options.append({ type: 'select', name: 'template', label: wgULS('选择讨论页模板:', '選擇討論頁模板:'), event: Twinkle.block.callback.change_template, list: Twinkle.block.callback.filtered_block_groups(blockGroup, true), value: Twinkle.block.field_template_options.template }); field_template_options.append({ type: 'input', name: 'article', display: 'none', label: wgULS('条目链接', '條目連結'), value: '', tooltip: wgULS('可以随通知链接页面,例如破坏的目标。没有条目需要链接则请留空。', '可以隨通知連結頁面,例如破壞的目標。沒有條目需要連結則請留空。') }); // Only visible if partial and not blocking field_template_options.append({ type: 'input', name: 'area', display: 'none', label: wgULS('封禁区域', '封鎖區域'), value: '', tooltip: wgULS('阻止用户编辑的页面或命名空间的可选说明。', '阻止使用者編輯的頁面或命名空間的可選說明。') }); if (!blockBox) { field_template_options.append({ type: 'input', name: 'template_expiry', display: 'none', label: '封禁期限:', value: '', tooltip: wgULS('封禁时长,如24小时、2周、无限期等。', '封鎖時長,如24小時、2週、無限期等。') }); } field_template_options.append({ type: 'input', name: 'block_reason', label: wgULS('“由于…您已被封禁”', '「由於…您已被封鎖」'), display: 'none', tooltip: wgULS('可选的理由,用于替换默认理由。只在常规封禁模板中有效。', '可選的理由,用於替換預設理由。只在常規封鎖模板中有效。'), value: Twinkle.block.field_template_options.block_reason }); if (blockBox) { field_template_options.append({ type: 'checkbox', name: 'blank_duration', list: [ { label: '不在模板中包含封禁期限', checked: Twinkle.block.field_template_options.blank_duration, tooltip: wgULS('模板将会显示“一段时间”而不是具体时长', '模板將會顯示「一段時間」而不是具體時長') } ] }); } else { field_template_options.append({ type: 'checkbox', list: [ { label: wgULS('不能编辑自己的讨论页', '不能編輯自己的討論頁'), name: 'notalk', checked: Twinkle.block.field_template_options.notalk, tooltip: wgULS('用此在保护模板中指明该用户编辑讨论页的权限已被移除', '用此在保護模板中指明該使用者編輯討論頁的權限已被移除') }/* , { label: wgULS('不能发送电子邮件', '不能傳送電子郵件'), name: 'noemail_template', checked: Twinkle.block.field_template_options.noemail_template, tooltip: wgULS('用此在保护模板中指明该用户发送电子邮件的权限已被移除', '用此在保護模板中指明該使用者傳送電子郵件的權限已被移除') }, { label: wgULS('不能创建账户', '不能建立帳號'), name: 'nocreate_template', checked: Twinkle.block.field_template_options.nocreate_template, tooltip: wgULS('用此在保护模板中指明该用户创建账户的权限已被移除', '用此在保護模板中指明該使用者建立帳號的權限已被移除') } */ ] }); } var $previewlink = $('<a id="twinkleblock-preivew-link">' + wgULS('预览', '預覽') + '</a>'); $previewlink.off('click').on('click', function() { Twinkle.block.callback.preview($form[0]); }); $previewlink.css({cursor: 'pointer'}); field_template_options.append({ type: 'div', id: 'blockpreview', label: [ $previewlink[0] ] }); field_template_options.append({ type: 'div', id: 'twinkleblock-previewbox', style: 'display: none' }); } if ($form.find('[name=actiontype][value=tag]').is(':checked')) { field_tag_options = new Morebits.quickForm.element({ type: 'field', label: wgULS('标记用户页', '標記使用者頁面'), name: 'field_tag_options' }); field_tag_options.append({ type: 'checkbox', name: 'tag', label: wgULS('选择用户页模板:', '選擇使用者頁面模板:'), list: [ { label: '{{Blocked user}}:' + wgULS('一般永久封禁', '一般永久封鎖'), value: 'Blocked user' }, { label: '{{Sockpuppet}}:' + wgULS('傀儡账户', '傀儡帳號'), value: 'Sockpuppet', subgroup: [ { name: 'sppUsername', type: 'input', label: wgULS('主账户用户名:', '主帳號使用者名稱:') }, { name: 'sppType', type: 'select', label: wgULS('状态:', '狀態:'), list: [ { type: 'option', value: 'blocked', label: 'blocked - ' + wgULS('仅依行为证据认定', '僅依行為證據認定'), selected: true }, { type: 'option', value: 'proven', label: 'proven - ' + wgULS('经傀儡调查确认', '經傀儡調查確認') }, { type: 'option', value: 'confirmed', label: 'confirmed - ' + wgULS('经查核确认', '經查核確認') } ] }, { name: 'sppEvidence', type: 'input', label: wgULS('根据……确定:', '根據……確定:'), tooltip: wgULS('纯文字或是带[[]]的链接,例如:[[Special:固定链接/xxxxxxxx|用户查核]]', '純文字或是帶[[]]的連結,例如:[[Special:固定链接/xxxxxxxx|用戶查核]]') } ] }, { label: '{{Sockpuppeteer|blocked}}:' + wgULS('傀儡主账户', '傀儡主帳號'), value: 'Sockpuppeteer', subgroup: [ { type: 'checkbox', list: [ { name: 'spmChecked', value: 'spmChecked', label: wgULS('经用户查核确认', '經使用者查核確認') } ] }, { name: 'spmEvidence', type: 'input', label: wgULS('额外理由:', '額外理由:') } ] }, { label: '{{Locked global account}}:' + wgULS('全域锁定', '全域鎖定'), value: 'Locked global account', subgroup: [ { type: 'checkbox', list: [ { name: 'lockBlocked', value: 'lockBlocked', label: wgULS('亦被本地封禁', '亦被本地封鎖') } ] } ] } ] }); field_tag_options.append({ type: 'input', name: 'category', label: 'Category:……的維基用戶分身' + wgULS('(主账户用户名)', '(主帳號使用者名稱)'), // no wgULS for category name tooltip: wgULS('您通常应该使用{{Sockpuppet}}的主账户参数来产生分类,只有单独使用{{Locked global account}}才需填写此项。', '您通常應該使用{{Sockpuppet}}的主帳號參數來產生分類,只有單獨使用{{Locked global account}}才需填寫此項。') }); } if ($form.find('[name=actiontype][value=unblock]').is(':checked')) { field_unblock_options = new Morebits.quickForm.element({ type: 'field', label: wgULS('解除封禁选项', '解除封鎖選項'), name: 'field_unblock_options' }); field_unblock_options.append({ type: 'textarea', label: wgULS('理由(用于封禁日志):', '理由(用於封鎖日誌):'), name: 'reason', value: Twinkle.block.field_unblock_options.reason }); } var oldfield; if (field_preset) { oldfield = $form.find('fieldset[name="field_preset"]')[0]; oldfield.parentNode.replaceChild(field_preset.render(), oldfield); } else { $form.find('fieldset[name="field_preset"]').hide(); } if (field_block_options) { oldfield = $form.find('fieldset[name="field_block_options"]')[0]; oldfield.parentNode.replaceChild(field_block_options.render(), oldfield); $form.find('[name=pagerestrictions]').select2({ width: '100%', placeholder: wgULS('输入要阻止用户编辑的页面', '輸入要阻止使用者編輯的頁面'), language: { errorLoading: function() { return wgULS('搜索词汇不完整或无效', '搜尋詞彙不完整或無效'); } }, maximumSelectionLength: 10, // Software limitation [[phab:T202776]] minimumInputLength: 1, // prevent ajax call when empty ajax: { url: mw.util.wikiScript('api'), dataType: 'json', delay: 100, data: function(params) { var title = mw.Title.newFromText(params.term); if (!title) { return; } return { action: 'query', format: 'json', list: 'allpages', apfrom: title.title, apnamespace: title.namespace, aplimit: '10' }; }, processResults: function(data) { return { results: data.query.allpages.map(function(page) { var title = mw.Title.newFromText(page.title, page.ns).toText(); return { id: title, text: title }; }) }; } }, templateSelection: function(choice) { return $('<a>').text(choice.text).attr({ href: mw.util.getUrl(choice.text), target: '_blank' }); } }); $form.find('[name=namespacerestrictions]').select2({ width: '100%', matcher: Morebits.select2.matchers.wordBeginning, language: { searching: Morebits.select2.queryInterceptor }, templateResult: Morebits.select2.highlightSearchMatches, placeholder: wgULS('选择要阻止用户编辑的命名空间', '選擇要阻止使用者編輯的命名空間') }); mw.util.addCSS( // Reduce padding '.select2-results .select2-results__option { padding-top: 1px; padding-bottom: 1px; }' + // Adjust font size '.select2-container .select2-dropdown .select2-results { font-size: 13px; }' + '.select2-container .selection .select2-selection__rendered { font-size: 13px; }' + // Remove black border '.select2-container--default.select2-container--focus .select2-selection--multiple { border: 1px solid #aaa; }' + // Make the tiny cross larger '.select2-selection__choice__remove { font-size: 130%; }' ); } else { $form.find('fieldset[name="field_block_options"]').hide(); // Clear select2 options $form.find('[name=pagerestrictions]').val(null).trigger('change'); $form.find('[name=namespacerestrictions]').val(null).trigger('change'); } if (field_tag_options) { oldfield = $form.find('fieldset[name="field_tag_options"]')[0]; oldfield.parentNode.replaceChild(field_tag_options.render(), oldfield); } else { $form.find('fieldset[name="field_tag_options"]').hide(); } if (field_unblock_options) { oldfield = $form.find('fieldset[name="field_unblock_options"]')[0]; oldfield.parentNode.replaceChild(field_unblock_options.render(), oldfield); } else { $form.find('fieldset[name="field_unblock_options"]').hide(); } if (field_template_options) { oldfield = $form.find('fieldset[name="field_template_options"]')[0]; oldfield.parentNode.replaceChild(field_template_options.render(), oldfield); e.target.form.root.previewer = new Morebits.wiki.preview($(e.target.form.root).find('#twinkleblock-previewbox').last()[0]); } else { $form.find('fieldset[name="field_template_options"]').hide(); } if (blockBox && Twinkle.block.hasBlockLog) { var $blockloglink = $('<a target="_blank" href="' + mw.util.getUrl('Special:Log', {action: 'view', page: Morebits.wiki.flow.relevantUserName(true), type: 'block'}) + '">' + wgULS('封禁日志', '封鎖日誌') + '</a>)'); Morebits.status.init($('div[name="hasblocklog"] span').last()[0]); Morebits.status.warn( Twinkle.block.currentBlockInfo ? wgULS('封禁详情', '封鎖詳情') : [ wgULS('此用户曾在', '此使用者曾在'), $('<b>' + new Morebits.date(Twinkle.block.recentBlockLog.timestamp).calendar('utc') + '</b>')[0], '被' + Twinkle.block.recentBlockLog.user + wgULS('封禁', '封鎖'), $('<b>' + Morebits.string.formatTime(Twinkle.block.recentBlockLog.params.duration) + '</b>')[0], Twinkle.block.manualUnblock ? wgULS('(手动解封)', '(手動解封)') : wgULS('(自动过期)', '(自動過期)') ], $blockloglink[0] ); } if (blockBox && Twinkle.block.currentBlockInfo) { Morebits.status.init($('div[name="currentblock"] span').last()[0]); // list=blocks without bkprops (as we do in fetchUerInfo) // returns partial: '' if the user is partially blocked var statusStr = relevantUserName + (Twinkle.block.currentBlockInfo.partial === '' ? wgULS('已被部分封禁', '已被部分封鎖') : wgULS('已被全站封禁', '已被全站封鎖')); if (Twinkle.block.currentBlockInfo.expiry === 'infinity') { statusStr += '(' + wgULS('无限期', '無限期') + ')'; } else if (new Morebits.date(Twinkle.block.currentBlockInfo.expiry).isValid()) { statusStr += '(' + wgULS('终止于', '終止於') + new Morebits.date(Twinkle.block.currentBlockInfo.expiry).calendar('utc') + ')'; } var infoStr = wgULS('提交请求以变更封禁', '提交請求以變更封鎖'); if (Twinkle.block.currentBlockInfo.partial === undefined && partialBox) { infoStr += wgULS('为部分封禁', '為部分封鎖'); } else if (Twinkle.block.currentBlockInfo.partial === '' && !partialBox) { infoStr += wgULS('为全站封禁', '為全站封鎖'); } Morebits.status.warn(statusStr, infoStr); Twinkle.block.callback.update_form(e, Twinkle.block.currentBlockInfo); } if (templateBox) { // make sure all the fields are correct based on defaults if (blockBox) { Twinkle.block.callback.change_preset(e); } else { Twinkle.block.callback.change_template(e); } } }; /* * Keep alphabetized by key name, Twinkle.block.blockGroups establishes * the order they will appear in the interface * * Block preset format, all keys accept only 'true' (omit for false) except where noted: * <title of block template> : { * autoblock: <autoblock any IP addresses used (for registered users only)> * disabletalk: <disable user from editing their own talk page while blocked> * expiry: <string - expiry timestamp, can include relative times like "5 months", "2 weeks" etc, use "infinity" for indefinite> * forAnonOnly: <show block option in the interface only if the relevant user is an IP> * forRegisteredOnly: <show block option in the interface only if the relevant user is registered> * label: <string - label for the option of the dropdown in the interface (keep brief)> * noemail: prevent the user from sending email through Special:Emailuser * pageParam: <set if the associated block template accepts a page parameter> * prependReason: <string - prepends the value of 'reason' to the end of the existing reason, namely for when revoking talk page access> * nocreate: <block account creation from the user's IP (for anonymous users only)> * nonstandard: <template does not conform to stewardship of WikiProject User Warnings and may not accept standard parameters> * reason: <string - block rationale, as would appear in the block log, * and the edit summary for when adding block template, unless 'summary' is set> * reasonParam: <set if the associated block template accepts a reason parameter> * sig: <string - set to ~~~~ if block template does not accept "true" as the value, or set null to omit sig param altogether> * summary: <string - edit summary for when adding block template to user's talk page, if not set, 'reason' is used> * suppressArticleInSummary: <set to suppress showing the article name in the edit summary, as with attack pages> * templateName: <string - name of template to use (instead of key name), entry will be omitted from the Templates list. * (e.g. use another template but with different block options)> * useInitialOptions: <when preset is chosen, only change given block options, leave others as they were> * * WARNING: 'anononly' and 'allowusertalk' are enabled by default. * To disable, set 'hardblock' and 'disabletalk', respectively */ Twinkle.block.blockPresetsInfo = { 'anonblock': { expiry: '3 days', forAnonOnly: true, nocreate: true, nonstandard: true, reason: '{{anonblock}}', summary: wgULS('匿名编辑封禁', '匿名編輯封鎖'), sig: '~~~~' }, 'blocked proxy': { expiry: '2 years', nocreate: true, hardblock: true, nonstandard: true, reason: '{{blocked proxy}}', summary: wgULS('开放代理封禁', '開放代理封鎖'), sig: '~~~~' }, 'CheckUser block': { expiry: '1 week', forAnonOnly: true, nocreate: true, hardblock: true, nonstandard: true, reason: '{{CheckUser block}}', summary: wgULS('用户查核IP封禁', '使用者查核IP封鎖'), sig: '~~~~' }, 'checkuserblock-account': { autoblock: true, expiry: 'infinity', forRegisteredOnly: true, nocreate: true, nonstandard: true, reason: '{{checkuserblock-account}}', summary: wgULS('用户查核账户封禁', '使用者查核帳號封鎖'), sig: '~~~~' }, 'range block': { expiry: '1 week', forAnonOnly: true, nocreate: true, nonstandard: true, reason: '<!-- 請登入您的帳號,若無帳號,請閱讀 https://w.wiki/Jyi -->{{range block}}', summary: wgULS('广域封禁', '廣域封鎖'), sig: '~~~~' }, 'school block': { forAnonOnly: true, nocreate: true, nonstandard: true, reason: '{{School block}}', summary: wgULS('公用IP封禁', '公共IP封鎖'), sig: '~~~~' }, // uw-prefixed 'uw-3block': { autoblock: true, expiry: '1 day', nocreate: true }, 'uw-ablock': { autoblock: true, expiry: '1 day', forAnonOnly: true, nocreate: true, reasonParam: true }, 'uw-block': { autoblock: true, nocreate: true, reasonParam: true }, 'uw-blockindef': { autoblock: true, expiry: 'infinity', nocreate: true, reasonParam: true }, 'uw-dblock': { autoblock: true, nocreate: true }, 'uw-sblock': { autoblock: true, nocreate: true }, 'uw-ublock': { expiry: 'infinity', summary: wgULS('不当用户名', '不當使用者名稱') }, 'uw-ublock|误导': { expiry: 'infinity', reason: wgULS('{{uw-ublock|误导}}', '{{uw-ublock|誤導}}'), summary: wgULS('误导性用户名', '誤導性使用者名稱') }, 'uw-ublock|宣传': { expiry: 'infinity', reason: wgULS('{{uw-ublock|宣传}}', '{{uw-ublock|宣傳}}'), summary: wgULS('宣传性用户名', '宣傳性使用者名稱') }, 'uw-ublock|攻击|或侮辱性': { expiry: 'infinity', reason: wgULS('{{uw-ublock|攻击|或侮辱性}}', '{{uw-ublock|攻擊|或侮辱性}}'), summary: wgULS('攻击或侮辱性用户名', '攻擊或侮辱性使用者名稱') }, 'uw-ublock|混淆': { expiry: 'infinity', reason: '{{uw-ublock|混淆}}', summary: wgULS('令人混淆的用户名', '令人混淆的使用者名稱') }, 'uw-vblock': { autoblock: true, expiry: '1 day', nocreate: true }, 'Bot block message': { expiry: 'infinity', sig: '~~~~' }, 'uw-pblock': { autoblock: true, expiry: '1 day', nocreate: false, pageParam: false, reasonParam: true, summary: '您已被禁止編輯維基百科的部分區域' } }; Twinkle.block.blockGroupsUpdated = false; Twinkle.block.transformBlockPresets = function twinkleblockTransformBlockPresets() { // supply sensible defaults $.each(Twinkle.block.blockPresetsInfo, function(preset, settings) { settings.summary = settings.summary || settings.reason; settings.sig = settings.sig !== undefined ? settings.sig : 'yes'; settings.indefinite = settings.indefinite || Morebits.string.isInfinity(settings.expiry); if (!Twinkle.block.isRegistered && settings.indefinite) { settings.expiry = '1 day'; } else { settings.expiry = settings.expiry || '1 day'; } Twinkle.block.blockPresetsInfo[preset] = settings; }); if (!Twinkle.block.blockGroupsUpdated) { $.each(Twinkle.block.blockGroups.concat(Twinkle.block.blockGroupsPartial), function(_, blockGroup) { if (blockGroup.custom) { blockGroup.list = Twinkle.getPref('customBlockReasonList'); } $.each(blockGroup.list, function(_, blockPreset) { var value = blockPreset.value, reason = blockPreset.label, newPreset = value + ':' + reason; Twinkle.block.blockPresetsInfo[newPreset] = jQuery.extend(true, {}, Twinkle.block.blockPresetsInfo[value]); Twinkle.block.blockPresetsInfo[newPreset].template = value; if (blockGroup.meta) { // Twinkle.block.blockPresetsInfo[newPreset].forAnonOnly = false; Twinkle.block.blockPresetsInfo[newPreset].forRegisteredOnly = false; } else if (reason) { Twinkle.block.blockPresetsInfo[newPreset].reason = reason; } if (blockGroup.custom && Twinkle.block.blockPresetsInfo[blockPreset.value] === undefined) { Twinkle.block.blockPresetsInfo[newPreset].reasonParam = true; Twinkle.block.blockPresetsInfo[blockPreset.value] = Twinkle.block.blockPresetsInfo[newPreset]; } if (blockGroup.custom && Twinkle.block.blockPresetsInfo[blockPreset.value].expiry === undefined) { Twinkle.block.blockPresetsInfo[blockPreset.value].expiry = '1 day'; } blockPreset.value = newPreset; }); }); Twinkle.block.blockGroupsUpdated = true; } }; // These are the groups of presets and defines the order in which they appear. For each list item: // label: <string, the description that will be visible in the dropdown> // value: <string, the key of a preset in blockPresetsInfo> Twinkle.block.blockGroups = [ { meta: true, label: '封禁模板', list: [ { label: wgULS('一般封禁', '一般封鎖'), value: 'uw-block' }, { label: wgULS('永久封禁', '永久封鎖'), value: 'uw-blockindef' }, { label: '匿名封禁', value: 'uw-ablock', forAnonOnly: true } ] }, { label: '一般的封禁理由', list: [ { label: wgULS('[[WP:VAN|破坏]]', '[[WP:VAN|破壞]]'), value: 'uw-vblock' }, { label: wgULS('[[WP:VAN#LANG|繁简破坏]]', '[[WP:VAN#LANG|繁簡破壞]]'), value: 'uw-block' }, { label: wgULS('跨维基项目破坏', '跨維基項目破壞'), value: 'uw-block', forRegisteredOnly: true }, { label: wgULS('[[WP:VOA|纯粹破坏]]', '[[WP:VOA|純粹破壞]]'), value: 'uw-blockindef', forRegisteredOnly: true }, { label: wgULS('不断加入[[Wikipedia:垃圾内容|垃圾链接]]', '不斷加入[[Wikipedia:垃圾內容|垃圾連結]]'), value: 'uw-sblock' }, { label: wgULS('[[WP:SOAP|散发广告/宣传]]', '[[WP:SOAP|散發廣告/宣傳]]'), value: 'uw-block' }, { label: wgULS('仅[[WP:SOAP|散发广告/宣传]]', '僅[[WP:SOAP|散發廣告/宣傳]]'), value: 'uw-blockindef', forRegisteredOnly: true }, { label: wgULS('违反[[WP:3RR|回退不过三原则]]', '違反[[WP:3RR|回退不過三原則]]'), value: 'uw-3block' }, { label: wgULS('无礼的行为、[[WP:NPA|攻击别人]]', '無禮的行為、[[WP:NPA|攻擊別人]]'), value: 'uw-block' }, { label: wgULS('[[WP:骚扰|骚扰用户]]', '[[WP:騷擾|騷擾使用者]]'), value: 'uw-block' }, { label: wgULS('[[WP:POINT|为了阐释观点而扰乱维基百科]]', '[[WP:POINT|為了闡釋觀點而擾亂維基百科]]'), value: 'uw-block' }, { label: wgULS('[[WP:GAME|游戏维基规则]]', '[[WP:GAME|遊戲維基規則]]'), value: 'uw-block' }, { label: wgULS('确认为[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 根据用户贡献确定', '確認為[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 根據使用者貢獻確定'), value: 'uw-block', forAnonOnly: true }, { label: wgULS('确认为[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 用户查核确认', '確認為[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 使用者查核確認'), value: 'uw-block', forAnonOnly: true }, { label: wgULS('确认为[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 根据用户贡献确定', '確認為[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 根據使用者貢獻確定'), value: 'uw-blockindef', forRegisteredOnly: true }, { label: wgULS('确认为[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 用户查核确认', '確認為[[WP:SOCK|傀儡]]或[[WP:MEAT|真人傀儡]] - 使用者查核確認'), value: 'uw-blockindef', forRegisteredOnly: true }, { label: wgULS('滥用[[WP:SOCK|傀儡]]', '濫用[[WP:SOCK|傀儡]]'), value: 'uw-block', forRegisteredOnly: true }, { label: wgULS('屡次增加不实资料', '屢次增加不實資料'), value: 'uw-block' }, { label: wgULS('在条目中增加无意义文字', '在條目中增加無意義文字'), value: 'uw-block' }, { label: wgULS('无故删除条目内容', '無故刪除條目內容'), value: 'uw-dblock' }, { label: wgULS('多次加入[[WP:COPYVIO|侵犯著作权]]的内容', '多次加入[[WP:COPYVIO|侵犯著作權]]的內容'), value: 'uw-block' }, { label: wgULS('机器人发生故障并必须紧急停止', '機器人發生故障並必須緊急停止'), value: 'Bot block message', forRegisteredOnly: true } // { label: wgULS('剥夺编辑讨论页权限', '剝奪編輯討論頁權限'), value: '' } ] }, { custom: true, label: wgULS('自定义的封禁理由', '自訂的封鎖理由') }, { label: wgULS('用户名封禁', '使用者名稱封鎖'), list: [ { label: '', value: 'uw-ublock|误导', forRegisteredOnly: true }, { label: '', value: 'uw-ublock|宣传', forRegisteredOnly: true }, { label: '', value: 'uw-ublock|攻击|或侮辱性', forRegisteredOnly: true }, { label: '', value: 'uw-ublock|混淆', forRegisteredOnly: true } ] }, { label: '其他模板', list: [ { label: '', value: 'uw-ublock', forRegisteredOnly: true }, { label: '', value: 'anonblock', forAnonOnly: true }, { label: '', value: 'range block', forAnonOnly: true }, { label: '', value: 'school block', forAnonOnly: true }, { label: '', value: 'blocked proxy', forAnonOnly: true }, { label: '', value: 'CheckUser block', forAnonOnly: true }, { label: '', value: 'checkuserblock-account', forRegisteredOnly: true } ] } ]; Twinkle.block.blockGroupsPartial = [ { label: wgULS('部分封禁原因', '部分封鎖原因'), list: [ { label: wgULS('部分封禁', '部分封鎖'), value: 'uw-pblock', selected: true } ] } ]; Twinkle.block.callback.filtered_block_groups = function twinkleblockCallbackFilteredBlockGroups(group, show_template) { return $.map(group, function(blockGroup) { if (!show_template && blockGroup.meta) { return; } var list = $.map(blockGroup.list, function(blockPreset) { // only show uw-talkrevoked if reblocking if (!Twinkle.block.currentBlockInfo && blockPreset.value === 'uw-talkrevoked') { return; } var blockSettings = Twinkle.block.blockPresetsInfo[blockPreset.value]; var registrationRestrict = blockPreset.forRegisteredOnly ? Twinkle.block.isRegistered : blockPreset.forAnonOnly ? !Twinkle.block.isRegistered : true; if (!(blockSettings.templateName && show_template) && registrationRestrict) { var templateName = blockSettings.templateName || blockSettings.template || blockPreset.value; return { label: (show_template ? '{{' + templateName + '}}: ' : '') + (blockPreset.label || '{{' + templateName + '}}'), value: blockPreset.value, data: [{ name: 'template-name', value: templateName }], selected: !!blockPreset.selected }; } }); if (list.length) { return { label: blockGroup.label, list: list }; } }); }; Twinkle.block.callback.change_preset = function twinkleblockCallbackChangePreset(e) { var key = e.target.form.preset.value; if (!key) { return; } e.target.form.template.value = Twinkle.block.blockPresetsInfo[key].templateName || key; e.target.form.template.value = key; Twinkle.block.callback.update_form(e, Twinkle.block.blockPresetsInfo[key]); Twinkle.block.callback.change_template(e); }; Twinkle.block.callback.change_expiry = function twinkleblockCallbackChangeExpiry(e) { var expiry = e.target.form.expiry; if (e.target.value === 'custom') { Morebits.quickForm.setElementVisibility(expiry.parentNode, true); } else { Morebits.quickForm.setElementVisibility(expiry.parentNode, false); expiry.value = e.target.value; } }; Twinkle.block.seeAlsos = []; Twinkle.block.callback.toggle_see_alsos = function twinkleblockCallbackToggleSeeAlso() { var reason = this.form.reason.value.replace( new RegExp('(<!-- )(参见|參見)' + Twinkle.block.seeAlsos.join('、') + '( -->)'), '' ); Twinkle.block.seeAlsos = Twinkle.block.seeAlsos.filter(function(el) { return el !== this.value; }.bind(this)); if (this.checked) { Twinkle.block.seeAlsos.push(this.value); } var seeAlsoMessage = Twinkle.block.seeAlsos.join('、'); if (!Twinkle.block.seeAlsos.length) { this.form.reason.value = reason; } else { this.form.reason.value = reason + '<!-- ' + wgULS('参见', '參見') + seeAlsoMessage + ' -->'; } }; Twinkle.block.callback.update_form = function twinkleblockCallbackUpdateForm(e, data) { var form = e.target.form, expiry = data.expiry; // don't override original expiry if useInitialOptions is set if (!data.useInitialOptions) { if (Date.parse(expiry)) { expiry = new Date(expiry).toGMTString(); form.expiry_preset.value = 'custom'; } else { form.expiry_preset.value = data.expiry || 'custom'; } form.expiry.value = expiry; if (form.expiry_preset.value === 'custom') { Morebits.quickForm.setElementVisibility(form.expiry.parentNode, true); } else { Morebits.quickForm.setElementVisibility(form.expiry.parentNode, false); } } // boolean-flipped options, more at [[mw:API:Block]] data.disabletalk = data.disabletalk !== undefined ? data.disabletalk : false; data.hardblock = data.hardblock !== undefined ? data.hardblock : false; // disable autoblock if blocking a bot if (Twinkle.block.userIsBot || relevantUserName.search(/bot\b/i) > 0) { data.autoblock = false; } $(form).find('[name=field_block_options]').find(':checkbox').each(function(i, el) { // don't override original options if useInitialOptions is set if (data.useInitialOptions && data[el.name] === undefined) { return; } if (el.name === 'closevip') { return; } var check = data[el.name] === '' || !!data[el.name]; $(el).prop('checked', check); }); if (data.prependReason && data.reason) { form.reason.value = data.reason + '; ' + form.reason.value; } else { form.reason.value = data.reason || ''; } }; Twinkle.block.callback.change_template = function twinkleblockcallbackChangeTemplate(e) { var form = e.target.form, value = form.template.value, settings = Twinkle.block.blockPresetsInfo[value]; var blockBox = $(form).find('[name=actiontype][value=block]').is(':checked'); var partialBox = $(form).find('[name=actiontype][value=partial]').is(':checked'); var templateBox = $(form).find('[name=actiontype][value=template]').is(':checked'); // Block form is not present if (!blockBox) { if (settings.indefinite || settings.nonstandard) { if (Twinkle.block.prev_template_expiry === null) { Twinkle.block.prev_template_expiry = form.template_expiry.value || ''; } form.template_expiry.parentNode.style.display = 'none'; form.template_expiry.value = 'infinity'; } else if (form.template_expiry.parentNode.style.display === 'none') { if (Twinkle.block.prev_template_expiry !== null) { form.template_expiry.value = Twinkle.block.prev_template_expiry; Twinkle.block.prev_template_expiry = null; } form.template_expiry.parentNode.style.display = 'block'; } if (Twinkle.block.prev_template_expiry) { form.expiry.value = Twinkle.block.prev_template_expiry; } Morebits.quickForm.setElementVisibility(form.notalk.parentNode, !settings.nonstandard); // Partial // Morebits.quickForm.setElementVisibility(form.noemail_template.parentNode, partialBox); // Morebits.quickForm.setElementVisibility(form.nocreate_template.parentNode, partialBox); } else if (templateBox) { // Only present if block && template forms both visible Morebits.quickForm.setElementVisibility( form.blank_duration.parentNode, !settings.indefinite && !settings.nonstandard ); } // Only particularly relevant if template form is present Morebits.quickForm.setElementVisibility(form.article.parentNode, settings && !!settings.pageParam); Morebits.quickForm.setElementVisibility(form.block_reason.parentNode, settings && !!settings.reasonParam); form.block_reason.value = settings.reason || ''; // Partial block Morebits.quickForm.setElementVisibility(form.area.parentNode, partialBox && !blockBox); form.root.previewer.closePreview(); }; Twinkle.block.prev_template_expiry = null; Twinkle.block.prev_block_reason = null; Twinkle.block.prev_article = null; Twinkle.block.prev_reason = null; Twinkle.block.callback.preview = function twinkleblockcallbackPreview(form) { var params = { article: form.article.value, blank_duration: form.blank_duration ? form.blank_duration.checked : false, disabletalk: form.disabletalk.checked || (form.notalk ? form.notalk.checked : false), expiry: form.template_expiry ? form.template_expiry.value : form.expiry.value, hardblock: Twinkle.block.isRegistered ? form.autoblock.checked : form.hardblock.checked, indefinite: Morebits.string.isInfinity(form.template_expiry ? form.template_expiry.value : form.expiry.value), reason: form.block_reason.value, template: form.template.value.split(':', 1)[0], partial: $(form).find('[name=actiontype][value=partial]').is(':checked'), pagerestrictions: $(form.pagerestrictions).val() || [], namespacerestrictions: $(form.namespacerestrictions).val() || [], // noemail: form.noemail.checked || (form.noemail_template ? form.noemail_template.checked : false), // nocreate: form.nocreate.checked || (form.nocreate_template ? form.nocreate_template.checked : false), area: form.area.value }; var templateText = Twinkle.block.callback.getBlockNoticeWikitext(params); form.previewer.beginRender(templateText); }; Twinkle.block.callback.evaluate = function twinkleblockCallbackEvaluate(e) { var params = Morebits.quickForm.getInputData(e.target); var $form = $(e.target), toBlock = $form.find('[name=actiontype][value=block]').is(':checked'), toWarn = $form.find('[name=actiontype][value=template]').is(':checked'), toPartial = $form.find('[name=actiontype][value=partial]').is(':checked'), toTag = $form.find('[name=actiontype][value=tag]').is(':checked'), toProtect = $form.find('[name=actiontype][value=protect]').is(':checked'), toUnblock = $form.find('[name=actiontype][value=unblock]').is(':checked'), blockoptions = {}, templateoptions = {}, unblockoptions = {}; Twinkle.block.callback.saveFieldset($form.find('[name=field_block_options]')); Twinkle.block.callback.saveFieldset($form.find('[name=field_template_options]')); Twinkle.block.callback.saveFieldset($form.find('[name=field_tag_options]')); Twinkle.block.callback.saveFieldset($form.find('[name=field_unblock_options]')); blockoptions = Twinkle.block.field_block_options; unblockoptions = Twinkle.block.field_unblock_options; var toClosevip = !!blockoptions.closevip; templateoptions = Twinkle.block.field_template_options; templateoptions.disabletalk = !!(templateoptions.disabletalk || blockoptions.disabletalk); templateoptions.hardblock = !!blockoptions.hardblock; // remove extraneous delete blockoptions.expiry_preset; delete blockoptions.closevip; // Partial API requires this to be gone, not false or 0 if (toPartial) { blockoptions.partial = templateoptions.partial = true; } templateoptions.pagerestrictions = $form.find('[name=pagerestrictions]').val() || []; templateoptions.namespacerestrictions = $form.find('[name=namespacerestrictions]').val() || []; // Format for API here rather than in saveFieldset blockoptions.pagerestrictions = templateoptions.pagerestrictions.join('|'); blockoptions.namespacerestrictions = templateoptions.namespacerestrictions.join('|'); // use block settings as warn options where not supplied templateoptions.summary = templateoptions.summary || blockoptions.reason; templateoptions.expiry = templateoptions.template_expiry || blockoptions.expiry; // Check tags // Given an array of incompatible tags, check if we have two or more selected var checkIncompatible = function(conflicts, extra) { var count = conflicts.reduce(function(sum, tag) { return sum += params.tag.indexOf(tag) !== -1; }, 0); if (count > 1) { var message = wgULS('请在以下标签中择一使用', '請在以下標籤中擇一使用') + ':{{' + conflicts.join('}}、{{') + '}}。'; message += extra ? extra : ''; alert(message); return true; } }; if (toTag) { if (params.tag.length === 0) { return alert(wgULS('请至少选择一个用户页标记!', '請至少選擇一個使用者頁面標記!')); } if (checkIncompatible(['Blocked user', 'Sockpuppet'], wgULS('{{Sockpuppet}}已涵盖{{Blocked user}}的功能。', '{{Sockpuppet}}已涵蓋{{Blocked user}}的功能。'))) { return; } if (checkIncompatible(['Blocked user', 'Sockpuppeteer'], wgULS('{{Sockpuppeteer}}已涵盖{{Blocked user}}的功能。', '{{Sockpuppeteer}}已涵蓋{{Blocked user}}的功能。'))) { return; } if (checkIncompatible(['Blocked user', 'Locked global account'], wgULS('请使用{{Locked global account}}的“亦被本地封禁”选项。', '請使用{{Locked global account}}的「亦被本地封鎖」選項。'))) { return; } if (checkIncompatible(['Sockpuppet', 'Sockpuppeteer'], wgULS('请从主账户和分身账户中选择一个。', '請從主帳號和分身帳號中選擇一個。'))) { return; } if (params.tag.indexOf('Sockpuppet') > -1 && params.sppUsername.trim() === '') { return alert(wgULS('请提供傀儡账户的主账户用户名!', '請提供傀儡帳號的主帳號使用者名稱!')); } } if (toBlock) { if (blockoptions.partial) { if (blockoptions.disabletalk && blockoptions.namespacerestrictions.indexOf('3') === -1) { return alert(wgULS('部分封禁无法阻止编辑自己的讨论页,除非也封禁了User talk命名空间!', '部分封鎖無法阻止編輯自己的討論頁,除非也封鎖了User talk命名空間!')); } if (!blockoptions.namespacerestrictions && !blockoptions.pagerestrictions) { if (!blockoptions.noemail && !blockoptions.nocreate) { // Blank entries technically allowed [[phab:T208645]] return alert(wgULS('没有选择页面或命名空间,也没有停用电子邮件或禁止创建账户;请选择至少一个选项以应用部分封禁!', '沒有選擇頁面或命名空間,也沒有停用電子郵件或禁止建立帳號;請選擇至少一個選項以應用部分封鎖!')); } else if (!confirm(wgULS('您将要进行封禁,但没有阻止任何页面或命名空间的编辑,确定要继续?', '您將要進行封鎖,但沒有阻止任何頁面或命名空間的編輯,確定要繼續?'))) { return; } } } if (!blockoptions.expiry) { return alert(wgULS('请提供过期时间!', '請提供過期時間!')); } else if (Morebits.string.isInfinity(blockoptions.expiry) && !Twinkle.block.isRegistered) { return alert(wgULS('禁止无限期封禁IP地址!', '禁止無限期封鎖IP位址!')); } if (!blockoptions.reason) { return alert(wgULS('请提供封禁理由!', '請提供封鎖理由!')); } Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(e.target); var statusElement = new Morebits.status(wgULS('执行封禁', '執行封鎖')); blockoptions.action = 'block'; blockoptions.user = Morebits.wiki.flow.relevantUserName(true); // boolean-flipped options blockoptions.anononly = blockoptions.hardblock ? undefined : true; blockoptions.allowusertalk = blockoptions.disabletalk ? undefined : true; // fix for bug with block API, see [[phab:T68646]] if (blockoptions.expiry === 'infinity') { blockoptions.expiry = 'infinite'; } /* Check if block status changed while processing the form. There's a lot to consider here. list=blocks provides the current block status, but there are at least two issues with relying on it. First, the id doesn't update on a reblock, meaning the individual parameters need to be compared. This can be done roughly with JSON.stringify - we can thankfully rely on order from the server, although sorting would be fine if not - but falsey values are problematic and is non-ideal. More importantly, list=blocks won't indicate if a non-blocked user is blocked then unblocked. This should be exceedingy rare, but regardless, we thus need to check list=logevents, which has a nicely updating logid parameter. We can't rely just on that, though, since it doesn't account for blocks that have expired on their own. As such, we use both. Using some ternaries, the logid variables are false if there's no logevents, so if they aren't equal we defintely have a changed entry (send confirmation). If they are equal, then either the user was never blocked (the block statuses will be equal, no confirmation) or there's no new block, in which case either a block expired (different statuses, confirmation) or the same block is still active (same status, no confirmation). */ var query = { format: 'json', action: 'query', list: 'blocks|logevents', letype: 'block', lelimit: 1, letitle: 'User:' + blockoptions.user }; if (Morebits.ip.isRange(blockoptions.user)) { query.bkip = blockoptions.user; } else { query.bkusers = blockoptions.user; } if (!mw.util.isIPAddress(blockoptions.user, true)) { query.list += '|users'; query.usprop = 'groups'; query.ususers = blockoptions.user; query.meta = 'tokens'; query.type = 'userrights'; } api.get(query).then(function(data) { var block = data.query.blocks[0]; var logevents = data.query.logevents[0]; var user = data.query.users ? data.query.users[0] : null; var logid = data.query.logevents.length ? logevents.logid : false; if (logid !== Twinkle.block.blockLogId || !!block !== !!Twinkle.block.currentBlockInfo) { var message = mw.config.get('wgRelevantUserName') + wgULS('的封禁状态已被修改。', '的封鎖狀態已被修改。'); if (block) { message += wgULS('新状态:', '新狀態:'); } else { message += wgULS('最新日志:', '最新日誌:'); } var logExpiry = ''; if (logevents.params.duration) { if (logevents.params.duration === 'infinity') { logExpiry = wgULS('无限期', '無限期'); } else { var expiryDate = new Morebits.date(logevents.params.expiry); logExpiry += '到' + expiryDate.calendar(); } } else { // no duration, action=unblock, just show timestamp logExpiry = '於' + new Morebits.date(logevents.timestamp).calendar(); } message += '由' + logevents.user + wgULS('以“', '以「') + logevents.comment + wgULS('”', '」') + blockActionText[logevents.action] + logExpiry + wgULS(',你想要以你的设置变更封禁吗?', ',你想要以你的設定變更封鎖嗎?'); if (!confirm(message)) { Morebits.status.error(wgULS('执行封禁', '執行封鎖'), wgULS('用户取消操作', '使用者取消操作')); return; } blockoptions.reblock = 1; // Writing over a block will fail otherwise } var groupsCanBeRemoved = [ 'autoreviewer', 'confirmed', 'eventparticipant', 'filemover', 'ipblock-exempt', 'massmessage-sender', 'patroller', 'rollbacker', 'templateeditor', 'transwiki' ]; var groupsToBeRemoved = []; if (user && Morebits.string.isInfinity(blockoptions.expiry)) { groupsToBeRemoved = user.groups.filter(function (group) { return groupsCanBeRemoved.indexOf(group) > -1; }); } // execute block blockoptions.tags = Twinkle.changeTags; blockoptions.token = mw.user.tokens.get('csrfToken'); var mbApi = new Morebits.wiki.api(wgULS('执行封禁', '執行封鎖'), blockoptions, function() { statusElement.info('完成'); if (toWarn) { Twinkle.block.callback.issue_template(templateoptions); } if (toClosevip) { var vipPage = new Morebits.wiki.page('Wikipedia:当前的破坏', wgULS('关闭请求', '關閉請求')); vipPage.setFollowRedirect(true); vipPage.setCallbackParameters(blockoptions); vipPage.load(Twinkle.block.callback.closeRequest); } if (groupsToBeRemoved.length > 0) { var rightStatusElement = new Morebits.status(wgULS('移除权限', '移除權限')); if (confirm(wgULS('该用户有以下权限:', '該使用者有以下權限:') + groupsToBeRemoved.join('、') + wgULS(',您是否想要同时移除这些权限?', ',您是否想要同時移除這些權限?'))) { var revokeOptions = { action: 'userrights', user: blockoptions.user, remove: groupsToBeRemoved.join('|'), reason: wgULS('用户已被无限期封禁', '使用者已被無限期封鎖'), token: data.query.tokens.userrightstoken, tags: Twinkle.changeTags }; var mrApi = new Morebits.wiki.api(wgULS('移除权限', '移除權限'), revokeOptions, function() { rightStatusElement.info('已移除' + groupsToBeRemoved.join('、')); }); mrApi.post(); } else { rightStatusElement.error(wgULS('用户取消操作。', '使用者取消操作。')); } } }); mbApi.post(); }); } else if (toWarn) { Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(e.target); Twinkle.block.callback.issue_template(templateoptions); } if (toTag || toProtect) { Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(e.target); var userPage = 'User:' + Morebits.wiki.flow.relevantUserName(true); var wikipedia_page = new Morebits.wiki.page(userPage, wgULS('标记或保护用户页', '標記或保護使用者頁面')); wikipedia_page.setCallbackParameters(params); wikipedia_page.load(Twinkle.block.callback.taguserpage); } if (toUnblock) { if (!unblockoptions.reason) { return alert(wgULS('请提供解除封禁理由!', '請提供解除封鎖理由!')); } Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(e.target); var unblockStatusElement = new Morebits.status(wgULS('执行解除封禁', '執行解除封鎖')); unblockoptions.action = 'unblock'; unblockoptions.user = Morebits.wiki.flow.relevantUserName(true); // execute unblock unblockoptions.tags = Twinkle.changeTags; unblockoptions.token = mw.user.tokens.get('csrfToken'); var unblockMbApi = new Morebits.wiki.api(wgULS('执行解除封禁', '執行解除封鎖'), unblockoptions, function() { unblockStatusElement.info('完成'); }); unblockMbApi.post(); } if (!toBlock && !toWarn && !toTag && !toProtect && !toUnblock) { return alert(wgULS('请给Twinkle点事做!', '請給Twinkle點事做!')); } }; Twinkle.block.callback.taguserpage = function twinkleblockCallbackTagUserpage(pageobj) { var params = pageobj.getCallbackParameters(); var statelem = pageobj.getStatusElement(); if (params.actiontype.indexOf('tag') > -1) { var tags = []; params.tag.forEach(function(tag) { var tagtext = '{{' + tag; switch (tag) { case 'Blocked user': break; case 'Sockpuppet': tagtext += '\n| 1 = ' + params.sppUsername.trim(); tagtext += '\n| 2 = ' + params.sppType.trim(); if (params.sppEvidence.trim()) { tagtext += '\n| evidence = ' + params.sppEvidence.trim(); } tagtext += '\n| locked = no'; tagtext += '\n| notblocked = no'; tagtext += '\n'; break; case 'Sockpuppeteer': tagtext += '\n| 1 = blocked'; tagtext += '\n| checked = ' + (params.spmChecked ? 'yes' : ''); if (params.spmEvidence.trim()) { tagtext += '\n| evidence = ' + params.spmEvidence.trim(); } tagtext += '\n'; break; case 'Locked global account': if (params.lockBlocked) { tagtext += '|blocked=yes'; } break; default: return alert(wgULS('未知的用户页模板!', '未知的使用者頁面模板!')); } tagtext += '}}'; tags.push(tagtext); }); var text = tags.join('\n'); if (params.category) { text += '\n[[Category:' + params.category.trim() + '的維基用戶分身]]'; } pageobj.setPageText(text); pageobj.setEditSummary(wgULS('标记被永久封禁的用户页', '標記被永久封鎖的使用者頁面')); pageobj.setChangeTags(Twinkle.changeTags); pageobj.save(function() { Morebits.status.info(wgULS('标记用户页', '標記使用者頁面'), '完成'); statelem.status(wgULS('正在保护页面', '正在保護頁面')); pageobj.load(Twinkle.block.callback.protectuserpage); }); } else { Twinkle.block.callback.protectuserpage(pageobj); } }; Twinkle.block.callback.protectuserpage = function twinkleblockCallbackProtectUserpage(pageobj) { var params = pageobj.getCallbackParameters(); var statelem = pageobj.getStatusElement(); if (params.actiontype.indexOf('protect') > -1) { if (pageobj.exists()) { pageobj.setEditProtection('sysop', 'indefinite'); pageobj.setMoveProtection('sysop', 'indefinite'); } else { pageobj.setCreateProtection('sysop', 'indefinite'); } pageobj.setEditSummary(wgULS('被永久封禁的用户页', '被永久封鎖的使用者頁面')); pageobj.setChangeTags(Twinkle.changeTags); pageobj.protect(function() { Morebits.status.info(wgULS('保护用户页', '保護使用者頁面'), pageobj.exists() ? wgULS('已全保护', '已全保護') : wgULS('已白纸保护', '已白紙保護')); statelem.info('全部完成'); }); } else { statelem.info('全部完成'); } }; Twinkle.block.callback.issue_template = function twinkleblockCallbackIssueTemplate(formData) { if (Morebits.ip.isRange(Morebits.wiki.flow.relevantUserName(true))) { new Morebits.status(wgULS('信息', '資訊'), wgULS('由于封禁目标为IP段,加入封禁模板已略过', '由於封鎖目標為IP段,加入封鎖模板已略過'), 'warn'); return; } var userTalkPage = 'User_talk:' + Morebits.wiki.flow.relevantUserName(true); var params = $.extend(formData, { messageData: Twinkle.block.blockPresetsInfo[formData.template], reason: Twinkle.block.field_template_options.block_reason, disabletalk: Twinkle.block.field_template_options.notalk // noemail: Twinkle.block.field_template_options.noemail_template, // nocreate: Twinkle.block.field_template_options.nocreate_template }); params.template = params.template.split(':', 1)[0]; Morebits.wiki.actionCompleted.redirect = userTalkPage; Morebits.wiki.actionCompleted.notice = wgULS('完成,将在几秒后加载用户讨论页', '完成,將在幾秒後載入使用者討論頁'); Morebits.wiki.flow.check(userTalkPage, function () { var flowpage = new Morebits.wiki.flow(userTalkPage, wgULS('用户Flow讨论页留言', '使用者Flow討論頁留言')); flowpage.setCallbackParameters(params); Twinkle.block.callback.main_flow(flowpage); }, function () { var wikipedia_page = new Morebits.wiki.page(userTalkPage, wgULS('用户讨论页修改', '使用者討論頁修改')); wikipedia_page.setCallbackParameters(params); wikipedia_page.setFollowRedirect(true); wikipedia_page.load(Twinkle.block.callback.main); }); }; Twinkle.block.callback.closeRequest = function twinkleblockCallbackCloseRequest(vipPage) { var params = vipPage.getCallbackParameters(); var text = vipPage.getPageText(); var statusElement = vipPage.getStatusElement(); var userName = Morebits.wiki.flow.relevantUserName(true); var expiryText = Morebits.string.formatTime(params.expiry); var comment = '{{Blocked|' + (Morebits.string.isInfinity(params.expiry) ? 'indef' : expiryText) + '}}。'; var requestList = text.split(/(?=\n===.+===\s*\n)/); var found = false; var hidename = false; var vipRe = new RegExp('===\\s*{{\\s*[Vv]andal\\s*\\|\\s*(1\\s*=\\s*)?' + Morebits.pageNameRegex(userName) + '\\s*(\\|\\s*hidename\\s*=[^|]+)?}}\\s*===', 'm'); for (var i = 1; i < requestList.length; i++) { if (vipRe.exec(requestList[i])) { hidename = /\|\s*hidename\s*=[^|]+/.test(requestList[i]); requestList[i] = requestList[i].trimRight(); var newText = requestList[i].replace(/^(\*\s*处理:)[ \t]*(<!-- 非管理員僅可標記已執行的封禁,針對提報的意見請放在下一行 -->)?[ \t]*$/m, '$1' + comment + '--~~~~'); if (requestList[i] === newText) { newText = requestList[i] + '\n* 处理:' + comment + '--~~~~'; } requestList[i] = newText + '\n'; found = true; break; } } if (!found) { statusElement.warn(wgULS('没有找到相关的请求', '沒有找到相關的請求')); return; } text = requestList.join(''); var summary; if (hidename) { summary = wgULS('标记为已处理', '標記為已處理'); } else { summary = '/* ' + userName + ' */ '; if (Morebits.string.isInfinity(params.expiry)) { summary += wgULS('不限期封禁', '不限期封鎖'); } else { summary += wgULS('封禁', '封鎖') + expiryText; } } vipPage.setEditSummary(summary); vipPage.setChangeTags(Twinkle.changeTags); vipPage.setPageText(text); vipPage.save(); }; Twinkle.block.callback.getBlockNoticeWikitext = function(params, nosign) { var text = '{{', settings = Twinkle.block.blockPresetsInfo[params.template]; if (!settings.nonstandard) { text += 'subst:' + params.template; if (params.article && settings.pageParam) { text += '|page=' + params.article; } if (!/te?mp|^\s*$|min/.exec(params.expiry)) { if (params.indefinite) { text += '|indef=yes'; } else if (!params.blank_duration) { text += '|time=' + Morebits.string.formatTime(params.expiry); } } if (!Twinkle.block.isRegistered && !params.hardblock) { text += '|anon=yes'; } if (params.reason) { text += '|reason=' + params.reason; } if (params.disabletalk) { text += '|notalk=yes'; } text += '|subst=subst:'; // Currently, all partial block templates are "standard" // Building the template, however, takes a fair bit of logic if (params.partial) { if (params.pagerestrictions.length || params.namespacerestrictions.length) { var makeSentence = function (array) { if (array.length < 3) { return array.join('和'); } var last = array.pop(); return array.join('、') + '和' + last; }; text += '|area=某些'; if (params.pagerestrictions.length) { text += '頁面(' + makeSentence(params.pagerestrictions.map(function(p) { return '[[:' + p + ']]'; })); text += params.namespacerestrictions.length ? ')和某些' : ')'; } if (params.namespacerestrictions.length) { // 1 => Talk, 2 => User, etc. var namespaceNames = params.namespacerestrictions.map(function(id) { return menuFormattedNamespaces[id]; }); text += wgULS('[[Wikipedia:命名空间|命名空间]](', '[[Wikipedia:命名空間|命名空間]](') + makeSentence(namespaceNames) + ')'; } } else if (params.area) { text += '|area=' + params.area; } else { if (params.noemail) { text += '|email=yes'; } if (params.nocreate) { text += '|accountcreate=yes'; } } } } else { text += params.template; } if ((settings.sig === '~~~~' || settings.sig === undefined) && !nosign) { text += '}}--~~~~'; } else if (settings.sig && !nosign) { text += '|sig=' + settings.sig; text += '}}'; } else { text += '}}'; } return text; }; Twinkle.block.callback.main = function twinkleblockcallbackMain(pageobj) { var params = pageobj.getCallbackParameters(), date = new Morebits.date(pageobj.getLoadTime()), // messageData = params.messageData, text; params.indefinite = Morebits.string.isInfinity(params.expiry); if (Twinkle.getPref('blankTalkpageOnIndefBlock') && params.template !== 'uw-lblock' && params.indefinite) { Morebits.status.info(wgULS('信息', '資訊'), wgULS('根据参数设置清空讨论页并为日期创建新2级标题', '根據偏好設定清空討論頁並為日期建立新2級標題')); text = date.monthHeader() + '\n'; } else { text = pageobj.getPageText(); var dateHeaderRegex = date.monthHeaderRegex(), dateHeaderRegexLast, dateHeaderRegexResult; while ((dateHeaderRegexLast = dateHeaderRegex.exec(text)) !== null) { dateHeaderRegexResult = dateHeaderRegexLast; } // If dateHeaderRegexResult is null then lastHeaderIndex is never checked. If it is not null but // \n== is not found, then the date header must be at the very start of the page. lastIndexOf // returns -1 in this case, so lastHeaderIndex gets set to 0 as desired. var lastHeaderIndex = text.lastIndexOf('\n==') + 1; if (text.length > 0) { text += '\n\n'; } if (!dateHeaderRegexResult || dateHeaderRegexResult.index !== lastHeaderIndex) { Morebits.status.info(wgULS('信息', '資訊'), wgULS('未找到当月的二级标题,将创建新的', '未找到當月的二級標題,將建立新的')); text += date.monthHeader() + '\n'; } } params.expiry = typeof params.template_expiry !== 'undefined' ? params.template_expiry : params.expiry; text += Twinkle.block.callback.getBlockNoticeWikitext(params); // build the edit summary var summary = wgULS('封禁通知', '封鎖通知'); // Not working correctly /* summary += messageData.summary || messageData.reason || params.reason; if (messageData.suppressArticleInSummary !== true && params.article) { summary += wgULS(',于[[', ',於[[') + params.article + ']]'; } */ pageobj.setPageText(text); pageobj.setEditSummary(summary); pageobj.setChangeTags(Twinkle.changeTags); pageobj.setWatchlist(Twinkle.getPref('watchWarnings')); pageobj.save(); }; Twinkle.block.callback.main_flow = function twinkleblockcallbackMain(flowobj) { var params = flowobj.getCallbackParameters(); params.indefinite = (/indef|infinity|never|\*|max/).test(params.expiry); params.expiry = typeof params.template_expiry !== 'undefined' ? params.template_expiry : params.expiry; var title = '封禁通知'; var content = Twinkle.block.callback.getBlockNoticeWikitext(params, true); flowobj.setTopic(title); flowobj.setContent(content); flowobj.newTopic(); }; Twinkle.addInitCallback(Twinkle.block, 'block'); })(jQuery); // </nowiki> s0a126czrnwwo54fo89zhuvpb5kvt00 User:JohanahoJ/sandbox.css 2 112884 539159 538934 2022-08-19T08:45:19Z JohanahoJ 37147 css text/css body.page-User_talk_JohanahoJ_sandbox_js h2:first-of-type { margin-top: 5000px; } bvw5ceuisgiexhhjgdjlt06v8j7jbob 539160 539159 2022-08-19T08:46:07Z JohanahoJ 37147 css text/css body.page-User_talk_JohanahoJ_sandbox_js h2:first-of-type { margin-top: 200px; } 9xhzqd21qeusp4vnzediayrv9qxng7o 539161 539160 2022-08-19T08:46:35Z JohanahoJ 37147 css text/css body.page-User_talk_JohanahoJ_sandbox_js h2:first-of-type { margin-top: 100px; } 3omi9znd6kb1qke5ks99am97gi6e53s 539162 539161 2022-08-19T08:50:19Z JohanahoJ 37147 Blanked the page css text/css phoiac9h4m842xq45sp7s6u21eteeq1 User:JohanahoJ/sandbox.js 2 112889 539017 532992 2022-08-18T12:12:56Z JohanahoJ 37147 javascript text/javascript if ( mw.config.get( 'wgIsArticle' ) ) { $( function() { 'use strict'; var link = mw.util.addPortletLink( 'p-cactions', '#', 'Spara om sidan', 'ca-resavepage' ); $( link ).find( 'a' ).click( function( e ) { e.preventDefault(); ( new mw.Api() ).edit( mw.config.get( 'wgPageName' ), function( revision ) { return { text: revision.content, summary: 'Om den här redigeringskommentaren visas är något fel med [[MediaWiki:Gadget-ResavePage.js]].', nocreate: true }; } ).done( function() { location.reload(); } ); } ); } ); } 50mxqdiko50xkdpkxbnpsx9u9io7nhz 539018 539017 2022-08-18T12:25:40Z JohanahoJ 37147 javascript text/javascript if ( mw.config.get( 'wgIsArticle' ) ) { $( function() { 'use strict'; var portletId; if ( mw.config.get( 'skin' ) === 'minerva' ) { portletId = 'page-actions-overflow'; } else { portletId = 'p-cactions'; } var link = mw.util.addPortletLink( portletId, '#', 'Spara om sidan', 'ca-resavepage' ); $( link ).find( 'a' ).click( function( e ) { e.preventDefault(); ( new mw.Api() ).edit( mw.config.get( 'wgPageName' ), function( revision ) { return { text: revision.content, summary: 'Om den här redigeringskommentaren visas är något fel med [[MediaWiki:Gadget-ResavePage.js]].', nocreate: true }; } ).done( function() { location.reload(); } ); } ); } ); } ewh6wdaain208g3v993dl9cdri0q7o0 539022 539018 2022-08-18T12:48:40Z JohanahoJ 37147 javascript text/javascript if ( mw.config.get( 'wgIsArticle' ) ) { $( function() { 'use strict'; var portletId; if ( mw.config.get( 'skin' ) === 'minerva' ) { portletId = 'p-tb'; } else { portletId = 'p-cactions'; } var link = mw.util.addPortletLink( portletId, '#', 'Spara om sidan', 'ca-resavepage' ); $( link ).find( 'a' ).click( function( e ) { e.preventDefault(); ( new mw.Api() ).edit( mw.config.get( 'wgPageName' ), function( revision ) { return { text: revision.content, summary: 'Om den här redigeringskommentaren visas är något fel med [[MediaWiki:Gadget-ResavePage.js]].', nocreate: true }; } ).done( function() { location.reload(); } ); } ); } ); } fa3f6mr6sf2j6aaaiauoge1dxdhdg45 Mwbot-rs/Save 0 122864 539121 538922 2022-08-18T18:13:06Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660846386 seconds since the epoch. 1fqjuenyncvftdu6difgkg8i8u2uqm9 539122 539121 2022-08-18T18:13:46Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660846426 seconds since the epoch. 4nocygawa6k3ozaykooslvjml880n3v 539123 539122 2022-08-18T18:14:07Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660846447 seconds since the epoch. 51kxv31m49ecyvi2pmjnb7dlc8v92fu 539128 539123 2022-08-18T18:22:24Z Mwbot-rs test 52001 Test suite edit wikitext text/x-wiki It has been 1660846944 seconds since the epoch. et7jqoocffsfsvvv00vmiu9mat3nkb4 User:Novem Linguae/common.js 2 122928 539131 517677 2022-08-18T21:00:53Z Novem Linguae 49714 javascript text/javascript // force an ombox to show up on Twinkle preferences page. for testing a patch window.TwinkleConfig = true; // mw.loader.load('https://en.wikipedia.org/wiki/MediaWiki:Gadget-Twinkle.js?action=raw'); mw.loader.load('http://127.0.0.1:5500'); // twinkle dev window.afchMockItUp = false; mw.loader.load('http://localhost:4444'); // afch dev // importScript('User:Novem Linguae/Scripts/UserRightsDiff.js'); // Backlink: [[User:Novem Linguae/Scripts/UserRightsDiff.js]] // mw.loader.load('/w/index.php?action=raw&ctype=text/javascript&title=User:Novem%20Linguae/Scripts/UserRightsDiff.js'); //mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Enterprisey/unblock-review.js'); //mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/unblock-review.js'); mw.loader.load('http://localhost/Code/unblock-review/unblock-review.js'); mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/delsort.js'); //mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/Scripts/GANReviewTool.js'); importScript('en:User:Novem_Linguae/Scripts/GANReviewTool.js'); importScript('en:User:Novem Linguae/Scripts/CWWEditSummary.js'); importScript('User:Novem Linguae/Gadget-purgetab.js'); arv7r3njqr3e30dbib4c7tdvauwfp7u 539133 539131 2022-08-18T21:08:35Z Novem Linguae 49714 Undo revision 539131 by [[Special:Contributions/Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) javascript text/javascript // force an ombox to show up on Twinkle preferences page. for testing a patch window.TwinkleConfig = true; // mw.loader.load('https://en.wikipedia.org/wiki/MediaWiki:Gadget-Twinkle.js?action=raw'); mw.loader.load('http://127.0.0.1:5500'); // twinkle dev window.afchMockItUp = false; mw.loader.load('http://localhost:4444'); // afch dev // importScript('User:Novem Linguae/Scripts/UserRightsDiff.js'); // Backlink: [[User:Novem Linguae/Scripts/UserRightsDiff.js]] // mw.loader.load('/w/index.php?action=raw&ctype=text/javascript&title=User:Novem%20Linguae/Scripts/UserRightsDiff.js'); //mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Enterprisey/unblock-review.js'); //mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/unblock-review.js'); mw.loader.load('http://localhost/Code/unblock-review/unblock-review.js'); mw.loader.load('https://test.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/delsort.js'); //mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Novem_Linguae/Scripts/GANReviewTool.js'); importScript('en:User:Novem_Linguae/Scripts/GANReviewTool.js'); importScript('en:User:Novem Linguae/Scripts/CWWEditSummary.js'); he8rhbz8f6xmne5qt2j6i4933pkkbit Talk:Mainspace 1 123022 539153 514264 2022-08-19T01:38:58Z Novem Linguae 49714 /* Test#Test */ new section wikitext text/x-wiki == Requested move 22 November 2021 == {{requested move/dated|Article}} [[:Mainspace]] → {{no redirect|Article}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 06:02, 22 November 2021 (UTC) == Requested move 22 November 2021 == {{requested move/dated|Article}} [[:Mainspace]] → {{no redirect|Article}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 06:02, 22 November 2021 (UTC) == Requested move 23 November 2021 == {{requested move/dated|Article}} [[:Mainspace]] → {{no redirect|Article}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:30, 23 November 2021 (UTC) == Requested move 24 November 2021 == {{requested move/dated|Test}} [[:Mainspace]] → {{no redirect|Test}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 14:52, 24 November 2021 (UTC) == Test#Test == Test [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 01:38, 19 August 2022 (UTC) fyn7376wv596whnvlh5gtk19ncj18kc 539154 539153 2022-08-19T01:39:18Z Novem Linguae 49714 /* #Test */ new section wikitext text/x-wiki == Requested move 22 November 2021 == {{requested move/dated|Article}} [[:Mainspace]] → {{no redirect|Article}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 06:02, 22 November 2021 (UTC) == Requested move 22 November 2021 == {{requested move/dated|Article}} [[:Mainspace]] → {{no redirect|Article}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 06:02, 22 November 2021 (UTC) == Requested move 23 November 2021 == {{requested move/dated|Article}} [[:Mainspace]] → {{no redirect|Article}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 09:30, 23 November 2021 (UTC) == Requested move 24 November 2021 == {{requested move/dated|Test}} [[:Mainspace]] → {{no redirect|Test}} – Reason [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 14:52, 24 November 2021 (UTC) == Test#Test == Test [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 01:38, 19 August 2022 (UTC) == #Test == Test [[User:Novem Linguae|Novem Linguae]] ([[User talk:Novem Linguae|talk]]) 01:39, 19 August 2022 (UTC) njb5004h7mw5o29bixfd3pwdifyouus User:SongVĩ.Bot II 2 124239 539100 538892 2022-08-18T17:00:11Z SongVĩ.Bot II 52414 [[User:SongVĩ.Bot II|Task 0]]: Đã 234 ngày... wikitext text/x-wiki Cập nhật lần cuối: 18-08-2022 Đã 234 ngày... oq66r64qnw99qcluvty7r9cvwjmfdf8 MediaWiki:GrowthMentors.json 8 127601 539089 538958 2022-08-18T15:53:25Z Martin Urbanec (test) 35167 /* growthexperiments-mentorship-enrollasmentor-summary */ json application/json { "Mentors": { "49911": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44042": { "message": null, "weight": 2, "automaticallyAssigned": true }, "50263": { "message": "Testing", "weight": 2, "automaticallyAssigned": false }, "30874": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "27425": { "message": "Welcome! I can help you with editing. ", "weight": 4, "automaticallyAssigned": true }, "51711": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "752": { "message": "I will be happy to explore together all these new features!", "weight": 2, "automaticallyAssigned": true }, "1": { "message": "Sup?", "weight": 2, "automaticallyAssigned": true }, "39901": { "message": "Welcome to Wikipedia! I love editing about music, but you can ask me anything.", "weight": 2, "automaticallyAssigned": true }, "43912": { "message": "test", "weight": 2, "automaticallyAssigned": true }, "43610": { "message": "Test", "weight": 4, "automaticallyAssigned": true }, "39808": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "50179": { "message": "Uh-huh?", "weight": 2, "automaticallyAssigned": true }, "48882": { "message": "Hi, Welcome to Wikipedia!", "weight": 2, "automaticallyAssigned": true }, "34206": { "message": "Ask me about design stuff", "weight": 2, "automaticallyAssigned": true }, "51965": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "29210": { "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.啊啊啊", "weight": 1, "automaticallyAssigned": true }, "12061": { "message": "Blah blah blah", "weight": 2, "automaticallyAssigned": true }, "50053": { "message": "Please visit Wikipedia:Requests/Help desk/Mentors to become a mentor.", "weight": 2, "automaticallyAssigned": true }, "21799": { "message": "test porpoise", "weight": 2, "automaticallyAssigned": true }, "24514": { "message": null, "weight": 2, "automaticallyAssigned": true }, "29752": { "message": "Please ask me about anything (even if maths aren't my favorite topic).", "weight": 2, "automaticallyAssigned": true }, "51768": { "message": "Heh, hey!", "weight": 2, "automaticallyAssigned": true }, "1639": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44996": { "message": "Hey!", "weight": 2, "automaticallyAssigned": true }, "29926": { "message": "Welcome!", "weight": 1, "automaticallyAssigned": true }, "52081": { "message": "testing the mentor features", "weight": 4, "automaticallyAssigned": true }, "48247": { "message": null, "weight": 2, "automaticallyAssigned": false }, "40269": { "message": null, "weight": 2, "automaticallyAssigned": false }, "51514": { "message": null, "weight": 2, "automaticallyAssigned": false }, "49608": { "message": null, "weight": 2, "automaticallyAssigned": false }, "20771": { "message": null, "weight": 2, "automaticallyAssigned": false }, "46860": { "message": null, "weight": 2, "automaticallyAssigned": false }, "101": { "message": null, "weight": 2, "automaticallyAssigned": false }, "21990": { "message": null, "weight": 2, "automaticallyAssigned": false }, "29950": { "message": "test", "weight": 2, "automaticallyAssigned": false }, "52747": { "message": "Nullam in mauris tristique, suscipit turpis non, bibendum augue. Nulla facilisi. Nam dignissim condimentum finibus. Proin et maximus felis. Sed at nunc nec odio dignissim bibendum. Integer quis rhoncus tortor, sed facilisis .", "weight": 2, "automaticallyAssigned": false }, "50416": { "message": "Hello and welcome!", "weight": 1, "automaticallyAssigned": false }, "35167": { "message": null, "weight": 2, "automaticallyAssigned": true } } } 24d87fqd7g489z62khfwskuwb8zh2fz 539148 539089 2022-08-18T23:52:07Z Etonkovidova 27425 json application/json { "Mentors": { "49911": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44042": { "message": null, "weight": 2, "automaticallyAssigned": true }, "50263": { "message": "Testing", "weight": 2, "automaticallyAssigned": false }, "30874": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "27425": { "message": "Welcome! I can help you with editing. ", "weight": 4, "automaticallyAssigned": true }, "51711": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "752": { "message": "I will be happy to explore together all these new features!", "weight": 2, "automaticallyAssigned": true }, "1": { "message": "Sup?", "weight": 2, "automaticallyAssigned": true }, "39901": { "message": "Welcome to Wikipedia! I love editing about music, but you can ask me anything.", "weight": 2, "automaticallyAssigned": true }, "43912": { "message": "test", "weight": 2, "automaticallyAssigned": true }, "43610": { "message": "Donec in dui vitae ante condimentum elementum at vulputate felis. In et ligula eget ex volutpat laoreet mattis sed odio. Suspendisse tincidunt ornare ultrices. Vivamus ac vulputate turpis, ut tempor ex. Quisque eu mauris egestas, tincidunt.", "weight": 4, "automaticallyAssigned": true }, "39808": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "50179": { "message": "Uh-huh?", "weight": 2, "automaticallyAssigned": true }, "48882": { "message": "Hi, Welcome to Wikipedia!", "weight": 2, "automaticallyAssigned": true }, "34206": { "message": "Ask me about design stuff", "weight": 2, "automaticallyAssigned": true }, "51965": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "29210": { "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.啊啊啊", "weight": 1, "automaticallyAssigned": true }, "12061": { "message": "Blah blah blah", "weight": 2, "automaticallyAssigned": true }, "50053": { "message": "Please visit Wikipedia:Requests/Help desk/Mentors to become a mentor.", "weight": 2, "automaticallyAssigned": true }, "21799": { "message": "test porpoise", "weight": 2, "automaticallyAssigned": true }, "24514": { "message": null, "weight": 2, "automaticallyAssigned": true }, "29752": { "message": "Please ask me about anything (even if maths aren't my favorite topic).", "weight": 2, "automaticallyAssigned": true }, "51768": { "message": "Heh, hey!", "weight": 2, "automaticallyAssigned": true }, "1639": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44996": { "message": "Hey!", "weight": 2, "automaticallyAssigned": true }, "29926": { "message": "Welcome!", "weight": 1, "automaticallyAssigned": true }, "52081": { "message": "testing the mentor features", "weight": 4, "automaticallyAssigned": true }, "48247": { "message": null, "weight": 2, "automaticallyAssigned": false }, "40269": { "message": null, "weight": 2, "automaticallyAssigned": false }, "51514": { "message": null, "weight": 2, "automaticallyAssigned": false }, "49608": { "message": null, "weight": 2, "automaticallyAssigned": false }, "20771": { "message": null, "weight": 2, "automaticallyAssigned": false }, "46860": { "message": null, "weight": 2, "automaticallyAssigned": false }, "101": { "message": null, "weight": 2, "automaticallyAssigned": false }, "21990": { "message": null, "weight": 2, "automaticallyAssigned": false }, "29950": { "message": "test", "weight": 2, "automaticallyAssigned": false }, "52747": { "message": "Nullam in mauris tristique, suscipit turpis non, bibendum augue. Nulla facilisi. Nam dignissim condimentum finibus. Proin et maximus felis. Sed at nunc nec odio dignissim bibendum. Integer quis rhoncus tortor, sed facilisis .", "weight": 2, "automaticallyAssigned": false }, "50416": { "message": "Hello and welcome!", "weight": 1, "automaticallyAssigned": false }, "35167": { "message": null, "weight": 2, "automaticallyAssigned": true } } } p2qtnbdaopr1mbcrd041lhnygx6jq43 539149 539148 2022-08-18T23:52:21Z Etonkovidova 27425 Reverted edits by [[Special:Contributions/Etonkovidova|Etonkovidova]] ([[User talk:Etonkovidova|talk]]) to last revision by [[User:Martin Urbanec (test)|Martin Urbanec (test)]] json application/json { "Mentors": { "49911": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44042": { "message": null, "weight": 2, "automaticallyAssigned": true }, "50263": { "message": "Testing", "weight": 2, "automaticallyAssigned": false }, "30874": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "27425": { "message": "Welcome! I can help you with editing. ", "weight": 4, "automaticallyAssigned": true }, "51711": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "752": { "message": "I will be happy to explore together all these new features!", "weight": 2, "automaticallyAssigned": true }, "1": { "message": "Sup?", "weight": 2, "automaticallyAssigned": true }, "39901": { "message": "Welcome to Wikipedia! I love editing about music, but you can ask me anything.", "weight": 2, "automaticallyAssigned": true }, "43912": { "message": "test", "weight": 2, "automaticallyAssigned": true }, "43610": { "message": "Test", "weight": 4, "automaticallyAssigned": true }, "39808": { "message": "Testing", "weight": 2, "automaticallyAssigned": true }, "50179": { "message": "Uh-huh?", "weight": 2, "automaticallyAssigned": true }, "48882": { "message": "Hi, Welcome to Wikipedia!", "weight": 2, "automaticallyAssigned": true }, "34206": { "message": "Ask me about design stuff", "weight": 2, "automaticallyAssigned": true }, "51965": { "message": "Test", "weight": 2, "automaticallyAssigned": true }, "29210": { "message": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.啊啊啊", "weight": 1, "automaticallyAssigned": true }, "12061": { "message": "Blah blah blah", "weight": 2, "automaticallyAssigned": true }, "50053": { "message": "Please visit Wikipedia:Requests/Help desk/Mentors to become a mentor.", "weight": 2, "automaticallyAssigned": true }, "21799": { "message": "test porpoise", "weight": 2, "automaticallyAssigned": true }, "24514": { "message": null, "weight": 2, "automaticallyAssigned": true }, "29752": { "message": "Please ask me about anything (even if maths aren't my favorite topic).", "weight": 2, "automaticallyAssigned": true }, "51768": { "message": "Heh, hey!", "weight": 2, "automaticallyAssigned": true }, "1639": { "message": null, "weight": 2, "automaticallyAssigned": true }, "44996": { "message": "Hey!", "weight": 2, "automaticallyAssigned": true }, "29926": { "message": "Welcome!", "weight": 1, "automaticallyAssigned": true }, "52081": { "message": "testing the mentor features", "weight": 4, "automaticallyAssigned": true }, "48247": { "message": null, "weight": 2, "automaticallyAssigned": false }, "40269": { "message": null, "weight": 2, "automaticallyAssigned": false }, "51514": { "message": null, "weight": 2, "automaticallyAssigned": false }, "49608": { "message": null, "weight": 2, "automaticallyAssigned": false }, "20771": { "message": null, "weight": 2, "automaticallyAssigned": false }, "46860": { "message": null, "weight": 2, "automaticallyAssigned": false }, "101": { "message": null, "weight": 2, "automaticallyAssigned": false }, "21990": { "message": null, "weight": 2, "automaticallyAssigned": false }, "29950": { "message": "test", "weight": 2, "automaticallyAssigned": false }, "52747": { "message": "Nullam in mauris tristique, suscipit turpis non, bibendum augue. Nulla facilisi. Nam dignissim condimentum finibus. Proin et maximus felis. Sed at nunc nec odio dignissim bibendum. Integer quis rhoncus tortor, sed facilisis .", "weight": 2, "automaticallyAssigned": false }, "50416": { "message": "Hello and welcome!", "weight": 1, "automaticallyAssigned": false }, "35167": { "message": null, "weight": 2, "automaticallyAssigned": true } } } 24d87fqd7g489z62khfwskuwb8zh2fz Module:Location map/data/USA New York rivers 828 139568 539073 532970 2022-08-18T14:37:56Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/4)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 sn3tjhejrxj1qetr8gagtuwloouq02h 539074 539073 2022-08-18T14:39:31Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/3)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 epcviwovjf8getuk2tcx9ia8o96m2fz 539075 539074 2022-08-18T14:40:05Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/5)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 0qz0fh2pl2ty5qf5rngtosaolcdn0p0 539076 539075 2022-08-18T14:40:47Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/6)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 3iz0up8yix5yb2k9erfn41zfrsudrfk 539077 539076 2022-08-18T14:42:31Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/12)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 21btve06a55kvyi8lfxj2bh00fyrhs0 539078 539077 2022-08-18T14:43:03Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/4)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 sn3tjhejrxj1qetr8gagtuwloouq02h 539079 539078 2022-08-18T14:43:37Z DutchTreat 54850 Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/5)*($2 - -75.90)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 75.9)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -75.90 0qz0fh2pl2ty5qf5rngtosaolcdn0p0 539168 539079 2022-08-19T10:55:39Z DutchTreat 54850 change midLong Scribunto text/plain return { name = 'USA New York rivers', x = '100 - 100*($2 - -71.69)/(-80.1 - -71.69) - (($1 - 42.884)/5)*($2 - -76.58)', y = '100 - 100*($1 - 40.24)/(45.448 - 40.24) - abs($2 + 76.58)/3', image = 'USA New York rivers NAD27 locator map.svg', image1 = 'USA New York rivers NAD27 locator map with grid.svg', mark = 'Disc Plain red.svg', marksize = 7 } -- $1 = myLat -- $2 = myLong -- top = 45.448, -- bottom = 40.24, -- left = -80.1, -- right = -71.690, -- midLat = 42.884 -- midLong = -76.5833333 (from EPSG:32016) (former -75.90, manual by eye) n31gqqjrujx1kzgt2f8em9ocqdof0e4 My very unique page title 2983e98e323eernewdd 0 145487 539021 538999 2022-08-18T12:48:18Z Mytestuser12345 54882 test summary wikitext text/x-wiki This is the text on my new wiki page dsdsd editaafsfafeee sdsdsd edit b5gf9abjpzlmpgdz44ba5nz1jti6tds 539055 539021 2022-08-18T14:06:33Z Mytestuser12345 54882 test summary wikitext text/x-wiki This is the text on my new wiki page dsdsd editaafsfafeee sdsdsd editvv ma7xadv0eecfiaw1q32g3rgrzprexyu 539056 539055 2022-08-18T14:07:44Z Mytestuser12345 54882 test summary wikitext text/x-wiki EDIT This is the text on my new wiki page dsdsd editaafsfafeee sdsdsd editvv q16ifc7huk2l3g3fze5w9cexaqibr2x User:John Vandenberg/createonly/1660824452.5390759 2 145499 539015 2022-08-18T12:07:42Z Pywikibot-test 23124 Pywikibot 7.6.0.dev2 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Topic:X1gfjqnlsvtjg80f 2600 145500 539016 2022-08-18T12:07:53Z Flow talk page manager 26836 /* This page has been converted into a Structured Discussions board */ flow-board application/json {"flow-workflow":"x1gfjqnlsvtjg80f"} ab4u30xnnzr7vt9kx23mr9baeayo77h D3CwkTyCdvi8mBFp1hwf 0 145501 539023 2022-08-18T13:18:49Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r FH5TGzaz6mBnWnVfqlom 0 145502 539024 2022-08-18T13:21:43Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r User:John Vandenberg/createonly/1660829295.142605 2 145503 539029 2022-08-18T13:28:24Z Pywikibot-test 23124 Pywikibot 7.5.2 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Topic:X1gk1nz8vwfaza5m 2600 145504 539030 2022-08-18T13:28:38Z Flow talk page manager 26836 /* This page has been converted into a Structured Discussions board */ flow-board application/json {"flow-workflow":"x1gk1nz8vwfaza5m"} rd5v8h0u2nxqrgucuyeur6xt3o9kqb6 We8QlaDavsC63JwKWb8e 0 145505 539031 2022-08-18T13:31:18Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r Z1rTkZPoAmdDaYgqI1bl 0 145506 539032 2022-08-18T13:33:20Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r Edjljuzd4Al7xPhckdo0 0 145507 539033 2022-08-18T13:36:33Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r User:John Vandenberg/createonly/1660829826.6224034 2 145508 539038 2022-08-18T13:37:16Z Pywikibot-test 23124 Pywikibot 7.6.0.dev2 wikitext text/x-wiki phoiac9h4m842xq45sp7s6u21eteeq1 Topic:X1gkjcbldxbca0t2 2600 145509 539039 2022-08-18T13:37:28Z Flow talk page manager 26836 /* This page has been converted into a Structured Discussions board */ flow-board application/json {"flow-workflow":"x1gkjcbldxbca0t2"} 9zyr2jvctdnoa6009g9d2kktlv4ff0l BfbqrTsxIRw6WvAgXBGj 0 145510 539040 2022-08-18T13:38:16Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 9kWrY805ndrqF45kU9B5 0 145511 539041 2022-08-18T13:45:39Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r RQ5mcEZRBE1v8j0nYjHQ 0 145512 539042 2022-08-18T13:45:56Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r XkNJ8AA03awIrlIIqsty 0 145513 539043 2022-08-18T13:48:58Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r VA8W8hlhTd1DEP8BOa5K 0 145514 539044 2022-08-18T13:50:01Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r WEOhKeatYVs2plEig3U9 0 145515 539045 2022-08-18T13:50:59Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r QFJVo6KiTglXm4d0ue5S 0 145516 539046 2022-08-18T13:51:57Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r TzbPSN87Ij0QJ2RBy3RL 0 145517 539047 2022-08-18T13:53:44Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 3WDYayRoozB6wgprEE11 0 145518 539048 2022-08-18T13:54:12Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r YkhL9QjHlgyU3WW5Ygmo 0 145519 539049 2022-08-18T13:54:55Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r SkVoC8kscmuR1yZMoi4M 0 145520 539050 2022-08-18T13:56:11Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r DpJbnUXAfUcIvLCBdEeX 0 145521 539051 2022-08-18T13:58:25Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 0NOSR3Zt6gl2SCOdm1tM 0 145522 539052 2022-08-18T13:59:37Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r CzWAETTXwqBBvE9cnqjL 0 145523 539059 2022-08-18T14:17:42Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539060 539059 2022-08-18T14:17:43Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax StJbK8qrGKKfLnZWMAlZ 0 145524 539061 2022-08-18T14:20:45Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539062 539061 2022-08-18T14:20:47Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax RGnYIj9LnNykdXzoJOSe 0 145525 539063 2022-08-18T14:25:45Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539064 539063 2022-08-18T14:25:46Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax 9XdKtyoeChRrP5SsCvEI 0 145526 539065 2022-08-18T14:29:49Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539066 539065 2022-08-18T14:29:50Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax Y8jfMTEhoCMvThZH8BfM 0 145527 539067 2022-08-18T14:31:03Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539068 539067 2022-08-18T14:31:04Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax S16DTIWRthIqIB6 0 145528 539069 2022-08-18T14:31:23Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r XxY2XKfdDR4H6I9 0 145529 539070 2022-08-18T14:31:24Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r FtQDjSLmkGnhR3MDphbX 0 145530 539071 2022-08-18T14:31:25Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539072 539071 2022-08-18T14:31:26Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax Tp0aiD3WKm8MP9m 0 145531 539080 2022-08-18T15:04:22Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r Usrl1BvnLl4A0xc 0 145532 539081 2022-08-18T15:08:48Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r ET8KcNRg3TPGVas 0 145533 539082 2022-08-18T15:10:38Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r MNfKB2wtLVhCBCa4s7BH 0 145534 539083 2022-08-18T15:11:57Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539084 539083 2022-08-18T15:11:58Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax HQxwo3WYHaj3wJwxUHnd 0 145535 539085 2022-08-18T15:13:37Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539086 539085 2022-08-18T15:13:38Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax Ha53tjnqt6iD97RjcOgj 0 145536 539087 2022-08-18T15:33:05Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539088 539087 2022-08-18T15:33:06Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax WksiZR8Wwd4HRrq 0 145537 539090 2022-08-18T15:59:55Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 6RLvjgkawdL8VT02F91Q 0 145538 539091 2022-08-18T15:59:56Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539092 539091 2022-08-18T15:59:57Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax J1phXzjz2sKiBkp 0 145539 539093 2022-08-18T16:15:14Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r PmkE3tL9J0IZP5eOSN4V 0 145540 539094 2022-08-18T16:15:15Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539095 539094 2022-08-18T16:15:16Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax J48Wfk4iEIiYY53 0 145541 539096 2022-08-18T16:32:00Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r SgltqcXu38FoXyg1Jgtv 0 145542 539097 2022-08-18T16:32:01Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539098 539097 2022-08-18T16:32:02Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax Wel63cISRgmQduA 0 145543 539099 2022-08-18T16:44:06Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r RmeFbHg3mvtRu8c 0 145544 539101 2022-08-18T17:19:30Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 5QspPNFXWrGybBlKSh3c 0 145545 539102 2022-08-18T17:19:31Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539103 539102 2022-08-18T17:19:33Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax PrxB101BZBqh8QI 0 145546 539104 2022-08-18T17:19:36Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r CgosnkKU94ypC2B 0 145547 539105 2022-08-18T17:21:00Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r RQX2IhAE0BMmLw2TTFh4 0 145548 539106 2022-08-18T17:21:01Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539107 539106 2022-08-18T17:21:02Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax CrC1G1eivAp1Gg7 0 145549 539108 2022-08-18T17:21:08Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 1qbp6fOf1sdM8xw 0 145550 539109 2022-08-18T17:21:49Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r W9oKX7PFjus6xJ6MqUoA 0 145551 539110 2022-08-18T17:21:50Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539111 539110 2022-08-18T17:21:52Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax FhyDl8DNpYrUKCA 0 145552 539112 2022-08-18T17:21:54Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r UlbOeZS4ueU0rwu 0 145553 539113 2022-08-18T17:22:29Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r KpHvZw0DwjpSRDVQ2S57 0 145554 539114 2022-08-18T17:22:30Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539115 539114 2022-08-18T17:22:32Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax PKpemnGSvgjtzpp 0 145555 539116 2022-08-18T17:22:35Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r EIzBkAXJXWrXwXf 0 145556 539117 2022-08-18T17:25:55Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r TaqoVSkuetPyK3oVqC09 0 145557 539118 2022-08-18T17:25:56Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539119 539118 2022-08-18T17:25:58Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax UFFH2WcKr8OXJg1 0 145558 539120 2022-08-18T17:26:01Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r ZzpX0uh9hzo64nz 0 145559 539124 2022-08-18T18:18:58Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r NFeFDdpx6Oi5JpjKVCdo 0 145560 539125 2022-08-18T18:18:59Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539126 539125 2022-08-18T18:19:00Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax X0xMsJdYIaUxDoj 0 145561 539127 2022-08-18T18:19:03Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r User:Novem Linguae/Gadget-purgetab.js 2 145562 539129 2022-08-18T21:00:25Z Novem Linguae 49714 Copied content from [[w:MediaWiki:Gadget-purgetab.js]]; see that page's history for attribution ([[w:User:Novem Linguae/Scripts/CWWEditSummary.js|CWWEditSummary]]) javascript text/javascript /** * Add "Purge" content action link. * * Dependencies: mediawiki.util, mediawiki.api * * @source https://www.mediawiki.org/wiki/Snippets/Purge_action * @revision 2016-05-22 */ $( function () { if ( $( '#ca-purge' ).length || !mw.config.get( 'wgIsArticle' ) ) return; var node = mw.util.addPortletLink( 'p-cactions', mw.util.getUrl( null, { action: 'purge' } ), mw.config.get( 'skin' ) === 'vector' ? 'Purge' : '*', 'ca-purge', 'Purge the server cache of this page', '*' ); $(node).on( 'click', function (e) { new mw.Api().post( { action: 'purge', titles: mw.config.get( 'wgPageName' ) } ).then(function () { location.reload(); }, function () { mw.notify( 'Purge failed', { type: 'error' } ); }); e.preventDefault(); }); }); 4ddqpodft9e7dllcxlh1u7tp7ps7hax 539132 539129 2022-08-18T21:01:47Z Novem Linguae 49714 patch javascript text/javascript /** * Add "Purge" content action link. * * Dependencies: mediawiki.util, mediawiki.api * * @source https://www.mediawiki.org/wiki/Snippets/Purge_action * @revision 2016-05-22 */ $( function () { if ( $( '#ca-purge' ).length || !mw.config.get( 'wgIsArticle' ) ) return; var node = mw.util.addPortletLink( 'p-cactions', mw.util.getUrl( null, { action: 'purge' } ), mw.config.get( 'skin' ) === 'vector' || mw.config.get( 'skin' ) === 'vector-2022' ? 'Purge' : '*', 'ca-purge', 'Purge the server cache of this page', '*' ); $(node).on( 'click', function (e) { new mw.Api().post( { action: 'purge', titles: mw.config.get( 'wgPageName' ) } ).then(function () { location.reload(); }, function () { mw.notify( 'Purge failed', { type: 'error' } ); }); e.preventDefault(); }); }); pg5egloqyblbcikji4ics58su3vvny8 F4u3gRXNUBFkBeF 0 145563 539134 2022-08-18T21:59:54Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r ArUf8QPBlstT0uA6B448 0 145564 539135 2022-08-18T21:59:55Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539136 539135 2022-08-18T21:59:57Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax Y2eZOfCzvrXPvFp 0 145565 539137 2022-08-18T22:00:03Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 8T6vyecYP3r6aA3 0 145566 539138 2022-08-18T22:10:39Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r MeEhdXSz5G5SwfPvlBOm 0 145567 539139 2022-08-18T22:10:40Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539140 539139 2022-08-18T22:10:41Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax BYkmj8x4XK7fF41 0 145568 539141 2022-08-18T22:10:45Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 7aSIsVFVubSRefV 0 145569 539142 2022-08-18T22:21:02Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r W7O6jGPIaH1wkDhe8Ucs 0 145570 539143 2022-08-18T22:21:03Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539144 539143 2022-08-18T22:21:05Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax 0cZhRGhZO9mizlF 0 145571 539145 2022-08-18T22:21:11Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 2wvfjIZUSlYbVF2 0 145574 539164 2022-08-19T10:28:54Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r McfE8uG8Ak8bvfWuXPhW 0 145575 539165 2022-08-19T10:28:55Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r 539166 539165 2022-08-19T10:28:57Z Mytestuser12345 54882 my summary wikitext text/x-wiki EDIT!! This is my new page 123! fhn1dlni9rgqvtky3jndr71lde8x7ax B6PWh5CP7sqNET9 0 145576 539167 2022-08-19T10:29:00Z Mytestuser12345 54882 my summary wikitext text/x-wiki This is my new page 123! a2hc4zv2t0yn5ggxxew914jmf8lpr9r