Support setting query form values via plugins
Change-Id: I75de9d725ab8be72acd03c5f84ac68355a0c45a1
diff --git a/Changes b/Changes
index 10ef686..db1f451 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.58 2024-10-28
+0.58 2024-11-08
- Cookie path is settable now (hebasta)
- Fix meta table view for key value pairs (diewald)
- Fix warning on OAuth public clients (diewald)
@@ -7,6 +7,7 @@
- Add border to query panel widgets (fixes #225; diewald)
- Add 'desc' support to embedded widgets
(fixes #224; diewald)
+ - Support setting of query form elements via plugins (diewald)
0.57 2024-10-08
- Support VCs via URL without queries (diewald)
diff --git a/dev/demo/plugin-client.html b/dev/demo/plugin-client.html
index 7935347..530682c 100644
--- a/dev/demo/plugin-client.html
+++ b/dev/demo/plugin-client.html
@@ -77,7 +77,6 @@
KorAPlugin.log(0, d.value.search);
});
}
-
</script>
<ul>
@@ -89,6 +88,7 @@
<li><a onclick="flood()">Flood!</a></li>
<li><a onclick="KorAPlugin.requestMsg({'action':'get', 'key':'KQ'}, function (d) { document.write(JSON.stringify(d.value))})">Get KQ</a></li>
<li><a onclick="KorAPlugin.requestMsg({'action':'get', 'key':'textSigle', 'value':'textSigle'}, function (d) { document.write(JSON.stringify(d.value))})">Get textSigle</a></li>
+ <li><a onclick="KorAPlugin.sendMsg({'action':'set', 'key':'QueryForm', 'value':{'q':'[This][is][a][query]'}})">Set query</a></li>
</ul>
<p style="width: 2000px">------------------------------------------------------------------------------------------------------------------------</p>
</body>
diff --git a/dev/demo/plugin-server.html b/dev/demo/plugin-server.html
index 98cbac0..6a1e12f 100644
--- a/dev/demo/plugin-server.html
+++ b/dev/demo/plugin-server.html
@@ -18,7 +18,45 @@
<p>Start the demo server with <code>morbo -l 'http://*:3003' t/server/plugin.pl</code> and open <a href="http://localhost:3003/demo/plugin-server.html"><code>this website</code></a>.</p>
<header>
- <form id="searchform" autocomplete="off" action="/kalamar"></form>
+ <form autocomplete="off" action="/kalamar" id="searchform">
+ <div id="searchbar">
+ <input type="search"
+ placeholder="Find ..."
+ name="q"
+ id="q-field"
+ value="abcdefghijklmnopqrstuvwxyz"
+ autofocus="autofocus" />
+ <button id="qsubmit" type="submit"><span>Go</span></button>
+ <!-- <i class="fa fa-arrow-circle-down show-hint" onclick="hint.popUp()"></i> -->
+ </div>
+
+ <!-- Search in the following virtual corpus -->
+ <div id="vc-view"></div>
+ in
+ <input id="show" name="show" type="hidden" />
+ <!--<input id="collection-name" name="collection-name" type="hidden"> -->
+ <input id="cq" name="cq" type="text" value="">
+ with <span class="menu select">
+ <select name="ql" id="ql-field">
+ <option value="poliqarp">Poliqarp</option>
+ <option value="cosmas2">Cosmas II</option>
+ <option value="annis">Annis</option>
+ <option value="cql">CQL v1.2</option>
+ </select>
+ </span>
+ <div class="button right">
+ <input type="checkbox"
+ value="1"
+ name="cutoff"
+ class="checkbox"
+ id="q-cutoff-field" />
+ <label for="q-cutoff-field"><span id="glimpse"></span>Glimpse</label>
+
+ <!-- Todo: open tutorial - like openTutorial() -->
+ <a href="doc/faq" tabindex="-1" class="question"><span>Question</span></a>
+ <a href="tutorial.html" title="Tutorial" class="tutorial" id="view-tutorial"><span>Tutorial</span></a>
+ </div>
+ </form>
</header>
<main>
diff --git a/dev/js/src/plugin/server.js b/dev/js/src/plugin/server.js
index c99f695..b47e75c 100644
--- a/dev/js/src/plugin/server.js
+++ b/dev/js/src/plugin/server.js
@@ -13,6 +13,8 @@
KorAP.Panel = KorAP.Panel || {};
+ const d = document;
+
// State manager undefined
const states = KorAP.States ? KorAP.States :
@@ -69,6 +71,10 @@
* Initialize the plugin manager
*/
_init : function () {
+ this._ql = d.getElementById("ql-field");
+ this._q = d.getElementById("q-field")
+ this._cutoff = d.getElementById("q-cutoff-field");
+
return this;
},
@@ -548,6 +554,33 @@
break;
+ case 'set':
+
+ // Get Query information from form
+ if (d.key == 'QueryForm') {
+ let v = d["value"];
+ if (v["q"] != undefined && this._q) {
+ this._q.value = v["q"];
+ };
+
+ // Set query language field
+ // Identical to tutorial.js
+ if (v[ql] != undefined && KorAP.QLmenu) {
+ KorAP.QLmenu.selectValue(ql);
+ }
+
+ else if (this._ql) {
+ let found = Array.from(this._ql.options).find(o => o.value === ql);
+ if (found)
+ found.selected = true;
+ };
+
+ window.scrollTo(0, 0);
+ // if (v["cq"] != undefined) {};
+ }
+
+ break;
+
// Redirect to a different page relative to the current
case 'redirect':
const url = new URL(window.location);