summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/UploadWizard/resources/details/uw.LanguageDropdownWidget.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/UploadWizard/resources/details/uw.LanguageDropdownWidget.js')
-rw-r--r--www/wiki/extensions/UploadWizard/resources/details/uw.LanguageDropdownWidget.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/www/wiki/extensions/UploadWizard/resources/details/uw.LanguageDropdownWidget.js b/www/wiki/extensions/UploadWizard/resources/details/uw.LanguageDropdownWidget.js
new file mode 100644
index 00000000..c23c5954
--- /dev/null
+++ b/www/wiki/extensions/UploadWizard/resources/details/uw.LanguageDropdownWidget.js
@@ -0,0 +1,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 ) );