From d2292137da4796e69a25b524e5ebf36d8000d633 Mon Sep 17 00:00:00 2001
From: dragonwocky
Date: Tue, 20 Apr 2021 17:19:26 +1000
Subject: [PATCH] move svg icons into own files, add dep to manifest
---
extension/helpers.js | 7 +
extension/icons/blackwhite.svg | 2 +-
extension/icons/colour.svg | 2 +-
extension/icons/fontawesome/caret-down.svg | 2 +
extension/icons/fontawesome/code.svg | 2 +
extension/icons/fontawesome/file.svg | 2 +
.../icons/fontawesome/long-arrow-alt-left.svg | 2 +
.../fontawesome/long-arrow-alt-right.svg | 2 +
extension/manifest.json | 2 +-
.../menu.css | 6 +-
.../menu.js | 245 ++++++++++++------
11 files changed, 192 insertions(+), 82 deletions(-)
create mode 100644 extension/icons/fontawesome/caret-down.svg
create mode 100644 extension/icons/fontawesome/code.svg
create mode 100644 extension/icons/fontawesome/file.svg
create mode 100644 extension/icons/fontawesome/long-arrow-alt-left.svg
create mode 100644 extension/icons/fontawesome/long-arrow-alt-right.svg
diff --git a/extension/helpers.js b/extension/helpers.js
index 50ae2c4..81ad92b 100644
--- a/extension/helpers.js
+++ b/extension/helpers.js
@@ -53,6 +53,13 @@ web.createElement = (html) => {
.join('');
return template.content.firstElementChild;
};
+web.htmlEscape = (str) =>
+ str
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/'/g, ''')
+ .replace(/"/g, '"');
/**
* @param {string} sheet
diff --git a/extension/icons/blackwhite.svg b/extension/icons/blackwhite.svg
index 12da3b0..0176e24 100644
--- a/extension/icons/blackwhite.svg
+++ b/extension/icons/blackwhite.svg
@@ -1,4 +1,4 @@
-
`
);
return element;
},
- expand({ id }) {
- const element = web.createElement(`
-
-
- settings & documentation
`);
- return element;
- },
+ },
+ options: {
toggle(id, { key, label, value }) {
const element = web.createElement(``);
return element;
},
- select(id, { key, label, values }) {
+ async select(id, { key, label, values }) {
const element = web.createElement(``);
@@ -92,61 +106,139 @@ const components = {
${label}
`);
return element;
},
- file(id, { key, label, extensions }) {
+ },
+};
+
+const components = {
+ preview: ({ preview = '' }) =>
+ web.createElement(
+ html`
`
+ ),
+ name: ({ name, id, version }) =>
+ web.createElement(``),
+ tags({ tags }) {
+ if (!tags || !tags.length) return '';
+ const element = web.createElement(
+ ``
+ );
+ return element;
+ },
+ description({ description }) {
+ const element = web.createElement(
+ `${markdown.renderInline(description)}
`
+ );
+ return element;
+ },
+ authors: ({ authors }) =>
+ html`
+ ${authors
+ .map(
+ (author) =>
+ html`-
+
${author.name}
+ `
+ )
+ .join('')}
+
`,
+ async expand({ id }) {
+ const element = web.createElement(
+ `${await fs.getText(
+ 'icons/fontawesome/long-arrow-alt-right.svg'
+ )} settings & documentation
`
+ );
+ return element;
+ },
+ toggle(id, { key, label, value }) {
+ const element = web.createElement(``);
+ return element;
+ },
+ async select(id, { key, label, values }) {
+ const element = web.createElement(``);
+ return element;
+ },
+ text(id, { key, label, value }) {
+ const element = web.createElement(``);
+ element.querySelector('textarea').addEventListener('input', (ev) => {
+ ev.target.style.removeProperty('--txt--scroll-height');
+ ev.target.style.setProperty('--txt--scroll-height', ev.target.scrollHeight + 'px');
+ });
+ return element;
+ },
+ number(id, { key, label, value }) {
+ const element = web.createElement(``);
+ return element;
+ },
+ async file(id, { key, label, extensions }) {
const accept =
extensions && extensions.length ? ` accept="${extensions.join(',')}"` : '';
const element = web.createElement(``);
+ ${await fs.getText(
+ 'icons/fontawesome/file.svg'
+ )}choose file...
`);
element.querySelector('input[type="file"]').addEventListener('change', (ev) => {
element.querySelector('.library--file_path').innerText = ev.target.files[0].name;
});
return element;
},
- documentation_buttons({ _dir }) {
+ async documentation_buttons({ _dir }) {
const element = web.createElement(`
-
-
- back to library
+
+
+ ${await fs.getText(
+ 'icons/fontawesome/long-arrow-alt-left.svg'
+ )} back to library
-
- view source code
+ )}">
+
+ ${await fs.getText(
+ 'icons/fontawesome/code.svg'
+ )} view source code
`);
return element;
},
},
generators = {
- summary_card(mod) {
+ async summary_card(mod) {
const article = web.createElement(''),
body = web.createElement('');
- article.append(components.preview(mod));
- body.append(components.name(mod));
- body.append(components.tags(mod));
- body.append(components.description(mod));
- body.append(components.authors(mod));
- body.append(components.expand(mod));
+ article.append(await components.preview(mod));
+ body.append(await components.name(mod));
+ body.append(await components.tags(mod));
+ body.append(await components.description(mod));
+ body.append(await components.authors(mod));
+ body.append(await components.expand(mod));
article.append(body);
return article;
},
- full_card(mod) {
+ async full_card(mod) {
const article = web.createElement(''),
body = web.createElement('');
- article.append(components.preview(mod));
- body.append(components.name(mod));
- body.append(components.tags(mod));
- body.append(components.description(mod));
- body.append(components.authors(mod));
+ article.append(await components.preview(mod));
+ body.append(await components.name(mod));
+ body.append(await components.tags(mod));
+ body.append(await components.description(mod));
+ body.append(await components.authors(mod));
article.append(body);
if (mod.options && mod.options.length) {
const options = web.createElement(``);
- mod.options.forEach((opt) => options.append(components[opt.type](mod.id, opt)));
+ (
+ await Promise.all(mod.options.map((opt) => components[opt.type](mod.id, opt)))
+ ).map((opt) => options.append(opt));
article.append(options);
}
return article;
@@ -170,7 +262,8 @@ const components = {
const $container = document.querySelector('[data-container]');
$container.dataset.container = 'library';
$container.innerHTML = '';
- for (let mod of await registry.get()) $container.append(generators.summary_card(mod));
+ for (let mod of await registry.get())
+ $container.append(await generators.summary_card(mod));
},
},
mod: {
@@ -181,8 +274,8 @@ const components = {
const $container = document.querySelector('[data-container]');
$container.dataset.container = 'page';
$container.innerHTML = '';
- $container.append(components.documentation_buttons(mod));
- $container.append(generators.full_card(mod));
+ $container.append(await components.documentation_buttons(mod));
+ $container.append(await generators.full_card(mod));
$container.append(await generators.documentation(mod));
},
},