Skip to content

Commit b9b49e0

Browse files
cci: organize ContributionSurveyRevision
1 parent 62892cf commit b9b49e0

File tree

4 files changed

+260
-149
lines changed

4 files changed

+260
-149
lines changed

i18n/core/en.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,17 @@
5555
"deputy.session.row.checked.talk": "talk",
5656
"deputy.session.row.checked.contribs": "contribs",
5757

58-
"deputy.session.revision.assessed": "Assessed",
5958
"deputy.session.revision.cur": "cur",
6059
"deputy.session.revision.prev": "prev",
60+
"deputy.session.revision.cur.tooltip": "Difference with latest revision",
61+
"deputy.session.revision.prev.tooltip": "Difference with preceding revision",
6162
"deputy.session.revision.talk": "talk",
6263
"deputy.session.revision.contribs": "contribs",
6364
"deputy.session.revision.bytes": "{{FORMATNUM:$1}} bytes",
6465
"deputy.session.revision.byteChange": "{{FORMATNUM:$1}} bytes after change of this size",
6566
"deputy.session.revision.tags": "{{PLURAL:$1|Tag|Tags}}:",
67+
"deputy.session.revision.new": "N",
68+
"deputy.session.revision.new.tooltip": "This edit created a new page.",
6669

6770
"deputy.session.page.diff.next": "Navigate to the next unassessed revision",
6871
"deputy.session.page.diff.loadFail": "Failed to load diff. Please check your internet connection and try again.",

src/css/deputy.css

+5-1
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,15 @@ body.mediawiki.rtl .dp-cs-row-head > :not(:first-child):not(:last-child) {
238238
}
239239

