~didrocks/+junk/face-detection-15.04

« back to all changes in this revision

Viewing changes to facedetection/www/bower_components/iron-selector/iron-selection.html

  • Committer: Didier Roche
  • Date: 2016-05-10 23:09:11 UTC
  • Revision ID: didier.roche@canonical.com-20160510230911-c7xr490zrj3yrzxd
New version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
<!--
 
3
@license
 
4
Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
 
5
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
 
6
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
 
7
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
 
8
Code distributed by Google as part of the polymer project is also
 
9
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
 
10
-->
 
11
 
 
12
<link rel="import" href="../polymer/polymer.html">
 
13
 
 
14
<script>
 
15
 
 
16
  /**
 
17
   * @param {!Function} selectCallback
 
18
   * @constructor
 
19
   */
 
20
  Polymer.IronSelection = function(selectCallback) {
 
21
    this.selection = [];
 
22
    this.selectCallback = selectCallback;
 
23
  };
 
24
 
 
25
  Polymer.IronSelection.prototype = {
 
26
 
 
27
    /**
 
28
     * Retrieves the selected item(s).
 
29
     *
 
30
     * @method get
 
31
     * @returns Returns the selected item(s). If the multi property is true,
 
32
     * `get` will return an array, otherwise it will return
 
33
     * the selected item or undefined if there is no selection.
 
34
     */
 
35
    get: function() {
 
36
      return this.multi ? this.selection.slice() : this.selection[0];
 
37
    },
 
38
 
 
39
    /**
 
40
     * Clears all the selection except the ones indicated.
 
41
     *
 
42
     * @method clear
 
43
     * @param {Array} excludes items to be excluded.
 
44
     */
 
45
    clear: function(excludes) {
 
46
      this.selection.slice().forEach(function(item) {
 
47
        if (!excludes || excludes.indexOf(item) < 0) {
 
48
          this.setItemSelected(item, false);
 
49
        }
 
50
      }, this);
 
51
    },
 
52
 
 
53
    /**
 
54
     * Indicates if a given item is selected.
 
55
     *
 
56
     * @method isSelected
 
57
     * @param {*} item The item whose selection state should be checked.
 
58
     * @returns Returns true if `item` is selected.
 
59
     */
 
60
    isSelected: function(item) {
 
61
      return this.selection.indexOf(item) >= 0;
 
62
    },
 
63
 
 
64
    /**
 
65
     * Sets the selection state for a given item to either selected or deselected.
 
66
     *
 
67
     * @method setItemSelected
 
68
     * @param {*} item The item to select.
 
69
     * @param {boolean} isSelected True for selected, false for deselected.
 
70
     */
 
71
    setItemSelected: function(item, isSelected) {
 
72
      if (item != null) {
 
73
        if (isSelected !== this.isSelected(item)) {
 
74
          // proceed to update selection only if requested state differs from current
 
75
          if (isSelected) {
 
76
            this.selection.push(item);
 
77
          } else {
 
78
            var i = this.selection.indexOf(item);
 
79
            if (i >= 0) {
 
80
              this.selection.splice(i, 1);
 
81
            }
 
82
          }
 
83
          if (this.selectCallback) {
 
84
            this.selectCallback(item, isSelected);
 
85
          }
 
86
        }
 
87
      }
 
88
    },
 
89
 
 
90
    /**
 
91
     * Sets the selection state for a given item. If the `multi` property
 
92
     * is true, then the selected state of `item` will be toggled; otherwise
 
93
     * the `item` will be selected.
 
94
     *
 
95
     * @method select
 
96
     * @param {*} item The item to select.
 
97
     */
 
98
    select: function(item) {
 
99
      if (this.multi) {
 
100
        this.toggle(item);
 
101
      } else if (this.get() !== item) {
 
102
        this.setItemSelected(this.get(), false);
 
103
        this.setItemSelected(item, true);
 
104
      }
 
105
    },
 
106
 
 
107
    /**
 
108
     * Toggles the selection state for `item`.
 
109
     *
 
110
     * @method toggle
 
111
     * @param {*} item The item to toggle.
 
112
     */
 
113
    toggle: function(item) {
 
114
      this.setItemSelected(item, !this.isSelected(item));
 
115
    }
 
116
 
 
117
  };
 
118
 
 
119
</script>