Merge branch 'master' of ssh://git.indexdata.com:222/home/git/private/mkws
authorWolfram Schneider <wosch@indexdata.dk>
Thu, 6 Feb 2014 15:56:33 +0000 (16:56 +0100)
committerWolfram Schneider <wosch@indexdata.dk>
Thu, 6 Feb 2014 15:56:33 +0000 (16:56 +0100)
Conflicts:
test/Makefile

LICENSE [new file with mode: 0644]
examples/htdocs/mike.html
examples/htdocs/mobile.html
test/Makefile
test/spec/mkws-pazpar2.js
tools/htdocs/Makefile
tools/htdocs/README.markdown
tools/htdocs/mkws.js
tools/htdocs/whitepaper.markdown

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..341218c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,343 @@
+LICENSE file of MKWS.
+Copyright (C) 2006-2014 Index Data.
+
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
index 84e17d6..e78f4d4 100644 (file)
     <script type="text/javascript" src="http://x.mkws.indexdata.com/mkws.js"></script>
   </head>
   <body>
-    <div class="mkwsSwitch"></div>
-    <div class="mkwsLang"></div>
-    <div class="mkwsSearch"></div>
-    <div class="mkwsSearch mkwsTeam_2"></div>
-    <div class="mkwsResults"></div>
-    <div class="mkwsTargets"></div>
-    <div class="mkwsStat"></div>
+    <table width="100%" border="1">
+      <tr>
+       <td valign="top" width="50%">
+         <div class="mkwsSwitch"></div>
+         <div class="mkwsLang"></div>
+         <div class="mkwsSearch"></div>
+         <div class="mkwsResults"></div>
+         <div class="mkwsTargets"></div>
+         <div class="mkwsStat"></div>
+       </td>
+       <td valign="top" width="50%">
+         <div class="mkwsSwitch mkwsTeam_2"></div>
+         <div class="mkwsLang mkwsTeam_2"></div>
+         <div class="mkwsSearch mkwsTeam_2"></div>
+         <div class="mkwsResults mkwsTeam_2"></div>
+         <div class="mkwsTargets mkwsTeam_2"></div>
+         <div class="mkwsStat mkwsTeam_2"></div>
+       </td>
+      </tr>
+    </table>
+    <div class="mkwsMOTD">This is the first MOTD</div>
+    <div class="mkwsMOTD mkwsTeam_2">This is the second MOTD</div>
   </body>
 </html>
index 4806fb0..5dde60e 100644 (file)
@@ -15,7 +15,6 @@
                lang_options: ["da", "en"],
                sort_default: "relevance",
                query_width: 50,
-               facets: ["authors", "sources", "subjects"],
                responsive_design_width: 990,
                perpage_default: 20
         };
index b44cf64..4beff13 100644 (file)
@@ -1,8 +1,10 @@
-# Copyright (c) 2013 IndexData ApS. http://indexdata.com
+# Copyright (c) 2013-2014 IndexData ApS. http://indexdata.com
 
 # For running on Mike's local install of node.js
 MIKE = PATH=$$PATH:/usr/local/lib/node-v0.10.24-linux-x64/bin
+
 NPM_INSTALL_FLAGS=-q
+JASMINE_NODE=  ./node_modules/jasmine-node/bin/jasmine-node
 PHANTOMJS=     ./bomb.pl ./node_modules/phantomjs/bin/phantomjs
 PHANTOMJS_URL= https://mkws-dev.indexdata.com/jasmine-popup.html       
 PHANTOMJS_TIMEOUT=     12      
@@ -22,8 +24,8 @@ mkws-complete-syntax-check:
 
 check: mkws-complete-syntax-check
        @if [ ! -e node_modules ]; then echo "please run first: make node-modules"; exit 1; fi 
