Add documentation of template system.
[mkws-moved-to-github.git] / tools / htdocs / whitepaper.markdown
index 8cc4d42..3ff637c 100644 (file)
@@ -19,13 +19,13 @@ Index Data provides several different toolkits for communicating with
 its metasearching middleware, trading off varying degrees of
 flexibility against convenience:
 
-* libpz2.js -- a low-level JavaScript library for interrogating the
+* pz2.js -- a low-level JavaScript library for interrogating the
   Service Proxy and Pazpar2. It allows the HTML/JavaScript programmer
   to create JavaScript applications display facets, records, etc. that
   are fetched from the metasearching middleware.
 
 * masterkey-ui-core -- a higher-level, complex JavaScript library that
-  uses libpz2.js to provide the pieces needed for building a
+  uses pz2.js to provide the pieces needed for building a
   full-featured JavaScript application.
 
 * MasterKey Demo UI -- an example of a searching application built on
@@ -128,7 +128,7 @@ Configuration
 -------------
 
 Many aspects of the behaviour of MKWS can be modified by setting
-parameters into the `mkws_config` hash. **This must be done *before*
+parameters into the `mkws_config` object. **This must be done *before*
 including the MKWS JavaScript** so that when that code is executed it
 can refer to the configuration values. So the HTML header looks like
 this:
@@ -137,7 +137,7 @@ this:
           var mkws_config = {
             lang: "da",
             sort_default: "title",
-            query_width: 60,
+            query_width: 60
           };
         </script>
         <script type="text/javascript" src="http://mkws.indexdata.com/mkws-complete.js"></script>
@@ -205,6 +205,40 @@ day, a welcome message or a help page. This can be done by placing an
 but will be hidden when a search is made.
 
 
+### Customised display using Handlebars templates
+
+Certain aspects of the widget-set's display can be customised by
+providing Handlebars templates with well-known IDs that begin with the
+string `mkwsTemplate`. At present, the supported templates are:
+
+* `mkwsTemplateSummary` -- used for each summary record in a list of
+  results.
+
+* `mkwsTemplateRecord` -- used when displaying a full record.
+
+For both of these the metadata record is passed in, and its fields can
+be referenced in the template. As well as the metadata fields
+(`md-*`), two special fields are provided to the `mkwsTemplateSummary`
+template, for creating popup links for full records. These are `_id`,
+which must be provided as the `id` attribute of a link tag, and
+`_onclick`, which must be provided as the `onclick` attribute.
+
+For example, an application can install a simple author+title summary
+record in place of the usual one providing the following template:
+
+        <script id="mkwsTemplateSummary" type="text/x-handlebars-template">
+          {{#if md-author}}
+            <span>{{md-author}}</span>
+          {{/if}}
+          <a href="#" id="{{_id}}" onclick="{{_onclick}}">
+            <b>{{md-title}}</b>
+          </a>
+        </script>
+
+For details of Handlebars template syntax, see
+[the online documentation](http://handlebarsjs.com/).
+
+
 ### Responsive design
 
 Metasearching applications may need to appear differently on
@@ -269,10 +303,11 @@ Reference Guide
 
 The configuration object `mkws_config` may be created before including
 the MKWS JavaScript code to modify default behaviour. This structure
-is a hash, whose entries are described in the table below. All entries
-are options, but if specified must be given values of the specified
-type. If ommitted, each setting takes the indicated default value;
-long default values are in footnotes to keep the table reasonably narrow.
+is a key-value lookup table, whose entries are described in the table
+below. All entries are options, but if specified must be given values
+of the specified type. If ommitted, each setting takes the indicated
+default value; long default values are in footnotes to keep the table
+reasonably narrow.
 
 ---
 Element                  Type    Default   Description
@@ -356,16 +391,16 @@ structure.
 ### Language specification
 
 Support for another UI language can be added by providing an entry in
-the `mkws_config` hash whose name is `language_` followed by the name
-of the language: for example, `language_Arabic` to support
-Arabic. Then value of this entry must be a hash, mapping the
-English-language strings of the UI into their equivalents in the
-specified language. For example:
+the `mkws_config` object whose name is `language_` followed by the
+name of the language: for example, `language_French` to support
+French. Then value of this entry must be a key-value lookup table,
+mapping the English-language strings of the UI into their equivalents
+in the specified language. For example:
 
             var mkws_config = {
-              language_Arabic: {
-                "Authors": "الكتاب",
-                "Subjects": "المواضيع",
+              language_French: {
+                "Authors": "Auteurs",
+                "Subjects": "Sujets",
                 // ... and others ...
               }
             }
@@ -414,9 +449,9 @@ the invocation is a single line of JavaScript:
 This code should be inserted in the page at the position where the
 metasearch should occur.
 
-When invoking this plugin, a hash of named options may be passed in to
-modify the default behaviour, as in the exaple above. The available
-options are as follows:
+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:
 
 ---
 Element    Type    Default           Description