Merge remote branch 'origin/master' into wosch
[mkws-moved-to-github.git] / src / mkws-widgets.js
index 8b43400..c677853 100644 (file)
@@ -22,6 +22,10 @@ function widget($, team, type, node) {
        return '[Widget ' + team.name() + ':' + type + ']';
     };
 
+    that.value = function() {
+        return node.value;
+    }
+
     for (var i = 0; i < node.attributes.length; i++) {
        var a = node.attributes[i];
        if (a.name === 'data-mkws-config') {
@@ -79,6 +83,13 @@ widget.autosearch = function(widget) {
                if (!query) {
                    alert("This page has a MasterKey widget that needs a query specified by the path-component " + index);
                }
+            } else if (query.match(/^!var!/)) {
+               var name = query.replace(/^!var!/, '');
+               query = window[name]; // It's ridiculous that this works
+               widget.log("obtained query '" + query + "' from variable '" + name + "'");
+               if (!query) {
+                   alert("This page has a MasterKey widget that needs a query specified by the '" + name + "' variable");
+               }
            }
 
            var sortOrder = widget.config.sort;
@@ -181,24 +192,24 @@ mkws.registerWidgetType('Pager', function() {
                ? firstClkbl + 2*onsides
                : pages;
 
-           var prev = '<span class="mkwsPrev">&#60;&#60; ' + M('Prev') + '</span><b> | </b>';
+           var prev = '<span class="mkwsPrev">&#60;&#60; ' + M('Prev') + '</span> | ';
            if (currentPage > 1)
                prev = '<a href="#" class="mkwsPrev" onclick="mkws.pagerPrev(\'' + teamName + '\');">'
-               +'&#60;&#60; ' + M('Prev') + '</a><b> | </b>';
+               +'&#60;&#60; ' + M('Prev') + '</a> | ';
 
            var middle = '';
            for(var i = firstClkbl; i <= lastClkbl; i++) {
                var numLabel = i;
                if(i == currentPage)
-                   numLabel = '<b>' + i + '</b>';
+                   numLabel = '<span class="mkwsSelected">' + i + '</span>';
 
                middle += '<a href="#" onclick="mkws.showPage(\'' + teamName + '\', ' + i + ')"> '
                    + numLabel + ' </a>';
            }
 
-           var next = '<b> | </b><span class="mkwsNext">' + M('Next') + ' &#62;&#62;</span>';
+           var next = ' | <span class="mkwsNext">' + M('Next') + ' &#62;&#62;</span>';
            if (pages - currentPage > 0)
-               next = '<b> | </b><a href="#" class="mkwsNext" onclick="mkws.pagerNext(\'' + teamName + '\')">'
+               next = ' | <a href="#" class="mkwsNext" onclick="mkws.pagerNext(\'' + teamName + '\')">'
                + M('Next') + ' &#62;&#62;</a>';
 
            var predots = '';
@@ -218,6 +229,13 @@ mkws.registerWidgetType('Pager', function() {
 });
 
 
+mkws.registerWidgetType('Results', function() {
+    // Nothing to do apart from act as an autosearch trigger
+    // Contained elements do all the real work
+    widget.autosearch(this);
+});
+
+
 mkws.registerWidgetType('Records', function() {
     var that = this;
     var team = this.team;
@@ -226,6 +244,7 @@ mkws.registerWidgetType('Records', function() {
        var html = [];
        for (var i = 0; i < data.hits.length; i++) {
            var hit = data.hits[i];
+            that.team.queue("record").publish(hit);
            var divId = team.recordElementId(hit.recid[0]);
            html.push('<div class="record mkwsTeam_' + team.name() + ' ' + divId + '">', renderSummary(hit), '</div>');
            // ### At some point, we may be able to move the
@@ -259,20 +278,18 @@ mkws.registerWidgetType('Navi', function() {
        var filters = that.team.filters();
        var text = "";
 
-       for (var i in filters) {
-           if (text) {
-               text += " | ";
-           }
-           var filter = filters[i];
-           if (filter.id) {
-               text += M('source') + ': <a class="crossout" href="#" onclick="mkws.delimitTarget(\'' + teamName +
-                   "', '" + filter.id + "'" + ');return false;">' + filter.name + '</a>';
-           } else {
-               text += M(filter.field) + ': <a class="crossout" href="#" onclick="mkws.delimitQuery(\'' + teamName +
-                   "', '" + filter.field + "', '" + filter.value + "'" +
-                   ');return false;">' + filter.value + '</a>';
-           }
-       }
+       filters.visitTargets(function(id, name) {
+           if (text) text += " | ";
+           text += M('source') + ': <a class="crossout" href="#" onclick="mkws.delimitTarget(\'' + teamName +
+               "', '" + id + "'" + ');return false;">' + name + '</a>';
+       });
+
+       filters.visitFields(function(field, value) {
+           if (text) text += " | ";
+           text += M(field) + ': <a class="crossout" href="#" onclick="mkws.delimitQuery(\'' + teamName +
+               "', '" + field + "', '" + value + "'" +
+               ');return false;">' + value + '</a>';
+       });
 
        $(that.node).html(text);
     });
@@ -288,7 +305,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;
@@ -302,7 +318,6 @@ 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;