| Index: sky/framework/sky-input.sky
|
| diff --git a/sky/framework/sky-input.sky b/sky/framework/sky-input.sky
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ee790400ae6de56f7465d137ec3a08e412cd82bf
|
| --- /dev/null
|
| +++ b/sky/framework/sky-input.sky
|
| @@ -0,0 +1,51 @@
|
| +<!--
|
| +// 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/framework/sky-element/sky-element.sky" as="SkyElement" />
|
| +
|
| +<sky-element name="sky-input" attributes="value:string">
|
| +<template>
|
| + <style>
|
| + :host {
|
| + display: flex;
|
| + border: 1px solid blue;
|
| + margin: 5px;
|
| + padding: 4px;
|
| + }
|
| + #control {
|
| + align-self: center;
|
| + height: 1.2em;
|
| + white-space: nowrap;
|
| + overflow: hidden;
|
| + }
|
| + </style>
|
| + <div id="control" contenteditable on-keydown="handleKeyDown">{{ value }}</div>
|
| +</template>
|
| +<script>
|
| +module.exports = class extends SkyElement {
|
| + shadowRootReady() {
|
| + var control = this.shadowRoot.getElementById('control');
|
| +
|
| + var observer = new MutationObserver(function() {
|
| + this.value = control.textContent;
|
| + this.dispatchEvent(new CustomEvent('change', {
|
| + bubbles: true,
|
| + }));
|
| + }.bind(this));
|
| +
|
| + observer.observe(control, {
|
| + subtree: true,
|
| + characterData: true,
|
| + childList: true,
|
| + });
|
| + }
|
| + handleKeyDown(event) {
|
| + // TODO(abarth): You can still get newlines if the user pastes them.
|
| + if (event.keyCode == 0xD)
|
| + event.preventDefault();
|
| + }
|
| +}.register();
|
| +</script>
|
| +</sky-element>
|
|
|