No need to invoke resetPage() before reShow(), which will do it for us.
[mkws-moved-to-github.git] / src / mkws-widgets.js
index 0f58002..6370952 100644 (file)
@@ -10,7 +10,7 @@ function widget($, team, type, node) {
        team: team,
        type: type,
        node: node,
-       config: Object.create(team.config())
+       config: mkws.objectInheritingFrom(team.config())
     };
 
     function log(s) {
@@ -61,32 +61,34 @@ function widget($, team, type, node) {
 
 // Utility function for use by all widgets that can invoke autosearch.
 widget.autosearch = function(widget) {
-    var query = widget.config.autosearch;
-    if (query) {
-       if (query.match(/^!param!/)) {
-           var param = query.replace(/^!param!/, '');
-           query = mkws.getParameterByName(param);
-           widget.log("obtained query '" + query + "' from param '" + param + "'");
-           if (!query) {
-               alert("This page has a MasterKey widget that needs a query specified by the '" + param + "' parameter");
-           }
-       } else if (query.match(/^!path!/)) {
-           var index = query.replace(/^!path!/, '');
-           var path = window.location.pathname.split('/');
-           query = path[path.length - index];
-           widget.log("obtained query '" + query + "' from path-component '" + index + "'");
-           if (!query) {
-               alert("This page has a MasterKey widget that needs a query specified by the path-component " + index);
+    widget.team.queue("ready").subscribe(function() {
+       var query = widget.config.autosearch;
+       if (query) {
+           if (query.match(/^!param!/)) {
+               var param = query.replace(/^!param!/, '');
+               query = mkws.getParameterByName(param);
+               widget.log("obtained query '" + query + "' from param '" + param + "'");
+               if (!query) {
+                   alert("This page has a MasterKey widget that needs a query specified by the '" + param + "' parameter");
+               }
+           } else if (query.match(/^!path!/)) {
+               var index = query.replace(/^!path!/, '');
+               var path = window.location.pathname.split('/');
+               query = path[path.length - index];
+               widget.log("obtained query '" + query + "' from path-component '" + index + "'");
+               if (!query) {
+                   alert("This page has a MasterKey widget that needs a query specified by the path-component " + index);
+               }
            }
-       }
 
-       widget.team.queue("ready").subscribe(function() {
            var sortOrder = widget.config.sort;
            var maxrecs = widget.config.maxrecs;
            var perpage = widget.config.perpage;
            var limit = widget.config.limit;
            var targets = widget.config.targets;
            var targetfilter = widget.config.targetfilter;
+           var target = widget.config.target;
+           if (target) targetfilter = 'udb=="' + target + '"';
 
            var s = "running auto search: '" + query + "'";
            if (sortOrder) s += " sorted by '" + sortOrder + "'";
@@ -98,8 +100,8 @@ widget.autosearch = function(widget) {
            widget.log(s);
 
            widget.team.newSearch(query, sortOrder, maxrecs, perpage, limit, targets, targetfilter);
-       });
-    }
+       }
+    });
 };
 
 
@@ -152,73 +154,6 @@ mkws.registerWidgetType('Stat', function() {
 });
 
 
-mkws.registerWidgetType('Termlists', function() {
-    var that = this;
-    var M = mkws.M;
-
-    this.team.queue("termlists").subscribe(function(data) {
-       if (!that.node) {
-           alert("termlists event when there are no termlists");
-           return;
-       }
-
-       // no facets: this should never happen
-       var facets = that.config.facets;
-       if (!facets || facets.length == 0) {
-           alert("onTerm called even though we have no facets: " + $.toJSON(data));
-           $(that.node).hide();
-           return;
-       }
-
-       // display if we first got results
-       $(that.node).show();
-
-       var acc = [];
-       acc.push('<div class="title">' + M('Termlists') + '</div>');
-
-       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] + "'");
-           }
-       }
-
-       $(that.node).html(acc.join(''));
-
-       function addSingleFacet(acc, caption, data, max, pzIndex) {
-           var teamName = that.team.name();
-           acc.push('<div class="facet mkwsFacet' + caption + ' mkwsTeam_' + 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 (!that.team.targetFiltered(data[i].id)) {
-                       action = 'mkws.limitTarget(\'' + teamName + '\', this.getAttribute(\'target_id\'),this.firstChild.nodeValue)';
-                   }
-               } else {
-                   action = 'mkws.limitQuery(\'' + 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>');
-       }
-    });
-
-    widget.autosearch(that);
-});
-
-
 mkws.registerWidgetType('Pager', function() {
     var that = this;
     var M = mkws.M;
@@ -353,7 +288,6 @@ mkws.registerWidgetType('Sort', function() {
     $(this.node).change(function() {
        that.team.set_sortOrder($(that.node).val());
        if (that.team.submitted()) {
-           that.team.resetPage();
            that.team.reShow();
        }
        return false;
@@ -367,9 +301,17 @@ mkws.registerWidgetType('Perpage', function() {
     $(this.node).change(function() {
        that.team.set_perpage($(that.node).val());
        if (that.team.submitted()) {
-           that.team.resetPage();
            that.team.reShow();
        }
        return false;
     });
 });
+
+
+mkws.registerWidgetType('Done', function() {
+    var that = this;
+
+    this.team.queue("complete").subscribe(function(n) {
+       $(that.node).html("Search complete: found " + n + " records");
+    });
+});