JGonera has submitted this change and it was merged.
Change subject: Alpha: Rewrite makePrettyDiff function
......................................................................
Alpha: Rewrite makePrettyDiff function
Add test case current function doesn't satisfy
Rewrite and simplify function
Change-Id: Iedf7643307247b6672ee63351dbd58a7431e98cc
---
M javascripts/specials/mobilediff.js
M tests/javascripts/specials/test_mobilediff.js
2 files changed, 31 insertions(+), 39 deletions(-)
Approvals:
JGonera: Verified; Looks good to me, approved
jenkins-bot: Checked
diff --git a/javascripts/specials/mobilediff.js
b/javascripts/specials/mobilediff.js
index 1c70966..2e21156 100644
--- a/javascripts/specials/mobilediff.js
+++ b/javascripts/specials/mobilediff.js
@@ -1,51 +1,39 @@
( function( $, M ) {
function makePrettyDiff( $diff ) {
- var $diffclone = $diff.clone();
+ var $diffclone = $diff.clone(), before = '', after = '',
+ diff;
- // simple case where just an insert or just a delete
- if ( $diff.children( 'ins' ).length === 0 || $diff.children(
'del' ).length === 0 ) {
- $diff.empty().addClass( 'prettyDiff' );
- $diffclone.find( 'del,ins' ).each( function() {
- var $el = $( this ).clone();
- if ( $el.text() ) { // don't add empty elements
- $el.appendTo( $diff );
- $( '<br>' ).appendTo( $diff );
- }
- } );
- return $diff;
- } else if ( $diff.children().length > 1 ) { // if there is only
one line it is not a complicated diff
- $diff.empty().addClass( 'prettyDiff' );
- $diffclone.find( 'ins' ).each( function() {
- var $del = $( this ).prev( 'del' ), $add = $(
this ),
- diffChars;
+ $diffclone.find( 'del,ins' ).each( function() {
+ if ( this.tagName === 'DEL' ) {
+ before += $( this ).text() + '<br>';
+ } else {
+ after += $( this ).text() + '<br>';
+ }
+ } );
+ $diff.empty().addClass( 'prettyDiff' );
- if ( $del.length > 0 ) {
- while ( $add.next()[ 0 ] &&
$add.next()[ 0 ].tagName === 'INS' ) {
- $add.clone().appendTo( $diff );
+ diff = JsDiff.diffWords( before, after );
+ diff.forEach( function( change ) {
+ var tag, vals;
+ if ( change.added ) {
+ tag = '<ins>';
+ } else if ( change.removed ) {
+ tag = '<del>';
+ } else {
+ tag = '<span>';
+ }
+ vals = change.value.split( '<br>' );
+ vals.forEach( function( val ) {
+ if ( val ) {
+ $( tag ).text( val ).appendTo( $diff );
+ if ( vals.length > 1 ) {
$( '<br>' ).appendTo( $diff );
- $add = $add.next();
}
-
- diffChars = JsDiff.diffWords(
$del.text(), $add.text() );
- diffChars.forEach( function( change ) {
- var tag;
- if ( change.added ) {
- tag = '<ins>';
- } else if ( change.removed ) {
- tag = '<del>';
- } else {
- tag = '<span>';
- }
- $( tag ).text( change.value
).appendTo( $diff );
- } );
- } else if ( $add.prev()[ 0 ].tagName !== 'INS'
){
- $add.clone().css( 'display', 'inline'
).appendTo( $diff );
}
-
- $( '<br>' ).appendTo( $diff );
} );
- }
+ } );
+
return $diff;
}
diff --git a/tests/javascripts/specials/test_mobilediff.js
b/tests/javascripts/specials/test_mobilediff.js
index c2e4c37..ab22b97 100644
--- a/tests/javascripts/specials/test_mobilediff.js
+++ b/tests/javascripts/specials/test_mobilediff.js
@@ -12,6 +12,10 @@
'<span>Remove the </span><del>one
</del><span>please</span><br>'
],
[
+ $( '<div><ins>Added text</ins><ins>Blah, bloh, foo and
bleh [[linkchange]]</ins><del>Blah, bloh and bleh [[link]]</del><ins>more
text</ins></div>' ),
+ '<ins>Added text</ins><br><span>Blah,
bloh</span><ins>,</ins><span> </span><ins>foo </ins><span>and bleh
[[</span><ins>linkchange</ins><del>link</del><span>]]</span><br><ins>more
text</ins><br>'
+ ],
+ [
$( '<div id="mw-mf-minidiff"><del>According to popular
legend, the \'\'\'Shanghai Tunnels,\'\'\' less commonly known as the
\'\'\'Portland Underground,\'\'\' are supposedly a group of passages running
underneath [[Old Town Chinatown, Portland, Oregon|Old Town/Chinatown]] down to
the central downtown section of [[Portland, Oregon|Portland]], [[Oregon]],
[[United States]]. The tunnels connected the [[basement]]s of many downtown
[[hotel]]s and [[bar (establishment)|bar]]s to the waterfront of the
[[Willamette River]]. They were built to move goods from the ships docked on
the Willamette to the basement storage areas, which allowed businesses to avoid
streetcar and train traffic on the streets when delivering their
goods.{{fact|date=March 2012}}</del><ins>According to popular legend, the
\'\'\'Shanghai Tunnels,\'\'\' less commonly known as the \'\'\'Portland
Underground,\'\'\' are a group of passages running underneath [[Old Town
Chinatown, Portland, Oregon|Old Town/Chinatown]] down to the central downtown
section of [[Portland, Oregon|Portland]], [[Oregon]], [[United States]]. The
tunnels connected the [[basement]]s of many downtown [[hotel]]s and [[bar
(establishment)|bar]]s to the waterfront of the [[Willamette River]]. They were
built to move goods from the ships docked on the Willamette to the basement
storage areas, which allowed businesses to avoid streetcar and train traffic on
the streets when delivering their goods.{{fact|date=March 2012}}</ins></div>' ),
'<span>According to popular legend, the \'\'\'Shanghai
Tunnels,\'\'\' less commonly known as the \'\'\'Portland Underground,\'\'\' are
</span><del>supposedly </del><span>a group of passages running underneath [[Old
Town Chinatown, Portland, Oregon|Old Town/Chinatown]] down to the central
downtown section of [[Portland, Oregon|Portland]], [[Oregon]], [[United
States]]. The tunnels connected the [[basement]]s of many downtown [[hotel]]s
and [[bar (establishment)|bar]]s to the waterfront of the [[Willamette River]].
They were built to move goods from the ships docked on the Willamette to the
basement storage areas, which allowed businesses to avoid streetcar and train
traffic on the streets when delivering their goods.{{fact|date=March
2012}}</span><br>'
],
--
To view, visit https://gerrit.wikimedia.org/r/60816
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Iedf7643307247b6672ee63351dbd58a7431e98cc
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MobileFrontend
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
Gerrit-Reviewer: JGonera <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits