jenkins-bot has submitted this change and it was merged. Change subject: Style categories the same in nojs and js Flow ......................................................................
Style categories the same in nojs and js Flow Rewrite the output of handlebars' categories to be styled the same as the mediawiki category design, and adjust the JS rendering to follow the same styling as well. Added 'specialCategoryLink' property to mw.flow.data to store the localized link to Special:Categories page, since there doesn't seem to be a way to get a properly localized version of that page in JavaScript. Bug: T115411 Change-Id: Ie42d32b98ac65ba4a6de9971d26542e9d82addf2 --- M handlebars/compiled/flow_block_header.handlebars.php M handlebars/flow_header_categories.partial.handlebars M includes/View.php M modules/flow-initialize.js M modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js M modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js M modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js M modules/styles/board/header.less 8 files changed, 75 insertions(+), 43 deletions(-) Approvals: Catrope: Looks good to me, approved jenkins-bot: Verified diff --git a/handlebars/compiled/flow_block_header.handlebars.php b/handlebars/compiled/flow_block_header.handlebars.php index 9291a9a..334bde9 100644 --- a/handlebars/compiled/flow_block_header.handlebars.php +++ b/handlebars/compiled/flow_block_header.handlebars.php @@ -62,10 +62,9 @@ '.$sp.' <span class="mw-ui-icon mw-ui-icon-before mw-ui-icon-speechBubbles pull-right expand-button" '.$sp.' title="'.LCRun3::ch($cx, 'l10n', array(array('flow-board-expand-description'),array()), 'encq').'"></span> '.$sp.'</a> -';},'flow_header_categories' => function ($cx, $in, $sp) {return ''.$sp.''.((LCRun3::ifvar($cx, ((isset($cx['sp_vars']['root']['categories']) && is_array($cx['sp_vars']['root'])) ? $cx['sp_vars']['root']['categories'] : null))) ? '<div class="flow-board-header-category-view-nojs"> -'.$sp.' <ul class="flow-board-header-category-list"> -'.$sp.''.LCRun3::sec($cx, ((isset($cx['sp_vars']['root']['categories']) && is_array($cx['sp_vars']['root'])) ? $cx['sp_vars']['root']['categories'] : null), $in, true, function($cx, $in)use($sp){return ' <li class="flow-board-header-category-item">'.LCRun3::ch($cx, 'html', array(array($in),array()), 'encq').'</li> -'.$sp.'';}).' </ul> +';},'flow_header_categories' => function ($cx, $in, $sp) {return ''.$sp.''.((LCRun3::ifvar($cx, ((isset($cx['sp_vars']['root']['categories']['items']) && is_array($cx['sp_vars']['root']['categories'])) ? $cx['sp_vars']['root']['categories']['items'] : null))) ? '<div id="catlinks" class="catlinks flow-board-header-category-view-nojs"> +'.$sp.' <div id="mw-normal-catlinks" class="mw-normal-catlinks">'.LCRun3::ch($cx, 'html', array(array(((isset($cx['sp_vars']['root']['categories']['link']) && is_array($cx['sp_vars']['root']['categories'])) ? $cx['sp_vars']['root']['categories']['link'] : null)),array()), 'encq').'<ul class="flow-board-header-category-list">'.LCRun3::sec($cx, ((isset($cx['sp_vars']['root']['categories']['items']) && is_array($cx['sp_vars']['root']['categories'])) ? $cx['sp_vars']['root']['categories']['items'] : null), $in, true, function($cx, $in)use($sp){return '<li class="flow-board-header-category-item">'.LCRun3::ch($cx, 'html', array(array($in),array()), 'encq').'</li>';}).'</ul> +'.$sp.' </div> '.$sp.'</div> '.$sp.'' : '').'';},'flow_header_footer' => function ($cx, $in, $sp) {return ''.$sp.'<div class="flow-board-header-footer"> '.$sp.' <hr /> diff --git a/handlebars/flow_header_categories.partial.handlebars b/handlebars/flow_header_categories.partial.handlebars index 0e3798f..9f66373 100644 --- a/handlebars/flow_header_categories.partial.handlebars +++ b/handlebars/flow_header_categories.partial.handlebars @@ -1,9 +1,12 @@ -{{#if @root.categories}} -<div class="flow-board-header-category-view-nojs"> - <ul class="flow-board-header-category-list"> - {{#each @root.categories}} - <li class="flow-board-header-category-item">{{html this}}</li> - {{/each}} - </ul> +{{#if @root.categories.items}} +<div id="catlinks" class="catlinks flow-board-header-category-view-nojs"> + <div id="mw-normal-catlinks" class="mw-normal-catlinks"> + {{~html @root.categories.link~}} + <ul class="flow-board-header-category-list"> + {{~#each @root.categories.items~}} + <li class="flow-board-header-category-item">{{~html this~}}</li> + {{~/each~}} + </ul> + </div> </div> {{/if}} diff --git a/includes/View.php b/includes/View.php index 80e7a44..8c8d0ea 100644 --- a/includes/View.php +++ b/includes/View.php @@ -169,6 +169,10 @@ $apiResponse = array( 'title' => $title->getPrefixedText(), 'categories' => $categoryObject, + // We need to store the link to the Special:Categories page from the + // back end php script, because there is no way in JS front end to + // get the localized link of a special page + 'specialCategoryLink' => \SpecialPage::getTitleFor( 'Categories' )->getLocalURL(), 'workflow' => $workflow->isNew() ? '' : $workflow->getId()->getAlphadecimal(), 'blocks' => array(), 'isWatched' => $user->isWatched( $title ), @@ -193,7 +197,6 @@ 'title' => $apiResponse['title'], 'block-action-template' => $block->getTemplate( $action ), 'editToken' => $editToken, - 'categories' => $linkedCategories ); if ( $block->getName() == 'topiclist' ) { $topicListBlock = $block; @@ -201,6 +204,17 @@ } } + // Add category items to the header if they exist + if ( count( $linkedCategories ) > 0 && isset( $apiResponse['blocks']['header'] ) ) { + $apiResponse['blocks']['header']['categories'] = array( + 'link' => \Linker::link( + \SpecialPage::getTitleFor( 'Categories' ), + wfMessage( 'pagecategories' )->params( count( $linkedCategories ) )->text() + ) . wfMessage( 'colon-separator' )->text(), + 'items' => $linkedCategories + ); + } + if ( isset( $topicListBlock ) && isset( $parameters['topiclist'] ) ) { $apiResponse['toc'] = $topicListBlock->renderTocApi( $apiResponse['blocks']['topiclist'], diff --git a/modules/flow-initialize.js b/modules/flow-initialize.js index b38e801..de8e49b 100644 --- a/modules/flow-initialize.js +++ b/modules/flow-initialize.js @@ -548,6 +548,8 @@ // The category widget is inside the board description widget. // Remove it here $( '.flow-board-header-category-view-nojs' ).detach(); + // HACK: Remove the MW page categories + $( '.catlinks:not(.flow-ui-categoriesWidget)' ).detach(); // Fall back to mw.flow.data, which was used until September 2015 // NOTICE: This block must be after the initialization of the ui widgets so diff --git a/modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js b/modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js index 2dae646..67fa12c 100644 --- a/modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js +++ b/modules/flow/ui/widgets/mw.flow.ui.BoardDescriptionWidget.js @@ -8,7 +8,9 @@ * @constructor * @param {mw.flow.dm.Board} boardModel The board model * @param {Object} [config] - * @cfg {jQuery} $existing A jQuery object of the existing contents of the board description + * @cfg {jQuery} [$existing] A jQuery object of the existing contents of the board description + * @cfg {string} [specialPageCategoryLink] Link to the localized Special:Categories page + * @cfg {jQuery} [$categories] A jQuery object of the existing board categories */ mw.flow.ui.BoardDescriptionWidget = function mwFlowUiBoardDescriptionWidget( boardModel, config ) { var $content = $(); @@ -67,7 +69,9 @@ this.button.toggle( false ); } - this.categoriesWidget = new mw.flow.ui.CategoriesWidget( this.board ); + this.categoriesWidget = new mw.flow.ui.CategoriesWidget( this.board, { + specialPageCategoryLink: config.specialPageCategoryLink + } ); if ( config.$categories ) { this.addCategoriesFromDom( config.$categories ); } @@ -279,7 +283,7 @@ * nojs rendering of the page without having the widget to ask the API for the categories * when it just loads. * - * @param {jQuery} $categoriesWrapper Categories div wrapper + * @param {jQuery} [$categoriesWrapper] Categories div wrapper */ mw.flow.ui.BoardDescriptionWidget.prototype.addCategoriesFromDom = function ( $categoriesWrapper ) { var categories = {}; diff --git a/modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js b/modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js index ab2ea21..97b9a67 100644 --- a/modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js +++ b/modules/flow/ui/widgets/mw.flow.ui.CategoriesWidget.js @@ -12,13 +12,17 @@ * */ mw.flow.ui.CategoriesWidget = function mwFlowUiCategoriesWidget( model, config ) { + var $categoryList = $( '<ul>' ) + .addClass( 'flow-board-header-category-list' ), + categoriesTitle = mw.Title.newFromText( 'Special:Categories' ); + config = config || {}; // Parent constructor mw.flow.ui.CategoriesWidget.parent.call( this, config ); // Mixin constructor - OO.ui.mixin.GroupElement.call( this, config ); + OO.ui.mixin.GroupElement.call( this, $.extend( { $group: $categoryList }, config ) ); this.model = model; this.model.connect( this, { @@ -27,19 +31,28 @@ clearCategories: 'onModelClearCategories' } ); - this.categoriesLabel = new OO.ui.LabelWidget(); + this.$categoriesLabel = $( '<a>' ) + .prop( 'href', config.specialPageCategoryLink || categoriesTitle.getUrl() ); this.updateCategoriesLabel(); // Initialize this.$element + // Mimic the same structure as mediawiki category + // and the nojs version + .addClass( 'catlinks flow-board-header-category-view-js flow-ui-categoriesWidget' ) + .prop( 'id', 'catlinks' ) .append( $( '<div>' ) - .addClass( 'flow-board-header-category-title' ) - .append( this.categoriesLabel.$element ), - this.$group - .addClass( 'flow-board-header-category-list' ) - ) - .addClass( 'flow-ui-categoriesWidget flow-board-header-category-view' ); + .prop( 'id', 'mw-normal-catlinks' ) + .append( + this.$categoriesLabel, + mw.msg( 'colon-separator' ), + this.$group + ) + .addClass( 'mw-normal-catlinks flow-board-header-category-view' ) + ); + + this.toggle( this.model.hasCategories() ); }; /* Initialization */ @@ -62,6 +75,7 @@ this.addItems( widgets ); this.updateCategoriesLabel(); + this.toggle( this.model.hasCategories() ); }; /** @@ -79,6 +93,7 @@ this.removeItems( widgets ); this.updateCategoriesLabel(); + this.toggle( this.model.hasCategories() ); }; /** @@ -92,9 +107,9 @@ * Update the category label according to the number of available items */ mw.flow.ui.CategoriesWidget.prototype.updateCategoriesLabel = function () { - this.categoriesLabel.setLabel( - mw.msg( 'pagecategories', this.model.getItemCount() ) + - mw.msg( 'colon-separator' ) + this.$categoriesLabel.text( + // FIXME: this.model should be an instance of dm.Categories, not dm.Board + mw.msg( 'pagecategories', this.model.getCategories().getItemCount() ) ); }; }( jQuery ) ); diff --git a/modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js b/modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js index 36ee4bc..cec1eb1 100644 --- a/modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js +++ b/modules/flow/ui/widgets/mw.flow.ui.CategoryItemWidget.js @@ -38,6 +38,10 @@ OO.inheritClass( mw.flow.ui.CategoryItemWidget, OO.ui.Widget ); + /* Static Properties */ + + mw.flow.ui.CategoryItemWidget.static.tagName = 'li'; + /** * Get the category data * diff --git a/modules/styles/board/header.less b/modules/styles/board/header.less index c621d1b..6fcdb20 100644 --- a/modules/styles/board/header.less +++ b/modules/styles/board/header.less @@ -48,23 +48,14 @@ display: none; } -.flow-board-header-category-view-nojs, -.flow-board-header-category-view { - background: white; - padding: 0.5em; - - .flow-board-header-category-list { //ul - list-style-type: none; - list-style-image: none; - - .flow-board-header-category-item { - display: inline-block; - } - - .flow-board-header-category-item + .flow-board-header-category-item:before { - content: " | "; - } - } +// We must include a more specific rule for margin and padding +// on the catlinks ul item, because there is a mw rule to 'correct' +// ul that live inside .mw-content-ltr/rtl and defines a specific +// margin value. We have to make this rule more specific so to +// override that fix in this case. +.mw-normal-catlinks ul.flow-board-header-category-list { + margin: 0; + padding: 0; } .side-rail-toggle-button { -- To view, visit https://gerrit.wikimedia.org/r/246779 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ie42d32b98ac65ba4a6de9971d26542e9d82addf2 Gerrit-PatchSet: 6 Gerrit-Project: mediawiki/extensions/Flow Gerrit-Branch: master Gerrit-Owner: Mooeypoo <mor...@gmail.com> Gerrit-Reviewer: Catrope <roan.katt...@gmail.com> Gerrit-Reviewer: Mooeypoo <mor...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits