X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmkws-widgets.js;h=b286705e50597a9b8d40b2a827634fc38637d02d;hb=ecaa075ace18ba78f16dedc4a77c4caf5bc6f7da;hp=5f25cd6bc1db74e3e60f48cfa0043dc444ed501d;hpb=6aff4689bf259a9c8f903f9bcf4ac7a178b167c1;p=mkws-moved-to-github.git diff --git a/src/mkws-widgets.js b/src/mkws-widgets.js index 5f25cd6..b286705 100644 --- a/src/mkws-widgets.js +++ b/src/mkws-widgets.js @@ -15,9 +15,9 @@ function widget($, team, type, node) { return '[Widget ' + team.name() + ':' + type + ']'; } - var promote = mkws.promotionFunction(type); - if (promote) { - promote.call(that); + var fn = mkws.promotionFunction(type); + if (fn) { + fn.call(that); log("made " + type + " widget(node=" + node + ")"); } else { log("made UNENCAPSULATED widget(type=" + type + ", node=" + node + ")"); @@ -27,275 +27,277 @@ function widget($, team, type, node) { } - // 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() { - var that = this; - var M = mkws.M; - - this.team.queue("targets").subscribe(function(data) { - 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 = $(that.node).children('.mkwsBytarget'); - subnode.html(table); - }); - } - - - function promoteStat() { - var that = this; - var M = mkws.M; - - this.team.queue("stat").subscribe(function(data) { - if (that.node.length === 0) alert("huh?!"); - - $(that.node).html('' + M('Status info') + '' + - ' -- ' + - '' + M('Active clients') + ': ' + data.activeclients + '/' + data.clients + '' + - ' -- ' + - '' + M('Retrieved records') + ': ' + data.records + '/' + data.hits + ''); - }); - } - - - function promoteTermlists() { - var that = this; - var M = mkws.M; - - this.team.queue("termlists").subscribe(function(data) { - if (!that.node) { - alert("termlists event when there are no termlists"); - return; - } +// Functions follow for promoting the regular widget object into +// widgets of specific types. These could be moved into their own +// source files. + + +function promoteToTargets() { + var that = this; + var M = mkws.M; + + this.team.queue("targets").subscribe(function(data) { + 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 = $(that.node).children('.mkwsBytarget'); + subnode.html(table); + }); +} +mkws.registerWidgetType('Targets', promoteToTargets); - // no facets: this should never happen - if (!mkws_config.facets || mkws_config.facets.length == 0) { - alert("onTerm called even though we have no facets: " + $.toJSON(data)); - $(that.node).hide(); - return; - } - // display if we first got results - $(that.node).show(); +function promoteToStat() { + var that = this; + var M = mkws.M; - var acc = []; - acc.push('
' + M('Termlists') + '
'); - var facets = mkws_config.facets; + this.team.queue("stat").subscribe(function(data) { + if (that.node.length === 0) alert("huh?!"); - for (var i = 0; i < facets.length; i++) { - if (facets[i] == "xtargets") { - addSingleFacet(acc, "Sources", data.xtargets, 16, null); - } else if (facets[i] == "subject") { - addSingleFacet(acc, "Subjects", data.subject, 10, "subject"); - } else if (facets[i] == "author") { - addSingleFacet(acc, "Authors", data.author, 10, "author"); - } else { - alert("bad facet configuration: '" + facets[i] + "'"); - } + $(that.node).html('' + M('Status info') + '' + + ' -- ' + + '' + M('Active clients') + ': ' + data.activeclients + '/' + data.clients + '' + + ' -- ' + + '' + M('Retrieved records') + ': ' + data.records + '/' + data.hits + ''); + }); +} +mkws.registerWidgetType('Stat', promoteToStat); + + +function promoteToTermlists() { + var that = this; + var M = mkws.M; + + this.team.queue("termlists").subscribe(function(data) { + if (!that.node) { + alert("termlists event when there are no termlists"); + return; + } + + // no facets: this should never happen + if (!mkws_config.facets || mkws_config.facets.length == 0) { + alert("onTerm called even though we have no facets: " + $.toJSON(data)); + $(that.node).hide(); + return; + } + + // display if we first got results + $(that.node).show(); + + var acc = []; + acc.push('
' + M('Termlists') + '
'); + var facets = mkws_config.facets; + + for (var i = 0; i < facets.length; i++) { + if (facets[i] == "xtargets") { + addSingleFacet(acc, "Sources", data.xtargets, 16, null); + } else if (facets[i] == "subject") { + addSingleFacet(acc, "Subjects", data.subject, 10, "subject"); + } else if (facets[i] == "author") { + addSingleFacet(acc, "Authors", data.author, 10, "author"); + } else { + alert("bad facet configuration: '" + facets[i] + "'"); } - - $(that.node).html(acc.join('')); - - function addSingleFacet(acc, caption, data, max, pzIndex) { - var teamName = that.team.name(); - acc.push('
'); - acc.push('
' + M(caption) + '
'); - for (var i = 0; i < data.length && i < max; i++) { - acc.push('
'); - acc.push(''); + acc.push('
' + M(caption) + '
'); + for (var i = 0; i < data.length && i < max; i++) { + acc.push('
'); + acc.push('' + data[i].name + '' - + ' ' + data[i].freq + ''); - acc.push('
'); + } else { + action = 'mkws.limitQuery(\'' + teamName + '\', \'' + pzIndex + '\', this.firstChild.nodeValue)'; } + acc.push('onclick="' + action + ';return false;">' + data[i].name + '' + + ' ' + data[i].freq + ''); acc.push('
'); } - }); - } - - - function promotePager() { - var that = this; - var M = mkws.M; - - this.team.queue("pager").subscribe(function(data) { - $(that.node).html(drawPager(data)) - - function drawPager(data) { - var teamName = that.team.name(); - 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(that.team.totalRecordCount() / that.team.perpage()); - var currentPage = that.team.currentPage(); + acc.push('
'); + } + }); +} +mkws.registerWidgetType('Termlists', promoteToTermlists); - var firstClkbl = (currentPage - onsides > 0) - ? currentPage - onsides - : 1; - var lastClkbl = firstClkbl + 2*onsides < pages - ? firstClkbl + 2*onsides - : pages; +function promoteToPager() { + var that = this; + var M = mkws.M; - var prev = '<< ' + M('Prev') + ' | '; - if (currentPage > 1) - prev = '' - +'<< ' + M('Prev') + ' | '; + this.team.queue("pager").subscribe(function(data) { + $(that.node).html(drawPager(data)) - var middle = ''; - for(var i = firstClkbl; i <= lastClkbl; i++) { - var numLabel = i; - if(i == currentPage) - numLabel = '' + i + ''; + function drawPager(data) { + var teamName = that.team.name(); + var s = '
' + M('Displaying') + ': ' + + (data.start + 1) + ' ' + M('to') + ' ' + (data.start + data.num) + + ' ' + M('of') + ' ' + data.merged + ' (' + M('found') + ': ' + + data.total + ')
'; - middle += ' ' - + numLabel + ' '; - } + //client indexes pages from 1 but pz2 from 0 + var onsides = 6; + var pages = Math.ceil(that.team.totalRecordCount() / that.team.perpage()); + var currentPage = that.team.currentPage(); - var next = ' | ' + M('Next') + ' >>'; - if (pages - currentPage > 0) - next = ' | ' - + M('Next') + ' >>'; + var firstClkbl = (currentPage - onsides > 0) + ? currentPage - onsides + : 1; - var predots = ''; - if (firstClkbl > 1) - predots = '...'; + var lastClkbl = firstClkbl + 2*onsides < pages + ? firstClkbl + 2*onsides + : pages; - var postdots = ''; - if (lastClkbl < pages) - postdots = '...'; + var prev = '<< ' + M('Prev') + ' | '; + if (currentPage > 1) + prev = '' + +'<< ' + M('Prev') + ' | '; - s += '
' - + prev + predots + middle + postdots + next + '
'; + var middle = ''; + for(var i = firstClkbl; i <= lastClkbl; i++) { + var numLabel = i; + if(i == currentPage) + numLabel = '' + i + ''; - return s; - } - }); - } - - - function promoteRecords() { - var that = this; - var team = this.team; - - this.team.queue("records").subscribe(function(data) { - var html = []; - for (var i = 0; i < data.hits.length; i++) { - var hit = data.hits[i]; - var divId = team.recordElementId(hit.recid[0]); - html.push('
', renderSummary(hit), '
'); - // ### At some point, we may be able to move the - // m_currentRecordId and m_currentRecordData members - // from the team object into this widget. - if (hit.recid == team.currentRecordId()) { - if (team.currentRecordData()) - html.push(team.renderDetails(team.currentRecordData())); - } + middle += ' ' + + numLabel + ' '; } - $(that.node).html(html.join('')); - - function renderSummary(hit) - { - var template = team.loadTemplate("Summary"); - hit._id = team.recordElementId(hit.recid[0]); - hit._onclick = "mkws.showDetails('" + team.name() + "', '" + hit.recid[0] + "');return false;" - return template(hit); + + var next = ' | ' + M('Next') + ' >>'; + if (pages - currentPage > 0) + next = ' | ' + + M('Next') + ' >>'; + + var predots = ''; + if (firstClkbl > 1) + predots = '...'; + + var postdots = ''; + if (lastClkbl < pages) + postdots = '...'; + + s += '
' + + prev + predots + middle + postdots + next + '
'; + + return s; + } + }); +} +mkws.registerWidgetType('Pager', promoteToPager); + + +function promoteToRecords() { + var that = this; + var team = this.team; + + this.team.queue("records").subscribe(function(data) { + var html = []; + for (var i = 0; i < data.hits.length; i++) { + var hit = data.hits[i]; + var divId = team.recordElementId(hit.recid[0]); + html.push('
', renderSummary(hit), '
'); + // ### At some point, we may be able to move the + // m_currentRecordId and m_currentRecordData members + // from the team object into this widget. + if (hit.recid == team.currentRecordId()) { + if (team.currentRecordData()) + html.push(team.renderDetails(team.currentRecordData())); } - }); - } + } + $(that.node).html(html.join('')); + + function renderSummary(hit) + { + var template = team.loadTemplate("Summary"); + hit._id = team.recordElementId(hit.recid[0]); + hit._onclick = "mkws.showDetails('" + team.name() + "', '" + hit.recid[0] + "');return false;" + return template(hit); + } + }); +} +mkws.registerWidgetType('Records', promoteToRecords); - function promoteNavi() { - var that = this; - var teamName = this.team.name(); - var M = mkws.M; +function promoteToNavi() { + var that = this; + var teamName = this.team.name(); + var M = mkws.M; - this.team.queue("navi").subscribe(function() { - var filters = that.team.filters(); - var text = ""; + this.team.queue("navi").subscribe(function() { + var filters = that.team.filters(); + var text = ""; - for (var i in filters) { - if (text) { - text += " | "; - } - var filter = filters[i]; - if (filter.id) { - text += M('source') + ': ' + filter.name + ''; - } else { - text += M(filter.field) + ': ' + filter.value + ''; - } + for (var i in filters) { + if (text) { + text += " | "; } - - $(that.node).html(text); - }); - } - - - function promoteSort() { - // It seems this and the Perpage widget doen't need to - // subscribe to anything, since they produce events rather - // than consuming them. - $(this.node).change(function () { - this.team.set_sortOrder($(node).val()); - if (this.team.submitted()) { - this.team.resetPage(); - this.team.reShow(); + var filter = filters[i]; + if (filter.id) { + text += M('source') + ': ' + filter.name + ''; + } else { + text += M(filter.field) + ': ' + filter.value + ''; } - return false; - }); - } + } + $(that.node).html(text); + }); +} +mkws.registerWidgetType('Navi', promoteToNavi); + + +// It seems this and the Perpage widget doen't need to subscribe to +// anything, since they produce events rather than consuming them. +// +function promoteToSort() { + var that = this; + + $(this.node).change(function () { + that.team.set_sortOrder($(that.node).val()); + if (that.team.submitted()) { + that.team.resetPage(); + that.team.reShow(); + } + return false; + }); +} +mkws.registerWidgetType('Sort', promoteToSort); - function promotePerpage() { - $(this.node).change(function() { - this.team.set_perpage($(node).val()); - if (this.team.submitted()) { - this.team.resetPage(); - this.team.reShow(); - } - return false; - }); - } - mkws.registerWidgetType('Targets', promoteTargets); - mkws.registerWidgetType('Stat', promoteStat); - mkws.registerWidgetType('Termlists', promoteTermlists); - mkws.registerWidgetType('Pager', promotePager); - mkws.registerWidgetType('Records', promoteRecords); - mkws.registerWidgetType('Navi', promoteNavi); - mkws.registerWidgetType('Sort', promoteSort); - mkws.registerWidgetType('Perpage', promotePerpage); +mkws.registerWidgetType('Perpage', function() { + var that = this; + $(this.node).change(function() { + that.team.set_perpage($(that.node).val()); + if (that.team.submitted()) { + that.team.resetPage(); + that.team.reShow(); + } + return false; + }); +});