1<!-- 2@license 3Copyright (c) 2015 The Polymer Project Authors. All rights reserved. 4This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt 5The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt 7Code distributed by Google as part of the polymer project is also 8subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt 9--> 10 11<link rel="import" href="../polymer/polymer.html"> 12<link rel="import" href="../iron-behaviors/iron-button-state.html"> 13<link rel="import" href="paper-ripple-behavior.html"> 14 15<script> 16 /** @polymerBehavior Polymer.PaperButtonBehavior */ 17 Polymer.PaperButtonBehaviorImpl = { 18 properties: { 19 /** 20 * The z-depth of this element, from 0-5. Setting to 0 will remove the 21 * shadow, and each increasing number greater than 0 will be "deeper" 22 * than the last. 23 * 24 * @attribute elevation 25 * @type number 26 * @default 1 27 */ 28 elevation: { 29 type: Number, 30 reflectToAttribute: true, 31 readOnly: true 32 } 33 }, 34 35 observers: [ 36 '_calculateElevation(focused, disabled, active, pressed, receivedFocusFromKeyboard)', 37 '_computeKeyboardClass(receivedFocusFromKeyboard)' 38 ], 39 40 hostAttributes: { 41 role: 'button', 42 tabindex: '0', 43 animated: true 44 }, 45 46 _calculateElevation: function() { 47 var e = 1; 48 if (this.disabled) { 49 e = 0; 50 } else if (this.active || this.pressed) { 51 e = 4; 52 } else if (this.receivedFocusFromKeyboard) { 53 e = 3; 54 } 55 this._setElevation(e); 56 }, 57 58 _computeKeyboardClass: function(receivedFocusFromKeyboard) { 59 this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); 60 }, 61 62 /** 63 * In addition to `IronButtonState` behavior, when space key goes down, 64 * create a ripple down effect. 65 * 66 * @param {!KeyboardEvent} event . 67 */ 68 _spaceKeyDownHandler: function(event) { 69 Polymer.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); 70 // Ensure that there is at most one ripple when the space key is held down. 71 if (this.hasRipple() && this.getRipple().ripples.length < 1) { 72 this._ripple.uiDownAction(); 73 } 74 }, 75 76 /** 77 * In addition to `IronButtonState` behavior, when space key goes up, 78 * create a ripple up effect. 79 * 80 * @param {!KeyboardEvent} event . 81 */ 82 _spaceKeyUpHandler: function(event) { 83 Polymer.IronButtonStateImpl._spaceKeyUpHandler.call(this, event); 84 if (this.hasRipple()) { 85 this._ripple.uiUpAction(); 86 } 87 } 88 }; 89 90 /** @polymerBehavior */ 91 Polymer.PaperButtonBehavior = [ 92 Polymer.IronButtonState, 93 Polymer.IronControlState, 94 Polymer.PaperRippleBehavior, 95 Polymer.PaperButtonBehaviorImpl 96 ]; 97</script> 98