X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=7c11d114aa50aca215aae6574f34f90db39381bd;hb=b37b485f27da9717619c8847ce3f30294a67b12e;hp=2abcfcab53c28bfeb722c57825b21ee07a6fbc5e;hpb=eac2786173549080d8a0816d8b921f70c97f71c2;p=mkws-moved-to-github.git
diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js
index 2abcfca..7c11d11 100644
--- a/tools/htdocs/mkws.js
+++ b/tools/htdocs/mkws.js
@@ -65,13 +65,19 @@ Handlebars.registerHelper('commaList', function(items, options) {
});
+Handlebars.registerHelper('index1', function(obj) {
+ return obj.data.index + 1;
+});
+
+
// Set up global mkws object. Contains truly global state such as SP
// authentication, and a hash of team objects, indexed by windowid.
//
var mkws = {
authenticated: false,
- debug_level: undefined, // will be initialised from mkws_config
+ debug_level: 1, // Will be overridden from mkws_config, but
+ // initial value allows jQuery popup to use logging.
paz: undefined, // will be set up during initialisation
teams: {},
locale_lang: {
@@ -136,12 +142,48 @@ var mkws = {
};
+// The following PubSub code is modified from the jQuery manual:
+// https://api.jquery.com/jQuery.Callbacks/
+//
+// Use as:
+// mkws.queue("eventName").subscribe(function(param1, param2 ...) { ... });
+// mkws.queue("eventName").publish(arg1, arg2, ...);
+
+(function() {
+ var queues = {};
+ mkws.queue = function(id) {
+ if (!queues[id]) {
+ var callbacks = $.Callbacks();
+ queues[id] = {
+ publish: callbacks.fire,
+ subscribe: callbacks.add,
+ unsubscribe: callbacks.remove
+ };
+ }
+ return queues[id];
+ }
+}());
+
+
// Define empty mkws_config for simple applications that don't define it.
if (mkws_config == null || typeof mkws_config != 'object') {
var mkws_config = {};
}
+// Factory function for widget objects.
+function widget($, team, node) {
+ var that = {
+ team: team,
+ node: node
+ };
+
+ // ### More to do here, surely
+
+ return that;
+}
+
+
// Factory function for team objects. As much as possible, this uses
// only member variables (prefixed "m_") and inner functions with
// private scope. Some functions are visibl as member-functions to be
@@ -168,6 +210,7 @@ function team($, teamName) {
"last": $.now()
};
var m_paz; // will be initialised below
+ var m_template = {};
var debug = function (s) {
@@ -329,11 +372,13 @@ function team($, teamName) {
for (var i = 0; i < data.length && i < max; i++) {
acc.push('
');
acc.push('
\
- {{translate "URL"}} | \
+
{{translate "Links"}} | \
\
{{#each md-electronic-url}}\
- {{this}} \
+ Link{{index1}}\
{{/each}}\
| \
\
@@ -805,7 +869,8 @@ function team($, teamName) {
\
{{#first location having="md-subject"}}\
{{#if md-subject}}\
- {{md-subject}}\
+ {{#commaList md-subject}}\
+ {{this}}{{/commaList}}\
{{/if}}\
{{/first}}\
| \
@@ -849,17 +914,15 @@ function team($, teamName) {
if (mkws_config.show_lang)
mkws_html_lang();
- // For some reason, doing this programmatically results in
- // document.mkwsSearchForm.mkwsQuery being undefined, hence the raw HTML.
debug("HTML search form");
// ### There is only one match here by design: fix not to bother looping
$('.mkwsSearch.mkwsTeam_' + m_teamName).each(function (i, obj) {
var node = this;
- mkws.handle_node_with_team(node, function(tname) {
+ mkws.handle_node_with_team(this, function(tname) {
$(node).html('\
');
});
});
@@ -879,13 +942,13 @@ function team($, teamName) {
\
\
\
- \
+ \
| \
\
- \
- \
- \
- \
+ \
+ \
+ \
+ \
| \
\
\
@@ -925,7 +988,7 @@ function team($, teamName) {
$('.mkwsSearchForm.mkwsTeam_' + m_teamName).each(function (i, obj) {
debug("adding search-forms for team '" + m_teamName + "'");
var node = this;
- mkws.handle_node_with_team(node, function(tname) {
+ mkws.handle_node_with_team(this, function(tname) {
debug("adding search-form '" + tname + "' for team '" + m_teamName + "'");
$(node).submit(onFormSubmitEventHandler);
});
@@ -1076,6 +1139,53 @@ function team($, teamName) {
}
+ that.run_auto_search = function() {
+ // ### should check mkwsTermlist as well, for facet-only teams
+ var node = $('.mkwsRecords.mkwsTeam_' + m_teamName);
+ var query = node.attr('autosearch');
+ if (!query)
+ return;
+
+ if (query.match(/^!param!/)) {
+ var param = query.replace(/^!param!/, '');
+ query = getParameterByName(param);
+ debug("obtained query '" + query + "' from param '" + param + "'");
+ if (!query) {
+ alert("This page has a MasterKey widget that needs a query specified by the '" + param + "' parameter");
+ }
+ } else if (query.match(/^!path!/)) {
+ var index = query.replace(/^!path!/, '');
+ var path = window.location.pathname.split('/');
+ query = path[path.length - index];
+ debug("obtained query '" + query + "' from path-component '" + index + "'");
+ if (!query) {
+ alert("This page has a MasterKey widget that needs a query specified by the path-component " + index);
+ }
+ }
+
+ debug("node=" + node + ", class='" + node.className + "', query=" + query);
+
+ var sort = node.attr('sort');
+ var targets = node.attr('targets');
+ var s = "running auto search: '" + query + "'";
+ if (sort) s += " sorted by '" + sort + "'";
+ if (targets) s += " in targets '" + targets + "'";
+ debug(s);
+
+ this.newSearch(query, sort, targets, m_teamName);
+ }
+
+
+ // This function is taken from a StackOverflow answer
+ // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144
+ function getParameterByName(name) {
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+ var regex = new RegExp("[\\?&]" + name + "=([^]*)"),
+ results = regex.exec(location.search);
+ return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+ }
+
+
/* locale */
function M(word) {
var lang = mkws_config.lang;
@@ -1137,7 +1247,7 @@ function team($, teamName) {
tname = cname.replace(/^mkwsTeam_/, '');
}
}
- callback(tname);
+ callback.call(this, tname);
}
@@ -1295,23 +1405,7 @@ function team($, teamName) {
debug("running auto searches");
for (var teamName in mkws.teams) {
- // ### should check mkwsTermlist as well, for facet-only teams
- var node = $('.mkwsRecords.mkwsTeam_' + teamName);
- var query = node.attr('autosearch');
- debug("teamName '" + teamName + "', node=" + node + ", class='" + node.className + "', query=" + query);
-
- if (query) {
- var sort = node.attr('sort');
- var targets = node.attr('targets');
- var s = "running auto search: '" + query + "'";
- if (teamName) s += " [teamName '" + teamName + "']";
- if (sort) s += " sorted by '" + sort + "'";
- if (targets) s += " in targets '" + targets + "'";
- debug(s);
- var team = mkws.teams[teamName];
- debug($.toJSON(team));
- team.newSearch(query, sort, targets, teamName);
- }
+ mkws.teams[teamName].run_auto_search();
}
}
@@ -1345,15 +1439,19 @@ function team($, teamName) {
// Find all nodes with an class, and determine their team from
// the mkwsTeam_* class. Make all team objects.
+ var then = $.now();
$('[class^="mkws"],[class*=" mkws"]').each(function () {
- var node = this;
- mkws.handle_node_with_team(node, function(tname) {
+ mkws.handle_node_with_team(this, function(tname) {
if (!mkws.teams[tname]) {
mkws.teams[tname] = team(j, tname);
debug("Made MKWS team '" + tname + "'");
}
+ var myTeam = mkws.teams[tname]
+ var myWidget = widget(j, myTeam, this)
});
});
+ var now = $.now();
+ debug("Walking MKWS nodes took " + (now-then) + " ms");
if (mkws_config.use_service_proxy) {
authenticate_session(mkws_config.service_proxy_auth,