Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkws
authorMike Taylor <mike@indexdata.com>
Tue, 3 Jun 2014 15:14:35 +0000 (16:14 +0100)
committerMike Taylor <mike@indexdata.com>
Tue, 3 Jun 2014 15:14:35 +0000 (16:14 +0100)
examples/htdocs/mike.html
examples/htdocs/reference.html
src/mkws-handlebars.js
src/mkws-widget-reference.js

index 3db6fa5..606fac7 100644 (file)
@@ -3,6 +3,7 @@
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <title>MKWS demo: Reference Universe widget</title>
     <link rel="stylesheet" type="text/css" href="mkws-widget-credo.css" />
+    <link rel="stylesheet" type="text/css" href="//x.mkws.indexdata.com/mkws.css" />
     <script type="text/javascript">
       var mkws_config = { service_proxy_auth: "//mkws.indexdata.com/service-proxy-credoauth" };
     </script>
@@ -26,6 +27,6 @@
     <script type="text/javascript" src="mkws-widget-credo.js"></script>
   </head>
   <body>
-    <div class='mkwsCredo' autosearch='!param!q'>result will appear here</div>
+    <div class='mkwsReference' sentences='2' autosearch='!param!q'>result will appear here</div>
   </body>
 </html>
index 136fc10..272496a 100644 (file)
@@ -9,6 +9,6 @@
     <script type="text/javascript" src="//mkws.indexdata.com/mkws-complete.js"></script>
   </head>
   <body>
-    <div class='mkwsReference' autosearch='!param!q'>result will appear here</div>
+    <div class='mkwsReference' autosearch='!param!q' sentences='5'>result will appear here</div>
   </body>
 </html>
index 605282f..67b3b19 100644 (file)
@@ -8,20 +8,34 @@ Handlebars.registerHelper('mkws-json', function(obj) {
 // This is intended to handle paragraphs from Wikipedia, hence the
 // rather hacky code to remove numbered references.
 //
-Handlebars.registerHelper('mkws-paragraphs', function(obj, count) {
+Handlebars.registerHelper('mkws-paragraphs', function(obj, nPara, nSent) {
   var acc = [];
 
   // For some reason, Handlebars provides the value
   // {"hash":{},"data":{}} for parameters that are not provided. So we
   // have to be prepared for actual numbers, explicitly undefined
   // values and this dumb magic value.
-  if (count === undefined || count.hasOwnProperty('hash') || count == 0 || count > obj.length) {
-    count = obj.length;
+  if (nPara === undefined || nPara.hasOwnProperty('hash') || nPara == 0 || nPara > obj.length) {
+    nPara = obj.length;
+  }
+  if (nSent === undefined || nSent.hasOwnProperty('hash') || nSent == 0 || nSent > obj.length) {
+    nSent = Infinity;
   }
 
-  for (var i = 0; i < count; i++) {
-    acc.push('<p>', obj[i].replace(/\[[0-9,]+\]/g, ''), '</p>');
+  for (var i = 0; i < nPara; i++) {
+    // Remove numbered references such as "[1,3,4]" from text
+    var text = obj[i].replace(/\[[0-9,]+\]/g, '');
+    // Next line from http://stackoverflow.com/questions/18914629/split-string-into-sentences-in-javascript
+    var sentences = text.replace(/([.?!])\s*(?=[A-Z])/g, "$1|").split("|");
+    if (sentences.length > nSent)
+      sentences.length = nSent;
+
+    acc.push('<p>', sentences.join(' '), '</p>');
+    nSent -= sentences.length;
+    if (nSent == 0)
+      break;
   }
+
   return acc.join('');
 });
 
index 041d9e4..b1044d2 100644 (file)
@@ -2,6 +2,8 @@ mkws.registerWidgetType('Reference', function() {
   mkws.promotionFunction('Record').call(this);
   if (!this.config.target) this.config.target = 'wikimedia_wikipedia_single_result';
   if (!this.config.template) this.config.template = 'Reference';
+  var nPara = this.config.paragraphs || 0;
+  var nSent = this.config.sentences || 0;
 
   this.team.registerTemplate('Reference', '\
   <img src="{{md-thumburl}}" alt="{{md-title}}">\
@@ -12,7 +14,7 @@ mkws.registerWidgetType('Reference', function() {
 {{#if md-title-responsibility}}\
   <i>{{md-title-responsibility}}</i>\
 {{/if}}\
-  {{{mkws-paragraphs md-description ' + this.config.paragraphs + '}}}\
+  {{{mkws-paragraphs md-description ' + nPara + ' ' + nSent + '}}}\
   <p class="mkwsCredit">Wikipedia</p>\
 ');
 });