radh-ui
Version:
Stencil Component Starter
63 lines (58 loc) • 1.95 kB
JavaScript
import { r as registerInstance, c as createEvent, h, g as getElement } from './index-a9700b09.js';
function getComponentClosestLanguage(element) {
let closestElement = element.closest('[lang]');
return closestElement ? closestElement.lang : 'en';
}
function fetchLocaleStringsForComponent(componentName, locale) {
return new Promise((resolve, reject) => {
fetch(`/assets/i18n/${componentName}.${locale}.json`)
.then((result) => {
if (result.ok)
resolve(result.json());
else
reject();
}, () => reject());
});
}
async function getLocaleComponentStrings(element) {
let componentName = element.tagName.toLowerCase();
let componentLanguage = getComponentClosestLanguage(element);
let strings;
try {
strings = await fetchLocaleStringsForComponent(componentName, componentLanguage);
}
catch (e) {
console.warn(`no locale for ${componentName} (${componentLanguage}) loading default locale en.`);
strings = await fetchLocaleStringsForComponent(componentName, 'en');
}
return strings;
}
const radhHelloCss = ".active{color:red}";
class RadhHello {
constructor(hostRef) {
registerInstance(this, hostRef);
this.selected = createEvent(this, "selected", 7);
}
async loadStrings() {
this.strings = await getLocaleComponentStrings(this.myComponent);
}
componentWillLoad() {
return this.loadStrings();
}
async loadLocale() {
this.loadStrings();
}
onListenClick() {
this.selected.emit(this.name);
this.addClass();
}
addClass() {
this.myComponent.classList.add("active");
}
render() {
return (h("div", { id: "hello" }, this.strings.hello, " ", this.name));
}
get myComponent() { return getElement(this); }
}
RadhHello.style = radhHelloCss;
export { RadhHello as radh_hello };