|
170 | 170 | var child = copy.childNodes[1];
|
171 | 171 | var doubleQuote = '"';
|
172 | 172 | child.innerHTML = escapeHTML(name);
|
173 |
| - child.next().innerHTML = doubleQuote + escapeHTML(pattern) + doubleQuote; |
| 173 | + var patternString = doubleQuote + escapeHTML(pattern) + doubleQuote; |
| 174 | + child.next().innerHTML = '<a href="#" class="patternAnchor">' + patternString + '</a>'; |
174 | 175 |
|
175 | 176 | var hidden = document.createElement('input');
|
176 | 177 | hidden.setAttribute('name', '[pattern]');
|
|
185 | 186 | item.outerHTML = item.outerHTML.replace("{{ROLE}}", doubleEscapeHTML(name)).replace("{{PATTERN}}", doubleEscapeHTML(pattern));
|
186 | 187 | });
|
187 | 188 |
|
| 189 | + child = copy.childNodes[1]; |
| 190 | + var link = child.next().children[0]; |
| 191 | + bindAgentListenerToPattern(link); |
| 192 | + |
188 | 193 | <j:if test="${nbAgentRoles lt 20}">
|
189 | 194 | table.appendChild(copy);
|
190 | 195 | </j:if>
|
|
196 | 201 | });
|
197 | 202 | })();
|
198 | 203 |
|
| 204 | + var bindAgentListenerToPattern = function(elem) { |
| 205 | + elem.addEventListener('click', showMatchingAgents); |
| 206 | + } |
| 207 | + |
| 208 | + var showMatchingAgents = function() { |
| 209 | + var pattern = this.text.substring(1, this.text.length - 1); // Ignore quotes for the pattern |
| 210 | + var maxAgents = 10; // Maximum agents to search for |
| 211 | + var url = 'strategy/getMatchingAgents'; |
| 212 | + reqParams = { |
| 213 | + 'pattern' : pattern, |
| 214 | + 'maxAgents' : maxAgents |
| 215 | + } |
| 216 | + |
| 217 | + new Ajax.Request(url, { |
| 218 | + method: 'get', |
| 219 | + parameters: reqParams, |
| 220 | + onSuccess: function(req) { |
| 221 | + var matchingAgents = req.responseText.evalJSON().matchingAgents; |
| 222 | + |
| 223 | + if(matchingAgents != null) { |
| 224 | + showAgentsModal(matchingAgents); |
| 225 | + } else { |
| 226 | + showAgentErrorMessageModal(); |
| 227 | + } |
| 228 | + }, |
| 229 | + onFailure: showAgentErrorMessageModal |
| 230 | + }); |
| 231 | + } |
| 232 | + |
| 233 | + var showAgentsModal = function(agents) { |
| 234 | + modalText = ''; |
| 235 | + if(agents.length > 0) { |
| 236 | + modalText += 'Matching Agents:\n\n'; |
| 237 | + for(var i = 0; i != agents.length; i++) { |
| 238 | + modalText += ' - ' + agents[i] + '\n'; |
| 239 | + } |
| 240 | + } else { |
| 241 | + modalText += 'No matching Agents found.'; |
| 242 | + } |
| 243 | + modalText += '\n\n'; |
| 244 | + alert(modalText); |
| 245 | + } |
| 246 | + |
| 247 | + var showAgentErrorMessageModal = function() { |
| 248 | + alert('Unable to fetch matching Agents.'); |
| 249 | + } |
| 250 | + |
199 | 251 | Event.observe(window, 'load', function(event) {
|
200 | 252 | agentTableHighlighter = new TableHighlighter('agentRoles', 3, 2);
|
| 253 | + // Show agents matching a pattern on click |
| 254 | + var agentRolesTable = document.getElementById('agentRoles') |
| 255 | + var patterns = agentRolesTable.getElementsByClassName('patternAnchor'); |
| 256 | + for(var i = 0; i != patterns.length; i++) { |
| 257 | + bindAgentListenerToPattern(patterns[i]); |
| 258 | + } |
| 259 | + |
201 | 260 | });
|
202 | 261 |
|
203 | 262 | var deleteAgentRole = function(e) {
|
|
217 | 276 | this.innerHTML = '<input type="text" name="[pattern]" value="' + this.childNodes[1].value + '" size="' + (this.childNodes[1].value.length+10) + '"/>';
|
218 | 277 | }
|
219 | 278 | else {
|
220 |
| - this.innerHTML = this.childNodes[0].value.escapeHTML() + '<input type="hidden" name="[pattern]" value="' + this.childNodes[0].value + '"/>'; |
| 279 | + this.innerHTML = '<a href="#" class="patternAnchor">"' + this.childNodes[0].value.escapeHTML() + '"</a><input type="hidden" name="[pattern]" value="' + this.childNodes[0].value + '"/>'; |
| 280 | + child = this.children[0]; |
| 281 | + bindAgentListenerToPattern(this.children[0]); |
221 | 282 | }
|
222 | 283 | return false;
|
223 | 284 | }
|
|
0 commit comments