| Index: third_party/polymer/v1_0/components/iron-autogrow-textarea/iron-autogrow-textarea.html
|
| diff --git a/third_party/polymer/v1_0/components/iron-autogrow-textarea/iron-autogrow-textarea.html b/third_party/polymer/v1_0/components/iron-autogrow-textarea/iron-autogrow-textarea.html
|
| deleted file mode 100644
|
| index cb1cd3391aeed06d817287af6fb8aab9a37ecca4..0000000000000000000000000000000000000000
|
| --- a/third_party/polymer/v1_0/components/iron-autogrow-textarea/iron-autogrow-textarea.html
|
| +++ /dev/null
|
| @@ -1,306 +0,0 @@
|
| -<!--
|
| -@license
|
| -Copyright (c) 2015 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.txt
|
| -The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
| -The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
| -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.txt
|
| --->
|
| -
|
| -<link rel="import" href="../polymer/polymer.html">
|
| -<link rel="import" href="../iron-behaviors/iron-control-state.html">
|
| -<link rel="import" href="../iron-flex-layout/classes/iron-flex-layout.html">
|
| -<link rel="import" href="../iron-validatable-behavior/iron-validatable-behavior.html">
|
| -<link rel="import" href="../iron-form-element-behavior/iron-form-element-behavior.html">
|
| -
|
| -<!--
|
| -`iron-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:
|
| -
|
| - <iron-autogrow-textarea id="a1">
|
| - <textarea id="t1"></textarea>
|
| - </iron-autogrow-textarea>
|
| -
|
| -Because the `textarea`'s `value` property is not observable, you should use
|
| -this element's `bind-value` instead for imperative updates.
|
| -
|
| -@group Iron Elements
|
| -@hero hero.svg
|
| -@demo demo/index.html
|
| --->
|
| -
|
| -<dom-module id="iron-autogrow-textarea">
|
| -
|
| - <style>
|
| - :host {
|
| - display: inline-block;
|
| - position: relative;
|
| - width: 400px;
|
| - border: 1px solid;
|
| - padding: 2px;
|
| - -moz-appearance: textarea;
|
| - -webkit-appearance: textarea;
|
| - }
|
| -
|
| - .mirror-text {
|
| - visibility: hidden;
|
| - word-wrap: break-word;
|
| - }
|
| -
|
| - textarea {
|
| - position: relative;
|
| - outline: none;
|
| - border: none;
|
| - resize: none;
|
| - background: inherit;
|
| - color: inherit;
|
| - /* see comments in template */
|
| - width: 100%;
|
| - height: 100%;
|
| - font-size: inherit;
|
| - font-family: inherit;
|
| - }
|
| -
|
| - ::content textarea:invalid {
|
| - box-shadow: none;
|
| - }
|
| -
|
| - </style>
|
| - <template>
|
| - <!-- 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">
|
| - <textarea id="textarea"
|
| - autocomplete$="[[autocomplete]]"
|
| - autofocus$="[[autofocus]]"
|
| - inputmode$="[[inputmode]]"
|
| - placeholder$="[[placeholder]]"
|
| - readonly$="[[readonly]]"
|
| - required$="[[required]]"
|
| - rows$="[[rows]]"
|
| - maxlength$="[[maxlength]]"></textarea>
|
| - </div>
|
| - </template>
|
| -</dom-module>
|
| -
|
| -<script>
|
| -
|
| - Polymer({
|
| -
|
| - is: 'iron-autogrow-textarea',
|
| -
|
| - behaviors: [
|
| - Polymer.IronFormElementBehavior,
|
| - Polymer.IronValidatableBehavior,
|
| - Polymer.IronControlState
|
| - ],
|
| -
|
| - properties: {
|
| -
|
| - /**
|
| - * Use this property instead of `value` for two-way data binding.
|
| - */
|
| - bindValue: {
|
| - observer: '_bindValueChanged',
|
| - type: String
|
| - },
|
| -
|
| - /**
|
| - * The initial number of rows.
|
| - *
|
| - * @attribute rows
|
| - * @type number
|
| - * @default 1
|
| - */
|
| - rows: {
|
| - type: Number,
|
| - value: 1,
|
| - observer: '_updateCached'
|
| - },
|
| -
|
| - /**
|
| - * The maximum number of rows this element can grow to until it
|
| - * scrolls. 0 means no maximum.
|
| - *
|
| - * @attribute maxRows
|
| - * @type number
|
| - * @default 0
|
| - */
|
| - maxRows: {
|
| - type: Number,
|
| - value: 0,
|
| - observer: '_updateCached'
|
| - },
|
| -
|
| - /**
|
| - * Bound to the textarea's `autocomplete` attribute.
|
| - */
|
| - autocomplete: {
|
| - type: String,
|
| - value: 'off'
|
| - },
|
| -
|
| - /**
|
| - * Bound to the textarea's `autofocus` attribute.
|
| - */
|
| - autofocus: {
|
| - type: String,
|
| - value: 'off'
|
| - },
|
| -
|
| - /**
|
| - * Bound to the textarea's `inputmode` attribute.
|
| - */
|
| - inputmode: {
|
| - type: String
|
| - },
|
| -
|
| - /**
|
| - * Bound to the textarea's `name` attribute.
|
| - */
|
| - name: {
|
| - type: String
|
| - },
|
| -
|
| - /**
|
| - * The value for this input, same as `bindValue`
|
| - */
|
| - value: {
|
| - notify: true,
|
| - type: String,
|
| - computed: '_computeValue(bindValue)'
|
| - },
|
| -
|
| - /**
|
| - * Bound to the textarea's `placeholder` attribute.
|
| - */
|
| - placeholder: {
|
| - type: String
|
| - },
|
| -
|
| - /**
|
| - * Bound to the textarea's `readonly` attribute.
|
| - */
|
| - readonly: {
|
| - type: String
|
| - },
|
| -
|
| - /**
|
| - * Set to true to mark the textarea as required.
|
| - */
|
| - required: {
|
| - type: Boolean
|
| - },
|
| -
|
| - /**
|
| - * The maximum length of the input value.
|
| - */
|
| - maxlength: {
|
| - type: Number
|
| - }
|
| -
|
| - },
|
| -
|
| - listeners: {
|
| - 'input': '_onInput'
|
| - },
|
| -
|
| - /**
|
| - * Returns the underlying textarea.
|
| - * @type HTMLTextAreaElement
|
| - */
|
| - get textarea() {
|
| - return this.$.textarea;
|
| - },
|
| -
|
| - /**
|
| - * Returns true if `value` is valid. The validator provided in `validator`
|
| - * will be used first, if it exists; otherwise, the `textarea`'s validity
|
| - * is used.
|
| - * @return {boolean} True if the value is valid.
|
| - */
|
| - validate: function() {
|
| - // Empty, non-required input is valid.
|
| - if (!this.required && this.value == '') {
|
| - this.invalid = false;
|
| - return true;
|
| - }
|
| -
|
| - var valid;
|
| - if (this.hasValidator()) {
|
| - valid = Polymer.IronValidatableBehavior.validate.call(this, this.value);
|
| - } else {
|
| - valid = this.$.textarea.validity.valid;
|
| - this.invalid = !valid;
|
| - }
|
| - this.fire('iron-input-validate');
|
| - return valid;
|
| - },
|
| -
|
| - _update: function() {
|
| - this.$.mirror.innerHTML = this._valueForMirror();
|
| -
|
| - var textarea = this.textarea;
|
| - // If the value of the textarea was updated imperatively, then we
|
| - // need to manually update bindValue as well.
|
| - if (textarea && this.bindValue != textarea.value) {
|
| - this.bindValue = textarea.value;
|
| - }
|
| - },
|
| -
|
| - _bindValueChanged: function() {
|
| - var textarea = this.textarea;
|
| - if (!textarea) {
|
| - return;
|
| - }
|
| -
|
| - textarea.value = this.bindValue;
|
| - this._update();
|
| - // manually notify because we don't want to notify until after setting value
|
| - this.fire('bind-value-changed', {value: this.bindValue});
|
| - },
|
| -
|
| - _onInput: function(event) {
|
| - this.bindValue = event.path ? event.path[0].value : event.target.value;
|
| - this._update();
|
| - },
|
| -
|
| - _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() {
|
| - var input = this.textarea;
|
| - if (!input) {
|
| - return;
|
| - }
|
| - this.tokens = (input && input.value) ? input.value.replace(/&/gm, '&').replace(/"/gm, '"').replace(/'/gm, ''').replace(/</gm, '<').replace(/>/gm, '>').split('\n') : [''];
|
| - return this._constrain(this.tokens);
|
| - },
|
| -
|
| - _updateCached: function() {
|
| - this.$.mirror.innerHTML = this._constrain(this.tokens);
|
| - },
|
| -
|
| - _computeValue: function() {
|
| - return this.bindValue;
|
| - }
|
| - })
|
| -</script>
|
|
|