');
+ // ##### restrict to current team
+ var detRecordDiv = document.getElementById(recordDetailsId(data.recid[0]));
+ if (detRecordDiv) {
+ // in case on_show was faster to redraw element
+ return;
}
- acc.push('
');
+ m_currentRecordData = data;
+ var recordDiv = findnode('.' + recordElementId(m_currentRecordData.recid[0]));
+ var html = renderDetails(m_currentRecordData);
+ $(recordDiv).append(html);
+ }
+
+
+ // Used by promoteRecords() and onRecord()
+ function recordElementId(s) {
+ return 'mkwsRec_' + s.replace(/[^a-z0-9]/ig, '_');
+ }
+ that.recordElementId = recordElementId;
+
+ // Used by onRecord(), showDetails() and renderDetails()
+ function recordDetailsId(s) {
+ return 'mkwsDet_' + s.replace(/[^a-z0-9]/ig, '_');
}
+ that.recordElementId = recordElementId;
- function targetFiltered(id) {
+ that.targetFiltered = function(id) {
for (var i = 0; i < m_filters.length; i++) {
if (m_filters[i].id === id ||
m_filters[i].id === 'pz:id=' + id) {
@@ -433,9 +591,9 @@ function team($, teamName) {
}
- function newSearch(query, sort, targets)
+ function newSearch(query, sortOrder, targets)
{
- debug("newSearch: " + query);
+ log("newSearch: " + query);
if (mkws_config.use_service_proxy && !mkws.authenticated) {
alert("searching before authentication");
@@ -443,102 +601,17 @@ function team($, teamName) {
}
m_filters = []
- redrawNavi();
- resetPage();
- loadSelect();
- triggerSearch(query, sort, targets);
+ triggerSearch(query, sortOrder, targets);
switchView('records'); // In case it's configured to start off as hidden
m_submitted = true;
}
- function onSelectDdChange()
- {
- if (!m_submitted) return false;
- resetPage();
- loadSelect();
- m_paz.show(0, m_perpage, m_sort);
- return false;
- }
-
-
- function resetPage()
- {
- m_curPage = 1;
- m_totalRec = 0;
- }
-
-
- function triggerSearch (query, sort, targets)
- {
- var pp2filter = "";
- var pp2limit = "";
-
- // Re-use previous query/sort if new ones are not specified
- if (query) {
- m_query = query;
- }
- if (sort) {
- m_sort = sort;
- }
- if (targets) {
- m_filters.push({ id: targets, name: targets });
- }
-
- for (var i in m_filters) {
- var filter = m_filters[i];
- if (filter.id) {
- if (pp2filter)
- pp2filter += ",";
- if (filter.id.match(/^[a-z:]+[=~]/)) {
- debug("filter '" + filter.id + "' already begins with SETTING OP");
- } else {
- filter.id = 'pz:id=' + filter.id;
- }
- pp2filter += filter.id;
- } else {
- if (pp2limit)
- pp2limit += ",";
- pp2limit += filter.field + "=" + filter.value.replace(/[\\|,]/g, '\\$&');
- }
- }
-
- var params = {};
- if (pp2limit) {
- params.limit = pp2limit;
- }
-
- debug("triggerSearch(" + m_query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
-
- // We can use: params.torusquery = "udb=NAME"
- // Note: that won't work when running against raw pazpar2
- m_paz.search(m_query, m_perpage, m_sort, pp2filter, undefined, params);
- }
-
-
- function loadSelect ()
- {
- var node = findnode('.mkwsSort');
- if (node.length && node.val() != m_sort) {
- debug("changing m_sort from " + m_sort + " to " + node.val());
- m_sort = node.val();
- }
- node = findnode('.mkwsPerpage');
- if (node.length && node.val() != m_perpage) {
- debug("changing m_perpage from " + m_perpage + " to " + node.val());
- m_perpage = node.val();
- }
- }
-
-
// limit by target functions
that.limitTarget = function (id, name)
{
- debug("limitTarget(id=" + id + ", name=" + name + ")");
+ log("limitTarget(id=" + id + ", name=" + name + ")");
m_filters.push({ id: id, name: name });
- redrawNavi();
- resetPage();
- loadSelect();
triggerSearch();
return false;
}
@@ -547,11 +620,8 @@ function team($, teamName) {
// limit the query after clicking the facet
that.limitQuery = function (field, value)
{
- debug("limitQuery(field=" + field + ", value=" + value + ")");
+ log("limitQuery(field=" + field + ", value=" + value + ")");
m_filters.push({ field: field, value: value });
- redrawNavi();
- resetPage();
- loadSelect();
triggerSearch();
return false;
}
@@ -559,22 +629,19 @@ function team($, teamName) {
that.delimitTarget = function (id)
{
- debug("delimitTarget(id=" + id + ")");
+ log("delimitTarget(id=" + id + ")");
var newFilters = [];
for (var i in m_filters) {
var filter = m_filters[i];
if (filter.id) {
- debug("delimitTarget() removing filter " + $.toJSON(filter));
+ log("delimitTarget() removing filter " + $.toJSON(filter));
} else {
- debug("delimitTarget() keeping filter " + $.toJSON(filter));
+ log("delimitTarget() keeping filter " + $.toJSON(filter));
newFilters.push(filter);
}
}
m_filters = newFilters;
- redrawNavi();
- resetPage();
- loadSelect();
triggerSearch();
return false;
}
@@ -582,127 +649,109 @@ function team($, teamName) {
that.delimitQuery = function (field, value)
{
- debug("delimitQuery(field=" + field + ", value=" + value + ")");
+ log("delimitQuery(field=" + field + ", value=" + value + ")");
var newFilters = [];
for (var i in m_filters) {
var filter = m_filters[i];
if (filter.field &&
field == filter.field &&
value == filter.value) {
- debug("delimitQuery() removing filter " + $.toJSON(filter));
+ log("delimitQuery() removing filter " + $.toJSON(filter));
} else {
- debug("delimitQuery() keeping filter " + $.toJSON(filter));
+ log("delimitQuery() keeping filter " + $.toJSON(filter));
newFilters.push(filter);
}
}
m_filters = newFilters;
- redrawNavi();
- resetPage();
- loadSelect();
triggerSearch();
return false;
}
- function redrawNavi ()
+ function resetPage()
+ {
+ m_currentPage = 1;
+ m_totalRecordCount = 0;
+ }
+ that.resetPage = resetPage;
+
+
+ function triggerSearch (query, sortOrder, targets)
{
- var navi = findnode('.mkwsNavi');
- if (!navi) return;
+ resetPage();
+ queue("navi").publish();
+
+ var pp2filter = "";
+ var pp2limit = "";
+
+ // Continue to use previous query/sort-order unless new ones are specified
+ if (query) {
+ m_query = query;
+ }
+ if (sortOrder) {
+ m_sortOrder = sortOrder;
+ }
+ if (targets) {
+ m_filters.push({ id: targets, name: targets });
+ }
- var text = "";
for (var i in m_filters) {
- if (text) {
- text += " | ";
- }
var filter = m_filters[i];
if (filter.id) {
- text += M('source') + ': ' + filter.name + '';
+ if (pp2filter)
+ pp2filter += ",";
+ if (filter.id.match(/^[a-z:]+[=~]/)) {
+ log("filter '" + filter.id + "' already begins with SETTING OP");
+ } else {
+ filter.id = 'pz:id=' + filter.id;
+ }
+ pp2filter += filter.id;
} else {
- text += M(filter.field) + ': ' + filter.value + '';
+ if (pp2limit)
+ pp2limit += ",";
+ pp2limit += filter.field + "=" + filter.value.replace(/[\\|,]/g, '\\$&');
}
}
- navi.html(text);
- }
-
-
- function drawPager (data)
- {
- var s = '
\
-';
- } else if (name === "Summary") {
- return '\
-\
- {{md-title}}\
-\
-{{#if md-title-remainder}}\
- {{md-title-remainder}}\
-{{/if}}\
-{{#if md-title-responsibility}}\
- {{md-title-responsibility}}\
-{{/if}}\
-';
+ // The following PubSub code is modified from the jQuery manual:
+ // https://api.jquery.com/jQuery.Callbacks/
+ //
+ // Use as:
+ // team.queue("eventName").subscribe(function(param1, param2 ...) { ... });
+ // team.queue("eventName").publish(arg1, arg2, ...);
+
+ var queues = {};
+ var queue = function(id) {
+ if (!queues[id]) {
+ var callbacks = $.Callbacks();
+ queues[id] = {
+ publish: callbacks.fire,
+ subscribe: callbacks.add,
+ unsubscribe: callbacks.remove
+ };
}
-
- var s = "There is no default '" + name +"' template!";
- alert(s);
- return s;
+ return queues[id];
}
+ that.queue = queue;
// main
@@ -1200,8 +1143,8 @@ function team($, teamName) {
// wrapper to call team() after page load
(function (j) {
- mkws.debug = function (string) {
- if (!mkws.debug_level)
+ mkws.log = function (string) {
+ if (!mkws.log_level)
return;
if (typeof console === "undefined" || typeof console.log === "undefined") { /* ARGH!!! old IE */
@@ -1209,14 +1152,14 @@ function team($, teamName) {
}
// you need to disable use strict at the top of the file!!!
- if (mkws.debug_level >= 3) {
+ if (mkws.log_level >= 3) {
console.log(arguments.callee.caller);
- } else if (mkws.debug_level >= 2) {
+ } else if (mkws.log_level >= 2) {
console.log(">>> called from function " + arguments.callee.caller.name + ' <<<');
}
console.log(string);
}
- var debug = mkws.debug;
+ var log = mkws.log;
mkws.handleNodeWithTeam = function(node, callback) {
@@ -1227,7 +1170,7 @@ function team($, teamName) {
// undefined, we don't get an error message, but this
// function and its callers, up several stack level,
// silently return. What a crock.
- mkws.debug("handleNodeWithTeam() called on node with no classes");
+ mkws.log("handleNodeWithTeam() called on node with no classes");
return;
}
var list = classes.split(/\s+/)
@@ -1253,7 +1196,7 @@ function team($, teamName) {
if ($(window).width() <= width &&
parent.hasClass("mkwsTermlistContainer1")) {
- debug("changing from wide to narrow: " + $(window).width());
+ log("changing from wide to narrow: " + $(window).width());
$(".mkwsTermlistContainer1").hide();
$(".mkwsTermlistContainer2").show();
for (var tname in mkws.teams) {
@@ -1264,7 +1207,7 @@ function team($, teamName) {
}
} else if ($(window).width() > width &&
parent.hasClass("mkwsTermlistContainer2")) {
- debug("changing from narrow to wide: " + $(window).width());
+ log("changing from narrow to wide: " + $(window).width());
$(".mkwsTermlistContainer1").show();
$(".mkwsTermlistContainer2").hide();
for (var tname in mkws.teams) {
@@ -1314,6 +1257,97 @@ function team($, 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
+ mkws.getParameterByName = function(name) {
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+ var regex = new RegExp("[\\?&]" + name + "=([^]*)"),
+ results = regex.exec(location.search);
+ return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+ }
+
+
+ mkws.defaultTemplate = function(name)
+ {
+ if (name === 'Record') {
+ return '\
+
\
+';
+ } else if (name === "Summary") {
+ return '\
+\
+ {{md-title}}\
+\
+{{#if md-title-remainder}}\
+ {{md-title-remainder}}\
+{{/if}}\
+{{#if md-title-responsibility}}\
+ {{md-title-responsibility}}\
+{{/if}}\
+';
+ }
+
+ var s = "There is no default '" + name +"' template!";
+ alert(s);
+ return s;
+ }
+
+
function defaultMkwsConfig() {
/* default mkws config */
var config_default = {
@@ -1332,21 +1366,25 @@ function team($, teamName) {
lang_options: [], /* display languages links for given languages, [] for all */
facets: ["xtargets", "subject", "author"], /* display facets, in this order, [] for none */
responsive_design_width: undefined, /* a page with less pixel width considered as narrow */
- debug_level: 1, /* debug level for development: 0..2 */
+ log_level: 1, /* log level for development: 0..2 */
dummy: "dummy"
};
- /* Set global debug_level flag early so that debug() works */
- if (typeof mkws_config.debug_level !== 'undefined') {
- mkws.debug_level = mkws_config.debug_level;
- } else if (typeof config_default.debug_level !== 'undefined') {
- mkws.debug_level = config_default.debug_level;
+ // Set global log_level flag early so that log() works
+ // Fall back to old "debug_level" setting for backwards compatibility
+ var tmp = mkws_config.log_level;
+ if (typeof(tmp) === 'undefined') tmp = mkws_config.debug_level;
+
+ if (typeof(tmp) !== 'undefined') {
+ mkws.log_level = tmp;
+ } else if (typeof(config_default.log_level) !== 'undefined') {
+ mkws.log_level = config_default.log_level;
}
// make sure the mkws_config is a valid hash
if (!$.isPlainObject(mkws_config)) {
- debug("ERROR: mkws_config is not an JS object, ignore it....");
+ log("ERROR: mkws_config is not an JS object, ignore it....");
mkws_config = {};
}
@@ -1354,7 +1392,7 @@ function team($, teamName) {
for (var k in config_default) {
if (typeof mkws_config[k] === 'undefined')
mkws_config[k] = config_default[k];
- //debug("Set config: " + k + ' => ' + mkws_config[k]);
+ //log("Set config: " + k + ' => ' + mkws_config[k]);
}
}
@@ -1365,11 +1403,11 @@ function team($, teamName) {
* for the site.
*/
function authenticateSession(auth_url, auth_domain, pp2_url) {
- debug("Run service proxy auth URL: " + auth_url);
+ log("Run service proxy auth URL: " + auth_url);
if (!auth_domain) {
auth_domain = pp2_url.replace(/^(https?:)?\/\/(.*?)\/.*/, '$2');
- debug("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'");
+ log("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'");
}
var request = new pzHttpRequest(auth_url, function(err) {
@@ -1388,7 +1426,7 @@ function team($, teamName) {
return;
}
- debug("Service proxy auth successfully done");
+ log("Service proxy auth successfully done");
mkws.authenticated = true;
runAutoSearches();
});
@@ -1396,7 +1434,7 @@ function team($, teamName) {
function runAutoSearches() {
- debug("running auto searches");
+ log("running auto searches");
for (var teamName in mkws.teams) {
mkws.teams[teamName].runAutoSearch();
@@ -1405,11 +1443,11 @@ function team($, teamName) {
$(document).ready(function() {
- debug("on load ready");
+ log("on load ready");
defaultMkwsConfig();
if (mkws_config.query_width < 5 || mkws_config.query_width > 150) {
- debug("Reset query width: " + mkws_config.query_width);
+ log("Reset query width: " + mkws_config.query_width);
mkws_config.query_width = 50;
}
@@ -1419,7 +1457,7 @@ function team($, teamName) {
var lang = key.replace(/^language_/, "");
// Copy custom languages into list
mkws.locale_lang[lang] = mkws_config[key];
- debug("Added locally configured language '" + lang + "'");
+ log("Added locally configured language '" + lang + "'");
}
}
}
@@ -1432,6 +1470,12 @@ function team($, teamName) {
$(document).ready(function() { mkws.resizePage() });
}
+ // protocol independent link for pazpar2: "//mkws/sp" -> "https://mkws/sp"
+ if (mkws_config.pazpar2_url.match(/^\/\//)) {
+ mkws_config.pazpar2_url = document.location.protocol + mkws_config.pazpar2_url;
+ log("adjust protocol independent links: " + mkws_config.pazpar2_url);
+ }
+
// Backwards compatibility: set new magic class names on any
// elements that have the old magic IDs.
var ids = [ "Switch", "Lang", "Search", "Pager", "Navi",
@@ -1442,7 +1486,7 @@ function team($, teamName) {
var node = $('#' + id);
if (node.attr('id')) {
node.addClass(id);
- debug("added magic class to '" + node.attr('id') + "'");
+ log("added magic class to '" + node.attr('id') + "'");
}
}
@@ -1450,26 +1494,34 @@ function team($, teamName) {
// specified, set the team to AUTO.
$('[class^="mkws"],[class*=" mkws"]').each(function () {
if (!this.className.match(/mkwsTeam_/)) {
- debug("adding AUTO team to node with class '" + this.className + "'");
+ log("adding AUTO team to node with class '" + this.className + "'");
$(this).addClass('mkwsTeam_AUTO');
}
});
- // Find all nodes with an class, and determine their team from
+ // Find all nodes with an MKWS class, and determine their team from
// the mkwsTeam_* class. Make all team objects.
var then = $.now();
$('[class^="mkws"],[class*=" mkws"]').each(function () {
mkws.handleNodeWithTeam(this, function(tname, type) {
if (!mkws.teams[tname]) {
mkws.teams[tname] = team(j, tname);
- debug("Made MKWS team '" + tname + "'");
+ log("Made MKWS team '" + tname + "'");
}
+ });
+ });
+ // Second pass: make the individual widget objects. This has
+ // to be done separately, and after the team-creation, since
+ // that sometimes makes new widget nodes (e.g. creating
+ // mkwsTermlists inside mkwsResults.
+ $('[class^="mkws"],[class*=" mkws"]').each(function () {
+ mkws.handleNodeWithTeam(this, function(tname, type) {
var myTeam = mkws.teams[tname];
var myWidget = widget(j, myTeam, type, this);
});
});
var now = $.now();
- debug("Walking MKWS nodes took " + (now-then) + " ms");
+ log("Walking MKWS nodes took " + (now-then) + " ms");
if (mkws_config.use_service_proxy) {
authenticateSession(mkws_config.service_proxy_auth,