Testing a commit on the "mike" branch
[mkws-moved-to-github.git] / src / mkws-core.js
index 4ba963c..a3a1ac9 100644 (file)
@@ -6,27 +6,12 @@
 "use strict"; // HTML5: disable for log_level >= 2
 
 
-// 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) {
-  console.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 + "'");
-}
-
 // 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
@@ -96,8 +81,11 @@ var mkws = {
 };
 
 // We may be using a separate copy
-if (!mkws_jQuery) mkws_jQuery = jQuery;
-mkws.$ = mkws_jQuery;
+if (typeof(mkws_jQuery) !== "undefined") {
+  mkws.$ = mkws_jQuery;
+} else {
+  mkws.$ = jQuery;
+}
 
 mkws.log = function(string) {
   if (!mkws.log_level)
@@ -118,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;
@@ -159,7 +165,7 @@ mkws.setMkwsConfig = function(overrides) {
 
   var config_default = {
     use_service_proxy: true,
-    pazpar2_url: "//mkws.indexdata.com/service-proxy/",
+    pazpar2_url:        "//mkws.indexdata.com/service-proxy/",
     service_proxy_auth: "//mkws.indexdata.com/service-proxy-auth",
     lang: "",
     sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]],
@@ -373,7 +379,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);
   }
 
@@ -433,12 +458,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;
       }
 
@@ -516,6 +542,7 @@ mkws.pagerNext = function(tname) {
 
 
   function init(rootsel) {
+    mkws.autoHasAuto = false;
     if (!rootsel) var rootsel = ':root';
     var saved_config;
     if (typeof mkws_config === 'undefined') {
@@ -609,4 +636,4 @@ mkws.pagerNext = function(tname) {
     var widgetSelector = selectorForAllWidgets();
     if (widgetSelector && $(widgetSelector).length !== 0) init();
   });
-})(mkws_jQuery);
+})(mkws.$);