• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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