Ember.Handlebars.helper('panelBar', function(status) { var highlightClass; if (status == "passing") { highlightClass = "bg-green"; } else { highlightClass = "bg-orange"; } return new Handlebars.SafeString('
'); }); Ember.Handlebars.helper('listBar', function(status) { var highlightClass; if (status == "passing") { highlightClass = "bg-green"; } else { highlightClass = "bg-orange"; } return new Handlebars.SafeString('
'); }); Ember.Handlebars.helper('sessionName', function(session) { var name; if (session.Name === "") { name = '' + session.ID + ''; } else { name = '' + session.Name + '' + ' ' + session.ID + ''; } return new Handlebars.SafeString(name); }); Ember.Handlebars.helper('sessionMeta', function(session) { var meta = '
' + session.Behavior + ' behavior
'; if (session.TTL !== "") { meta = meta + '
, ' + session.TTL + ' TTL
'; } return new Handlebars.SafeString(meta); }); Ember.Handlebars.helper('aclName', function(name, id) { if (name === "") { return id; } else { return new Handlebars.SafeString(name + ' ' + id + ''); } }); Ember.Handlebars.helper('formatRules', function(rules) { if (rules === "") { return "No rules defined"; } else { return rules; } }); // We need to do this because of our global namespace properties. The // service.Tags Ember.Handlebars.helper('serviceTagMessage', function(tags) { if (tags === null) { return "No tags"; } }); // Sends a new notification to the UI function notify(message, ttl) { if (window.notifications !== undefined && window.notifications.length > 0) { $(window.notifications).each(function(i, v) { v.dismiss(); }); } var notification = new NotificationFx({ message : '

'+ message + '

', layout : 'growl', effect : 'slide', type : 'notice', ttl: ttl, }); // show the notification notification.show(); // Add the notification to the queue to be closed window.notifications = []; window.notifications.push(notification); } // Tomography Ember.Handlebars.helper('tomographyGraph', function(tomography, size) { // This is ugly, but I'm working around bugs with Handlebars and templating // parts of svgs. Basically things render correctly the first time, but when // stuff is updated for subsequent go arounds the templated parts don't show. // It appears (based on google searches) that the replaced elements aren't // being interpreted as http://www.w3.org/2000/svg. Anyway, this works and // if/when Handlebars fixes the underlying issues all of this can be cleaned // up drastically. var max = Math.max.apply(null, tomography.distances); var insetSize = size / 2 - 8; var buf = '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' '; var distances = tomography.distances; var n = distances.length; if (tomography.n > 360) { // We have more nodes than we want to show, take a random sampling to keep // the number around 360. var sampling = 360 / tomography.n; distances = distances.filter(function (_, i) { return i == 0 || i == n - 1 || Math.random() < sampling }); // Re-set n to the filtered size n = distances.length; } distances.forEach(function (distance, i) { buf += ' '; }); buf += '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + (max > 0 ? (parseInt(max * 25) / 100) : 0) + 'ms' + ' ' + ' ' + ' ' + ' ' + (max > 0 ? (parseInt(max * 50) / 100) : 0)+ 'ms' + ' ' + ' ' + ' ' + ' ' + (max > 0 ? (parseInt(max * 75) / 100) : 0) + 'ms' + ' ' + ' ' + ' ' + ' ' + (max > 0 ? (parseInt(max * 100) / 100) : 0) + 'ms' + ' ' + ' ' + ' ' + ' '; return new Handlebars.SafeString(buf); });