Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkws
authorMike Taylor <mike@indexdata.com>
Thu, 10 Jul 2014 16:45:49 +0000 (17:45 +0100)
committerMike Taylor <mike@indexdata.com>
Thu, 10 Jul 2014 16:45:49 +0000 (17:45 +0100)
15 files changed:
Makefile
doc/README.markdown
doc/whitepaper.markdown
examples/htdocs/jasmine-cors-popup.html
examples/htdocs/jasmine-local-popup.html
examples/htdocs/jasmine-popup.html
examples/htdocs/popup-dev.html [new file with mode: 0644]
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
tools/htdocs/index.html

index 9f1e405..e80e8e3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ clean distclean:
 check-js:
        ${MAKE} -C./test check
 
-phantomjs p jsb:
+phantomjs p p-all phantomjs-all jsb:
        ${MAKE} -C./test $@
 
 # must be called once after GIT checkout
index 667cf4f..d82ffd6 100644 (file)
@@ -1,6 +1,6 @@
 % The MasterKey Widget Set
 % Mike Taylor; Wolfram Schneider
-% 10 July 2013
+% 10 July 2014
 
 
 Introduction
@@ -100,4 +100,4 @@ For much more detail, see
 
 - - -
 
-Copyright 2013 IndexData ApS. <http://indexdata.com>
+Copyright 2014 IndexData ApS. <http://indexdata.com>
index 55c56ec..c9b3fad 100644 (file)
@@ -1,6 +1,5 @@
 % Embedded metasearching with the MasterKey Widget Set
 % Mike Taylor
-% July-September 2013
 
 
 Introduction
@@ -84,7 +83,7 @@ header, which are loaded from the tool site mkws.indexdata.com:
   contains all the JavaScript needed by the widget-set.
 
 * `mkws.css`
-  provides the default CSS styling 
+  provides the default CSS styling
 
 Second, within the HTML body, `<div>` elements with special IDs that
 begin `mkws` can be provided. These are filled in by the MKWS code,
@@ -273,9 +272,14 @@ generally visible on the page is a search box, and the results appear
 in a popup. The key part of such an application is this invocation of
 the MKWS jQuery plugin:
 
-        <script type="text/javascript">
-          jQuery.pazpar2({ "layout":"popup", width:800, height:500 });
-        </script>
+        <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>
 
 The necessary scaffolding can be seen in an example application,
 http://example.indexdata.com/index-popup.html
@@ -350,7 +354,7 @@ Element                   Type    Default   Description
 debug_level               int     1         Level of debugging output to emit. 0 = none, 1 = messages, 2 = messages with
                                             datestamps, 3 = messages with datestamps and stack-traces.
 
-facets                    array   *Note 1*  Ordered list of names of facets to display. Supported facet names are 
+facets                    array   *Note 1*  Ordered list of names of facets to display. Supported facet names are
                                             `xtargets`, `subject` and `author`.
 
 lang                      string  en        Code of the default language to display the UI in. Supported language codes are `en` =
@@ -480,48 +484,43 @@ and
 
 
 
-### jQuery plugin invocation
+### jQuery UI popup invocation
 
-The MasterKey Widget Set can be invoked as a jQuery plugin rather than
-by providing an HTML skeleton explicitly. When this approach is used,
-the invocation is a single line of JavaScript:
+The MasterKey Widget Set can be invoked in a popup window on top of the page.
 
-        <script>jQuery.pazpar2();</script>
+Note that when using the `popup` layout, facilities from the jQuery UI
+toolkit are used, so it's necessary to include both CSS and JavaScript
+from that toolkit. The relevant lines are:
 
-This code should be inserted in the page at the position where the
-metasearch should occur.
+    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
+    <link rel="stylesheet" type="text/css"
+          href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
 
-When invoking this plugin, a key-value lookup table of named options
-may be passed in to modify the default behaviour, as in the exaple
-above. The available options are as follows:
+    <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
 
 ---
 Element    Type    Default           Description
 --------   -----   ---------         ------------
-layout     string  popup             Specifies how the user interface should
-                                     appear. Options are `table` (the default,
-                                     with facets at the bottom), `div` (with
-                                     facets at the side) and `popup` (to
-                                     obtain a popup window).
-
-width      int     880               Width of the popup window (if used), in
+popup_width     string     880       Width of the popup window (if used), in
                                      pixels.
 
-height     int     760               Height of the popup window (if used), in
+popup_height    string     760       Height of the popup window (if used), in
                                      pixels.
 
-id_button  string  input#mkwsButton  (Never change this.)
+popup_button    string      input.mkwsButton  (Never change this.)
 
-id_popup   string  #mkwsPopup        (Never change this.)
----
+popup_modal     string      0       Modal confirmation mode. Valid values are 0 or 1
 
-Note that when using the `popup` layout, facilities from the jQuery UI
-toolkit are used, so it's necessary to include both CSS and JavaScript
-from that toolkit. The relevant lines are:
+popup_autoOpen  string      1       Open popup window on load. Valid values are 0 or 1
 
-    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
-    <link rel="stylesheet" type="text/css"
-          href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
+---
 
 
 ### The structure of the HTML generated by the MKWS widgets
@@ -595,4 +594,4 @@ and .CLASS indicates an instance of a class.
 
 - - -
 
-Copyright (C) 2013 by IndexData ApS, <http://www.indexdata.com>
+Copyright (C) 2013-2014 by IndexData ApS, <http://www.indexdata.com>
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>
diff --git a/examples/htdocs/popup-dev.html b/examples/htdocs/popup-dev.html
new file mode 100644 (file)
index 0000000..174fc37
--- /dev/null
@@ -0,0 +1,61 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <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-widget-reference.css" />
+    <link rel="stylesheet" type="text/css" href="mkws-widget-credo.css" />
+
+    <script type="text/javascript">
+      var mkws_config = {
+         service_proxy_auth: "//mkws.indexdata.com/service-proxy-credoauth"
+      };
+    </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>
+    <h3>MKWS widgets in a popup window</h3>
+
+    <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>
+
+    <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>
+
+    <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>
+
+  </body>
+</html>
index 60529bb..9a1a35e 100644 (file)
@@ -1,81 +1,51 @@
 <html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    <title>MKWS demo: popup search box</title>
-
-    <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
+    <title>MKWS demo: Reference widget with popup window</title>
     <link rel="stylesheet" type="text/css" href="//mkws.indexdata.com/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="//example.indexdata.com/mkws-widget-reference.css" />
+    <link rel="stylesheet" type="text/css" href="//example.indexdata.com/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="tools/htdocs/mkws-complete.js"></script>
+    <script>jQuery = mkws.$</script>
+    <script type="text/javascript" src="//code.jquery.com/ui/1.10.3/jquery-ui.min.js"></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="//code.jquery.com/ui/1.10.3/jquery-ui.min.js"></script>
+    <script type="text/javascript" src="//git.indexdata.com/?p=pazpar2.git;a=blob_plain;f=js/pz2.js;hb=HEAD"></script>
+    <script type="text/javascript" src="//builds.handlebarsjs.com.s3.amazonaws.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="//example.indexdata.com/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)"
 
index c1341be..e851ab4 100644 (file)
     </div>
 
     <p style="text-align: right; font-size: small">
-      Copyright © 2013 IndexData ApS.
+      Copyright (&copy;) 2013-2014 IndexData ApS.
       <a href="http://indexdata.com"><code>http://indexdata.com</code></a>
     </p>
   </body>