fix broken debug() function for IE (again!!)
[mkws-moved-to-github.git] / tools / htdocs / mkws.js
index 1bcebda..1f114f8 100644 (file)
@@ -77,6 +77,7 @@ var mkws = {
     authenticated: false,
     debug_function: undefined, // will be set during initialisation
     debug_level: undefined, // will be initialised from mkws_config
+    paz: undefined, // will be set up during initialisation
     teams: {},
     locale_lang: {
        "de": {
@@ -230,7 +231,7 @@ function _make_mkws_team($, teamName) {
        for (var k in config_default) {
            if (typeof mkws_config[k] === 'undefined')
                mkws_config[k] = config_default[k];
-           debug("Set config: " + k + ' => ' + mkws_config[k]);
+           //debug("Set config: " + k + ' => ' + mkws_config[k]);
        }
     }
 
@@ -254,27 +255,30 @@ function _make_mkws_team($, teamName) {
        }
     }
 
-    // protocol independend link for pazpar2: "//mkws/sp" -> "https://mkws/sp"
+    // protocol independent link for pazpar2: "//mkws/sp" -> "https://mkws/sp"
     if (mkws_config.pazpar2_url.match(/^\/\//)) {
        mkws_config.pazpar2_url = document.location.protocol + mkws_config.pazpar2_url;
-       debug("adjust protocol independend links: " + mkws_config.pazpar2_url);
+       debug("adjust protocol independent links: " + mkws_config.pazpar2_url);
     }
 
     debug("Create main pz2 object");
     // create a parameters array and pass it to the pz2's constructor
     // then register the form submit event with the pz2.search function
     // autoInit is set to true on default
-    var m_paz = new pz2( { "onshow": my_onshow,
-                          "showtime": 500,            //each timer (show, stat, term, bytarget) can be specified this way
-                          "pazpar2path": mkws_config.pazpar2_url,
-                          "oninit": my_oninit,
-                          "onstat": my_onstat,
-                          "onterm": my_onterm,
-                          "termlist": "xtargets,subject,author",
-                          "onbytarget": my_onbytarget,
-                          "usesessions" : mkws_config.use_service_proxy ? false : true,
-                          "showResponseType": '', // or "json" (for debugging?)
-                          "onrecord": my_onrecord } );
+    if (!mkws.paz) {
+       mkws.paz = new pz2({ "onshow": my_onshow,
+                            "windowid": teamName,
+                            "showtime": 500,            //each timer (show, stat, term, bytarget) can be specified this way
+                            "pazpar2path": mkws_config.pazpar2_url,
+                            "oninit": my_oninit,
+                            "onstat": my_onstat,
+                            "onterm": my_onterm,
+                            "termlist": "xtargets,subject,author",
+                            "onbytarget": my_onbytarget,
+                            "usesessions" : mkws_config.use_service_proxy ? false : true,
+                            "showResponseType": '', // or "json" (for debugging?)
+                            "onrecord": my_onrecord });
+    }
 
     if (!isNaN(parseInt(mkws_config.perpage_default))) {
        m_recPerPage = parseInt(mkws_config.perpage_default);
@@ -284,13 +288,15 @@ function _make_mkws_team($, teamName) {
     //
     // pz2.js event handlers:
     //
-    function my_oninit() {
-       m_paz.stat();
-       m_paz.bytarget();
+    function my_oninit(teamName) {
+       debug("init for " + teamName);
+       mkws.paz.stat();
+       mkws.paz.bytarget();
     }
 
 
-    function my_onshow(data) {
+    function my_onshow(data, teamName) {
+       debug("show for " + teamName);
        m_totalRec = data.merged;
        // move it out
        var pager = document.getElementById("mkwsPager");
@@ -329,7 +335,8 @@ function _make_mkws_team($, teamName) {
     }
 
 
-    function my_onstat(data) {
+    function my_onstat(data, teamName) {
+       debug("stat for " + teamName);
        var stat = document.getElementById("mkwsStat");
        if (stat == null)
            return;
@@ -342,7 +349,8 @@ function _make_mkws_team($, teamName) {
     }
 
 
-    function my_onterm(data) {
+    function my_onterm(data, teamName) {
+       debug("term for " + teamName);
        // no facets
        if (!mkws_config.facets || mkws_config.facets.length == 0) {
            $("#mkwsTermlists").hide();
@@ -377,7 +385,7 @@ function _make_mkws_team($, teamName) {
     function add_single_facet(acc, caption, data, max, pzIndex) {
        acc.push('<div class="facet" id="mkwsFacet' + caption + '">');
        acc.push('<div class="termtitle">' + M(caption) + '</div>');
-       for (var i = 0; i < data.length && i < max; i++ ) {
+       for (var i = 0; i < data.length && i < max; i++) {
            acc.push('<div class="term">');
             acc.push('<a href="#" ');
            var action;
@@ -396,9 +404,10 @@ function _make_mkws_team($, teamName) {
     }
 
 
-    function my_onrecord(data) {
+    function my_onrecord(data, teamName) {
+       debug("record for " + teamName);
        // FIXME: record is async!!
-       clearTimeout(m_paz.recordTimer);
+       clearTimeout(mkws.paz.recordTimer);
        // in case on_show was faster to redraw element
        var detRecordDiv = document.getElementById('mkwsDet_'+data.recid);
        if (detRecordDiv) return;
@@ -409,7 +418,8 @@ function _make_mkws_team($, teamName) {
     }
 
 
-    function my_onbytarget(data) {
+    function my_onbytarget(data, teamName) {
+       debug("target for " + teamName);
        var targetDiv = document.getElementById("mkwsBytarget");
        if (!targetDiv) {
            // No mkwsTargets div.
@@ -424,7 +434,7 @@ function _make_mkws_team($, teamName) {
            '<td>' + M('State') + '</td>' +
            '</tr></thead><tbody>';
 
-       for (var i = 0; i < data.length; i++ ) {
+       for (var i = 0; i < data.length; i++) {
             table += "<tr><td>" + data[i].id +
                "</td><td>" + data[i].hits +
                "</td><td>" + data[i].diagnostic +
@@ -486,7 +496,7 @@ function _make_mkws_team($, teamName) {
        if (!m_submitted) return false;
        resetPage();
        loadSelect();
-       m_paz.show(0, m_recPerPage, m_sort);
+       mkws.paz.show(0, m_recPerPage, m_sort);
        return false;
     }
 
@@ -542,7 +552,7 @@ function _make_mkws_team($, teamName) {
        }
        debug("triggerSearch(" + m_query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
 
-       m_paz.search(m_query, m_recPerPage, m_sort, pp2filter, undefined, params);
+       mkws.paz.search(m_query, m_recPerPage, m_sort, pp2filter, undefined, params);
     }
 
 
@@ -662,7 +672,7 @@ function _make_mkws_team($, teamName) {
        var onsides = 6;
        var pages = Math.ceil(m_totalRec / m_recPerPage);
 
-       var firstClkbl = ( m_curPage - onsides > 0 )
+       var firstClkbl = (m_curPage - onsides > 0)
             ? m_curPage - onsides
             : 1;
 
@@ -706,21 +716,21 @@ function _make_mkws_team($, teamName) {
     mkws.showPage = function (pageNum)
     {
        m_curPage = pageNum;
-       m_paz.showPage( m_curPage - 1 );
+       mkws.paz.showPage(m_curPage - 1);
     }
 
 
     // simple paging functions
     mkws.pagerNext = function () {
-       if ( m_totalRec - m_recPerPage*m_curPage > 0) {
-            m_paz.showNext();
+       if (m_totalRec - m_recPerPage*m_curPage > 0) {
+            mkws.paz.showNext();
             m_curPage++;
        }
     }
 
 
     mkws.pagerPrev = function () {
-       if ( m_paz.showPrev() != false )
+       if (mkws.paz.showPrev() != false)
             m_curPage--;
     }
 
@@ -779,7 +789,7 @@ function _make_mkws_team($, teamName) {
             return;
        }
        // request the record
-       m_paz.record(recId);
+       mkws.paz.record(recId);
     }
 
 
@@ -970,19 +980,10 @@ function _make_mkws_team($, teamName) {
 
        mkws_html_switch();
 
-       if (mkws_config.use_service_proxy) {
-           mkws_service_proxy_auth(mkws_config.service_proxy_auth,
-                                   mkws_config.service_proxy_auth_domain,
-                                   mkws_config.pazpar2_url);
-       } else {
-           // raw pp2
-           run_auto_searches();
-       }
-
        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() });
        }
@@ -990,7 +991,7 @@ function _make_mkws_team($, teamName) {
        domReady();
 
        // on first page, hide the termlist
-       $(document).ready(function() { $("#mkwsTermlists").hide(); } );
+       $(document).ready(function() { $("#mkwsTermlists").hide(); });
        var motd = document.getElementById("mkwsMOTD");
        var container = document.getElementById("mkwsMOTDContainer");
        if (motd && container) {
@@ -1115,7 +1116,7 @@ function _make_mkws_team($, teamName) {
      * The username/password is configured in the apache config file
      * for the site.
      */
-    function mkws_service_proxy_auth(auth_url, auth_domain, pp2_url) {
+    mkws.service_proxy_auth = function(auth_url, auth_domain, pp2_url) {
        debug("Run service proxy auth URL: " + auth_url);
 
        if (!auth_domain) {
@@ -1380,7 +1381,7 @@ function _mkws_jquery_plugin ($) {
            } else if (config && config.layout == 'popup') {
                debug("jquery plugin layout: popup with id: " + id_popup);
                document.write(popup);
-               $(document).ready( function() { init_popup(config); } );
+               $(document).ready(function() { init_popup(config); });
            } else {
                debug("jquery plugin layout: table");
                document.write(table);
@@ -1393,23 +1394,41 @@ function _mkws_jquery_plugin ($) {
 // wrapper to call _make_mkws_team() after page load
 (function (j) {
     function log(s) {
-       if (console && console.log) console.log(s);
+        if (typeof console === "undefined" || typeof console.log === "undefined") { /* ARGH!!! old IE */
+            return;
+        }
+       console.log(s);
     }
+
     // enable before page load, so we could call it before mkws() runs
     _mkws_jquery_plugin(j);
 
     $(document).ready(function() {
        log("on load ready");
+
+       // Backwards compatibility: set new magic class names on any
+       // elements that have the old magic IDs.
+       var ids = [ "Switch", "Lang", "Search", "Pager", "Navi",
+                   "Results", "Records", "Targets", "Ranking",
+                   "Termlists", "Stat" ];
+       for (var i = 0; i < ids.length; i++) {
+           var id = 'mkws' + ids[i];
+           var node = $('#' + id);
+           if (node.attr('id')) {
+               node.addClass(id + " mkwsTeam_AUTO");
+               log("added magic classes to '" + node.attr('id') + "'");
+           }
+       }
+
        // Backwards compatibility: the special-case undefined team
+       // ### Will not be necessary when non-default teams are working
        mkws.teams[''] = _make_mkws_team(j, undefined);
        log("Made the unnamed MKWS team");
 
        // Find all nodes with class (NOT id) mkwsRecords, and
        // determine their team from the mkwsTeam_* class. So:
        //      <div class="mkwsRecords mkwsTeam_foo"/>
-       // ### Down the line we will also want teams that have facet
-       //     divs but no results. But not today.
-       $('.mkwsRecords').each(function () {
+       $('.mkwsResults, .mkwsRecords, .mkwsTermlists').each(function () {
            var node = this;
            var classes = this.className;
            var list = classes.split(/\s+/)
@@ -1420,13 +1439,26 @@ function _mkws_jquery_plugin ($) {
                    tname = cname.replace(/^mkwsTeam_/, '');
                }
            }
-           if (tname) {
+           if (!tname) {
+               alert("No MKWS team specified for mkwsRecords element with classes '" + classes + "'");
+           } else if (mkws.teams[tname]) {
+               log("MKWS team '" + tname + "' already exists, skipping");
+           } else if (tname === "AUTO") {
+               // ### For now: later, this will be how the backwards-compatibility is done
+               log("Skipping MKWS team '" + tname + "'");
+           } else {
                mkws.teams[tname] = _make_mkws_team(j, tname);
                log("Made MKWS team '" + tname + "'");
-           } else {
-               alert("No MKWS team specified for mkwsRecords element with classes '" + classes + "'");
            }
        });
-       
+
+       if (mkws_config.use_service_proxy) {
+           mkws.service_proxy_auth(mkws_config.service_proxy_auth,
+                                   mkws_config.service_proxy_auth_domain,
+                                   mkws_config.pazpar2_url);
+       } else {
+           // raw pp2
+           run_auto_searches();
+       }
     });
 })(jQuery);