X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=4bbd5064bbbdf04b584c8db43fcc503ef84afd88;hb=5b8aaa96003a49e11913a405061b7adbe538bbcd;hp=12f3f710de31677386d47b42eac24677c9e7051a;hpb=cbc77f8ae0471f0c2702a78743aebc711a15e781;p=mkws-moved-to-github.git diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js index 12f3f71..4bbd506 100644 --- a/tools/htdocs/mkws.js +++ b/tools/htdocs/mkws.js @@ -2,10 +2,74 @@ "use strict"; // HTML5: disable for debug_level >= 2 + +// Handlebars helpers +Handlebars.registerHelper('json', function(obj) { + return $.toJSON(obj); +}); + + +Handlebars.registerHelper('translate', function(s) { + debug("translating '" + s + "'"); + return mkws.M(s); +}); + + +// We need {{attr '@name'}} because Handlebars can't parse {{@name}} +Handlebars.registerHelper('attr', function(attrName) { + return this[attrName]; +}); + + +/* + * Use as follows: {{#if-any NAME1 having="NAME2"}} + * Applicable when NAME1 is the name of an array + * The guarded code runs only if at least one element of the NAME1 + * array has a subelement called NAME2. + */ +Handlebars.registerHelper('if-any', function(items, options) { + var having = options.hash.having; + for (var i in items) { + var item = items[i] + if (!having || item[having]) { + return options.fn(this); + } + } + return ""; +}); + + +Handlebars.registerHelper('first', function(items, options) { + var having = options.hash.having; + for (var i in items) { + var item = items[i] + if (!having || item[having]) { + return options.fn(item); + } + } + return ""; +}); + + +Handlebars.registerHelper('commaList', function(items, options) { + var out = ""; + + for (var i in items) { + if (i > 0) out += ", "; + out += options.fn(items[i]) + } + + return out; +}); + + + // Some functions are visible to be called from outside code, namely // generated HTML: mkws.switchView(), showDetails(), limitTarget(), // limitQuery(), delimitTarget(), delimitQuery(), pagerPrev(), -// pagerNext(), showPage() +// pagerNext(), showPage(). Also mkws.M() is made available for the +// Handlebars helper 'translate' + // Set up global mkws object. Contains a hash of session objects, // indexed by windowid. @@ -70,11 +134,13 @@ var mkws = { } }; + // 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) // disabled, will fail in IE8 @@ -88,13 +154,24 @@ function _make_mkws_team($, teamName) { var m_sort = 'relevance'; var m_filters = []; - - // keep time state for debugging + var curPage = 1; + var recPerPage = 20; + var totalRec = 0; + var curDetRecId = ''; + var curDetRecData = null; + var submitted = false; + var SourceMax = 16; + var SubjectMax = 10; + var AuthorMax = 10; + var m_query; // initially undefined var m_debug_time = { + // Timestamps for logging "start": $.now(), "last": $.now() }; + + // Needs to be defined inside _make_mkws_team() so it can see m_debug_time mkws.debug_function = function (string) { if (!mkws.debug_level) return; @@ -119,65 +196,6 @@ function _make_mkws_team($, teamName) { debug("start running MKWS"); - Handlebars.registerHelper('json', function(obj) { - return $.toJSON(obj); - }); - - - Handlebars.registerHelper('translate', function(s) { - debug("translating '" + s + "'"); - return M(s); - }); - - - // We need {{attr '@name'}} because Handlebars can't parse {{@name}} - Handlebars.registerHelper('attr', function(attrName) { - return this[attrName]; - }); - - - /* - * Use as follows: {{#if-any NAME1 having="NAME2"}} - * Applicable when NAME1 is the name of an array - * The guarded code runs only if at least one element of the NAME1 - * array has a subelement called NAME2. - */ - Handlebars.registerHelper('if-any', function(items, options) { - var having = options.hash.having; - for (var i in items) { - var item = items[i] - if (!having || item[having]) { - return options.fn(this); - } - } - return ""; - }); - - - Handlebars.registerHelper('first', function(items, options) { - var having = options.hash.having; - for (var i in items) { - var item = items[i] - if (!having || item[having]) { - return options.fn(item); - } - } - return ""; - }); - - - Handlebars.registerHelper('commaList', function(items, options) { - var out = ""; - - for (var i in items) { - if (i > 0) out += ", "; - out += options.fn(items[i]) - } - - return out; - }); - - { /* default mkws config */ @@ -265,22 +283,11 @@ function _make_mkws_team($, teamName) { "showResponseType": '', // or "json" (for debugging?) "onrecord": my_onrecord } ); - // some state vars - var curPage = 1; - var recPerPage = 20; - var totalRec = 0; - var curDetRecId = ''; - var curDetRecData = null; - var submitted = false; - var SourceMax = 16; - var SubjectMax = 10; - var AuthorMax = 10; - var m_query; // initially undefined - if (!isNaN(parseInt(mkws_config.perpage_default))) { recPerPage = parseInt(mkws_config.perpage_default); } + // // pz2.js event handlers: // @@ -289,6 +296,7 @@ function _make_mkws_team($, teamName) { m_paz.bytarget(); } + function my_onshow(data) { totalRec = data.merged; // move it out @@ -340,6 +348,7 @@ function _make_mkws_team($, teamName) { '' + M('Retrieved records') + ': ' + data.records + '/' + data.hits + ''; } + function my_onterm(data) { // no facets if (!mkws_config.facets || mkws_config.facets.length == 0) { @@ -371,6 +380,7 @@ function _make_mkws_team($, teamName) { replaceHtml(termlist, acc.join('')); } + function add_single_facet(acc, caption, data, max, pzIndex) { acc.push('
'); acc.push('
' + M(caption) + '
'); @@ -392,6 +402,7 @@ function _make_mkws_team($, teamName) { acc.push('
'); } + function my_onrecord(data) { // FIXME: record is async!! clearTimeout(m_paz.recordTimer); @@ -404,6 +415,7 @@ function _make_mkws_team($, teamName) { recordDiv.innerHTML += html; } + function my_onbytarget(data) { var targetDiv = document.getElementById("mkwsBytarget"); if (!targetDiv) { @@ -434,6 +446,7 @@ function _make_mkws_team($, teamName) { //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// + // wait until the DOM is ready function domReady () { @@ -447,6 +460,7 @@ function _make_mkws_team($, teamName) { } } + // when search button pressed function onFormSubmitEventHandler() { @@ -454,6 +468,7 @@ function _make_mkws_team($, teamName) { return false; } + function newSearch(query, sort, targets, windowid) { debug("newSearch: " + query); @@ -472,6 +487,7 @@ function _make_mkws_team($, teamName) { submitted = true; } + function onSelectDdChange() { if (!submitted) return false; @@ -481,12 +497,14 @@ function _make_mkws_team($, teamName) { return false; } + function resetPage() { curPage = 1; totalRec = 0; } + function triggerSearch (query, sort, targets, windowid) { var pp2filter = ""; @@ -534,6 +552,7 @@ function _make_mkws_team($, teamName) { m_paz.search(m_query, recPerPage, m_sort, pp2filter, undefined, params); } + function loadSelect () { if (document.mkwsSelect) { @@ -544,6 +563,7 @@ function _make_mkws_team($, teamName) { } } + // limit the query after clicking the facet mkws.limitQuery = function (field, value) { @@ -556,6 +576,7 @@ function _make_mkws_team($, teamName) { return false; } + // limit by target functions mkws.limitTarget = function (id, name) { @@ -568,6 +589,7 @@ function _make_mkws_team($, teamName) { return false; } + mkws.delimitQuery = function (field, value) { debug("delimitQuery(field=" + field + ", value=" + value + ")"); @@ -687,14 +709,15 @@ function _make_mkws_team($, teamName) { + prev + predots + middle + postdots + next + ''; } + mkws.showPage = function (pageNum) { curPage = pageNum; m_paz.showPage( curPage - 1 ); } - // simple paging functions + // simple paging functions mkws.pagerNext = function () { if ( totalRec - recPerPage*curPage > 0) { m_paz.showNext(); @@ -702,13 +725,14 @@ function _make_mkws_team($, teamName) { } } + mkws.pagerPrev = function () { if ( m_paz.showPrev() != false ) curPage--; } - // switching view between targets and records + // switching view between targets and records mkws.switchView = function(view) { debug("switchView: " + view); @@ -742,6 +766,7 @@ function _make_mkws_team($, teamName) { } } + // detailed record drawing mkws.showDetails = function (prefixRecId) { var recId = prefixRecId.replace('mkwsRec_', ''); @@ -764,6 +789,7 @@ function _make_mkws_team($, teamName) { m_paz.record(recId); } + function replaceHtml(el, html) { var oldEl = typeof el === "string" ? document.getElementById(el) : el; /*@cc_on // Pure innerHTML is slightly faster in IE @@ -778,6 +804,7 @@ function _make_mkws_team($, teamName) { return newEl; }; + function renderDetails(data, marker) { var template = loadTemplate("Record"); @@ -1020,6 +1047,7 @@ function _make_mkws_team($, teamName) { return nvpair; } + function mkws_set_lang() { var lang = parseQuerystring().lang || mkws_config.lang; if (!lang || !mkws.locale_lang[lang]) { @@ -1032,6 +1060,7 @@ function _make_mkws_team($, teamName) { return mkws_config.lang; } + function mkws_html_switch() { debug("HTML switch"); @@ -1047,6 +1076,7 @@ function _make_mkws_team($, teamName) { $("#mkwsTargets").css("display", "none"); } + function mkws_html_sort() { debug("HTML sort, m_sort = '" + m_sort + "'"); var sort_html = ''; @@ -1085,6 +1116,7 @@ function _make_mkws_team($, teamName) { return perpage_html; } + /* * Run service-proxy authentication in background (after page load). * The username/password is configured in the apache config file @@ -1120,6 +1152,7 @@ function _make_mkws_team($, teamName) { }); } + /* create locale language menu */ function mkws_html_lang() { var lang_default = "en"; @@ -1162,6 +1195,7 @@ function _make_mkws_team($, teamName) { $("#mkwsLang").html(data); } + function mkws_resize_page () { var list = ["mkwsSwitch"]; @@ -1189,6 +1223,7 @@ function _make_mkws_team($, teamName) { } }; + /* locale */ function M(word) { var lang = mkws_config.lang; @@ -1198,6 +1233,8 @@ function _make_mkws_team($, teamName) { return mkws.locale_lang[lang][word] || word; } + mkws.M = M; // so the Handlebars helper can use it + // main (function() {