<script data-main="<%= ApplicationController.root_context -%>/javascripts/quality-gate/app" src="<%= ApplicationController.root_context -%>/javascripts/third-party/require.js"></script>
<% end %>
-<div class="navigator quality-gates-navigator">
- <div class="navigator-header"></div>
- <div class="navigator-results"><i class="spinner"></i></div>
- <div class="navigator-details"></div>
- <div class="navigator-actions"></div>
+<div class="quality-gate-page-loader">
+ <i class="spinner"></i>
</div>
+<%= render :partial => '/quality_gates/templates/quality_gates_layout.hbs' -%>
<%= render :partial => '/quality_gates/templates/quality_gate_sidebar_list_item_template.hbs' -%>
<%= render :partial => '/quality_gates/templates/quality_gate_actions_template.hbs' -%>
<%= render :partial => '/quality_gates/templates/quality_gate_edit_template.hbs' -%>
--- /dev/null
+<script id="quality-gates-layout" type="text/x-handlebars-template">
+ <div class="navigator-header"></div>
+ <div class="navigator-results"></div>
+ <div class="navigator-details"></div>
+ <div class="navigator-actions"></div>
+</script>
'quality-gate/views/quality-gate-sidebar-list-view',
'quality-gate/views/quality-gate-actions-view',
'quality-gate/views/quality-gate-edit-view',
- 'quality-gate/router'
+ 'quality-gate/router',
+ 'quality-gate/layout',
'common/handlebars-extensions'
], (
Backbone, Marionette, Handlebars,
QualityGateSidebarListItemView,
QualityGateActionsView,
QualityGateEditView,
- QualityGateRouter
+ QualityGateRouter,
+ QualityGateLayout
) ->
# Create a generic error handler for ajax requests
if @qualityGates.length > 0
@router.navigate "show/#{@qualityGates.models[0].get('id')}", trigger: true
else
- App.contentRegion.reset()
+ App.layout.contentRegion.reset()
App.deleteQualityGate = (id) ->
App.qualityGates.remove id
App.qualityGates.each (gate) ->
gate.set('default', false) unless gate.id == id
- # Define page regions
- App.addRegions
- headerRegion: '.navigator-header'
- actionsRegion: '.navigator-actions'
- listRegion: '.navigator-results'
- detailsRegion: '.navigator-details'
+ # Construct layout
+ App.addInitializer ->
+ @layout = new QualityGateLayout
+ jQuery('body').append @layout.render().el
# Construct actions bar
App.addInitializer ->
@qualityGateActionsView = new QualityGateActionsView
app: @
- @actionsRegion.show @qualityGateActionsView
+ @layout.actionsRegion.show @qualityGateActionsView
# Construct sidebar
App.addInitializer ->
@qualityGateSidebarListView = new QualityGateSidebarListItemView
collection: @qualityGates
app: @
- @listRegion.show @qualityGateSidebarListView
+ @layout.listRegion.show @qualityGateSidebarListView
# Construct edit view
App.addInitializer ->
}
});
- requirejs(['backbone', 'backbone.marionette', 'handlebars', 'quality-gate/collections/quality-gates', 'quality-gate/collections/metrics', 'quality-gate/views/quality-gate-sidebar-list-view', 'quality-gate/views/quality-gate-actions-view', 'quality-gate/views/quality-gate-edit-view', 'quality-gate/router', 'common/handlebars-extensions'], function(Backbone, Marionette, Handlebars, QualityGates, Metrics, QualityGateSidebarListItemView, QualityGateActionsView, QualityGateEditView, QualityGateRouter) {
+ requirejs(['backbone', 'backbone.marionette', 'handlebars', 'quality-gate/collections/quality-gates', 'quality-gate/collections/metrics', 'quality-gate/views/quality-gate-sidebar-list-view', 'quality-gate/views/quality-gate-actions-view', 'quality-gate/views/quality-gate-edit-view', 'quality-gate/router', 'quality-gate/layout', 'common/handlebars-extensions'], function(Backbone, Marionette, Handlebars, QualityGates, Metrics, QualityGateSidebarListItemView, QualityGateActionsView, QualityGateEditView, QualityGateRouter, QualityGateLayout) {
var App;
jQuery.ajaxSetup({
error: function(jqXHR) {
trigger: true
});
} else {
- return App.contentRegion.reset();
+ return App.layout.contentRegion.reset();
}
};
App.deleteQualityGate = function(id) {
}
});
};
- App.addRegions({
- headerRegion: '.navigator-header',
- actionsRegion: '.navigator-actions',
- listRegion: '.navigator-results',
- detailsRegion: '.navigator-details'
+ App.addInitializer(function() {
+ this.layout = new QualityGateLayout;
+ return jQuery('body').append(this.layout.render().el);
});
App.addInitializer(function() {
this.qualityGateActionsView = new QualityGateActionsView({
app: this
});
- return this.actionsRegion.show(this.qualityGateActionsView);
+ return this.layout.actionsRegion.show(this.qualityGateActionsView);
});
App.addInitializer(function() {
this.qualityGateSidebarListView = new QualityGateSidebarListItemView({
collection: this.qualityGates,
app: this
});
- return this.listRegion.show(this.qualityGateSidebarListView);
+ return this.layout.listRegion.show(this.qualityGateSidebarListView);
});
App.addInitializer(function() {
this.qualityGateEditView = new QualityGateEditView({
--- /dev/null
+define [
+ 'backbone.marionette',
+ 'common/handlebars-extensions'
+], (
+ Marionette
+) ->
+
+ class AppLayout extends Marionette.Layout
+ className: 'navigator quality-gates-navigator'
+ template: getTemplate '#quality-gates-layout'
+ regions:
+ headerRegion: '.navigator-header'
+ actionsRegion: '.navigator-actions'
+ listRegion: '.navigator-results'
+ detailsRegion: '.navigator-details'
qualityGateDetailHeaderView = new QualityGateDetailHeaderView
app: @app
model: qualityGate
- @app.headerRegion.show qualityGateDetailHeaderView
+ @app.layout.headerRegion.show qualityGateDetailHeaderView
qualityGateDetailView = new QualityGateDetailView
app: @app
model: qualityGate
- @app.detailsRegion.show qualityGateDetailView
+ @app.layout.detailsRegion.show qualityGateDetailView
qualityGateDetailView.$el.hide()
qualityGateDetailHeaderView.showSpinner()
app: this.app,
model: qualityGate
});
- this.app.headerRegion.show(qualityGateDetailHeaderView);
+ this.app.layout.headerRegion.show(qualityGateDetailHeaderView);
qualityGateDetailView = new QualityGateDetailView({
app: this.app,
model: qualityGate
});
- this.app.detailsRegion.show(qualityGateDetailView);
+ this.app.layout.detailsRegion.show(qualityGateDetailView);
qualityGateDetailView.$el.hide();
qualityGateDetailHeaderView.showSpinner();
return qualityGate.fetch().done(function() {
.navigator-page #ftlinks {
margin-top: 0;
}
+.quality-gate-page-loader {
+ padding: 10px 0 0 10px;
+}
.quality-gates-navigator .navigator-header {
left: 320px;
border-bottom-color: #e1e1e1;
@import "mixins";
@import "navigator/base";
+.quality-gate-page-loader {
+ padding: @navigatorPadding 0 0 @navigatorPadding;
+}
+
.quality-gates-navigator {
.navigator-header {