Skip to content

Commit 66e36f9

Browse files
committed
Merge remote-tracking branch 'upstream/master' into multi-token
2 parents 21eddca + 2cbaaa8 commit 66e36f9

File tree

162 files changed

+3383
-2591
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

162 files changed

+3383
-2591
lines changed

.bowerrc

Lines changed: 0 additions & 4 deletions
This file was deleted.

.travis.yml

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,19 @@ dist: trusty
44

55
cache:
66
cargo: true
7-
directories:
8-
- $HOME/.yarn-cache
7+
yarn: true
8+
9+
addons:
10+
chrome: stable
911

1012
before_install:
1113
- nvm install 6.10.0
12-
- export PATH=/usr/local/phantomjs-2.0.0/bin:$PATH
13-
- npm config set spin false
14-
- npm install -g yarn
14+
- curl -o- -L https://yarnpkg.com/install.sh | bash
15+
- export PATH=$HOME/.yarn/bin:$PATH
1516

1617
install:
1718
- pip install 'travis-cargo<0.2' --user && export PATH=$HOME/.local/bin:$PATH
18-
- yarn
19-
- yarn run bower install
19+
- yarn install
2020
- cargo install --force diesel_cli --debug --no-default-features --features postgres && export PATH=$HOME/.cargo/bin:$PATH
2121
- cargo install --force rustfmt
2222
- rustfmt --version
@@ -36,19 +36,31 @@ addons:
3636
- libdw-dev
3737

3838
matrix:
39+
fast_finish: true
40+
allow_failures:
41+
- rust: nightly
3942
include:
4043
- rust: stable
44+
env: RUSTFMT=YESPLEASE
4145
script:
4246
- cargo fmt -- --write-mode=diff
4347
- rust: stable
4448
script:
4549
- cargo build
4650
- cargo test
47-
- yarn run test
51+
- yarn test
4852
- rust: nightly-2017-03-04
4953
env: CLIPPY=YESPLEASE
5054
script:
5155
- cargo rustc --lib --features "lint" -- -Zno-trans
56+
- rust: beta
57+
script:
58+
- cargo build
59+
- cargo test
60+
- rust: nightly
61+
script:
62+
- cargo build
63+
- cargo test
5264

5365
env:
5466
global:

