Polymer('paper-button', {
publish: {
/**
* The label of the button.
*
* @attribute label
* @type string
* @default ''
*/
label: '',
/**
* If true, the button will be styled as a "raised" button.
*
* @attribute raisedButton
* @type boolean
* @default false
*/
raisedButton: {value: false, reflect: true},
/**
* (optional) The URL of an image for an icon to use in the button.
* Should not use `icon` property if you are using this property.
*
* @attribute iconSrc
* @type string
* @default ''
*/
iconSrc: '',
/**
* (optional) Specifies the icon name or index in the set of icons
* available in the icon set. If using this property, load the icon
* set separately where the icon is used. Should not use `src`
* if you are using this property.
*
* @attribute icon
* @type string
* @default ''
*/
icon: ''
},
z: 1,
attached: function() {
if (this.textContent && !this.textContent.match(/\s+/)) {
console.warn('Using textContent to label the button is deprecated. Use the "label" property instead');
this.label = this.textContent;
}
},
activeChanged: function() {
this.super();
if (this.active) {
// FIXME: remove when paper-ripple can have a default 'down' state.
if (!this.lastEvent) {
var rect = this.getBoundingClientRect();
this.lastEvent = {
x: rect.left + rect.width / 2,
y: rect.top + rect.height / 2
}
}
this.$.ripple.downAction(this.lastEvent);
} else {
this.$.ripple.upAction();
}
this.adjustZ();
},
focusedChanged: function() {
this.super();
this.adjustZ();
},
disabledChanged: function() {
this.super();
this.adjustZ();
},
// waitForSpillCompleted: function(callback) {
// this.async(callback, null, (this.$.ink.spillCompleted ? 0 : this.duration));
// },
// resetInk: function() {
// this.active = false;
// this.$.ink.reset();
// },
insideButton: function(x, y) {
var rect = this.getBoundingClientRect();
return (rect.left <= x) && (x <= rect.right) && (rect.top <= y) && (y <= rect.bottom);
},
adjustZ: function() {
if (this.focused) {
this.classList.add('paper-shadow-animate-z-1-z-2');
} else {
this.classList.remove('paper-shadow-animate-z-1-z-2');
if (this.active) {
this.z = 2;
} else if (this.disabled) {
this.z = 0;
} else {
this.z = 1;
}
}
},
downAction: function(e) {
this.super(e);
this.lastEvent = e;
},
labelChanged: function() {
this.setAttribute('aria-label', this.label);
}
});