Sumit has uploaded a new change for review. https://gerrit.wikimedia.org/r/230050
Change subject: WPB followup - fine tune banner position using js ...................................................................... WPB followup - fine tune banner position using js This is a followup to https://gerrit.wikimedia.org/r/#q,Ifd696117d4614389685945ad3853a473179c2c03,n,z It further refines the position of banner using data-pos coordinates set by parser function when js is enabled. Also moves max-height of banner outside media-query as a general rule. Adds tests for position coordinates. Bug: T108232 Change-Id: I856690b82cacd295147f89a1f740ecac56c3176c --- M extension.json M includes/WikidataPageBanner.hooks.php A resources/ext.WikidataPageBanner.positionBanner/ext.WikidataPageBanner.positionBanner.js M resources/ext.WikidataPageBanner.styles/ext.WikidataPageBanner.less M tests/phpunit/BannerOptionsTest.php 5 files changed, 93 insertions(+), 4 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikidataPageBanner refs/changes/50/230050/1 diff --git a/extension.json b/extension.json index cb7d6d3..4ded47d 100644 --- a/extension.json +++ b/extension.json @@ -48,6 +48,16 @@ "mobile" ], "position": "top" + }, + "ext.WikidataPageBanner.positionBanner": { + "scripts": [ + "ext.WikidataPageBanner.positionBanner/ext.WikidataPageBanner.positionBanner.js" + ], + "targets": [ + "desktop", + "mobile" + ], + "position": "bottom" } }, "ResourceFileModulePaths": { diff --git a/includes/WikidataPageBanner.hooks.php b/includes/WikidataPageBanner.hooks.php index 4df78c1..146d3e9 100644 --- a/includes/WikidataPageBanner.hooks.php +++ b/includes/WikidataPageBanner.hooks.php @@ -26,6 +26,7 @@ // only add banner and styling if valid banner generated if ( $banner !== null ) { $out->addModuleStyles( 'ext.WikidataPageBanner' ); + $out->addModules( 'ext.WikidataPageBanner.positionBanner' ); if ( isset( $params['toc'] ) ) { $out->addModuleStyles( 'ext.WikidataPageBanner.toc.styles' ); } @@ -56,6 +57,7 @@ // only add banner and styling if valid banner generated if ( $banner !== null ) { $out->addModuleStyles( 'ext.WikidataPageBanner' ); + $out->addModules( 'ext.WikidataPageBanner.positionBanner' ); $out->prependHtml( $banner ); // hide primary title $out->setPageTitle( '' ); diff --git a/resources/ext.WikidataPageBanner.positionBanner/ext.WikidataPageBanner.positionBanner.js b/resources/ext.WikidataPageBanner.positionBanner/ext.WikidataPageBanner.positionBanner.js new file mode 100644 index 0000000..cbdace0 --- /dev/null +++ b/resources/ext.WikidataPageBanner.positionBanner/ext.WikidataPageBanner.positionBanner.js @@ -0,0 +1,57 @@ +( function( mw, $ ) { + /** + * Javascript to fine tune position of banner according to position coordinates. + */ + // extract position parameters + var centrex = $( '.wpb-banner-image' ).data( 'pos-x' ); + var centrey = $( '.wpb-banner-image' ).data( 'pos-y' ); + // reset translations applied by css + $( '.wpb-banner-image' ).css( { + transform: 'translate(0)', + MozTransform: 'translate(0)', + WebkitTransform: 'translate(0)', + msTransform: 'translate(0)' + } ); + if ( $( '.wpb-banner-image' ).height() > $( '.wpb-topbanner' ).height() ) { + // first reset margin + $( '.wpb-banner-image' ).css( 'margin-top', 0 ); + // do not shift below to leave blank space + var minOffsetTop = 0; + // this is the max shift up that can be achieved without leaving blank space below + var maxOffsetTop = $( '.wpb-banner-image' ).height() - + $( '.wpb-topbanner' ).height(); + // offset beyond centre 0 + var offsetTop = centrey * $( '.wpb-banner-image' ).height() / 2; + // offset for default centre is maxOffsetTop/2 + // total offset = offset for centre + manual offset + var totalOffset = maxOffsetTop / 2 + offsetTop; + // shift the banner no more than maxOffsets on either side + if ( totalOffset > maxOffsetTop ) { + totalOffset = maxOffsetTop; + } else if ( totalOffset < minOffsetTop ) { + totalOffset = minOffsetTop; + } + $( '.wpb-banner-image' ).css( 'margin-top', -totalOffset ); + } + if ( $( '.wpb-banner-image' ).width() > $( '.ext-wpb-pagebanner' ).width() ) { + // first reset margin + $( '.wpb-banner-image' ).css( 'margin-left', 0 ); + // do not shift left to leave blank space + var minOffsetLeft = 0; + // this is the max shift that can be achieved without leaving blank space + var maxOffsetLeft = $( '.wpb-banner-image' ).width() - + $( '.wpb-topbanner' ).width(); + // offset beyond centre 0 + var offsetLeft = centrex * $( '.wpb-banner-image' ).width() / 2; + // offset for default centre is maxOffsetLeft/2 + // total offset = offset for centre + manual offset + var totalOffset = maxOffsetLeft / 2 + offsetLeft; + // shift the banner no more than maxOffsets on either side + if ( totalOffset > maxOffsetLeft ) { + totalOffset = maxOffsetLeft; + } else if ( totalOffset < minOffsetLeft ) { + totalOffset = minOffsetLeft; + } + $( '.wpb-banner-image' ).css( 'margin-left', -totalOffset ); + } +} ( mediaWiki, jQuery ) ); diff --git a/resources/ext.WikidataPageBanner.styles/ext.WikidataPageBanner.less b/resources/ext.WikidataPageBanner.styles/ext.WikidataPageBanner.less index ed938c9..65b264a 100644 --- a/resources/ext.WikidataPageBanner.styles/ext.WikidataPageBanner.less +++ b/resources/ext.WikidataPageBanner.styles/ext.WikidataPageBanner.less @@ -18,6 +18,10 @@ max-width: 1800px; height: auto; margin: 1em 0; + overflow: hidden; + // rule for banners whose height may be much due to a different aspect ratio other than + // Wikivoyage banners + max-height: 300px; } .wpb-topbanner .wpb-name { @@ -67,10 +71,6 @@ // banner enlargement and faking banner cropping for small screens @media screen and ( max-width: 400px ) { .wpb-topbanner { - overflow: hidden; - // rule for banners whose height may be much due to a different aspect ratio other than - // Wikivoyage banners - max-height: 300px; .wpb-banner-image { // this rule overrides the max-width:100% rule for images in Skin Minerva so that banner diff --git a/tests/phpunit/BannerOptionsTest.php b/tests/phpunit/BannerOptionsTest.php index d90e636..54837e3 100644 --- a/tests/phpunit/BannerOptionsTest.php +++ b/tests/phpunit/BannerOptionsTest.php @@ -76,6 +76,26 @@ 'unesco icon must be set' ); $this->assertEquals( $bannerparams['icons'][1]['icon']->getTitle(), 'star', 'star icon must be set' ); + + $pOut->setProperty( 'wpb-banner-options', null ); + $output = MockWikidataPageBannerOptions::addCustomBanner( $parser, 'Banner1', + 'pgname=Banner2', 'origin=0.3,0.2' ); + $bannerparams = $pOut->getProperty( 'wpb-banner-options' ); + $this->assertEquals( $bannerparams['originx'], 'wpb-right', + 'classname for position must be set' ); + $this->assertEquals( $bannerparams['data-pos-x'], 0.3, + 'data-pos-x must be set' ); + $this->assertEquals( $bannerparams['data-pos-y'], 0.2, + 'data-pos-x must be set' ); + + $pOut->setProperty( 'wpb-banner-options', null ); + $output = MockWikidataPageBannerOptions::addCustomBanner( $parser, 'Banner1', + 'pgname=Banner2', 'origin=0.3' ); + $bannerparams = $pOut->getProperty( 'wpb-banner-options' ); + $this->assertEquals( $bannerparams['data-pos-x'], 0, + 'data-pos must default to 0' ); + $this->assertEquals( $bannerparams['data-pos-y'], 0, + 'data-pos-x must default to 0' ); } /** -- To view, visit https://gerrit.wikimedia.org/r/230050 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I856690b82cacd295147f89a1f740ecac56c3176c Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikidataPageBanner Gerrit-Branch: master Gerrit-Owner: Sumit <asthana.sumi...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits