Merge remote branch 'origin/popup' into wosch
authorWolfram Schneider <wosch@indexdata.dk>
Thu, 10 Jul 2014 12:11:38 +0000 (12:11 +0000)
committerWolfram Schneider <wosch@indexdata.dk>
Thu, 10 Jul 2014 12:11:38 +0000 (12:11 +0000)
examples/htdocs/jasmine-cors-popup.html
examples/htdocs/jasmine-local-popup.html
examples/htdocs/jasmine-popup.html
examples/htdocs/popup.html
examples/htdocs/wolfram.html
src/mkws-handlebars.js
src/mkws-jquery.js [deleted file]
src/mkws-popup.js [new file with mode: 0644]
src/mkws-widget-main.js
tools/htdocs/Makefile

index ac49a3f..4263d0d 100644 (file)
 
     <h2>MKWS Jasmine regression tests</h2>
 
+    <div class="mkwsSearch"></div>
+    <div class="mkwsPopup" popup_width="990" popup_height="760" popup_modal="0" popup_autoOpen="0" popup_button="input.mkwsButton">
       <div class="mkwsSwitch"></div>
       <div class="mkwsLang"></div>
       <div class="mkwsProgress"></div>
-      <div class="mkwsSearch"></div>
       <div class="mkwsResults"></div>
       <div class="mkwsTargets"></div>
       <div class="mkwsStat"></div>
       <div class="mkwsBuilder"></div>
+    </div>
 
       <!-- include jquery again -->
       <script type="text/javascript" src="//code.jquery.com/jquery-1.10.0.js"></script>
index 3a85e82..ed44aff 100644 (file)
     <script type="text/javascript" src="tools/htdocs/pz2.js"></script>
     <script type="text/javascript" src="tools/htdocs/jquery.json-2.4.js"></script>
     <script type="text/javascript" src="tools/htdocs/handlebars-v1.1.2.js"></script>
+
     <script type="text/javascript" src="src/mkws-handlebars.js"></script>
     <script type="text/javascript" src="src/mkws-core.js"></script>
     <script type="text/javascript" src="src/mkws-team.js"></script>
     <script type="text/javascript" src="src/mkws-filter.js"></script>
+    <script type="text/javascript" src="src/mkws-popup.js"></script>
     <script type="text/javascript" src="src/mkws-widget.js"></script>
     <script type="text/javascript" src="src/mkws-widget-main.js"></script>
     <script type="text/javascript" src="src/mkws-widget-termlists.js"></script>
     <script type="text/javascript" src="src/mkws-widget-authname.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-categories.js"></script>
     <script type="text/javascript" src="src/mkws-widget-log.js"></script>
     <script type="text/javascript" src="src/mkws-widget-record.js"></script>
-
-    <script type="text/javascript" src="src/mkws-jquery.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-reference.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-builder.js"></script>
 
     <link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-1.3.1/jasmine_favicon.png">
     <link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-1.3.1/jasmine.css">
       show_record_url: true
     };
 
-    jQuery.pazpar2({
-        "layout": "popup",               /* "table" [default], "div", "popup" */
-        "width": 990,                    /* popup width, should be at least 800 */
-        "height": 760                    /* popup height, should be at least 600 */
-    });
     </script>
 
 <h2>MKWS Jasmine regression tests</h2>
-<p/>
+
+    <div class="mkwsSearch"></div>
+    <div class="mkwsPopup" popup_width="990" popup_height="760" popup_modal="0" popup_autoOpen="0" popup_button="input.mkwsButton">
+      <div class="mkwsSwitch"></div>
+      <div class="mkwsLang"></div>
+      <div class="mkwsResults"></div>
+      <div class="mkwsTargets"></div>
+      <div class="mkwsStat"></div>
+    </div>
 
   </body>
 </html>
index c27e0f4..e95766d 100644 (file)
     <script type="text/javascript" src="tools/htdocs/pz2.js"></script>
     <script type="text/javascript" src="tools/htdocs/jquery.json-2.4.js"></script>
     <script type="text/javascript" src="tools/htdocs/handlebars-v1.1.2.js"></script>
+
     <script type="text/javascript" src="src/mkws-handlebars.js"></script>
     <script type="text/javascript" src="src/mkws-core.js"></script>
     <script type="text/javascript" src="src/mkws-team.js"></script>
     <script type="text/javascript" src="src/mkws-filter.js"></script>
+    <script type="text/javascript" src="src/mkws-popup.js"></script>
     <script type="text/javascript" src="src/mkws-widget.js"></script>
     <script type="text/javascript" src="src/mkws-widget-main.js"></script>
     <script type="text/javascript" src="src/mkws-widget-termlists.js"></script>
     <script type="text/javascript" src="src/mkws-widget-authname.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-categories.js"></script>
     <script type="text/javascript" src="src/mkws-widget-log.js"></script>
     <script type="text/javascript" src="src/mkws-widget-record.js"></script>
-
-    <script type="text/javascript" src="src/mkws-jquery.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-reference.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-builder.js"></script>
 
     <link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-1.3.1/jasmine_favicon.png">
     <link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-1.3.1/jasmine.css">
@@ -36,7 +39,7 @@
     <script type="text/javascript" src="test/js/mkws-jasmine-run.js"></script>
     <script type="text/javascript"> mkws_jasmine_init(500); </script>
 
-    <!-- jquery null test 
+    <!-- jquery null test
     <script type="text/javascript">$ = undefined;</script>
        -->
 
       check_motd: false,
       show_record_url: true
     };
-
-    jQuery.pazpar2({
-        "layout": "popup",               /* "table" [default], "div", "popup" */
-        "width": 990,                    /* popup width, should be at least 800 */
-        "height": 760                    /* popup height, should be at least 600 */
-    });
     </script>
 
 <h2>MKWS Jasmine regression tests</h2>
-<p/>
+    <div class="mkwsSearch"></div>
+    <div class="mkwsPopup" popup_width="990" popup_height="760" popup_modal="0" popup_autoOpen="0" popup_button="input.mkwsButton">
+      <div class="mkwsSwitch"></div>
+      <div class="mkwsLang"></div>
+      <div class="mkwsResults"></div>
+      <div class="mkwsTargets"></div>
+      <div class="mkwsStat"></div>
+    </div>
+
 
   </body>
 </html>
index 60529bb..3857741 100644 (file)
@@ -1,81 +1,61 @@
 <html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>MKWS demo: popup search box</title>
-
+    <title>MKWS demo: Reference widget with popup window</title>
+    <link rel="stylesheet" type="text/css" href="tools/htdocs/mkws.css" />
     <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
-    <link rel="stylesheet" type="text/css" href="//mkws.indexdata.com/mkws.css" />
+    <link rel="stylesheet" type="text/css" href="mkws-widget-reference.css" />
+    <link rel="stylesheet" type="text/css" href="mkws-widget-credo.css" />
 
     <script type="text/javascript">
-      mkws_config = {
-       show_lang: false,
-       perpage_default: 10,
-       query_width: 50,
-        service_proxy_auth: "http://mkws.indexdata.com/service-proxy-auth"
-     };
+      var mkws_config = {
+         service_proxy_auth: "//mkws.indexdata.com/service-proxy-credoauth"
+      };
     </script>
 
