WMDE-Fisch has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/319559

Change subject: [WIP] Draw lines between pointer and column
......................................................................

[WIP] Draw lines between pointer and column

Introducing a new class that draws lines between the pointer
and the related diff column.

ToDo:
- refresh lines on click

Bug: T149175
Change-Id: Iadf779368c58da7779c769bda8e9bd3fc5afcffa
---
M extension.json
M modules/ext.RevisionSlider.Pointer.js
A modules/ext.RevisionSlider.PointerLine.js
M modules/ext.RevisionSlider.SliderView.js
M modules/ext.RevisionSlider.css
5 files changed, 201 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/RevisionSlider 
refs/changes/59/319559/1

diff --git a/extension.json b/extension.json
index 280545b..ed1e8af 100644
--- a/extension.json
+++ b/extension.json
@@ -88,7 +88,8 @@
                                "modules/ext.RevisionSlider.Pointer.js"
                        ],
                        "dependencies": [
-                               "ext.RevisionSlider.PointerView"
+                               "ext.RevisionSlider.PointerView",
+                               "ext.RevisionSlider.PointerLine"
                        ]
                },
                "ext.RevisionSlider.PointerView": {
@@ -96,6 +97,11 @@
                                "modules/ext.RevisionSlider.PointerView.js"
                        ]
                },
