Skip to content

Commit 931427f

Browse files
committed
Merge remote-tracking branch 'upstream/master' into record-readme-filename
2 parents 80129d1 + 566c7be commit 931427f

35 files changed

+313
-200
lines changed

Cargo.lock

Lines changed: 24 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ serde_derive = "1.0.0"
5555
serde = "1.0.0"
5656
clippy = { version = "=0.0.162", optional = true }
5757
chrono = { version = "0.4.0", features = ["serde"] }
58-
comrak = { version = "0.1.9", default-features = false }
59-
ammonia = "0.7.0"
58+
comrak = { version = "0.2.3", default-features = false }
59+
ammonia = { git = "https://github.com/notriddle/ammonia" }
6060
docopt = "0.8.1"
6161
itertools = "0.6.0"
6262
lettre = "0.6"

app/components/crate-row.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import Component from '@ember/component';
22

33
export default Component.extend({
4-
classNames: ['crate', 'row']
4+
classNames: ['crate', 'row'],
5+
6+
'data-test-crate-row': true,
57
});

app/controllers/crate/version.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import Controller from '@ember/controller';
22
import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';
33
import ArrayProxy from '@ember/array/proxy';
4-
import { computed } from '@ember/object';
4+
import { computed, observer } from '@ember/object';
55
import { later } from '@ember/runloop';
6+
import $ from 'jquery';
67
import moment from 'moment';
78

89
const NUM_VERSIONS = 5;
@@ -173,4 +174,8 @@ export default Controller.extend({
173174
},
174175
},
175176

177+
report: observer('crate.readme', function() {
178+
setTimeout(() => $(window).trigger('hashchange'));
179+
}),
180+
176181
});

app/controllers/dashboard.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Controller from '@ember/controller';
2+
import { A } from '@ember/array';
23
import { computed } from '@ember/object';
34
import { inject as service } from '@ember/service';
45

@@ -14,9 +15,9 @@ export default Controller.extend({
1415
this.fetchingFeed = true;
1516
this.loadingMore = false;
1617
this.hasMore = false;
17-
this.myCrates = [];
18-
this.myFollowing = [];
19-
this.myFeed = [];
18+
this.myCrates = A();
19+
this.myFollowing = A();
20+
this.myFeed = A();
2021
this.myStats = 0;
2122
},
2223

app/initializers/hashchange.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import $ from 'jquery';
2+
3+
function decodeFragmentValue(hash) {
4+
try {
5+
return decodeURIComponent(hash.slice(1));
6+
} catch(_) {
7+
return '';
8+
}
9+
}
10+
11+
function findElementByFragmentName(document, name) {
12+
if (name === '') {
13+
return;
14+
}
15+
16+
return document.getElementById(name) || document.getElementsByName(name)[0];
17+
}
18+
19+
function hashchange() {
20+
if (document.querySelector(':target')) {
21+
return;
22+
}
23+
24+
const hash = decodeFragmentValue(location.hash);
25+
const target = findElementByFragmentName(document, `user-content-${hash}`);
26+
if (target) {
27+
target.scrollIntoView();
28+
}
29+
}
30+
31+
export function initialize() {
32+
$(window).on('hashchange', hashchange);
33+
34+
// If clicking on a link to the same fragment as currently in the address bar,
35+
// hashchange won't be fired, so we need to manually trigger rescroll.
36+
$(document).on('a[href]', 'click', function(event) {
37+
if (this.href === location.href && location.hash.length > 1) {
38+
setTimeout(function() {
39+
if (!event.defaultPrevented) {
40+
hashchange();
41+
}
42+
});
43+
}
44+
});
45+
}
46+
47+
export default {
48+
name: 'app.hashchange',
49+
initialize
50+
};

app/routes/dashboard.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import Route from '@ember/routing/route';
2+
import { A } from '@ember/array';
23
import RSVP from 'rsvp';
34

45
import AuthenticatedRoute from '../mixins/authenticated-route';
@@ -15,7 +16,7 @@ export default Route.extend(AuthenticatedRoute, {
1516
controller.set('myStats', this.get('data.myStats'));
1617

1718
if (!controller.get('loadingMore')) {
18-
controller.set('myFeed', []);
19+
controller.set('myFeed', A());
1920
controller.send('loadMore');
2021
}
2122
},

app/templates/application.hbs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,18 @@
1717
</h1>
1818
{{/link-to}}
1919

20-
<form class='search' action='/search' {{ action "search" on="submit" }} >
20+
<form class='search' action='/search' {{ action "search" on="submit" }} data-test-search-form>
2121
{{input type="text" class="search" name="q" id="cargo-desktop-search"
2222
placeholder="Click or press 'S' to search..."
2323
value=search
2424
autofocus="autofocus"
2525
tabindex="1"
26-
required=true}}
26+
required=true
27+
data-test-search-input=true}}
2728
</form>
2829

