Skip to content

Commit f885e76

Browse files
knownasilyatoddjordan
authored andcommitted
feat: sticky method, property, and event headers (ember-learn#336)
* feat: sticky method, property, and event headers * fix: h3 indentation for linting * fix template lint * update sticky dep * Only show sticky for areas with a greater height
1 parent ce80899 commit f885e76

File tree

6 files changed

+61
-20
lines changed

6 files changed

+61
-20
lines changed

app/components/class-field-description.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Component from '@ember/component';
22
import { inject as service } from '@ember/service';
33
import { computed } from '@ember/object';
4+
import { gt } from '@ember/object/computed';
45

56
export default Component.extend({
67
legacyModuleMappings: service(),
@@ -9,6 +10,17 @@ export default Component.extend({
910
return this.get('legacyModuleMappings').hasFunctionMapping(this.get('field.name'), this.get('field.class'));
1011
}),
1112

13+
stickyEnabled: gt('ownHeight', 200),
14+
15+
didInsertElement() {
16+
this._super(...arguments);
17+
this.setOwnHeight(this.element);
18+
},
19+
20+
setOwnHeight(element) {
21+
this.set('ownHeight', element.clientHeight);
22+
},
23+
1224
/**
1325
* Callback for updating the anchor with the field name that was clicked by a user.
1426
*

app/styles/components/_class-field-desc.scss

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
font-size: $base-font-size;
1818
}
1919

20+
.sticky-element--sticky .class-field-description--link {
21+
margin: 0 -1.45em;
22+
background-color: #FDFDFD;
23+
padding: 0.4em 1.4em;
24+
box-shadow: rgba(0, 0, 0, 0.4) 0 1px 4px -1px;
25+
transition: 0.3s top, 0.3s box-shadow, 0.3s padding;
26+
}
27+
2028
.class-field-description--link .return-type,
2129
.return .return-type,
2230
.parameter .parameter-type {
@@ -54,6 +62,7 @@ h3 .access{
5462

5563
.method, .property, .event {
5664
border-bottom: $base-border;
65+
position: relative;
5766

5867
.method-name, .property-name, .event-name {
5968
font-family: $monospace-font-family;

app/styles/components/_highlight.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
margin: $small-spacing 0 $large-spacing;
99
overflow: hidden;
1010
position: relative;
11+
z-index: -1;
1112

1213
&.handlebars {
1314
.inline,

app/templates/components/class-field-description.hbs

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
<section class="{{type}}">
2-
<h3 class="class-field-description--link" data-anchor="{{field.name}}" role="link" onclick={{action updateAnchor field.name}}>
3-
<a class="anchor">
4-
{{svg-jar 'fa-link' class="class-field-description--link-hover" width="20px" height="20px"}}
5-
</a>
6-
<span class="{{type}}-name">{{field.name}}</span>
7-
{{#if field.params}}
8-
<span class="args">
9-
({{join ", " (map-by "name" field.params)}})
10-
</span>
11-
{{/if}}
12-
{{#if field.return}}
13-
<span class="return-type">{{field.return.type}}</span>
14-
{{/if}}
15-
{{#if field.access}}
16-
<span class="access">{{field.access}}</span>
17-
{{/if}}
18-
{{#if field.deprecated}}
19-
<span class="access">deprecated</span>
20-
{{/if}}
21-
</h3>
2+
{{#sticky-element top=0 bottom=0 enabled=this.stickyEnabled}}
3+
<h3 class="class-field-description--link" data-anchor="{{field.name}}" role="link" onclick={{action updateAnchor field.name}}>
4+
<a class="anchor">
5+
{{svg-jar 'fa-link' class="class-field-description--link-hover" width="20px" height="20px"}}
6+
</a>
7+
<span class="{{type}}-name">{{field.name}}</span>
8+
{{#if field.params}}
9+
<span class="args">
10+
({{join ", " (map-by "name" field.params)}})
11+
</span>
12+
{{/if}}
13+
{{#if field.return}}
14+
<span class="return-type">{{field.return.type}}</span>
15+
{{/if}}
16+
{{#if field.access}}
17+
<span class="access">{{field.access}}</span>
18+
{{/if}}
19+
{{#if field.deprecated}}
20+
<span class="access">deprecated</span>
21+
{{/if}}
22+
</h3>
23+
{{/sticky-element}}
2224
{{#if model.module}}
2325
<div class="attributes">
2426
<div class="attribute">

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
"ember-route-action-helper": "^2.0.5",
8888
"ember-sinon": "^2.1.0",
8989
"ember-source": "~2.18.0",
90+
"ember-sticky-element": "^0.2.3",
9091
"ember-styleguide": "^2.3.1",
9192
"ember-svg-jar": "^1.2.2",
9293
"ember-test-selectors": "^2.0.0",

yarn.lock

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4759,6 +4759,13 @@ ember-in-element-polyfill@^0.1.2:
47594759
ember-cli-version-checker "^2.1.0"
47604760
ember-wormhole "^0.5.4"
47614761

4762+
ember-in-viewport@~3.0.0:
4763+
version "3.0.3"
4764+
resolved "https://registry.yarnpkg.com/ember-in-viewport/-/ember-in-viewport-3.0.3.tgz#49c60b52525795246761742ed4495ad6cd9bf70d"
4765+
integrity sha512-Iw8qquApABdrP9xA8hJFaYAxz/iOGLJ0Acq4QptemEnpsHcQqAET/SKL/A1fbtDGQAVtB5+bULaJcsrzRMCteg==
4766+
dependencies:
4767+
ember-cli-babel "^6.6.0"
4768+
47624769
ember-inflector@^2.0.0, ember-inflector@^2.0.1:
47634770
version "2.1.0"
47644771
resolved "https://registry.yarnpkg.com/ember-inflector/-/ember-inflector-2.1.0.tgz#afcb92d022a4eab58f08ff4578eafc3a1de2d09b"
@@ -4944,6 +4951,15 @@ ember-source@~2.18.0:
49444951
jquery "^3.2.1"
49454952
resolve "^1.3.3"
49464953

4954+
ember-sticky-element@^0.2.3:
4955+
version "0.2.3"
4956+
resolved "https://registry.yarnpkg.com/ember-sticky-element/-/ember-sticky-element-0.2.3.tgz#39702e0fc0f04905a7b34add61a85a9186d3d16b"
4957+
integrity sha512-AtKkM8zh6LK5FsPxtsDywUSodGk5c2AI03vcgk995dC5Z7DG4XLJoAwV0FZM5RYnymnYEJvOs6VTcIM8uwcX5w==
4958+
dependencies:
4959+
ember-cli-babel "^6.8.2"
4960+
ember-cli-htmlbars "^2.0.1"
4961+
ember-in-viewport "~3.0.0"
4962+
49474963
ember-styleguide@^2.3.1:
49484964
version "2.5.0"
49494965
resolved "https://registry.yarnpkg.com/ember-styleguide/-/ember-styleguide-2.5.0.tgz#f0a43630c3adf527f966ae77af850a411e86e6b6"

0 commit comments

Comments
 (0)