<!--
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-->
<import src="sky-element.sky" />

<sky-element name="sky-input" attributes="value:string">
<template>
  <style>
  :host {
    display: flex;
  }
  #control {
    margin: 8px;
    padding: 8px;
    border-bottom: 1px solid #E7E7E7;
    flex: 1;
    align-self: center;
    height: 1.2em;
    white-space: nowrap;
    overflow: hidden;
  }
  #control.focused {
    padding-bottom: 7px;
    border-bottom: 2px solid #009cf3;
  }
  </style>
  <div id="control" contenteditable />
</template>
<script>
import "dart:sky";

// TODO(abarth): Connect to the mojo:keyboard service.

@Tagname('sky-input')
class SkyInput extends SkyElement {
  Element _control;

  static String _textForValue(String value) => value == null ? '' : value;

  shadowRootReady() {
    _control = shadowRoot.getElementById('control');
    _control.setChild(new Text(_textForValue(getAttribute('text'))));
    _control.addEventListener('focus', _handleFocus);
    _control.addEventListener('blur', _handleBlur);
    _control.addEventListener('keydown', _handleKeyDown);
  }

  String get text => _control == null ? null : _control.textContent;

  void textChanged(String oldValue, String newValue) {
    if (_control != null)
      _control.setChild(new Text(_textForValue(newValue)));
  }

  void _handleKeyDown(KeyboardEvent event) {
    // TODO(abarth): You can still get newlines if the user pastes them.
    if (event.key == 0xD)
      event.preventDefault();
  }

  void _handleFocus(_) {
    if (_control)
      _control.setAttribute('class', 'focused');
    // TODO(abarth): Show the keyboard.
  }

  void _handleBlur(_) {
    if (_control)
      _control.removeAttribute('class');
    // TODO(abarth): Hide the keyboard.
  }
}

_init(script) => register(script, SkyInput);
</script>
</sky-element>
