Prtksxna has uploaded a new change for review.

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

Change subject: wip: reference popups
......................................................................

wip: reference popups

Change-Id: I6fdf3cefb52e69e032d08c46a52cceb59162dd53
---
M Popups.php
M resources/ext.popups.core.js
M resources/ext.popups.core.less
M resources/ext.popups.renderer.js
A resources/ext.popups.renderer.reference.js
5 files changed, 149 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Popups 
refs/changes/27/139827/1

diff --git a/Popups.php b/Popups.php
index 0e549b6..27865ce 100644
--- a/Popups.php
+++ b/Popups.php
@@ -66,6 +66,7 @@
                        'resources/ext.popups.renderer.js',
                        'resources/ext.popups.renderer.article.js',
                        'resources/ext.popups.disablenavpop.js',
+                       'resources/ext.popups.renderer.reference.js',
                ),
                'styles' => array(
                        'resources/ext.popups.core.less',
diff --git a/resources/ext.popups.core.js b/resources/ext.popups.core.js
index a209cc2..5c03340 100644
--- a/resources/ext.popups.core.js
+++ b/resources/ext.popups.core.js
@@ -153,6 +153,11 @@
                mw.popups.checkScroll();
                mw.popups.createSVGMask();
                mw.popups.createPopupElement();
+
+               // Disable the tooltips being generated from the Cite extension
+               if ( typeof $().tooltip !== 'undefined' ) { // Is there a 
better way to do this?
+                       $( '.biblio-cite-link,sup.reference a' ).tooltip( { 
disabled: true } )
+               }
        } );
 
 } ) ( jQuery, mediaWiki );
diff --git a/resources/ext.popups.core.less b/resources/ext.popups.core.less
index 629059a..e5e9252 100644
--- a/resources/ext.popups.core.less
+++ b/resources/ext.popups.core.less
@@ -46,7 +46,6 @@
                > div {
                        padding: 0;
                        margin: 16px;
-                       padding-bottom: 48px;
                }
 
                > div.mwe-popups-is-tall {
@@ -57,6 +56,7 @@
                        background-size: cover;
                        background-repeat: no-repeat;
                        overflow: hidden;
+                       padding-bottom: 48px;
                        /* @noflip */
                        float: right;
                }
@@ -70,6 +70,7 @@
                        background-position: center;
                        background-repeat: no-repeat;
                        overflow: hidden;
+                       padding-bottom: 48px;
                        /* @noflip */
                        float: right;
                }
@@ -108,6 +109,13 @@
                        float: left;
                }
 
+               .mwe-popups-cite {
+                       width: 215px;
+                       overflow: hidden;
+                       /* @noflip */
+                       float: left;
+               }
+
                div.mwe-popups-timestamp-older, div.mwe-popups-timestamp-recent 
{
                        width: 215px;
                }
