X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=ae6740b9cd1301e2b4d0532c50a59fe0fdd2990a;hb=fccd2725f64f0743c371e4eb756a5ec3b3f7a1b6;hp=4bbd5064bbbdf04b584c8db43fcc503ef84afd88;hpb=5b8aaa96003a49e11913a405061b7adbe538bbcd;p=mkws-moved-to-github.git diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js index 4bbd506..ae6740b 100644 --- a/tools/htdocs/mkws.js +++ b/tools/htdocs/mkws.js @@ -71,14 +71,14 @@ Handlebars.registerHelper('commaList', function(items, options) { // Handlebars helper 'translate' -// Set up global mkws object. Contains a hash of session objects, +// Set up global mkws object. Contains a hash of team objects, // indexed by windowid. var mkws = { authenticated: false, - init: false, debug_function: undefined, // will be set during initialisation debug_level: undefined, // will be initialised from mkws_config - sessions: {}, + paz: undefined, // will be set up during initialisation + teams: {}, locale_lang: { "de": { "Authors": "Autoren", @@ -143,27 +143,17 @@ if (mkws_config == null || typeof mkws_config != 'object') { // wrapper for jQuery lib function _make_mkws_team($, teamName) { - // if (console && console.log) // disabled, will fail in IE8 - // 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 that = {}; + var m_termName = teamName; + var m_submitted = false; + var m_query; // initially undefined var m_sort = 'relevance'; var m_filters = []; - 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_totalRec = 0; + var m_recPerPage = 20; + var m_curPage = 1; + var m_curDetRecId = ''; + var m_curDetRecData = null; var m_debug_time = { // Timestamps for logging "start": $.now(), @@ -171,6 +161,10 @@ function _make_mkws_team($, teamName) { }; + // if (console && console.log) // disabled, will fail in IE8 + // console.log("run _make_mkws_team(" + (teamName ? teamName : "") + ")"); + + // Needs to be defined inside _make_mkws_team() so it can see m_debug_time mkws.debug_function = function (string) { if (!mkws.debug_level) @@ -220,7 +214,7 @@ function _make_mkws_team($, teamName) { dummy: "dummy" }; - /* set global debug_level flag early */ + /* Set global debug_level flag early so that debug() works */ if (typeof mkws_config.debug_level !== 'undefined') { mkws.debug_level = mkws_config.debug_level; } else if (typeof config_default.debug_level !== 'undefined') { @@ -271,7 +265,7 @@ function _make_mkws_team($, teamName) { // 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, + mkws.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, @@ -284,7 +278,7 @@ function _make_mkws_team($, teamName) { "onrecord": my_onrecord } ); if (!isNaN(parseInt(mkws_config.perpage_default))) { - recPerPage = parseInt(mkws_config.perpage_default); + m_recPerPage = parseInt(mkws_config.perpage_default); } @@ -292,13 +286,13 @@ function _make_mkws_team($, teamName) { // pz2.js event handlers: // function my_oninit() { - m_paz.stat(); - m_paz.bytarget(); + mkws.paz.stat(); + mkws.paz.bytarget(); } function my_onshow(data) { - totalRec = data.merged; + m_totalRec = data.merged; // move it out var pager = document.getElementById("mkwsPager"); if (pager) { @@ -319,8 +313,8 @@ function _make_mkws_team($, teamName) { html.push('
', renderSummary(hit), '
'); - if (hit.recid == curDetRecId) { - html.push(renderDetails(curDetRecData)); + if (hit.recid == m_curDetRecId) { + html.push(renderDetails(m_curDetRecData)); } } replaceHtml(results, html.join('')); @@ -365,11 +359,11 @@ function _make_mkws_team($, teamName) { for(var i = 0; i < facets.length; i++) { if (facets[i] == "sources") { - add_single_facet(acc, "Sources", data.xtargets, SourceMax, null); + add_single_facet(acc, "Sources", data.xtargets, 16, null); } else if (facets[i] == "subjects") { - add_single_facet(acc, "Subjects", data.subject, SubjectMax, "subject"); + add_single_facet(acc, "Subjects", data.subject, 10, "subject"); } else if (facets[i] == "authors") { - add_single_facet(acc, "Authors", data.author, AuthorMax, "author"); + add_single_facet(acc, "Authors", data.author, 10, "author"); } else { alert("bad facet configuration: '" + facets[i] + "'"); } @@ -405,13 +399,13 @@ function _make_mkws_team($, teamName) { function my_onrecord(data) { // 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; - curDetRecData = data; - var recordDiv = document.getElementById('mkwsRecdiv_'+curDetRecData.recid); - var html = renderDetails(curDetRecData); + m_curDetRecData = data; + var recordDiv = document.getElementById('mkwsRecdiv_'+m_curDetRecData.recid); + var html = renderDetails(m_curDetRecData); recordDiv.innerHTML += html; } @@ -484,24 +478,24 @@ function _make_mkws_team($, teamName) { loadSelect(); // ### should use windowid triggerSearch(query, sort, targets, windowid); mkws.switchView('records'); // In case it's configured to start off as hidden - submitted = true; + m_submitted = true; } function onSelectDdChange() { - if (!submitted) return false; + if (!m_submitted) return false; resetPage(); loadSelect(); - m_paz.show(0, recPerPage, m_sort); + mkws.paz.show(0, m_recPerPage, m_sort); return false; } function resetPage() { - curPage = 1; - totalRec = 0; + m_curPage = 1; + m_totalRec = 0; } @@ -549,7 +543,7 @@ function _make_mkws_team($, teamName) { } debug("triggerSearch(" + m_query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params)); - m_paz.search(m_query, recPerPage, m_sort, pp2filter, undefined, params); + mkws.paz.search(m_query, m_recPerPage, m_sort, pp2filter, undefined, params); } @@ -559,7 +553,7 @@ function _make_mkws_team($, teamName) { if (document.mkwsSelect.mkwsSort) m_sort = document.mkwsSelect.mkwsSort.value; if (document.mkwsSelect.mkwsPerpage) - recPerPage = document.mkwsSelect.mkwsPerpage.value; + m_recPerPage = document.mkwsSelect.mkwsPerpage.value; } } @@ -667,10 +661,10 @@ function _make_mkws_team($, teamName) { { //client indexes pages from 1 but pz2 from 0 var onsides = 6; - var pages = Math.ceil(totalRec / recPerPage); + var pages = Math.ceil(m_totalRec / m_recPerPage); - var firstClkbl = ( curPage - onsides > 0 ) - ? curPage - onsides + var firstClkbl = ( m_curPage - onsides > 0 ) + ? m_curPage - onsides : 1; var lastClkbl = firstClkbl + 2*onsides < pages @@ -678,14 +672,14 @@ function _make_mkws_team($, teamName) { : pages; var prev = '<< ' + M('Prev') + ' | '; - if (curPage > 1) + if (m_curPage > 1) prev = '' +'<< ' + M('Prev') + ' | '; var middle = ''; for(var i = firstClkbl; i <= lastClkbl; i++) { var numLabel = i; - if(i == curPage) + if(i == m_curPage) numLabel = '' + i + ''; middle += ' ' @@ -693,7 +687,7 @@ function _make_mkws_team($, teamName) { } var next = ' | ' + M('Next') + ' >>'; - if (pages - curPage > 0) + if (pages - m_curPage > 0) next = ' | ' + M('Next') + ' >>'; @@ -712,23 +706,23 @@ function _make_mkws_team($, teamName) { mkws.showPage = function (pageNum) { - curPage = pageNum; - m_paz.showPage( curPage - 1 ); + m_curPage = pageNum; + mkws.paz.showPage( m_curPage - 1 ); } // simple paging functions mkws.pagerNext = function () { - if ( totalRec - recPerPage*curPage > 0) { - m_paz.showNext(); - curPage++; + if ( m_totalRec - m_recPerPage*m_curPage > 0) { + mkws.paz.showNext(); + m_curPage++; } } mkws.pagerPrev = function () { - if ( m_paz.showPrev() != false ) - curPage--; + if ( mkws.paz.showPrev() != false ) + m_curPage--; } @@ -770,8 +764,8 @@ function _make_mkws_team($, teamName) { // detailed record drawing mkws.showDetails = function (prefixRecId) { var recId = prefixRecId.replace('mkwsRec_', ''); - var oldRecId = curDetRecId; - curDetRecId = recId; + var oldRecId = m_curDetRecId; + m_curDetRecId = recId; // remove current detailed view if any var detRecordDiv = document.getElementById('mkwsDet_'+oldRecId); @@ -781,12 +775,12 @@ function _make_mkws_team($, teamName) { // if the same clicked, just hide if (recId == oldRecId) { - curDetRecId = ''; - curDetRecData = null; + m_curDetRecId = ''; + m_curDetRecData = null; return; } // request the record - m_paz.record(recId); + mkws.paz.record(recId); } @@ -1248,8 +1242,9 @@ function _make_mkws_team($, teamName) { } })(); - // done - mkws.init = true; + // Bizarrely, 'that' is just an empty hash. All its state is in + // the closure variables defined earlier in this function. + return that; }; @@ -1398,11 +1393,56 @@ 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); + } // 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"); - _make_mkws_team(j, null); + 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 + 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: + //
+ $('.mkwsResults, .mkwsRecords, .mkwsTermlists').each(function () { + var node = this; + var classes = this.className; + var list = classes.split(/\s+/) + var tname; + for (var i = 0; i < list.length; i++) { + var cname = list[i]; + if (cname.match(/^mkwsTeam_/)) { + tname = cname.replace(/^mkwsTeam_/, ''); + } + } + 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 { + mkws.teams[tname] = _make_mkws_team(j, tname); + log("Made MKWS team '" + tname + "'"); + } + }); + }); })(jQuery);