X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=tools%2Fhtdocs%2Fmkws.js;h=e04721562aa1679350e98ec9441070d7d3487636;hb=2fab8dcd05783b47f38ec46188e612187e84223d;hp=710e47f46bf6b1d963b193ccd0c3977a10c96834;hpb=756989a6842ba0acb89db2a9202f9f2839a9bca8;p=mkws-moved-to-github.git
diff --git a/tools/htdocs/mkws.js b/tools/htdocs/mkws.js
index 710e47f..e047215 100644
--- a/tools/htdocs/mkws.js
+++ b/tools/htdocs/mkws.js
@@ -72,7 +72,7 @@ Handlebars.registerHelper('index1', function(obj) {
// Set up global mkws object. Contains truly global state such as SP
-// authentication, and a hash of team objects, indexed by windowid.
+// authentication, and a hash of team objects, indexed by team-name.
//
var mkws = {
authenticated: false,
@@ -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 ='
');
acc.push('
' + M(caption) + '
');
for (var i = 0; i < data.length && i < max; i++) {
@@ -387,7 +386,7 @@ function team($, teamName) {
if (!pzIndex) {
// Special case: target selection
acc.push('target_id='+data[i].id+' ');
- if (!target_filtered(data[i].id)) {
+ if (!targetFiltered(data[i].id)) {
action = 'mkws.limitTarget(\'' + m_teamName + '\', this.getAttribute(\'target_id\'),this.firstChild.nodeValue)';
}
} else {
@@ -401,7 +400,7 @@ function team($, teamName) {
}
- function target_filtered(id) {
+ function targetFiltered(id) {
for (var i = 0; i < m_filters.length; i++) {
if (m_filters[i].id === id ||
m_filters[i].id === 'pz:id=' + id) {
@@ -412,67 +411,74 @@ function team($, teamName) {
}
- function my_onrecord(data, args, teamName) {
- debug("record: teamName=" + teamName + ", m_teamName=" + m_teamName);
- // 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;
- var recordDiv = document.getElementById('mkwsRecdiv_' + teamName + '_' + m_curDetRecData.recid);
- var html = renderDetails(m_curDetRecData);
- recordDiv.innerHTML += html;
- }
+ 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;
- function my_onbytarget(data, teamName) {
- debug("target");
- var targetDiv = findnode('.mkwsBytarget');
- if (!targetDiv) {
- return;
- }
+ 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 + '';
- 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 + " |
";
+ middle += ' '
+ + numLabel + ' ';
}
- table += '
';
- targetDiv.html(table);
+ 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;
}
+
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// when search button pressed
- // ### This is closure, so can always just operate on its own team
function onFormSubmitEventHandler()
{
- mkws.handle_node_with_team(this, function (tname) {
- var val = findnode('.mkwsQuery').val();
- mkws.teams[tname].newSearch(val);
- });
-
+ var val = findnode('.mkwsQuery').val();
+ newSearch(val);
return false;
}
- // ### won't need to be externally visible once onFormSubmitEventHandler() is fixed.
- // ### doesn't need windowid
- that.newSearch = function(query, sort, targets, windowid)
+ function newSearch(query, sort, targets)
{
debug("newSearch: " + query);
@@ -482,11 +488,11 @@ function team($, teamName) {
}
m_filters = []
- redraw_navi();
+ redrawNavi();
resetPage();
loadSelect();
- triggerSearch(query, sort, targets, windowid);
- that.switchView('records'); // In case it's configured to start off as hidden
+ triggerSearch(query, sort, targets);
+ switchView('records'); // In case it's configured to start off as hidden
m_submitted = true;
}
@@ -501,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;
@@ -508,8 +539,22 @@ function team($, teamName) {
}
- // ### doesn't need windowid
- function triggerSearch (query, sort, targets, windowid)
+ 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 = "";
var pp2limit = "";
@@ -522,7 +567,6 @@ function team($, teamName) {
m_sort = sort;
}
if (targets) {
- // ### should support multiple |-separated targets
m_filters.push({ id: targets, name: targets });
}
@@ -548,9 +592,7 @@ function team($, teamName) {
if (pp2limit) {
params.limit = pp2limit;
}
- if (windowid) {
- params.windowid = windowid;
- }
+
debug("triggerSearch(" + m_query + "): filters = " + $.toJSON(m_filters) + ", pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
// We can use: params.torusquery = "udb=NAME"
@@ -559,27 +601,12 @@ 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)
{
debug("limitTarget(id=" + id + ", name=" + name + ")");
m_filters.push({ id: id, name: name });
- redraw_navi();
+ redrawNavi();
resetPage();
loadSelect();
triggerSearch();
@@ -592,7 +619,7 @@ function team($, teamName) {
{
debug("limitQuery(field=" + field + ", value=" + value + ")");
m_filters.push({ field: field, value: value });
- redraw_navi();
+ redrawNavi();
resetPage();
loadSelect();
triggerSearch();
@@ -615,7 +642,7 @@ function team($, teamName) {
}
m_filters = newFilters;
- redraw_navi();
+ redrawNavi();
resetPage();
loadSelect();
triggerSearch();
@@ -640,7 +667,7 @@ function team($, teamName) {
}
m_filters = newFilters;
- redraw_navi();
+ redrawNavi();
resetPage();
loadSelect();
triggerSearch();
@@ -648,98 +675,19 @@ function team($, teamName) {
}
- function redraw_navi ()
+ that.showPage = function (pageNum)
{
- var navi = findnode('.mkwsNavi');
- if (!navi) return;
+ m_curPage = pageNum;
+ m_paz.showPage(m_curPage - 1);
+ }
- 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;
- m_paz.showPage(m_curPage - 1);
- }
-
-
- // simple paging functions
- that.pagerNext = function () {
- if (m_totalRec - m_perpage*m_curPage > 0) {
- m_paz.showNext();
- m_curPage++;
- }
+ // simple paging functions
+ that.pagerNext = function () {
+ if (m_totalRec - m_perpage*m_curPage > 0) {
+ m_paz.showNext();
+ m_curPage++;
+ }
}
@@ -750,10 +698,9 @@ function team($, teamName) {
// switching view between targets and records
- that.switchView = function(view) {
+ function switchView(view) {
var targets = findnode('.mkwsTargets');
- // ### Fix next line to use findnode()
- var results = $('.mkwsResults.mkwsTeam_' + m_teamName + ',.mkwsRecords.mkwsTeam_' + m_teamName);
+ var results = findnode('.mkwsResults,.mkwsRecords');
var blanket = findnode('.mkwsBlanket');
var motd = findnode('.mkwsMOTD');
@@ -783,6 +730,9 @@ function team($, teamName) {
}
+ that.switchView = switchView;
+
+
// detailed record drawing
that.showDetails = function (prefixRecId) {
var recId = prefixRecId.replace('mkwsRec_', '');
@@ -807,132 +757,17 @@ function team($, teamName) {
}
- function renderDetails(data, marker)
- {
- var template = loadTemplate("Record");
- var details = template(data);
- return '
' + details + '
';
- }
-
-
- function loadTemplate(name)
- {
- var template = m_template[name];
-
- if (template === undefined) {
- // Fall back to generic template if there is no team-specific one
- var node = findnode(".mkwsTemplate_" + name);
- if (!node.length) {
- node = findnode(".mkwsTemplate_" + name, "ALL");
- }
-
- var source = node.html();
- if (!source) {
- source = defaultTemplate(name);
- }
-
- template = Handlebars.compile(source);
- debug("compiled template '" + name + "'");
- m_template[name] = template;
- }
-
- return template;
- }
-
-
- 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}}\
-';
- }
-
- var s = "There is no default '" + name +"' template!";
- alert(s);
- return s;
- }
-
-
/*
* All the HTML stuff to render the search forms and
* result pages.
*/
- // ### This and other multi-word identifiers should be camelCase
- function mkws_html_all() {
- mkws_set_lang();
+ function mkwsHtmlAll() {
+ mkwsSetLang();
if (mkws_config.show_lang)
- mkws_html_lang();
+ mkwsHtmlLang();
debug("HTML search form");
- mkws.handle_node_with_team(findnode('.mkwsSearch'), function(tname) {
+ mkws.handleNodeWithTeam(findnode('.mkwsSearch'), function(tname) {
this.html('\