jenkins-bot has submitted this change and it was merged. Change subject: [BREAKING CHANGE] Make default distribution provide SVG with PNG fallback ......................................................................
[BREAKING CHANGE] Make default distribution provide SVG with PNG fallback Serves SVG images to modern browsers and PNG images as a fallback for older ones, using the same technique we use for this in MediaWiki (http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique). This mixed SVG+PNG distribution is now the default one (without a suffix in the name). The previously-default raster PNG-only distribution is now available as with a '.raster' suffix, and the SVG-only distribution is renamed to have a '.vector' suffix to match. Bug: T87501 Change-Id: I5c56459fe6cf8690cc26eaac7969edd430251cab --- M Gruntfile.js M demos/demo.js M demos/widgets.php M src/styles/common.less M src/themes/apex/tools.less M src/themes/mediawiki/tools.less M src/themes/mediawiki/widgets.less 7 files changed, 66 insertions(+), 23 deletions(-) Approvals: Bartosz Dziewoński: Looks good to me, but someone else must approve Jforrester: Looks good to me, but someone else must approve Trevor Parscal: Looks good to me, approved jenkins-bot: Verified diff --git a/Gruntfile.js b/Gruntfile.js index fc9d699..edc713d 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -27,8 +27,9 @@ 'oojs-ui-mediawiki': modules[ 'oojs-ui-mediawiki' ].styles }, lessFiles = { - default: {}, - svg: {} + raster: {}, + vector: {}, + mixed: {} }, originalLessFiles = {}, concatCssFiles = {}, @@ -45,9 +46,7 @@ } for ( module in styleTargets ) { for ( target in lessFiles ) { - distFile = target === 'default' ? - 'dist/' + module + '.css' : - 'dist/' + module + '.' + target + '.css'; + distFile = 'dist/' + module + ( target !== 'mixed' ? '.' + target : '' ) + '.css'; originalLessFiles[ distFile ] = styleTargets[ module ]; lessFiles[ target ][ distFile ] = styleTargets[ module ].map( fixLessDirectory ); @@ -138,25 +137,38 @@ // Build – Styling less: { - distDefault: { + distRaster: { options: { ieCompat: true, report: 'gzip', modifyVars: { + 'oo-ui-distribution': 'raster', 'oo-ui-default-image-ext': 'png' } }, - files: lessFiles.default + files: lessFiles.raster }, - distSvg: { + distVector: { options: { ieCompat: false, report: 'gzip', modifyVars: { + 'oo-ui-distribution': 'vector', 'oo-ui-default-image-ext': 'svg' } }, - files: lessFiles.svg + files: lessFiles.vector + }, + distMixed: { + options: { + ieCompat: false, + report: 'gzip', + modifyVars: { + 'oo-ui-distribution': 'mixed', + 'oo-ui-default-image-ext': 'png' + } + }, + files: lessFiles.mixed } }, cssjanus: { @@ -349,7 +361,7 @@ grunt.registerTask( 'quick-build', [ 'pre-git-build', 'clean:build', 'fileExists', 'typos', 'concat:js', - 'copy:lessTemp', 'colorizeSvg', 'less:distSvg', 'copy:svg', + 'copy:lessTemp', 'colorizeSvg', 'less:distVector', 'copy:svg', 'copy:imagesApex', 'copy:imagesMediaWiki', 'build-i18n' ] ); diff --git a/demos/demo.js b/demos/demo.js index fe0fa3f..8bc9b0e 100644 --- a/demos/demo.js +++ b/demos/demo.js @@ -32,6 +32,7 @@ new OO.ui.ButtonOptionWidget( { data: 'apex', label: 'Apex' } ) ] ); this.graphicsSelect = new OO.ui.ButtonSelectWidget().addItems( [ + new OO.ui.ButtonOptionWidget( { data: 'mixed', label: 'Mixed' } ), new OO.ui.ButtonOptionWidget( { data: 'vector', label: 'Vector' } ), new OO.ui.ButtonOptionWidget( { data: 'raster', label: 'Raster' } ) ] ); @@ -115,8 +116,9 @@ * @property {Object.<string,Object>} */ OO.ui.Demo.static.graphics = { - vector: { fileSuffix: '.svg' }, - raster: { fileSuffix: '' } + mixed: { fileSuffix: '' }, + vector: { fileSuffix: '.vector' }, + raster: { fileSuffix: '.raster' } }; /** diff --git a/demos/widgets.php b/demos/widgets.php index 38ca94b..1d8476a 100644 --- a/demos/widgets.php +++ b/demos/widgets.php @@ -10,8 +10,14 @@ $themeClass = 'OOUI\\' . ( $theme === 'apex' ? 'Apex' : 'MediaWiki' ) . 'Theme'; OOUI\Theme::setSingleton( new $themeClass() ); - $graphic = ( isset( $_GET['graphic'] ) && $_GET['graphic'] === 'raster' ) ? 'raster' : 'vector'; - $graphicSuffix = $graphic === 'vector' ? '.svg' : ''; + $graphicSuffixMap = array( + 'mixed' => '', + 'vector' => '.svg', + 'raster' => '.png', + ); + $graphic = ( isset( $_GET['graphic'] ) && isset( $graphicSuffixMap[ $_GET['graphic'] ] ) ) + ? $_GET['graphic'] : 'vector'; + $graphicSuffix = $graphicSuffixMap[ $graphic ]; $direction = ( isset( $_GET['direction'] ) && $_GET['direction'] === 'rtl' ) ? 'rtl' : 'ltr'; $directionSuffix = $direction === 'rtl' ? '.rtl' : ''; @@ -51,6 +57,10 @@ echo new OOUI\ButtonGroupWidget( array( 'items' => array( new OOUI\ButtonWidget( array( + 'label' => 'Mixed', + 'href' => '?' . http_build_query( array_merge( $query, array( 'graphic' => 'mixed' ) ) ), + ) ), + new OOUI\ButtonWidget( array( 'label' => 'Vector', 'href' => '?' . http_build_query( array_merge( $query, array( 'graphic' => 'vector' ) ) ), ) ), diff --git a/src/styles/common.less b/src/styles/common.less index 436c4e0..ed1d7be 100644 --- a/src/styles/common.less +++ b/src/styles/common.less @@ -3,6 +3,7 @@ // Variables // @oo-ui-default-image-ext set during build +// @oo-ui-distribution set during build @oo-ui-default-image-path: 'images'; // Mixins @@ -11,20 +12,38 @@ background-image: e('/* @embed */') url(~'@{url}'); } +.oo-ui-background-image-svg( @url-without-extension, @fallback-ext: @oo-ui-default-image-ext ) + when ( @oo-ui-distribution = mixed ) { + @svg: '@{url-without-extension}.svg'; + @fallback: '@{url-without-extension}.@{fallback-ext}'; + background-image: url(@fallback); + background-image: -webkit-linear-gradient(transparent, transparent), e('/* @embed */') url(@svg); + background-image: linear-gradient(transparent, transparent), e('/* @embed */') url(@svg); + background-image: -o-linear-gradient(transparent, transparent), url(@fallback); +} +.oo-ui-background-image-svg( @url-without-extension, @fallback-ext: @oo-ui-default-image-ext ) + when ( @oo-ui-distribution = vector ) { + .oo-ui-background-image('@{url-without-extension}.svg'); +} +.oo-ui-background-image-svg( @url-without-extension, @fallback-ext: @oo-ui-default-image-ext ) + when ( @oo-ui-distribution = raster ) { + .oo-ui-background-image('@{url-without-extension}.@{fallback-ext}'); +} + .oo-ui-force-webkit-gpu() { -webkit-transform: translate3d(0, 0, 0); } .oo-ui-image( @type, @name, @file, @ext, @path ) { .oo-ui-@{type}-@{name} { - .oo-ui-background-image('@{path}/@{type}s/@{file}.@{ext}'); + .oo-ui-background-image-svg('@{path}/@{type}s/@{file}', @ext); } } .oo-ui-image-variant( @type, @name, @file, @variant, @ext, @path ) { .oo-ui-image-@{variant} .oo-ui-@{type}-@{name}, .oo-ui-image-@{variant}.oo-ui-@{type}-@{name} { - .oo-ui-background-image('@{path}/@{type}s/@{file}-@{variant}.@{ext}'); + .oo-ui-background-image-svg('@{path}/@{type}s/@{file}-@{variant}', @ext); } } diff --git a/src/themes/apex/tools.less b/src/themes/apex/tools.less index 6aef30e..095e064 100644 --- a/src/themes/apex/tools.less +++ b/src/themes/apex/tools.less @@ -12,7 +12,7 @@ } &-shadow { - .oo-ui-background-image('themes/apex/images/toolbar-shadow.png'); + .oo-ui-background-image('@{oo-ui-default-image-path}/toolbar-shadow.png'); bottom: -9px; height: 9px; opacity: 0.125; @@ -304,7 +304,7 @@ } &-active .oo-ui-tool-link .oo-ui-iconElement-icon { - .oo-ui-background-image('@{oo-ui-default-image-path}/icons/check.@{oo-ui-default-image-ext}'); + .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check'); } &.oo-ui-widget-enabled { diff --git a/src/themes/mediawiki/tools.less b/src/themes/mediawiki/tools.less index 3b3a472..294815c 100644 --- a/src/themes/mediawiki/tools.less +++ b/src/themes/mediawiki/tools.less @@ -250,7 +250,7 @@ } &-active .oo-ui-tool-link .oo-ui-iconElement-icon { - .oo-ui-background-image('@{oo-ui-default-image-path}/icons/check.@{oo-ui-default-image-ext}'); + .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check'); } &.oo-ui-widget-enabled { diff --git a/src/themes/mediawiki/widgets.less b/src/themes/mediawiki/widgets.less index cbdaebe..3bebf93 100644 --- a/src/themes/mediawiki/widgets.less +++ b/src/themes/mediawiki/widgets.less @@ -210,7 +210,7 @@ height: @input-size; background-color: white; border: 1px solid @input-border-color; - .oo-ui-background-image('@{oo-ui-default-image-path}/icons/check-constructive.@{oo-ui-default-image-ext}'); + .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check-constructive'); background-repeat: no-repeat; background-position: center center; background-origin: border-box; @@ -242,7 +242,7 @@ } &:disabled:checked + span::before { - .oo-ui-background-image('@{oo-ui-default-image-path}/icons/check-invert.@{oo-ui-default-image-ext}'); + .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/check-invert'); } } } @@ -323,7 +323,7 @@ height: @input-size; background: white; border: 1px solid @input-border-color; - .oo-ui-background-image('@{oo-ui-default-image-path}/icons/circle-constructive.@{oo-ui-default-image-ext}'); + .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/circle-constructive'); background-repeat: no-repeat; background-position: center center; background-origin: border-box; @@ -355,7 +355,7 @@ } &:disabled:checked + span::before { - .oo-ui-background-image('@{oo-ui-default-image-path}/icons/circle-invert.@{oo-ui-default-image-ext}'); + .oo-ui-background-image-svg('@{oo-ui-default-image-path}/icons/circle-invert'); } } } -- To view, visit https://gerrit.wikimedia.org/r/190839 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I5c56459fe6cf8690cc26eaac7969edd430251cab Gerrit-PatchSet: 4 Gerrit-Project: oojs/ui Gerrit-Branch: master Gerrit-Owner: Bartosz Dziewoński <matma....@gmail.com> Gerrit-Reviewer: Bartosz Dziewoński <matma....@gmail.com> Gerrit-Reviewer: Jforrester <jforres...@wikimedia.org> Gerrit-Reviewer: Trevor Parscal <tpars...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits