| Index: third_party/polymer/v0_8/components-chromium/polymer/src/lib/template/x-array-selector-extracted.js
|
| diff --git a/third_party/polymer/v0_8/components-chromium/polymer/src/lib/template/x-array-selector-extracted.js b/third_party/polymer/v0_8/components-chromium/polymer/src/lib/template/x-array-selector-extracted.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c794f644166ac469eab1017923c9ca6d17573f0c
|
| --- /dev/null
|
| +++ b/third_party/polymer/v0_8/components-chromium/polymer/src/lib/template/x-array-selector-extracted.js
|
| @@ -0,0 +1,113 @@
|
| +
|
| +
|
| + Polymer({
|
| + is: 'x-array-selector',
|
| +
|
| + properties: {
|
| +
|
| + /**
|
| + * An array containing items from which selection will be made.
|
| + */
|
| + items: {
|
| + type: Array,
|
| + observer: '_itemsChanged'
|
| + },
|
| +
|
| + /**
|
| + * When `multi` is true, this is an array that contains any selected.
|
| + * When `multi` is false, this is the currently selected item, or `null`
|
| + * if no item is selected.
|
| + */
|
| + selected: {
|
| + type: Object,
|
| + notify: true
|
| + },
|
| +
|
| + /**
|
| + * When `true`, calling `select` on an item that is already selected
|
| + * will deselect the item.
|
| + */
|
| + toggle: Boolean,
|
| +
|
| + /**
|
| + * When `true`, multiple items may be selected at once (in this case,
|
| + * `selected` is an array of currently selected items). When `false`,
|
| + * only one item may be selected at a time.
|
| + */
|
| + multi: Boolean
|
| + },
|
| +
|
| + _itemsChanged: function() {
|
| + // Unbind previous selection
|
| + if (Array.isArray(this.selected)) {
|
| + for (var i=0; i<this.selected.length; i++) {
|
| + this.unbindPaths('selected.' + i);
|
| + }
|
| + } else {
|
| + this.unbindPaths('selected');
|
| + }
|
| + // Initialize selection
|
| + if (this.multi) {
|
| + this.selected = [];
|
| + } else {
|
| + this.selected = null;
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Deselects the given item if it is already selected.
|
| + */
|
| + deselect: function(item) {
|
| + if (this.multi) {
|
| + var scol = Polymer.Collection.get(this.selected);
|
| + // var skey = scol.getKey(item);
|
| + // if (skey >= 0) {
|
| + var sidx = this.selected.indexOf(item);
|
| + if (sidx >= 0) {
|
| + var skey = scol.getKey(item);
|
| + this.selected.splice(sidx, 1);
|
| + // scol.remove(item);
|
| + this.unbindPaths('selected.' + skey);
|
| + return true;
|
| + }
|
| + } else {
|
| + this.selected = null;
|
| + this.unbindPaths('selected');
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Selects the given item. When `toggle` is true, this will automatically
|
| + * deselect the item if already selected.
|
| + */
|
| + select: function(item) {
|
| + var icol = Polymer.Collection.get(this.items);
|
| + var key = icol.getKey(item);
|
| + if (this.multi) {
|
| + // var sidx = this.selected.indexOf(item);
|
| + // if (sidx < 0) {
|
| + var scol = Polymer.Collection.get(this.selected);
|
| + var skey = scol.getKey(item);
|
| + if (skey >= 0) {
|
| + this.deselect(item);
|
| + } else if (this.toggle) {
|
| + this.selected.push(item);
|
| + // this.bindPaths('selected.' + sidx, 'items.' + skey);
|
| + // skey = Polymer.Collection.get(this.selected).add(item);
|
| + this.async(function() {
|
| + skey = scol.getKey(item);
|
| + this.bindPaths('selected.' + skey, 'items.' + key);
|
| + });
|
| + }
|
| + } else {
|
| + if (this.toggle && item == this.selected) {
|
| + this.deselect();
|
| + } else {
|
| + this.bindPaths('selected', 'items.' + key);
|
| + this.selected = item;
|
| + }
|
| + }
|
| + }
|
| +
|
| + });
|
| +
|
|
|