240240
.dp-cs-row .history-user,
241-
.dp-cs-row .mw-changeslist-date {
241+
.dp-cs-row :not(.newpage) + .mw-changeslist-date {
242242
margin-left: 0.4em;
243243
margin-right: 0.2em;
244244
}
245245

246+
.dp-cs-row .newpage {
247+
margin-left: 0.4em;
248+
}
249+
246250
.dp-cs-row-content {
247251
padding: 16px;
248252
background-color: rgba(0, 0, 0, 4%);
+218
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
import '../../types';
2+
import { h } from 'tsx-dom';
3+
import { ContributionSurveyRevision } from '../../models/ContributionSurveyRevision';
4+
import getRevisionURL from '../../wiki/util/getRevisionURL';
5+
import getRevisionDiffURL from '../../wiki/util/getRevisionDiffURL';
6+
import nsId from '../../wiki/util/nsId';
7+
8+
/**
9+
* @param root0
10+
* @param root0.revid
11+
* @param root0.parentid
12+
* @return HTML element
13+
*/
14+
export function ChangesListLinks(
15+
{ revid, parentid }: { revid: number, parentid: number }
16+
): JSX.Element {
17+
return <span class="mw-changeslist-links">
18+
<span><a
19+
rel="noopener"
20+
href={ getRevisionDiffURL( revid, 0 ) }
21+
title={ mw.msg( 'deputy.session.revision.cur.tooltip' ) }
22+
target="_blank"
23+
>{ mw.msg( 'deputy.session.revision.cur' ) }</a></span>
24+
<span>{
25+
!parentid ?
26+
mw.msg( 'deputy.session.revision.prev' ) :
27+
<a
28+
rel="noopener"
29+
href={ !parentid ?
30+
null :
31+
getRevisionDiffURL( parentid, revid )
32+
}
33+
title={ mw.msg( 'deputy.session.revision.prev.tooltip' ) }
34+
target="_blank"
35+
>{ mw.msg( 'deputy.session.revision.prev' ) }</a>
36+
}</span>
37+
</span>;
38+
}
39+
40+
/**
41+
* @return HTML element
42+
*/
43+
export function NewPageIndicator(): JSX.Element {
44+
return <abbr
45+
class="newpage"
46+
title={ mw.msg( 'deputy.session.revision.new.tooltip' ) }
47+
>{ mw.msg( 'deputy.session.revision.new' ) }</abbr>;
48+
}
49+
/**
50+
* @param root0
51+
* @param root0.timestamp
52+
* @return HTML element
53+
*/
54+
export function ChangesListTime(
55+
{ timestamp }: { timestamp: string }
56+
): JSX.Element {
57+
const time = new Date( timestamp );
58+
const formattedTime = time.toLocaleTimeString( window.deputyLang, {
59+
hourCycle: 'h24',
60+
timeStyle: mw.user.options.get( 'date' ) === 'ISO 8601' ? 'long' : 'short'
61+
} );
62+
63+
return <span class="mw-changeslist-time">{ formattedTime }</span>;
64+
}
65+
66+
/**
67+
* @param root0
68+
* @param root0.revision
69+
* @return HTML element
70+
*/
71+
export function ChangesListDate(
72+
{ revision }: { revision: ContributionSurveyRevision }
73+
): JSX.Element {
74+
const time = new Date( revision.timestamp );
75+
let now = window.moment( time );
76+
77+
if ( window.deputy.config.cci.forceUtc.get() ) {
78+
now = now.utc();
79+
}
80+
const formattedTime = time.toLocaleTimeString( window.deputyLang, {
81+
hourCycle: 'h24',
82+
timeStyle: mw.user.options.get( 'date' ) === 'ISO 8601' ? 'long' : 'short'
83+
} );
84+
const formattedDate = now.locale( window.deputyLang ).format( {
85+
dmy: 'D MMMM YYYY',
86+
mdy: 'MMMM D, Y',
87+
ymd: 'YYYY MMMM D',
88+
'ISO 8601': 'YYYY:MM:DD[T]HH:mm:SS'
89+
}[ mw.user.options.get( 'date' ) as string ] );
90+
91+
const comma = mw.msg( 'comma-separator' );
92+
93+
return <a class="mw-changeslist-date" href={
94+
getRevisionURL( revision.revid, revision.page.title )
95+
}>{ formattedTime }{ comma }{ formattedDate }</a>;
96+
}
97+
98+
/**
99+
* @param root0
100+
* @param root0.user
101+
* @return HTML element
102+
*/
103+
export function ChangesListUser( { user }: { user: string } ) {
104+
const userPage = new mw.Title( user, nsId( 'user' ) );
105+
const userTalkPage = new mw.Title( user, nsId( 'user_talk' ) );
106+
const userContribsPage = new mw.Title( 'Special:Contributions/' + user );
107+
108+
return <span class="history-user">
109+
<a
110+
class="mw-userlink"
111+
target="_blank"
112+
rel="noopener"
113+
href={ mw.format(
114+
mw.config.get( 'wgArticlePath' ),
115+
userPage.getPrefixedDb()
116+
) }
117+
title={ userPage.getPrefixedText() }
118+
>{ userPage.getPrefixedText() }</a> <span
119+
class="mw-usertoollinks mw-changeslist-links"
120+
><span><a
121+
class="mw-usertoollinks-talk"
122+
target="_blank"
123+
rel="noopener"
124+
href={mw.format(
125+
mw.config.get( 'wgArticlePath' ),
126+
userTalkPage.getPrefixedDb()
127+
)}
128+
title={ userTalkPage.getPrefixedText() }
129+
>{ mw.msg( 'deputy.session.revision.talk' ) }</a></span> <span><a
130+
class="mw-usertoollinks-contribs"
131+
target="_blank"
132+
rel="noopener"
133+
href={mw.format(
134+
mw.config.get( 'wgArticlePath' ),
135+
userContribsPage.getPrefixedDb()
136+
)}
137+
title={ userContribsPage.getPrefixedText() }
138+
>{ mw.msg( 'deputy.session.revision.contribs' ) }</a></span>
139+
</span>
140+
</span>;
141+
}
142+
143+
/**
144+
* @param root0
145+
* @param root0.size
146+
* @return HTML element
147+
*/
148+
export function ChangesListBytes( { size }: { size: number } ): JSX.Element {
149+
return <span
150+
class="history-size mw-diff-bytes"
151+
data-mw-bytes={ size }
152+
>{ mw.message( 'deputy.session.revision.bytes', size.toString() ).text() }</span>;
153+
}
154+
155+
/**
156+
* @param root0
157+
* @param root0.diffsize
158+
* @param root0.size
159+
* @return HTML element
160+
*/
161+
export function ChangesListDiff(
162+
{ diffsize, size }: { diffsize: number, size: number }
163+
): JSX.Element {
164+
const DiffTag = (
165+
Math.abs( diffsize ) > 500 ?
166+
'strong' :
167+
'span'
168+
) as keyof JSX.IntrinsicElements;
169+
170+
return <DiffTag class={ `mw-plusminus-${
171+
diffsize === 0 ? 'null' :
172+
( diffsize > 0 ? 'pos' : 'neg' )
173+
} mw-diff-bytes` } title={
174+
mw.message(
175+
'deputy.session.revision.byteChange',
176+
size.toString()
177+
).text()
178+
}>
179+
{
180+
mw.message(
181+
`deputy.${
182+
diffsize < 0 ? 'negative' : 'positive'
183+
}Diff`,
184+
diffsize.toString()
185+
).text()
186+
}
187+
</DiffTag>;
188+
}
189+
190+
/**
191+
* @param root0
192+
* @param root0.tags
193+
* @return HTML element
194+
*/
195+
export function ChangesListTags( { tags }: { tags: string[] } ): JSX.Element {
196+
return <span class="mw-tag-markers"><a
197+
rel="noopener"
198+
href={mw.format(
199+
mw.config.get( 'wgArticlePath' ),
200+
'Special:Tags'
201+
)}
202+
title="Special:Tags"
203+
target="_blank"
204+
>{ mw.message(
205+
'deputy.session.revision.tags',
206+
tags.length.toString()
207+
).text() }</a>{
208+
tags.map( ( v ) => {
209+
// eslint-disable-next-line mediawiki/msg-doc
210+
const tagMessage = mw.message( `tag-${ v }` ).parse();
211+
return tagMessage !== '-' && <span
212+
class={ `mw-tag-marker mw-tag-marker-${ v }` }
213+
dangerouslySetInnerHTML={ tagMessage }
214+
/>;
215+
} )
216+
}
217+
</span>;
218+
}

0 commit comments

Comments
 (0)