Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1430816
LanguageSearchWidget.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
LanguageSearchWidget.js
View Options
const
LanguageResultWidget
=
require
(
'./LanguageResultWidget.js'
);
/**
* Creates a TemplateDataLanguageSearchWidget object.
* This is a copy of ve.ui.LanguageSearchWidget.
*
* @class
* @extends OO.ui.SearchWidget
*
* @constructor
* @param {Object} [config] Configuration options
*/
function
LanguageSearchWidget
(
config
)
{
// Configuration initialization
config
=
Object
.
assign
(
{
placeholder
:
mw
.
msg
(
'templatedata-modal-search-input-placeholder'
)
},
config
);
// Parent constructor
LanguageSearchWidget
.
super
.
call
(
this
,
config
);
// Properties
this
.
filteredLanguageResultWidgets
=
[];
const
languageCodes
=
Object
.
keys
(
$
.
uls
.
data
.
getAutonyms
()
).
sort
();
this
.
languageResultWidgets
=
languageCodes
.
map
(
(
languageCode
)
=>
new
LanguageResultWidget
(
{
data
:
{
code
:
languageCode
,
name
:
$
.
uls
.
data
.
getAutonym
(
languageCode
),
autonym
:
$
.
uls
.
data
.
getAutonym
(
languageCode
)
}
}
)
);
this
.
setAvailableLanguages
();
// Initialization
this
.
$element
.
addClass
(
'tdg-languageSearchWidget'
);
}
/* Inheritance */
OO
.
inheritClass
(
LanguageSearchWidget
,
OO
.
ui
.
SearchWidget
);
/* Methods */
/**
* FIXME: this should be inheritdoc
*/
LanguageSearchWidget
.
prototype
.
onQueryChange
=
function
()
{
// Parent method
LanguageSearchWidget
.
super
.
prototype
.
onQueryChange
.
apply
(
this
,
arguments
);
// Populate
this
.
addResults
();
};
/**
* Set available languages to show
*
* @param {string[]} [availableLanguages] Available language codes to show, all if undefined
*/
LanguageSearchWidget
.
prototype
.
setAvailableLanguages
=
function
(
availableLanguages
)
{
if
(
!
availableLanguages
)
{
this
.
filteredLanguageResultWidgets
=
this
.
languageResultWidgets
.
slice
();
return
;
}
this
.
filteredLanguageResultWidgets
=
this
.
languageResultWidgets
.
map
(
(
languageResult
)
=>
{
const
data
=
languageResult
.
getData
();
if
(
availableLanguages
.
indexOf
(
data
.
code
)
!==
-
1
)
{
return
languageResult
;
}
return
null
;
}
).
filter
(
(
languageResult
)
=>
languageResult
);
};
/**
* Update search results from current query
*/
LanguageSearchWidget
.
prototype
.
addResults
=
function
()
{
const
matchProperties
=
[
'name'
,
'autonym'
,
'code'
],
query
=
this
.
query
.
getValue
().
trim
(),
compare
=
window
.
Intl
&&
Intl
.
Collator
?
new
Intl
.
Collator
(
this
.
lang
,
{
sensitivity
:
'base'
}
).
compare
:
function
(
a
,
b
)
{
return
a
.
toLowerCase
()
===
b
.
toLowerCase
()
?
0
:
1
;
},
hasQuery
=
!!
query
.
length
,
items
=
[];
const
results
=
this
.
getResults
();
results
.
clearItems
();
this
.
filteredLanguageResultWidgets
.
forEach
(
(
languageResult
)
=>
{
const
data
=
languageResult
.
getData
();
let
matchedProperty
=
null
;
matchProperties
.
some
(
(
prop
)
=>
{
if
(
data
[
prop
]
&&
compare
(
data
[
prop
].
slice
(
0
,
query
.
length
),
query
)
===
0
)
{
matchedProperty
=
prop
;
return
true
;
}
return
false
;
}
);
if
(
query
===
''
||
matchedProperty
)
{
items
.
push
(
languageResult
.
updateLabel
(
query
,
matchedProperty
,
compare
)
.
setSelected
(
false
)
.
setHighlighted
(
false
)
// Forward keyboard-triggered events from the OptionWidget to the SelectWidget
.
off
(
'choose'
)
.
connect
(
results
,
{
choose
:
[
'emit'
,
'choose'
]
}
)
);
}
}
);
results
.
addItems
(
items
);
if
(
hasQuery
)
{
results
.
highlightItem
(
results
.
findFirstSelectableItem
()
);
}
};
module
.
exports
=
LanguageSearchWidget
;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, May 16, 19:37 (4 h, 17 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
4c/21/9a19ec9f19b33dae85b1ae35ae60
Default Alt Text
LanguageSearchWidget.js (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment