/
project-structure-listing.js
76 lines (64 loc) · 2.47 KB
/
project-structure-listing.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import Ember from 'ember';
import {computedCanAddSpider} from '../services/dispatcher';
export default Ember.Component.extend({
browser: Ember.inject.service(),
dispatcher: Ember.inject.service(),
uiState: Ember.inject.service(),
notificationManager: Ember.inject.service(),
routing: Ember.inject.service('-routing'),
tagName: '',
canAddSpider: computedCanAddSpider(),
currentSpider: Ember.computed.readOnly('uiState.models.spider'),
currentSchema: Ember.computed.readOnly('uiState.models.schema'),
addSpiderTooltipText: Ember.computed('canAddSpider', {
get() {
if (this.get('canAddSpider')) {
return 'Create a new Spider';
} else {
return 'You must visit a website before you can create a Spider';
}
}
}),
actions: {
addSchema() {
this.get('dispatcher').addSchema(this.get('project'), /* redirect = */true);
},
removeSchema(schema) {
this.get('dispatcher').removeSchema(schema);
},
saveSchema(schema) {
schema.save();
},
addSpider() {
this.get('dispatcher').addSpider(this.get('project'), /* redirect = */true);
},
removeSpider(spider) {
this.get('dispatcher').removeSpider(spider);
},
validateSpiderName(name) {
const nm = this.get('notificationManager');
if(!/^[a-zA-Z0-9][a-zA-Z0-9_\.-]*$/.test(name)) {
nm.showWarningNotification(`Invalid spider name.
Only letters, numbers, underscores, dashes and dots are allowed.`);
return false;
}
return true;
},
loadSpider(spider) {
// Using link-to was problematic because it interpreted an enter in
// the input field as intention to follow the link (rather than
// saving the value)
this.get('routing').transitionTo('projects.project.spider', [spider], {}, true);
},
saveSpiderName(spider) {
// HACK: Renaming the spider will change it's ID, changing the ID
// of a record is not supported in Ember data, so we return a new
// record from the server and mark the original as deleted.
spider.save().then(() => {
if(spider.get('name') === '_deleted') {
spider.unloadRecord();
}
});
}
}
});