-       jasmine-node --noColor --captureExceptions --forceexit ./spec
-       jasmine-node --noColor --captureExceptions --forceexit ./spec-sp
+       ${JASMINE_NODE} --noColor --captureExceptions --forceexit ./spec
+       ${JASMINE_NODE} --noColor --captureExceptions --forceexit ./spec-sp
 
 test: check
 
index 92230ab..7d94fde 100644 (file)
@@ -282,7 +282,7 @@ describe("Check Termlist", function () {
 describe("Show record", function () {
     var record_number = 1; // the Nth record in hit list
     it("show record author", function () {
-        var click = $("div#mkwsRecords div.record:nth-child(" + record_number + ") a").trigger("click");
+        var click = $("div.mkwsRecords div.record:nth-child(" + record_number + ") a").trigger("click");
         debug("show record click is success: " + click.length);
         expect(click.length).toBe(1);
 
index dd8d40c..68278ad 100644 (file)
@@ -56,6 +56,7 @@ mkws-js ${MKWS_JS}: Makefile mkws.js ${JQUERY_FILE} ${JQUERY_JSON_FILE} ${HANDLE
        fi
        ( set -e; \
          echo "/*! Copyright (c) 2013-2014 IndexData ApS. http://indexdata.com"; \
+         echo "   Licence: GPL, http://www.indexdata.com/licences/gpl"; \
          echo "   created at: $$(date)"; \
          echo "   mkws.js GIT id: $$(git log mkws.js | head -n 1 | perl -npe 's,\S+\s+,,')"; \
          echo "   $$(basename ${PZ2API_JS}) GIT id: $$(cd $$(dirname ${PZ2API_JS}) && git log $$(basename ${PZ2API_JS}) | head -n 1 | perl -npe 's,\S+\s+,,')"; \
index 95f03f0..49d415d 100644 (file)
@@ -77,7 +77,7 @@ possible options:
         show_perpage: true,         /* true, false: show/hide perpage menu */
         lang_options: ["en", "de", "da"],
                                     /* display languages links for given languages, [] for all */
-        facets: ["sources", "subjects", "authors"],
+        facets: ["xtargets", "subject", "author"],
                                     /* display facets, in this order, [] for none */
         sort_default: "relevance",  /* "relevance", "title:1", "date:0", "date:1" */
         query_width: 50,            /* 5..50 */
index 5548cef..2896c44 100644 (file)
@@ -1,4 +1,7 @@
-/*! MKWS, the MasterKey Widget Set. Copyright (C) 2013-2014, Index Data */
+/*! MKWS, the MasterKey Widget Set. 
+ *  Copyright (C) 2013-2014 Index Data 
+ *  See the file LICENSE for details
+ */
 
 "use strict"; // HTML5: disable for debug_level >= 2
 
@@ -225,8 +228,8 @@ function team($, teamName) {
                      "pazpar2path": mkws_config.pazpar2_url,
                      "oninit": my_oninit,
                      "onstat": my_onstat,
-                     "onterm": my_onterm,
-                     "termlist": "xtargets,subject,author",
+                     "onterm": (mkws_config.facets.length ? my_onterm : undefined),
+                     "termlist": mkws_config.facets.join(','),
                      "onbytarget": my_onbytarget,
                      "usesessions" : mkws_config.use_service_proxy ? false : true,
                      "showResponseType": '', // or "json" (for debugging?)
@@ -304,34 +307,36 @@ function team($, teamName) {
 
     function my_onterm(data, teamName) {
        debug("term for " + teamName);
-       // no facets
+       var node = $(".mkwsTermlists.mkwsTeam_" + teamName);
+       if (node.length == 0) return;
+
+       // no facets: this should never happen
        if (!mkws_config.facets || mkws_config.facets.length == 0) {
-           $("#mkwsTermlists").hide();
+           alert("my_onterm called even though we have no facets: " + $.toJSON(data));
+           node.hide();
            return;
        }
 
        // display if we first got results
-       $("#mkwsTermlists").show();
+       node.show();
 
        var acc = [];
        acc.push('<div class="title">' + M('Termlists') + '</div>');
        var facets = mkws_config.facets;
 
        for(var i = 0; i < facets.length; i++) {
-           if (facets[i] == "sources") {
+           if (facets[i] == "xtargets") {
                add_single_facet(acc, "Sources",  data.xtargets, 16, null);
-           } else if (facets[i] == "subjects") {
+           } else if (facets[i] == "subject") {
                add_single_facet(acc, "Subjects", data.subject,  10, "subject");
-           } else if (facets[i] == "authors") {
+           } else if (facets[i] == "author") {
                add_single_facet(acc, "Authors",  data.author,   10, "author");
            } else {
                alert("bad facet configuration: '" + facets[i] + "'");
            }
        }
 
-       var termlist = $("#mkwsTermlists");
-       if (termlist)
-           termlist.html(acc.join(''));
+       node.html(acc.join(''));
     }
 
 
@@ -414,8 +419,8 @@ function team($, teamName) {
            });
        });
 
-       document.mkwsSearchForm.mkwsQuery.value = '';
        if (document.mkwsSelect) {
+           debug("messing with mkwsSelect");
            if (document.mkwsSelect.mkwsSort)
                document.mkwsSelect.mkwsSort.onchange = onSelectDdChange;
            if (document.mkwsSelect.mkwsPerpage)
@@ -705,8 +710,8 @@ function team($, teamName) {
 
        var targets = $('.mkwsTargets.mkwsTeam_' + tname);
        var results = $('.mkwsResults.mkwsTeam_' + tname + ',.mkwsRecords.mkwsTeam_' + tname);
-       var blanket = $('#mkwsBlanket');
-       var motd    = $('#mkwsMOTD');
+       var blanket = $('.mkwsBlanket.mkwsTeam_' + tname);
+       var motd    = $('.mkwsMOTD.mkwsTeam_' + tname);
 
        switch(view) {
         case 'targets':
@@ -902,19 +907,19 @@ function team($, teamName) {
            $(".mkwsResults.mkwsTeam_" + m_teamName).html('\
 <table width="100%" border="0" cellpadding="6" cellspacing="0">\
   <tr>\
-    <td id="mkwsTermlistContainer1" class="mkwsTermlistContainer1 mkwsTeam_AUTO" width="250" valign="top">\
-      <div id="mkwsTermlists" class="mkwsTermlists mkwsTeam_AUTO"></div>\
+    <td class="mkwsTermlistContainer1 mkwsTeam_' + m_teamName + '" width="250" valign="top">\
+      <div id="mkwsTermlists" class="mkwsTermlists mkwsTeam_' + m_teamName + '"></div>\
     </td>\
-    <td id="mkwsMOTDContainer" valign="top">\
-      <div id="mkwsRanking" class="mkwsRanking mkwsTeam_AUTO"></div>\
-      <div id="mkwsPager" class="mkwsPager mkwsTeam_AUTO"></div>\
-      <div id="mkwsNavi" class="mkwsNavi mkwsTeam_AUTO"></div>\
-      <div id="mkwsRecords" class="mkwsRecords mkwsTeam_AUTO"></div>\
+    <td class="mkwsMOTDContainer mkwsTeam_' + m_teamName + '" valign="top">\
+      <div id="mkwsRanking" class="mkwsRanking mkwsTeam_' + m_teamName + '"></div>\
+      <div id="mkwsPager" class="mkwsPager mkwsTeam_' + m_teamName + '"></div>\
+      <div id="mkwsNavi" class="mkwsNavi mkwsTeam_' + m_teamName + '"></div>\
+      <div id="mkwsRecords" class="mkwsRecords mkwsTeam_' + m_teamName + '"></div>\
     </td>\
   </tr>\
   <tr>\
     <td colspan="2">\
-      <div id="mkwsTermlistContainer2" class="mkwsTermlistContainer2 mkwsTeam_AUTO"></div>\
+      <div class="mkwsTermlistContainer2 mkwsTeam_' + m_teamName + '"></div>\
     </td>\
   </tr>\
 </table>');
@@ -939,21 +944,23 @@ function team($, teamName) {
        if (mkws_config.responsive_design_width) {
            // Responsive web design - change layout on the fly based on
            // current screen width. Required for mobile devices.
-           $(window).resize(function(e) { mkws_resize_page() });
+           $(window).resize(function(e) { mkws.resize_page() });
            // initial check after page load
-           $(document).ready(function() { mkws_resize_page() });
+           $(document).ready(function() { mkws.resize_page() });
        }
 
+       debug("before domReady()");
        domReady();
+       debug("after domReady()");
 
        // on first page, hide the termlist
-       $(document).ready(function() { $("#mkwsTermlists").hide(); });
-       var motd = document.getElementById("mkwsMOTD");
-       var container = document.getElementById("mkwsMOTDContainer");
-       if (motd && container) {
+       $(document).ready(function() { $(".mkwsTermlists.mkwsTeam_" + m_teamName).hide(); });
+       var motd = $(".mkwsMOTD.mkwsTeam_" + m_teamName);
+       var container = $(".mkwsMOTDContainer.mkwsTeam_" + m_teamName);
+       debug("for team '" + m_teamName + "', motd=" + motd + "(" + motd.length + "), container=" + container + "(" + container.length + ")");
+       if (motd.length && container.length) {
            // Move the MOTD from the provided element down into the container
-            motd.parentNode.removeChild(motd);
-           container.appendChild(motd);
+           motd.appendTo(container);
        }
     }
 
@@ -1085,34 +1092,6 @@ function team($, teamName) {
     }
 
 
-    function mkws_resize_page () {
-       var list = ["mkwsSwitch"];
-
-       var width = mkws_config.responsive_design_width;
-       var parentId = $("#mkwsTermlists").parent().attr('id');
-
-       if ($(window).width() <= width &&
-           parentId === "mkwsTermlistContainer1") {
-           debug("changing from wide to narrow: " + $(window).width());
-           $("#mkwsTermlists").appendTo($("#mkwsTermlistContainer2"));
-           $("#mkwsTermlistContainer1").hide();
-           $("#mkwsTermlistContainer2").show();
-           for(var i = 0; i < list.length; i++) {
-               $("#" + list[i]).hide(); // ### make team-aware
-           }
-       } else if ($(window).width() > width &&
-                  parentId === "mkwsTermlistContainer2") {
-           debug("changing from narrow to wide: " + $(window).width());
-           $("#mkwsTermlists").appendTo($("#mkwsTermlistContainer1"));
-           $("#mkwsTermlistContainer1").show();
-           $("#mkwsTermlistContainer2").hide();
-           for(var i = 0; i < list.length; i++) {
-               $("#" + list[i]).show(); // ### make team-aware
-           }
-       }
-    };
-
-
     /* locale */
     function M(word) {
        var lang = mkws_config.lang;
@@ -1318,17 +1297,16 @@ function _mkws_jquery_plugin ($) {
 
        // For all MKWS-classed nodes that don't have a team
        // specified, set the team to AUTO.
-       $('div[class^="mkws"],div[class*=" mkws"]').each(function () {
+       $('[class^="mkws"],[class*=" mkws"]').each(function () {
            if (!this.className.match(/mkwsTeam_/)) {
                log("adding AUTO team to node with class '" + this.className + "'");
                $(this).addClass('mkwsTeam_AUTO');
            }
        });
 
-       // Find all nodes with class (NOT id) mkwsRecords, and
-       // determine their team from the mkwsTeam_* class. So:
-       //      <div class="mkwsRecords mkwsTeam_foo"/>
-       $('.mkwsSearch, .mkwsResults, .mkwsRecords, .mkwsTermlists').each(function () {
+       // Find all nodes with an class, and determine their team from
+       // the mkwsTeam_* class. Make all team objects.
+       $('[class^="mkws"],[class*=" mkws"]').each(function () {
            var node = this;
            mkws.handle_node_with_team(node, function(tname) {
                if (mkws.teams[tname]) {
@@ -1365,6 +1343,38 @@ function _mkws_jquery_plugin ($) {
     }
 
 
+    mkws.resize_page = function () {
+       var list = ["mkwsSwitch", "mkwsLang"];
+
+       var width = mkws_config.responsive_design_width;
+       var parent = $(".mkwsTermlists").parent();
+
+       if ($(window).width() <= width &&
+           parent.hasClass("mkwsTermlistContainer1")) {
+           log("changing from wide to narrow: " + $(window).width());
+           $(".mkwsTermlistContainer1").hide();
+           $(".mkwsTermlistContainer2").show();
+           for (var tname in mkws.teams) {
+               $(".mkwsTermlists.mkwsTeam_" + tname).appendTo($(".mkwsTermlistContainer2.mkwsTeam_" + tname));
+               for(var i = 0; i < list.length; i++) {
+                   $("." + list[i] + ".mkwsTeam_" + tname).hide();
+               }
+           }
+       } else if ($(window).width() > width &&
+                  parent.hasClass("mkwsTermlistContainer2")) {
+           log("changing from narrow to wide: " + $(window).width());
+           $(".mkwsTermlistContainer1").show();
+           $(".mkwsTermlistContainer2").hide();
+           for (var tname in mkws.teams) {
+               $(".mkwsTermlists.mkwsTeam_" + tname).appendTo($(".mkwsTermlistContainer1.mkwsTeam_" + tname));
+               for(var i = 0; i < list.length; i++) {
+                   $("." + list[i] + ".mkwsTeam_" + tname).show();
+               }
+           }
+       }
+    };
+
+
     mkws.showDetails = function (prefixRecId, tname) {
        mkws.teams[tname].showDetails(prefixRecId);
     }
@@ -1386,7 +1396,7 @@ function _mkws_jquery_plugin ($) {
            show_sort: true,    /* show/hide sort menu */
            show_perpage: true,         /* show/hide perpage menu */
            lang_options: [],   /* display languages links for given languages, [] for all */
-           facets: ["sources", "subjects", "authors"], /* display facets, in this order, [] for none */
+           facets: ["xtargets", "subject", "author"], /* display facets, in this order, [] for none */
            responsive_design_width: undefined, /* a page with less pixel width considered as narrow */
            debug_level: 1,     /* debug level for development: 0..2 */
 
index 7ae655d..542ffb1 100644 (file)
@@ -200,9 +200,9 @@ Refinements
 Some applications might like to open with content in the area that
 will subsequently be filled with result-records -- a message of the
 day, a welcome message or a help page. This can be done by placing an
-`mkwsMOTDContainer` division on the page next to `mkwsResults` or
-`mkwsRecords`. The contents of this element are initially displayed,
-but will be hidden when a search is made.
+`mkwsMOTD` division anywhere on the page. It will be moved into the
+`mkwsResults` area and initially displayed, but will be hidden when a
+search is made.
 
 
 ### Customised display using Handlebars templates
@@ -351,7 +351,7 @@ debug_level               int     1         Level of debugging output to emit. 0
                                             datestamps, 3 = messages with datestamps and stack-traces.
 
 facets                    array   *Note 1*  Ordered list of names of facets to display. Supported facet names are 
-                                            `sources`, `subjects` and `authors`.
+                                            `xtargets`, `subject` and `author`.
 
 lang                      string  en        Code of the default language to display the UI in. Supported language codes are `en` =
                                             English, `de` = German, `da` = Danish, and whatever additional languages are configured