Skip to content

Removing the tabbed-layout and moving it to an on-this-page layout #909

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

Open
wants to merge 24 commits into
base: website-redesign
Choose a base branch
from
Open
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
323cb8e
Update styleguide to have the on-this-page styling
MinThaMie Jun 14, 2024
8a98942
Move private toggle up in the sidebar
MinThaMie Jun 14, 2024
b87e1d0
move templates to components + remove EmberAnchor from the templates …
MinThaMie Jun 14, 2024
49a3cba
Make styling work, remove ember-anchor + updateAnchor implementation
MinThaMie Jun 14, 2024
fbe8859
fix pnpm version
mansona Jul 11, 2024
ae125c6
delete all scroll-tracker stuff
mansona Jul 11, 2024
36e1d6c
remove all traces of ember-anchor
mansona Jul 11, 2024
791a69c
Fix function layout
MinThaMie Jul 26, 2024
2483a9c
Merge 'origin/website-redesign' into layout
mansona May 24, 2025
50a3342
add redirects for methods
mansona Oct 15, 2024
5873677
fix redirects
mansona May 22, 2025
4015814
speed up builds
mansona May 24, 2025
0391a39
Add all method, properties & events redirects to classes, modules, na…
MinThaMie May 24, 2025
9b7e6ad
Merge pull request #931 from ember-learn/test-redirects
MinThaMie May 24, 2025
e2ceca9
WIP stuff
MinThaMie May 24, 2025
0324674
Tiny bit of CSS, fix pnpm-lock and route file after merge
MinThaMie May 24, 2025
9675bf5
Fix linting
MinThaMie May 24, 2025
2d3415d
remove events, methods, properties sub-routes
mansona May 26, 2025
bdbac7d
remove unused function
mansona May 26, 2025
ea43141
remove unused packages
mansona May 26, 2025
1b255ae
update the ember landing page to use anchors correctly
mansona May 26, 2025
0f8f1be
remove unused Percy snapshots
mansona May 26, 2025
6082c26
Merge pull request #951 from ember-learn/remove-routes
mansona May 26, 2025
4f03c69
fix namespace percy snapshot
mansona May 29, 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
4 changes: 2 additions & 2 deletions app/components/class-field-description.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<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'>
@@ -16,7 +16,7 @@
<span class='access'>deprecated</span>
{{/if}}
{{!-- TODO: Fix this link for a11y --}}
<a class='class-field-description--link' data-test-anchor="{{@field.name}}" role='link' {{on 'click' (fn this.updateAnchor @field.name)}} {{!-- template-lint-disable link-href-attributes --}}>
<a class='class-field-description--link' href="#{{@field.name}}" role='link'>
{{svg-jar 'link' width='20px' height='20px'}}
</a>
</h3>
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
@@ -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
@@ -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>
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}}
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>
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
@@ -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
@@ -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;
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
@@ -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);

@@ -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);

@@ -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' });
@@ -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
1 change: 1 addition & 0 deletions app/routes/project-version.js
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@ import Route from '@ember/routing/route';
import semverCompare from 'semver-compare';
import getFullVersion from 'ember-api-docs/utils/get-full-version';
import getLastVersion from 'ember-api-docs/utils/get-last-version';

import config from 'ember-api-docs/config/environment';

