Skip to content

Commit

Permalink
cci: organize ContributionSurveyRevision
Browse files Browse the repository at this point in the history
  • Loading branch information
ChlodAlejandro committed Oct 2, 2022
1 parent 62892cf commit b9b49e0
Show file tree
Hide file tree
Showing 4 changed files with 260 additions and 149 deletions.
5 changes: 4 additions & 1 deletion i18n/core/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,17 @@
"deputy.session.row.checked.talk": "talk",
"deputy.session.row.checked.contribs": "contribs",

"deputy.session.revision.assessed": "Assessed",
"deputy.session.revision.cur": "cur",
"deputy.session.revision.prev": "prev",
"deputy.session.revision.cur.tooltip": "Difference with latest revision",
"deputy.session.revision.prev.tooltip": "Difference with preceding revision",
"deputy.session.revision.talk": "talk",
"deputy.session.revision.contribs": "contribs",
"deputy.session.revision.bytes": "{{FORMATNUM:$1}} bytes",
"deputy.session.revision.byteChange": "{{FORMATNUM:$1}} bytes after change of this size",
"deputy.session.revision.tags": "{{PLURAL:$1|Tag|Tags}}:",
"deputy.session.revision.new": "N",
"deputy.session.revision.new.tooltip": "This edit created a new page.",

"deputy.session.page.diff.next": "Navigate to the next unassessed revision",
"deputy.session.page.diff.loadFail": "Failed to load diff. Please check your internet connection and try again.",
Expand Down
6 changes: 5 additions & 1 deletion src/css/deputy.css
Original file line number Diff line number Diff line change
Expand Up @@ -238,11 +238,15 @@ body.mediawiki.rtl .dp-cs-row-head > :not(:first-child):not(:last-child) {
}

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

.dp-cs-row .newpage {
margin-left: 0.4em;
}

