Resolve
authorMike Taylor <mike@indexdata.com>
Thu, 14 Aug 2014 14:03:03 +0000 (15:03 +0100)
committerMike Taylor <mike@indexdata.com>
Thu, 14 Aug 2014 14:03:03 +0000 (15:03 +0100)
examples/htdocs/jasmine-local-popup.html
examples/htdocs/jasmine-popup.html
examples/htdocs/mkws-widget-ru-requirejs.html [new file with mode: 0644]
examples/htdocs/mkws-widget-ru.js
examples/htdocs/robots.txt [new file with mode: 0644]
src/mkws-core.js
tools/htdocs/robots.txt [new file with mode: 0644]

index 792ec34..d5758b3 100644 (file)
@@ -56,7 +56,7 @@
     var jasmine_config = {
       search_query: "netbsd",
       expected_hits: 10,
-      active_clients: 12,
+      active_clients: 13,
       check_motd: false,
       check_sortby: true,
       show_record_url: true
index 2f14059..b2c7450 100644 (file)
@@ -59,7 +59,7 @@
     var jasmine_config = {
       search_query: "netbsd",
       expected_hits: 10,
-      active_clients: 12,
+      active_clients: 13,
       check_motd: false,
       show_record_url: true
     };
diff --git a/examples/htdocs/mkws-widget-ru-requirejs.html b/examples/htdocs/mkws-widget-ru-requirejs.html
new file mode 100644 (file)
index 0000000..a311cb2
--- /dev/null
@@ -0,0 +1,32 @@
+<html>
+<head>
+  <title>MKWS Reference Universe</title>
+  <link rel="stylesheet" type="text/css" href="mkws-widget-ru.css" />
+</head>
+
+<body>
+  <script src="http://requirejs.org/docs/release/2.1.14/minified/require.js" type="text/javascript"></script>
+  <script type="text/javascript">
+  require.config({
+    paths: {
+        mkws           : "//mkws.indexdata.com/mkws-complete",
+        mkws_widget_ru : "mkws-widget-ru"
+    },
+    shim : {
+        mkws : {
+          exports : "mkws"
+        },
+        mkws_widget_ru : {
+          deps    : [ "mkws" ]
+        }
+    }
+  });
+
+  require(['mkws_widget_ru'], function() { mkws.init("requirejs is done"); } );
+  </script>
+
+  <div style="max-width: 18em; margin: 1.5em 1.5em">
+    <div class="mkwsReferenceUniverse" autosearch="sushi"></div>
+  </div>
+</body>
+</html>
index c358f8f..55b4488 100644 (file)
@@ -1,4 +1,6 @@
-var mkws_config = {service_proxy_auth: "http://mkws.indexdata.com/service-proxy/?command=auth&action=login&username=paratext&password=paratext_mkc"};
+var mkws_config = {
+   service_proxy_auth: "http://mkws.indexdata.com/service-proxy/?command=auth&action=login&username=paratext&password=paratext_mkc"
+};
 
 mkws.registerWidgetType('ReferenceUniverse', function() {
   if (!this.config.perpage) this.config.perpage = 5;
@@ -31,3 +33,4 @@ mkws.registerWidgetType('ReferenceUniverse', function() {
   }); 
   that.autosearch();
 });
+
diff --git a/examples/htdocs/robots.txt b/examples/htdocs/robots.txt
new file mode 100644 (file)
index 0000000..f94de5d
--- /dev/null
@@ -0,0 +1,5 @@
+# Copyright (c) 2014 IndexData ApS. http://indexdata.com
+
+User-agent: *
+Disallow: /service-proxy
+
index 3c2ff2a..3632a64 100644 (file)
@@ -14,6 +14,7 @@
 window.mkws = {
   $: $, // Our own local copy of the jQuery object
   authenticated: false,
+  active: false,
   log_level: 1, // Will be overridden from mkws.config, but
                 // initial value allows jQuery popup to use logging.
   teams: {},
@@ -166,11 +167,7 @@ mkws.setMkwsConfig = function(overrides) {
   var config_default = {
     use_service_proxy: true,
     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,
+    service_proxy_auth: "//mkws.indexdata.com/service-proxy-auth",
     lang: "",
     sort_options: [["relevance"], ["title:1", "title"], ["date:0", "newest"], ["date:1", "oldest"]],
     perpage_options: [10, 20, 30, 50],
@@ -524,7 +521,11 @@ mkws.pagerNext = function(tname) {
 
 
   function makeWidgetsWithin(level, node) {
-    node.find(selectorForAllWidgets()).each(function() {
+    if (node) var widgetNodes = node.find(selectorForAllWidgets());
+    else widgetNodes = $(selectorForAllWidgets());
+    // Return false if we parse no widgets
+    if (widgetNodes.length < 1) return false;
+    widgetNodes.each(function() {
       handleNodeWithTeam(this, function(tname, type) {
         var myTeam = mkws.teams[tname];
         if (!myTeam) {
@@ -542,61 +543,20 @@ mkws.pagerNext = function(tname) {
         }
       });
     });
+    return true;
   }
 
 
-  function init(rootsel) {
-    mkws.autoHasAuto = false;
-    if (!rootsel) var rootsel = ':root';
-    var saved_config;
-    if (typeof mkws_config === 'undefined') {
-      log("setting empty config");
-      saved_config = {};
-    } else {
-      log("using config: " + $.toJSON(mkws_config));
-      saved_config = mkws_config;
-    }
-    mkws.setMkwsConfig(saved_config);
-
-    for (var key in mkws.config) {
-      if (mkws.config.hasOwnProperty(key)) {
-        if (key.match(/^language_/)) {
-          var lang = key.replace(/^language_/, "");
-          // Copy custom languages into list
-          mkws.locale_lang[lang] = mkws.config[key];
-          log("added locally configured language '" + lang + "'");
-        }
-      }
-    }
-
-    var lang = mkws.getParameterByName("lang") || mkws.config.lang;
-    if (!lang || !mkws.locale_lang[lang]) {
-      mkws.config.lang = ""
-    } else {
-      mkws.config.lang = lang;
-    }
-
-    log("using language: " + (mkws.config.lang ? mkws.config.lang : "none"));
-
-    if (mkws.config.query_width < 5 || mkws.config.query_width > 150) {
-      log("reset query width to " + mkws.config.query_width);
-      mkws.config.query_width = 50;
-    }
-
-    // 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("adjusted protocol independent link to " + mkws.config.pazpar2_url);
-    }
-
-    if (mkws.config.responsive_design_width) {
-      // Responsive web design - change layout on the fly based on
-      // current screen width. Required for mobile devices.
-      $(window).resize(resizePage);
-      // initial check after page load
-      $(document).ready(resizePage);
-    }
+  // This function should have no side effects if run again on an operating session, even if 
+  // the element/selector passed causes existing widgets to be reparsed: 
+  //
+  // * configuration is not regenerated
+  // * authentication is not performed again
+  // * autosearches are not re-run
+  mkws.init = function(message, rootsel) {
+    if (message) mkws.log(message);
 
+    // TODO: Let's remove this soon
     // Backwards compatibility: set new magic class names on any
     // elements that have the old magic IDs.
     var ids = [ "Switch", "Lang", "Search", "Pager", "Navi",
@@ -611,8 +571,71 @@ mkws.pagerNext = function(tname) {
       }
     }
 
+    // MKWS is not active until init() has been run against an object with widget nodes.
+    // We only set initial configuration when MKWS is first activated.
+    if (!mkws.isActive) {
+      var widgetSelector = selectorForAllWidgets();
+      if ($(widgetSelector).length < 1) {
+        mkws.log("no widgets found");
+        return;
+      }
+
+      // Initial configuration
+      mkws.autoHasAuto = false;
+      var saved_config;
+      if (typeof mkws_config === 'undefined') {
+        log("setting empty config");
+        saved_config = {};
+      } else {
+        log("using config: " + $.toJSON(mkws_config));
+        saved_config = mkws_config;
+      }
+      mkws.setMkwsConfig(saved_config);
+
+      for (var key in mkws.config) {
+        if (mkws.config.hasOwnProperty(key)) {
+          if (key.match(/^language_/)) {
+            var lang = key.replace(/^language_/, "");
+            // Copy custom languages into list
+            mkws.locale_lang[lang] = mkws.config[key];
+            log("added locally configured language '" + lang + "'");
+          }
+        }
+      }
+
+      var lang = mkws.getParameterByName("lang") || mkws.config.lang;
+      if (!lang || !mkws.locale_lang[lang]) {
+        mkws.config.lang = ""
+      } else {
+        mkws.config.lang = lang;
+      }
+
+      log("using language: " + (mkws.config.lang ? mkws.config.lang : "none"));
+
+      if (mkws.config.query_width < 5 || mkws.config.query_width > 150) {
+        log("reset query width to " + mkws.config.query_width);
+        mkws.config.query_width = 50;
+      }
+
+      // 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("adjusted protocol independent link to " + mkws.config.pazpar2_url);
+      }
+
+      if (mkws.config.responsive_design_width) {
+        // Responsive web design - change layout on the fly based on
+        // current screen width. Required for mobile devices.
+        $(window).resize(resizePage);
+        // initial check after page load
+        $(document).ready(resizePage);
+      }
+    }
+
     var then = $.now();
-    makeWidgetsWithin(1, $(rootsel));
+    // If we've made no widgets, return without starting an SP session
+    // or marking MKWS active.
+    if (makeWidgetsWithin(1, rootsel) === false) return false;
     var now = $.now();
 
     log("walking MKWS nodes took " + (now-then) + " ms");
@@ -627,37 +650,23 @@ 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(sp_auth_url(mkws.config),
-                          mkws.config.service_proxy_auth_domain,
-                          mkws.config.pazpar2_url);
+      if (!mkws.authenticated) {
+        authenticateSession(mkws.config.service_proxy_auth,
+                            mkws.config.service_proxy_auth_domain,
+                            mkws.config.pazpar2_url);
+      }
     } else {
       // raw pp2
       runAutoSearches();
     }
+    
+    mkws.isActive = true;
+    return true;
   };
+
   $(document).ready(function() {
-    var widgetSelector = selectorForAllWidgets();
-    if (widgetSelector && $(widgetSelector).length !== 0) init();
+    mkws.init();
   });
+
 })(mkws.$);
diff --git a/tools/htdocs/robots.txt b/tools/htdocs/robots.txt
new file mode 100644 (file)
index 0000000..f94de5d
--- /dev/null
@@ -0,0 +1,5 @@
+# Copyright (c) 2014 IndexData ApS. http://indexdata.com
+
+User-agent: *
+Disallow: /service-proxy
+