X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=1a4f528912bd8245aedc45b07c7fa37d73763e57;hb=7996293a0382e932c323f62d793d3fbb1bee9e95;hp=a15bfcd77b50bd3363719b88af9e11bb41e2d01a;hpb=ecd223d99857e8509e5fd3ae4d8e9e6d15ce73e0;p=mkws-moved-to-github.git diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js index a15bfcd..1a4f528 100644 --- a/tools/htdocs/mkws.js +++ b/tools/htdocs/mkws.js @@ -142,29 +142,6 @@ var mkws = { }; -// The following PubSub code is modified from the jQuery manual: -// https://api.jquery.com/jQuery.Callbacks/ -// -// Use as: -// mkws.queue("eventName").subscribe(function(param1, param2 ...) { ... }); -// mkws.queue("eventName").publish(arg1, arg2, ...); - -(function() { - var queues = {}; - mkws.queue = function(id) { - if (!queues[id]) { - var callbacks = $.Callbacks(); - queues[id] = { - publish: callbacks.fire, - subscribe: callbacks.add, - unsubscribe: callbacks.remove - }; - } - return queues[id]; - } -}()); - - // Define empty mkws_config for simple applications that don't define it. if (mkws_config == null || typeof mkws_config != 'object') { var mkws_config = {}; @@ -179,10 +156,62 @@ function widget($, team, type, node) { node: node }; - // ### More to do here, surely: e.g. wiring into the team - mkws.debug("made widget(team=" + team + ", type=" + type + ", node=" + node); + var M = mkws.M; + + if (type === 'Targets') { + promoteTargets(); + } else if (type === 'Stat') { + promoteStat(); + } else { + // ### Handle other types here + } + mkws.debug("made widget(team=" + team + ", type=" + type + ", node=" + node); return that; + + + // Functions follow for promoting the regular widget object into + // widgets of specific types. These could be moved outside of the + // widget object, or even into their own source files. + + function promoteTargets() { + team.queue("targets").subscribe(function(data) { + if (node.length === 0) alert("huh?!"); + + var table ='' + + '' + + '' + + '' + + '' + + '' + + ''; + + for (var i = 0; i < data.length; i++) { + table += ""; + } + + 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 + "
'; + var subnode = $(node).children('.mkwsBytarget'); + subnode.html(table); + }); + } + + + function promoteStat() { + team.queue("stat").subscribe(function(data) { + if (node.length === 0) alert("huh?!"); + + $(node).html('' + M('Status info') + '' + + ' -- ' + + '' + M('Active clients') + ': ' + data.activeclients + '/' + data.clients + '' + + ' -- ' + + '' + M('Retrieved records') + ': ' + data.records + '/' + data.hits + ''); + }); + } } @@ -197,6 +226,7 @@ function widget($, team, type, node) { function team($, teamName) { var that = {}; var m_teamName = teamName; + that.name = function() { return m_teamName; } var m_submitted = false; var m_query; // initially undefined var m_sort; // will be set below @@ -249,56 +279,26 @@ function team($, teamName) { // // pz2.js event handlers: // - function onInit(teamName) { + function onInit() { debug("init"); m_paz.stat(); m_paz.bytarget(); } - function onBytarget(data, teamName) { + function onBytarget(data) { debug("target"); - var targetDiv = findnode('.mkwsBytarget'); - if (!targetDiv) { - return; - } - - var table ='' + - '' + - '' + - '' + - '' + - '' + - ''; - - for (var i = 0; i < data.length; i++) { - table += ""; - } - - 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); + queue("targets").publish(data); } - function onStat(data, teamName) { + function onStat(data) { debug("stat"); - var stat = findnode('.mkwsStat'); - if (stat.length === 0) - return; - - stat.html('' + M('Status info') + '' + - ' -- ' + - '' + M('Active clients') + ': ' + data.activeclients + '/' + data.clients + '' + - ' -- ' + - '' + M('Retrieved records') + ': ' + data.records + '/' + data.hits + ''); + queue("stat").publish(data); } - function onTerm(data, teamName) { + function onTerm(data) { debug("term"); var node = findnode(".mkwsTermlists"); if (node.length == 0) return; @@ -362,16 +362,17 @@ function team($, teamName) { function onRecord(data, args, teamName) { - debug("record: teamName=" + teamName + ", m_teamName=" + m_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; + // Can't use jQuery's $('#x') syntax to find this ID, because it contains spaces. var recordDiv = document.getElementById('mkwsRecdiv_' + teamName + '_' + m_curDetRecData.recid); var html = renderDetails(m_curDetRecData); - recordDiv.innerHTML += html; + $(recordDiv).append(html); } @@ -410,6 +411,60 @@ 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; + } + + //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -452,6 +507,31 @@ function team($, teamName) { } + function redrawNavi () + { + var navi = findnode('.mkwsNavi'); + if (!navi) return; + + var text = ""; + for (var i in m_filters) { + if (text) { + text += " | "; + } + var filter = m_filters[i]; + if (filter.id) { + text += M('source') + ': ' + filter.name + ''; + } else { + text += M(filter.field) + ': ' + filter.value + ''; + } + } + + navi.html(text); + } + + function resetPage() { m_curPage = 1; @@ -459,6 +539,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 = ""; @@ -506,21 +601,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) { @@ -595,85 +675,6 @@ function team($, teamName) { } - function redrawNavi () - { - var navi = findnode('.mkwsNavi'); - if (!navi) return; - - var text = ""; - for (var i in m_filters) { - if (text) { - text += " | "; - } - var filter = m_filters[i]; - if (filter.id) { - text += M('source') + ': ' + filter.name + ''; - } else { - text += M(filter.field) + ': ' + filter.value + ''; - } - } - - navi.html(text); - } - - - 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; @@ -846,7 +847,7 @@ function team($, teamName) { function mkwsSetLang() { - var lang = parseQuerystring().lang || mkws_config.lang; + var lang = mkws.parseQuerystring().lang || mkws_config.lang; if (!lang || !mkws.locale_lang[lang]) { mkws_config.lang = "" } else { @@ -858,35 +859,60 @@ function team($, teamName) { } - function mkwsHtmlSwitch() { - debug("HTML switch for team " + m_teamName); - - var node = findnode(".mkwsSwitch"); - node.append($('' + M('Records') + '')); - node.append($("", { text: " | " })); - node.append($('' + M('Targets') + '')); + /* create locale language menu */ + function mkwsHtmlLang() { + var lang_default = "en"; + var lang = mkws_config.lang || lang_default; + var list = []; - debug("HTML targets"); - var node = findnode(".mkwsTargets"); - node.html('\ -
\ - No information available yet.\ -
'); - node.css("display", "none"); - } + /* display a list of configured languages, or all */ + var lang_options = mkws_config.lang_options || []; + var toBeIncluded = {}; + for (var i = 0; i < lang_options.length; i++) { + toBeIncluded[lang_options[i]] = true; + } + for (var k in mkws.locale_lang) { + if (toBeIncluded[k] || lang_options.length == 0) + list.push(k); + } - function mkwsHtmlSort() { - debug("HTML sort, m_sort = '" + m_sort + "'"); - var sort_html = ''; + + for(var i = 0; i < mkws_config.sort_options.length; i++) { + var opt = mkws_config.sort_options[i]; + var key = opt[0]; + var val = opt.length == 1 ? opt[0] : opt[1]; + + sort_html += '