five-bells-visualization
Version:
Tool to visualize Five Bells payments
115 lines (103 loc) • 2.9 kB
HTML
<!--
Copyright (c) 2014 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
-->
<script>
/**
* Automatically extend using objects referenced in `behaviors` array.
*
* someBehaviorObject = {
* accessors: {
* value: {type: Number, observer: '_numberChanged'}
* },
* observers: [
* // ...
* ],
* ready: function() {
* // called before prototoype's ready
* },
* _numberChanged: function() {}
* };
*
* Polymer({
*
* behaviors: [
* someBehaviorObject
* ]
*
* ...
*
* });
*
* @class base feature: behaviors
*/
Polymer.Base._addFeature({
behaviors: [],
_prepBehaviors: function() {
this._flattenBehaviors();
this._prepBehavior(this);
this.behaviors.forEach(function(b) {
this._mixinBehavior(b);
this._prepBehavior(b);
}, this);
},
_flattenBehaviors: function() {
var flat = [];
this.behaviors.forEach(function(b) {
if (!b) {
console.warn('Polymer: undefined behavior in [' + this.is + ']');
} else if (b instanceof Array) {
flat = flat.concat(b);
} else {
flat.push(b);
}
}, this);
this.behaviors = flat;
},
_mixinBehavior: function(b) {
Object.getOwnPropertyNames(b).forEach(function(n) {
switch (n) {
case 'registered':
case 'properties':
case 'observers':
case 'listeners':
case 'keyPresses':
case 'hostAttributes':
case 'created':
case 'attached':
case 'detached':
case 'attributeChanged':
case 'configure':
case 'ready':
break;
default:
this.copyOwnProperty(n, b, this);
break;
}
}, this);
},
_doBehavior: function(name, args) {
this.behaviors.forEach(function(b) {
this._invokeBehavior(b, name, args);
}, this);
this._invokeBehavior(this, name, args);
},
_invokeBehavior: function(b, name, args) {
var fn = b[name];
if (fn) {
fn.apply(this, args || Polymer.nar);
}
},
_marshalBehaviors: function() {
this.behaviors.forEach(function(b) {
this._marshalBehavior(b);
}, this);
this._marshalBehavior(this);
}
});
</script>