export default class ProjectVersionRoute extends Route {
4 changes: 2 additions & 2 deletions app/routes/project-version/classes/class.js
Original file line number Diff line number Diff line change
@@ -2,12 +2,12 @@ import { inject as service } from '@ember/service';
import { resolve, all } from 'rsvp';
import Route from '@ember/routing/route';
import { set } from '@ember/object';
import ScrollTracker from 'ember-api-docs/mixins/scroll-tracker';

import { pluralize } from 'ember-inflector';
import getFullVersion from 'ember-api-docs/utils/get-full-version';
import createExcerpt from 'ember-api-docs/utils/create-excerpt';

export default class ClassRoute extends Route.extend(ScrollTracker) {
export default class ClassRoute extends Route {
/** @type {import('@ember/routing/router-service').default} */
@service
router;
5 changes: 0 additions & 5 deletions app/routes/project-version/classes/class/events.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/classes/class/index.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/classes/class/methods.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/classes/class/properties.js

This file was deleted.

11 changes: 2 additions & 9 deletions app/routes/project-version/functions/function.js
Original file line number Diff line number Diff line change
@@ -11,9 +11,6 @@ export default class FunctionRoute extends Route {
@service
metaStore;

@service
scrollPositionReset;

@service store;

async model(params) {
@@ -34,12 +31,12 @@ export default class FunctionRoute extends Route {
try {
fnModule = await this.store.find(
'class',
`${project}-${projectVersion}-${className}`
`${project}-${projectVersion}-${className}`.toLowerCase()
);
} catch (e) {
fnModule = await this.store.find(
'namespace',
`${project}-${projectVersion}-${className}`
`${project}-${projectVersion}-${className}`.toLowerCase()
);
}

@@ -61,8 +58,4 @@ export default class FunctionRoute extends Route {
return fn.name === functionName;
});
}

activate() {
this.scrollPositionReset.doReset();
}
}
7 changes: 5 additions & 2 deletions app/routes/project-version/index.js
Original file line number Diff line number Diff line change
@@ -3,7 +3,10 @@ import Route from '@ember/routing/route';
export default class IndexRoute extends Route {
async model() {
const projectVersion = this.modelFor('project-version');
const project = await projectVersion.project;
return project;

return {
project: projectVersion.belongsTo('project').id(),
version: projectVersion.version,
};
}
}
8 changes: 5 additions & 3 deletions app/routes/project-version/modules/module.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import ClassRoute from '../classes/class';
import ScrollTracker from 'ember-api-docs/mixins/scroll-tracker';
import getFullVersion from 'ember-api-docs/utils/get-full-version';
import { inject as service } from '@ember/service';

export default class ModuleRoute extends ClassRoute.extend(ScrollTracker) {
export default class ModuleRoute extends ClassRoute {
@service store;

async model(params) {
@@ -27,7 +26,10 @@ export default class ModuleRoute extends ClassRoute.extend(ScrollTracker) {
klass = `${project}-${klass}`;
}

return this.find('module', `${project}-${projectVersion}-${klass}`);
return this.find(
'module',
`${project}-${projectVersion}-${klass}`.toLowerCase()
);
}

serialize(model) {
5 changes: 0 additions & 5 deletions app/routes/project-version/modules/module/events.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/modules/module/methods.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/modules/module/properties.js

This file was deleted.

8 changes: 5 additions & 3 deletions app/routes/project-version/namespaces/namespace.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import ClassRoute from '../classes/class';
import ScrollTracker from 'ember-api-docs/mixins/scroll-tracker';
import getFullVersion from 'ember-api-docs/utils/get-full-version';
import { inject as service } from '@ember/service';

export default class NamespaceRoute extends ClassRoute.extend(ScrollTracker) {
export default class NamespaceRoute extends ClassRoute {
@service store;

templateName = 'project-version/classes/class';
@@ -20,7 +19,10 @@ export default class NamespaceRoute extends ClassRoute.extend(ScrollTracker) {
this.metaStore
);
const klass = params['namespace'];
return this.find('namespace', `${project}-${projectVersion}-${klass}`);
return this.find(
'namespace',
`${project}-${projectVersion}-${klass}`.toLowerCase()
);
}

serialize(model) {
5 changes: 0 additions & 5 deletions app/routes/project-version/namespaces/namespace/events.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/namespaces/namespace/index.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/namespaces/namespace/methods.js

This file was deleted.

5 changes: 0 additions & 5 deletions app/routes/project-version/namespaces/namespace/properties.js

This file was deleted.

3 changes: 1 addition & 2 deletions app/routes/project.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import Route from '@ember/routing/route';
import ScrollTracker from 'ember-api-docs/mixins/scroll-tracker';
import { inject as service } from '@ember/service';

export default class ProjectRoute extends Route.extend(ScrollTracker) {
export default class ProjectRoute extends Route {
/** @type {import('@ember/routing/router-service').default} */
@service
router;
72 changes: 0 additions & 72 deletions app/services/scroll-position-reset.js

This file was deleted.

24 changes: 22 additions & 2 deletions app/styles/app.css
Original file line number Diff line number Diff line change
@@ -91,6 +91,11 @@ li.toc-heading:first-child {
margin-top: 0;
}

.toc-private-toggle {
display: block;
margin-top: var(--spacing-2);
}

a.class-field-description--link {
margin-left: 12px;
vertical-align: middle;
@@ -109,8 +114,6 @@ a.class-field-description--link:hover svg {
fill: var(--color-brand);
}



.parameter, .return {
display: flex;
gap: var(--spacing-1);
@@ -126,6 +129,23 @@ dd {
color: var(--color-gray-600);
}

.on-this-page-wrapper .access-checkbox-list {
display: flex;
flex-direction: column;
}

.on-this-page-wrapper .api-index-filter {
margin-top: var(--spacing-2)
}

.on-this-page-wrapper ul {
margin-top: 0;
}

section.method, section.property, section.event {
margin-bottom: var(--spacing-3);
}

.whoops {
display: flex;
justify-content: center;
28 changes: 0 additions & 28 deletions app/templates/class-index.hbs

This file was deleted.

1 change: 0 additions & 1 deletion app/templates/class.hbs

This file was deleted.

7 changes: 0 additions & 7 deletions app/templates/methods.hbs

This file was deleted.

2 changes: 1 addition & 1 deletion app/templates/project-version.hbs
Original file line number Diff line number Diff line change
@@ -29,7 +29,7 @@
@isShowingNamespaces={{version-lt this.selectedProjectVersion.compactVersion "2.16"}}
/>
</EsSidebar>
<section class="content">
<section class="content-wrapper">
{{outlet}}
</section>
</div>
67 changes: 40 additions & 27 deletions app/templates/project-version/classes/class.hbs
Original file line number Diff line number Diff line change
@@ -71,31 +71,26 @@
<ImportExample @item={{@model.name}} @package={{this.module}} />
{{/if}}
<p class="description"><MarkdownToHtml @markdown={{@model.description}} /></p>

{{#if (or @model.methods @model.properties @model.events)}}
<hr>
{{#if @model.methods}}
<h2>Methods</h2>
<Methods @model={{@model}} @filterData={{this.filterData}}/>
{{/if}}
{{#if @model.properties}}
<h2>Properties</h2>
<Properties @model={{@model}} @filterData={{this.filterData}}/>
{{/if}}
{{#if @model.events}}
<h2>Events</h2>
<Events @model={{@model}} @filterData={{this.filterData}}/>
{{/if}}
</article>
<div class="on-this-page-wrapper">
<div class="on-this-page-wrapper-header">On this page</div>
<hr>
{{#if (or @model.methods @model.properties @model.events)}}
<div class="tabbed-layout">
<nav class="tabbed-layout__menu">
<LinkTo @route={{concat this.parentName ".index" }} @models={{array @model.project.id @model.projectVersion.compactVersion @model.name}} @query={{hash anchor=undefined}} class="tabbed-layout__menu__item" @activeClass="tabbed-layout__menu__item_selected" @current-when={{concat this.parentName ".index"}} data-test-tab="index">
<span>Index</span>
</LinkTo>
{{#if @model.methods}}
<LinkTo @route={{concat this.parentName ".methods" }} @models={{array @model.project.id @model.projectVersion.compactVersion @model.name}} @query={{hash anchor=undefined}} class="tabbed-layout__menu__item" @activeClass="tabbed-layout__menu__item_selected" @current-when={{concat this.parentName ".methods"}} data-test-tab="methods">
<span>Methods</span>
</LinkTo>
{{/if}}
{{#if @model.properties}}
<LinkTo @route={{concat this.parentName ".properties" }} @models={{array @model.project.id @model.projectVersion.compactVersion @model.name}} @query={{hash anchor=undefined}} class="tabbed-layout__menu__item" @activeClass="tabbed-layout__menu__item_selected" @current-when={{concat this.parentName ".properties"}} data-test-tab="properties">
<span>Properties</span>
</LinkTo>
{{/if}}
{{#if @model.events}}
<LinkTo @route={{concat this.parentName ".events" }} @models={{array @model.project.id @model.projectVersion.compactVersion @model.name}} @query={{hash anchor=undefined}} class="tabbed-layout__menu__item" @activeClass="tabbed-layout__menu__item_selected" @current-when={{concat this.parentName ".events"}} data-test-tab="events">
<span>Events</span>
</LinkTo>
{{/if}}
</nav>
<section>
Show:
<section class="access-checkbox-list">
<label class="access-checkbox">
<input id="inherited-toggle"
data-test-checkbox="inherited"
@@ -130,8 +125,26 @@
</label>
</section>
<hr>
{{outlet}}
</div>
<ApiIndexFilter @model={{this.model}} @filterData={{this.filterData}} as |filteredModel|>
<ApiIndex @itemData={{filteredModel}} @classNames="api__index__content" as |sectionData|>
{{#each sectionData.sections as |section|}}
{{#if section.items}}
<h3 class="api-index-section-title">{{section.title}}</h3>
<ul class="{{section.class}}">
{{#each section.items as |item|}}
<li data-test-item={{item.name}}>
<a
href="#{{item.name}}"
>
{{item.name}}
</a>
</li>
{{/each}}
</ul>
{{/if}}
{{/each}}
</ApiIndex>
</ApiIndexFilter>
{{/if}}

</article>
</div>
9 changes: 6 additions & 3 deletions app/templates/project-version/functions/function.hbs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
{{page-title @model.fn.name}}
<h1 class="module-name">Function</h1>
<hr>
<ClassFieldDescription @type="method" @field={{@model.fn}} @model={{@model.fnModule}} />

<article class="chapter">
<h1 class="module-name">Function</h1>
<hr>
<ClassFieldDescription @type="method" @field={{@model.fn}} @model={{@model.fnModule}} />
</article>
4 changes: 2 additions & 2 deletions app/templates/project-version/index.hbs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{#if (eq @model.id "ember-data")}}
{{#if (eq @model.project "ember-data")}}
<EmberDataLandingPage />
{{else}}
<EmberLandingPage />
<EmberLandingPage @version={{@model.version}}/>
{{/if}}
7 changes: 0 additions & 7 deletions app/templates/properties.hbs

This file was deleted.

9 changes: 0 additions & 9 deletions app/utils/get-offset.js

This file was deleted.

53 changes: 0 additions & 53 deletions app/utils/hash-to-url.js

This file was deleted.

7 changes: 3 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -60,7 +60,6 @@
"broccoli-asset-rev": "^3.0.0",
"broccoli-funnel": "^2.0.1",
"ember-a11y-testing": "^5.2.1",
"ember-anchor": "^1.0.3",
"ember-auto-import": "^2.10.0",
"ember-basic-dropdown": "^8.6.0",
"ember-cli": "~3.28.6",
@@ -141,8 +140,9 @@
},
"engines": {
"node": "16.* || 18.* || 20.*",
"npm": "7 || 8 || >= 9"
"pnpm": "9"
},
"packageManager": "pnpm@9.5.0",
"cacheDirectories": [
"node_modules"
],
@@ -164,6 +164,5 @@
"overrides": {
"node-sass": "^9.0.0"
}
},
"packageManager": "pnpm@9.5.0"
}
}
740 changes: 423 additions & 317 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

38 changes: 12 additions & 26 deletions prember-urls.js
Original file line number Diff line number Diff line change
@@ -42,12 +42,22 @@ module.exports = function () {
urls.push(`/${p}/${uniqVersion}/${suffix}`);
};

const oldVersions = ['1.13', '2.18', '3.28', '4.4', '4.8', '4.12'];
const oldVersions = [
'1.13',
'2.18',
'3.28',
'4.4',
'4.8',
'4.12',
'5.4',
'5.8',
'5.12',
];

uniqueProjectVersions.forEach((uniqVersion) => {
if (
!oldVersions.includes(uniqVersion) &&
!semver.gte(`${uniqVersion}.0`, '5.0.0')
!semver.gte(`${uniqVersion}.0`, '6.0.0')
) {
return;
}
@@ -90,30 +100,6 @@ module.exports = function () {
entityData = require(requirePath);
}

if (entityData.data.attributes.methods?.length) {
addUrl(
p,
uniqVersion,
`${entity}/${partialUrlEncode(cleanId)}/methods`
);
}

if (entityData.data.attributes.properties?.length) {
addUrl(
p,
uniqVersion,
`${entity}/${partialUrlEncode(cleanId)}/properties`
);
}

if (entityData.data.attributes.events?.length) {
addUrl(
p,
uniqVersion,
`${entity}/${partialUrlEncode(cleanId)}/events`
);
}

if (entity === 'modules' && entityData) {
const staticFunctions = entityData.data.attributes.staticfunctions;

11 changes: 11 additions & 0 deletions public/_redirects
Original file line number Diff line number Diff line change
@@ -1 +1,12 @@
/:project/:version/classes/:class/methods/* anchor=:anchor /:project/:version/classes/:class#:anchor 301!
/:project/:version/classes/:class/properties/* anchor=:anchor /:project/:version/classes/:class#:anchor 301!
/:project/:version/classes/:class/events/* anchor=:anchor /:project/:version/classes/:class#:anchor 301!

/:project/:version/namespaces/:namespace/methods/* anchor=:anchor /:project/:version/namespaces/:namespace#:anchor 301!
/:project/:version/namespaces/:namespace/properties/* anchor=:anchor /:project/:version/namespaces/:namespace#:anchor 301!
/:project/:version/namespaces/:namespace/events/* anchor=:anchor /:project/:version/namespaces/:namespace#:anchor 301!

/:project/:version/modules/:module/methods/* anchor=:anchor /:project/:version/modules/:module#:anchor 301!
/:project/:version/modules/:module/properties/* anchor=:anchor /:project/:version/modules/:module#:anchor 301!
/:project/:version/modules/:module/events/* anchor=:anchor /:project/:version/modules/:module#:anchor 301!
/* /index.html 200
6 changes: 3 additions & 3 deletions tests/acceptance/analytics-page-tracking-test.js
Original file line number Diff line number Diff line change
@@ -41,23 +41,23 @@ module('Acceptance | analytics page tracking', function (hooks) {
assert.ok(
serviceTrackPageSpy.calledWith({
page: '/ember/2.11/namespaces/Ember',
title: 'project-version.namespaces.namespace.index',
title: 'project-version.namespaces.namespace',
hostname,
}),
'service was called with expected arguments for ember namespace page'
);
assert.ok(
serviceTrackPageSpy.calledWith({
page: '/ember/2.11/modules/ember-metal',
title: 'project-version.modules.module.index',
title: 'project-version.modules.module',
hostname,
}),
'service was called with expected arguments for ember metal module'
);
assert.ok(
serviceTrackPageSpy.calledWith({
page: '/ember/2.11/classes/Ember.Application',
title: 'project-version.classes.class.index',
title: 'project-version.classes.class',
hostname,
}),
'service was called with expected arguments for ember application class'
19 changes: 0 additions & 19 deletions tests/acceptance/anchors-test.js

This file was deleted.

74 changes: 0 additions & 74 deletions tests/acceptance/items-test.js

This file was deleted.

4 changes: 0 additions & 4 deletions tests/acceptance/percy-test.js
Original file line number Diff line number Diff line change
@@ -8,12 +8,8 @@ let snapshots = [
['/ember-data/', 'Ember Data Landing Page'],
['/ember/release/modules/@ember%2Fcomponent', 'Package Page'],
['/ember/release/classes/Component', 'Class Index'],
['/ember/release/classes/Component/methods', 'Class Methods'],
['/ember/release/classes/Component/properties', 'Class Properties'],
['/ember/release/classes/Component/events', 'Class Events'],
['/ember/release/functions/@ember%2Fcomponent/capabilities', 'Function Page'],
['/ember/release/namespaces/Instrumentation', 'Namespace Page'],
['/ember/release/namespaces/FEATURES/methods', 'Namespace methods page'],
];

module('Acceptance | percy', function (hooks) {
129 changes: 0 additions & 129 deletions tests/acceptance/scroll-reset-on-transition-test.js

This file was deleted.

107 changes: 0 additions & 107 deletions tests/acceptance/switch-versions-test.js
Original file line number Diff line number Diff line change
@@ -97,113 +97,6 @@ module('Acceptance | version navigation', function (hooks) {
);
});

test('switching specific method less than 2.16 should retain method', async function (assert) {
await visit(
'/ember/2.8/classes/Ember.Component/methods/didReceiveAttrs?anchor=didReceiveAttrs'
);
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.8/classes/Ember.Component/methods/didReceiveAttrs?anchor=didReceiveAttrs',
'navigated to v2.8 method'
);
await selectChoose('.ember-power-select-trigger', '2.11');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.11/classes/Ember.Component/methods/didReceiveAttrs?anchor=didReceiveAttrs',
'navigated to v2.11 method'
);
});

test('switching specific event less than 2.16 should retain event', async function (assert) {
await visit(
'/ember/2.8/classes/Ember.Component/events/didReceiveAttrs?anchor=didReceiveAttrs'
);
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.8/classes/Ember.Component/events/didReceiveAttrs?anchor=didReceiveAttrs',
'navigated to v2.8 method'
);
await selectChoose('.ember-power-select-trigger', '2.11');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.11/classes/Ember.Component/events/didReceiveAttrs?anchor=didReceiveAttrs',
'navigated to v2.11 method'
);
});

test('switching specific property less than 2.16 should retain property', async function (assert) {
await visit(
'/ember/2.8/classes/Ember.Component/properties/isDestroyed?anchor=isDestroyed'
);
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.8/classes/Ember.Component/properties/isDestroyed?anchor=isDestroyed',
'navigated to v2.8 property'
);
await selectChoose('.ember-power-select-trigger', '2.11');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.11/classes/Ember.Component/properties/isDestroyed?anchor=isDestroyed',
'navigated to v2.11 property'
);
});

test('switching class methods tab less than 2.16 should retain', async function (assert) {
await visit('/ember/2.8/classes/Ember.Component/methods');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.8/classes/Ember.Component/methods',
'navigated to v2.8 methods'
);
await selectChoose('.ember-power-select-trigger', '2.11');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.11/classes/Ember.Component/methods',
'navigated to v2.11 methods'
);
});

test('switching class events tab less than 2.16 should retain', async function (assert) {
await visit('/ember/2.8/classes/Ember.Component/events');
assert.equal(
currentURL(),
'/ember/2.8/classes/Ember.Component/events',
'navigated to v2.8 events'
);
await selectChoose('.ember-power-select-trigger', '2.11');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.11/classes/Ember.Component/events',
'navigated to v2.11 events'
);
});

test('switching class properties tab less than 2.16 should retain', async function (assert) {
await visit('/ember/2.8/classes/Ember.Component/properties');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.8/classes/Ember.Component/properties',
'navigated to v2.8 properties'
);
await selectChoose('.ember-power-select-trigger', '2.11');
await waitForSettled();
assert.equal(
currentURL(),
'/ember/2.11/classes/Ember.Component/properties',
'navigated to v2.11 properties'
);
});

test('switching from class version less than 2.16 to class version 2.16 should reset to landing page', async function (assert) {
await visit('/ember/2.7/classes/Ember.Component');
await waitForSettled();
62 changes: 0 additions & 62 deletions tests/acceptance/tab-nav-test.js

This file was deleted.

29 changes: 1 addition & 28 deletions tests/integration/components/class-field-description-test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import EmberObject from '@ember/object';
import { module, test } from 'qunit';
import { setupRenderingTest } from 'ember-qunit';
import { render, click, findAll, find } from '@ember/test-helpers';
import { render, findAll, find } from '@ember/test-helpers';
import hbs from 'htmlbars-inline-precompile';

module('Integration | Component | class field description', function (hooks) {
@@ -30,33 +30,6 @@ module('Integration | Component | class field description', function (hooks) {
assert.dom(findAll('.args')[0]).hasText('(param1, param2, param3)');
});

test('it calls the provided action on link-click with the field name as an arg', async function (assert) {
assert.expect(3);
this.set('updateAnchor', (name) => {
assert.equal(
name,
'field-name',
'expected the field name to be passed into the action'
);
assert.step('updateAnchorAction');
});

this.set(
'field',
EmberObject.create({
name: 'field-name',
})
);

await render(
hbs`<ClassFieldDescription @field={{this.field}} @updateAnchor={{this.updateAnchor}}/>`
);

await click('.class-field-description--link');

assert.verifySteps(['updateAnchorAction']);
});

test('parameter props are displayed', async function (assert) {
this.set('type', 'method');
this.set(
12 changes: 0 additions & 12 deletions tests/unit/mixins/scroll-tracker-test.js

This file was deleted.

91 changes: 0 additions & 91 deletions tests/unit/utils/hash-to-url-test.js

This file was deleted.