From 0e8f814e7736796ac30ead73fb3d08e8cb183139 Mon Sep 17 00:00:00 2001 From: Mike Taylor Date: Thu, 1 May 2014 14:52:32 +0100 Subject: [PATCH] The m_widgets private member, which maps widget-type to wiget object, now maps to an array of widgets of that type. For most types of widget, only one instance per team makes sense, so the team.widget method now complains loudly if it's invoked for a type that has more than one instance -- client code should never do that. visitWidgets now visits all widgets of the specified type. --- src/mkws-team.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/mkws-team.js b/src/mkws-team.js index c6c5490..ef216fc 100644 --- a/src/mkws-team.js +++ b/src/mkws-team.js @@ -29,7 +29,7 @@ function team($, teamName) { 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 + ']'; }; @@ -428,29 +428,34 @@ function team($, teamName) { 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.length > 1) { + alert("widget('" + type + "') finds " + list.length + " widgets: using first"); + } + return list[0]; } -- 1.7.10.4