app/adapters/category-slug.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Ember from 'ember';
44
export default ApplicationAdapter.extend({
55
pathForType(modelName) {
66
let decamelized = Ember.String.underscore(
7-
Ember.String.decamelize(modelName)
7+
Ember.String.decamelize(modelName)
88
);
99
return Ember.String.pluralize(decamelized);
1010
}

app/adapters/team.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import ApplicationAdapter from './application';
2+
3+
export default ApplicationAdapter.extend({
4+
queryRecord(store, type, query) {
5+
let url = this.urlForFindRecord(query.team_id, 'team');
6+
return this.ajax(url, 'GET');
7+
},
8+
});

app/adapters/user.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import ApplicationAdapter from './application';
2+
3+
export default ApplicationAdapter.extend({
4+
queryRecord(store, type, query) {
5+
let url = this.urlForFindRecord(query.user_id, 'user');
6+
return this.ajax(url, 'GET');
7+
},
8+
});

app/app.js

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,13 @@ import Ember from 'ember';
22
import Resolver from './resolver';
33
import loadInitializers from 'ember-load-initializers';
44
import config from './config/environment';
5-
import RouteAliasResolverMixin from 'cargo/mixins/route-alias-resolver';
65

7-
let App;
8-
9-
let CargoResolver = Resolver.extend(RouteAliasResolverMixin);
10-
11-
Ember.MODEL_FACTORY_INJECTIONS = true;
12-
13-
App = Ember.Application.extend({
6+
let App = Ember.Application.extend({
147
modulePrefix: config.modulePrefix,
158
podModulePrefix: config.podModulePrefix,
16-
Resolver: CargoResolver
9+
Resolver
1710
});
1811

1912
loadInitializers(App, config.modulePrefix);
2013

21-
Ember.$.ajaxSetup({
22-
cache: false
23-
});
24-
2514
export default App;

app/components/.gitkeep

Whitespace-only changes.

app/components/flash-message.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import Ember from 'ember';
2+
3+
export default Ember.Component.extend({
4+
flashMessages: Ember.inject.service(),
5+
message: Ember.computed.readOnly('flashMessages.message'),
6+
7+
elementId: 'flash',
8+
tagName: 'p',
9+
classNameBindings: ['message:shown']
10+
});

app/components/google-jsapi.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Ember from 'ember';
2+
3+
export default Ember.Component.extend({
4+
tagName: '',
5+
6+
didInsertElement() {
7+
Ember.$.getScript('https://www.google.com/jsapi', function() {
8+
window.google.load('visualization', '1.0', {
9+
packages: ['corechart'],
10+
callback() {
11+
window.googleChartsLoaded = true;
12+
Ember.$(document).trigger('googleChartsLoaded');
13+
}
14+
});
15+
});
16+
}
17+
});

app/controllers/.gitkeep

Whitespace-only changes.

app/controllers/application.js

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
import Ember from 'ember';
22

3-
const { observer } = Ember;
4-
53
export default Ember.Controller.extend({
64
searchController: Ember.inject.controller('search'),
7-
8-
flashError: null,
9-
nextFlashError: null,
105
search: Ember.computed.oneWay('searchController.q'),
116

127
init() {
@@ -56,20 +51,6 @@ export default Ember.Controller.extend({
5651
Ember.$(document).off('keydown');
5752
},
5853

59-
stepFlash() {
60-
this.set('flashError', this.get('nextFlashError'));
61-
this.set('nextFlashError', null);
62-
},
63-
64-
_scrollToTop() {
65-
window.scrollTo(0, 0);
66-
},
67-
68-
// TODO: remove observer & DOM mutation in controller..
69-
currentPathChanged: observer('currentPath', function() {
70-
Ember.run.scheduleOnce('afterRender', this, this._scrollToTop);
71-
}),
72-
7354
actions: {
7455
search() {
7556
this.transitionToRoute('search', {

app/controllers/category/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ export default Ember.Controller.extend(PaginationMixin, {
1111

1212
totalItems: computed.readOnly('model.meta.total'),
1313

14+
categoryController: Ember.inject.controller('category'),
15+
category: computed.alias('categoryController.model'),
16+
1417
currentSortBy: computed('sort', function() {
1518
return (this.get('sort') === 'downloads') ? 'Downloads' : 'Alphabetical';
1619
}),

app/controllers/crate/reverse-dependencies.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@ export default Ember.Controller.extend(PaginationMixin, {
88
page: '1',
99
per_page: 10,
1010

11+
crateController: Ember.inject.controller('crate'),
12+
crate: computed.alias('crateController.model'),
13+
1114
totalItems: computed.readOnly('model.meta.total'),
1215
});

app/controllers/crate/version.js

Lines changed: 52 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import Ember from 'ember';
2-
import DS from 'ember-data';
32
import moment from 'moment';
43

54
const NUM_VERSIONS = 5;
6-
const { computed } = Ember;
5+
const { computed, run: { later } } = Ember;
6+
7+
const PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);
78

89
export default Ember.Controller.extend({
910
isDownloading: false,
@@ -30,15 +31,10 @@ export default Ember.Controller.extend({
3031

3132
hasMoreVersions: computed.gt('sortedVersions.length', NUM_VERSIONS),
3233

33-
anyLinks: computed.or('crate.homepage',
34-
'crate.wiki',
35-
'crate.mailing_list',
36-
'crate.documentation',
37-
'crate.repository',
38-
'crate.reverse_dependencies'),
34+
anyLinks: computed.or('crate.{homepage,wiki,mailing_list,documentation,repository,reverse_dependencies}'),
3935

4036
displayedAuthors: computed('currentVersion.authors.[]', function() {
41-
return DS.PromiseArray.create({
37+
return PromiseArray.create({
4238
promise: this.get('currentVersion.authors').then((authors) => {
4339
let ret = authors.slice();
4440
let others = authors.get('meta');
@@ -60,20 +56,11 @@ export default Ember.Controller.extend({
6056
return [];
6157
}
6258

63-
return DS.PromiseArray.create({
59+
return PromiseArray.create({
6460
promise: deps.then((deps) => {
65-
let non_dev = deps.filter((dep) => dep.get('kind') !== 'dev');
66-
let map = {};
67-
let ret = [];
68-
69-
non_dev.forEach((dep) => {
70-
if (!(dep.get('crate_id') in map)) {
71-
map[dep.get('crate_id')] = 1;
72-
ret.push(dep);
73-
}
74-
});
75-
76-
return ret;
61+
return deps
62+
.filter((dep) => dep.get('kind') !== 'dev')
63+
.uniqBy('crate_id');
7764
})
7865
});
7966
}),
@@ -83,35 +70,13 @@ export default Ember.Controller.extend({
8370
if (deps === null) {
8471
return [];
8572
}
86-
return DS.PromiseArray.create({
73+
return PromiseArray.create({
8774
promise: deps.then((deps) => {
8875
return deps.filterBy('kind', 'dev');
8976
}),
9077
});
9178
}),
9279

93-
actions: {
94-
download(version) {
95-
this.set('isDownloading', true);
96-
97-
version.getDownloadUrl().then(url => {
98-
this.incrementProperty('crate.downloads');
99-
this.incrementProperty('currentVersion.downloads');
100-
Ember.$('#download-frame').attr('src', url);
101-
}).finally(() => this.set('isDownloading', false));
102-
},
103-
104-
toggleFollow() {
105-
this.set('fetchingFollowing', true);
106-
107-
let crate = this.get('crate');
108-
let op = this.toggleProperty('following') ?
109-
crate.follow() : crate.unfollow();
110-
111-
return op.finally(() => this.set('fetchingFollowing', false));
112-
},
113-
},
114-
11580
downloadData: computed('downloads', 'extraDownloads', 'requestedVersion', function() {
11681
let downloads = this.get('downloads');
11782
if (!downloads) {
@@ -173,4 +138,46 @@ export default Ember.Controller.extend({
173138

174139
return data;
175140
}),
141+
142+
toggleClipboardProps(isSuccess) {
143+
this.setProperties({
144+
showSuccess: isSuccess,
145+
showNotification: true
146+
});
147+
later(this, () => {
148+
this.set('showNotification', false);
149+
}, 2000);
150+
},
151+
152+
actions: {
153+
copySuccess(event) {
154+
event.clearSelection();
155+
this.toggleClipboardProps(true);
156+
},
157+
158+
copyError() {
159+
this.toggleClipboardProps(false);
160+
},
161+
162+
download(version) {
163+
this.set('isDownloading', true);
164+
165+
version.getDownloadUrl().then(url => {
166+
this.incrementProperty('crate.downloads');
167+
this.incrementProperty('currentVersion.downloads');
168+
Ember.$('#download-frame').attr('src', url);
169+
}).finally(() => this.set('isDownloading', false));
170+
},
171+
172+
toggleFollow() {
173+
this.set('fetchingFollowing', true);
174+
175+
let crate = this.get('crate');
176+
let op = this.toggleProperty('following') ?
177+
crate.follow() : crate.unfollow();
178+
179+
return op.finally(() => this.set('fetchingFollowing', false));
180+
},
181+
},
182+
176183
});

app/controllers/dashboard.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import Ember from 'ember';
2-
import ajax from 'ic-ajax';
32

43
const TO_SHOW = 5;
5-
const { computed } = Ember;
4+
const { computed, inject: { service } } = Ember;
65

76
export default Ember.Controller.extend({
7+
8+
ajax: service(),
9+
810
init() {
911
this._super(...arguments);
1012

@@ -37,7 +39,7 @@ export default Ember.Controller.extend({
3739
this.set('loadingMore', true);
3840
let page = (this.get('myFeed').length / 10) + 1;
3941

40-
ajax(`/me/updates?page=${page}`).then((data) => {
42+
this.get('ajax').request(`/me/updates?page=${page}`).then((data) => {
4143
let versions = data.versions.map(version =>
4244
this.store.push(this.store.normalize('version', version)));
4345

app/controllers/me/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
import Ember from 'ember';
22

3+
const { inject: { service } } = Ember;
4+
35
export default Ember.Controller.extend({
46
tokenSort: ['created_at:desc'],
7+
58
sortedTokens: Ember.computed.sort('model.api_tokens', 'tokenSort'),
69

10+
ajax: service(),
11+
12+
flashMessages: service(),
13+
14+
isResetting: false,
15+
716
newTokens: Ember.computed.filterBy('model.api_tokens', 'isNew', true),
817
disableCreate: Ember.computed.notEmpty('newTokens'),
918

app/helpers/.gitkeep

Whitespace-only changes.

0 commit comments

Comments
 (0)