-    <script type="text/javascript" src="//code.jquery.com/jquery-1.10.0.min.js"></script>
-    <script type="text/javascript" src="//jquery-json.googlecode.com/files/jquery.json-2.4.js"></script>
-    <!-- legacy libs for testing
-    <script type="text/javascript" src="//code.jquery.com/jquery-1.6.4.min.js"></script>
-    <script src="//code.jquery.com/ui/1.8.0/jquery-ui.min.js"></script>
-    -->
-
-    <script type="text/javascript" src="//mkws.indexdata.com/pazpar2/js/pz2.js"></script>
-    <script type="text/javascript" src="//mkws.indexdata.com/handlebars-v1.1.2.js"></script>
-    <script type="text/javascript" src="//mkws.indexdata.com/mkws.js"></script>
-    <script type="text/javascript" src="//mkws.indexdata.com/mkws-jquery.js"></script>
+    <script type="text/javascript" src="tools/htdocs/jquery-1.10.0.min.js"></script>
+    <script type="text/javascript" src="//code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
+
+    <script type="text/javascript" src="tools/htdocs/pz2.js"></script>
+    <script type="text/javascript" src="tools/htdocs/handlebars-v1.1.2.js"></script>
+    <script type="text/javascript" src="tools/htdocs/jquery.json-2.4.js"></script>
+
+    <script type="text/javascript" src="src/mkws-handlebars.js"></script>
+    <script type="text/javascript" src="src/mkws-core.js"></script>
+    <script type="text/javascript" src="src/mkws-team.js"></script>
+    <script type="text/javascript" src="src/mkws-filter.js"></script>
+    <script type="text/javascript" src="src/mkws-popup.js"></script>
+    <script type="text/javascript" src="src/mkws-widget.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-main.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-termlists.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-authname.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-categories.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-log.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-record.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-reference.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-builder.js"></script>
+
+    <script type="text/javascript" src="mkws-widget-credo.js"></script>
   </head>
   <body>
-    <script type="text/javascript">
-     jQuery.pazpar2({ "layout":"popup", width: 800, height: 500 } );
-    </script>
-
-    <pre>
-      An embryonic MasterKey Widget Set
-=================================
-
-This directory contains an embryonic MasterKey Widget Set, based
-initially on "jsdemo" though now far removed from those beginnnings.
-
-
-How this works
---------------
-
-The goal is to make it that as much of the searching functionality as
-possible is hosted on
-        http://mkws.indexdata.com/
-so that very simple websites such as
-        http://example.indexdata.com/
-can have MasterKey searching with minimal effort.
-
-The following files must be hosted on mkws.indexdata.com:
-        mkws.js
-        mkws.css
-        /pazpar2/js/pz2.js (*)
-
-The following files make up the application:
-        index.html
-        favicon.ico [optional]
-        robots.txt [optional]
-
-(At present, the client application's configuruation also needs an
-Alias for /service-proxy/, to avoid cross-site scripting issues. We
-will fix this.)
+    <h3>MKWS widgets in a popup window</h3>
 
-(*) if you don't have already installed pazpar2 on the machine, you can
-do it by installing a debian package or check it out from GIT:
-$ git clone ssh://git.indexdata.com:222/home/git/pub/pazpar2
+    <div class="mkwsSearch"></div>
+    <div class="mkwsPopup" popup_width="1024" popup_height="650" popup_modal="0" popup_autoOpen="0" popup_button="input.mkwsButton">
+      <div class="mkwsSwitch"></div>
+      <div class="mkwsLang"></div>
+      <div class="mkwsResults"></div>
+      <div class="mkwsTargets"></div>
+      <div class="mkwsStat"></div>
+    </div>
 
-Configuring a client
---------------------
+    <div class="mkwsPopup popup_width="1024" popup_height="800" popup_autoOpen="1">
+      <div class="mkwsCredo mkwsTeam_credo" autosearch="!param!q">mkwsCredo result will appear here</div>
+    </div>
 
-The application's HTML must contains the following elements as well as
-whatever makes up the application itself:
+    <div class="mkwsPopup" popup_width="700" popup_height="600" popup_autoOpen="1">
+      <div class="mkwsReference mkwsTeam_credo" sentences="1" autosearch="!param!q">mkwsReference result will appear here</div>
+    </div>
 
-[...]
-    </pre>
-    <script src="//code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
   </body>
 </html>
