X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmkws-widgets.js;h=c131756f1cd352bf40b434cbd01e16d5ab298020;hb=5f3657b4c2aa6adb492be5addee94a3486dd839a;hp=087ce893e34706e68381d4319156ef2b1347844c;hpb=940e39776c98e29ca3534360bd6c123256d6a5b0;p=mkws-moved-to-github.git diff --git a/src/mkws-widgets.js b/src/mkws-widgets.js index 087ce89..c131756 100644 --- a/src/mkws-widgets.js +++ b/src/mkws-widgets.js @@ -22,6 +22,10 @@ function widget($, team, type, node) { return '[Widget ' + team.name() + ':' + type + ']'; }; + that.value = function() { + return node.value; + } + for (var i = 0; i < node.attributes.length; i++) { var a = node.attributes[i]; if (a.name === 'data-mkws-config') { @@ -79,6 +83,13 @@ widget.autosearch = function(widget) { if (!query) { alert("This page has a MasterKey widget that needs a query specified by the path-component " + index); } + } else if (query.match(/^!var!/)) { + var name = query.replace(/^!var!/, ''); + query = window[name]; // It's ridiculous that this works + widget.log("obtained query '" + query + "' from variable '" + name + "'"); + if (!query) { + alert("This page has a MasterKey widget that needs a query specified by the '" + name + "' variable"); + } } var sortOrder = widget.config.sort; @@ -114,6 +125,12 @@ mkws.registerWidgetType('Targets', function() { var that = this; var M = mkws.M; + $(this.node).html('\ +
\ +No information available yet.\ +
'); + $(this.node).css("display", "none"); + this.team.queue("targets").subscribe(function(data) { var table ='' + '' + @@ -190,7 +207,7 @@ mkws.registerWidgetType('Pager', function() { for(var i = firstClkbl; i <= lastClkbl; i++) { var numLabel = i; if(i == currentPage) - numLabel = '' + i + ''; + numLabel = '' + i + ''; middle += ' ' + numLabel + ' '; @@ -218,6 +235,13 @@ mkws.registerWidgetType('Pager', function() { }); +mkws.registerWidgetType('Results', function() { + // Nothing to do apart from act as an autosearch trigger + // Contained elements do all the real work + widget.autosearch(this); +}); + + mkws.registerWidgetType('Records', function() { var that = this; var team = this.team; @@ -226,6 +250,7 @@ mkws.registerWidgetType('Records', function() { var html = []; for (var i = 0; i < data.hits.length; i++) { var hit = data.hits[i]; + that.team.queue("record").publish(hit); var divId = team.recordElementId(hit.recid[0]); html.push('
', renderSummary(hit), '
'); // ### At some point, we may be able to move the @@ -259,20 +284,18 @@ mkws.registerWidgetType('Navi', 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 + ''; - } - } + filters.visitTargets(function(id, name) { + if (text) text += " | "; + text += M('source') + ': ' + name + ''; + }); + + filters.visitFields(function(field, value) { + if (text) text += " | "; + text += M(field) + ': ' + value + ''; + }); $(that.node).html(text); }); @@ -315,3 +338,197 @@ mkws.registerWidgetType('Done', function() { $(that.node).html("Search complete: found " + n + " records"); }); }); + + +mkws.registerWidgetType('Switch', function() { + var tname = this.team.name(); + $(this.node).html('\ +Records \ +| \ +Targets'); +}); + + +mkws.registerWidgetType('Search', function() { + var tname = this.team.name(); + var M = mkws.M; + + $(this.node).html('\ +\ + \ + \ +'); +}); + + +mkws.registerWidgetType('SearchForm', function() { + var team = this.team; + $(this.node).submit(function() { + var val = team.widget('Query').value(); + team.newSearch(val); + return false; + }); +}); + + +mkws.registerWidgetType('Results', function() { + var tname = this.team.name(); + + $(this.node).html('\ +
' + M('Target ID') + '
\ + \ + \ + \ + \ + \ + \ + \ +
\ +
\ +
\ +
\ +
\ +
\ +
\ +
\ +
\ +
'); +}); + + +mkws.registerWidgetType('Ranking', function() { + var tname = this.team.name(); + var that = this; + var M = mkws.M; + + var s = '
'; + if (this.config.show_sort) { + s += M('Sort by') + ' ' + mkwsHtmlSort() + ' '; + } + if (this.config.show_perpage) { + s += M('and show') + ' ' + mkwsHtmlPerpage() + ' ' + M('per page') + '.'; + } + s += '
'; + + $(this.node).html(s); + + + function mkwsHtmlSort() { + var order = that.team.sortOrder(); + + that.log("HTML sort, sortOrder = '" + order + "'"); + var sort_html = ''; + + return sort_html; + } + + function mkwsHtmlPerpage() { + var perpage = that.team.perpage(); + + that.log("HTML perpage, perpage = " + perpage); + var perpage_html = ''; + + return perpage_html; + } +}); + + +mkws.registerWidgetType('Lang', function() { + // dynamic URL or static page? /path/foo?query=test + /* create locale language menu */ + if (!this.config.show_lang) return; + + var lang_default = "en"; + var lang = this.config.lang || lang_default; + var list = []; + + /* display a list of configured languages, or all */ + var lang_options = this.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); + } + + // add english link + if (lang_options.length == 0 || toBeIncluded[lang_default]) + list.push(lang_default); + + this.log("Language menu for: " + list.join(", ")); + + /* the HTML part */ + var data = ""; + for (var i = 0; i < list.length; i++) { + var l = list[i]; + if (data) + data += ' | '; + + if (lang == l) { + data += ' ' + l + ' '; + } else { + data += ' ' + l + ' ' + } + } + + $(this.node).html(data); + + + // set or re-set "lang" URL parameter + function lang_url(lang) { + var query = location.search; + // no query parameters? done + if (!query) { + return "?lang=" + lang; + } + + // parameter does not exist + if (!query.match(/[\?&]lang=/)) { + return query + "&lang=" + lang; + } + + // replace existing parameter + query = query.replace(/\?lang=([^&#;]*)/, "?lang=" + lang); + query = query.replace(/\&lang=([^&#;]*)/, "&lang=" + lang); + return query; + } +}); + + +mkws.registerWidgetType('MOTD', function() { + var container = this.team.widget('MOTDContainer'); + if (container) { + alert("moving MOTD"); + // Move the MOTD from the provided element down into the container + $(this.node).appendTo(container.node); + } +}); + +