Skip to content

Commit 49890b1

Browse files
add popover encouraging user to login if anon
1 parent e2aa8c4 commit 49890b1

3 files changed

Lines changed: 135 additions & 96 deletions

File tree

extension.json

Lines changed: 91 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,93 @@
11
{
2-
"name": "TableProgressTracking",
3-
"author": [
4-
"Telepedia Ltd."
5-
],
6-
"url": "https://www.mediawiki.org/wiki/Extension:TableProgressTracking",
7-
"descriptionmsg": "tableprogresstracking-desc",
8-
"license-name": "Apache-2.0",
9-
"type": "parserhook",
10-
"version": "1.2.1",
11-
"requires": {
12-
"MediaWiki": ">= 1.43.0"
13-
},
14-
"MessagesDirs": {
15-
"TableProgressTracking": [
16-
"i18n"
17-
]
18-
},
19-
"ResourceFileModulePaths": {
20-
"localBasePath": "resources",
21-
"remoteExtPath": ""
22-
},
23-
"ResourceModules": {
24-
"ext.tableProgressTracking.styles": {
25-
"class": "MediaWiki\\ResourceLoader\\CodexModule",
26-
"styles": [
27-
"index.less"
28-
],
29-
"codexStyleOnly": "true",
30-
"codexComponents": [
31-
"CdxCheckbox"
32-
]
33-
},
34-
"ext.tableProgressTracking.scripts": {
35-
"scripts": [
36-
"index.js"
37-
],
38-
"dependencies": [
39-
"mediawiki.user"
40-
]
41-
}
42-
},
43-
"Hooks": {
44-
"ParserFirstCallInit": "main",
45-
"LoadExtensionSchemaUpdates": "main",
46-
"MultiContentSave": "main"
47-
},
48-
"HookHandlers": {
49-
"main": {
50-
"class": "Telepedia\\Extensions\\TableProgressTracking\\Hooks"
51-
}
52-
},
53-
"RestRoutes": [
54-
{
55-
"path": "/progress-tracking/{articleId}/{tableId}",
56-
"method": "POST",
57-
"class": "Telepedia\\Extensions\\TableProgressTracking\\Rest\\TrackProgressHandler",
58-
"services": [
59-
"TableProgressTracking.ProgressService"
60-
]
61-
},
62-
{
63-
"path": "/progress-tracking/{articleId}/{tableId}",
64-
"method": "GET",
65-
"class": "Telepedia\\Extensions\\TableProgressTracking\\Rest\\GetProgressHandler",
66-
"services": [
67-
"TableProgressTracking.ProgressService"
68-
]
69-
},
70-
{
71-
"path": "/progress-tracking/{articleId}/{tableId}",
72-
"method": "DELETE",
73-
"class": "Telepedia\\Extensions\\TableProgressTracking\\Rest\\DeleteProgressHandler",
74-
"services": [
75-
"TableProgressTracking.ProgressService"
76-
]
77-
}
78-
],
79-
"ServiceWiringFiles": [
80-
"includes/ServiceWiring.php"
81-
],
82-
"AutoloadNamespaces": {
83-
"Telepedia\\Extensions\\TableProgressTracking\\": "includes/"
84-
},
85-
"TrackingCategories": [
86-
"tpt-tracking-category"
87-
],
88-
"manifest_version": 2
2+
"name": "TableProgressTracking",
3+
"author": [
4+
"Telepedia Ltd."
5+
],
6+
"url": "https://www.mediawiki.org/wiki/Extension:TableProgressTracking",
7+
"descriptionmsg": "tableprogresstracking-desc",
8+
"license-name": "Apache-2.0",
9+
"type": "parserhook",
10+
"version": "1.2.1",
11+
"requires": {
12+
"MediaWiki": ">= 1.43.0"
13+
},
14+
"MessagesDirs": {
15+
"TableProgressTracking": [
16+
"i18n"
17+
]
18+
},
19+
"ResourceFileModulePaths": {
20+
"localBasePath": "resources",
21+
"remoteExtPath": ""
22+
},
23+
"ResourceModules": {
24+
"ext.tableProgressTracking.styles": {
25+
"class": "MediaWiki\\ResourceLoader\\CodexModule",
26+
"styles": [
27+
"index.less"
28+
],
29+
"codexStyleOnly": "true",
30+
"codexComponents": [
31+
"CdxCheckbox"
32+
]
33+
},
34+
"ext.tableProgressTracking.scripts": {
35+
"scripts": [
36+
"index.js"
37+
],
38+
"dependencies": [
39+
"mediawiki.user",
40+
"oojs-ui-widgets"
41+
],
42+
"messages": [
43+
"tableprogresstracking-anon-popover"
44+
]
45+
}
46+
},
47+
"Hooks": {
48+
"ParserFirstCallInit": "main",
49+
"LoadExtensionSchemaUpdates": "main",
50+
"MultiContentSave": "main"
51+
},
52+
"HookHandlers": {
53+
"main": {
54+
"class": "Telepedia\\Extensions\\TableProgressTracking\\Hooks"
55+
}
56+
},
57+
"RestRoutes": [
58+
{
59+
"path": "/progress-tracking/{articleId}/{tableId}",
60+
"method": "POST",
61+
"class": "Telepedia\\Extensions\\TableProgressTracking\\Rest\\TrackProgressHandler",
62+
"services": [
63+
"TableProgressTracking.ProgressService"
64+
]
65+
},
66+
{
67+
"path": "/progress-tracking/{articleId}/{tableId}",
68+
"method": "GET",
69+
"class": "Telepedia\\Extensions\\TableProgressTracking\\Rest\\GetProgressHandler",
70+
"services": [
71+
"TableProgressTracking.ProgressService"
72+
]
73+
},
74+
{
75+
"path": "/progress-tracking/{articleId}/{tableId}",
76+
"method": "DELETE",
77+
"class": "Telepedia\\Extensions\\TableProgressTracking\\Rest\\DeleteProgressHandler",
78+
"services": [
79+
"TableProgressTracking.ProgressService"
80+
]
81+
}
82+
],
83+
"ServiceWiringFiles": [
84+
"includes/ServiceWiring.php"
85+
],
86+
"AutoloadNamespaces": {
87+
"Telepedia\\Extensions\\TableProgressTracking\\": "includes/"
88+
},
89+
"TrackingCategories": [
90+
"tpt-tracking-category"
91+
],
92+
"manifest_version": 2
8993
}