index a15f554..f2653aa 100644 (file)
     <script type="text/javascript" src="src/mkws-widget-main.js"></script>
     <script type="text/javascript" src="src/mkws-widget-termlists.js"></script>
     <script type="text/javascript" src="src/mkws-widget-authname.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-categories.js"></script>
     <script type="text/javascript" src="src/mkws-widget-log.js"></script>
     <script type="text/javascript" src="src/mkws-widget-record.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-reference.js"></script>
+    <script type="text/javascript" src="src/mkws-widget-builder.js"></script>
 
     <style type="text/css">
       .mkwsTermlists div.facet {
index ce24206..866dc8a 100644 (file)
@@ -15,7 +15,7 @@ Handlebars.registerHelper('mkws-paragraphs', function(obj, nPara, nSent) {
   // {"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 (nPara === undefined || nPara.hasOwnProperty('hash') || nPara == 0 || nPara > obj.length) {
+  if (obj && (nPara === undefined || nPara.hasOwnProperty('hash') || nPara == 0 || nPara > obj.length)) {
     nPara = obj.length;
   }
   if (nSent === undefined || nSent.hasOwnProperty('hash') || nSent == 0) {
diff --git a/src/mkws-jquery.js b/src/mkws-jquery.js
deleted file mode 100644 (file)
index 4145652..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*! jQuery plugin for MKWS, the MasterKey Widget Set.
- *  Copyright (C) 2013-2014 Index Data
- *  See the file LICENSE for details
- */
-
-"use strict";
-
-
-/*
- * implement jQuery plugin $.pazpar2({})
- */
-function _mkws_jquery_plugin($) {
-  function debug(string) {
-    mkws.log("jQuery.pazpar2: " + string);
-  }
-
-  function init_popup(obj) {
-    var config = obj ? obj : {};
-
-    var height = config.height || 760;
-    var width = config.width || 880;
-    var id_button = config.id_button || "input.mkwsButton";
-    var id_popup = config.id_popup || ".mkwsPopup";
-
-    debug("popup height: " + height + ", width: " + width);
-
-    // make sure that jquery-ui was loaded afte jQuery core lib, e.g.:
-    // <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
-    if (!$.ui) {
-      debug("Error: jquery-ui.js is missing, did you include it after jQuery core in the HTML file?");
-      return;
-    }
-
-    $(id_popup).dialog({
-      closeOnEscape: true,
-      autoOpen: false,
-      height: height,
-      width: width,
-      modal: true,
-      resizable: true,
-      buttons: {
-        Cancel: function() {
-          $(this).dialog("close");
-        }
-      },
-      close: function() { }
-    });
-
-    $(id_button)
-      .button()
-      .click(function() {
-        $(id_popup).dialog("open");
-      });
-  };
-
-  $.extend({
-
-    // service-proxy or pazpar2
-    pazpar2: function(config) {
-      if (config == null || typeof config != 'object') {
-        config = {};
-      }
-      var id_popup = config.id_popup || ".mkwsPopup";
-      id_popup = id_popup.replace(/^[#\.]/, "");
-
-      // simple layout
-      var div = '\
-<div class="mkwsSwitch"></div>\
-<div class="mkwsLang"></div>\
-<div class="mkwsSearch"></div>\
-<div class="mkwsResults"></div>\
-<div class="mkwsTargets"></div>\
-<div class="mkwsStat"></div>';
-
-      // new table layout
-      var table = '\
-<style type="text/css">\
-  .mkwsTermlists div.facet {\
-  float:left;\
-  width: 30%;\
-  margin: 0.3em;\
-  }\
-  .mkwsStat {\
-  text-align: right;\
-  }\
-</style>\
-    \
-<table width="100%" border="0">\
-  <tr>\
-    <td>\
-      <div class="mkwsSwitch"></div>\
-      <div class="mkwsLang"></div>\
-      <div class="mkwsSearch"></div>\
-    </td>\
-  </tr>\
-  <tr>\
-    <td>\
-      <div style="height:500px; overflow: auto">\
-        <div class="mkwsPager"></div>\
-        <div class="mkwsNavi"></div>\
-        <div class="mkwsRecords"></div>\
-        <div class="mkwsTargets"></div>\
-        <div class="mkwsRanking"></div>\
-      </div>\
-    </td>\
-  </tr>\
-  <tr>\
-    <td>\
-      <div style="height:300px; overflow: hidden">\
-        <div class="mkwsTermlists"></div>\
-      </div>\
-    </td>\
-  </tr>\
-  <tr>\
-    <td>\
-      <div class="mkwsStat"></div>\
-    </td>\
-  </tr>\
-</table>';
-
-      var popup = '\
-<div class="mkwsSearch"></div>\
-<div class="' + id_popup + '">\
-  <div class="mkwsSwitch"></div>\
-  <div class="mkwsLang"></div>\
-  <div class="mkwsResults"></div>\
-  <div class="mkwsTargets"></div>\
-  <div class="mkwsStat"></div>\
-</div>'
-
-      if (config && config.layout == 'div') {
-        debug("jquery plugin layout: div");
-        document.write(div);
-      } else if (config && config.layout == 'popup') {
-        debug("jquery plugin layout: popup with id: " + id_popup);
-        document.write(popup);
-        $(document).ready(function() { init_popup(config); });
-      } else {
-        debug("jquery plugin layout: table");
-        document.write(table);
-      }
-    }
-  });
-};
-
-
-// XXX: enable before page load, so we could call it before mkws() runs
-_mkws_jquery_plugin(mkws.$);
-
diff --git a/src/mkws-popup.js b/src/mkws-popup.js
new file mode 100644 (file)
index 0000000..bc54f3c
--- /dev/null
@@ -0,0 +1,60 @@
+/* generic function to open results in a popup window
+ *
+ */
+
+//"use strict";
+// $(document).ready(function () {
+mkws.registerWidgetType('Popup', function() {
+    var $ = mkws.$;
+    var debug = mkws.log;
+    debug("init popup window");
+
+    var popup_window = $(this.node); // mkws.registerWidgetType('Popup',....)
+    // var popup_window = $(".mkwsPopup"); // $(document).ready()
+    if (!popup_window) {
+        debug("no popup found, skip...");
+        return;
+    } else {
+        debug("number of popup windows found: " + popup_window.length);
+    }
+
+    if (!$.ui) {
+        alert("Error: jquery-ui.js is missing, did you include it after jQuery core in the HTML file?");
+        return;
+    }
+
+    // more than one widget on a page are possible
+    popup_window.each(function(i) {
+        var that = $(this);
+
+        // all atributes are strings, convert them to integers here
+        var width = parseInt(that.attr("popup_width") || "800");
+        var height = parseInt(that.attr("popup_height") || "600");
+        var autoOpen = parseInt(that.attr("popup_autoOpen") || "0");
+        var modal = parseInt(that.attr("popup_modal") || "0");
+
+        debug("Popup parameters: width: " + width + ", height: " + height + ", autoOpen: " + autoOpen);
+        that.dialog({
+            closeOnEscape: true,
+            autoOpen: autoOpen,
+            height: height,
+            width: width,
+            modal: modal ? true : false,
+            resizable: true,
+            buttons: {
+                Cancel: function() {
+                    that.dialog("close");
+                }
+            },
+            close: function() {}
+        });
+
+        // open at search query submit: "input.mkwsButton"
+        var id_botton = that.attr("popup_button");
+        if (id_botton) {
+            $(id_botton).button().click(function() {
+                that.dialog("open");
+            });
+        }
+    });
+});
index 85c2ba4..d3a13cf 100644 (file)
@@ -448,6 +448,5 @@ mkws.registerWidgetType('Progress', function() {
 mkws.registerWidgetType('Query', function() {});
 mkws.registerWidgetType('MOTDContainer', function() {});
 mkws.registerWidgetType('Button', function() {});
-mkws.registerWidgetType('Popup', function() {});
 
 
index 388a4b8..f0a7291 100644 (file)
@@ -16,10 +16,19 @@ JQUERY_UI_URL =     http://code.jquery.com/ui/1.10.3/jquery-ui.js
 VERSION = $(shell tr -d '\012' < ${SRC}/VERSION)
 
 COMPONENTS = ${SRC}/mkws-handlebars.js \
-       ${SRC}/mkws-core.js ${SRC}/mkws-team.js ${SRC}/mkws-filter.js \
-       ${SRC}/mkws-widget.js ${SRC}/mkws-widget-main.js ${SRC}/mkws-widget-termlists.js \
-       ${SRC}/mkws-widget-authname.js ${SRC}/mkws-widget-categories.js ${SRC}/mkws-widget-log.js \
-       ${SRC}/mkws-widget-record.js ${SRC}/mkws-widget-reference.js ${SRC}/mkws-widget-builder.js
+       ${SRC}/mkws-core.js \
+       ${SRC}/mkws-team.js \
+       ${SRC}/mkws-filter.js \
+       ${SRC}/mkws-popup.js \
+       ${SRC}/mkws-widget.js \
+       ${SRC}/mkws-widget-main.js \
+       ${SRC}/mkws-widget-termlists.js \
+       ${SRC}/mkws-widget-authname.js \
+       ${SRC}/mkws-widget-categories.js \
+       ${SRC}/mkws-widget-log.js \
+       ${SRC}/mkws-widget-record.js \
+       ${SRC}/mkws-widget-reference.js \
+       ${SRC}/mkws-widget-builder.js
 
 GENERATED = ${HANDLEBARS_FILE} ${JQUERY_FILE} ${JQUERY_JSON_FILE} ${PP2_FILE} \
        mkws.js mkws.min.js mkws-complete.js mkws-complete.min.js
@@ -28,7 +37,7 @@ GENERATED = ${HANDLEBARS_FILE} ${JQUERY_FILE} ${JQUERY_JSON_FILE} ${PP2_FILE} \
 
 all: mkws.min.js mkws-complete.min.js
 
-mkws-js mkws-complete.js: Makefile mkws.js ${SRC}/mkws-jquery.js ${HANDLEBARS_FILE} ${JQUERY_FILE} ${JQUERY_JSON_FILE} ${PP2_FILE}
+mkws-js mkws-complete.js: Makefile mkws.js ${HANDLEBARS_FILE} ${JQUERY_FILE} ${JQUERY_JSON_FILE} ${PP2_FILE}
        ( set -e; \
          echo "/*! Copyright (c) 2013-2014 IndexData ApS. http://indexdata.com"; \
          echo "   Licence: GPL, http://www.indexdata.com/licences/gpl"; \
@@ -42,7 +51,6 @@ mkws-js mkws-complete.js: Makefile mkws.js ${SRC}/mkws-jquery.js ${HANDLEBARS_FI
          cat ${HANDLEBARS_FILE}; \
          cat ${PP2_FILE}; \
          cat  mkws.js; \
-         cat  ${SRC}/mkws-jquery.js; \
        ) > mkws-complete.js.tmp
        mv -f mkws-complete.js.tmp mkws-complete.js
 
@@ -87,6 +95,10 @@ mkws.js: $(COMPONENTS) Makefile
        mv -f $@.tmp $@
        chmod 444 $@
 
+mkws-html-includes: 
+       echo $(COMPONENTS) | perl -npe "s,${SRC},,g; s/\s+/\0/g" | \
+         perl -n0e 'print qq{    <script type="text/javascript" src="src$$_"></script>\n}'
+
 distclean: clean
        @echo "(No need for distclean, 'make clean' is fine)"