Fix comment.
[mkws-moved-to-github.git] / tools / htdocs / mkws.js
index bface84..fb72ddb 100644 (file)
@@ -162,6 +162,8 @@ function widget($, team, type, node) {
        promoteTargets();
     } else if (type === 'Stat') {
        promoteStat();
+    } else if (type === 'Termlists') {
+       promoteTermlists();
     } else {
        // ### Handle other types here
     }
@@ -212,6 +214,68 @@ function widget($, team, type, node) {
                '<span class="records">' + M('Retrieved records') + ': ' + data.records + '/' + data.hits + '</span>');
        });
     }
+
+
+    function promoteTermlists() {
+       team.queue("termlists").subscribe(function(data) {
+           mkws.debug("in termlist consumer");
+           if (!node) {
+               alert("termlists event when there are no termlists");
+               return;
+           }
+
+           // no facets: this should never happen
+           if (!mkws_config.facets || mkws_config.facets.length == 0) {
+               alert("onTerm called even though we have no facets: " + $.toJSON(data));
+               $(node).hide();
+               return;
+           }
+
+           // display if we first got results
+           $(node).show();
+
+           var acc = [];
+           acc.push('<div class="title">' + M('Termlists') + '</div>');
+           var facets = mkws_config.facets;
+
+           for (var i = 0; i < facets.length; i++) {
+               if (facets[i] == "xtargets") {
+                   addSingleFacet(acc, "Sources",  data.xtargets, 16, null);
+               } else if (facets[i] == "subject") {
+                   addSingleFacet(acc, "Subjects", data.subject,  10, "subject");
+               } else if (facets[i] == "author") {
+                   addSingleFacet(acc, "Authors",  data.author,   10, "author");
+               } else {
+                   alert("bad facet configuration: '" + facets[i] + "'");
+               }
+           }
+
+           $(node).html(acc.join(''));
+
+           function addSingleFacet(acc, caption, data, max, pzIndex) {
+               acc.push('<div class="facet mkwsFacet' + caption + ' mkwsTeam_' + team.name() + '">');
+               acc.push('<div class="termtitle">' + M(caption) + '</div>');
+               for (var i = 0; i < data.length && i < max; i++) {
+                   acc.push('<div class="term">');
+                   acc.push('<a href="#" ');
+                   var action = '';
+                   if (!pzIndex) {
+                       // Special case: target selection
+                       acc.push('target_id='+data[i].id+' ');
+                       if (!team.targetFiltered(data[i].id)) {
+                           action = 'mkws.limitTarget(\'' + team.name() + '\', this.getAttribute(\'target_id\'),this.firstChild.nodeValue)';
+                       }
+                   } else {
+                       action = 'mkws.limitQuery(\'' + team.name() + '\', \'' + pzIndex + '\', this.firstChild.nodeValue)';
+                   }
+                   acc.push('onclick="' + action + ';return false;">' + data[i].name + '</a>'
+                            + ' <span>' + data[i].freq + '</span>');
+                   acc.push('</div>');
+               }
+               acc.push('</div>');
+           }
+       });
+    }
 }
 
 
