aboutsummaryrefslogtreecommitdiff
path: root/html/install.js
diff options
context:
space:
mode:
Diffstat (limited to 'html/install.js')
-rw-r--r--html/install.js73
1 files changed, 28 insertions, 45 deletions
diff --git a/html/install.js b/html/install.js
index dbc490d..e972924 100644
--- a/html/install.js
+++ b/html/install.js
@@ -46,8 +46,9 @@
#IMPORT html/item_preview.js AS ip
#FROM common/browser.js IMPORT browser
-#FROM html/DOM_helpers.js IMPORT clone_template
-#FROM common/entities.js IMPORT item_id_string, version_string, get_files
+#FROM html/DOM_helpers.js IMPORT clone_template, Showable
+#FROM common/entities.js IMPORT item_id_string, version_string, get_files, \
+ is_valid_version
#FROM common/misc.js IMPORT sha256_async AS sha256
const coll = new Intl.Collator();
@@ -78,7 +79,7 @@ function ItemEntry(install_view, item) {
}
let preview_cb = () => install_view.preview_item(item.def);
- preview_cb = dialog.when_hidden(install_view.dialog_ctx, preview_cb);
+ preview_cb = install_view.dialog_ctx.when_hidden(preview_cb);
this.details_but.addEventListener("click", preview_cb);
}
@@ -114,8 +115,9 @@ async function init_work() {
}
function InstallView(tab_id, on_view_show, on_view_hide) {
+ Showable.call(this, on_view_show, on_view_hide);
+
Object.assign(this, clone_template("install_view"));
- this.shown = false;
const show_container = name => {
for (const cid of container_ids) {
@@ -154,8 +156,8 @@ function InstallView(tab_id, on_view_show, on_view_hide) {
this[container_name].prepend(preview_ctx.main_div);
}
- const back_cb = dialog.when_hidden(this.dialog_ctx,
- () => show_container("install_preview"));
+ let back_cb = () => show_container("install_preview");
+ back_cb = this.dialog_ctx.when_hidden(back_cb);
for (const type of ["resource", "mapping"])
this[`${type}_back_but`].addEventListener("click", back_cb);
@@ -189,17 +191,18 @@ function InstallView(tab_id, on_view_show, on_view_hide) {
"Repository's response is not valid JSON :(");
}
- if (response.json.api_schema_version > [1]) {
- let api_ver = "";
- try {
- api_ver =
- ` (${version_string(response.json.api_schema_version)})`;
- } catch(e) {
- console.warn(e);
- }
+ if (!is_valid_version(response.json.api_schema_version)) {
+ var bad_api_ver = "";
+ } else if (response.json.api_schema_version > [1]) {
+ var bad_api_ver =
+ ` (${version_string(response.json.api_schema_version)})`;
+ } else {
+ var bad_api_ver = false;
+ }
+ if (bad_api_ver !== false) {
const captype = item_type[0].toUpperCase() + item_type.substring(1);
- const msg = `${captype} ${item_id_string(id, ver)} was served using unsupported Hydrilla API version${api_ver}. You might need to update Haketilo.`;
+ const msg = `${captype} ${item_id_string(id, ver)} was served using unsupported Hydrilla API version${bad_api_ver}. You might need to update Haketilo.`;
return work.err(null, msg);
}
@@ -256,23 +259,16 @@ function InstallView(tab_id, on_view_show, on_view_hide) {
return items;
}
+ const show_super = this.show;
this.show = async (repo_url, item_type, item_id, item_ver) => {
- if (this.shown)
+ if (!show_super())
return;
- this.shown = true;
-
this.repo_url = repo_url;
dialog.loader(this.dialog_ctx, "Fetching data from repository...");
try {
- on_view_show();
- } catch(e) {
- console.error(e);
- }
-
- try {
var items = await compute_deps(item_type, item_id, item_ver);
} catch(e) {
var dialog_prom = dialog.error(this.dialog_ctx, e);
@@ -288,7 +284,7 @@ function InstallView(tab_id, on_view_show, on_view_hide) {
await dialog_prom;
- hide();
+ this.hide();
return;
}
@@ -419,35 +415,22 @@ function InstallView(tab_id, on_view_show, on_view_hide) {
await dialog_prom;
- hide();
+ this.hide();
}
- const hide = () => {
- if (!this.shown)
+ const hide_super = this.hide;
+ this.hide = () => {
+ if (!hide_super())
return;
- this.shown = false;
delete this.item_entries;
[...this.to_install_list.children].forEach(n => n.remove());
-
- try {
- on_view_hide();
- } catch(e) {
- console.error(e);
- }
- }
-
- this.when_hidden = cb => {
- const wrapped_cb = (...args) => {
- if (!this.shown)
- return cb(...args);
- }
- return wrapped_cb;
}
- const hide_cb = dialog.when_hidden(this.dialog_ctx, hide);
+ const hide_cb = this.dialog_ctx.when_hidden(this.hide);
this.cancel_but.addEventListener("click", hide_cb);
- const install_cb = dialog.when_hidden(this.dialog_ctx, perform_install);
+ const install_cb = this.dialog_ctx.when_hidden(perform_install);
this.install_but.addEventListener("click", install_cb);
}
+#EXPORT InstallView