Skip to content

Instantly share code, notes, and snippets.

@sukima
Created April 19, 2021 23:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sukima/ad746d0e6fcf759d9d441b4732ee3782 to your computer and use it in GitHub Desktop.
Save sukima/ad746d0e6fcf759d9d441b4732ee3782 to your computer and use it in GitHub Desktop.
custom-elements
import Component from '@glimmer/component';
export default class extends Component {
}
class EncodedText extends HTMLElement {
_state = 'encoded';
get isEncoded() {
return this._state === 'encoded';
}
set isEncoded(value) {
this._state = value ? 'encoded' : 'decoded';
this.render();
}
connectedCallback() {
this.setAttribute('role', 'button');
this.addEventListener('click', () => {
this.isEncoded = !this.isEncoded;
});
this.updateValue();
}
attributeChangedCallback() {
this.updateValue();
}
render() {
this.dataset.state = this._state;
this.textContent = this.isEncoded ? this.value : atob(this.value);
}
updateValue() {
this.value = this.getAttribute('value');
this.render();
}
static get observedAttributes() {
return ['value'];
}
}
customElements.define('encoded-text', EncodedText);
import Controller from '@ember/controller';
export default class ApplicationController extends Controller {
appName = 'Ember Twiddle';
}
<TextMarkup @text="Zm9vYmFy" />
<encoded-text value={{@text}}></encoded-text>
{
"version": "0.17.1",
"EmberENV": {
"FEATURES": {},
"_TEMPLATE_ONLY_GLIMMER_COMPONENTS": false,
"_APPLICATION_TEMPLATE_WRAPPER": true,
"_JQUERY_INTEGRATION": true
},
"options": {
"use_pods": false,
"enable-testing": false
},
"dependencies": {
"jquery": "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js",
"ember": "3.18.1",
"ember-template-compiler": "3.18.1",
"ember-testing": "3.18.1"
},
"addons": {
"@glimmer/component": "1.0.0"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment