+ /*
+ * All the HTML stuff to render the search forms and
+ * result pages.
+ */
+ function mkwsHtmlAll() {
+ mkwsSetLang();
+ if (mkws_config.show_lang)
+ mkwsHtmlLang();
+
+ debug("HTML search form");
+ mkws.handleNodeWithTeam(findnode('.mkwsSearch'), function(tname) {
+ this.html('\
+<form name="mkwsSearchForm" class="mkwsSearchForm mkwsTeam_' + tname + '" action="" >\
+ <input class="mkwsQuery mkwsTeam_' + tname + '" type="text" size="' + mkws_config.query_width + '" />\
+ <input class="mkwsButton mkwsTeam_' + tname + '" type="submit" value="' + M('Search') + '" />\
+</form>');
+ });
+
+ debug("HTML records");
+ // If the team has a .mkwsResults, populate it in the usual
+ // way. If not, assume that it's a smarter application that
+ // defines its own subcomponents, some or all of the
+ // following:
+ // .mkwsTermlists
+ // .mkwsRanking
+ // .mkwsPager
+ // .mkwsNavi
+ // .mkwsRecords
+ if (findnode(".mkwsResults").length) {
+ findnode(".mkwsResults").html('\
+<table width="100%" border="0" cellpadding="6" cellspacing="0">\
+ <tr>\
+ <td class="mkwsTermlistContainer1 mkwsTeam_' + m_teamName + '" width="250" valign="top">\
+ <div class="mkwsTermlists mkwsTeam_' + m_teamName + '"></div>\
+ </td>\
+ <td class="mkwsMOTDContainer mkwsTeam_' + m_teamName + '" valign="top">\
+ <div class="mkwsRanking mkwsTeam_' + m_teamName + '"></div>\
+ <div class="mkwsPager mkwsTeam_' + m_teamName + '"></div>\
+ <div class="mkwsNavi mkwsTeam_' + m_teamName + '"></div>\
+ <div class="mkwsRecords mkwsTeam_' + m_teamName + '"></div>\
+ </td>\
+ </tr>\
+ <tr>\
+ <td colspan="2">\
+ <div class="mkwsTermlistContainer2 mkwsTeam_' + m_teamName + '"></div>\
+ </td>\
+ </tr>\
+</table>');
+ }
+
+ var node = findnode(".mkwsRanking");
+ if (node.length) {
+ var ranking_data = '';
+ ranking_data += '<form name="mkwsSelect" class="mkwsSelect mkwsTeam_' + m_teamName + '" action="" >';
+ if (mkws_config.show_sort) {
+ ranking_data += M('Sort by') + ' ' + mkwsHtmlSort() + ' ';
+ }
+ if (mkws_config.show_perpage) {
+ ranking_data += M('and show') + ' ' + mkwsHtmlPerpage() + ' ' + M('per page') + '.';
+ }
+ ranking_data += '</form>';
+
+ node.html(ranking_data);
+ }
+
+ mkwsHtmlSwitch();
+
+ var node;
+ node = findnode('.mkwsSearchForm');
+ if (node.length)
+ node.submit(onFormSubmitEventHandler);
+ node = findnode('.mkwsSort');
+ if (node.length)
+ node.change(onSelectDdChange);
+ node = findnode('.mkwsPerpage');
+ if (node.length)
+ node.change(onSelectDdChange);
+
+ // on first page, hide the termlist
+ $(document).ready(function() { findnode(".mkwsTermlists").hide(); });
+ var motd = findnode(".mkwsMOTD");
+ var container = findnode(".mkwsMOTDContainer");
+ if (motd.length && container.length) {
+ // Move the MOTD from the provided element down into the container
+ motd.appendTo(container);
+ }
+ }
+
+
+ function mkwsSetLang() {
+ var lang = mkws.getParameterByName("lang") || mkws_config.lang;
+ if (!lang || !mkws.locale_lang[lang]) {
+ mkws_config.lang = ""
+ } else {
+ mkws_config.lang = lang;
+ }
+
+ debug("Locale language: " + (mkws_config.lang ? mkws_config.lang : "none"));
+ return mkws_config.lang;
+ }
+
+
+ /* 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 += ' | ';
+
+ if (lang == l) {
+ data += ' <span>' + l + '</span> ';
+ } else {
+ data += ' <a href="?lang=' + l + '">' + l + '</a> '
+ }
+ }
+
+ findnode(".mkwsLang").html(data);
+ }
+
+
+ function mkwsHtmlSort() {
+ debug("HTML sort, m_sortOrder = '" + m_sortOrder + "'");
+ var sort_html = '<select class="mkwsSort mkwsTeam_' + m_teamName + '">';
+
+ for(var i = 0; i < mkws_config.sort_options.length; i++) {
+ var opt = mkws_config.sort_options[i];
+ var key = opt[0];
+ var val = opt.length == 1 ? opt[0] : opt[1];
+
+ sort_html += '<option value="' + key + '"';
+ if (m_sortOrder == key || m_sortOrder == val) {
+ sort_html += ' selected="selected"';
+ }
+ sort_html += '>' + M(val) + '</option>';
+ }
+ sort_html += '</select>';
+
+ return sort_html;
+ }
+
+
+ function mkwsHtmlPerpage() {
+ debug("HTML perpage, m_perpage = " + m_perpage);
+ var perpage_html = '<select class="mkwsPerpage mkwsTeam_' + m_teamName + '">';
+
+ for(var i = 0; i < mkws_config.perpage_options.length; i++) {
+ var key = mkws_config.perpage_options[i];
+
+ perpage_html += '<option value="' + key + '"';
+ if (key == m_perpage) {
+ perpage_html += ' selected="selected"';
+ }
+ perpage_html += '>' + key + '</option>';
+ }
+ perpage_html += '</select>';
+
+ return perpage_html;
+ }
+
+
+ function mkwsHtmlSwitch() {
+ debug("HTML switch for team " + m_teamName);
+
+ var node = findnode(".mkwsSwitch");
+ node.append($('<a href="#" onclick="mkws.switchView(\'' + m_teamName + '\', \'records\')">' + M('Records') + '</a>'));
+ node.append($("<span/>", { text: " | " }));
+ node.append($('<a href="#" onclick="mkws.switchView(\'' + m_teamName + '\', \'targets\')">' + M('Targets') + '</a>'));
+
+ debug("HTML targets");
+ var node = findnode(".mkwsTargets");
+ node.html('\
+<div class="mkwsBytarget mkwsTeam_' + m_teamName + '">\
+ No information available yet.\
+</div>');
+ node.css("display", "none");
+ }
+
+
+ that.runAutoSearch = function() {
+ var node = findnode('.mkwsRecords,.mkwsTermlists');
+ var query = node.attr('autosearch');
+ if (!query)
+ return;
+
+ if (query.match(/^!param!/)) {
+ var param = query.replace(/^!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");
+ }
+ } else if (query.match(/^!path!/)) {
+ var index = query.replace(/^!path!/, '');
+ var path = window.location.pathname.split('/');
+ query = path[path.length - index];
+ debug("obtained query '" + query + "' from path-component '" + index + "'");
+ if (!query) {
+ alert("This page has a MasterKey widget that needs a query specified by the path-component " + index);
+ }
+ }
+
+ debug("node=" + node + ", class='" + node.className + "', query=" + query);
+
+ var sortOrder = node.attr('sort');
+ var targets = node.attr('targets');
+ var s = "running auto search: '" + query + "'";
+ if (sortOrder) s += " sorted by '" + sortOrder + "'";
+ if (targets) s += " in targets '" + targets + "'";
+ debug(s);
+
+ newSearch(query, sortOrder, targets);
+ }
+
+
+ // 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;
+
+ if (!lang || !mkws.locale_lang[lang])
+ return word;
+
+ return mkws.locale_lang[lang][word] || word;
+ }
+ mkws.M = M; // so the Handlebars helper can use it
+
+
+ // Finds the node of the specified class within the current team
+ // Multiple OR-clauses separated by commas are handled
+ // More complex cases may not work
+ //
+ function findnode(selector, teamName) {
+ teamName = teamName || m_teamName;
+
+ selector = $.map(selector.split(','), function(s, i) {
+ return s + '.mkwsTeam_' + teamName;
+ }).join(',');
+
+ return $(selector);
+ }
+
+
+ function renderSummary(hit)
+ {
+ var template = loadTemplate("Summary");
+ hit._id = "mkwsRec_" + hit.recid;
+ hit._onclick = "mkws.showDetails('" + m_teamName + "', this.id);return false;"
+ return template(hit);
+ }