| 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>
 | 
| 
 |