2930
<div class='nav'>
30-
{{#link-to "crates" (query-params letter="null" page=1)}}
31+
{{#link-to "crates" (query-params letter="null" page=1) data-test-all-crates-link}}
3132
Browse All Crates
3233
{{/link-to}}
3334
<span class="sep">|</span>
@@ -70,7 +71,7 @@
7071
{{/rl-dropdown}}
7172
{{/rl-dropdown-container}}
7273
{{else}}
73-
{{#link-to "login"}}
74+
{{#link-to "login" data-test-login-link}}
7475
{{svg-jar "lock"}}
7576
Log in with GitHub
7677
{{/link-to}}

app/templates/categories.hbs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@
66
</div>
77

88
<div id='results'>
9-
<div class='nav'>
9+
<div class='nav' data-test-categories-nav>
1010
<span class='amt small'>
1111
Displaying
1212
<span class='cur'>{{ currentPageStart }}-{{ currentPageEnd }}</span>
1313
of <span class='total'>{{ totalItems }}</span> total results
1414
</span>
1515
</div>
1616

17-
<div class='sort'>
17+
<div class='sort' data-test-categories-sort>
1818
<span class='small'>Sort by</span>
1919
{{#rl-dropdown-container class="dropdown-container"}}
20-
{{#rl-dropdown-toggle tagName="a" class="dropdown"}}
20+
{{#rl-dropdown-toggle tagName="a" class="dropdown" data-test-current-order=true}}
2121
{{svg-jar "sort"}}
2222
{{ currentSortBy }}
2323
<span class='arrow'></span>
@@ -41,11 +41,11 @@
4141

4242
<div class='white-rows'>
4343
{{#each model as |category|}}
44-
<div class='row'>
44+
<div class='row' data-test-category={{category.slug}}>
4545
<div class='desc'>
4646
<div class='info'>
4747
{{link-to category.category "category" category.slug}}
48-
<span class='small'>
48+
<span class='small' data-test-crate-count>
4949
{{ pluralize (format-num category.crates_cnt) "crate" }}
5050
</span>
5151
</div>

app/templates/category/index.hbs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,18 @@
3636

3737
<h2>Crates</h2>
3838
<div id='results'>
39-
<div class='nav'>
39+
<div class='nav' data-test-category-nav>
4040
<span class='amt small'>
4141
Displaying
4242
<span class='cur'>{{ currentPageStart }}-{{ currentPageEnd }}</span>
4343
of <span class='total'>{{ totalItems }}</span> total results
4444
</span>
4545
</div>
4646

47-
<div class='sort'>
47+
<div class='sort' data-test-category-sort>
4848
<span class='small'>Sort by</span>
4949
{{#rl-dropdown-container class="dropdown-container"}}
50-
{{#rl-dropdown-toggle tagName="a" class="dropdown"}}
50+
{{#rl-dropdown-toggle tagName="a" class="dropdown" data-test-current-order=true}}
5151
{{svg-jar "sort"}}
5252
{{ currentSortBy }}
5353
<span class='arrow'></span>

app/templates/components/crate-list.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<ul>
2-
{{#each crates as |crate|}}
2+
{{#each crates as |crate index|}}
33
<li>
4-
{{#link-to 'crate' crate.id class='name'}}
4+
{{#link-to 'crate' crate.id class='name' data-test-crate-link=index}}
55
<span>{{ crate.name }} ({{ crate.max_version }})</span>
66
<div class='arrow-in-list'>
77
{{svg-jar "right-arrow"}}

app/templates/components/crate-row.hbs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,29 @@
11
<div class='desc'>
22
<div class='info'>
3-
{{#link-to 'crate' crate.id}}{{ crate.name }}{{/link-to}}
3+
{{#link-to 'crate' crate.id data-test-crate-link}}{{ crate.name }}{{/link-to}}
44
<span class='vers'>
55
<img
66
src="https://img.shields.io/crates/v/{{ crate.name }}.svg"
77
alt="{{ crate.max_version }}"
8-
title="{{ crate.name }}’s current version badge" />
8+
title="{{ crate.name }}’s current version badge"
9+
data-test-version-badge />
910
</span>
1011
{{#each crate.annotated_badges as |badge|}}
11-
{{component badge.component_name badge=badge}}
12+
{{component badge.component_name badge=badge data-test-badge=badge.badge_type}}
1213
{{/each}}
1314
</div>
14-
<div class='summary'>
15+
<div class='summary' data-test-description>
1516
<span class='small'>
1617
{{ truncate-text crate.description }}
1718
</span>
1819
</div>
1920
</div>
2021
<div class='stats'>
21-
<div class='downloads'>
22+
<div class='downloads' data-test-downloads>
2223
{{svg-jar "download"}}
2324
<span class='num'>All-Time: {{ format-num crate.downloads }}</span>
2425
</div>
25-
<div class="recent-downloads">
26+
<div class="recent-downloads" data-test-recent-downloads>
2627
{{svg-jar "download"}}
2728
<span class='num'><abbr title="Downloads in the last 90 days">Recent:</abbr> {{ format-num crate.recent_downloads }}</span>
2829
</div>

0 commit comments

Comments
 (0)