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="../paper-styles/typography.html"> 13<link rel="import" href="paper-input-addon-behavior.html"> 14 15<!-- 16`<paper-input-char-counter>` is a character counter for use with `<paper-input-container>`. It 17shows the number of characters entered in the input and the max length if it is specified. 18 19 <paper-input-container> 20 <input is="iron-input" maxlength="20"> 21 <paper-input-char-counter></paper-input-char-counter> 22 </paper-input-container> 23 24### Styling 25 26The following mixin is available for styling: 27 28Custom property | Description | Default 29----------------|-------------|---------- 30`--paper-input-char-counter` | Mixin applied to the element | `{}` 31--> 32 33<dom-module id="paper-input-char-counter"> 34 <template> 35 <style> 36 :host { 37 display: inline-block; 38 float: right; 39 40 @apply(--paper-font-caption); 41 @apply(--paper-input-char-counter); 42 } 43 44 :host([hidden]) { 45 display: none !important; 46 } 47 48 :host-context([dir="rtl"]) { 49 float: left; 50 } 51 </style> 52 53 <span>[[_charCounterStr]]</span> 54 </template> 55</dom-module> 56 57<script> 58 Polymer({ 59 is: 'paper-input-char-counter', 60 61 behaviors: [ 62 Polymer.PaperInputAddonBehavior 63 ], 64 65 properties: { 66 _charCounterStr: { 67 type: String, 68 value: '0' 69 } 70 }, 71 72 /** 73 * This overrides the update function in PaperInputAddonBehavior. 74 * @param {{ 75 * inputElement: (Element|undefined), 76 * value: (string|undefined), 77 * invalid: boolean 78 * }} state - 79 * inputElement: The input element. 80 * value: The input value. 81 * invalid: True if the input value is invalid. 82 */ 83 update: function(state) { 84 if (!state.inputElement) { 85 return; 86 } 87 88 state.value = state.value || ''; 89 90 var counter = state.value.toString().length.toString(); 91 92 if (state.inputElement.hasAttribute('maxlength')) { 93 counter += '/' + state.inputElement.getAttribute('maxlength'); 94 } 95 96 this._charCounterStr = counter; 97 } 98 }); 99</script> 100