mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 11:28:23 -07:00
126 lines
3.2 KiB
HTML
126 lines
3.2 KiB
HTML
<!--
|
|
@license
|
|
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
|
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
|
Code distributed by Google as part of the polymer project is also
|
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
|
-->
|
|
|
|
<link rel="import" href="../polymer/polymer.html">
|
|
<link rel="import" href="iron-selectable.html">
|
|
|
|
<script>
|
|
/** @polymerBehavior Polymer.IronMultiSelectableBehavior */
|
|
Polymer.IronMultiSelectableBehaviorImpl = {
|
|
properties: {
|
|
|
|
/**
|
|
* If true, multiple selections are allowed.
|
|
*/
|
|
multi: {
|
|
type: Boolean,
|
|
value: false,
|
|
observer: 'multiChanged'
|
|
},
|
|
|
|
/**
|
|
* Gets or sets the selected elements. This is used instead of `selected` when `multi`
|
|
* is true.
|
|
*/
|
|
selectedValues: {
|
|
type: Array,
|
|
notify: true
|
|
},
|
|
|
|
/**
|
|
* Returns an array of currently selected items.
|
|
*/
|
|
selectedItems: {
|
|
type: Array,
|
|
readOnly: true,
|
|
notify: true
|
|
},
|
|
|
|
},
|
|
|
|
observers: [
|
|
'_updateSelected(attrForSelected, selectedValues)'
|
|
],
|
|
|
|
/**
|
|
* Selects the given value. If the `multi` property is true, then the selected state of the
|
|
* `value` will be toggled; otherwise the `value` will be selected.
|
|
*
|
|
* @method select
|
|
* @param {string|number} value the value to select.
|
|
*/
|
|
select: function(value) {
|
|
if (this.multi) {
|
|
if (this.selectedValues) {
|
|
this._toggleSelected(value);
|
|
} else {
|
|
this.selectedValues = [value];
|
|
}
|
|
} else {
|
|
this.selected = value;
|
|
}
|
|
},
|
|
|
|
multiChanged: function(multi) {
|
|
this._selection.multi = multi;
|
|
},
|
|
|
|
get _shouldUpdateSelection() {
|
|
return this.selected != null ||
|
|
(this.selectedValues != null && this.selectedValues.length);
|
|
},
|
|
|
|
_updateSelected: function() {
|
|
if (this.multi) {
|
|
this._selectMulti(this.selectedValues);
|
|
} else {
|
|
this._selectSelected(this.selected);
|
|
}
|
|
},
|
|
|
|
_selectMulti: function(values) {
|
|
this._selection.clear();
|
|
if (values) {
|
|
for (var i = 0; i < values.length; i++) {
|
|
this._selection.setItemSelected(this._valueToItem(values[i]), true);
|
|
}
|
|
}
|
|
},
|
|
|
|
_selectionChange: function() {
|
|
var s = this._selection.get();
|
|
if (this.multi) {
|
|
this._setSelectedItems(s);
|
|
} else {
|
|
this._setSelectedItems([s]);
|
|
this._setSelectedItem(s);
|
|
}
|
|
},
|
|
|
|
_toggleSelected: function(value) {
|
|
var i = this.selectedValues.indexOf(value);
|
|
var unselected = i < 0;
|
|
if (unselected) {
|
|
this.push('selectedValues',value);
|
|
} else {
|
|
this.splice('selectedValues',i,1);
|
|
}
|
|
this._selection.setItemSelected(this._valueToItem(value), unselected);
|
|
}
|
|
};
|
|
|
|
/** @polymerBehavior */
|
|
Polymer.IronMultiSelectableBehavior = [
|
|
Polymer.IronSelectableBehavior,
|
|
Polymer.IronMultiSelectableBehaviorImpl
|
|
];
|
|
|
|
</script>
|