X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=6f57f6b2a3452b185b5effa7b9adb3ce2d498ab7;hb=6bce7bdad808e1b2e5b64da14fee4f5f10d63c08;hp=0ab98736f554144592fb2f7fd8bfda3c856906bc;hpb=fbd050cce8e51dd30a4e67b455bfc908861deb5c;p=mkws-moved-to-github.git
diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js
index 0ab9873..6f57f6b 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 ='
' +
+ '' + M('Target ID') + ' | ' +
+ '' + M('Hits') + ' | ' +
+ '' + M('Diags') + ' | ' +
+ '' + M('Records') + ' | ' +
+ '' + M('State') + ' | ' +
+ '
';
+
+ for (var i = 0; i < data.length; i++) {
+ table += "" + data[i].id +
+ " | " + data[i].hits +
+ " | " + data[i].diagnostic +
+ " | " + data[i].records +
+ " | " + data[i].state + " |
";
+ }
+
+ table += '
';
+ 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,53 +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 node = findnode('.mkwsBytarget');
- if (node.length === 0) return;
-
- var table ='' +
- '' + M('Target ID') + ' | ' +
- '' + M('Hits') + ' | ' +
- '' + M('Diags') + ' | ' +
- '' + M('Records') + ' | ' +
- '' + M('State') + ' | ' +
- '
';
-
- for (var i = 0; i < data.length; i++) {
- table += "" + data[i].id +
- " | " + data[i].hits +
- " | " + data[i].diagnostic +
- " | " + data[i].records +
- " | " + data[i].state + " |
";
- }
-
- table += '
';
- node.html(table);
+ queue("targets").publish(data);
}
- function onStat(data, teamName) {
+ function onStat(data) {
debug("stat");
- var node = findnode('.mkwsStat');
- if (node.length === 0) return;
-
- node.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;
@@ -366,9 +369,10 @@ function team($, teamName) {
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);
}
@@ -503,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;
@@ -510,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 = "";
@@ -557,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)
{
@@ -646,31 +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);
- }
-
-
that.showPage = function (pageNum)
{
m_curPage = pageNum;
@@ -843,7 +847,7 @@ function team($, teamName) {
function mkwsSetLang() {
- var lang = parseQuerystring().lang || mkws_config.lang;
+ var lang = mkws.getParameterByName("lang") || mkws_config.lang;
if (!lang || !mkws.locale_lang[lang]) {
mkws_config.lang = ""
} else {
@@ -855,21 +859,46 @@ function team($, teamName) {
}
- function mkwsHtmlSwitch() {
- debug("HTML switch for team " + m_teamName);
+ /* create locale language menu */
+ function mkwsHtmlLang() {
+ var lang_default = "en";
+ var lang = mkws_config.lang || lang_default;
+ var list = [];
- var node = findnode(".mkwsSwitch");
- node.append($('' + M('Records') + ''));
- node.append($("", { text: " | " }));
- node.append($('' + M('Targets') + ''));
+ /* 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;
+ }
- debug("HTML targets");
- var node = findnode(".mkwsTargets");
- node.html('\
-\
- No information available yet.\
-
');
- node.css("display", "none");
+ 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);
+
+ debug("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 + ' '
+ }
+ }
+
+ findnode(".mkwsLang").html(data);
}
@@ -913,59 +942,33 @@ function team($, teamName) {
}
- /* create locale language menu */
- function mkwsHtmlLang() {
- var lang_default = "en";
- var lang = mkws_config.lang || lang_default;
- var list = [];
-
- /* 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);
- }
-
- // add english link
- if (lang_options.length == 0 || toBeIncluded[lang_default])
- list.push(lang_default);
-
- debug("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 += ' | ';
+ function mkwsHtmlSwitch() {
+ debug("HTML switch for team " + m_teamName);
- if (lang == l) {
- data += ' ' + l + ' ';
- } else {
- data += ' ' + l + ' '
- }
- }
+ var node = findnode(".mkwsSwitch");
+ node.append($('' + M('Records') + ''));
+ node.append($("", { text: " | " }));
+ node.append($('' + M('Targets') + ''));
- findnode(".mkwsLang").html(data);
+ debug("HTML targets");
+ var node = findnode(".mkwsTargets");
+ node.html('\
+\
+ No information available yet.\
+
');
+ node.css("display", "none");
}
that.runAutoSearch = function() {
- // ### should check mkwsTermlist as well, for facet-only teams
- var node = findnode('.mkwsRecords');
+ var node = findnode('.mkwsRecords,.mkwsTermlists');
var query = node.attr('autosearch');
if (!query)
return;
if (query.match(/^!param!/)) {
var param = query.replace(/^!param!/, '');
- query = getParameterByName(param);
+ query = mkws.getParameterByName(param);
debug("obtained query '" + query + "' from param '" + param + "'");
if (!query) {
alert("This page has a MasterKey widget that needs a query specified by the '" + param + "' parameter");
@@ -993,31 +996,11 @@ 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()?
- function getParameterByName(name) {
- name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
- var regex = new RegExp("[\\?&]" + name + "=([^]*)"),
- results = regex.exec(location.search);
- return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
- }
-
-
- /* locale */
+ // Translation function. At present, this is properly a
+ // global-level function (hence the assignment to mkws.M) but we
+ // want to make it per-team so different teams can operate in
+ // different languages.
+ //
function M(word) {
var lang = mkws_config.lang;
@@ -1036,7 +1019,7 @@ function team($, teamName) {
function findnode(selector, teamName) {
teamName = teamName || m_teamName;
- selector = selector.split(',').map(function(s) {
+ selector = $.map(selector.split(','), function(s, i) {
return s + '.mkwsTeam_' + teamName;
}).join(',');
@@ -1074,7 +1057,7 @@ function team($, teamName) {
var source = node.html();
if (!source) {
- source = defaultTemplate(name);
+ source = mkws.defaultTemplate(name);
}
template = Handlebars.compile(source);
@@ -1086,86 +1069,28 @@ function team($, teamName) {
}
- function defaultTemplate(name)
- {
- if (name === 'Record') {
- return '\
-\
- \
- {{translate "Title"}} | \
- \
- {{md-title}}\
- {{#if md-title-remainder}}\
- ({{md-title-remainder}})\
- {{/if}}\
- {{#if md-title-responsibility}}\
- {{md-title-responsibility}}\
- {{/if}}\
- | \
-
\
- {{#if md-date}}\
- \
- {{translate "Date"}} | \
- {{md-date}} | \
-
\
- {{/if}}\
- {{#if md-author}}\
- \
- {{translate "Author"}} | \
- {{md-author}} | \
-
\
- {{/if}}\
- {{#if md-electronic-url}}\
- \
- {{translate "Links"}} | \
- \
- {{#each md-electronic-url}}\
- Link{{index1}}\
- {{/each}}\
- | \
-
\
- {{/if}}\
- {{#if-any location having="md-subject"}}\
- \
- {{translate "Subject"}} | \
- \
- {{#first location having="md-subject"}}\
- {{#if md-subject}}\
- {{#commaList md-subject}}\
- {{this}}{{/commaList}}\
- {{/if}}\
- {{/first}}\
- | \
-
\
- {{/if-any}}\
- \
- {{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}}\
-';
+ // The following PubSub code is modified from the jQuery manual:
+ // https://api.jquery.com/jQuery.Callbacks/
+ //
+ // Use as:
+ // team.queue("eventName").subscribe(function(param1, param2 ...) { ... });
+ // team.queue("eventName").publish(arg1, arg2, ...);
+
+ var queues = {};
+ var queue = function(id) {
+ if (!queues[id]) {
+ var callbacks = $.Callbacks();
+ queues[id] = {
+ publish: callbacks.fire,
+ subscribe: callbacks.add,
+ unsubscribe: callbacks.remove
+ };
}
-
- var s = "There is no default '" + name +"' template!";
- alert(s);
- return s;
+ return queues[id];
}
+ that.queue = queue;
+
// main
(function() {
@@ -1301,6 +1226,97 @@ function team($, teamName) {
}
+ // This function is taken from a StackOverflow answer
+ // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144
+ mkws.getParameterByName = function(name) {
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+ var regex = new RegExp("[\\?&]" + name + "=([^]*)"),
+ results = regex.exec(location.search);
+ return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+ }
+
+
+ mkws.defaultTemplate = function(name)
+ {
+ if (name === 'Record') {
+ return '\
+\
+ \
+ {{translate "Title"}} | \
+ \
+ {{md-title}}\
+ {{#if md-title-remainder}}\
+ ({{md-title-remainder}})\
+ {{/if}}\
+ {{#if md-title-responsibility}}\
+ {{md-title-responsibility}}\
+ {{/if}}\
+ | \
+
\
+ {{#if md-date}}\
+ \
+ {{translate "Date"}} | \
+ {{md-date}} | \
+
\
+ {{/if}}\
+ {{#if md-author}}\
+ \
+ {{translate "Author"}} | \
+ {{md-author}} | \
+
\
+ {{/if}}\
+ {{#if md-electronic-url}}\
+ \
+ {{translate "Links"}} | \
+ \
+ {{#each md-electronic-url}}\
+ Link{{index1}}\
+ {{/each}}\
+ | \
+
\
+ {{/if}}\
+ {{#if-any location having="md-subject"}}\
+ \
+ {{translate "Subject"}} | \
+ \
+ {{#first location having="md-subject"}}\
+ {{#if md-subject}}\
+ {{#commaList md-subject}}\
+ {{this}}{{/commaList}}\
+ {{/if}}\
+ {{/first}}\
+ | \
+
\
+ {{/if-any}}\
+ \
+ {{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;
+ }
+
+
function defaultMkwsConfig() {
/* default mkws config */
var config_default = {