Skip to content

Commit 3541884

Browse files
author
Becky Sroufe
committed
Merge remote-tracking branch 'ian/production-readiness' into loadingview
2 parents e99f945 + 7fdd04a commit 3541884

32 files changed

+308
-203
lines changed

app/app-js/app-require.js

+5-31
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ require.config({
1010
'marionette': '../vendor/marionette/backbone.marionette',
1111
'bootstrap': '../vendor/bootstrap/bootstrap',
1212
'parsley': '../vendor/parsleyjs/parsley',
13+
'spinner': '../vendor/spin.js/spin',
1314
'hogan': '../vendor/requirejs-hogan-plugin/hogan',
1415
'hgn': '../vendor/requirejs-hogan-plugin/hgn',
1516
'text': '../vendor/requirejs-hogan-plugin/text',
1617

17-
// change to logger-prod for production (disables logging)
18-
'lib/logger': 'lib/logger-dev'
18+
// change to -prod for production
19+
'lib/logger': 'lib/logger-dev',
20+
'lib/eventDebugger': 'lib/eventDebugger-dev'
1921
},
2022

2123
shim: {
@@ -38,32 +40,4 @@ require.config({
3840
}
3941
});
4042

41-
require([
42-
'marionette',
43-
'app',
44-
'backbone.computedfields',
45-
'bootstrap',
46-
'entities/api/api.module',
47-
'entities/service/service.module',
48-
'entities/alert/alert.module',
49-
'debug/event.debugger'
50-
],
51-
function (Marionette, app) {
52-
require([
53-
'modules/header/header.module',
54-
'modules/menu/menu.module',
55-
'modules/welcome/welcome.module',
56-
'modules/footer/footer.module',
57-
'modules/static/static.module',
58-
'modules/tryUri/tryUri.module',
59-
'modules/alert/alert.module',
60-
'modules/loading/loading.module',
61-
], function () {
62-
// Override templating method to use hgn templates
63-
Marionette.Renderer.render = function (template, data) {
64-
return template(data);
65-
};
66-
67-
app.start();
68-
});
69-
});
43+
require(['app-start']);

app/app-js/app-start.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
define(function (require) {
2+
require('marionette');
3+
require('bootstrap');
4+
require('backbone.computedfields');
5+
require('lib/eventDebugger');
6+
7+
var Marionette = require('marionette'),
8+
app = require('app'),
9+
10+
api = require('entities/api/api.module'),
11+
service = require('entities/service/service.module'),
12+
alert = require('entities/alert/alert.module'),
13+
14+
header = require('modules/header/header.module'),
15+
menu = require('modules/menu/menu.module'),
16+
welcome = require('modules/welcome/welcome.module'),
17+
footer = require('modules/footer/footer.module'),
18+
static_ = require('modules/static/static.module'),
19+
tryUri = require('modules/tryUri/tryUri.module'),
20+
alert = require('modules/alert/alert.module'),
21+
loading = require('modules/loading/loading.module');
22+
23+
// Override templating method to use hgn templates
24+
Marionette.Renderer.render = function (template, data) {
25+
return template(data);
26+
};
27+
28+
// start entity modules
29+
api.start();
30+
service.start();
31+
alert.start();
32+
33+
// start rendering modules
34+
header.start();
35+
menu.start();
36+
welcome.start();
37+
footer.start();
38+
static_.start();
39+
tryUri.start();
40+
alert.start();
41+
loading.start();
42+
43+
// start app
44+
app.start();
45+
46+
});

app/app-js/app.controller.js

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
define(function (require) {
22
var AppContentLayout = require('app.content.layout'),
33
ModuleController = require('lib/module.controller'),
4+
history = require('lib/history'),
45
AppController;
56

67
AppController = ModuleController.extend({

app/app-js/app.js

+9
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ define(function (require) {
1111
loadingRegion: '#loading-region'
1212
});
1313

14+
// Hacky fix for stupid Facebook oauth redirect hash
15+
app.on('initialize:before', function () {
16+
if (window.location.hash == '#_=_') {
17+
history.replaceState
18+
? history.replaceState(null, null, window.location.href.split('#')[0])
19+
: window.location.hash = '';
20+
}
21+
});
22+
1423
app.on('initialize:after', function () {
1524
history.start();
1625
});

app/app-js/entities/alert/alert.module.js

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ define(function (require) {
1111
});
1212

1313
alertEntities = app.module('alertEntities', AlertModule);
14-
alertEntities.start();
1514

1615
return alertEntities;
1716
});

app/app-js/entities/api/api.model.js

+25-22
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ define(function (require) {
44
GenericUriModel = require('entities/api/call/genericUri.model'),
55
SampleUriModel = require('entities/api/call/sampleUri.model'),
66
GetUriModel = require('entities/api/call/tryUri.model'),
7-
HasNestedModel = require('lib/hasNestedModel.mixin'),
7+
HasNestedModel = require('lib/hasNestedModel'),
88
appChannel = require('app.channel'),
99
ApiModel;
1010

@@ -34,43 +34,46 @@ define(function (require) {
3434
}
3535
},
3636

37-
constructor: function (attrs, options) {
38-
var apiAttributes = _.pick(attrs, ['serviceKey', 'endpointKey']);
39-
40-
// Initialize submodels
41-
_.extend(attrs, {
42-
genericOutput: new GenericOutputModel(apiAttributes),
43-
genericUri: new GenericUriModel(apiAttributes),
44-
sampleUri: new SampleUriModel(apiAttributes),
45-
tryUri: new GetUriModel()
46-
});
47-
37+
constructor: function () {
4838
// Attach nested model functionality
4939
new HasNestedModel(this);
5040

51-
ApiModel.__super__.constructor.call(this, attrs, options);
41+
// Attach computed field functionality
42+
new Backbone.ComputedFields(this);
43+
44+
ApiModel.__super__.constructor.apply(this, arguments);
5245
},
5346

5447
initialize: function () {
55-
var self = this;
48+
var self = this,
49+
apiAttributes = {
50+
serviceKey: this.get('serviceKey'),
51+
endpointKey: this.get('endpointKey')
52+
};
5653

57-
// Attach computed fields functionality
58-
new Backbone.ComputedFields(this);
54+
// Initialize submodels
55+
this.set({
56+
genericOutput: new GenericOutputModel(apiAttributes),
57+
genericUri: new GenericUriModel(apiAttributes),
58+
sampleUri: new SampleUriModel(apiAttributes),
59+
tryUri: new GetUriModel()
60+
});
5961

6062
this.on('change', function () {
61-
var serviceKey,
62-
endpointKey;
63-
63+
var apiAttributes;
64+
6465
// When serviceKey or endpointKey are changed, pass them down to submodels
6566
if (self.hasChanged('serviceKey') || self.hasChanged('endpointKey')) {
66-
serviceKey = self.get('serviceKey');
67-
endpointKey = self.get('endpointKey');
67+
apiAttributes = {
68+
serviceKey: self.get('serviceKey'),
69+
endpointKey: self.get('endpointKey')
70+
};
6871

6972
_.invoke([
7073
self.get('genericOutput'),
7174
self.get('genericUri'),
7275
self.get('sampleUri')
73-
], 'set', { serviceKey: serviceKey, endpointKey: endpointKey });
76+
], 'set', apiAttributes);
7477
}
7578
});
7679
},

app/app-js/entities/api/api.module.js

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ define(function (require) {
1111
});
1212

1313
apiEntities = app.module('apiEntities', AlertModule);
14-
apiEntities.start();
1514

1615
return apiEntities;
1716
});

app/app-js/entities/service/service.collection.js

+2-25
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,12 @@
11
define(function (require) {
22
var Backbone = require('backbone'),
33
ServiceModel = require('entities/service/service.model'),
4-
AuthorizedServicesModel = require('entities/service/authorized/authorizedServices.model'),
4+
appChannel = require('app.channel'),
55
ServiceCollection;
66

77
ServiceCollection = Backbone.Collection.extend({
88

9-
model: ServiceModel,
10-
11-
initialize: function () {
12-
this.authorizedServices = new AuthorizedServicesModel();
13-
14-
this.listenTo(this.authorizedServices, 'change', function () {
15-
var connections = this.authorizedServices.get('connections');
16-
if (connections.length > 0) {
17-
_.each(this.models, function (model) {
18-
var connected = false;
19-
_.each(connections, function (connection) {
20-
if (model.get('serviceKey') === connection) {
21-
connected = true;
22-
}
23-
});
24-
model.set('connected', connected);
25-
});
26-
}
27-
});
28-
},
29-
30-
fetchAuthorized: function () {
31-
this.authorizedServices.fetch();
32-
}
9+
model: ServiceModel
3310
});
3411

3512
return ServiceCollection;

app/app-js/entities/service/service.controller.js

+33-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
define(function (require) {
2-
var ModuleController = require('lib/module.controller'),
2+
var Marionette = require('marionette'),
3+
ModuleController = require('lib/module.controller'),
34
ServiceCollection = require('entities/service/service.collection'),
5+
AuthorizedServicesModel = require('entities/service/authorized/authorizedServices.model'),
46
services = require('entities/service/services'),
7+
appChannel = require('app.channel'),
58
ServiceController;
69

710
ServiceController = ModuleController.extend({
@@ -11,13 +14,42 @@ define(function (require) {
1114
'get:serviceCollection': 'getServiceCollection',
1215
'lookup:serviceName': 'lookupServiceName',
1316
'lookup:endpointName': 'lookupEndpointName'
17+
},
18+
19+
commands: {
20+
'poll:authorizedServices': 'pollAuthorizedServices',
21+
'connect:service': 'connectService',
22+
'disconnect:service': 'disconnectService'
1423
}
1524
},
1625

26+
authorizedServices: null,
27+
28+
initialize: function () {
29+
this.authorizedServices = new AuthorizedServicesModel();
30+
},
31+
32+
connectService: function (serviceKey) {
33+
window.location.assign('/auth/' + serviceKey + '?auth-return=' +
34+
encodeURIComponent(window.location.pathname + window.location.hash));
35+
},
36+
37+
disconnectService: function (serviceKey) {
38+
window.location.assign('/disconnect/' + serviceKey);
39+
},
40+
1741
getServiceCollection: function () {
1842
return new ServiceCollection(services.clone());
1943
},
2044

45+
pollAuthorizedServices: function () {
46+
this.authorizedServices.fetch({
47+
success: function (model, data) {
48+
appChannel.vent.trigger('change:authorizedServices', data.connections);
49+
}
50+
});
51+
},
52+
2153
lookupServiceName: function (serviceKey) {
2254
return services.lookupServiceName(serviceKey);
2355
},

app/app-js/entities/service/service.module.js

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ define(function (require) {
1111
});
1212

1313
serviceEntities = app.module('serviceEntities', ServiceModule);
14-
serviceEntities.start();
1514

1615
return serviceEntities;
1716
});

app/app-js/lib/eventDebugger-prod.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
define(function (require) {
2+
$.noop();
3+
});

0 commit comments

Comments
 (0)