if ( $title->isKnown() ) {
$messageName = 'searchmenu-exists';
$linkClass = 'mw-search-exists';
- } elseif ( $title->quickUserCan( 'create', $this->getUser() ) ) {
+ } elseif ( ContentHandler::getForTitle( $title )->supportsDirectEditing()
+ && $title->quickUserCan( 'create', $this->getUser() )
+ ) {
$messageName = 'searchmenu-new';
}
}
* @return {boolean} All items are selected
*/
mw.rcfilters.dm.FilterGroup.prototype.areAllSelected = function () {
- return this.getItems().every( function ( filterItem ) {
- return filterItem.isSelected();
+ var selected = [],
+ unselected = [];
+
+ this.getItems().forEach( function ( filterItem ) {
+ if ( filterItem.isSelected() ) {
+ selected.push( filterItem );
+ } else {
+ unselected.push( filterItem );
+ }
+ } );
+
+ if ( unselected.length === 0 ) {
+ return true;
+ }
+
+ // check if every unselected is a subset of a selected
+ return unselected.every( function ( unselectedFilterItem ) {
+ return selected.some( function ( selectedFilterItem ) {
+ return selectedFilterItem.existsInSubset( unselectedFilterItem.getName() );
+ } );
} );
};
/**
* List displaying all filter groups
*
- * @extends OO.ui.Widget
+ * @extends OO.ui.MenuTagMultiselectWidget
* @mixins OO.ui.mixin.PendingElement
*
* @constructor
itemUpdate: 'onModelItemUpdate',
highlightChange: 'onModelHighlightChange'
} );
- this.menu.connect( this, { toggle: 'onMenuToggle' } );
// Build the content
$contentWrapper.append(
* @param {boolean} isVisible Menu is visible
*/
mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
+ // Parent
+ mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onMenuToggle.call( this );
+
if ( isVisible ) {
- mw.hook( 'RcFilters.popup.open' ).fire( this.getMenu().getSelectedItem() );
+ mw.hook( 'RcFilters.popup.open' ).fire();
if ( !this.getMenu().getSelectedItem() ) {
// If there are no selected items, scroll menu to top
}
} else {
// Clear selection
- this.getMenu().selectItem( null );
this.selectTag( null );
}
};