Skip to content

layout branch rebased #953

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 26 commits into from
Aug 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c219aa8
Update styleguide to have the on-this-page styling
MinThaMie Jun 14, 2024
edf22c0
Move private toggle up in the sidebar
MinThaMie Jun 14, 2024
b8933f6
move templates to components + remove EmberAnchor from the templates …
MinThaMie Jun 14, 2024
0cf20ff
Make styling work, remove ember-anchor + updateAnchor implementation
MinThaMie Jun 14, 2024
fa73d98
fix pnpm version
mansona Jul 11, 2024
e8b443b
delete all scroll-tracker stuff
mansona Jul 11, 2024
25c9c76
remove all traces of ember-anchor
mansona Jul 11, 2024
7727fca
Fix function layout
MinThaMie Jul 26, 2024
6709320
add redirects for methods
mansona Oct 15, 2024
05201da
fix redirects
mansona May 22, 2025
15a3dc8
speed up builds
mansona May 24, 2025
affc72e
Add all method, properties & events redirects to classes, modules, na…
MinThaMie May 24, 2025
5bcd3d4
WIP stuff
MinThaMie May 24, 2025
58c6668
Tiny bit of CSS, fix pnpm-lock and route file after merge
MinThaMie May 24, 2025
47dc9bd
Fix linting
MinThaMie May 24, 2025
d62263e
remove events, methods, properties sub-routes
mansona May 26, 2025
aff14b3
remove unused function
mansona May 26, 2025
7f0a148
remove unused packages
mansona May 26, 2025
0d3e65a
update the ember landing page to use anchors correctly
mansona May 26, 2025
ef127b8
remove unused Percy snapshots
mansona May 26, 2025
f8b139f
fix namespace percy snapshot
mansona May 29, 2025
f259e2a
Remove unused node-sass package
kategengler Aug 18, 2025
87e5a8d
lint fix
kategengler Aug 18, 2025
aa651d3
Remove ember-fetch
kategengler Aug 18, 2025
66058d0
Update syntax for ember-concurrency tasks; convert search service to …
kategengler Aug 18, 2025
f6ba4c9
Test update: Previously used package for the test is no longer in
kategengler Aug 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion app/adapters/application.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { inject as service } from '@ember/service';
import JSONAPIAdapter from '@ember-data/adapter/json-api';
import fetch from 'fetch';
import { pluralize } from 'ember-inflector';
import { isBlank } from '@ember/utils';

