Rename all my_onoperation functions to onOperation.
[mkws-moved-to-github.git] / tools / htdocs / mkws.js
index aeb0d12..83bef63 100644 (file)
@@ -72,7 +72,7 @@ Handlebars.registerHelper('index1', function(obj) {
 
 
 // Set up global mkws object. Contains truly global state such as SP
-// authentication, and a hash of team objects, indexed by windowid.
+// authentication, and a hash of team objects, indexed by team-name.
 //
 var mkws = {
     authenticated: false,
@@ -228,24 +228,6 @@ function team($, teamName) {
     m_sort = mkws_config.sort_default;
     debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to m_sort");
 
-    // ### should be in global code
-    if (mkws_config.query_width < 5 || mkws_config.query_width > 150) {
-       debug("Reset query width: " + mkws_config.query_width);
-       mkws_config.query_width = 50;
-    }
-
-    // ### should be in global code
-    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];
-               debug("Added locally configured language '" + lang + "'");
-           }
-       }
-    }
-
     // 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;
@@ -256,18 +238,18 @@ function team($, teamName) {
     // 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
-    m_paz = new pz2({ "onshow": my_onshow,
+    m_paz = new pz2({ "onshow": 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": (mkws_config.facets.length ? my_onterm : undefined),
+                     "oninit": onInit,
+                     "onstat": onStat,
+                     "onterm": (mkws_config.facets.length ? onTerm : undefined),
                      "termlist": mkws_config.facets.join(','),
-                     "onbytarget": my_onbytarget,
+                     "onbytarget": onBytarget,
                      "usesessions" : mkws_config.use_service_proxy ? false : true,
                      "showResponseType": '', // or "json" (for debugging?)
-                     "onrecord": my_onrecord });
+                     "onrecord": onRecord });
 
     if (!isNaN(parseInt(mkws_config.perpage_default))) {
        m_perpage = parseInt(mkws_config.perpage_default);
@@ -275,23 +257,31 @@ function team($, teamName) {
 
 
     // Finds the node of the specified class within the current team
+    // Multiple OR-clauses separated by commas are handled
+    // More complex cases may not work
+    //
     function findnode(selector, teamName) {
-       teamName ||= m_teamName;
-        return $(selector + '.mkwsTeam_' + m_teamName);
+       teamName = teamName || m_teamName;
+
+       selector = selector.split(',').map(function(s) {
+           return s + '.mkwsTeam_' + teamName;
+       }).join(',');
+
+       return $(selector);
     }
 
 
     //
     // pz2.js event handlers:
     //
-    function my_oninit(teamName) {
+    function onInit(teamName) {
        debug("init");
        m_paz.stat();
        m_paz.bytarget();
     }
 
 
-    function my_onshow(data, teamName) {
+    function onShow(data, teamName) {
        debug("show");
        m_totalRec = data.merged;
 
@@ -328,7 +318,7 @@ function team($, teamName) {
     }
 
 
-    function my_onstat(data, teamName) {
+    function onStat(data, teamName) {
        debug("stat");
        var stat = findnode('.mkwsStat');
        if (stat.length === 0)
@@ -342,14 +332,14 @@ function team($, teamName) {
     }
 
 
-    function my_onterm(data, teamName) {
+    function onTerm(data, teamName) {
        debug("term");
        var node = findnode(".mkwsTermlists");
        if (node.length == 0) return;
 
        // no facets: this should never happen
        if (!mkws_config.facets || mkws_config.facets.length == 0) {
-           alert("my_onterm called even though we have no facets: " + $.toJSON(data));
+           alert("onTerm called even though we have no facets: " + $.toJSON(data));
            node.hide();
            return;
        }
@@ -412,7 +402,7 @@ function team($, teamName) {
     }
 
 
-    function my_onrecord(data, args, teamName) {
+    function onRecord(data, args, teamName) {
        debug("record: teamName=" + teamName + ", m_teamName=" + m_teamName);
        // FIXME: record is async!!
        clearTimeout(m_paz.recordTimer);
@@ -426,7 +416,7 @@ function team($, teamName) {
     }
 
 
-    function my_onbytarget(data, teamName) {
+    function onBytarget(data, teamName) {
        debug("target");
        var targetDiv = findnode('.mkwsBytarget');
        if (!targetDiv) {
@@ -458,21 +448,15 @@ function team($, teamName) {
 
 
     // when search button pressed
-    // ### This is closure, so can always just operate on its own team
     function onFormSubmitEventHandler()
     {
-       mkws.handle_node_with_team(this, function (tname) {
-           var val = findnode('.mkwsQuery').val();
-           mkws.teams[tname].newSearch(val);
-       });
-
+       var val = findnode('.mkwsQuery').val();
+       newSearch(val);
        return false;
     }
 
 
-    // ### won't need to be externally visible once onFormSubmitEventHandler() is fixed.
-    // ### doesn't need windowid
-    that.newSearch = function(query, sort, targets, windowid)
+    function newSearch(query, sort, targets)
     {
        debug("newSearch: " + query);
 
@@ -485,8 +469,8 @@ function team($, teamName) {
        redraw_navi();
        resetPage();
        loadSelect();
-       triggerSearch(query, sort, targets, windowid);
-       that.switchView('records'); // In case it's configured to start off as hidden
+       triggerSearch(query, sort, targets);
+       switchView('records'); // In case it's configured to start off as hidden
        m_submitted = true;
     }
 
@@ -508,8 +492,7 @@ function team($, teamName) {
     }
 
 
-    // ### doesn't need windowid
-    function triggerSearch (query, sort, targets, windowid)
+    function triggerSearch (query, sort, targets)
     {
        var pp2filter = "";
        var pp2limit = "";
@@ -522,7 +505,6 @@ function team($, teamName) {
            m_sort = sort;
        }
        if (targets) {
-           // ### should support multiple |-separated targets
            m_filters.push({ id: targets, name: targets });
        }
 
@@ -548,9 +530,7 @@ function team($, teamName) {
        if (pp2limit) {
            params.limit = pp2limit;
        }
-       if (windowid) {
-           params.windowid = windowid;
-       }
+
        debug("triggerSearch(" + m_query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
 
        // We can use: params.torusquery = "udb=NAME"
@@ -750,10 +730,9 @@ function team($, teamName) {
 
 
     // switching view between targets and records
-    that.switchView = function(view) {
+    function switchView(view) {
        var targets = findnode('.mkwsTargets');
-       // ### Fix next line to use findnode()
-       var results = $('.mkwsResults.mkwsTeam_' + m_teamName + ',.mkwsRecords.mkwsTeam_' + m_teamName);
+       var results = findnode('.mkwsResults,.mkwsRecords');
        var blanket = findnode('.mkwsBlanket');
        var motd    = findnode('.mkwsMOTD');
 
@@ -783,6 +762,9 @@ function team($, teamName) {
     }
 
 
+    that.switchView = switchView;
+
+
     // detailed record drawing
     that.showDetails = function (prefixRecId) {
        var recId = prefixRecId.replace('mkwsRec_', '');
@@ -823,7 +805,7 @@ function team($, teamName) {
            // Fall back to generic template if there is no team-specific one
            var node = findnode(".mkwsTemplate_" + name);
            if (!node.length) {
-               node = $(".mkwsTemplate_" + name + ".mkwsTeam_ALL");
+               node = findnode(".mkwsTemplate_" + name, "ALL");
            }
 
            var source = node.html();
@@ -950,8 +932,8 @@ function team($, teamName) {
        //      .mkwsPager
        //      .mkwsNavi
        //      .mkwsRecords
-       if ($(".mkwsResults.mkwsTeam_" + m_teamName).length) {
-           $(".mkwsResults.mkwsTeam_" + m_teamName).html('\
+       if (findnode(".mkwsResults").length) {
+           findnode(".mkwsResults").html('\
 <table width="100%" border="0" cellpadding="6" cellspacing="0">\
   <tr>\
     <td class="mkwsTermlistContainer1 mkwsTeam_' + m_teamName + '" width="250" valign="top">\
@@ -989,15 +971,6 @@ function team($, teamName) {
 
        mkws_html_switch();
 
-       // ### Should not be in the team code, since window size is global
-       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(function(e) { mkws.resize_page() });
-           // initial check after page load
-           $(document).ready(function() { mkws.resize_page() });
-       }
-
        var node;
        node = findnode('.mkwsSearchForm');
        if (node.length)
@@ -1180,7 +1153,7 @@ function team($, teamName) {
        if (targets) s += " in targets '" + targets + "'";
        debug(s);
 
-       this.newSearch(query, sort, targets, m_teamName);
+       newSearch(query, sort, targets);
     }
 
 
@@ -1435,6 +1408,30 @@ function team($, teamName) {
        debug("on load ready");
        default_mkws_config();
 
+       if (mkws_config.query_width < 5 || mkws_config.query_width > 150) {
+           debug("Reset query width: " + mkws_config.query_width);
+           mkws_config.query_width = 50;
+       }
+
+       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];
+                   debug("Added locally configured language '" + lang + "'");
+               }
+           }
+       }
+
+       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(function(e) { mkws.resize_page() });
+           // initial check after page load
+           $(document).ready(function() { mkws.resize_page() });
+       }
+
        // Backwards compatibility: set new magic class names on any
        // elements that have the old magic IDs.
        var ids = [ "Switch", "Lang", "Search", "Pager", "Navi",