Move some global code down out of the team object.
[mkws-moved-to-github.git] / tools / htdocs / mkws.js
index 5b9ef21..2e0c5fd 100644 (file)
@@ -228,22 +228,6 @@ function team($, teamName) {
     m_sort = mkws_config.sort_default;
     debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to m_sort");
 
-    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 + "'");
-           }
-       }
-    }
-
     // 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;
@@ -272,6 +256,21 @@ 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 = teamName || m_teamName;
+
+       selector = selector.split(',').map(function(s) {
+           return s + '.mkwsTeam_' + teamName;
+       }).join(',');
+
+       return $(selector);
+    }
+
+
     //
     // pz2.js event handlers:
     //
@@ -286,12 +285,12 @@ function team($, teamName) {
        debug("show");
        m_totalRec = data.merged;
 
-       var pager = $(".mkwsPager.mkwsTeam_" + m_teamName);
+       var pager = findnode(".mkwsPager");
        if (pager.length) {
            pager.html(drawPager(data))
        }
 
-       var results = $(".mkwsRecords.mkwsTeam_" + m_teamName);
+       var results = findnode(".mkwsRecords");
        if (!results.length)
            return;
 
@@ -321,7 +320,7 @@ function team($, teamName) {
 
     function my_onstat(data, teamName) {
        debug("stat");
-       var stat = $('.mkwsStat.mkwsTeam_' + teamName);
+       var stat = findnode('.mkwsStat');
        if (stat.length === 0)
            return;
 
@@ -335,7 +334,7 @@ function team($, teamName) {
 
     function my_onterm(data, teamName) {
        debug("term");
-       var node = $(".mkwsTermlists.mkwsTeam_" + teamName);
+       var node = findnode(".mkwsTermlists");
        if (node.length == 0) return;
 
        // no facets: this should never happen
@@ -419,7 +418,7 @@ function team($, teamName) {
 
     function my_onbytarget(data, teamName) {
        debug("target");
-       var targetDiv = $('.mkwsBytarget.mkwsTeam_' + teamName);
+       var targetDiv = findnode('.mkwsBytarget');
        if (!targetDiv) {
            return;
        }
@@ -449,10 +448,11 @@ 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 = $('.mkwsQuery.mkwsTeam_' + tname).val();
+           var val = findnode('.mkwsQuery').val();
            mkws.teams[tname].newSearch(val);
        });
 
@@ -460,6 +460,8 @@ function team($, teamName) {
     }
 
 
+    // ### won't need to be externally visible once onFormSubmitEventHandler() is fixed.
+    // ### doesn't need windowid
     that.newSearch = function(query, sort, targets, windowid)
     {
        debug("newSearch: " + query);
@@ -496,6 +498,7 @@ function team($, teamName) {
     }
 
 
+    // ### doesn't need windowid
     function triggerSearch (query, sort, targets, windowid)
     {
        var pp2filter = "";
@@ -548,12 +551,12 @@ function team($, teamName) {
 
     function loadSelect ()
     {
-       var node = $('.mkwsSort.mkwsTeam_' + m_teamName);
+       var node = findnode('.mkwsSort');
        if (node.length && node.val() != m_sort) {
            debug("changing m_sort from " + m_sort + " to " + node.val());
            m_sort = node.val();
        }
-       node = $('.mkwsPerpage.mkwsTeam_' + m_teamName);
+       node = findnode('.mkwsPerpage');
        if (node.length && node.val() != m_perpage) {
            debug("changing m_perpage from " + m_perpage + " to " + node.val());
            m_perpage = node.val();
@@ -637,7 +640,7 @@ function team($, teamName) {
 
     function redraw_navi ()
     {
-       var navi = $('.mkwsNavi.mkwsTeam_' + m_teamName);
+       var navi = findnode('.mkwsNavi');
        if (!navi) return;
 
        var text = "";
@@ -738,10 +741,10 @@ function team($, teamName) {
 
     // switching view between targets and records
     that.switchView = function(view) {
-       var targets = $('.mkwsTargets.mkwsTeam_' + m_teamName);
-       var results = $('.mkwsResults.mkwsTeam_' + m_teamName + ',.mkwsRecords.mkwsTeam_' + m_teamName);
-       var blanket = $('.mkwsBlanket.mkwsTeam_' + m_teamName);
-       var motd    = $('.mkwsMOTD.mkwsTeam_' + m_teamName);
+       var targets = findnode('.mkwsTargets');
+       var results = findnode('.mkwsResults,.mkwsRecords');
+       var blanket = findnode('.mkwsBlanket');
+       var motd    = findnode('.mkwsMOTD');
 
        switch(view) {
         case 'targets':
@@ -807,9 +810,9 @@ function team($, teamName) {
 
        if (template === undefined) {
            // Fall back to generic template if there is no team-specific one
-           var node = $(".mkwsTemplate_" + name + ".mkwsTeam_" + m_teamName)
+           var node = findnode(".mkwsTemplate_" + name);
            if (!node.length) {
-               node = $(".mkwsTemplate_" + name + ".mkwsTeam_ALL")
+               node = findnode(".mkwsTemplate_" + name, "ALL");
            }
 
            var source = node.html();
@@ -911,15 +914,15 @@ function team($, teamName) {
      * All the HTML stuff to render the search forms and
      * result pages.
      */
+    // ### This and other multi-word identifiers should be camelCase
     function mkws_html_all() {
        mkws_set_lang();
        if (mkws_config.show_lang)
            mkws_html_lang();
 
        debug("HTML search form");
-       var node = $('.mkwsSearch.mkwsTeam_' + m_teamName);
-       mkws.handle_node_with_team(node, function(tname) {
-           node.html('\
+       mkws.handle_node_with_team(findnode('.mkwsSearch'), function(tname) {
+           this.html('\
 <form name="mkwsSearchForm" class="mkwsSearchForm mkwsTeam_' + tname + '" action="" >\
   <input class="mkwsQuery mkwsTeam_' + tname + '" type="text" size="' + mkws_config.query_width + '" />\
   <input class="mkwsButton mkwsTeam_' + tname + '" type="submit" value="' + M('Search') + '" />\
@@ -936,8 +939,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">\
@@ -958,7 +961,7 @@ function team($, teamName) {
 </table>');
        }
 
-       var node = $(".mkwsRanking.mkwsTeam_" + m_teamName);
+       var node = findnode(".mkwsRanking");
        if (node.length) {
            var ranking_data = '';
            ranking_data += '<form name="mkwsSelect" class="mkwsSelect mkwsTeam_' + m_teamName + '" action="" >';
@@ -984,26 +987,21 @@ function team($, teamName) {
            $(document).ready(function() { mkws.resize_page() });
        }
 
-       $('.mkwsSearchForm.mkwsTeam_' + m_teamName).each(function (i, obj) {
-           debug("adding search-forms for team '" + m_teamName + "'");
-           var node = this;
-           mkws.handle_node_with_team(this, function(tname) {
-               debug("adding search-form '" + tname + "' for team '" + m_teamName + "'");
-               $(node).submit(onFormSubmitEventHandler);
-           });
-       });
-
-       node = $('.mkwsSort.mkwsTeam_' + m_teamName);
+       var node;
+       node = findnode('.mkwsSearchForm');
+       if (node.length)
+           node.submit(onFormSubmitEventHandler);
+       node = findnode('.mkwsSort');
        if (node.length)
            node.change(onSelectDdChange);
-       node = $('.mkwsPerpage.mkwsTeam_' + m_teamName);
+       node = findnode('.mkwsPerpage');
        if (node.length)
            node.change(onSelectDdChange);
 
        // on first page, hide the termlist
-       $(document).ready(function() { $(".mkwsTermlists.mkwsTeam_" + m_teamName).hide(); });
-       var motd = $(".mkwsMOTD.mkwsTeam_" + m_teamName);
-       var container = $(".mkwsMOTDContainer.mkwsTeam_" + m_teamName);
+       $(document).ready(function() { findnode(".mkwsTermlists").hide(); });
+       var motd = findnode(".mkwsMOTD");
+        var container = findnode(".mkwsMOTDContainer");
        if (motd.length && container.length) {
            // Move the MOTD from the provided element down into the container
            motd.appendTo(container);
@@ -1040,13 +1038,13 @@ function team($, teamName) {
     function mkws_html_switch() {
        debug("HTML switch for team " + m_teamName);
 
-       var node = $(".mkwsSwitch.mkwsTeam_" + m_teamName);
+       var node = findnode(".mkwsSwitch");
        node.append($('<a href="#" onclick="mkws.switchView(\'' + m_teamName + '\', \'records\')">' + M('Records') + '</a>'));
        node.append($("<span/>", { text: " | " }));
        node.append($('<a href="#" onclick="mkws.switchView(\'' + m_teamName + '\', \'targets\')">' + M('Targets') + '</a>'));
 
        debug("HTML targets");
-       var node = $(".mkwsTargets.mkwsTeam_" + m_teamName);
+       var node = findnode(".mkwsTargets");
        node.html('\
 <div class="mkwsBytarget mkwsTeam_' + m_teamName + '">\
   No information available yet.\
@@ -1134,13 +1132,13 @@ function team($, teamName) {
            }
        }
 
-       $(".mkwsLang.mkwsTeam_" + m_teamName).html(data);
+       findnode(".mkwsLang").html(data);
     }
 
 
     that.run_auto_search = function() {
        // ### should check mkwsTermlist as well, for facet-only teams
-       var node = $('.mkwsRecords.mkwsTeam_' + m_teamName);
+       var node = findnode('.mkwsRecords');
        var query = node.attr('autosearch');
        if (!query)
            return;
@@ -1177,6 +1175,7 @@ function team($, teamName) {
 
     // This function is taken from a StackOverflow answer
     // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144
+    // ### should we unify this and parseQuerystring()?
     function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
@@ -1425,11 +1424,27 @@ 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 + "'");
+               }
+           }
+       }
+
        // Backwards compatibility: set new magic class names on any
        // elements that have the old magic IDs.
        var ids = [ "Switch", "Lang", "Search", "Pager", "Navi",
                    "Results", "Records", "Targets", "Ranking",
-                   "Termlists", "Stat" ];
+                   "Termlists", "Stat", "MOTD" ];
        for (var i = 0; i < ids.length; i++) {
            var id = 'mkws' + ids[i];
            var node = $('#' + id);