Fail-safe rendering of plugins in build view.

Prevent the whole display to fail if an exception occurs in one plugin.
This commit is contained in:
Adirelle 2015-04-28 07:34:48 +02:00
parent 590ab5fae5
commit 723ccd678d

View file

@ -70,9 +70,8 @@ var Build = Class.extend({
}, },
renderPlugins: function() { renderPlugins: function() {
var self = this; var rendered = [],
var rendered = []; renderOrder = localStorage.getItem('phpci-plugin-order');
var renderOrder = localStorage.getItem('phpci-plugin-order');
if (renderOrder) { if (renderOrder) {
renderOrder = JSON.parse(renderOrder); renderOrder = JSON.parse(renderOrder);
@ -82,43 +81,48 @@ var Build = Class.extend({
for (var idx in renderOrder) { for (var idx in renderOrder) {
var key = renderOrder[idx]; var key = renderOrder[idx];
self.renderPlugin(self.plugins[key]); this.renderPlugin(key);
rendered.push(key); rendered.push(key);
} }
for (var key in this.plugins) { for (var key in this.plugins) {
if (rendered.indexOf(key) == -1) { if (rendered.indexOf(key) == -1) {
self.renderPlugin(self.plugins[key]); self.renderPlugin(key);
} }
} }
$('#plugins').sortable({ $('#plugins').sortable({
handle: '.box-title', handle: '.box-title',
connectWith: '#plugins', connectWith: '#plugins',
update: self.storePluginOrder update: this.storePluginOrder
}); });
$(window).trigger({type: 'build-updated', queryData: self.buildData}); $(window).trigger({type: 'build-updated', queryData: this.buildData});
}, },
renderPlugin: function(plugin) { renderPlugin: function(key) {
var output = plugin.render(); try {
var plugin = this.plugins[key],
output = plugin.render();
if (!plugin.box) { if (!plugin.box) {
output = $('<div class="box-body"></div>').append(output); output = $('<div class="box-body"></div>').append(output);
}
var container = $('<div></div>').addClass('ui-plugin ' + plugin.css);
var content = $('<div></div>').attr('id', plugin.id).append(output);
content.addClass('box box-default');
if (plugin.title) {
content.prepend('<div class="box-header"><h3 class="box-title">'+plugin.title+'</h3></div>');
}
container.append(content);
$('#plugins').append(container);
} catch(e) {
console.log("Cannot render plugin '"+key+"': ", e);
} }
var container = $('<div></div>').addClass('ui-plugin ' + plugin.css);
var content = $('<div></div>').attr('id', plugin.id).append(output);
content.addClass('box box-default');
if (plugin.title) {
content.prepend('<div class="box-header"><h3 class="box-title">'+plugin.title+'</h3></div>');
}
container.append(content);
$('#plugins').append(container);
}, },
UiPlugin: Class.extend({ UiPlugin: Class.extend({
@ -145,4 +149,4 @@ var Build = Class.extend({
} }
}) })
}); });