1
2    Polymer('core-transition', {
3
4      type: 'transition',
5
6      /**
7       * Run the animation.
8       *
9       * @method go
10       * @param {Node} node The node to apply the animation on
11       * @param {Object} state State info
12       */
13      go: function(node, state) {
14        this.complete(node);
15      },
16
17      /**
18       * Set up the animation. This may include injecting a stylesheet,
19       * applying styles, creating a web animations object, etc.. This
20       *
21       * @method setup
22       * @param {Node} node The animated node
23       */
24      setup: function(node) {
25      },
26
27      /**
28       * Tear down the animation.
29       *
30       * @method teardown
31       * @param {Node} node The animated node
32       */
33      teardown: function(node) {
34      },
35
36      /**
37       * Called when the animation completes. This function also fires the
38       * `core-transitionend` event.
39       *
40       * @method complete
41       * @param {Node} node The animated node
42       */
43      complete: function(node) {
44        this.fire('core-transitionend', null, node);
45      },
46
47      /**
48       * Utility function to listen to an event on a node once.
49       *
50       * @method listenOnce
51       * @param {Node} node The animated node
52       * @param {string} event Name of an event
53       * @param {Function} fn Event handler
54       * @param {Array} args Additional arguments to pass to `fn`
55       */
56      listenOnce: function(node, event, fn, args) {
57        var self = this;
58        var listener = function() {
59          fn.apply(self, args);
60          node.removeEventListener(event, listener, false);
61        }
62        node.addEventListener(event, listener, false);
63      }
64
65    });
66