Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkws
authorMike Taylor <mike@indexdata.com>
Fri, 24 Jan 2014 13:52:16 +0000 (13:52 +0000)
committerMike Taylor <mike@indexdata.com>
Fri, 24 Jan 2014 13:52:16 +0000 (13:52 +0000)
1  2 
tools/htdocs/mkws.js

diff --combined tools/htdocs/mkws.js
@@@ -159,7 -159,6 +159,7 @@@ function _make_mkws_team($, teamName) 
        "start": $.now(),
        "last": $.now()
      };
 +    var m_paz; // will be initialised below
  
  
      // if (console && console.log) // disabled, will fail in IE8
      var debug = mkws.debug_function; // local alias
      debug("start running MKWS");
  
 -
 -    {
 -
 -      /* default mkws config */
 -      var config_default = {
 -          use_service_proxy: true,
 -          pazpar2_url: "http://mkws.indexdata.com/service-proxy/",
 -          service_proxy_auth: "http://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],
 -          sort_default: "relevance",
 -          perpage_default: 20,
 -          query_width: 50,
 -          show_lang: true,    /* show/hide language menu */
 -          show_sort: true,    /* show/hide sort menu */
 -          show_perpage: true,         /* show/hide perpage menu */
 -          lang_options: [],   /* display languages links for given languages, [] for all */
 -          facets: ["sources", "subjects", "authors"], /* display facets, in this order, [] for none */
 -          responsive_design_width: undefined, /* a page with less pixel width considered as narrow */
 -          debug_level: 1,     /* debug level for development: 0..2 */
 -
 -          dummy: "dummy"
 -      };
 -
 -      /* Set global debug_level flag early so that debug() works */
 -      if (typeof mkws_config.debug_level !== 'undefined') {
 -          mkws.debug_level = mkws_config.debug_level;
 -      } else if (typeof config_default.debug_level !== 'undefined') {
 -          mkws.debug_level = config_default.debug_level;
 -      }
 -
 -      // make sure the mkws_config is a valid hash
 -      if (!$.isPlainObject(mkws_config)) {
 -          debug("ERROR: mkws_config is not an JS object, ignore it....");
 -          mkws_config = {};
 -      }
 -
 -      /* override standard config values by function parameters */
 -      for (var k in config_default) {
 -          if (typeof mkws_config[k] === 'undefined')
 -              mkws_config[k] = config_default[k];
 -          //debug("Set config: " + k + ' => ' + mkws_config[k]);
 -      }
 -    }
 -
 -
      m_sort = mkws_config.sort_default;
      debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to m_sort");
  
      // create a parameters array and pass it to the pz2's constructor
      // then register the form submit event with the pz2.search function
      // autoInit is set to true on default
 -    if (!mkws.paz) {
 -      mkws.paz = new pz2({ "onshow": my_onshow,
 -                           "windowid": teamName,
 -                           "showtime": 500,            //each timer (show, stat, term, bytarget) can be specified this way
 -                           "pazpar2path": mkws_config.pazpar2_url,
 -                           "oninit": my_oninit,
 -                           "onstat": my_onstat,
 -                           "onterm": my_onterm,
 -                           "termlist": "xtargets,subject,author",
 -                           "onbytarget": my_onbytarget,
 -                           "usesessions" : mkws_config.use_service_proxy ? false : true,
 -                           "showResponseType": '', // or "json" (for debugging?)
 -                           "onrecord": my_onrecord });
 -    }
 +    m_paz = new pz2({ "onshow": my_onshow,
 +                    "windowid": teamName,
 +                    "showtime": 500,            //each timer (show, stat, term, bytarget) can be specified this way
 +                    "pazpar2path": mkws_config.pazpar2_url,
 +                    "oninit": my_oninit,
 +                    "onstat": my_onstat,
 +                    "onterm": my_onterm,
 +                    "termlist": "xtargets,subject,author",
 +                    "onbytarget": my_onbytarget,
 +                    "usesessions" : mkws_config.use_service_proxy ? false : true,
 +                    "showResponseType": '', // or "json" (for debugging?)
 +                    "onrecord": my_onrecord });
  
      if (!isNaN(parseInt(mkws_config.perpage_default))) {
        m_recPerPage = parseInt(mkws_config.perpage_default);
      //
      function my_oninit(teamName) {
        debug("init for " + teamName);
 -      mkws.paz.stat();
 -      mkws.paz.bytarget();
 +      m_paz.stat();
 +      m_paz.bytarget();
      }
  
  
      function my_onrecord(data, teamName) {
        debug("record for " + teamName);
        // FIXME: record is async!!
 -      clearTimeout(mkws.paz.recordTimer);
 +      clearTimeout(m_paz.recordTimer);
        // in case on_show was faster to redraw element
        var detRecordDiv = document.getElementById('mkwsDet_'+data.recid);
        if (detRecordDiv) return;
        if (!m_submitted) return false;
        resetPage();
        loadSelect();
 -      mkws.paz.show(0, m_recPerPage, m_sort);
 +      m_paz.show(0, m_recPerPage, m_sort);
        return false;
      }
  
        }
        debug("triggerSearch(" + m_query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
  
 -      mkws.paz.search(m_query, m_recPerPage, m_sort, pp2filter, undefined, params);
 +      m_paz.search(m_query, m_recPerPage, m_sort, pp2filter, undefined, params);
      }
  
  
      mkws.showPage = function (pageNum)
      {
        m_curPage = pageNum;
 -      mkws.paz.showPage(m_curPage - 1);
 +      m_paz.showPage(m_curPage - 1);
      }
  
  
      // simple paging functions
      mkws.pagerNext = function () {
        if (m_totalRec - m_recPerPage*m_curPage > 0) {
 -            mkws.paz.showNext();
 +            m_paz.showNext();
              m_curPage++;
        }
      }
  
  
      mkws.pagerPrev = function () {
 -      if (mkws.paz.showPrev() != false)
 +      if (m_paz.showPrev() != false)
              m_curPage--;
      }
  
              return;
        }
        // request the record
 -      mkws.paz.record(recId);
 +      m_paz.record(recId);
      }
  
  
      }
  
  
 -    function run_auto_searches() {
 -      debug("running auto searches");
 -
 -      $('[id^="mkwsRecords"]').each(function () {
 -          var node = $(this);
 -          var query = node.attr('autosearch');
 -
 -          if (query) {
 -              var windowid = undefined;
 -              var id = node.attr('id');
 -              if (id.match(/^mkwsRecords_/, '')) {
 -                  windowid = id.replace(/^mkwsRecords_/, '');
 -              }
 -
 -              var sort = node.attr('sort');
 -              var targets = node.attr('targets');
 -              var s = "running auto search: '" + query + "'";
 -              if (windowid) s += " [windowid '" + windowid + "']";
 -              if (sort) s += " sorted by '" + sort + "'";
 -              if (targets) s += " in targets '" + targets + "'";
 -              debug(s);
 -              newSearch(query, sort, targets, windowid);
 -          }
 -      });
 -    }
 -
 -
      // implement $.parseQuerystring() for parsing URL parameters
      function parseQuerystring() {
        var nvpair = {};
      }
  
  
 -    /*
 -     * Run service-proxy authentication in background (after page load).
 -     * The username/password is configured in the apache config file
 -     * for the site.
 -     */
 -    mkws.service_proxy_auth = function(auth_url, auth_domain, pp2_url) {
 -      debug("Run service proxy auth URL: " + auth_url);
 -
 -      if (!auth_domain) {
 -          auth_domain = pp2_url.replace(/^(https?:)?\/\/(.*?)\/.*/, '$2');
 -          debug("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'");
 -      }
 -
 -      var request = new pzHttpRequest(auth_url, function(err) {
 -          alert("HTTP call for authentication failed: " + err)
 -          return;
 -      }, auth_domain);
 -
 -      request.get(null, function(data) {
 -          if (!$.isXMLDoc(data)) {
 -              alert("service proxy auth response document is not valid XML document, give up!");
 -              return;
 -          }
 -          var status = $(data).find("status");
 -          if (status.text() != "OK") {
 -              alert("service proxy auth repsonse status: " + status.text() + ", give up!");
 -              return;
 -          }
 -
 -          debug("Service proxy auth successfully done");
 -          mkws.authenticated = true;
 -          run_auto_searches();
 -      });
 -    }
 -
 -
      /* create locale language menu */
      function mkws_html_lang() {
        var lang_default = "en";
@@@ -1283,14 -1394,17 +1283,18 @@@ function _mkws_jquery_plugin ($) 
  // wrapper to call _make_mkws_team() after page load
  (function (j) {
      function log(s) {
-       if (console && console.log) console.log(s);
+         if (typeof console === "undefined" || typeof console.log === "undefined") { /* ARGH!!! old IE */
+             return;
+         }
+       console.log(s);
      }
      // enable before page load, so we could call it before mkws() runs
      _mkws_jquery_plugin(j);
  
      $(document).ready(function() {
        log("on load ready");
 +      default_mkws_config();
  
        // Backwards compatibility: set new magic class names on any
        // elements that have the old magic IDs.
        });
  
        if (mkws_config.use_service_proxy) {
 -          mkws.service_proxy_auth(mkws_config.service_proxy_auth,
 -                                  mkws_config.service_proxy_auth_domain,
 -                                  mkws_config.pazpar2_url);
 +          authenticate_session(mkws_config.service_proxy_auth,
 +                               mkws_config.service_proxy_auth_domain,
 +                               mkws_config.pazpar2_url);
        } else {
            // raw pp2
            run_auto_searches();
        }
      });
 +
 +
 +    function default_mkws_config() {
 +      /* default mkws config */
 +      var config_default = {
 +          use_service_proxy: true,
 +          pazpar2_url: "http://mkws.indexdata.com/service-proxy/",
 +          service_proxy_auth: "http://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],
 +          sort_default: "relevance",
 +          perpage_default: 20,
 +          query_width: 50,
 +          show_lang: true,    /* show/hide language menu */
 +          show_sort: true,    /* show/hide sort menu */
 +          show_perpage: true,         /* show/hide perpage menu */
 +          lang_options: [],   /* display languages links for given languages, [] for all */
 +          facets: ["sources", "subjects", "authors"], /* display facets, in this order, [] for none */
 +          responsive_design_width: undefined, /* a page with less pixel width considered as narrow */
 +          debug_level: 1,     /* debug level for development: 0..2 */
 +
 +          dummy: "dummy"
 +      };
 +
 +      /* Set global debug_level flag early so that debug() works */
 +      if (typeof mkws_config.debug_level !== 'undefined') {
 +          mkws.debug_level = mkws_config.debug_level;
 +      } else if (typeof config_default.debug_level !== 'undefined') {
 +          mkws.debug_level = config_default.debug_level;
 +      }
 +
 +      // make sure the mkws_config is a valid hash
 +      if (!$.isPlainObject(mkws_config)) {
 +          debug("ERROR: mkws_config is not an JS object, ignore it....");
 +          mkws_config = {};
 +      }
 +
 +      /* override standard config values by function parameters */
 +      for (var k in config_default) {
 +          if (typeof mkws_config[k] === 'undefined')
 +              mkws_config[k] = config_default[k];
 +          //debug("Set config: " + k + ' => ' + mkws_config[k]);
 +      }
 +    }
 +
 +
 +    /*
 +     * Run service-proxy authentication in background (after page load).
 +     * The username/password is configured in the apache config file
 +     * for the site.
 +     */
 +    function authenticate_session(auth_url, auth_domain, pp2_url) {
 +      debug("Run service proxy auth URL: " + auth_url);
 +
 +      if (!auth_domain) {
 +          auth_domain = pp2_url.replace(/^(https?:)?\/\/(.*?)\/.*/, '$2');
 +          debug("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'");
 +      }
 +
 +      var request = new pzHttpRequest(auth_url, function(err) {
 +          alert("HTTP call for authentication failed: " + err)
 +          return;
 +      }, auth_domain);
 +
 +      request.get(null, function(data) {
 +          if (!$.isXMLDoc(data)) {
 +              alert("service proxy auth response document is not valid XML document, give up!");
 +              return;
 +          }
 +          var status = $(data).find("status");
 +          if (status.text() != "OK") {
 +              alert("service proxy auth repsonse status: " + status.text() + ", give up!");
 +              return;
 +          }
 +
 +          debug("Service proxy auth successfully done");
 +          mkws.authenticated = true;
 +          run_auto_searches();
 +      });
 +    }
 +
 +
 +    function run_auto_searches() {
 +      console.log("running auto searches");
 +
 +      $('[id^="mkwsRecords"]').each(function () {
 +          var node = $(this);
 +          var query = node.attr('autosearch');
 +
 +          if (query) {
 +              var windowid = undefined;
 +              var id = node.attr('id');
 +              if (id.match(/^mkwsRecords_/, '')) {
 +                  windowid = id.replace(/^mkwsRecords_/, '');
 +              }
 +
 +              var sort = node.attr('sort');
 +              var targets = node.attr('targets');
 +              var s = "running auto search: '" + query + "'";
 +              if (windowid) s += " [windowid '" + windowid + "']";
 +              if (sort) s += " sorted by '" + sort + "'";
 +              if (targets) s += " in targets '" + targets + "'";
 +              console.log(s);
 +              newSearch(query, sort, targets, windowid);
 +          }
 +      });
 +    }
  })(jQuery);