mediawiki-extensions-Multim.../resources/mmv/ui/mmv.ui.categories.js
Gergő Tisza 404bcd3989 Make categories behave
The way categories were handled made it impossible to add anything
after them (they always ended up as the last child of the parent
container). This commit fixes that, and also moves the repo link
behind them (as required by #270).

Change-Id: I7c561c43897054e60028bd524d8ad5ea85f39e36
2014-04-08 19:58:13 +00:00

88 lines
2.4 KiB
JavaScript
Executable file

/*
* This file is part of the MediaWiki extension MultimediaViewer.
*
* MultimediaViewer is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* MultimediaViewer is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MultimediaViewer. If not, see <http://www.gnu.org/licenses/>.
*/
( function ( mw, $, oo ) {
/**
* Category metadata UI.
* @class mw.mmv.ui.Categories
* @extends mw.mmv.ui.Element
* @constructor
* @inheritdoc
*/
function Categories( $container ) {
mw.mmv.ui.Element.call( this, $container );
this.$categoryTpl = $( '<span>').addClass( 'mw-mmv-tag' )
.append( $( '<span>').addClass( 'comma-container' )
.text( mw.message( 'comma-separator' ) ) )
.append( '<a>' );
this.$categories = $( '<span>' ).appendTo( this.$container );
}
oo.inheritClass( Categories, mw.mmv.ui.Element );
/**
* Sets the data for the element.
* @param {string} articlePath Path to articles on the repo this image comes from
* @param {string[]} categories
*/
Categories.prototype.set = function ( articlePath, categories ) {
var i, cat, href, $category;
this.$categories.empty();
if ( !categories || !categories.length ) {
return;
}
// We filter the categories first, because we need to know which category is the last
// in order to insert the commas properly
categories = $.grep( categories, function( cat ) {
return cat && cat.length;
} );
for ( i = 0; i < categories.length; i++ ) {
cat = categories[i];
href = articlePath.replace( '$1', 'Category:' + cat );
$category = this.$categoryTpl
.clone()
.toggleClass( 'extra', i >= 3 )
.appendTo( this.$categories );
$category.find( 'a' )
.text( cat )
.prop( 'href', href );
if ( i === 0 ) {
$category.find( '.comma-container' ).remove();
}
}
};
/**
* @inheritdoc
*/
Categories.prototype.empty = function () {
this.$categories.empty();
};
mw.mmv.ui.Categories = Categories;
}( mediaWiki, jQuery, OO ) );