@@ -234,8 +298,8 @@ function team($, teamName) {
     var m_filters = [];
     var m_totalRecordCount = 0;
     var m_currentPage = 1;
-    var m_curDetRecId = '';
-    var m_curDetRecData = null;
+    var m_currentRecordId = '';
+    var m_currentRecordData = null;
     var m_debugTime = {
        // Timestamps for logging
        "start": $.now(),
@@ -300,36 +364,7 @@ function team($, teamName) {
 
     function onTerm(data) {
        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("onTerm called even though we have no facets: " + $.toJSON(data));
-           node.hide();
-           return;
-       }
-
-       // display if we first got results
-       node.show();
-
-       var acc = [];
-       acc.push('<div class="title">' + M('Termlists') + '</div>');
-       var facets = mkws_config.facets;
-
-       for(var i = 0; i < facets.length; i++) {
-           if (facets[i] == "xtargets") {
-               addSingleFacet(acc, "Sources",  data.xtargets, 16, null);
-           } else if (facets[i] == "subject") {
-               addSingleFacet(acc, "Subjects", data.subject,  10, "subject");
-           } else if (facets[i] == "author") {
-               addSingleFacet(acc, "Authors",  data.author,   10, "author");
-           } else {
-               alert("bad facet configuration: '" + facets[i] + "'");
-           }
-       }
-
-       node.html(acc.join(''));
+       queue("termlists").publish(data);
     }
 
 
@@ -352,9 +387,9 @@ function team($, teamName) {
            html.push('<div class="record" id="mkwsRecdiv_' + teamName + '_' + hit.recid + '" >',
                      renderSummary(hit),
                      '</div>');
-           if (hit.recid == m_curDetRecId) {
-               if (m_curDetRecData)
-                   html.push(renderDetails(m_curDetRecData));
+           if (hit.recid == m_currentRecordId) {
+               if (m_currentRecordData)
+                   html.push(renderDetails(m_currentRecordData));
            }
        }
        results.html(html.join(''));
@@ -368,39 +403,15 @@ function team($, teamName) {
        // in case on_show was faster to redraw element
        var detRecordDiv = document.getElementById('mkwsDet_' + teamName + '_' + data.recid);
        if (detRecordDiv) return;
-       m_curDetRecData = data;
+       m_currentRecordData = data;
        // Can't use jQuery's $('#x') syntax to find this ID, because it contains spaces.
-       var recordDiv = document.getElementById('mkwsRecdiv_' + teamName + '_' + m_curDetRecData.recid);
-       var html = renderDetails(m_curDetRecData);
+       var recordDiv = document.getElementById('mkwsRecdiv_' + teamName + '_' + m_currentRecordData.recid);
+       var html = renderDetails(m_currentRecordData);
        $(recordDiv).append(html);
     }
 
 
-    function addSingleFacet(acc, caption, data, max, pzIndex) {
-       acc.push('<div class="facet mkwsFacet' + caption + ' mkwsTeam_' + m_teamName + '">');
-       acc.push('<div class="termtitle">' + M(caption) + '</div>');
-       for (var i = 0; i < data.length && i < max; i++) {
-           acc.push('<div class="term">');
-            acc.push('<a href="#" ');
-           var action = '';
-           if (!pzIndex) {
-               // Special case: target selection
-               acc.push('target_id='+data[i].id+' ');
-               if (!targetFiltered(data[i].id)) {
-                   action = 'mkws.limitTarget(\'' + m_teamName + '\', this.getAttribute(\'target_id\'),this.firstChild.nodeValue)';
-               }
-           } else {
-               action = 'mkws.limitQuery(\'' + m_teamName + '\', \'' + pzIndex + '\', this.firstChild.nodeValue)';
-           }
-           acc.push('onclick="' + action + ';return false;">' + data[i].name + '</a>'
-                    + ' <span>' + data[i].freq + '</span>');
-           acc.push('</div>');
-       }
-       acc.push('</div>');
-    }
-
-
-    function targetFiltered(id) {
+    that.targetFiltered = function(id) {
        for (var i = 0; i < m_filters.length; i++) {
            if (m_filters[i].id === id ||
                m_filters[i].id === 'pz:id=' + id) {
@@ -736,8 +747,8 @@ function team($, teamName) {
     // detailed record drawing
     that.showDetails = function (prefixRecId) {
        var recId = prefixRecId.replace('mkwsRec_', '');
-       var oldRecordId = m_curDetRecId;
-       m_curDetRecId = recId;
+       var oldRecordId = m_currentRecordId;
+       m_currentRecordId = recId;
 
        // remove current detailed view if any
        var detRecordDiv = document.getElementById('mkwsDet_' + m_teamName + '_' + oldRecordId);
@@ -747,8 +758,8 @@ function team($, teamName) {
 
        // if the same clicked, just hide
        if (recId == oldRecordId) {
-            m_curDetRecId = '';
-            m_curDetRecData = null;
+            m_currentRecordId = '';
+            m_currentRecordData = null;
             return;
        }
        // request the record
@@ -1464,7 +1475,7 @@ function team($, teamName) {
            }
        });
 
-       // Find all nodes with an class, and determine their team from
+       // Find all nodes with an MKWS class, and determine their team from
        // the mkwsTeam_* class. Make all team objects.
        var then = $.now();
        $('[class^="mkws"],[class*=" mkws"]').each(function () {
@@ -1473,6 +1484,14 @@ function team($, teamName) {
                    mkws.teams[tname] = team(j, tname);
                    debug("Made MKWS team '" + tname + "'");
                }
+           });
+       });
+       // Second pass: make the individual widget objects. This has
+       // to be done separately, and after the team-creation, since
+       // that sometimes makes new widget nodes (e.g. creating
+       // mkwsTermlists instead mkwsResults.
+       $('[class^="mkws"],[class*=" mkws"]').each(function () {
+           mkws.handleNodeWithTeam(this, function(tname, type) {
                var myTeam = mkws.teams[tname];
                var myWidget = widget(j, myTeam, type, this);
            });