var m_tempateText = {}; // widgets can register tempates to be compiled
var m_template = {}; // compiled templates, from any source
var m_config = mkws.objectInheritingFrom(mkws.config);
- var m_widgets = {}; // Maps widget-type to object
+ var m_widgets = {}; // Maps widget-type to array of widget objects
that.toString = function() { return '[Team ' + teamName + ']'; };
// want to make it per-team so different teams can operate in
// different languages.
//
- function M(word) {
- var lang = m_config.lang;
+ mkws.M = function (word) {
+ var lang = mkws.config.lang;
+ log("in M('" + word + "'), lang=" + 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
+ };
+ var M = mkws.M;
// Finds the node of the specified class within the current team
//log('findnode(' + selector + ') found ' + node.length + ' nodes');
return node;
}
- that.findnode = findnode;
- // This much simpler and more efficient function should be usable
- // in place of most uses of findnode.
function widgetNode(type) {
var w = that.widget(type);
return w ? $(w.node) : undefined;
that.addWidget = function(w) {
- if (!m_widgets[w.type]) {
- m_widgets[w.type] = w;
- //log("Added '" + w.type + "' widget to team '" + m_teamName + "'");
- } else if (typeof(m_widgets[w.type]) !== 'number') {
- m_widgets[w.type] = 2;
- //log("Added duplicate '" + w.type + "' widget to team '" + m_teamName + "'");
+ if (m_widgets[w.type] === undefined) {
+ m_widgets[w.type] = [ w ];
+ log("Added '" + w.type + "' widget to team '" + m_teamName + "'");
} else {
- m_widgets[w.type] += 1;
- //log("Added '" + w.type + "' widget #" + m_widgets[w.type] + "' to team '" + m_teamName + "'");
+ m_widgets[w.type].push(w);
+ log("Added '" + w.type + "' widget #" + m_widgets[w.type].length + "' to team '" + m_teamName + "'");
}
}
that.visitWidgets = function(callback) {
for (var type in m_widgets) {
- var res = callback(type, m_widgets[type]);
- if (res !== undefined)
- return res;
+ var list = m_widgets[type];
+ for (var i = 0; i < list.length; i++) {
+ var res = callback(type, list[i]);
+ if (res !== undefined) {
+ return res;
+ }
+ }
}
return undefined;
}
that.widget = function(type) {
- return m_widgets[type];
+ var list = m_widgets[type];
+
+ if (!list)
+ return undefined;
+ if (list.length > 1) {
+ alert("widget('" + type + "') finds " + list.length + " widgets: using first");
+ }
+ return list[0];
}
- var lang = mkws.getParameterByName("lang") || m_config.lang;
+ var lang = mkws.getParameterByName("lang") || mkws.config.lang;
if (!lang || !mkws.locale_lang[lang]) {
- m_config.lang = ""
+ mkws.config.lang = ""
} else {
- m_config.lang = lang;
+ mkws.config.lang = lang;
}
- log("Locale language: " + (m_config.lang ? m_config.lang : "none"));
+ log("Locale language: " + (mkws.config.lang ? mkws.config.lang : "none"));
return that;
};