+               "ext.RevisionSlider.PointerLine": {
+                       "scripts": [
+                               "modules/ext.RevisionSlider.PointerLine.js"
+                       ]
+               },
                "ext.RevisionSlider.Slider": {
                        "scripts": [
                                "modules/ext.RevisionSlider.Slider.js"
diff --git a/modules/ext.RevisionSlider.Pointer.js 
b/modules/ext.RevisionSlider.Pointer.js
index 6010857..3f53e88 100644
--- a/modules/ext.RevisionSlider.Pointer.js
+++ b/modules/ext.RevisionSlider.Pointer.js
@@ -7,6 +7,7 @@
         */
        var Pointer = function ( name ) {
                this.view = new mw.libs.revisionSlider.PointerView( this, name 
);
+               this.line = new mw.libs.revisionSlider.PointerLine( this, name 
);
        };
 
        $.extend( Pointer.prototype, {
@@ -19,6 +20,11 @@
                 * @type {PointerView}
                 */
                view: null,
+
+               /**
+                * @type {PointerLine}
+                */
+               line: null,
 
                /**
                 * @param {number} p
@@ -39,6 +45,13 @@
                 */
                getView: function () {
                        return this.view;
+               },
+
+               /**
+                * @return {PointerLine}
+                */
+               getLine: function () {
+                       return this.line;
                }
        } );
 
diff --git a/modules/ext.RevisionSlider.PointerLine.js 
b/modules/ext.RevisionSlider.PointerLine.js
new file mode 100644
index 0000000..d09575b
--- /dev/null
+++ b/modules/ext.RevisionSlider.PointerLine.js
@@ -0,0 +1,109 @@
+( function ( mw, $ ) {
+       /**
+        * Module containing presentation logic for the revision pointer lines
+        *
+        * @param {Pointer} pointer
+        * @param {string} name
+        * @constructor
+        */
+       var PointerLine = function ( pointer, name ) {
+               this.pointer = pointer;
+               this.name = name;
+       };
+
+       $.extend( PointerLine.prototype, {
+               /**
+                * @type {string}
+                */
+               name: '',
+
+               /**
+                * @type {Pointer}
+                */
+               pointer: null,
+
+               /**
+                * @type {jQuery}
+                */
+               $html: null,
+
+               calculateLineSettings: function ( $source, $target ) {
+                       var offsetDiff, targetRightFromSource, widthToSet, 
leftToSet;
+                       offsetDiff = ( $target.offset().left + $target.width() 
/ 2 ) -
+                               ( $source.offset().left + ( $source.width() + 4 
) / 2 ); // +4 left-margin messes with calculation
+
+                       targetRightFromSource = offsetDiff > 0;
+
+                       widthToSet = Math.abs( offsetDiff );
+                       leftToSet = ( $target.offset().left + $target.width() / 
2 ) -
+                               $( '.mw-revslider-revision-slider' 
).offset().left;
+
+                       if ( targetRightFromSource ) {
+                               leftToSet -= widthToSet;
+                       }
+
+                       return {
+                               rightFromSource: targetRightFromSource,
+                               widthToSet: widthToSet,
+                               leftToSet: leftToSet
+                       };
+               },
+
+               drawLine: function () {
+                       var $upperLineDiv = this.$html.find( 
'.mw-revslider-pointer-line-upper' ),
+                               $lowerLineDiv = this.$html.find( 
'.mw-revslider-pointer-line-lower' ),
+                               settings;
+
+                       if ( !this.pointer.getView().isUpperPointer() ) {
+                               $lowerLineDiv.removeClass( 
'mw-revslider-upper-color' ).addClass( 'mw-revslider-lower-color' );
+                               $upperLineDiv.removeClass( 
'mw-revslider-upper-color' ).addClass( 'mw-revslider-lower-color' );
+                               settings = this.calculateLineSettings( 
this.pointer.getView().getElement(), $( '.diff-otitle' ) );
+                       } else {
+                               $lowerLineDiv.removeClass( 
'mw-revslider-lower-color' ).addClass( 'mw-revslider-upper-color' );
+                               $upperLineDiv.removeClass( 
'mw-revslider-lower-color' ).addClass( 'mw-revslider-upper-color' );
+                               settings = this.calculateLineSettings( 
this.pointer.getView().getElement(), $( '.diff-ntitle' ) );
+                       }
+
+                       this.$html.css( { left: settings.leftToSet + 'px', 
width: settings.widthToSet + 'px' } );
+
+                       $upperLineDiv.addClass( 'mw-revslider-bottom-line' );
+                       if ( settings.rightFromSource ) {
+                               $upperLineDiv.addClass( 
'mw-revslider-left-line' );
+                               $lowerLineDiv.addClass( 
'mw-revslider-right-line' );
+                       } else {
+                               $upperLineDiv.addClass( 
'mw-revslider-right-line' );
+                               $lowerLineDiv.addClass( 
'mw-revslider-left-line' );
+                       }
+               },
+
+               /**
+                * Initializes the DOM element
+                */
+               initialize: function () {
+                       this.$html = $( '<div>' )
+                               .addClass( 'mw-revslider-pointer-line ' + 
this.name )
+                               .append(
+                                       $( '<div>' ).addClass( 
'mw-revslider-pointer-line-upper ' + this.name ),
+                                       $( '<div>' ).addClass( 
'mw-revslider-pointer-line-lower ' + this.name )
+                               );
+               },
+
+               /**
+                * @return {jQuery}
+                */
+               render: function () {
+                       this.initialize();
+                       return this.getElement();
+               },
+
+               /**
+                * @return {jQuery}
+                */
+               getElement: function () {
+                       return this.$html;
+               }
+       } );
+
+       mw.libs.revisionSlider = mw.libs.revisionSlider || {};
+       mw.libs.revisionSlider.PointerLine = PointerLine;
+}( mediaWiki, jQuery ) );
diff --git a/modules/ext.RevisionSlider.SliderView.js 
b/modules/ext.RevisionSlider.SliderView.js
index fdeb42f..ba3d883 100644
--- a/modules/ext.RevisionSlider.SliderView.js
+++ b/modules/ext.RevisionSlider.SliderView.js
@@ -194,7 +194,8 @@
                                        $( '<div>' )
                                                .addClass( 
'mw-revslider-pointer-container' )
                                                .css( pointerContainerStyle )
-                                               .append( 
this.pointerOlder.getView().render(), this.pointerNewer.getView().render() )
+                                               .append( 
this.pointerOlder.getView().render(), this.pointerNewer.getView().render() ),
+                                       this.pointerOlder.getLine().render(), 
this.pointerNewer.getLine().render()
                                );
 
                        $slider.find( '.mw-revslider-pointer' ).draggable( {
@@ -221,6 +222,8 @@
                                        revId1 = self.getRevElementAtPosition( 
$revisions, self.pointerOlder.getPosition() ).data( 'revid' );
 
                                        revId2 = self.getRevElementAtPosition( 
$revisions, self.pointerNewer.getPosition() ).data( 'revid' );
+
+                                       self.redrawPointerLines();
 
                                        self.refreshRevisions( revId1, revId2 );
 
@@ -262,6 +265,8 @@
                        this.slide( Math.floor( ( 
this.pointerNewer.getPosition() - 1 ) / this.slider.getRevisionsPerWindow() ), 
0 );
                        this.diffPage.replaceState( 
mw.config.values.extRevisionSliderOldRev, 
mw.config.values.extRevisionSliderNewRev, this );
                        this.diffPage.initOnPopState( this );
+
+                       this.redrawPointerLines();
                },
 
                showPopup: function ( e ) {
@@ -336,6 +341,7 @@
                        view.resetPointerColorsBasedOnValues( 
view.pointerOlder.getPosition(), view.pointerNewer.getPosition() );
                        view.resetRevisionStylesBasedOnPointerPosition( 
$revisions );
                        view.alignPointers();
+                       view.redrawPointerLines();
                },
 
                /**
@@ -486,6 +492,16 @@
                },
 
                /**
+                * Redraws the lines for the pointers
+                */
+               redrawPointerLines: function () {
+                       $( '.mw-revslider-pointer-line-upper, 
.mw-revslider-pointer-line-lower' )
+                               .removeClass( 'mw-revslider-bottom-line 
mw-revslider-left-line mw-revslider-right-line' );
+                       this.pointerOlder.getLine().drawLine();
+                       this.pointerNewer.getLine().drawLine();
+               },
+
+               /**
                 * @return {number}
                 */
                calculateSliderContainerWidth: function () {
diff --git a/modules/ext.RevisionSlider.css b/modules/ext.RevisionSlider.css
index cfa724a..89e22c5 100644
--- a/modules/ext.RevisionSlider.css
+++ b/modules/ext.RevisionSlider.css
@@ -305,3 +305,58 @@
        bottom: 0;
        margin-right: 0;
 }
+
+.mw-revslider-pointer-line {
+       position: absolute;
+       top: 73px;
+       z-index: -5;
+}
+
+.mw-revslider-pointer-line-upper,
+.mw-revslider-pointer-line-lower {
+       border: 0 solid transparent;
+}
+
+.mw-revslider-pointer-line .mw-revslider-left-line {
+       border-left-width: 1px;
+}
+
+.mw-revslider-pointer-line .mw-revslider-right-line {
+       border-right-width: 1px;
+}
+
+.mw-revslider-pointer-line .mw-revslider-bottom-line {
+       border-bottom-width: 1px;
+}
+
+.mw-revslider-pointer-line .mw-revslider-lower-color {
+       border-color: #e8bd4f;
+}
+
+.mw-revslider-pointer-line .mw-revslider-upper-color {
+       border-color: #1e6db8;
+}
+
+.mw-revslider-pointer-older .mw-revslider-pointer-line-upper {
+       height: 83px;
+}
+
+.mw-revslider-pointer-older .mw-revslider-pointer-line-lower {
+       height: 7px;
+}
+
+.mw-revslider-pointer-newer  .mw-revslider-pointer-line-upper {
+       height: 73px;
+}
+
+.mw-revslider-pointer-newer .mw-revslider-pointer-line-lower {
+       height: 17px;
+}
+
+#mw-diff-otitle1 {
+       border-top: 2px solid #e8bd4f;
+}
+
+#mw-diff-ntitle1 {
+       border-top: 2px solid #1e6db8;
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/319559
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iadf779368c58da7779c769bda8e9bd3fc5afcffa
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/RevisionSlider
Gerrit-Branch: master
Gerrit-Owner: WMDE-Fisch <christoph.jau...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to