i18n/en.json

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
{
2-
"@metadata": {
3-
"authors": [
4-
"Telepedia Ltd."
5-
]
6-
},
7-
"tableprogresstracking-desc": "An extension to track progress against MediaWiki tables.",
8-
"tableprogresstracking-duplicate-tables": "Duplicate tables found with the same table-id. The table-id must be unique across all tables.",
9-
"tpt-tracking-category": "Pages using progress tables"
2+
"@metadata": {
3+
"authors": [
4+
"Telepedia Ltd."
5+
]
6+
},
7+
"tableprogresstracking-desc": "An extension to track progress against MediaWiki tables.",
8+
"tableprogresstracking-duplicate-tables": "Duplicate tables found with the same table-id. The table-id must be unique across all tables.",
9+
"tpt-tracking-category": "Pages using progress tables",
10+
"tableprogresstracking-anon-popover": "[[Special:CreateAccount|Register]] or [[Special:UserLogin|login]] to track your progress"
1011
}

resources/index.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ var ProgressTracker = {
2828
// bail if the user is not logged in, nothing we can do here
2929
// @TODO: maybe redirect them to the sign in page instead?
3030
if ( mw.user.isAnon() ) {
31+
this.addPopover();
3132
return;
3233
}
3334

@@ -221,7 +222,40 @@ var ProgressTracker = {
221222
} finally {
222223
table.classList.remove( this.options.classes.saving );
223224
}
224-
}
225+
},
226+
227+
/**
228+
* Add a popup if the user is anonymous when they hover over the checkbox encouraging them to register or
229+
* login to track their progress
230+
*/
231+
addPopover: function () {
232+
const popup = new OO.ui.PopupWidget( {
233+
$content: $( '<p>' + mw.message( 'tableprogresstracking-anon-popover' ).parse() + '</p>' ),
234+
padded: true,
235+
head: false,
236+
anchor: true,
237+
autoClose: false
238+
} );
239+
240+
$( document.body ).append( popup.$element );
241+
242+
const rowCheckboxes = document.querySelectorAll( this.options.selectors.checkbox );
243+
244+
rowCheckboxes.forEach( function ( checkbox ) {
245+
// paranoia!
246+
checkbox.disabled = true;
247+
248+
checkbox.addEventListener( 'mouseenter', function () {
249+
popup.toggleAnchor( true );
250+
popup.setFloatableContainer( $( checkbox ) );
251+
popup.toggle( true );
252+
} );
253+
254+
checkbox.addEventListener( 'mouseleave', function () {
255+
popup.toggle( false );
256+
} );
257+
} );
258+
}
225259
};
226260

227261

0 commit comments

Comments
 (0)