.dp-cs-row-content {
padding: 16px;
background-color: rgba(0, 0, 0, 4%);
Expand Down
218 changes: 218 additions & 0 deletions src/ui/root/DeputyChangesListElements.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
import '../../types';
import { h } from 'tsx-dom';
import { ContributionSurveyRevision } from '../../models/ContributionSurveyRevision';
import getRevisionURL from '../../wiki/util/getRevisionURL';
import getRevisionDiffURL from '../../wiki/util/getRevisionDiffURL';
import nsId from '../../wiki/util/nsId';

/**
* @param root0
* @param root0.revid
* @param root0.parentid
* @return HTML element
*/
export function ChangesListLinks(
{ revid, parentid }: { revid: number, parentid: number }
): JSX.Element {
return <span class="mw-changeslist-links">
<span><a
rel="noopener"
href={ getRevisionDiffURL( revid, 0 ) }
title={ mw.msg( 'deputy.session.revision.cur.tooltip' ) }
target="_blank"
>{ mw.msg( 'deputy.session.revision.cur' ) }</a></span>
<span>{
!parentid ?
mw.msg( 'deputy.session.revision.prev' ) :
<a
rel="noopener"
href={ !parentid ?
null :
getRevisionDiffURL( parentid, revid )
}
title={ mw.msg( 'deputy.session.revision.prev.tooltip' ) }
target="_blank"
>{ mw.msg( 'deputy.session.revision.prev' ) }</a>
}</span>
</span>;
}

/**
* @return HTML element
*/
export function NewPageIndicator(): JSX.Element {
return <abbr
class="newpage"
title={ mw.msg( 'deputy.session.revision.new.tooltip' ) }
>{ mw.msg( 'deputy.session.revision.new' ) }</abbr>;
}
/**
* @param root0
* @param root0.timestamp
* @return HTML element
*/
export function ChangesListTime(
{ timestamp }: { timestamp: string }
): JSX.Element {
const time = new Date( timestamp );
const formattedTime = time.toLocaleTimeString( window.deputyLang, {
hourCycle: 'h24',
timeStyle: mw.user.options.get( 'date' ) === 'ISO 8601' ? 'long' : 'short'
} );

return <span class="mw-changeslist-time">{ formattedTime }</span>;
}

/**
* @param root0
* @param root0.revision
* @return HTML element
*/
export function ChangesListDate(
{ revision }: { revision: ContributionSurveyRevision }
): JSX.Element {
const time = new Date( revision.timestamp );
let now = window.moment( time );

if ( window.deputy.config.cci.forceUtc.get() ) {
now = now.utc();
}
const formattedTime = time.toLocaleTimeString( window.deputyLang, {
hourCycle: 'h24',
timeStyle: mw.user.options.get( 'date' ) === 'ISO 8601' ? 'long' : 'short'
} );
const formattedDate = now.locale( window.deputyLang ).format( {
dmy: 'D MMMM YYYY',
mdy: 'MMMM D, Y',
ymd: 'YYYY MMMM D',
'ISO 8601': 'YYYY:MM:DD[T]HH:mm:SS'
}[ mw.user.options.get( 'date' ) as string ] );

const comma = mw.msg( 'comma-separator' );

return <a class="mw-changeslist-date" href={
getRevisionURL( revision.revid, revision.page.title )
}>{ formattedTime }{ comma }{ formattedDate }</a>;
}

/**
* @param root0
* @param root0.user
* @return HTML element
*/
export function ChangesListUser( { user }: { user: string } ) {
const userPage = new mw.Title( user, nsId( 'user' ) );
const userTalkPage = new mw.Title( user, nsId( 'user_talk' ) );
const userContribsPage = new mw.Title( 'Special:Contributions/' + user );

return <span class="history-user">
<a
class="mw-userlink"
target="_blank"
rel="noopener"
href={ mw.format(
mw.config.get( 'wgArticlePath' ),
userPage.getPrefixedDb()
) }
title={ userPage.getPrefixedText() }
>{ userPage.getPrefixedText() }</a> <span
class="mw-usertoollinks mw-changeslist-links"
><span><a
class="mw-usertoollinks-talk"
target="_blank"
rel="noopener"
href={mw.format(
mw.config.get( 'wgArticlePath' ),
userTalkPage.getPrefixedDb()
)}
title={ userTalkPage.getPrefixedText() }
>{ mw.msg( 'deputy.session.revision.talk' ) }</a></span> <span><a
class="mw-usertoollinks-contribs"
target="_blank"
rel="noopener"
href={mw.format(
mw.config.get( 'wgArticlePath' ),
userContribsPage.getPrefixedDb()
)}
title={ userContribsPage.getPrefixedText() }
>{ mw.msg( 'deputy.session.revision.contribs' ) }</a></span>
</span>
</span>;
}

/**
* @param root0
* @param root0.size
* @return HTML element
*/
export function ChangesListBytes( { size }: { size: number } ): JSX.Element {
return <span
class="history-size mw-diff-bytes"
data-mw-bytes={ size }
>{ mw.message( 'deputy.session.revision.bytes', size.toString() ).text() }</span>;
}

/**
* @param root0
* @param root0.diffsize
* @param root0.size
* @return HTML element
*/
export function ChangesListDiff(
{ diffsize, size }: { diffsize: number, size: number }
): JSX.Element {
const DiffTag = (
Math.abs( diffsize ) > 500 ?
'strong' :
'span'
) as keyof JSX.IntrinsicElements;

return <DiffTag class={ `mw-plusminus-${
diffsize === 0 ? 'null' :
( diffsize > 0 ? 'pos' : 'neg' )
} mw-diff-bytes` } title={
mw.message(
'deputy.session.revision.byteChange',
size.toString()
).text()
}>
{
mw.message(
`deputy.${
diffsize < 0 ? 'negative' : 'positive'
}Diff`,
diffsize.toString()
).text()
}
</DiffTag>;
}

/**
* @param root0
* @param root0.tags
* @return HTML element
*/
export function ChangesListTags( { tags }: { tags: string[] } ): JSX.Element {
return <span class="mw-tag-markers"><a
rel="noopener"
href={mw.format(
mw.config.get( 'wgArticlePath' ),
'Special:Tags'
)}
title="Special:Tags"
target="_blank"
>{ mw.message(
'deputy.session.revision.tags',
tags.length.toString()
).text() }</a>{
tags.map( ( v ) => {
// eslint-disable-next-line mediawiki/msg-doc
const tagMessage = mw.message( `tag-${ v }` ).parse();
return tagMessage !== '-' && <span
class={ `mw-tag-marker mw-tag-marker-${ v }` }
dangerouslySetInnerHTML={ tagMessage }
/>;
} )
}
</span>;
}
Loading

0 comments on commit b9b49e0

Please sign in to comment.