1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
( function ( mw, uw, $, OO ) {
/**
* A language dropdown within a description field in UploadWizard's "Details" step form.
*
* @constructor
* @param {Object} [config]
*/
uw.LanguageDropdownWidget = function UWLanguageDropdownWidget( config ) {
config = config || {};
uw.LanguageDropdownWidget.parent.call( this );
this.languageDropdown = new OO.ui.DropdownWidget( {
menu: { items: this.getLanguageMenuOptionWidgets( config.languages ) },
classes: config.classes
} );
this.languageDropdown.getMenu().connect( this, { select: [ 'emit', 'select' ] } );
};
OO.inheritClass( uw.LanguageDropdownWidget, OO.ui.Widget );
OO.mixinClass( uw.LanguageDropdownWidget, OO.EventEmitter );
/**
* @param {object} languages
*/
uw.LanguageDropdownWidget.prototype.updateLanguages = function ( languages ) {
var menu = this.languageDropdown.getMenu(),
currentMenuItems = menu.getItems(),
currentValue = this.getValue();
// remove all items except the one currently selected (don't want
// to trigger another select by removing it)
menu.removeItems( currentMenuItems.filter( function ( item ) { return !item.isSelected(); } ) );
// and add the rest of the languages back in there
delete languages[ currentValue ];
menu.addItems( this.getLanguageMenuOptionWidgets( languages ) );
};
/**
* @param {string} value
*/
uw.LanguageDropdownWidget.prototype.setValue = function ( value ) {
this.languageDropdown.getMenu().selectItemByData( value );
};
/**
* @return {string}
*/
uw.LanguageDropdownWidget.prototype.getValue = function () {
return this.languageDropdown.getMenu().findSelectedItem().getData();
};
/**
* @return {OO.ui.DropdownWidget}
*/
uw.LanguageDropdownWidget.prototype.getElement = function () {
return this.languageDropdown.$element;
};
/**
* Get options for the dropdown list of all allowed languages.
*
* @private
* @param {Object} languages
* @return {OO.ui.MenuOptionWidget[]}
*/
uw.LanguageDropdownWidget.prototype.getLanguageMenuOptionWidgets = function ( languages ) {
var options;
options = [];
$.each( languages, function ( code, language ) {
options.push(
new OO.ui.MenuOptionWidget( {
data: code,
label: language
} )
);
} );
return options;
};
}( mediaWiki, mediaWiki.uploadWizard, jQuery, OO ) );
|