X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmkws-core.js;h=3c2ff2ae69aa815ebaf611329febda983ef7fe8c;hb=e775ddeb55acb3ead4c5e7f6e1ed0b601f91f5f4;hp=08bedf05e9f38a0fa0797f51a9abc1521c49bc2e;hpb=4f4e9e48d00fe5b92a9b873e5ca5d955ad9ee248;p=mkws-moved-to-github.git
diff --git a/src/mkws-core.js b/src/mkws-core.js
index 08bedf0..3c2ff2a 100644
--- a/src/mkws-core.js
+++ b/src/mkws-core.js
@@ -9,7 +9,9 @@
// Set up global mkws object. Contains truly global state such as SP
// authentication, and a hash of team objects, indexed by team-name.
//
-var mkws = {
+// We set it as a property of window to make the global explicit as
+// some things complain about an implicit global.
+window.mkws = {
$: $, // Our own local copy of the jQuery object
authenticated: false,
log_level: 1, // Will be overridden from mkws.config, but
@@ -78,6 +80,12 @@ var mkws = {
}
};
+// We may be using a separate copy
+if (typeof(mkws_jQuery) !== "undefined") {
+ mkws.$ = mkws_jQuery;
+} else {
+ mkws.$ = jQuery;
+}
mkws.log = function(string) {
if (!mkws.log_level)
@@ -98,6 +106,24 @@ mkws.log = function(string) {
};
+// Incredible that the standard JavaScript runtime doesn't define a
+// unique windowId. Instead, we have to make one up. And since there's
+// no global area shared between windows, the best we can do for
+// ensuring uniqueness is generating a random ID and crossing our
+// fingers. We stash this in window.name, as it's the only place to
+// keep data that is preserved across reloads and within-site
+// navigation. pz2.js picks this up and uses it as part of the
+// cookie-name, to ensure each tab gets its own session.
+if (window.name) {
+ mkws.log("Using existing window.name '" + window.name + "'");
+} else {
+ // Ten chars from 26 alpha-numerics = 36^10 = 3.65e15 combinations.
+ // At one per second, it will take 116 million years to duplicate a session
+ window.name = Math.random().toString(36).slice(2, 12);
+ mkws.log("Generated new window.name '" + window.name + "'");
+}
+
+
// Translation function.
mkws.M = function(word) {
var lang = mkws.config.lang;
@@ -139,8 +165,12 @@ mkws.setMkwsConfig = function(overrides) {
var config_default = {
use_service_proxy: true,
- pazpar2_url: "//mkws.indexdata.com/service-proxy/",
- service_proxy_auth: "//mkws.indexdata.com/service-proxy-auth",
+ pazpar2_url: "//mkws.indexdata.com/service-proxy/",
+ service_proxy_auth: undefined, // generally rolled from the next three properties
+ // Was: //mkws.indexdata.com/service-proxy-auth
+ pp2_hostname: "mkws.indexdata.com",
+ sp_path: "service-proxy-auth",
+ credentials: undefined,
lang: "",
sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]],
perpage_options: [10, 20, 30, 50],
@@ -249,6 +279,14 @@ mkws.defaultTemplate = function(name) {
{{#if md-title-responsibility}}\
{{md-title-responsibility}}\
{{/if}}\
+{{#if md-date}}, {{md-date}}\
+{{#if location}}\
+, {{#mkws-first location}}{{mkws-attr "@name"}}{{/mkws-first}}\
+{{/if}}\
+{{#if md-medium}}\
+, {{md-medium}}\
+{{/if}}\
+{{/if}}\
';
} else if (name === "Image") {
return '\
@@ -270,9 +308,7 @@ onclick="mkws.{{fn}}(\'{{team}}\', \'{{field}}\', \'{{term}}\');return false;"\
';
}
- var s = "There is no default '" + name +"' template!";
- alert(s);
- return s;
+ return null;
};
@@ -347,7 +383,26 @@ mkws.pagerNext = function(tname) {
}
}
- if (!teamName) teamName = "AUTO";
+ // Widgets without a team are on team "AUTO"
+ if (!teamName) {
+ teamName = "AUTO";
+ // Autosearch widgets don't join team AUTO if there is already an
+ // autosearch on the team or the team has otherwise gotten a query
+ if (node.hasAttribute("autosearch")) {
+ if (mkws.autoHasAuto ||
+ mkws.teams["AUTO"] && mkws.teams["AUTO"].config["query"]) {
+ log("AUTO team already has a query, using unique team");
+ teamName = "UNIQUE";
+ }
+ mkws.autoHasAuto = true;
+ }
+ }
+
+ // Widgets on team "UNIQUE" get a random team
+ if (teamName === "UNIQUE") {
+ teamName = Math.floor(Math.random() * 100000000).toString();
+ }
+
callback.call(node, teamName, type);
}
@@ -407,12 +462,13 @@ mkws.pagerNext = function(tname) {
request.get(null, function(data) {
if (!$.isXMLDoc(data)) {
- alert("service proxy auth response document is not valid XML document, give up!");
+ alert("Service Proxy authentication response is not a valid XML document");
return;
}
var status = $(data).find("status");
if (status.text() != "OK") {
- alert("service proxy auth response status: " + status.text() + ", give up!");
+ var message = $(data).find("message");
+ alert("Service Proxy authentication response: " + status.text() + " (" + message.text() + ")");
return;
}
@@ -490,6 +546,7 @@ mkws.pagerNext = function(tname) {
function init(rootsel) {
+ mkws.autoHasAuto = false;
if (!rootsel) var rootsel = ':root';
var saved_config;
if (typeof mkws_config === 'undefined') {
@@ -570,8 +627,28 @@ mkws.pagerNext = function(tname) {
}
*/
+ function sp_auth_url(config) {
+ if (config.service_proxy_auth) {
+ mkws.log("using pre-baked sp_auth_url '" + config.service_proxy_auth + "'");
+ return config.service_proxy_auth;
+ } else {
+ var s = '//';
+ s += config.auth_hostname ? config.auth_hostname : config.pp2_hostname;
+ s += '/' + config.sp_path + '?command=auth&action=perconfig';
+ var c = config.credentials;
+ if (c) {
+ if (c) {
+ s += ('&username=' + c.substr(0, c.indexOf('/')) +
+ '&password=' + c.substr(c.indexOf('/')+1));
+ }
+ }
+ mkws.log("generated sp_auth_url '" + s + "'");
+ return s;
+ }
+ }
+
if (mkws.config.use_service_proxy) {
- authenticateSession(mkws.config.service_proxy_auth,
+ authenticateSession(sp_auth_url(mkws.config),
mkws.config.service_proxy_auth_domain,
mkws.config.pazpar2_url);
} else {
@@ -583,4 +660,4 @@ mkws.pagerNext = function(tname) {
var widgetSelector = selectorForAllWidgets();
if (widgetSelector && $(widgetSelector).length !== 0) init();
});
-})(jQuery);
+})(mkws.$);