Skip to content

Commit 82c15f5

Browse files
committed
Merge pull request #22 from AcalephStorage/release/0.1.2
Release/0.1.2
2 parents 40e3a36 + 0db68b5 commit 82c15f5

36 files changed

+1020
-321
lines changed

.jshintrc

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
"document",
44
"window",
55
"-Promise",
6-
"moment"
6+
"moment",
7+
"ace",
8+
"ansi_up",
9+
"Base64"
710
],
811
"browser": true,
912
"boss": true,

app/components/build-stage.js

+11
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ export default Ember.Component.extend({
2626
this.sendAction('selectStage', this.get('model'));
2727
},
2828

29+
willDestroyElement() {
30+
this._super(...arguments);
31+
this.removeObserver('model.status', this, this.fetchLogs);
32+
},
33+
2934
fetchLogs() {
3035
let stage = this.get('model');
3136

@@ -35,6 +40,12 @@ export default Ember.Component.extend({
3540
logFetcher.then((logFiles) => {
3641
stage.set('logFiles', logFiles);
3742
});
43+
44+
if (stage.get('status') === 'PENDING') {
45+
this.addObserver('model.status', this, this.fetchLogs);
46+
} else {
47+
this.removeObserver('model.status', this, this.fetchLogs);
48+
}
3849
}
3950
},
4051

app/components/main-menu.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Ember from 'ember';
22

33
export default Ember.Component.extend({
44

5-
classNames: Ember.String.w('ui borderless attached menu main-menu'),
5+
classNames: Ember.String.w('ui attached secondary menu'),
66

77
session: Ember.inject.service(),
88
appNamespace: Ember.inject.service(),

app/components/pipeline-build.js

+22-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {task,timeout} from 'ember-concurrency';
33

44
export default Ember.Component.extend({
55

6-
classNames: Ember.String.w('ui grid main-content'),
6+
classNames: Ember.String.w('ui columned grid'),
77

88
build: Ember.inject.service(),
99
notify: Ember.inject.service(),
@@ -18,6 +18,14 @@ export default Ember.Component.extend({
1818
build_number: this.get('buildNumber'),
1919
};
2020
}),
21+
isViewingStage: Ember.computed.bool('selectedStage'),
22+
infoBoxVisible: Ember.computed.or('isViewingPipelineDetails', 'isEditingPipeline', 'isViewingStage'),
23+
24+
init() {
25+
this._super(...arguments);
26+
this.set('isViewingPipelineDetails', false);
27+
this.set('isEditingPipeline', false);
28+
},
2129

2230
willInsertElement() {
2331
this.addObserver('buildNumber', this, this.getBuildDetails);
@@ -38,6 +46,7 @@ export default Ember.Component.extend({
3846
},
3947

4048
getBuildDetails() {
49+
this.set('model', undefined);
4150
this.get('stagesPoller').cancelAll();
4251
this.get('stagesPoller').perform();
4352
},
@@ -51,10 +60,8 @@ export default Ember.Component.extend({
5160

5261
buildFetcher: task(function * () {
5362
if (this.get('buildNumber')) {
54-
yield this.get('build').find(this.get('buildQuery'))
55-
.then((build) => {
56-
this.set('model', build);
57-
});
63+
let build = yield this.get('build').find(this.get('buildQuery'));
64+
this.set('model', build);
5865
}
5966
}).drop(),
6067

@@ -99,24 +106,34 @@ export default Ember.Component.extend({
99106
}).drop(),
100107

101108
actions: {
109+
historyHide() {
110+
return Ember.isPresent(this.get('model'));
111+
},
102112
selectBuild() {
103113
this.send('unselectStage');
114+
this.send('closePipelineDetails');
115+
this.send('closePipelineEditor');
104116
},
105117
confirmCreateBuild() {
118+
this.send('unselectStage');
119+
this.send('closePipelineDetails');
120+
this.send('closePipelineEditor');
106121
this.$('.ui.modal.create-build-confirmation').modal('show');
107122
},
108123
createBuild() {
109124
this.get('buildCreator').perform();
110125
},
111126
selectStage(stage) {
112127
this.send('closePipelineDetails');
128+
this.send('closePipelineEditor');
113129
this.set('selectedStage', stage);
114130
},
115131
unselectStage() {
116132
this.set('selectedStage', null);
117133
},
118134
viewPipelineDetails() {
119135
this.send('unselectStage');
136+
this.send('closePipelineEditor');
120137
this.set('isViewingPipelineDetails', true);
121138
},
122139
closePipelineDetails() {

app/components/pipeline-details.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import Ember from 'ember';
22

33
export default Ember.Component.extend({
44

5-
classNames: Ember.String.w('ui right internal rail stage-details'),
5+
classNames: Ember.String.w('ui right internal rail info-box'),
66

77
actions: {
88
close() {

app/components/pipeline-editor.js

+42-7
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import Configuration from '../config/environment';
44

55
export default Ember.Component.extend({
66

7-
classNames: Ember.String.w('ui right internal rail stage-details'),
7+
classNames: Ember.String.w('ui right internal rail info-box'),
88

99
pipeline: Ember.inject.service(),
1010
store: Ember.inject.service(),
1111
session: Ember.inject.service(),
1212
notify: Ember.inject.service(),
1313

14+
aceEditor: null,
15+
1416
willPullRequest: Ember.computed.equal('commitOption.option', 'pull_request'),
1517
editorAction: Ember.computed('definition', function() {
1618
let definition = this.get('definition');
@@ -27,9 +29,43 @@ export default Ember.Component.extend({
2729
},
2830

2931
didRender() {
30-
if (this.$('input[name="commitOption"][checked="checked"]').length === 0) {
32+
if (this.$('input[name="commit-option"][checked="checked"]').length === 0) {
3133
let commitOption = this.get('commitOption.option');
32-
this.$(`input[name="commitOption"][value="${commitOption}"]`).attr("checked", "checked")
34+
this.$(`input[name="commit-option"][value="${commitOption}"]`).attr("checked", "checked");
35+
}
36+
this.aceEditorInit();
37+
},
38+
39+
willDestroyElement() {
40+
this.removeObserver('definition.content', this, this.aceEditorContentChange);
41+
if (this.aceEditor) {
42+
this.aceEditor.destroy();
43+
this.aceEditor.container.remove();
44+
}
45+
},
46+
47+
aceEditorInit() {
48+
let textEditor = this.$("div#definition-content");
49+
if (textEditor.length && !textEditor.hasClass('ace_editor')) {
50+
let editorID = textEditor.attr('id');
51+
this.aceEditor = ace.edit(editorID);
52+
this.aceEditor.getSession().setTabSize(2);
53+
this.aceEditor.getSession().setMode("ace/mode/yaml");
54+
this.aceEditor.on('change', () => {
55+
this.set('definition.content', this.aceEditor.getSession().getValue());
56+
});
57+
this.aceEditor.$blockScrolling = Infinity;
58+
this.addObserver('definition.content', this, this.aceEditorContentChange);
59+
this.notifyPropertyChange('definition.content');
60+
}
61+
},
62+
63+
aceEditorContentChange() {
64+
if (!this.get('definition.content')) {
65+
this.aceEditor.getSession().setValue('');
66+
}
67+
else if (this.aceEditor.getSession().getValue() !== this.get('definition.content')) {
68+
this.aceEditor.getSession().setValue(this.get('definition.content'));
3369
}
3470
},
3571

@@ -85,10 +121,8 @@ export default Ember.Component.extend({
85121
},
86122

87123
definitionFetcher: task(function*(ajaxOptions) {
88-
yield Ember.$.ajax(ajaxOptions)
89-
.then((definition) => {
90-
this.serializeDefinition(definition);
91-
});
124+
let definition = yield Ember.$.ajax(ajaxOptions);
125+
this.serializeDefinition(definition);
92126
}).drop(),
93127

94128
definitionUpdater: task(function*(ajaxOptions) {
@@ -107,6 +141,7 @@ export default Ember.Component.extend({
107141
let action = this.get('editorAction').toLowerCase();
108142
yield Ember.$.ajax(ajaxOptions)
109143
.then((definition) => {
144+
this.get('model').reload();
110145
this.get('notify').success(`Successfully ${action}d the definition file for the pipeline`);
111146
this.serializeDefinition(definition);
112147
}, (res) => {

app/components/pipeline-list.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,27 @@ import {task,timeout} from 'ember-concurrency';
33

44
export default Ember.Component.extend({
55

6-
classNames: Ember.String.w('ui grid main-content'),
6+
classNames: Ember.String.w('ui columned grid'),
77

88
pipeline: Ember.inject.service(),
99

10+
init() {
11+
this._super(...arguments);
12+
this.set('isLoaded', false);
13+
},
14+
1015
pipelinesPoller: task(function*() {
1116
while (true) {
12-
yield this.get('pipeline').fetchAll();
17+
this.get('pipelinesFetcher').perform();
1318
yield timeout(60000); // 1-minute interval
1419
}
1520
}).on('init').drop(),
1621

22+
pipelinesFetcher: task(function*() {
23+
yield this.get('pipeline').fetchAll();
24+
this.set('isLoaded', true);
25+
}),
26+
1727
didInsertElement() {
1828
this.$(".in-header.icon.button").popup({
1929
variation: "small inverted",

app/components/stage-details.js

+2-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {task,timeout} from 'ember-concurrency';
33

44
export default Ember.Component.extend({
55

6-
classNames: Ember.String.w('ui right internal rail stage-details'),
6+
classNames: Ember.String.w('ui right internal rail info-box'),
77

88
isRunning: Ember.computed.equal('model.status', 'RUNNING'),
99
isDone: Ember.computed.match('model.status', /^(SUCCESS|FAIL)$/),
@@ -12,11 +12,9 @@ export default Ember.Component.extend({
1212
let tabs = this.$(".stage-tabs .item");
1313
let activeTab = this.$(".stage-tabs .active.item");
1414
if (tabs.length && !activeTab.length) {
15-
let log = this.get('model.logFiles.firstObject');
16-
this.send('showLogs', log);
15+
this.changeTab('details');
1716
}
1817
},
19-
2018
actions: {
2119
showLogs(log) {
2220
this.get('logsPoller').cancelAll();

app/components/ui-promise-dropdown.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import SemanticDropdown from 'semantic-ui-ember/components/ui-dropdown';
33
export default SemanticDropdown.extend({
44

55
firstShow: true,
6-
classNameBindings: ['waitList.isPending:loading'],
6+
classNameBindings: ['waitList.isPending:loading', 'disabled:disabled'],
77

88
didInsertElement() {
99
this._super();

app/components/ui-spinkit-3.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Ember from 'ember';
2+
3+
export default Ember.Component.extend({
4+
classNames: ['spinner']
5+
});

app/helpers/ansi.js

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Ember from 'ember';
2+
3+
export function ansi(params) {
4+
let content = params[0];
5+
let converted = ansi_up.ansi_to_html(content);
6+
7+
return Ember.String.htmlSafe(converted);
8+
9+
}
10+
11+
export default Ember.Helper.helper(ansi);

app/routes/login.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Ember from 'ember';
22
import UnauthenticatedRouteMixin from 'ember-simple-auth/mixins/unauthenticated-route-mixin';
3+
import {task} from 'ember-concurrency';
34

45
export default Ember.Route.extend(UnauthenticatedRouteMixin, {
56

@@ -8,13 +9,17 @@ export default Ember.Route.extend(UnauthenticatedRouteMixin, {
89
actions: {
910
login() {
1011
this.set('session.errorMessage', null);
11-
this.get('session').authenticate('authenticator:kontinuous', 'github-kontinuous')
12-
.catch((resp) => {
13-
this.set('session.errorMessage', resp || "Failed to login.");
14-
});
12+
this.get('loginTask').perform();
1513
}
1614
},
1715

16+
loginTask: task(function*() {
17+
yield this.get('session').authenticate('authenticator:kontinuous', 'github-kontinuous')
18+
.catch((resp) => {
19+
this.set('session.errorMessage', resp || "Failed to login.");
20+
});
21+
}).cancelOn('deactivate').drop(),
22+
1823
renderTemplate: function() {
1924
this.render({
2025
outlet: 'login'

app/serializers/log.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ export default JSONSerializer.extend({
77
normalize(modelClass, resourceHash) {
88
if (resourceHash && resourceHash.filename) {
99
var filename = resourceHash.filename.split('/');
10-
resourceHash.title = filename.objectAt(filename.length - 1).replace(/\.log$/, '');
10+
let title = filename.objectAt(filename.length - 1);
11+
resourceHash.title = title.endsWith('.log') ? title : title.concat('.log');
1112
}
1213
return this._super(modelClass, resourceHash);
1314
},

0 commit comments

Comments
 (0)