Towards building the PP2/SP URLs from pieces.
[mkws-moved-to-github.git] / src / mkws-core.js
index f90c759..3c2ff2a 100644 (file)
@@ -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
@@ -113,12 +115,12 @@ mkws.log = function(string) {
 // 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) {
-  console.log("Using existing window.name '" + 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);
-  console.log("Generated new window.name '" + window.name + "'");
+  mkws.log("Generated new window.name '" + window.name + "'");
 }
 
 
@@ -164,7 +166,11 @@ 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",
+    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],
@@ -377,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);
   }
 
@@ -521,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') {
@@ -601,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 {