Merge branch 'master' into urlstate
[mkws-moved-to-github.git] / src / mkws-widget-main.js
index 017ce65..355d8d7 100644 (file)
@@ -73,19 +73,19 @@ mkws.registerWidgetType('pager', function() {
     if (firstClkbl > 1) output.morePrev = true;
     if (lastClkbl < pages) output.moreNext = true;
 
-    if (currentPage > 1) output.prevClick = "mkws.pagerPrev(\'" + teamName + "\');";
+    if (currentPage > 1) output.prevHref = '#' + that.team.urlFragment({ page: currentPage-1 });
 
     output.pages = [];
     for(var i = firstClkbl; i <= lastClkbl; i++) {
       var o = {};
       o.number = i;
       if (i !== currentPage) {
-        o.click = "mkws.showPage(\'" + teamName + "\', " + i + ");";
+        o.href = '#' + that.team.urlFragment({ page: i });
       }
       output.pages.push(o);
     }
 
-    if (pages - currentPage > 0) output.nextClick = "mkws.pagerNext(\'" + teamName + "\')";
+    if (pages - currentPage > 0) output.nextHref = '#' + that.team.urlFragment({ page: currentPage+1 });
 
     var template = that.team.loadTemplate(that.config.template || "pager");
     that.node.html(template(output));
@@ -113,15 +113,15 @@ mkws.registerWidgetType('details', function() {
 mkws.registerWidgetType('records', function() {
   var that = this;
   var team = this.team;
-  var m_dataToRedraw = null;
-  var m_frozen = false;
 
   this.team.queue("searchtriggered").subscribe(function() {
     var op = that.config.newsearch_opacity;
     if (op !== undefined) { that.node.fadeTo(500, op); }
   });
 
+  var m_dataToRedraw = null;
   function refreshRecordData() {
+    that.node.stop();
     that.node.css('opacity', 1);
 
     if (m_dataToRedraw) {
@@ -139,7 +139,24 @@ mkws.registerWidgetType('records', function() {
             hit.renderedDetails = team.renderDetails(team.currentRecordData());
           } 
         }
+
+        var urls = hit['md-electronic-url'];
+        var bestLink = null;
+        var otherLinks = [];
+        for (var j = 0; j < urls.length; j++) {
+          var url = urls[j];
+          if (!url.match(/^(https?:)?\/\//)) {
+            that.warn("link '" + url + "' is not a valid URL");
+          } else if (!bestLink) {
+            bestLink = url;
+          } else {
+            otherLinks.push(url);
+          }
+        }
+        hit.bestLink = bestLink;
+        hit.otherLinks = otherLinks;
       }
+
       var template = team.loadTemplate(that.config.template || "records");
       var summaryPartial = team.loadTemplate(that.config['summary-template'] || "summary");
       var tdata = $.extend({}, {"hits": m_dataToRedraw.hits}, that.config.template_vars);
@@ -149,19 +166,18 @@ mkws.registerWidgetType('records', function() {
     m_dataToRedraw = null;
   }
 
-  function setRecordData(data) {
+  var m_frozen = false;
+  this.team.queue("records").subscribe(function(data) {
     m_dataToRedraw = data;
     if (!m_frozen) {
       refreshRecordData();
     }
-  }
-
-  this.team.queue("records").subscribe(setRecordData);
+  });
 
   var m_timer;
   this.node.mousemove(function() {
-    that.info("freezing display records");
-    that.node.css('opacity', 0.5);
+    var op = that.config.freeze_opacity;
+    if (op !== undefined) { that.node.css('opacity', op); }
     m_frozen = true;
     clearTimeout(m_timer);
     m_timer = setTimeout(unfreezeRecordDisplay, 1000);
@@ -169,7 +185,6 @@ mkws.registerWidgetType('records', function() {
 
   function unfreezeRecordDisplay() {
     clearTimeout(m_timer);
-    that.info("refreshing records");
     that.node.css('opacity', 1);
     m_frozen = false;
     refreshRecordData();
@@ -217,10 +232,7 @@ mkws.registerWidgetType('sort', function() {
   var that = this;
 
   this.node.change(function() {
-    that.team.set_sortOrder(that.node.val());
-    if (that.team.submitted()) {
-      that.team.reShow();
-    }
+    window.location.href = '#' + that.team.urlFragment({ sort: that.node.val() });
     return false;
   });
 });
@@ -230,10 +242,7 @@ mkws.registerWidgetType('per-page', function() {
   var that = this;
 
   this.node.change(function() {
-    that.team.set_perpage(that.node.val());
-    if (that.team.submitted()) {
-      that.team.reShow();
-    }
+    window.location.href = '#' + that.team.urlFragment({ size: that.node.val() });
     return false;
   });
 });