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