mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/DiscussionTools
synced 2024-11-13 18:37:07 +00:00
Merge "Debug: Introduce "vote" debug mode"
This commit is contained in:
commit
b491d52c03
|
@ -1,30 +1,86 @@
|
||||||
var
|
var
|
||||||
Parser = require( 'ext.discussionTools.init' ).Parser,
|
Parser = require( 'ext.discussionTools.init' ).Parser,
|
||||||
|
modifier = require( 'ext.discussionTools.init' ).modifier,
|
||||||
|
utils = require( 'ext.discussionTools.init' ).utils,
|
||||||
highlighter = require( './highlighter.js' ),
|
highlighter = require( './highlighter.js' ),
|
||||||
parser = new Parser( document.getElementById( 'mw-content-text' ) ),
|
parser = new Parser( document.getElementById( 'mw-content-text' ) ),
|
||||||
comments = parser.getCommentItems(),
|
comments = parser.getCommentItems(),
|
||||||
threads = parser.getThreads(),
|
threads = parser.getThreads(),
|
||||||
timestampRegexps = parser.getLocalTimestampRegexps();
|
timestampRegexps = parser.getLocalTimestampRegexps(),
|
||||||
|
debug = +( new mw.Uri().query.dtdebug ),
|
||||||
|
DEBUG_HIGHLIGHT = 1,
|
||||||
|
DEBUG_VOTE = 2,
|
||||||
|
DEBUG_VOTE_PERMISSIVE = 4;
|
||||||
|
|
||||||
highlighter.markThreads( threads );
|
// eslint-disable-next-line no-bitwise
|
||||||
|
if ( debug & DEBUG_HIGHLIGHT ) {
|
||||||
|
highlighter.markThreads( threads );
|
||||||
|
|
||||||
comments.forEach( function ( comment ) {
|
// TODO: Use comment.signatureRanges to mark up signatures/timestamps
|
||||||
comment.signatureRanges.forEach( function ( signatureRange ) {
|
comments.forEach( function ( comment ) {
|
||||||
var signature, emptySignature, node, match;
|
comment.signatureRanges.forEach( function ( signatureRange ) {
|
||||||
|
var signature, emptySignature, node, match;
|
||||||
|
|
||||||
node = signatureRange.endContainer;
|
node = signatureRange.endContainer;
|
||||||
match = parser.findTimestamp( node, timestampRegexps );
|
match = parser.findTimestamp( node, timestampRegexps );
|
||||||
if ( !match ) {
|
if ( !match ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
signature = parser.findSignature( node )[ 0 ];
|
signature = parser.findSignature( node )[ 0 ];
|
||||||
emptySignature = signature.length === 1 && signature[ 0 ] === node;
|
emptySignature = signature.length === 1 && signature[ 0 ] === node;
|
||||||
// Note that additional content may follow the timestamp (e.g. in some voting formats), but we
|
// Note that additional content may follow the timestamp (e.g. in some voting formats), but we
|
||||||
// don't care about it. The code below doesn't mark that due to now the text nodes are sliced,
|
// don't care about it. The code below doesn't mark that due to now the text nodes are sliced,
|
||||||
// but we might need to take care to use the matched range of node in other cases.
|
// but we might need to take care to use the matched range of node in other cases.
|
||||||
highlighter.markTimestamp( parser, node, match );
|
highlighter.markTimestamp( parser, node, match );
|
||||||
if ( !emptySignature ) {
|
if ( !emptySignature ) {
|
||||||
highlighter.markSignature( signature );
|
highlighter.markSignature( signature );
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-bitwise
|
||||||
|
if ( ( debug & DEBUG_VOTE ) || ( debug & DEBUG_VOTE_PERMISSIVE ) ) {
|
||||||
|
threads.forEach( function ( thread ) {
|
||||||
|
var level, lastReply, listItem, firstVote,
|
||||||
|
firstComment = thread.replies[ 0 ];
|
||||||
|
|
||||||
|
if ( firstComment && firstComment.type === 'comment' ) {
|
||||||
|
// eslint-disable-next-line no-bitwise
|
||||||
|
if ( !( debug & DEBUG_VOTE_PERMISSIVE ) && firstComment.level <= 1 ) {
|
||||||
|
// Not in permissive vote mode, and first reply was not indented
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
firstVote = firstComment.level === 1 ?
|
||||||
|
// In permissive mode, the first vote is the replies to the OP
|
||||||
|
firstComment.replies[ 0 ] :
|
||||||
|
firstComment;
|
||||||
|
|
||||||
|
if ( !firstVote ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
level = firstVote.level;
|
||||||
|
firstVote.parent.replies.forEach( function ( reply ) {
|
||||||
|
if ( reply.type === 'comment' && reply.level <= level ) {
|
||||||
|
lastReply = reply;
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
listItem = modifier.addSiblingListItem(
|
||||||
|
utils.closestElement( lastReply.range.endContainer, [ 'li', 'dd', 'p' ] )
|
||||||
|
);
|
||||||
|
if ( listItem && listItem.tagName.toLowerCase() === 'li' ) {
|
||||||
|
$( listItem )
|
||||||
|
// Hide bullet/number
|
||||||
|
.css( 'list-style', 'none' )
|
||||||
|
.append(
|
||||||
|
'[ ',
|
||||||
|
$( '<a>' ).text( 'add comment' ),
|
||||||
|
' ]'
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
} );
|
}
|
||||||
|
|
Loading…
Reference in a new issue