Index: polymer_0.5.0/bower_components/paper-input/paper-autogrow-textarea.html |
diff --git a/polymer_0.5.0/bower_components/paper-input/paper-autogrow-textarea.html b/polymer_0.5.0/bower_components/paper-input/paper-autogrow-textarea.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8a8a145281cfb82911e133bfbb4d5d488a5ca43b |
--- /dev/null |
+++ b/polymer_0.5.0/bower_components/paper-input/paper-autogrow-textarea.html |
@@ -0,0 +1,161 @@ |
+<!-- |
+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 |
+The complete set of authors may be found at http://polymer.github.io/AUTHORS |
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS |
+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 |
+--> |
+ |
+<!-- |
+`paper-autogrow-textarea` is an element containing a textarea that grows in height as more |
+lines of input are entered. Unless an explicit height or the `maxRows` property is set, it will |
+never scroll. |
+ |
+Example: |
+ |
+ <paper-autogrow-textarea id="a1"> |
+ <textarea id="t1"></textarea> |
+ <paper-autogrow-textarea> |
+ |
+Because the `textarea`'s `value` property is not observable, if you set the `value` imperatively |
+you must call `update` to notify this element the value has changed. |
+ |
+Example: |
+ |
+ /* using example HTML above */ |
+ t1.value = 'some\ntext'; |
+ a1.update(); |
+ |
+@group Paper Elements |
+@element paper-autogrow-textarea |
+@status unstable |
+--> |
+ |
+<link href="../polymer/polymer.html" rel="import"> |
+ |
+<polymer-element name="paper-autogrow-textarea" on-input="{{inputAction}}"> |
+<template> |
+ |
+ <style> |
+ :host { |
+ display: inline-block; |
+ position: relative; |
+ width: 400px; |
+ } |
+ |
+ .mirror-text { |
+ visibility: hidden; |
+ } |
+ |
+ ::content textarea { |
+ padding: 0; |
+ margin: 0; |
+ border: none; |
+ outline: none; |
+ resize: none; |
+ /* see comments in template */ |
+ width: 100%; |
+ height: 100%; |
+ } |
+ |
+ ::content textarea:invalid { |
+ box-shadow: none; |
+ } |
+ </style> |
+ |
+ <!-- the mirror sizes the input/textarea so it grows with typing --> |
+ <div id="mirror" class="mirror-text" aria-hidden="true"> </div> |
+ |
+ <!-- size the input/textarea with a div, because the textarea has intrinsic size in ff --> |
+ <div class="textarea-container" fit> |
+ <content></content> |
+ </div> |
+ |
+</template> |
+<script> |
+ |
+ Polymer({ |
+ |
+ publish: { |
+ |
+ /** |
+ * The textarea that should auto grow. |
+ * |
+ * @attribute target |
+ * @type HTMLTextAreaElement |
+ * @default null |
+ */ |
+ target: null, |
+ |
+ /** |
+ * The initial number of rows. |
+ * |
+ * @attribute rows |
+ * @type number |
+ * @default 1 |
+ */ |
+ rows: 1, |
+ |
+ /** |
+ * The maximum number of rows this element can grow to until it |
+ * scrolls. 0 means no maximum. |
+ * |
+ * @attribute maxRows |
+ * @type number |
+ * @default 0 |
+ */ |
+ maxRows: 0 |
+ }, |
+ |
+ tokens: null, |
+ |
+ observe: { |
+ rows: 'updateCached', |
+ maxRows: 'updateCached' |
+ }, |
+ |
+ constrain: function(tokens) { |
+ var _tokens; |
+ tokens = tokens || ['']; |
+ // Enforce the min and max heights for a multiline input to avoid measurement |
+ if (this.maxRows > 0 && tokens.length > this.maxRows) { |
+ _tokens = tokens.slice(0, this.maxRows); |
+ } else { |
+ _tokens = tokens.slice(0); |
+ } |
+ while (this.rows > 0 && _tokens.length < this.rows) { |
+ _tokens.push(''); |
+ } |
+ return _tokens.join('<br>') + ' '; |
+ }, |
+ |
+ valueForMirror: function(input) { |
+ this.tokens = (input && input.value) ? input.value.replace(/&/gm, '&').replace(/"/gm, '"').replace(/'/gm, ''').replace(/</gm, '<').replace(/>/gm, '>').split('\n') : ['']; |
+ return this.constrain(this.tokens); |
+ }, |
+ |
+ /** |
+ * Sizes this element to fit the input value. This function is automatically called |
+ * when the user types in new input, but you must call this function if the value |
+ * is updated imperatively. |
+ * |
+ * @method update |
+ * @param Element The input |
+ */ |
+ update: function(input) { |
+ this.$.mirror.innerHTML = this.valueForMirror(input); |
+ }, |
+ |
+ updateCached: function() { |
+ this.$.mirror.innerHTML = this.constrain(this.tokens); |
+ }, |
+ |
+ inputAction: function(e) { |
+ this.update(e.target); |
+ } |
+ |
+ }); |
+ |
+</script> |
+</polymer-element> |