Eliminate temporary state mkws.usesessions
[mkws-moved-to-github.git] / tools / htdocs / mkws.js
index e3ca0e1..b96cca2 100644 (file)
@@ -1,26 +1,14 @@
-/*! MKWS, the MasterKey Widget Set. Copyright (C) 2013, Index Data */
+/*! MKWS, the MasterKey Widget Set. Copyright (C) 2013-2014, Index Data */
 
 "use strict"; // HTML5: disable for debug_level >= 2
 
-// Set up namespace and some state.
+// Set up global mkws object. Contains a hash of session objects,
+// indexed by windowid.
 var mkws = {
-    sort: 'relevance',
     authenticated: false,
-    filters: []
+    sessions: {}
 };
 
-// Define empty mkws_config for simple applications that don't define it.
-if (mkws_config == null || typeof mkws_config != 'object') {
-    var mkws_config = {};
-}
-
-// wrapper for jQuery lib
-function _mkws($) {
-    // if (console && console.log) console.log("run _mkws()");
-
-    // call this function only once
-    if (mkws.init) return;
-
 mkws.locale_lang = {
     "de": {
        "Authors": "Autoren",
@@ -42,7 +30,8 @@ mkws.locale_lang = {
        "Date": "Datum",
        "Subject": "Schlagwort",
        "Location": "Ort",
-       // ### to add: Records, Targets
+       "Records": "Datensätze",
+       "Targets": "Datenbanken",
 
        "dummy": "dummy"
     },
@@ -67,14 +56,34 @@ mkws.locale_lang = {
        "Date": "Dato",
        "Subject": "Emneord",
        "Location": "Lokation",
-       // ### to add: Records, Targets
+       "Records": "Poster",
+       "Targets": "Baser",
 
        "dummy": "dummy"
     }
 };
 
+// Define empty mkws_config for simple applications that don't define it.
+if (mkws_config == null || typeof mkws_config != 'object') {
+    var mkws_config = {};
+}
+
+// wrapper for jQuery lib
+function _make_mkws_team($, teamName) {
+    if (console && console.log)
+       console.log("run _make_mkws_team(" + (teamName ? teamName : "") + ")");
+
+    // call this function only once
+    if (mkws.init) {
+       alert("_make_mkws_team() called twice: how did that happen?!");
+       return;
+    }
+
+var m_sort = 'relevance';
+var m_filters = [];
+
 // keep time state for debugging
-mkws.debug_time = {
+var m_debug_time = {
     "start": $.now(),
     "last": $.now()
 };
@@ -88,8 +97,8 @@ mkws.debug_function = function (string) {
     }
 
     var now = $.now();
-    var timestamp = ((now - mkws.debug_time.start)/1000).toFixed(3) + " (+" + ((now - mkws.debug_time.last)/1000).toFixed(3) + ") "
-    mkws.debug_time.last = now;
+    var timestamp = ((now - m_debug_time.start)/1000).toFixed(3) + " (+" + ((now - m_debug_time.last)/1000).toFixed(3) + ") "
+    m_debug_time.last = now;
 
     // you need to disable use strict at the top of the file!!!
     if (mkws.debug_level >= 3) {
@@ -208,10 +217,8 @@ Handlebars.registerHelper('commaList', function(items, options) {
 }
 
 
-mkws.sort = mkws_config.sort_default;
-debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to mkws.sort");
-
-mkws.usesessions = mkws_config.use_service_proxy ? false : true;
+m_sort = mkws_config.sort_default;
+debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to m_sort");
 
 if (mkws_config.query_width < 5 || mkws_config.query_width > 150) {
     debug("Reset query width: " + mkws_config.query_width);
@@ -229,6 +236,12 @@ for (var key in mkws_config) {
     }
 }
 
+// protocol independend 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("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
@@ -241,7 +254,7 @@ var my_paz = new pz2( { "onshow": my_onshow,
                     "onterm": my_onterm,
                     "termlist": "xtargets,subject,author",
                     "onbytarget": my_onbytarget,
-                   "usesessions" : mkws.usesessions,
+                    "usesessions" : mkws_config.use_service_proxy ? false : true,
                     "showResponseType": '', // or "json" (for debugging?)
                     "onrecord": my_onrecord } );
 
@@ -258,7 +271,7 @@ var SourceMax = 16;
 var SubjectMax = 10;
 var AuthorMax = 10;
 
-if ($.isNumeric(mkws_config.perpage_default)) {
+if (!isNaN(parseInt(mkws_config.perpage_default))) {
     recPerPage = parseInt(mkws_config.perpage_default);
 }
 
@@ -447,7 +460,7 @@ function newSearch(query, sort, targets, windowid)
        return;
     }
 
-    mkws.filters = []
+    m_filters = []
     redraw_navi(); // ### should use windowid
     resetPage(); // ### the globals it resents should be indexed by windowid
     loadSelect(); // ### should use windowid
@@ -461,7 +474,7 @@ function onSelectDdChange()
     if (!submitted) return false;
     resetPage();
     loadSelect();
-    my_paz.show(0, recPerPage, mkws.sort);
+    my_paz.show(0, recPerPage, m_sort);
     return false;
 }
 
@@ -481,15 +494,15 @@ function triggerSearch (query, sort, targets, windowid)
        mkws.query = query;
     }
     if (sort) {
-       mkws.sort = sort;
+       m_sort = sort;
     }
     if (targets) {
        // ### should support multiple |-separated targets
-       mkws.filters.push({ id: targets, name: targets });
+       m_filters.push({ id: targets, name: targets });
     }
 
-    for (var i in mkws.filters) {
-       var filter = mkws.filters[i];
+    for (var i in m_filters) {
+       var filter = m_filters[i];
        if (filter.id) {
            if (pp2filter)
                pp2filter += ",";
@@ -513,16 +526,16 @@ function triggerSearch (query, sort, targets, windowid)
     if (windowid) {
        params.windowid = windowid;
     }
-    debug("triggerSearch(" + mkws.query + "): filters = " + $.toJSON(mkws.filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
+    debug("triggerSearch(" + mkws.query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
 
-    my_paz.search(mkws.query, recPerPage, mkws.sort, pp2filter, undefined, params);
+    my_paz.search(mkws.query, recPerPage, m_sort, pp2filter, undefined, params);
 }
 
 function loadSelect ()
 {
     if (document.mkwsSelect) {
        if (document.mkwsSelect.mkwsSort)
-           mkws.sort = document.mkwsSelect.mkwsSort.value;
+           m_sort = document.mkwsSelect.mkwsSort.value;
        if (document.mkwsSelect.mkwsPerpage)
            recPerPage = document.mkwsSelect.mkwsPerpage.value;
     }
@@ -532,7 +545,7 @@ function loadSelect ()
 mkws.limitQuery = function (field, value)
 {
     debug("limitQuery(field=" + field + ", value=" + value + ")");
-    mkws.filters.push({ field: field, value: value });
+    m_filters.push({ field: field, value: value });
     redraw_navi();
     resetPage();
     loadSelect();
@@ -544,7 +557,7 @@ mkws.limitQuery = function (field, value)
 mkws.limitTarget  = function (id, name)
 {
     debug("limitTarget(id=" + id + ", name=" + name + ")");
-    mkws.filters.push({ id: id, name: name });
+    m_filters.push({ id: id, name: name });
     redraw_navi();
     resetPage();
     loadSelect();
@@ -556,8 +569,8 @@ mkws.delimitQuery = function (field, value)
 {
     debug("delimitQuery(field=" + field + ", value=" + value + ")");
     var newFilters = [];
-    for (var i in mkws.filters) {
-       var filter = mkws.filters[i];
+    for (var i in m_filters) {
+       var filter = m_filters[i];
        if (filter.field &&
            field == filter.field &&
            value == filter.value) {
@@ -567,7 +580,7 @@ mkws.delimitQuery = function (field, value)
            newFilters.push(filter);
        }
     }
-    mkws.filters = newFilters;
+    m_filters = newFilters;
 
     redraw_navi();
     resetPage();
@@ -581,8 +594,8 @@ mkws.delimitTarget = function (id)
 {
     debug("delimitTarget(id=" + id + ")");
     var newFilters = [];
-    for (var i in mkws.filters) {
-       var filter = mkws.filters[i];
+    for (var i in m_filters) {
+       var filter = m_filters[i];
        if (filter.id) {
            debug("delimitTarget() removing filter " + $.toJSON(filter));
        } else {
@@ -590,7 +603,7 @@ mkws.delimitTarget = function (id)
            newFilters.push(filter);
        }
     }
-    mkws.filters = newFilters;
+    m_filters = newFilters;
 
     redraw_navi();
     resetPage();
@@ -606,11 +619,11 @@ function redraw_navi ()
     if (!navi) return;
 
     var text = "";
-    for (var i in mkws.filters) {
+    for (var i in m_filters) {
        if (text) {
            text += " | ";
        }
-       var filter = mkws.filters[i];
+       var filter = m_filters[i];
        if (filter.id) {
            text += 'Source: <a class="crossout" href="#" onclick="mkws.delimitTarget(' +
                "'" + filter.id + "'" + ');return false;">' + filter.name + '</a>';
@@ -1030,7 +1043,7 @@ function mkws_html_switch() {
 }
 
 function mkws_html_sort() {
-    debug("HTML sort, mkws.sort = '" + mkws.sort + "'");
+    debug("HTML sort, m_sort = '" + m_sort + "'");
     var sort_html = '<select name="mkwsSort" id="mkwsSort">';
 
     for(var i = 0; i < mkws_config.sort_options.length; i++) {
@@ -1039,7 +1052,7 @@ function mkws_html_sort() {
        var val = opt.length == 1 ? opt[0] : opt[1];
 
        sort_html += '<option value="' + key + '"';
-       if (mkws.sort == key || mkws.sort == val) {
+       if (m_sort == key || m_sort == val) {
            sort_html += ' selected="selected"';
        }
        sort_html += '>' + M(val) + '</option>';
@@ -1076,7 +1089,7 @@ function mkws_service_proxy_auth(auth_url, auth_domain, pp2_url) {
     debug("Run service proxy auth URL: " + auth_url);
 
     if (!auth_domain) {
-       auth_domain = pp2_url.replace(/^http:\/\/(.*?)\/.*/, '$1');
+       auth_domain = pp2_url.replace(/^(https?:)?\/\/(.*?)\/.*/, '$2');
        debug("guessed auth_domain '" + auth_domain + "' from pp2_url '" + pp2_url + "'");
     }
 
@@ -1202,9 +1215,16 @@ function M(word) {
  * implement jQuery plugin $.pazpar2({})
  */
 function _mkws_jquery_plugin ($) {
-    // delayed debug, internal variables are set after dom ready
+    var debug_level = 1;
+
     function debug (string) {
-       setTimeout(function() { mkws.debug_function(string); }, 500);
+       if (!debug_level)
+           return;
+
+       if (typeof console === "undefined" || typeof console.log === "undefined")
+           return;
+
+       console.log("jquery.pazpar2: " + string);
     }
 
     function init_popup(obj) {
@@ -1220,7 +1240,7 @@ function _mkws_jquery_plugin ($) {
        // 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 included it after jquery core in the HTML file?");
+           debug("Error: jquery-ui.js is missing, did you include it after jQuery core in the HTML file?");
            return;
        }
 
@@ -1332,13 +1352,13 @@ function _mkws_jquery_plugin ($) {
 });
 };
 
-// wrapper to call _mkws after page load
+// wrapper to call _make_mkws_team() after page load
 (function (j) {
     // enable before page load, so we could call it before mkws() runs
     _mkws_jquery_plugin(j);
 
     $(document).ready(function() {
        // if (console && console.log) console.log("on load ready");
-       _mkws(j);
+       _make_mkws_team(j, null);
     });
 })(jQuery);