diff --git a/src/main/java/org/qortal/api/HTMLParser.java b/src/main/java/org/qortal/api/HTMLParser.java
index 8b2d1116..86f0c19e 100644
--- a/src/main/java/org/qortal/api/HTMLParser.java
+++ b/src/main/java/org/qortal/api/HTMLParser.java
@@ -5,6 +5,7 @@ import org.apache.logging.log4j.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
+import org.qortal.arbitrary.misc.Service;
public class HTMLParser {
@@ -13,12 +14,21 @@ public class HTMLParser {
private String linkPrefix;
private byte[] data;
private String qdnContext;
+ private String resourceId;
+ private Service service;
+ private String identifier;
+ private String path;
- public HTMLParser(String resourceId, String inPath, String prefix, boolean usePrefix, byte[] data, String qdnContext) {
+ public HTMLParser(String resourceId, String inPath, String prefix, boolean usePrefix, byte[] data,
+ String qdnContext, Service service, String identifier) {
String inPathWithoutFilename = inPath.substring(0, inPath.lastIndexOf('/'));
this.linkPrefix = usePrefix ? String.format("%s/%s%s", prefix, resourceId, inPathWithoutFilename) : "";
this.data = data;
this.qdnContext = qdnContext;
+ this.resourceId = resourceId;
+ this.service = service;
+ this.identifier = identifier;
+ this.path = inPath;
}
public void addAdditionalHeaderTags() {
@@ -31,8 +41,8 @@ public class HTMLParser {
String qAppsScriptElement = String.format("", this.qdnContext);
+ // Add vars
+ String qdnContextVar = String.format("", this.qdnContext, this.service.toString(), this.resourceId, this.identifier, this.path);
head.get(0).prepend(qdnContextVar);
// Add base href tag
diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataRenderer.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataRenderer.java
index 2df13b8c..9ad021c1 100644
--- a/src/main/java/org/qortal/arbitrary/ArbitraryDataRenderer.java
+++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataRenderer.java
@@ -129,7 +129,7 @@ public class ArbitraryDataRenderer {
if (HTMLParser.isHtmlFile(filename)) {
// HTML file - needs to be parsed
byte[] data = Files.readAllBytes(Paths.get(filePath)); // TODO: limit file size that can be read into memory
- HTMLParser htmlParser = new HTMLParser(resourceId, inPath, prefix, usePrefix, data, qdnContext);
+ HTMLParser htmlParser = new HTMLParser(resourceId, inPath, prefix, usePrefix, data, qdnContext, service, identifier);
htmlParser.addAdditionalHeaderTags();
response.addHeader("Content-Security-Policy", "default-src 'self' 'unsafe-inline' 'unsafe-eval'; media-src 'self' blob:; img-src 'self' data: blob:;");
response.setContentType(context.getMimeType(filename));
diff --git a/src/main/resources/q-apps/q-apps.js b/src/main/resources/q-apps/q-apps.js
index 626f2b4b..88be3d37 100644
--- a/src/main/resources/q-apps/q-apps.js
+++ b/src/main/resources/q-apps/q-apps.js
@@ -10,7 +10,7 @@ function handleResponse(event, response) {
return;
}
- // Handle emmpty or missing responses
+ // Handle empty or missing responses
if (response == null || response.length == 0) {
response = "{\"error\": \"Empty response\"}"
}
@@ -151,7 +151,6 @@ window.addEventListener("message", (event) => {
case "LINK_TO_QDN_RESOURCE":
if (data.service == null) data.service = "WEBSITE"; // Default to WEBSITE
window.location = buildResourceUrl(data.service, data.name, data.identifier, data.path);
- response = true;
break;
case "SEARCH_QDN_RESOURCES":
@@ -279,6 +278,13 @@ window.addEventListener("message", (event) => {
return;
}
+ if (response == null) {
+ // Pass to parent (UI), in case they can fulfil this request
+ event.data.requestedHandler = "UI";
+ parent.postMessage(event.data, '*', [event.ports[0]]);
+ return;
+ }
+
handleResponse(event, response);
}, false);
@@ -317,6 +323,19 @@ else if (document.attachEvent) {
document.attachEvent('onclick', interceptClickEvent);
}
+/**
+ * Send current page details to UI
+ */
+document.addEventListener('DOMContentLoaded', () => {
+ qortalRequest({
+ action: "QDN_RESOURCE_DISPLAYED",
+ service: qdnService,
+ name: qdnName,
+ identifier: qdnIdentifier,
+ path: qdnPath
+ });
+});
+
/**
* Intercept image loads from the DOM
*/