X-Git-Url: http://git.indexdata.com/?p=mkws-moved-to-github.git;a=blobdiff_plain;f=src%2Fmkws-widget-main.js;h=3986c16fa21b04ac72796964cc3841cbf7f6975c;hp=ffe00d64d696c5f65e129bad7ce69cacf90705e1;hb=7610fdb0a2ebc53d9e9f960bbd9f2c806ec3d738;hpb=7508a91294fa89cb3f57218eefd7f0354df81ea4 diff --git a/src/mkws-widget-main.js b/src/mkws-widget-main.js index ffe00d6..3986c16 100644 --- a/src/mkws-widget-main.js +++ b/src/mkws-widget-main.js @@ -1,9 +1,11 @@ +(function($) { // jQuery wrapper + // Functions follow for promoting the regular widget object into // widgets of specific types. These could be moved into their own // source files. -mkws.registerWidgetType('Targets', function() { +mkws.registerWidgetType('targets', function() { if (!this.config.show_switch) return; var that = this; @@ -17,30 +19,34 @@ mkws.registerWidgetType('Targets', function() { var cleandata = []; for (var i = 0; i < data.length; i++) { var cur = {}; + cur.name = data[i].name; cur.id = data[i].id; cur.hits = data[i].hits; cur.diagnostic = data[i].diagnostic; + cur.message = data[i].message; cur.records = data[i].records; - cur.state = data[i].state; + cur.state = data[i].state.replace(/^Client_/, ''); cleandata.push(cur); } - var template = that.team.loadTemplate(that.config.template || "Targets"); + cleandata.sort(function(a,b) { return a.name.localeCompare(b.name) }); + + var template = that.team.loadTemplate(that.config.template || "targets"); that.node.html(template({data: cleandata})); }); }); -mkws.registerWidgetType('Stat', function() { +mkws.registerWidgetType('stat', function() { var that = this; this.team.queue("stat").subscribe(function(data) { - var template = that.team.loadTemplate(that.config.template || "Stat"); + var template = that.team.loadTemplate(that.config.template || "stat"); that.node.html(template(data)); }); }); -mkws.registerWidgetType('Pager', function() { +mkws.registerWidgetType('pager', function() { var that = this; var M = mkws.M; @@ -53,7 +59,7 @@ mkws.registerWidgetType('Pager', function() { output.found = data.total; //client indexes pages from 1 but pz2 from 0 - var onsides = 6; + var onsides = 5; var pages = Math.ceil(that.team.totalRecordCount() / that.team.perpage()); var currentPage = that.team.currentPage(); @@ -81,66 +87,122 @@ mkws.registerWidgetType('Pager', function() { if (pages - currentPage > 0) output.nextClick = "mkws.pagerNext(\'" + teamName + "\')"; - var template = that.team.loadTemplate(that.config.template || "Pager"); + var template = that.team.loadTemplate(that.config.template || "pager"); that.node.html(template(output)); }); }); +mkws.registerWidgetType('details', function() { + var that = this; + var recid = that.node.attr("data-mkws-recid"); + if (this.team.gotRecords()) { + that.team.fetchDetails(recid); + } else { + this.team.queue("firstrecords").subscribe(function() { + that.team.fetchDetails(recid); + }); + } + this.team.queue("record").subscribe(function(data) { + if ($.inArray(recid, data.recid) > -1) { + var template = that.team.loadTemplate(that.config.template || "details"); + that.node.html(template(data)); + } + }); +}); -mkws.registerWidgetType('Records', function() { +mkws.registerWidgetType('records', function() { var that = this; var team = this.team; + var m_data; + var m_needRedraw = false; + var m_frozen = false; - this.team.queue("records").subscribe(function(data) { - for (var i = 0; i < data.hits.length; i++) { - var hit = data.hits[i]; - that.team.queue("record").publish(hit); - hit.detailLinkId = team.recordElementId(hit.recid[0]); - hit.detailClick = "mkws.showDetails('" + team.name() + "', '" + hit.recid[0] + "');return false;" - hit.containerClass = "mkwsSummary mkwsTeam_" + team.name(); - hit.containerClass += " " + hit.detailLinkId; - // ### 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()) { - hit.renderedDetails = team.renderDetails(team.currentRecordData()); - console.log(hit.renderedDetails); - } + this.team.queue("searchtriggered").subscribe(function() { + var op = that.config.newsearch_opacity; + if (op !== undefined) { that.node.fadeTo(500, op); } + }); + + function refreshRecordData() { + that.node.css('opacity', 1); + + if (m_needRedraw) { + for (var i = 0; i < m_data.hits.length; i++) { + var hit = m_data.hits[i]; + hit.detailLinkId = team.recordElementId(hit.recid[0]); + hit.detailClick = "mkws.showDetails('" + team.name() + "', '" + hit.recid[0] + "');return false;"; + hit.containerClass = "mkws-summary mkwsSummary mkws-team-" + team.name(); + hit.containerClass += " " + hit.detailLinkId; + // ### 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()) { + hit.renderedDetails = team.renderDetails(team.currentRecordData()); + } + } } + var template = team.loadTemplate(that.config.template || "records"); + var summaryPartial = team.loadTemplate(that.config['summary-template'] || "summary"); + var tdata = $.extend({}, {"hits": m_data.hits}, that.config.template_vars); + that.node.html(template(tdata, {"partials":{"summary":summaryPartial}})); + } + + m_needRedraw = false; + } + + function setRecordData(data) { + m_data = data; + m_needRedraw = true; + if (!m_frozen) { + refreshRecordData(); } - var template = team.loadTemplate(that.config.template || "Records"); - var targs = $.extend({}, {"hits": data.hits}, that.config.template_vars); - that.node.html(template(targs)); + } + + this.team.queue("records").subscribe(setRecordData); + + this.node.mouseenter(function() { + that.info("freezing display records"); + that.node.css('opacity', 0.5); + m_frozen = true; + }); + + this.node.mouseleave(function() { + that.info("refreshing records"); + that.node.css('opacity', 1); + m_frozen = false; + refreshRecordData(); }); that.autosearch(); }); -mkws.registerWidgetType('Navi', function() { +mkws.registerWidgetType('navi', function() { var that = this; var teamName = this.team.name(); - var M = mkws.M; - this.team.queue("navi").subscribe(function() { + this.team.queue("searchtriggered").subscribe(function() { var filters = that.team.filters(); - var text = ""; + var output = {filters:[]}; filters.visitTargets(function(id, name) { - if (text) text += " | "; - text += M('source') + ': ' + name + ''; + var cur = {}; + cur.facet = 'source'; + cur.value = name; + cur.click = "mkws.delimitTarget('" + teamName + "', '" + id + "'); return false;"; + output.filters.push(cur); }); filters.visitFields(function(field, value) { - if (text) text += " | "; - text += M(field) + ': ' + value + ''; + var cur = {}; + cur.facet = field; + cur.value = value; + cur.click = "mkws.delimitQuery('" + teamName + "', '" + field + "', '" + value + "'" + ");return false;"; + output.filters.push(cur); }); - that.node.html(text); + var template = that.team.loadTemplate(that.config.template || "navi"); + that.node.html(template(output)); }); }); @@ -148,7 +210,7 @@ mkws.registerWidgetType('Navi', function() { // It seems this and the Perpage widget doen't need to subscribe to // anything, since they produce events rather than consuming them. // -mkws.registerWidgetType('Sort', function() { +mkws.registerWidgetType('sort', function() { var that = this; this.node.change(function() { @@ -161,7 +223,7 @@ mkws.registerWidgetType('Sort', function() { }); -mkws.registerWidgetType('Perpage', function() { +mkws.registerWidgetType('per-page', function() { var that = this; this.node.change(function() { @@ -174,54 +236,53 @@ mkws.registerWidgetType('Perpage', function() { }); -mkws.registerWidgetType('Done', function() { +mkws.registerWidgetType('done', function() { var that = this; this.team.queue("complete").subscribe(function(n) { - var template = that.team.loadTemplate(that.config.template || "Done"); + var template = that.team.loadTemplate(that.config.template || "done"); that.node.html(template({count: n})); }); }); -mkws.registerWidgetType('Switch', function() { +mkws.registerWidgetType('switch', function() { if (!this.config.show_switch) return; var tname = this.team.name(); var output = {}; output.recordClick = "mkws.switchView(\'" + tname + "\', \'records\')"; output.targetClick = "mkws.switchView(\'" + tname + "\', \'targets\')"; - var template = this.team.loadTemplate(this.config.template || "Switch"); + var template = this.team.loadTemplate(this.config.template || "switch"); this.node.html(template(output)); this.hideWhenNarrow(); }); -mkws.registerWidgetType('Search', function() { +mkws.registerWidgetType('search', function() { var output = {}; output.team = this.team.name(); - output.queryWidth = this.config.query_width; - var template = this.team.loadTemplate(this.config.template || "Search"); + var template = this.team.loadTemplate(this.config.template || "search"); this.node.html(template(output)); }); -mkws.registerWidgetType('SearchForm', function() { +mkws.registerWidgetType('search-form', function() { var team = this.team; this.node.submit(function() { - var val = team.widget('Query').value(); + var val = team.widget('query').value(); team.newSearch(val); return false; }); }); -mkws.registerWidgetType('Results', function() { - var template = this.team.loadTemplate(this.config.template || "Results"); +mkws.registerWidgetType('results', function() { + var template = this.team.loadTemplate(this.config.template || "results"); this.node.html(template({team: this.team.name()})); this.autosearch(); }); -mkws.registerWidgetType('Ranking', function() { +mkws.registerWidgetType('ranking', function() { var output = {}; output.perPage = []; output.sort = []; @@ -230,18 +291,18 @@ mkws.registerWidgetType('Ranking', function() { output.showPerPage = this.config.show_perpage; var order = this.team.sortOrder(); - this.log("making sort, sortOrder = '" + order + "'"); + this.info("making sort, sortOrder = '" + order + "'"); for (var i = 0; i < this.config.sort_options.length; i++) { var cur = {}; var opt = this.config.sort_options[i]; cur.key = opt[0]; - cur.label = opt.length == 1 ? opt[0] : opt[1]; + cur.label = opt.length == 1 ? opt[0] : mkws.M(opt[1]); if (order == cur.key || order == cur.label) cur.selected = true; output.sort.push(cur); } var perpage = this.team.perpage(); - this.log("making perpage, perpage = " + perpage); + this.info("making perpage, perpage = " + perpage); for(var i = 0; i < this.config.perpage_options.length; i++) { var cur = {}; cur.perPage = this.config.perpage_options[i]; @@ -249,12 +310,12 @@ mkws.registerWidgetType('Ranking', function() { output.perPage.push(cur); } - var template = this.team.loadTemplate(this.config.template || "Ranking"); + var template = this.team.loadTemplate(this.config.template || "ranking"); this.node.html(template(output)); }); -mkws.registerWidgetType('Lang', function() { +mkws.registerWidgetType('lang', function() { // dynamic URL or static page? /path/foo?query=test /* create locale language menu */ if (!this.config.show_lang) return; @@ -264,7 +325,7 @@ mkws.registerWidgetType('Lang', function() { var list = []; /* display a list of configured languages, or all */ - var lang_options = this.config.lang_options || []; + var lang_options = this.config.lang_options; var toBeIncluded = {}; for (var i = 0; i < lang_options.length; i++) { toBeIncluded[lang_options[i]] = true; @@ -289,9 +350,9 @@ mkws.registerWidgetType('Lang', function() { list.push(cur); } - this.log("language menu: " + list.join(", ")); + this.info("language menu: " + list.join(", ")); - var template = this.team.loadTemplate(this.config.template || "Lang"); + var template = this.team.loadTemplate(this.config.template || "lang"); this.node.html(template({languages: list})); this.hideWhenNarrow(); @@ -316,8 +377,8 @@ mkws.registerWidgetType('Lang', function() { }); -mkws.registerWidgetType('MOTD', function() { - var container = this.team.widget('MOTDContainer'); +mkws.registerWidgetType('motd', function() { + var container = this.team.widget('motd-container'); if (container) { // Move the MOTD from the provided element down into the container this.node.appendTo(container.node); @@ -329,23 +390,23 @@ mkws.registerWidgetType('MOTD', function() { // is copied up into its team, allowing it to affect other widgets in // the team. // -mkws.registerWidgetType('Config', function() { +mkws.registerWidgetType('config', function() { var c = this.config; for (var name in c) { if (c.hasOwnProperty(name)) { this.team.config[name] = c[name]; - this.log(this + " copied property " + name + "='" + c[name] + "' up to team"); + this.info(this + " copied property " + name + "='" + c[name] + "' up to team"); } } }); -mkws.registerWidgetType('Progress', function() { +mkws.registerWidgetType('progress', function() { var that = this; this.node.hide(); this.team.queue("stat").subscribe(function(data) { - var template = this.team.loadTemplate(this.config.template || "Progress"); - this.node.html(template({ + var template = that.team.loadTemplate(that.config.template || "progress"); + that.node.html(template({ done: data.clients - data.activeclients, waiting: data.activeclients })); @@ -354,13 +415,32 @@ mkws.registerWidgetType('Progress', function() { }); +mkws.registerWidgetType('waiting', function() { + var that = this; + + this.node.css("visibility", "hidden"); + var template = that.team.loadTemplate(that.config.template || "waiting"); + this.node.html(template({ + src: this.config.src || "http://mkws.indexdata.com/progress.gif" + })); + + this.team.queue("searchtriggered").subscribe(function(data) { + that.node.css("visibility", "visible"); + }); + this.team.queue("complete").subscribe(function(n) { + that.node.css("visibility", "hidden"); + }); +}); + + // Some elements have mkws* classes that makes them appear as widgets // -- for example, because we want to style them using CSS -- but have // no actual functionality. We register these to prevent ignorable // warnings when they occur. -mkws.registerWidgetType('Query', function() {}); -mkws.registerWidgetType('MOTDContainer', function() {}); -mkws.registerWidgetType('Button', function() {}); +mkws.registerWidgetType('query', function() {}); +mkws.registerWidgetType('motd-container', function() {}); +mkws.registerWidgetType('button', function() {}); +})(mkws.$); // jQuery wrapper