PageSourceSearch

https://jonaskress.github.io/wikibase/queryService/ui/i18n/LanguageSelector.js

js jonaskress.github.io collected 2026-10-03 09:25:36 UTC 2,423 bytes, 112 lines download raw bytes

1var wikibase = wikibase || {};
2wikibase.queryService = wikibase.queryService || {};
3wikibase.queryService.ui = wikibase.queryService.ui || {};
4wikibase.queryService.ui.i18n = wikibase.queryService.ui.i18n || {};
5
6wikibase.queryService.ui.i18n.LanguageSelector = ( function( $, wikibase ) {
7	'use strict';
8
9	/**
10	 * A language selector to selectt the UI language
11	 *
12	 * @class wikibase.queryService.ui.i18n.LanguageSelector
13	 * @license GNU GPL v2+
14	 *
15	 * @author Jonas Kress
16	 * @constructor
17	 * @param {jQuery} $element
18	 * @param {wikibase.queryService.api.Wikibase} api
19	 * @param {string} lang default language
20	 */
21	function SELF( $element, api, lang ) {
22		this._$element = $element;
23
24		if ( api ) {
25			this._api = api;
26		} else {
27			this._api = new wikibase.queryService.api.Wikibase();
28		}
29
30		this._defaultLanguage = lang;
31
32		this._create();
33	}
34
35	/**
36	 * @property {wikibase.queryService.api.Wikibase}
37	 * @private
38	 */
39	SELF.prototype._api = null;
40
41	/**
42	 * @property {Function}
43	 * @private
44	 */
45	SELF.prototype._$element = null;
46
47	/**
48	 * @property {string}
49	 * @private
50	 */
51	SELF.prototype._defaultLanguage = null;
52
53	/**
54	 * @property {Function}
55	 * @private
56	 */
57	SELF.prototype._changeListener = null;
58
59	/**
60	 * Set the change listener
61	 *
62	 * @param {Function} listener a function called when value selected
63	 */
64	SELF.prototype.setChangeListener = function( listener ) {
65		this._changeListener = listener;
66	};
67
68	/**
69	 * @private
70	 */
71	SELF.prototype._create = function( listener ) {
72		var self = this;
73
74		this._$element.text( $.uls.data.getAutonym( this._defaultLanguage ) );
75		this._getLanguages().done( function( langs ) {
76			self._$element.uls( {
77				onSelect: function( lang ) {
78					self._$element.text( $.uls.data.getAutonym( lang ) );
79
80					if ( self._changeListener ) {
81						self._changeListener( lang );
82					}
83				},
84				languages: langs
85			// quickList: langs
86			} ).click( function() {
87				$( '.uls-menu' ).addClass( 'uls-mobile' ).css( 'left', '' ).css( 'right', '2.5%' );
88			} ).css( 'display', 'block' );
89		} );
90	};
91
92	/**
93	 * @private
94	 */
95	SELF.prototype._getLanguages = function() {
96		var deferred = $.Deferred();
97
98		this._api.getLanguages().done( function( data ) {
99
100			var langs = {};
101			$.each( data.query.languages, function( k, v ) {
102				langs[v.code] = v['*'];
103			} );
104
105			deferred.resolve( langs );
106		} );
107
108		return deferred.promise();
109	};
110
111	return SELF;
112}( jQuery, wikibase ) );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.