Expand Down
6 changes: 3 additions & 3 deletions app/components/class-field-description.hbs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{{! template-lint-disable no-invalid-interactive }}
<section class='{{@type}}'>
<h3 data-anchor='{{@field.name}}'>
<h3 id='{{@field.name}}'>
<span class='{{@type}}-name'>{{@field.name}}</span>
{{#if @field.params}}
<span class='args'>
Expand All @@ -17,7 +17,7 @@
<span class='access'>deprecated</span>
{{/if}}
{{!-- TODO: Fix this link for a11y --}}
<a class='class-field-description--link' data-test-anchor="{{@field.name}}" {{on 'click' (fn this.updateAnchor @field.name)}} {{!-- template-lint-disable link-href-attributes --}}>
<a class='class-field-description--link' href="#{{@field.name}}">
{{svg-jar 'link' width='20px' height='20px'}}
</a>
</h3>
Expand Down Expand Up @@ -78,4 +78,4 @@
{{/if}}
</dl>
<MarkdownToHtml @markdown={{@field.description}} />
</section>
</section>
12 changes: 0 additions & 12 deletions app/components/class-field-description.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { inject as service } from '@ember/service';
import Component from '@glimmer/component';
import { action } from '@ember/object';

export default class ClassFieldDescription extends Component {
@service
Expand All @@ -12,15 +11,4 @@ export default class ClassFieldDescription extends Component {
this.args.field.class
);
}

/**
* Callback for updating the anchor with the field name that was clicked by a user.
*
* @method updateAnchor
* @method fieldName String The name representing the field that was clicked.
*/
@action
updateAnchor(fieldName) {
this.args.updateAnchor?.(fieldName);
}
}
29 changes: 0 additions & 29 deletions app/components/ember-anchor.js

This file was deleted.

24 changes: 20 additions & 4 deletions app/components/ember-landing-page.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,27 @@
<li><LinkTo @route='project-version.classes.class' @model='ComputedProperty'>Computed Properties</LinkTo> - declare functions as properties</li>
{{! template-lint-disable no-potential-path-strings }}
<li><LinkTo @route='project-version.classes.class' @model='@ember/object/computed'>Computed Macros</LinkTo> - shorter ways of expressing certain types of computed properties</li>
<li><LinkTo @route='project-version.classes.class' @model='EmberArray'>EmberArray</LinkTo> - contains methods like <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'EmberArray' 'forEach'}} @query={{hash anchor='forEach'}}>forEach</LinkTo> and <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'EmberArray' 'mapBy'}} @query={{hash anchor='mapBy'}}>mapBy</LinkTo> that help you iterate over Ember Objects</li>
<li><LinkTo @route='project-version.classes.class' @model='EmberObject'>EmberObject</LinkTo> - the main base class for all Ember objects, including the <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'EmberObject' 'get'}} @query={{hash anchor='get'}}>get</LinkTo> and <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'EmberObject' 'set'}} @query={{hash anchor='set'}}>set</LinkTo> methods</li>
<li><LinkTo @route='project-version.classes.class' @model='Ember.Templates.helpers'>Ember.Templates.helpers</LinkTo> - built-in functions that can be used in templates, such as the <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'Ember.Templates.helpers' 'each'}} @query={{hash anchor='each'}}>each</LinkTo>, <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'Ember.Templates.helpers' 'on'}} @query={{hash anchor='on'}}>on</LinkTo> and <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'Ember.Templates.helpers' 'fn'}} @query={{hash anchor='fn'}}>fn</LinkTo> helpers</li>
<li>
<LinkTo @route='project-version.classes.class' @model='EmberArray'>EmberArray</LinkTo> - contains methods like
<a href="/ember/{{@version}}/classes/EmberArray#forEach">forEach</a> and
<a href="/ember/{{@version}}/classes/EmberArray#mapBy">mapBy</a>
that help you iterate over Ember Objects
</li>
<li>
<LinkTo @route='project-version.classes.class' @model='EmberObject'>EmberObject</LinkTo> - the main base class for all Ember objects, including the
<a href="/ember/{{@version}}/classes/EmberObject#get">get</a> and
<a href="/ember/{{@version}}/classes/EmberObject#set">set</a> methods
</li>
<li>
<LinkTo @route='project-version.classes.class' @model='Ember.Templates.helpers'>Ember.Templates.helpers</LinkTo> - built-in functions that can be used in templates, such as the
<a href="/ember/{{@version}}/classes/Ember.Templates.helpers#each">each</a> and
<a href="/ember/{{@version}}/classes/Ember.Templates.helpers#on">on</a> helpers
</li>
<li><LinkTo @route='project-version.classes.class' @model='Helper'>Helpers</LinkTo> - a way to define custom display functions that are used in templates</li>
<li><LinkTo @route='project-version.classes.class' @model='Route'>Route</LinkTo> - used to define individual routes, including the <LinkTo @route='project-version.classes.class.methods.method' @models={{array 'Route' 'model'}} @query={{hash anchor='model'}}>model</LinkTo> hook for loading data</li>
<li>
<LinkTo @route='project-version.classes.class' @model='Route'>Route</LinkTo> - used to define individual routes, including the
<a href="/ember/{{@version}}/classes/Route#model">model</a> hook for loading data
</li>
<li><LinkTo @route='project-version.classes.class' @model='Service'>Service</LinkTo> - an Ember object that lives for the duration of the application, and can be made available in different parts of your application</li>
</ul>
<h2>Useful links</h2>
Expand Down
3 changes: 1 addition & 2 deletions app/templates/events.hbs → app/components/events.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
<EmberAnchor @a={{this.anchor}} />
<ApiIndexFilter @model={{this.model}} @filterData={{this.filterData}} as |filteredModel|>
<ApiIndexFilter @model={{@model}} @filterData={{@filterData}} as |filteredModel|>
{{#each filteredModel.events as |event|}}
<ClassFieldDescription @type="event" @field={{event}} @model={{this.model}} />
{{/each}}
Expand Down
5 changes: 5 additions & 0 deletions app/components/methods.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<ApiIndexFilter @model={{@model}} @filterData={{@filterData}} as |filteredModel|>
{{#each filteredModel.methods as |method|}}
<ClassFieldDescription @type="method" @field={{method}} @model={{this.model}} />
{{/each}}
</ApiIndexFilter>
5 changes: 5 additions & 0 deletions app/components/properties.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<ApiIndexFilter @model={{@model}} @filterData={{@filterData}} as |filteredModel|>
{{#each filteredModel.properties as |property|}}
<ClassFieldDescription @type="property" @field={{property}} @model={{this.model}} />
{{/each}}
</ApiIndexFilter>
16 changes: 8 additions & 8 deletions app/components/search-input.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { inject as service } from '@ember/service';
import Component from '@glimmer/component';
import { get } from '@ember/object';
import { isPresent } from '@ember/utils';
import { task, timeout } from 'ember-concurrency';
import { restartableTask, task, timeout } from 'ember-concurrency';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';

Expand Down Expand Up @@ -32,8 +32,8 @@ export default class SearchInput extends Component {
return isPresent(this.query);
}

@task({ restartable: true }) *search(query) {
yield timeout(SEARCH_DEBOUNCE_PERIOD);
search = restartableTask(async (query) => {
await timeout(SEARCH_DEBOUNCE_PERIOD);

this.query = query;

Expand All @@ -46,14 +46,14 @@ export default class SearchInput extends Component {
// ensure search results are visible if the menu was previously closed above
this._focused = true;

yield get(this, 'searchService.search').perform(query);
}
await get(this, 'searchService.search').perform(query);
});

@task *closeMenu() {
yield timeout(SEARCH_CLOSE_PERIOD);
closeMenu = task(async () => {
await timeout(SEARCH_CLOSE_PERIOD);

this._focused = false;
}
});

@action onfocus() {
if (this.query.length > 0 && this.searchService.hasStaleResults()) {
Expand Down
8 changes: 4 additions & 4 deletions app/components/table-of-contents.hbs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
<label class='toc-private-toggle'>
<input type='checkbox' checked={{@showPrivateClasses}} onchange={{@togglePrivateClasses}} class='private-deprecated-toggle' />
Show Private / Deprecated packages
</label>
<ul class='table-of-contents '>
<li class='toc-item toc-group' data-test-toc-title="packages">
Packages
Expand Down Expand Up @@ -38,7 +42,3 @@
</ul>
</li>
</ul>
<label class='toc-private-toggle'>
<input type='checkbox' checked={{@showPrivateClasses}} onchange={{@togglePrivateClasses}} class='private-deprecated-toggle' />
Show Private / Deprecated
</label>
7 changes: 1 addition & 6 deletions app/controllers/events.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
import AnchorControllerSupport from 'ember-anchor/mixins/controller-support';

export default class EventsController extends Controller.extend(
AnchorControllerSupport
) {
export default class EventsController extends Controller {
@service
filterData;

queryParams = ['anchor'];
}
15 changes: 1 addition & 14 deletions app/controllers/methods.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,7 @@
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
import AnchorControllerSupport from 'ember-anchor/mixins/controller-support';
import { tracked } from '@glimmer/tracking';

export default class MethodsController extends Controller.extend(
AnchorControllerSupport
) {
export default class MethodsController extends Controller {
@service
filterData;

@tracked
anchor;

queryParams = ['anchor'];

updateAnchor(fieldName) {
this.anchor = fieldName;
}
}
15 changes: 5 additions & 10 deletions app/controllers/project-version.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,32 +149,27 @@ export default class ProjectVersionController extends Controller {
endingRoute = `classes/${className}`;
break;
}
case 'project-version.classes.class.index': {
let className = this._getEncodedNameForCurrentClass();
endingRoute = `classes/${className}`;
break;
}
case 'project-version.modules.module.index': {
case 'project-version.modules.module': {
let moduleName = encodeURIComponent(this.moduleController.model.name);
endingRoute = `modules/${moduleName}`;
break;
}
case 'project-version.namespaces.namespace.index': {
case 'project-version.namespaces.namespace': {
let namespaceName = this.namespaceController.model.name;
endingRoute = `namespaces/${namespaceName}`;
break;
}
case 'project-version.classes.class.methods.index': {
case 'project-version.classes.class.methods': {
let className = this._getEncodedNameForCurrentClass();
endingRoute = `classes/${className}/methods`;
break;
}
case 'project-version.classes.class.events.index': {
case 'project-version.classes.class.events': {
let className = this._getEncodedNameForCurrentClass();
endingRoute = `classes/${className}/events`;
break;
}
case 'project-version.classes.class.properties.index': {
case 'project-version.classes.class.properties': {
let className = this._getEncodedNameForCurrentClass();
endingRoute = `classes/${className}/properties`;
break;
Expand Down
14 changes: 1 addition & 13 deletions app/controllers/properties.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
/* eslint-disable ember/classic-decorator-no-classic-methods */
import { action } from '@ember/object';
import { inject as service } from '@ember/service';
import Controller from '@ember/controller';
import AnchorControllerSupport from 'ember-anchor/mixins/controller-support';

export default class PropertiesController extends Controller.extend(
AnchorControllerSupport
) {
export default class PropertiesController extends Controller {
@service
filterData;

queryParams = ['anchor'];

@action
updateAnchor(fieldName) {
this.set('anchor', fieldName);
}
}
42 changes: 0 additions & 42 deletions app/mixins/scroll-tracker.js

This file was deleted.

37 changes: 3 additions & 34 deletions app/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ AppRouter.map(function () {
// project-version.classes-redirect => project-version.classes.index
// project-version.class => project-version.classes.class
this.route('classes', function () {
this.route('class', { path: '/:class' }, itemRoutes);
this.route('class', { path: '/:class' });
});
// this.route('class', {path: '/classes/:class'}, itemRoutes);

Expand All @@ -58,7 +58,7 @@ AppRouter.map(function () {
// project-version.namespace => project-version.namespaces.namespace
// routes/project-version/namespace => routes/project-version/namespaces/namespace
this.route('namespaces', function () {
this.route('namespace', { path: '/:namespace' }, itemRoutes);
this.route('namespace', { path: '/:namespace' });
});
// this.route('namespace', {path: '/namespaces/:namespace'}, itemRoutes);

Expand All @@ -67,22 +67,9 @@ AppRouter.map(function () {
// routes/project-version/module => routes/project-version/modules/module
// routes/project-version/module/* => routes/project-version/modules/module/*
this.route('modules', function () {
this.route('module', { path: '/:module' }, itemRoutes);
this.route('module', { path: '/:module' });
});
// this.route('module', {path: '/modules/:module'}, itemRoutes);

// Common sub-routes
function itemRoutes() {
this.route('methods', function () {
this.route('method', { path: '/:method' });
});
this.route('properties', function () {
this.route('property', { path: '/:property' });
});
this.route('events', function () {
this.route('event', { path: '/:event' });
});
}
}
);
this.route('class', { path: '/classes/:class' });
Expand All @@ -97,24 +84,6 @@ AppRouter.map(function () {
ember-cli
project

/:project/:project_version
/classes/:class
/methods, /properties, /events
/functions/:module (no sub routes)
/namespaces/:namespace
/methods, /properties, /events
/modules/:module
/methods, /properties, /events

SUB ROUTES

Instead of https://api.emberjs.com/ember/4.6/classes/Engine/methods/unregister?anchor=unregister
We can do https://api.emberjs.com/ember/4.6/classes/Engine/methods?anchor=unregister

/methods/:method
/properties/:property
/events/:event

OTHER STATES
private, deprecated, inherited, protected
inherited is not reflected in URL state but it's checked by default
Expand Down
Loading