mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/MultimediaViewer
synced 2024-11-24 08:13:38 +00:00
Merge "Fix some metadata panel scrolling/text truncation bugs"
This commit is contained in:
commit
1cf878a004
|
@ -246,7 +246,7 @@
|
|||
* @param {mw.mmv.model.ThumbnailWidth} imageWidths
|
||||
* @returns {boolean} Whether the image was blured or not
|
||||
*/
|
||||
C.maybeDisplayPlaceholder = function ( size, $imagePlaceholder, imageWidths ) {
|
||||
C.maybeDisplayPlaceholder = function ( size, $imagePlaceholder, imageWidths ) {
|
||||
var targetWidth,
|
||||
targetHeight,
|
||||
blowupFactor,
|
||||
|
|
|
@ -61,6 +61,9 @@
|
|||
.add( this.$authorAndSource )
|
||||
.add( this.title.$ellipsis )
|
||||
.add( this.creditField.$ellipsis )
|
||||
.each( function () {
|
||||
$( this ).tipsy( 'enable' );
|
||||
} )
|
||||
.on( 'click.mmv-mp', function ( e ) {
|
||||
var clickTargetIsLink = $( e.target ).is( 'a' ),
|
||||
clickTargetIsTruncated = !!$( e.target ).closest( '.mw-mmv-ttf-truncated' ).length,
|
||||
|
@ -76,23 +79,15 @@
|
|||
panel.scroller.toggle( 'up' );
|
||||
} );
|
||||
|
||||
$( this.$container ).on( 'mmv-metadata-open', function () {
|
||||
$( this.$container ).on( 'mmv-metadata-open.mmv-mp mmv-metadata-reveal-truncated-text.mmv-mp', function () {
|
||||
panel.revealTruncatedText();
|
||||
} ).on( 'mmv-metadata-close', function () {
|
||||
} ).on( 'mmv-metadata-close.mmv-mp', function () {
|
||||
panel.hideTruncatedText();
|
||||
} );
|
||||
|
||||
this.handleEvent( 'jq-fullscreen-change.lip', function() {
|
||||
panel.hideTruncatedText();
|
||||
} );
|
||||
|
||||
this.$title
|
||||
.add( this.title.$ellipsis )
|
||||
.add( this.$authorAndSource )
|
||||
.add( this.creditField.$ellipsis )
|
||||
.each( function () {
|
||||
$( this ).tipsy( 'enable' );
|
||||
} );
|
||||
};
|
||||
|
||||
MPP.unattach = function() {
|
||||
|
@ -104,12 +99,13 @@
|
|||
.add( this.creditField.$ellipsis )
|
||||
.each( function () {
|
||||
$( this ).tipsy( 'hide' ).tipsy( 'disable' );
|
||||
} );
|
||||
} )
|
||||
.off( 'click.mmv-mp' );
|
||||
|
||||
$( this.$container ).off( '.mmv-mp' );
|
||||
|
||||
this.scroller.unattach();
|
||||
this.buttons.unattach();
|
||||
|
||||
this.$title.add( this.$authorAndSource ).off( 'click.mmv-mp' );
|
||||
this.clearEvents();
|
||||
};
|
||||
|
||||
|
@ -671,8 +667,8 @@
|
|||
this.setUserPageLink( repoData, imageData.lastUploader, user.gender );
|
||||
}
|
||||
|
||||
this.scroller.unfreezeHeight();
|
||||
this.resetTruncatedText();
|
||||
this.scroller.unfreezeHeight();
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -156,34 +156,32 @@
|
|||
* @param {string} [forceDirection] 'up' or 'down' makes the panel move on that direction (and is a noop
|
||||
* if the panel is already at the upmost/bottommost position); without the parameter, the panel position
|
||||
* is toggled. (Partially open counts as open.)
|
||||
* @param {number} [duration] duration of the scroll animation; defaults to #toggleScrollDuration.
|
||||
* Use 0 to avoid animating altogether.
|
||||
* @return {jQuery.Deferred} a deferred which resolves after the animation has finished.
|
||||
*/
|
||||
MPSP.toggle = function ( forceDirection, duration ) {
|
||||
MPSP.toggle = function ( forceDirection ) {
|
||||
var deferred = $.Deferred(),
|
||||
scrollTopWhenOpen = this.getScrollTopWhenOpen(),
|
||||
scrollTopWhenClosed = 0,
|
||||
scrollTop = $.scrollTo().scrollTop(),
|
||||
panelIsOpen = scrollTop > scrollTopWhenClosed,
|
||||
scrollTopTarget = panelIsOpen ? scrollTopWhenClosed : scrollTopWhenOpen,
|
||||
isOpening = scrollTopTarget === scrollTopWhenOpen;
|
||||
|
||||
|
||||
if ( duration === null || duration === undefined ) {
|
||||
duration = this.toggleScrollDuration;
|
||||
}
|
||||
|
||||
if ( forceDirection ) {
|
||||
scrollTopTarget = forceDirection === 'down' ? scrollTopWhenClosed : scrollTopWhenOpen;
|
||||
}
|
||||
direction = forceDirection || ( panelIsOpen ? 'down' : 'up' ),
|
||||
scrollTopTarget = ( direction === 'up' ) ? scrollTopWhenOpen : scrollTopWhenClosed;
|
||||
|
||||
// don't log / animate if the panel is already in the end position
|
||||
if ( scrollTopTarget === scrollTop ) {
|
||||
deferred.resolve();
|
||||
} else {
|
||||
mw.mmv.actionLogger.log( isOpening ? 'metadata-open' : 'metadata-close' );
|
||||
$.scrollTo( scrollTopTarget, duration, {
|
||||
mw.mmv.actionLogger.log( direction === 'up' ? 'metadata-open' : 'metadata-close' );
|
||||
if ( direction === 'up' && !panelIsOpen ) {
|
||||
// FIXME nasty. This is not really an event but a command sent to the metadata panel;
|
||||
// child UI elements should not send commands to their parents. However, there is no way
|
||||
// to calculate the target scrollTop accurately without revealing the text, and the event
|
||||
// which does that (metadata-open) is only triggered later in the process, when the panel
|
||||
// actually scrolled, so we cannot use it here without risking triggering it multiple times.
|
||||
this.$container.trigger( 'mmv-metadata-reveal-truncated-text' );
|
||||
scrollTopTarget = this.getScrollTopWhenOpen();
|
||||
}
|
||||
$.scrollTo( scrollTopTarget, this.toggleScrollDuration, {
|
||||
onAfter: function () {
|
||||
deferred.resolve();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue