Skip to content

Commit 6a49937

Browse files
authored
Merge branch 'master' into master
2 parents 2db5fa7 + de20f73 commit 6a49937

Some content is hidden

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

51 files changed

+4235
-3238
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ rustdoc-args = [
2929

3030
[dependencies]
3131
cargo-registry-s3 = { path = "src/s3", version = "0.2.0" }
32-
rand = "0.6"
32+
rand = "0.7"
3333
git2 = "0.13.0"
3434
flate2 = "1.0"
3535
semver = { version = "0.9", git = "https://github.com/steveklabnik/semver.git", features = ["diesel", "serde"] }
@@ -48,15 +48,15 @@ dotenv = "0.15"
4848
toml = "0.5"
4949
diesel = { version = "1.4.0", features = ["postgres", "serde_json", "chrono", "r2d2"] }
5050
diesel_full_text_search = "1.0.0"
51-
swirl = { git = "https://github.com/sgrif/swirl.git", rev = "de5d8bb" }
51+
swirl = { git = "https://github.com/sgrif/swirl.git", rev = "e87cf37" }
5252
serde_json = "1.0.0"
5353
serde = { version = "1.0.0", features = ["derive"] }
5454
chrono = { version = "0.4.0", features = ["serde"] }
55-
comrak = { version = "0.4.0", default-features = false }
55+
comrak = { version = "0.7", default-features = false }
5656
ammonia = "3.0.0"
5757
docopt = "1.0"
5858
scheduled-thread-pool = "0.2.0"
59-
derive_deref = "1.0.0"
59+
derive_deref = { version = "1.0.0", git = "https://github.com/azriel91/derive_deref.git", rev = "63527ab" }
6060
reqwest = { version = "0.10", features = ["blocking", "gzip", "json"] }
6161
tempfile = "3"
6262
parking_lot = "0.10"
@@ -67,12 +67,12 @@ lettre_email = "0.9"
6767
failure = "0.1.1"
6868

6969
conduit = "0.9.0-alpha.2"
70-
conduit-conditional-get = "0.9.0-alpha.2"
71-
conduit-cookie = "0.9.0-alpha.2"
72-
cookie = { version = "0.12", features = ["secure"] }
70+
conduit-conditional-get = "0.9.0-alpha.3"
71+
conduit-cookie = "0.9.0-alpha.3"
72+
cookie = { version = "0.13", features = ["secure"] }
7373
conduit-middleware = "0.9.0-alpha.2"
7474
conduit-router = "0.9.0-alpha.2"
75-
conduit-static = "0.9.0-alpha.2"
75+
conduit-static = "0.9.0-alpha.3"
7676
conduit-git-http-backend = "0.9.0-alpha.2"
7777
civet = "0.12.0-alpha.3"
7878
conduit-hyper = "0.3.0-alpha.2"

RustConfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
VERSION=1.42.0
1+
VERSION=1.43.1

app/components/footer.hbs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<footer local-class="footer">
2+
<div local-class='after-main-links'>
3+
<a href='https://doc.rust-lang.org/cargo/getting-started/installation.html'>Install</a>
4+
<span local-class="sep">|</span>
5+
<a href='https://doc.rust-lang.org/cargo/'>Getting Started</a>
6+
<span local-class="sep">|</span>
7+
<a href='https://doc.rust-lang.org/cargo/guide/'>Guide</a>
8+
<span local-class="sep">|</span>
9+
<a href='mailto:[email protected]'>Send us an email</a>
10+
<span local-class="sep">|</span>
11+
<a href='https://www.rust-lang.org/policies/security'>Report a security issue</a>
12+
<span local-class="sep">|</span>
13+
<a href='https://www.rust-lang.org/policies/privacy'>Privacy notice</a>
14+
<span local-class="sep">|</span>
15+
<LinkTo @route="policies">Policies</LinkTo>
16+
</div>
17+
</footer>

app/components/footer.module.css

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
.footer {
2+
display: flex;
3+
justify-content: center;
4+
width: 100%;
5+
background: var(--footer-bg-color);
6+
}
7+
8+
.sep {
9+
margin: 0 10px;
10+
color: var(--separator-color);
11+
}
12+
13+
.after-main-links {
14+
composes: width-limit from '../styles/application.module.css';
15+
16+
margin: 40px;
17+
text-align: center;
18+
19+
a { color: white; }
20+
a:hover { color: darken(white, 10%); }
21+
22+
@media only screen and (max-width: 450px) {
23+
margin: 20px;
24+
.sep { display: none; }
25+
display: flex;
26+
flex-direction: column;
27+
align-items: center;
28+
29+
a {
30+
width: 50%;
31+
font-size: 110%;
32+
padding: 5px;
33+
34+
&:not(:first-child) {
35+
border-top: 1px solid var(--separator-color);
36+
}
37+
}
38+
}
39+
}

app/components/header.hbs

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
<header local-class="header">
2+
<div local-class="header-inner">
3+
<LinkTo @route="index" local-class="index-link">
4+
<img src="/assets/Cargo-Logo-Small.png" role="presentation" alt="" local-class="logo">
5+
<h1>crates.io</h1>
6+
</LinkTo>
7+
8+
<form local-class="desktop-search-form" action='/search' {{on "submit" (action "search")}} data-test-search-form>
9+
<input
10+
type="text"
11+
local-class="search"
12+
name="q"
13+
id="cargo-desktop-search"
14+
placeholder="Click or press 'S' to search..."
15+
value={{this.header.searchValue}}
16+
oninput={{action (mut this.header.searchValue) value="target.value"}}
17+
autocorrect="off"
18+
autocapitalize="off"
19+
autofocus="autofocus"
20+
spellcheck="false"
21+
required
22+
data-test-search-input
23+
>
24+
<label for="cargo-desktop-search" local-class="search-label">Search</label>
25+
</form>
26+
27+
<nav local-class='nav'>
28+
<LinkTo @route="crates" @query={{hash letter=null page=1}} data-test-all-crates-link>
29+
Browse All Crates
30+
</LinkTo>
31+
<span local-class="sep">|</span>
32+
<Dropdown as |dd|>
33+
<dd.Trigger local-class="dropdown-button">
34+
Docs
35+
</dd.Trigger>
36+
37+
<dd.Menu local-class="doc-links" as |menu|>
38+
<menu.Item><a href='https://doc.rust-lang.org/cargo/getting-started/'>Getting Started</a></menu.Item>
39+
<menu.Item><a href='https://doc.rust-lang.org/cargo/guide/'>Guide</a></menu.Item>
40+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html'>Specifying Dependencies</a></menu.Item>
41+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/publishing.html'>Publishing on crates.io</a></menu.Item>
42+
<menu.Item><a href='https://doc.rust-lang.org/cargo/faq.html'>FAQ</a></menu.Item>
43+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/manifest.html'>Cargo.toml Format</a></menu.Item>
44+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/build-scripts.html'>Build Scripts</a></menu.Item>
45+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/config.html'>Configuration</a></menu.Item>
46+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/pkgid-spec.html'>Package ID specs</a></menu.Item>
47+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/environment-variables.html'>Environment Variables</a></menu.Item>
48+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/source-replacement.html'>Source Replacement</a></menu.Item>
49+
<menu.Item><a href='https://doc.rust-lang.org/cargo/reference/external-tools.html'>External Tools</a></menu.Item>
50+
<menu.Item><LinkTo @route="policies">Policies</LinkTo></menu.Item>
51+
<menu.Item><LinkTo @route="category-slugs">List of category slugs</LinkTo></menu.Item>
52+
</dd.Menu>
53+
</Dropdown>
54+
<span local-class="sep">|</span>
55+
{{#if this.session.currentUser}}
56+
<Dropdown data-test-user-menu as |dd|>
57+
<dd.Trigger local-class="dropdown-button" data-test-toggle>
58+
<UserAvatar @user={{this.session.currentUser}} @size="small" data-test-avatar />
59+
{{ this.session.currentUser.name }}
60+
</dd.Trigger>
61+
62+
<dd.Menu local-class="current-user-links" as |menu|>
63+
<menu.Item><LinkTo @route="dashboard">Dashboard</LinkTo></menu.Item>
64+
<menu.Item><LinkTo @route="me">Account Settings</LinkTo></menu.Item>
65+
<menu.Item><LinkTo @route="me.pending-invites">Owner Invites</LinkTo></menu.Item>
66+
<menu.Item local-class="menu-item-with-separator"><LinkTo @route="logout">Sign Out</LinkTo></menu.Item>
67+
</dd.Menu>
68+
</Dropdown>
69+
{{else}}
70+
<LinkTo @route="login" data-test-login-link>
71+
{{svg-jar "lock"}}
72+
Log in with GitHub
73+
</LinkTo>
74+
{{/if}}
75+
</nav>
76+
77+
<div local-class='menu'>
78+
<Dropdown as |dd|>
79+
<dd.Trigger local-class="dropdown-button">
80+
Menu
81+
</dd.Trigger>
82+
<dd.Menu local-class="current-user-links" as |menu|>
83+
<menu.Item><LinkTo @route="crates">Browse All Crates</LinkTo></menu.Item>
84+
{{#if this.session.currentUser}}
85+
<menu.Item><LinkTo @route="dashboard">Dashboard</LinkTo></menu.Item>
86+
<menu.Item><LinkTo @route="me" data-test-me-link>Account Settings</LinkTo></menu.Item>
87+
<menu.Item><LinkTo @route="me.pending-invites">Owner Invites</LinkTo></menu.Item>
88+
<menu.Item local-class="menu-item-with-separator"><LinkTo @route="logout">Sign Out</LinkTo></menu.Item>
89+
{{else}}
90+
<menu.Item><LinkTo @route="login">Log in with GitHub</LinkTo></menu.Item>
91+
{{/if}}
92+
</dd.Menu>
93+
</Dropdown>
94+
</div>
95+
96+
<form local-class='mobile-search' action='/search' {{on "submit" (action "search")}}>
97+
<input
98+
type="text"
99+
local-class="search"
100+
name="q"
101+
id="cargo-mobile-search"
102+
placeholder="Search"
103+
value={{this.header.searchValue}}
104+
oninput={{action (mut this.header.searchValue) value="target.value"}}
105+
autocorrect="off"
106+
required
107+
>
108+
<label for="cargo-mobile-search" local-class="search-label">Search</label>
109+
</form>
110+
</div>
111+
</header>

app/components/header.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import Component from '@ember/component';
2+
import { on } from '@ember/object/evented';
3+
import { inject as service } from '@ember/service';
4+
5+
import { EKMixin, keyDown, keyPress } from 'ember-keyboard';
6+
7+
export default Component.extend(EKMixin, {
8+
header: service(),
9+
router: service(),
10+
session: service(),
11+
12+
tagName: '',
13+
14+
keyboardActivated: true,
15+
16+
focusSearch: on(keyDown('KeyS'), keyPress('KeyS'), keyDown('shift+KeyS'), function (event) {
17+
if (event.ctrlKey || event.altKey || event.metaKey) {
18+
return;
19+
}
20+
21+
if (document.activeElement === document.body) {
22+
event.preventDefault();
23+
document.querySelector('#cargo-desktop-search').focus();
24+
}
25+
}),
26+
27+
actions: {
28+
search(event) {
29+
event.preventDefault();
30+
31+
this.router.transitionTo('search', {
32+
queryParams: {
33+
q: this.header.searchValue,
34+
page: 1,
35+
},
36+
});
37+
},
38+
},
39+
});

app/components/header.module.css

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
.header {
2+
display: flex;
3+
justify-content: center;
4+
width: 100%;
5+
}
6+
7+
.header-inner {
8+
composes: width-limit from '../styles/application.module.css';
9+
10+
display: grid;
11+
grid-template-columns: auto 1fr auto;
12+
align-items: center;
13+
padding: 10px;
14+
color: white;
15+
16+
a {
17+
color: white; text-decoration: none;
18+
&:hover { color: white; }
19+
}
20+
}
21+
22+
.index-link {
23+
display: flex;
24+
align-items: center;
25+
26+
h1 {
27+
font-size: 24px;
28+
}
29+
}
30+
31+
.logo {
32+
width: 60px;
33+
height: auto;
34+
margin-right: 10px;
35+
}
36+
37+
.desktop-search-form {
38+
display: flex;
39+
flex-grow: 1;
40+
41+
@media only screen and (max-width: 820px) {
42+
display: none;
43+
}
44+
}
45+
46+
input.search {
47+
font-size: 90%;
48+
border: none;
49+
color: black;
50+
width: 100%;
51+
margin-left: 16px;
52+
margin-right: 16px;
53+
padding: 5px 5px 5px 25px;
54+
background-color: white;
55+
background-image: url('/assets/search.png');
56+
background-repeat: no-repeat;
57+
background-position: 6px 6px;
58+
background-size: 14px 15px;
59+
border-radius: 15px;
60+
box-shadow: none;
61+
}
62+
63+
.mobile-search {
64+
display: none;
65+
grid-row: 2;
66+
grid-column: span 3;
67+
margin: 0 10px 10px;
68+
69+
input.search {
70+
margin: 0;
71+
}
72+
73+
@media only screen and (max-width: 820px) {
74+
display: block;
75+
}
76+
}
77+
78+
.search-label {
79+
position: absolute;
80+
left: -10000px;
81+
top: auto;
82+
width: 1px;
83+
height: 1px;
84+
overflow: hidden;
85+
}
86+
87+
.sep {
88+
margin: 0 10px;
89+
color: var(--separator-color);
90+
}
91+
92+
.doc-links {
93+
left: auto;
94+
min-width: 150px;
95+
}
96+
97+
.nav {
98+
text-align: right;
99+
margin-right: 5px;
100+
101+
@media only screen and (max-width: 900px) {
102+
display: none;
103+
}
104+
}
105+
106+
.menu {
107+
text-align: right;
108+
margin-right: 5px;
109+
flex-grow: 2;
110+
display: none;
111+
112+
@media only screen and (max-width: 900px) {
113+
display: block;
114+
}
115+
}
116+
117+
.menu-item-with-separator {
118+
border-top: 1px solid var(--gray-border);
119+
}
120+
121+
.current-user-links {
122+
left: auto;
123+
right: 0;
124+
min-width: 200px;
125+
}
126+
127+
.dropdown-button {
128+
background: none;
129+
border: 0;
130+
padding: 10px 0;
131+
132+
img {
133+
vertical-align: top;
134+
}
135+
}

0 commit comments

Comments
 (0)