Migrate from Polymer to Lit
Also remove the extra bind-value attribute for the input
tag and instead use the revision object to get the current
ref.
Change-Id: Iee2cd78206fc6a0188b21357fa9a70dd803c692c
diff --git a/ref-copy/plugin.js b/ref-copy/plugin.js
index 6e3adc1..d406da0 100644
--- a/ref-copy/plugin.js
+++ b/ref-copy/plugin.js
@@ -12,9 +12,9 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-import './ref-copy';
+import {REF_COPY} from './ref-copy';
Gerrit.install(plugin => {
plugin.registerCustomComponent(
- 'change-metadata-item', 'ref-copy');
+ 'change-metadata-item', REF_COPY);
});
diff --git a/ref-copy/ref-copy.js b/ref-copy/ref-copy.js
index 4ced2bd..46fc39f 100644
--- a/ref-copy/ref-copy.js
+++ b/ref-copy/ref-copy.js
@@ -12,40 +12,71 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-import {htmlTemplate} from './ref-copy_html';
+import {css, html, LitElement} from 'lit';
const COPY_TIMEOUT_MS = 1000;
-class RefCopy extends Polymer.Element {
-
- static get is() { return 'ref-copy'; }
-
- static get template() { return htmlTemplate; }
-
+export const REF_COPY = 'ref-copy';
+class RefCopy extends LitElement {
static get properties() {
return {
- revision: Object,
+ revision: {type: Object}
};
}
+ static get styles() {
+ return css`
+ .text {
+ min-width: 8em;
+ padding: var(--spacing-l);
+ text-transform: none;
+ }
+ `;
+ }
+
+ render() {
+ return html`
+ <div class="text">
+ <iron-input
+ bind-value="${this.revision.ref}"
+ readonly>
+ <input
+ id="input"
+ is="iron-input"
+ type="text"
+ @click="${this._handleInputTap}"
+ readonly/>
+ </iron-input>
+ <gr-button
+ id="button"
+ link
+ class="copyToClipboard"
+ @click="${this._copyToClipboard}">
+ copy
+ </gr-button>
+ </div>`;
+ }
+
_handleInputTap(e) {
e.preventDefault();
- Polymer.dom(e).rootTarget.select();
+ const rootTarget = e.composedPath()[0];
+ rootTarget.select();
}
_copyToClipboard(e) {
- const ref = this.$.input.value;
+ const ref = this.revision.ref;
const copyBtn = e.target;
if (ref) {
navigator.clipboard.writeText(ref).then(() => {
copyBtn.innerText = 'done';
setTimeout(() => {
- copyBtn.innerText = 'copy'}, COPY_TIMEOUT_MS);
- }).catch(err => {
- console.log('Failed to copy ref to clipboard', err);
- })
+ copyBtn.innerText = 'copy'
+ }, COPY_TIMEOUT_MS);
+ }).catch(err => {
+ console.log('Failed to copy ref to clipboard', err);
+ })
}
}
}
-customElements.define(RefCopy.is, RefCopy);
+customElements.define(REF_COPY, RefCopy);
diff --git a/ref-copy/ref-copy_html.js b/ref-copy/ref-copy_html.js
deleted file mode 100644
index d39c9e2..0000000
--- a/ref-copy/ref-copy_html.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2021 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-export const htmlTemplate = Polymer.html`
-<style>
- .text {
- min-width: 8em;
- padding: var(--spacing-l);
- text-transform: none;
- }
-</style>
-<div class="text">
- <iron-input
- bind-value="{{revision.ref}}"
- readonly>
- <input
- id="input"
- is="iron-input"
- type="text"
- on-tap="_handleInputTap"
- bind-value="{{revision.ref}}"
- readonly/>
- </iron-input>
- <gr-button
- id="button"
- link
- class="copyToClipboard"
- on-tap="_copyToClipboard">
- copy
- </gr-button>
-</div>
-<gr-js-api-interface id="jsAPI"></gr-js-api-interface>`;