X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=93a40a0f42fb8c1657d61b8a114e9d72a74f27d2;hb=67e6ff2dcfc17cb892c17a1ed35ecf3b64028844;hp=2484229c192c98d2ece24c55325de40e6b007323;hpb=72516b553876f01f55df93e0001fdfc4fc51b0aa;p=mkws-moved-to-github.git diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js index 2484229..93a40a0 100644 --- a/tools/htdocs/mkws.js +++ b/tools/htdocs/mkws.js @@ -226,49 +226,24 @@ function team($, teamName) { debug("start running MKWS"); m_sort = mkws_config.sort_default; - debug("copied mkws_config.sort_default '" + mkws_config.sort_default + "' to m_sort"); - - // 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 independent links: " + mkws_config.pazpar2_url); - } + m_perpage = mkws_config.perpage_default; 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 - m_paz = new pz2({ "onshow": onShow, - "windowid": teamName, - "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way + m_paz = new pz2({ "windowid": teamName, "pazpar2path": mkws_config.pazpar2_url, + "usesessions" : mkws_config.use_service_proxy ? false : true, "oninit": onInit, + "onbytarget": onBytarget, "onstat": onStat, "onterm": (mkws_config.facets.length ? onTerm : undefined), - "termlist": mkws_config.facets.join(','), - "onbytarget": onBytarget, - "usesessions" : mkws_config.use_service_proxy ? false : true, - "showResponseType": '', // or "json" (for debugging?) - "onrecord": onRecord }); - - if (!isNaN(parseInt(mkws_config.perpage_default))) { - m_perpage = parseInt(mkws_config.perpage_default); - } - - - // Finds the node of the specified class within the current team - // Multiple OR-clauses separated by commas are handled - // More complex cases may not work - // - function findnode(selector, teamName) { - teamName = teamName || m_teamName; - - selector = selector.split(',').map(function(s) { - return s + '.mkwsTeam_' + teamName; - }).join(','); - - return $(selector); - } + "onshow": onShow, + "onrecord": onRecord, + "showtime": 500, //each timer (show, stat, term, bytarget) can be specified this way + "termlist": mkws_config.facets.join(',') + }); // @@ -281,50 +256,38 @@ function team($, teamName) { } - function onShow(data, teamName) { - debug("show"); - m_totalRec = data.merged; - - var pager = findnode(".mkwsPager"); - if (pager.length) { - pager.html(drawPager(data)) - } + function onBytarget(data, teamName) { + debug("target"); + var node = findnode('.mkwsBytarget'); + if (node.length === 0) return; - var results = findnode(".mkwsRecords"); - if (!results.length) - return; + var table ='' + + '' + + '' + + '' + + '' + + '' + + ''; - var html = []; - for (var i = 0; i < data.hits.length; i++) { - var hit = data.hits[i]; - html.push('
', - renderSummary(hit), - '
'); - if (hit.recid == m_curDetRecId) { - if (m_curDetRecData) - html.push(renderDetails(m_curDetRecData)); - } + for (var i = 0; i < data.length; i++) { + table += ""; } - results.html(html.join('')); - } - - function renderSummary(hit) - { - var template = loadTemplate("Summary"); - hit._id = "mkwsRec_" + hit.recid; - hit._onclick = "mkws.showDetails('" + m_teamName + "', this.id);return false;" - return template(hit); + table += '
' + M('Target ID') + '' + M('Hits') + '' + M('Diags') + '' + M('Records') + '' + M('State') + '
" + data[i].id + + "" + data[i].hits + + "" + data[i].diagnostic + + "" + data[i].records + + "" + data[i].state + "
'; + node.html(table); } function onStat(data, teamName) { debug("stat"); - var stat = findnode('.mkwsStat'); - if (stat.length === 0) - return; + var node = findnode('.mkwsStat'); + if (node.length === 0) return; - stat.html('' + M('Status info') + '' + + node.html('' + M('Status info') + '' + ' -- ' + '' + M('Active clients') + ': ' + data.activeclients + '/' + data.clients + '' + ' -- ' + @@ -367,6 +330,48 @@ function team($, teamName) { } + function onShow(data, teamName) { + debug("show"); + m_totalRec = data.merged; + + var pager = findnode(".mkwsPager"); + if (pager.length) { + pager.html(drawPager(data)) + } + + var results = findnode(".mkwsRecords"); + if (!results.length) + return; + + var html = []; + for (var i = 0; i < data.hits.length; i++) { + var hit = data.hits[i]; + html.push('
', + renderSummary(hit), + '
'); + if (hit.recid == m_curDetRecId) { + if (m_curDetRecData) + html.push(renderDetails(m_curDetRecData)); + } + } + results.html(html.join('')); + } + + + function onRecord(data, args, teamName) { + debug("record"); + // FIXME: record is async!! + clearTimeout(m_paz.recordTimer); + // in case on_show was faster to redraw element + var detRecordDiv = document.getElementById('mkwsDet_' + teamName + '_' + data.recid); + if (detRecordDiv) return; + m_curDetRecData = data; + var recordDiv = document.getElementById('mkwsRecdiv_' + teamName + '_' + m_curDetRecData.recid); + var html = renderDetails(m_curDetRecData); + recordDiv.innerHTML += html; + } + + function addSingleFacet(acc, caption, data, max, pzIndex) { acc.push('
'); acc.push('
' + M(caption) + '
'); @@ -402,47 +407,60 @@ function team($, teamName) { } - function onRecord(data, args, teamName) { - debug("record: teamName=" + teamName + ", m_teamName=" + m_teamName); - // FIXME: record is async!! - clearTimeout(m_paz.recordTimer); - // in case on_show was faster to redraw element - var detRecordDiv = document.getElementById('mkwsDet_' + teamName + '_' + data.recid); - if (detRecordDiv) return; - m_curDetRecData = data; - var recordDiv = document.getElementById('mkwsRecdiv_' + teamName + '_' + m_curDetRecData.recid); - var html = renderDetails(m_curDetRecData); - recordDiv.innerHTML += html; - } + function drawPager (data) + { + var s = '
' + M('Displaying') + ': ' + + (data.start + 1) + ' ' + M('to') + ' ' + (data.start + data.num) + + ' ' + M('of') + ' ' + data.merged + ' (' + M('found') + ': ' + + data.total + ')
'; + //client indexes pages from 1 but pz2 from 0 + var onsides = 6; + var pages = Math.ceil(m_totalRec / m_perpage); - function onBytarget(data, teamName) { - debug("target"); - var targetDiv = findnode('.mkwsBytarget'); - if (!targetDiv) { - return; - } + var firstClkbl = (m_curPage - onsides > 0) + ? m_curPage - onsides + : 1; - var table ='' + - '' + - '' + - '' + - '' + - '' + - ''; + var lastClkbl = firstClkbl + 2*onsides < pages + ? firstClkbl + 2*onsides + : pages; - for (var i = 0; i < data.length; i++) { - table += ""; + var prev = '<< ' + M('Prev') + ' | '; + if (m_curPage > 1) + prev = '' + +'<< ' + M('Prev') + ' | '; + + var middle = ''; + for(var i = firstClkbl; i <= lastClkbl; i++) { + var numLabel = i; + if(i == m_curPage) + numLabel = '' + i + ''; + + middle += ' ' + + numLabel + ' '; } - table += '
' + M('Target ID') + '' + M('Hits') + '' + M('Diags') + '' + M('Records') + '' + M('State') + '
" + data[i].id + - "" + data[i].hits + - "" + data[i].diagnostic + - "" + data[i].records + - "" + data[i].state + "
'; - targetDiv.html(table); + var next = ' | ' + M('Next') + ' >>'; + if (pages - m_curPage > 0) + next = ' | ' + + M('Next') + ' >>'; + + var predots = ''; + if (firstClkbl > 1) + predots = '...'; + + var postdots = ''; + if (lastClkbl < pages) + postdots = '...'; + + s += '
' + + prev + predots + middle + postdots + next + '
'; + + return s; } + //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -492,6 +510,21 @@ function team($, teamName) { } + function loadSelect () + { + var node = findnode('.mkwsSort'); + if (node.length && node.val() != m_sort) { + debug("changing m_sort from " + m_sort + " to " + node.val()); + m_sort = node.val(); + } + node = findnode('.mkwsPerpage'); + if (node.length && node.val() != m_perpage) { + debug("changing m_perpage from " + m_perpage + " to " + node.val()); + m_perpage = node.val(); + } + } + + function triggerSearch (query, sort, targets) { var pp2filter = ""; @@ -539,21 +572,6 @@ function team($, teamName) { } - function loadSelect () - { - var node = findnode('.mkwsSort'); - if (node.length && node.val() != m_sort) { - debug("changing m_sort from " + m_sort + " to " + node.val()); - m_sort = node.val(); - } - node = findnode('.mkwsPerpage'); - if (node.length && node.val() != m_perpage) { - debug("changing m_perpage from " + m_perpage + " to " + node.val()); - m_perpage = node.val(); - } - } - - // limit by target functions that.limitTarget = function (id, name) { @@ -653,60 +671,6 @@ function team($, teamName) { } - function drawPager (data) - { - var s = '
' + M('Displaying') + ': ' - + (data.start + 1) + ' ' + M('to') + ' ' + (data.start + data.num) + - ' ' + M('of') + ' ' + data.merged + ' (' + M('found') + ': ' - + data.total + ')
'; - - //client indexes pages from 1 but pz2 from 0 - var onsides = 6; - var pages = Math.ceil(m_totalRec / m_perpage); - - var firstClkbl = (m_curPage - onsides > 0) - ? m_curPage - onsides - : 1; - - var lastClkbl = firstClkbl + 2*onsides < pages - ? firstClkbl + 2*onsides - : pages; - - var prev = '<< ' + M('Prev') + ' | '; - if (m_curPage > 1) - prev = '' - +'<< ' + M('Prev') + ' | '; - - var middle = ''; - for(var i = firstClkbl; i <= lastClkbl; i++) { - var numLabel = i; - if(i == m_curPage) - numLabel = '' + i + ''; - - middle += ' ' - + numLabel + ' '; - } - - var next = ' | ' + M('Next') + ' >>'; - if (pages - m_curPage > 0) - next = ' | ' - + M('Next') + ' >>'; - - var predots = ''; - if (firstClkbl > 1) - predots = '...'; - - var postdots = ''; - if (lastClkbl < pages) - postdots = '...'; - - s += '
' - + prev + predots + middle + postdots + next + '
'; - - return s; - } - - that.showPage = function (pageNum) { m_curPage = pageNum; @@ -771,135 +735,21 @@ function team($, teamName) { var oldRecId = m_curDetRecId; m_curDetRecId = recId; - // remove current detailed view if any - var detRecordDiv = document.getElementById('mkwsDet_' + m_teamName + '_' + oldRecId); - // lovin DOM! - if (detRecordDiv) - detRecordDiv.parentNode.removeChild(detRecordDiv); - - // if the same clicked, just hide - if (recId == oldRecId) { - m_curDetRecId = ''; - m_curDetRecData = null; - return; - } - // request the record - debug("showDetails() requesting record '" + recId + "'"); - m_paz.record(recId); - } - - - function renderDetails(data, marker) - { - var template = loadTemplate("Record"); - var details = template(data); - return '
' + details + '
'; - } - - - function loadTemplate(name) - { - var template = m_template[name]; - - if (template === undefined) { - // Fall back to generic template if there is no team-specific one - var node = findnode(".mkwsTemplate_" + name); - if (!node.length) { - node = findnode(".mkwsTemplate_" + name, "ALL"); - } - - var source = node.html(); - if (!source) { - source = defaultTemplate(name); - } - - template = Handlebars.compile(source); - debug("compiled template '" + name + "'"); - m_template[name] = template; - } - - return template; - } - + // remove current detailed view if any + var detRecordDiv = document.getElementById('mkwsDet_' + m_teamName + '_' + oldRecId); + // lovin DOM! + if (detRecordDiv) + detRecordDiv.parentNode.removeChild(detRecordDiv); - function defaultTemplate(name) - { - if (name === 'Record') { - return '\ -\ - \ - \ - \ - \ - {{#if md-date}}\ - \ - \ - \ - \ - {{/if}}\ - {{#if md-author}}\ - \ - \ - \ - \ - {{/if}}\ - {{#if md-electronic-url}}\ - \ - \ - \ - \ - {{/if}}\ - {{#if-any location having="md-subject"}}\ - \ - \ - \ - \ - {{/if-any}}\ - \ - \ - \ - \ -
{{translate "Title"}}\ - {{md-title}}\ - {{#if md-title-remainder}}\ - ({{md-title-remainder}})\ - {{/if}}\ - {{#if md-title-responsibility}}\ - {{md-title-responsibility}}\ - {{/if}}\ -
{{translate "Date"}}{{md-date}}
{{translate "Author"}}{{md-author}}
{{translate "Links"}}\ - {{#each md-electronic-url}}\ - Link{{index1}}\ - {{/each}}\ -
{{translate "Subject"}}\ - {{#first location having="md-subject"}}\ - {{#if md-subject}}\ - {{#commaList md-subject}}\ - {{this}}{{/commaList}}\ - {{/if}}\ - {{/first}}\ -
{{translate "Locations"}}\ - {{#commaList location}}\ - {{attr "@name"}}{{/commaList}}\ -
\ -'; - } else if (name === "Summary") { - return '\ -\ - {{md-title}}\ -\ -{{#if md-title-remainder}}\ - {{md-title-remainder}}\ -{{/if}}\ -{{#if md-title-responsibility}}\ - {{md-title-responsibility}}\ -{{/if}}\ -'; + // if the same clicked, just hide + if (recId == oldRecId) { + m_curDetRecId = ''; + m_curDetRecData = null; + return; } - - var s = "There is no default '" + name +"' template!"; - alert(s); - return s; + // request the record + debug("showDetails() requesting record '" + recId + "'"); + m_paz.record(recId); } @@ -992,19 +842,6 @@ function team($, teamName) { } - // implement $.parseQuerystring() for parsing URL parameters - function parseQuerystring() { - var nvpair = {}; - var qs = window.location.search.replace('?', ''); - var pairs = qs.split('&'); - $.each(pairs, function(i, v){ - var pair = v.split('='); - nvpair[pair[0]] = pair[1]; - }); - return nvpair; - } - - function mkwsSetLang() { var lang = parseQuerystring().lang || mkws_config.lang; if (!lang || !mkws.locale_lang[lang]) { @@ -1156,6 +993,19 @@ function team($, teamName) { } + // implement $.parseQuerystring() for parsing URL parameters + function parseQuerystring() { + var nvpair = {}; + var qs = window.location.search.replace('?', ''); + var pairs = qs.split('&'); + $.each(pairs, function(i, v){ + var pair = v.split('='); + nvpair[pair[0]] = pair[1]; + }); + return nvpair; + } + + // This function is taken from a StackOverflow answer // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144 // ### should we unify this and parseQuerystring()? @@ -1179,6 +1029,144 @@ function team($, teamName) { mkws.M = M; // so the Handlebars helper can use it + // Finds the node of the specified class within the current team + // Multiple OR-clauses separated by commas are handled + // More complex cases may not work + // + function findnode(selector, teamName) { + teamName = teamName || m_teamName; + + selector = selector.split(',').map(function(s) { + return s + '.mkwsTeam_' + teamName; + }).join(','); + + return $(selector); + } + + + function renderSummary(hit) + { + var template = loadTemplate("Summary"); + hit._id = "mkwsRec_" + hit.recid; + hit._onclick = "mkws.showDetails('" + m_teamName + "', this.id);return false;" + return template(hit); + } + + + function renderDetails(data, marker) + { + var template = loadTemplate("Record"); + var details = template(data); + return '
' + details + '
'; + } + + + function loadTemplate(name) + { + var template = m_template[name]; + + if (template === undefined) { + // Fall back to generic template if there is no team-specific one + var node = findnode(".mkwsTemplate_" + name); + if (!node.length) { + node = findnode(".mkwsTemplate_" + name, "ALL"); + } + + var source = node.html(); + if (!source) { + source = defaultTemplate(name); + } + + template = Handlebars.compile(source); + debug("compiled template '" + name + "'"); + m_template[name] = template; + } + + return template; + } + + + function defaultTemplate(name) + { + if (name === 'Record') { + return '\ +\ + \ + \ + \ + \ + {{#if md-date}}\ + \ + \ + \ + \ + {{/if}}\ + {{#if md-author}}\ + \ + \ + \ + \ + {{/if}}\ + {{#if md-electronic-url}}\ + \ + \ + \ + \ + {{/if}}\ + {{#if-any location having="md-subject"}}\ + \ + \ + \ + \ + {{/if-any}}\ + \ + \ + \ + \ +
{{translate "Title"}}\ + {{md-title}}\ + {{#if md-title-remainder}}\ + ({{md-title-remainder}})\ + {{/if}}\ + {{#if md-title-responsibility}}\ + {{md-title-responsibility}}\ + {{/if}}\ +
{{translate "Date"}}{{md-date}}
{{translate "Author"}}{{md-author}}
{{translate "Links"}}\ + {{#each md-electronic-url}}\ + Link{{index1}}\ + {{/each}}\ +
{{translate "Subject"}}\ + {{#first location having="md-subject"}}\ + {{#if md-subject}}\ + {{#commaList md-subject}}\ + {{this}}{{/commaList}}\ + {{/if}}\ + {{/first}}\ +
{{translate "Locations"}}\ + {{#commaList location}}\ + {{attr "@name"}}{{/commaList}}\ +
\ +'; + } else if (name === "Summary") { + return '\ +\ + {{md-title}}\ +\ +{{#if md-title-remainder}}\ + {{md-title-remainder}}\ +{{/if}}\ +{{#if md-title-responsibility}}\ + {{md-title-responsibility}}\ +{{/if}}\ +'; + } + + var s = "There is no default '" + name +"' template!"; + alert(s); + return s; + } + + // main (function() { try { @@ -1431,6 +1419,12 @@ function team($, teamName) { $(document).ready(function() { mkws.resizePage() }); } + // 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 independent links: " + mkws_config.pazpar2_url); + } + // Backwards compatibility: set new magic class names on any // elements that have the old magic IDs. var ids = [ "Switch", "Lang", "Search", "Pager", "Navi",