User:Jack who built the house/Convenient Discussions - Wikimedia Commons
Jump to content
From Wikimedia Commons, the free media repository
User:Jack who built the house
Translate this page
; This page contains
changes
which are not marked for translation.
Other languages:
Nederlands
Tiếng Việt
azərbaycanca
norsk bokmål
polski
svenska
ślůnski
кыргызча
русский
српски / srpski
עברית
العربية
বাংলা
ગુજરાતી
中文
한국어
Shortcut
User:JWBTH/CD
Makes collaboration smooth and efficient on MediaWiki talk pages
Light mode + Spacious design + Relative time
Dark mode + Compact design + Absolute time
Convenient Discussions
2021
Coolest Tool
Award Winner
in the category
Versatile
Convenient Discussions
CD
) is a JavaScript tool that enhances MediaWiki talk pages, redesigning threads, adding more comment and section actions, new comment navigation, real-time updates, autocomplete, and dozens of other features to make wiki discussions smooth and efficient.
CD has been developed since 2017 by
Jack who built the house
. It is enriched by contributions and feedback from the global Wikimedia community and integrates solutions and ideas from the Wikimedia Foundation's engineering and design teams.
Features
edit
Cross-wiki wikilinks autocomplete (
animation
).
Tab
to insert the page name,
Enter
to finalize the markup.
How can we promote cross-wiki collaboration if people can't even link pages on other wikis easily?
Predating the
DiscussionTools
(DT) project, CD offers a wide range of features beyond DT functionality:
Discussion threads are redesigned, making the hierarchy of replies clear
Author
and date appear
at the top
of each comment
(opt-out)
You can edit comments, move sections, create subsections, archive and unarchive topics, and vote in polls
Comments are
highlighted
by type:
new or updated
your own
jumped-to
linked
deleted
New comments can be navigated using the
navigation panel
or the table of contents
No more reading talk pages through diffs
The page checks for updates in real time:
A live counter shows the number of new comments
The table of contents and individual threads show which items have new activity and from whom
Simple comment edits by other users are rendered on the spot, with a diff available
Desktop notifications
are available while the page is open
Timestamps are shown in your local time in one of several formats, including relative time
Long, deeply nested discussions are handled well:
Threads collapse automatically or on demand, making it easier to scan and navigate
You can jump between a comment and its parent
When replying to the opening comment of a topic, the reply form can be under it or at the end of the section
No need to scroll back and forth to reply or check details
{{Outdent}}
templates are respected and inserted in a
clever way
so as not to break or confuse the hierarchy of replies
Beyond
@mentions
, there is autocomplete for
[[#
comment links
]]
[[
wikilinks
]]
{{
templates
}}
, and
On Wikimedia wikis, wikilinks autocomplete works across interwiki prefixes
(see image)
and will even let you autocomplete a page section on a distant wiki
Pasted links are converted to wikilinks:
on Commons becomes
[[
wikt:fr
mot
]]
Among other things, CD lets you:
comment in several places at once, without closing other forms;
quote comments with their formatting preserved;
use custom text snippets for anything you type frequently;
upload screenshots to Commons with ease: paste → pick the source → upload;
copy links in several formats;
sort a topic's contributors by name, comment count, or date;
jump straight to a comment from the watchlist, history, contributions, and elsewhere via a "(comment)" link.
CD is highly customizable
per-user
and
per-wiki
, works across wikis,
43 languages
, skins, themes, and browsers, supports RTL scripts and anonymous editing.
Limitations
edit
Doesn't support
VisualEditor
Doesn't work in the mobile version (but works on mobile with the desktop view)
Installation
edit
The script's main file is at
User:Jack who built the house/convenientDiscussions.js
. To install the script for all Wikimedia wikis, add this to your
global.js on Meta
mw
loader
load
'https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions.js&action=raw&ctype=text/javascript'
);
To install the script on a specific wiki where it's not a gadget, add the same code to your common.js. If the wiki has the script available as a gadget, it makes sense to enable the gadget if you have the script installed globally—the script will load faster on that wiki.
Every wiki has its own peculiarities that the script can address in the configuration file. Those are individual for each wiki and created by volunteers. If you know JavaScript and your wiki doesn't have one, see
§ Configuring for a wiki
. Having a configuration file for the wiki will also speed up the execution of the script.
Compatibility
edit
Make sure to deactivate timestamp transforming by changing CD's timestamps settings to what's in the screenshot.
Convenient Discussions shows timestamps in local time by default. However, you can use another user script for this purpose. To make Convenient Discussions compatible with the script displaying time in the local time zone (
w:User:Gary/comments in local time.js
or
w:User:Mxn/CommentsInLocalTime
), call the latter like this:
mw
hook
'convenientDiscussions.commentsReady'
).
add
function
()
// Import the script here
);
Note that this will not load the script if Convenient Discussions doesn't load. To make the script also load for pages Convenient Discussions won't load on, call it like this:
if
mw
config
get
'wgNamespaceNumber'
!==
&&
mw
config
get
'wgExtraSignatureNamespaces'
).
includes
mw
config
get
'wgNamespaceNumber'
// Import the script here
For Gary's script specifically, an additional line of code is needed to disable its feature of not loading twice:
mw
hook
'convenientDiscussions.commentsReady'
).
add
function
()
window
commentsInLocalTimeWasRun
false
mw
loader
load
'//en.wikipedia.org/w/index.php?title=User:Gary/comments in local time.js&action=raw&ctype=text/javascript'
);
// [[w:en:User:Mxn/CommentsInLocalTime]]
Be sure to disable the "Comments in Local Time" gadget in your preferences if it is present in your wiki (e.g. the English Wikipedia).
Usage
edit
Settings dialog
You can adjust the script according to your preferences in the settings dialog. It is available at the click of the gear icon
which can be found in the "CD" section of the watchlist and under any comment form.
The hotkeys can be found at the click of the "?" button under any comment form and on hover over the navigation panel buttons.
Comment types
edit
New or updated comment
A comment is considered new if the page was loaded within 15 minutes since the comment was loaded first time.
Your own comment
Jumped-to comment
That's when you post a new comment or navigate to a comment using the
navigation panel
, table of contents, section/comment header, or a link in another comment
Linked comment
That's when you open a page by a comment link, including
"(comment)"
links and
Echo
notifications
Deleted comment
Navigation panel
edit
FAQ
edit
The script doesn't work on a page where it should work or vice versa. How to fix it?
The script uses a number of factors to determine whether it should process a certain page, such as the presence of the "Add topic" tab and the
wgExtraSignatureNamespaces
config value. The simplest way to make it process/not process a page is to click "Run Convenient Discussions on this page once" in the page footer. But that will work only for one time. You should contact the user maintaining the configuration file on your wiki or create your own configuration file according to the
instructions below
. In that file,
regular expressions
to match page names should be added to/removed from the
pageWhitelist
pageBlacklist
values. A worse way to deal with it is to add an element with
class="cd-talkPage"
or
class="cd-notTalkPage"
to the source code of the page. In that case, the page will still be classified incorrectly on log pages (the watchlist, history pages, etc.).
What does "(-)" after the comment text in an edit summary mean?
It means that the whole text of the comment is displayed in the edit summary, and there is no more text in the comment other than that is displayed, so no point to open the page if you only want to see the contents of this edit. It's a notation that was used on some old Internet forums.
The comment menu (Reply/Edit/Thank/...) overlaps a user link, and I can't click it.
Make a long click/tap or right click on the block; it will disappear.
How to set settings for one wiki, not for all wikis?
Use
var cdLocal
SettingName
value
in your common.js on that wiki. You can get the names of the settings
here
(the first letter should be in upper case, for example
autopreview
cdLocalAutopreview
).
I would like to have
inserted after a user mention like in the
{{Ping}}
template.
Hold
Alt
while choosing the name you want to mention. You can also press the mention icon while holding
Alt
— if you're replying to a comment, a mention of the target comment's author with
will appear at the beginning of your comment.
Data
edit
Here's what the script stores, why, how, and how to delete the data. Note that you can delete all the data associated with the script in one click, by opening the script settings and pressing the button "Remove all script data" on the "Data removal" tab. Note that while the settings (except for a few) are global, visits and watched sections are stored individually for each wiki, so you'll have to remove them separately.
What
Why
How
How to delete
[1]
Settings
To allow tuning the script according to the user's preferences.
On the Wikimedia servers as a user option named
userjs-convenientDiscussions-settings
Global settings:
new
mw
Api
().
postWithEditToken
({
action
'globalpreferences'
optionname
'userjs-convenientDiscussions-settings'
});
Local settings:
new
mw
Api
().
saveOption
'userjs-convenientDiscussions-localSettings'
null
);
Last talk page visits
To detect new comments on talk pages.
In
compressed
form, on the Wikimedia servers as a user option named
userjs-convenientDiscussions-visits
[2]
new
mw
Api
().
saveOption
'userjs-convenientDiscussions-visits'
null
);
Watched sections
(Only when enabled in the settings instead of the standard topic subscription.) To show notifications and highlight comments on pages that list revisions: the watchlist, recent changes page, history pages, user contributions pages.
In compressed form, on the Wikimedia servers as a user option named
userjs-convenientDiscussions-watchedSections
[2]
Using the "Edit watched sections list" dialog accessible from the watchlist, or
new
mw
Api
().
saveOption
'userjs-convenientDiscussions-watchedSections'
null
);
Unsent comment forms' content
To restore comment drafts after page reloads, browser crashes, accidental jumps to a different page, etc.
For no longer than 60 days, in the browser's
local storage
localStorage
removeItem
'convenientDiscussions-commentForms'
);
Edits thanked via CD
To reflect in the interface that a comment has already been thanked for.
For no longer than 60 days, in the browser's local storage.
localStorage
removeItem
'convenientDiscussions-thanks'
);
Seen comment changes
When a comment is updated, its new version is sometimes rendered immediately. If the user has seen the update, this fact is saved in the memory, so that there is no notification the next time the user sees it.
For no longer than 60 days, in the browser's local storage.
localStorage
removeItem
'convenientDiscussions-seenRenderedChanges'
);
To execute the code in the "How to delete" column, open the browser's developer tools (done by pressing
F12
in most browsers), switch to the "Console" tab, paste the code into the input and press
Enter
In Russian Wikipedia, for historical reasons, the option names use
cd
instead of
convenientDiscussions
, and
userjs-cd-watchedTopics
is used for the watched sections option.
Note that other scripts that you use on wiki pages, as well as side-wide scripts, have access to this data too.
Feedback
edit
It's best to post bug reports and proposals on Phabricator under
the "convenient-discussions" tag
. If you don't have an account there and don't want to create one, post to the
talk page
Configuring for a wiki
edit
Structure of the project
The scheme of loading the script on a wiki is the following: There is
the main script file
on Commons and a configuration file on the wiki (if somebody has created it). The configuration file can be a gadget or a user script (a gadget will load faster).
The configuration file requests the main script file if it is not loaded yet.
Conversely, if the main file is loaded first, it requests the configuration file if the URL of the configuration file is specified
in it
So, there is no difference which file is loaded first.
To configure the script for a wiki, you may use the configuration generator as described below and then supplement it with configuration values you want. If you want the configuration file to be loaded when users load the script from Commons, you should contact the
repository
owner
. If it proves safe, he will add the URL of the configuration to
config/urls.json
(you can make a pull request too).
To generate a configuration, run
the generator script
in your browser's console on any page of the wiki you want the configuration for. You can do it by executing
mw
loader
load
'https://commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions-generateBasicConfig.js&action=raw&ctype=text/javascript'
);
in the console. The result will contain a configuration object with values that can be automatically retrieved (system messages, some site info, template names) wrapped in the universal wrapping code. You then should create a configuration file with that content.
The meaningful part of the configuration is contained in the
convenientDiscussions.config
object. Its possible properties can be found in
the source code
. There is also
a generated documentation
, but it is for an old version (v7).
It is recommended to keep only those properties that differ from the default ones.
You can also add any additional instuctions (for example hooks) you need below the object.
Examples
edit
w:en:User:Jack who built the house/convenientDiscussions.js
source in the repository
w:ru:MediaWiki:Gadget-convenientDiscussions.js
source in the repository
Note:
For complex properties like
archivingConfig
it may be useful to ask an LLM to generate its value for your wiki while using a mature configuration like
w-en
or
w-ru
as an example. You will need to provide
the default configuration
to the LLM along with all necessary context.
How do I turn off the "Reply" buttons?
edit
See also:
mw:Speical:MyLanguage/Help:DiscussionTools/Magic words and markup
To prevent the "Reply" buttons and the rest of the comment layout from showing up in certain templates used on talk pages (e.g. in the "Moved discussion" template after the mover's signature), add the
mw-notalk
class to those templates.
To prevent the "Reply" buttons from showing up in closed discussions, add the
mw-archivedtalk
class to the template.
Debugging using Node.js and Git
edit
If you want to debug your configuration more closely in the browser's development tools and you're familiar with
Node.js
and
Git
and have them installed, clone
the script's repository
, run
npm install
while in the script's directory to install the dependencies, create a
.js
file in the
config
folder named using pattern
project_code
[-
language_code
].js
(for example,
w-en.js
wikt-de.js
mw.js
), and put the following code into it:
export
default
// List of properties
};
// Any additional code, e.g. hooks
Then you will need to add the code as described above. After the configuration is ready, you will need to build an actual configuration file that you will put in your wiki. Do it by running
npm run configs
. The resulting file will be named
dist/convenientDiscussions-config/
filename
Test your configuration file by running
npm run single -- --project=
project_code
--lang=
language_code
(use
-- -- --project
in PowerShell). A file named
convenientDiscussions.single.
project_code
[-
language_code
].js
will be created (and updated on code changes) in the
dist
folder. Start the development server using
npm run dev
, then load the build to the wiki using
mw.loader.load('http://localhost:9000/dist/
filename
')
It will be best if you make a pull request to include your configuration in the CD repository. This way, if something in the script environment changes that affects your configuration file (the format of a property changes, for instance, or a default value, that your value is based on, is updated), other people including the maintainer of the script would be able to notice it and inform you and/or make changes themselves.
Development
edit
GitHub repository
stores code. GitHub Actions builds and deploys the resulting files to wikis.
Phabricator tag
is used to coordinate efforts. (Post bug reports and proposals there, not at GitHub.)
Translatewiki
has localization strings. Please suggest improvements to the English source through a pull request to
en.json
Toolforge
has automatically generated code documentation
for older versions
Starting from v8.0.0, the project relies on TypeScript-flavored JSDoc which makes the project type-safe but doesn't let autogenerate documentation.
Your contributions are welcome! You can either improve the script itself or write plugins for it. Some notes:
The global object of the script is
convenientDiscussions
(the modules use the
cd
alias).
convenientDiscussions.s()
is an analog of
mw.msg()
for the script's language strings.
convenientDiscussions.sParse()
is an analog of
mw.message(...).parse()
. Please make sure all strings that have their raw HTML inserted into the page use
convenientDiscussions.sParse()
to prevent introducing
XSS
vulnerabilities. (All code from untrusted sources is sanitized at earlier stages, but a double check won't hurt.)
The "events" in the left panel of the
documentation
correspond to the names used by
mw.hook
. For example, to attach a handler to the
commentFormCreated
event, you need the code
mw.hook('convenientDiscussions.commentFormCreated').add(
handler
);
To see message names instead of messages themselves on a page, add the
uselang=qqx
parameter to the end of the URL (just like with MediaWiki).
If you write a plugin and need some internal method to be available publicly via the global object, contact the
script's maintainer
(or just make a relevant pull request).
To run
unit tests
, run
npm run test
. Only several key modules are tested. Parser tests are documented in
tests/parser-tests.md
To run
E2E tests
, run
npm run test:browser
. There is limited documentation for them in the
e2e
directory.
Building
edit
Use:
npm run dev
to serve the script from http://localhost:9000/src/loader/startup.js and automatically rebuild on updates. Wiki configuration and translation will still be loaded from web.
npm run single -- --project=
project_code
--lang=
language_code
(use
-- -- --project
in PowerShell) to serve the script as a single file. Useful to debug configuration and translation.
npm run build
to build the main file, source maps,
project configuration
files, translation files, and license file. Use
--staging
to build the files with the
.staging
postfix.
npm run configs
to generate
wiki configuration
files. Use
--staging
to generate the files with the
.staging
postfix.
npm run deploy
to deploy the built files (including wiki configurations) to wikis as configured in
config.js
. Use
--staging
to deploy the staging versions.
See also
edit
Extension:DiscussionTools
Extension:StructuredDiscussions
(Flow)
Retrieved from "
Category
Convenient Discussions
User
Jack who built the house/Convenient Discussions
Add topic
US