User:JPxG/SPS

Signpost Publishing Script (source) – automates the many, many steps in publishing the Signpost, as described at Wikipedia Signpost/Newsroom/Resources. Forked from User:Evad37/SPS.js.

Installation
Add the line  to Special:MyPage/common.js.

But note that this script will only work for users specified in the source code. Evad37, or any interface administrator, can add (or remove) approved users – generally, this should only be the editor(s)-in-chief and the publication manager(s).

Also, this script assumes users have the following permissions - please request them if you do not already have them.
 * Page mover (or administrator) on English Wikipedia
 * This ensures redirects are not left behind when moving pages during publication.
 * Template editor (or administrator) on English Wikipedia
 * Required to edit Wikipedia Signpost/Templates/Issue, as of October 2021.
 * Mass message sender (or administrator) on English Wikipedia
 * This allows posting the Signpost on the talkpages of English Wikipedia subscribers.
 * Mass message sender (or administrator) on Meta
 * This allows posting the Signpost on the talkpages of subscribers on other projects.

Usage
On the Wikipedia Signpost/Newsroom or Wikipedia Signpost/Newsroom/Coordination page you'll get a "Publish next edition" link, in the "More" dropdown (Vector skin) or on a tab (Monobook skin) at the top of the page.

Before starting make sure that all the articles are ready to go, are subpages of Wikipedia:Wikipedia_Signpost/Next_issue/ (so the script can find them), and have a completed template (so the script can grab the title and blurb). If the  template is missing or blank, the script will use "[title]: [blurb]" for the RSS description. If the  template is missing or does not have a previous issue date specified, the script will attempt to find the previous issue and fill it in.

Once you click on the "Publish next edition" link, you'll get a few interface screens where you: Then, if everything goes right, you can just click the "Publish" button to do all the on-wiki publishing tasks (i.e. everything apart from announcing on the email list, Twitter, and Facebook).
 * choose to get started with publishing for real, or do a "dry run" simulation where no edits/moves are made
 * select which pages are to be published
 * adjust the order (as used for the main Signpost page, single page edition, etc), and adjust the titles & blurbs if needed

Screenshots


Initial screen.



Select articles to publish. Only the ticked articles will be published; the unticked articles will not be touched.



Adjust the order of sections by clicking drag-and-dropping with the mouse.



Publication progress screen. The current task is highlighted in blue. Some tasks take longer than others.



Simulated (dry-run) publication completed. The main page and the mass message can be previewed, and their wikitext shown, by clicking on the buttons.

Internal documentation
The following is an explanation of the internal structure of the script, how it works, and how it can be modified. It is intended for maintenance, upgrades and bugfixes: if you are just using the script, ignore this section.

Here is a summary of what each major block of code in the Signpost publishing script does:


 * Dependencies and initial checks:
 * Loads required modules like the API and extra utilities
 * Checks if the user is on the Signpost Newsroom page, and if not, exits
 * Checks if the user is an approved publisher, and if not, exits
 * Sets up script version, API config, and clears caches
 * Sets up script version, API config, and clears caches


 * Styles:
 * Adds CSS styles for the dialog interface


 * Utility functions:
 * Caching functions to store/retrieve data in localStorage
 * Timeout and promise reflection helpers
 * getFullUrl to build URLs
 * approxPageSize to estimate page size
 * removeHtmlComments to strip comments from wikitext


 * Overlay dialog:
 * Classes to implement overlay dialog windows with preview toggle


 * Main dialog:
 * Classes to build the multi-panel main dialog interface
 * Functions to initialize panels, set their content, process state on navigation
 * Helper functions to get data from panels
 * Process actions when buttons are clicked
 * Publishing steps implementation
 * Task status tracking


 * API wrappers:
 * FakeApi class that logs edits instead of making them, for dry run mode
 * Preview helpers


 * Pre-publishing tasks:
 * Get article titles, previous issue dates, and article info


 * Publishing tasks:
 * Functions to execute the steps of the publishing process, like creating pages, editing articles, moving them, mass messaging, etc.


 * Portlet link
 * Adds a "Publish next edition" link to open the dialog