Resolve conflicts -- Jason, please check that the authentication logic is still good.
authorMike Taylor <mike@indexdata.com>
Thu, 21 Aug 2014 18:57:04 +0000 (19:57 +0100)
committerMike Taylor <mike@indexdata.com>
Thu, 21 Aug 2014 18:57:04 +0000 (19:57 +0100)
examples/htdocs/async.html [new file with mode: 0644]
src/mkws-core.js
test/spec/mkws-pazpar2.js

diff --git a/examples/htdocs/async.html b/examples/htdocs/async.html
new file mode 100644 (file)
index 0000000..e89cf48
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>MKWS demo: Async feeling.</title>
+    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
+    <script type="text/javascript" src="http://mkws.indexdata.com/jquery.json-2.4.js"></script>
+    <script type="text/javascript" src="http://mkws.indexdata.com/handlebars-v1.1.2.js"></script>
+    <script type="text/javascript" src="http://mkws.indexdata.com/pazpar2/js/pz2.js"></script>
+    <script type="text/javascript" src="http://mkws.local/mkws.js"></script>
+    <link rel="stylesheet" type="text/css" href="mkws-widget-reference.css" />
+  </head>
+  <body>
+    <div id="first"></div>
+    <script type="text/javascript">
+      $("#first").html("<div class='mkwsReference' autosearch='one' sentences='1'>result will appear here</div>");
+      mkws.init("First div", "#first");
+    </script>
+    <div id="second"></div>
+    <script type="text/javascript">
+      $("#second").html("<div class='mkwsReference' autosearch='two' sentences='1'>result will appear here</div>");
+      mkws.init("Second div", document.getElementById("second"));
+    </script>
+    <div id="third"></div>
+    <script type="text/javascript">
+      $("#third").html("<div class='mkwsReference' autosearch='three' sentences='1'>result will appear here</div>");
+      mkws.init("Third div", "#third");
+    </script>
+    <div class='mkwsReference' autosearch='four' sentences='1'>This would have been four but we're not searching it.</div>
+  </body>
+</html>
index b7a030e..15335eb 100644 (file)
@@ -14,6 +14,7 @@
 window.mkws = {
   $: $, // Our own local copy of the jQuery object
   authenticated: false,
+  authenticating: false,
   active: false,
   log_level: 1, // Will be overridden from mkws.config, but
                 // initial value allows jQuery popup to use logging.
@@ -450,6 +451,7 @@ mkws.pagerNext = function(tname) {
    * for the site.
    */
   function authenticateSession(auth_url, auth_domain, pp2_url) {
+    mkws.authenticating = true;
     log("service proxy authentication on URL: " + auth_url);
 
     if (!auth_domain) {
@@ -463,6 +465,7 @@ mkws.pagerNext = function(tname) {
     }, auth_domain);
 
     request.get(null, function(data) {
+      mkws.authenticating = false;
       if (!$.isXMLDoc(data)) {
         alert("Service Proxy authentication response is not a valid XML document");
         return;
@@ -552,14 +555,23 @@ mkws.pagerNext = function(tname) {
   }
 
 
-  // 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: 
+  // The second "rootsel" parameter is passed to jQuery and is a DOM node
+  // or a selector string you would like to constrain the search for widgets to.
+  //
+  // This function has no side effects if run again on an operating session,
+  // even if the element/selector passed causes existing widgets to be reparsed: 
+  //
+  // (TODO: that last bit isn't true and we currently have to avoid reinitialising
+  // widgets, MKWS-261)
   //
   // * configuration is not regenerated
   // * authentication is not performed again
   // * autosearches are not re-run
   mkws.init = function(message, rootsel) {
-    if (message) mkws.log(message);
+    var greet = "MKWS initialised";
+    if (rootsel) greet += " (limited to " + rootsel + ")"
+    if (message) greet += " :: " + message; 
+    mkws.log(greet);
 
     // TODO: Let's remove this soon
     // Backwards compatibility: set new magic class names on any
@@ -640,7 +652,9 @@ mkws.pagerNext = function(tname) {
     var then = $.now();
     // If we've made no widgets, return without starting an SP session
     // or marking MKWS active.
-    if (makeWidgetsWithin(1, rootsel) === false) return false;
+    if (makeWidgetsWithin(1, rootsel ? $(rootsel) : undefined) === false) {
+      return false;
+    }
     var now = $.now();
 
     log("walking MKWS nodes took " + (now-then) + " ms");
@@ -677,14 +691,12 @@ mkws.pagerNext = function(tname) {
       }
     }
 
-    if (mkws.config.use_service_proxy) {
-      if (!mkws.authenticated) {
-        authenticateSession(sp_auth_url(mkws.config),
-                            mkws.config.service_proxy_auth_domain,
-                            mkws.config.pazpar2_url);
-      }
-    } else {
-      // raw pp2
+    if (mkws.config.use_service_proxy && !mkws.authenticated && !mkws.authenticating) {
+      authenticateSession(sp_auth_url(mkws.config),
+                          mkws.config.service_proxy_auth_domain,
+                          mkws.config.pazpar2_url);
+    } else if (!mkws.authenticating) {
+      // raw pp2 or we have a session already open
       runAutoSearches();
     }
     
@@ -693,7 +705,9 @@ mkws.pagerNext = function(tname) {
   };
 
   $(document).ready(function() {
-    mkws.init();
+    if (!window.mkws_noready && !mkws.authenticating && !mkws.active) {
+       mkws.init();
+    }
   });
 
 })(mkws.$);
index eb25086..2e49726 100644 (file)
@@ -728,6 +728,17 @@ describe("Check SortBy options", function () {
     });
 });
 
+describe("Check async widget discovery", function () {
+  var $ = mkws.$;
+  it("initialises a new widget", function() {
+    $("div.mkwsSearch").after('<div id="asyncSearch"><div id="asyncSearch" class="mkwsSearch mkwsTeam_async"></div></div>');
+    mkws.init("Another search box");
+    // mkws.init("Another search box", "#asyncSearch");
+    waitsFor(function () {
+      return $("#asyncSearch input").length >= 1 ? true : false;
+    }, "Call init() to build an .mkwsSearch", 750);
+  });
+});
 
 /* done */
 describe("All tests are done", function () {