diff --git a/resources/ext.popups.renderer.js b/resources/ext.popups.renderer.js
index 3b48eeb..68b27c9 100644
--- a/resources/ext.popups.renderer.js
+++ b/resources/ext.popups.renderer.js
@@ -93,7 +93,12 @@
                } else {
                        // TODO: check for link type and call correct renderer
                        // There is only one popup type so it isn't necessary 
right now
-                       var cachePopup = mw.popups.render.article.init( link );
+
+                       if (link.parent().hasClass( 'reference' ) ) {
+                               var cachePopup = 
mw.popups.render.reference.init( link );
+                       } else {
+                               var cachePopup = mw.popups.render.article.init( 
link );
+                       }
 
                        mw.popups.render.openTimer = mw.popups.render.wait( 
mw.popups.render.API_DELAY )
                                .done( function () {
diff --git a/resources/ext.popups.renderer.reference.js 
b/resources/ext.popups.renderer.reference.js
new file mode 100644
index 0000000..132d6d7
--- /dev/null
+++ b/resources/ext.popups.renderer.reference.js
@@ -0,0 +1,128 @@
+( function ( $, mw ) {
+
+       var reference = {};
+
+       reference.WIDTH = 300;
+
+       reference.init = function ( link ) {
+               var
+                       href = link.attr( 'href' ),
+                       refElem = $( href );
+                       deferred = $.Deferred();
+               mw.popups.render.cache[ href ] = {};
+               mw.popups.render.cache[ href ].popup = reference.createPopup( 
refElem, href );
+               mw.popups.render.cache[ href ].getOffset = reference.getOffset;
+               mw.popups.render.cache[ href ].getClasses = 
reference.getClasses;
+               mw.popups.render.cache[ href ].process = reference.processPopup;
+               deferred.resolve();
+
+               return deferred.promise();
+       };
+
+
+       reference.createPopup = function ( re, href ) {
+               var
+                       $div = $( '<div>')
+                               .addClass('mwe-popups-cite')
+                               .append( re.find( '> span:last' ).text() ),
+                       $a = $( '<a>' )
+                               .append( $div )
+                               .attr( 'href', '#' + re.attr( 'id' ) );
+               mw.popups.render.cache[ href ].settings = {};
+               return $a;
+       };
+
+       reference.getOffset = function ( link, event ) {
+               var
+                       href = link.attr( 'href' ),
+                       flippedX = false,
+                       flippedY = false,
+                       settings = mw.popups.render.cache[ href ].settings,
+                       offsetTop = ( event.pageY ) ? // If it was a mouse event
+                               // Position according to mouse
+                               event.pageY + 20 :
+                               // Position according to link position or size
+                               link.offset().top + link.height() + 9,
+                       clientTop = ( event.clientY ) ?
+                               event.clientY :
+                               offsetTop,
+                       offsetLeft = ( event.pageX ) ?
+                               event.pageX :
+                               link.offset().left;
+               // X Flip
+               if ( offsetLeft > ( $( window ).width() / 2 ) ) {
+                       offsetLeft += ( !event.pageX ) ? link.width() : 0;
+                       offsetLeft -= reference.WIDTH;
+                       flippedX = true;
+               }
+
+               if ( event.pageX ) {
+                       offsetLeft += ( flippedX ) ? 20 : -20;
+               }
+
+               mw.popups.render.cache[ href ].settings.flippedX = flippedX;
+
+               // Y Flip
+               if ( clientTop > ( $( window ).height() / 2 ) ) {
+                       flippedY = true;
+               }
+
+               if ( event.pageY && flippedY ) {
+                       offsetTop += 30;
+               }
+
+               mw.popups.render.cache[ href ].settings.flippedY = flippedY;
+
+               return {
+                       top: offsetTop + 'px',
+                       left: offsetLeft + 'px'
+               };
+       };
+
+       reference.getClasses = function ( link ) {
+               var
+                       classes = [ 'mwe-popups-is-not-tall' ],
+                       settings = mw.popups.render.cache[ link.attr( 'href' ) 
].settings,
+                       flippedX = settings.flippedX,
+                       flippedY = settings.flippedY;
+
+               if ( flippedY ) {
+                       classes.push( 'mwe-popups-fade-in-down' );
+               } else {
+                       classes.push( 'mwe-popups-fade-in-up' );
+                       classes.push( 'mwe-popups-no-image-tri' );
+               }
+
+               if ( flippedY && flippedX ) {
+                       classes.push( 'flipped_x_y' );
+               }
+
+               if ( flippedY && !flippedX ) {
+                       classes.push( 'flipped_y' );
+               }
+
+               if ( flippedX && !flippedY ) {
+                       classes.push( 'flipped_x' );
+               }
+
+               return classes;
+       };
+
+       reference.processPopup = function ( link ) {
+               var
+                       settings = mw.popups.render.cache[ link.attr( 'href' ) 
].settings,
+                       $popup = mw.popups.$popup,
+                       flippedX = settings.flippedX,
+                       flippedY = settings.flippedY;
+
+               if ( flippedY ) {
+                       $popup.css( {
+                               top: $popup.offset().top - ( 
$popup.outerHeight() + 50 )
+                       } );
+               }
+
+       }
+
+       mw.popups.render.reference = reference;
+
+} ) ( jQuery, mediaWiki );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6fdf3cefb52e69e032d08c46a52cceb59162dd53
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Popups
Gerrit-Branch: master
Gerrit-Owner: Prtksxna <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to