diff options
Diffstat (limited to 'html/item_preview.js')
-rw-r--r-- | html/item_preview.js | 46 |
1 files changed, 10 insertions, 36 deletions
diff --git a/html/item_preview.js b/html/item_preview.js index dccf2d4..c55183c 100644 --- a/html/item_preview.js +++ b/html/item_preview.js @@ -44,10 +44,10 @@ #IMPORT common/indexeddb.js AS haketilodb #IMPORT html/dialog.js +#FROM common/browser.js IMPORT browser #FROM html/DOM_helpers.js IMPORT clone_template -function populate_list(ul, items) -{ +function populate_list(ul, items) { for (const item of items) { const li = document.createElement("li"); li.append(item); @@ -55,41 +55,21 @@ function populate_list(ul, items) } } -/* Link click handler used in make_file_link(). */ -async function file_link_clicked(preview_object, file_ref, event) -{ - event.preventDefault(); - - const db = await haketilodb.get(); - const file = await haketilodb.idb_get(db.transaction("files"), - "files", file_ref.hash_key); - if (file === undefined) { - dialog.error(preview_object.dialog_context, - "File missing from Haketilo's internal database :("); - } else { - const encoded_file = encodeURIComponent(file.contents); - open(`data:text/plain;charset=utf8,${encoded_file}`, '_blank'); - } -} +const file_preview_link = browser.runtime.getURL("html/file_preview.html"); /* * The default function to use to create file preview link. Links it creates can * be used to view files from IndexedDB. */ -function make_file_link(preview_object, file_ref) -{ +function make_file_link(preview_object, file_ref) { const a = document.createElement("a"); - a.href = "javascript:void(0)"; + a.href = `${file_preview_link}#${file_ref.hash_key}`; a.innerText = file_ref.file; - a.addEventListener("click", - e => file_link_clicked(preview_object, file_ref, e)); - + a.target = "_blank"; return a; } -function resource_preview(resource, preview_object, dialog_context, - make_link_cb=make_file_link) -{ +function resource_preview(resource, preview_object, link_cb=make_file_link) { if (preview_object === undefined) preview_object = clone_template("resource_preview"); @@ -104,7 +84,7 @@ function resource_preview(resource, preview_object, dialog_context, [...preview_object.dependencies.childNodes].forEach(n => n.remove()); populate_list(preview_object.dependencies, resource.dependencies); - const link_maker = file_ref => make_link_cb(preview_object, file_ref); + const link_maker = file_ref => link_cb(preview_object, file_ref); [...preview_object.scripts.childNodes].forEach(n => n.remove()); populate_list(preview_object.scripts, resource.scripts.map(link_maker)); @@ -113,15 +93,11 @@ function resource_preview(resource, preview_object, dialog_context, populate_list(preview_object.copyright, resource.source_copyright.map(link_maker)); - preview_object.dialog_context = dialog_context; - return preview_object; } #EXPORT resource_preview -function mapping_preview(mapping, preview_object, dialog_context, - make_link_cb=make_file_link) -{ +function mapping_preview(mapping, preview_object, link_cb=make_file_link) { if (preview_object === undefined) preview_object = clone_template("mapping_preview"); @@ -145,14 +121,12 @@ function mapping_preview(mapping, preview_object, dialog_context, } } - const link_maker = file_ref => make_link_cb(preview_object, file_ref); + const link_maker = file_ref => link_cb(preview_object, file_ref); [...preview_object.copyright.childNodes].forEach(n => n.remove()); populate_list(preview_object.copyright, mapping.source_copyright.map(link_maker)); - preview_object.dialog_context = dialog_context; - return preview_object; } #EXPORT mapping_preview |