diff --git a/app/components/class-field-description.hbs b/app/components/class-field-description.hbs index 25bd66bd2..4fcc73004 100644 --- a/app/components/class-field-description.hbs +++ b/app/components/class-field-description.hbs @@ -1,24 +1,23 @@ {{! template-lint-disable no-invalid-interactive }} -
-

- {{@field.name}} - {{#if @field.params}} - - ({{join ', ' (map-by 'name' @field.params)}}) +
+

+ + + {{@field.name}} - {{/if}} - {{#if @field.return}} - {{@field.return.type}} - {{/if}} + {{#if @field.params}}({{join ', ' (map-by 'name' @field.params)}}){{/if}} + {{#if @field.return}} + : {{@field.return.type}} + {{/if}} + {{#if @field.access}} {{@field.access}} {{/if}} {{#if @field.deprecated}} deprecated {{/if}} - {{!-- TODO: Fix this link for a11y --}} - - {{svg-jar 'link' width='20px' height='20px'}} + + {{svg-jar 'link' width='20px' height='20px' aria-hidden='true'}}

{{#if @model.module}} diff --git a/app/components/events.hbs b/app/components/events.hbs index 60a374b3e..48eea01e2 100644 --- a/app/components/events.hbs +++ b/app/components/events.hbs @@ -1,5 +1,5 @@ {{#each filteredModel.events as |event|}} - + {{/each}} diff --git a/app/components/methods.hbs b/app/components/methods.hbs index f9d0c2c08..e60112c5f 100644 --- a/app/components/methods.hbs +++ b/app/components/methods.hbs @@ -1,5 +1,5 @@ {{#each filteredModel.methods as |method|}} - + {{/each}} diff --git a/app/components/properties.hbs b/app/components/properties.hbs index 9929a6194..54bc2cd89 100644 --- a/app/components/properties.hbs +++ b/app/components/properties.hbs @@ -1,5 +1,5 @@ {{#each filteredModel.properties as |property|}} - + {{/each}} diff --git a/app/controllers/events.js b/app/controllers/events.js deleted file mode 100644 index d04378df8..000000000 --- a/app/controllers/events.js +++ /dev/null @@ -1,7 +0,0 @@ -import { inject as service } from '@ember/service'; -import Controller from '@ember/controller'; - -export default class EventsController extends Controller { - @service - filterData; -} diff --git a/app/controllers/methods.js b/app/controllers/methods.js deleted file mode 100644 index 408cf2823..000000000 --- a/app/controllers/methods.js +++ /dev/null @@ -1,7 +0,0 @@ -import { inject as service } from '@ember/service'; -import Controller from '@ember/controller'; - -export default class MethodsController extends Controller { - @service - filterData; -} diff --git a/app/controllers/project-version.js b/app/controllers/project-version.js index 12a0c59be..e32ac35d1 100644 --- a/app/controllers/project-version.js +++ b/app/controllers/project-version.js @@ -25,9 +25,6 @@ export default class ProjectVersionController extends Controller { @controller('project-version.classes.class') classController; @controller('project-version.modules.module') moduleController; @controller('project-version.namespaces.namespace') namespaceController; - @controller('project-version.classes.class.methods') methodsController; - @controller('project-version.classes.class.events') eventsController; - @controller('project-version.classes.class.properties') propertiesController; @alias('filterData.sideNav.showPrivate') showPrivateClasses; @@ -159,39 +156,6 @@ export default class ProjectVersionController extends Controller { endingRoute = `namespaces/${namespaceName}`; break; } - case 'project-version.classes.class.methods': { - let className = this._getEncodedNameForCurrentClass(); - endingRoute = `classes/${className}/methods`; - break; - } - case 'project-version.classes.class.events': { - let className = this._getEncodedNameForCurrentClass(); - endingRoute = `classes/${className}/events`; - break; - } - case 'project-version.classes.class.properties': { - let className = this._getEncodedNameForCurrentClass(); - endingRoute = `classes/${className}/properties`; - break; - } - case 'project-version.classes.class.methods.method': { - let className = this._getEncodedNameForCurrentClass(); - let methodName = this.methodsController.anchor; - endingRoute = `classes/${className}/methods/${methodName}?anchor=${methodName}`; - break; - } - case 'project-version.classes.class.events.event': { - let className = this._getEncodedNameForCurrentClass(); - let eventName = this.eventsController.anchor; - endingRoute = `classes/${className}/events/${eventName}?anchor=${eventName}`; - break; - } - case 'project-version.classes.class.properties.property': { - let className = this._getEncodedNameForCurrentClass(); - let propertyName = this.propertiesController.anchor; - endingRoute = `classes/${className}/properties/${propertyName}?anchor=${propertyName}`; - break; - } default: endingRoute = ''; break; diff --git a/app/controllers/project-version/classes/class/events.js b/app/controllers/project-version/classes/class/events.js deleted file mode 100644 index bcb0e0f2b..000000000 --- a/app/controllers/project-version/classes/class/events.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../events'; diff --git a/app/controllers/project-version/classes/class/index.js b/app/controllers/project-version/classes/class/index.js deleted file mode 100644 index b47092dbb..000000000 --- a/app/controllers/project-version/classes/class/index.js +++ /dev/null @@ -1,16 +0,0 @@ -import { inject as service } from '@ember/service'; -import Controller from '@ember/controller'; -import { parentName } from '../../../../utils/parent-name'; - -export default class IndexController extends Controller { - @service - filterData; - - /** @type {import('@ember/routing/router-service').default} */ - @service - router; - - get parentName() { - return parentName(this.router.currentRouteName); - } -} diff --git a/app/controllers/project-version/classes/class/methods.js b/app/controllers/project-version/classes/class/methods.js deleted file mode 100644 index 9b7c120ef..000000000 --- a/app/controllers/project-version/classes/class/methods.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../methods'; diff --git a/app/controllers/project-version/classes/class/properties.js b/app/controllers/project-version/classes/class/properties.js deleted file mode 100644 index 12104d582..000000000 --- a/app/controllers/project-version/classes/class/properties.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../properties'; diff --git a/app/controllers/project-version/modules/module/events.js b/app/controllers/project-version/modules/module/events.js deleted file mode 100644 index bcb0e0f2b..000000000 --- a/app/controllers/project-version/modules/module/events.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../events'; diff --git a/app/controllers/project-version/modules/module/methods.js b/app/controllers/project-version/modules/module/methods.js deleted file mode 100644 index 9b7c120ef..000000000 --- a/app/controllers/project-version/modules/module/methods.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../methods'; diff --git a/app/controllers/project-version/modules/module/properties.js b/app/controllers/project-version/modules/module/properties.js deleted file mode 100644 index 12104d582..000000000 --- a/app/controllers/project-version/modules/module/properties.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../properties'; diff --git a/app/controllers/project-version/namespaces/namespace/events.js b/app/controllers/project-version/namespaces/namespace/events.js deleted file mode 100644 index bcb0e0f2b..000000000 --- a/app/controllers/project-version/namespaces/namespace/events.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../events'; diff --git a/app/controllers/project-version/namespaces/namespace/index.js b/app/controllers/project-version/namespaces/namespace/index.js deleted file mode 100644 index ba6f71f5c..000000000 --- a/app/controllers/project-version/namespaces/namespace/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import ClassIndexController from '../../classes/class/index'; - -export default class IndexController extends ClassIndexController {} diff --git a/app/controllers/project-version/namespaces/namespace/methods.js b/app/controllers/project-version/namespaces/namespace/methods.js deleted file mode 100644 index 9b7c120ef..000000000 --- a/app/controllers/project-version/namespaces/namespace/methods.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../methods'; diff --git a/app/controllers/project-version/namespaces/namespace/properties.js b/app/controllers/project-version/namespaces/namespace/properties.js deleted file mode 100644 index 12104d582..000000000 --- a/app/controllers/project-version/namespaces/namespace/properties.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from '../../../properties'; diff --git a/app/controllers/properties.js b/app/controllers/properties.js deleted file mode 100644 index 18c3e2dff..000000000 --- a/app/controllers/properties.js +++ /dev/null @@ -1,7 +0,0 @@ -import { inject as service } from '@ember/service'; -import Controller from '@ember/controller'; - -export default class PropertiesController extends Controller { - @service - filterData; -} diff --git a/app/router.js b/app/router.js index 7623462cf..54b30dbfe 100644 --- a/app/router.js +++ b/app/router.js @@ -41,35 +41,23 @@ AppRouter.map(function () { 'project-version', { path: '/:project/:project_version' }, function () { - // this.route('classes-redirect', {path: '/classes'}); - - // project-version.classes-redirect => project-version.classes.index - // project-version.class => project-version.classes.class this.route('classes', function () { this.route('class', { path: '/:class' }); }); - // this.route('class', {path: '/classes/:class'}, itemRoutes); this.route('functions', function () { this.route('function', { path: '/:module/:fn' }); }); // Namespace routes - // 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' }); }); - // this.route('namespace', {path: '/namespaces/:namespace'}, itemRoutes); // Module routes - // project-version.module => project-version.modules.module - // 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' }); }); - // this.route('module', {path: '/modules/:module'}, itemRoutes); } ); this.route('class', { path: '/classes/:class' }); @@ -94,6 +82,8 @@ MAYBE REDIRECTS /data/classes/:class /modules/:module /classes/:class + +See _redirects for netlify redirects */ export default AppRouter; diff --git a/app/routes/not-found.js b/app/routes/not-found.js index 969fad2bb..09f96ec0a 100644 --- a/app/routes/not-found.js +++ b/app/routes/not-found.js @@ -11,4 +11,23 @@ export default class NotFoundRoute extends Route { this.fastboot.response.statusCode = 404; } + + redirect() { + if (typeof window === 'undefined' || !window.location) { + return; + } + const url = new URL(window.location.href); + const anchor = url.searchParams.get('anchor'); + const redirected = url.searchParams.get('redirected'); + if (anchor && !redirected) { + url.searchParams.set('redirected', '1'); + // If we get here with an anchor query param, it means something in the + // api docs app is continuing to link to it (sometimes in the markdown) + // Force full reload to get netlify redirects + window.location.replace(url.toString()); + // A more elegant solution would be to restore the various routes that + // handled ?anchor previously and redirect from there but that would + // necessitate adding support to the Ember Router to redirect to #anchors + } + } } diff --git a/app/routes/project-version/classes/class.js b/app/routes/project-version/classes/class.js index 715f6f1fd..9787c6b63 100644 --- a/app/routes/project-version/classes/class.js +++ b/app/routes/project-version/classes/class.js @@ -3,7 +3,6 @@ import { resolve, all } from 'rsvp'; import Route from '@ember/routing/route'; import { set } from '@ember/object'; -import { pluralize } from 'ember-inflector'; import getFullVersion from 'ember-api-docs/utils/get-full-version'; import createExcerpt from 'ember-api-docs/utils/create-excerpt'; @@ -60,27 +59,7 @@ export default class ClassRoute extends Route { }); } - redirect(model, transition) { - const lookupParams = (routeName) => { - let route = transition.routeInfos.find(({ name }) => name === routeName); - return route ? route.params : {}; - }; - - let { - to: { queryParams }, - } = transition; - - if (queryParams.anchor && queryParams.type) { - let type = queryParams.type; - this.router.transitionTo( - `project-version.classes.class.${pluralize(type)}.${type}`, - lookupParams('project-version').project, - lookupParams('project-version').project_version, - lookupParams('project-version.classes.class').class, - queryParams.anchor - ); - } - + redirect(model) { if (model.isError) { let error = new Error( 'Error retrieving model in routes/project-version/classes/class' diff --git a/app/styles/app.css b/app/styles/app.css index 11a96d247..ffef6fcd5 100644 --- a/app/styles/app.css +++ b/app/styles/app.css @@ -11,14 +11,16 @@ html { } .module-name { - display: inline-block; + display: inline-flex; + align-items: center; + flex-wrap: wrap; + gap: var(--spacing-1); margin-bottom: 0; } .access { color: #fff; background-color: var(--color-gray-600); - margin-left: var(--spacing-1); padding: 0.25rem var(--spacing-1); font-size: var(--font-size-md); border-radius: var(--radius); @@ -103,8 +105,15 @@ li.toc-heading:first-child { margin-top: var(--spacing-2); } +.class-field-description--header { + display: flex; + align-items: center; + flex-wrap: wrap; + column-gap: var(--spacing-1); +} + a.class-field-description--link { - margin-left: 12px; + margin-left: 0; vertical-align: middle; background: none; cursor: pointer; @@ -136,7 +145,12 @@ dd { margin: 0; } +.class-field-description .args { + font-weight: var(--font-weight-2); +} + .parameter-type, +.class-field-description .return-type, .return .return-type { font-style: italic; color: var(--color-gray-600); diff --git a/package.json b/package.json index 04636935c..225a2d734 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,7 @@ "ember-qunit": "^6.2.0", "ember-resolver": "^10.0.0", "ember-rfc176-data": "^0.3.17", + "ember-router-scroll": "^4.1.2", "ember-showdown-shiki": "^1.2.1", "ember-sinon": "^4.1.1", "ember-source": "~4.12.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e5bda57c..d97c7e83c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -218,6 +218,9 @@ importers: ember-rfc176-data: specifier: ^0.3.17 version: 0.3.18 + ember-router-scroll: + specifier: ^4.1.2 + version: 4.1.2(@babel/core@7.28.3) ember-showdown-shiki: specifier: ^1.2.1 version: 1.2.1(@babel/core@7.28.3)(showdown@2.1.0) @@ -1583,51 +1586,96 @@ packages: '@types/ember-resolver@5.0.13': resolution: {integrity: sha512-pO964cAPhAaFJoS28M8+b5MzAhQ/tVuNM4GDUIAexheQat36axG2WTG8LQ5ea07MSFPesrRFk2T3z88pfvdYKA==} + '@types/ember@3.16.14': + resolution: {integrity: sha512-m3fM87W1J75ri9Uu79hzKimiAhxdAF3dZyzmwGrf4OPPQp3yt2L9uHAkwmMIxstk4F1rBWG/SHJOnvlqif23Rw==} + '@types/ember@4.0.11': resolution: {integrity: sha512-v7VIex0YILK8fP87LkIfzeeYKNnu74+xwf6U56v6MUDDGfSs9q/6NCxiUfwkxD+z5nQiUcwvfKVokX8qzZFRLw==} + '@types/ember__application@3.16.10': + resolution: {integrity: sha512-KWmS3neq1ktBn59XSUxILQPyf8jKEzIYlyFi6b4xRBQd3l+sdIOUbp2+THiXgkAS9Zx9goZAcaMjP5UF78FQJA==} + '@types/ember__application@4.0.11': resolution: {integrity: sha512-U1S7XW0V70nTWbFckWoraJbYGBJK69muP/CsPFLeAuUYHfkkDiwh1SfqgAUN9aHtrEJM5SuSYVYp2YsTI2yLuA==} + '@types/ember__array@3.16.11': + resolution: {integrity: sha512-Izdn9iHa/9Iqn3fNf3GzQYXws6cfSvpmb0IgQE29EVhm99hzexa5ngvcTpU+6717TVuf+XJ+eIwjrrnNPcZ6Gg==} + '@types/ember__array@4.0.10': resolution: {integrity: sha512-UrhDbopLI3jB0MqV14y8yji2IuPNmeDrtT1PRYJL4CThLHrRkfeYyFvxqvrxWxn0wXKjbbjfH1gOe7BU57QrLQ==} + '@types/ember__component@3.16.14': + resolution: {integrity: sha512-1xLPlder9ez16ajMk0+HWDsZ85I4y9K0uLOglNtfxuUOQi5Jb7jakwyj49dN5P62suwjtDEfhsvToZORT5pOtw==} + '@types/ember__component@4.0.22': resolution: {integrity: sha512-m72EtmBN/RxOChXqRsyOg4RR5+AiB4LQ8s1CEKNYAfvANt18m4hjqxtA7QZYLTq2ZjEVJGpdMsrdDuONWjwRSQ==} + '@types/ember__controller@3.16.14': + resolution: {integrity: sha512-VDb3B1Yc6mPMafYKW/CsQubGRLp6UTgBMXzfdHIKMQbtyUcfXvnvJWZ2aWtfCZBNTgwb14zvzVQti2GYgQFjGg==} + '@types/ember__controller@4.0.12': resolution: {integrity: sha512-80rdnSC0UJBqoUX5/vkQcM2xkRdTPTvY0dPXEfY5cC5OZITbcSeRo5qa7ZGhgNBfH6XYyh55Lo/b811LwU3N9w==} + '@types/ember__debug@3.16.12': + resolution: {integrity: sha512-+k+9qNmTaLw6xQCvcZm1DrQ6D2n9uob/8RVAK6jxFkxyPNbdt66z3fn7V/NHIURcBVhGVgf1qr5x62bHW0PIdg==} + '@types/ember__debug@4.0.8': resolution: {integrity: sha512-9wF7STmDHDsUxSjyCq2lpMq/03QOPkBQMGJnV8yOBnVZxB6f+FJH/kxaCprdMkUe7iwAPNEC2zrFFx1tzH75Kg==} + '@types/ember__engine@3.16.9': + resolution: {integrity: sha512-Dab779R+nuGoprrOV1qzomUSEGM9eqXxFB1q5ArK00IDf+B6qkws2rJg6pB7PBSdiBhnhAq8tAJ/WNy4eC/jwQ==} + '@types/ember__engine@4.0.11': resolution: {integrity: sha512-ryR4Q1Xm3kQ3Ap58w10CxV3+vb3hs1cJqi7UZ5IlSdLRql7AbpS6hIjxSQ3EQ4zadeeJ6/D8JJcSwqR7eX3PFA==} + '@types/ember__error@3.16.6': + resolution: {integrity: sha512-I40H4hr+Ma/CNF2xCFvSMMb/qn72p+SlM3GR/97EW+3LSy9iLu44e6eZZhAO6BgqmqEArqMNI6wSjps3FfDKiA==} + '@types/ember__error@4.0.6': resolution: {integrity: sha512-vYrLaGGjHkN14K89Vm8yqB2mkpJQefE5w7QJkkgYyV+smzns1vKlPbvuFevRtoeYNn4u4yY0JyF7HceNkm3H0Q==} + '@types/ember__object@3.12.13': + resolution: {integrity: sha512-xK8KeVG3lsQGIhZGcOW+MpNaDYRygICr4gkZ6RkWqWb98pGmajsvGJcMia1WFa/K4eyEG6dFsDVaKED1No8wow==} + '@types/ember__object@4.0.12': resolution: {integrity: sha512-ZEpikPjZ02m1QCBiTPTayMJwVwF4UBlHlGDoScRB3IP/SUS1O5mmn1/CnSQDxzzF3ctfmhNuTZzVBBc1Y8OC1A==} '@types/ember__owner@4.0.9': resolution: {integrity: sha512-iyBda4aUIjBmeiKTKmPow/EJO7xWn8m85CnQTOCqQzTWJyJpgfObbXSHahOHXOfMm279Oa5NlbmS/EontB+XiQ==} + '@types/ember__polyfills@3.12.7': + resolution: {integrity: sha512-aSNyzBkQU3CQKYVed0AIGivS4BUxp1+EDZTlJCguDgtMDAgAJSIHibLnz37iXUET5COCzyyFfgi1WsQpsupGcA==} + '@types/ember__polyfills@4.0.6': resolution: {integrity: sha512-hbds3Qv+oVm/QKIaY1E6atvrCoJTH/MPSl4swOhX6P0RiMB2fOfFCrFSD1mP1KrU1LqpHJ2Rzs7XLe53SWVzgw==} + '@types/ember__routing@3.16.23': + resolution: {integrity: sha512-hztI4bZcPQjU3E8Tt7gWEOEQhNmT6HLmGn2YzzlQ3gFkGYdcSnj+h+Gh3pVI+AB/sB9i9jD088pLr48weKzd3g==} + '@types/ember__routing@4.0.22': resolution: {integrity: sha512-qLk9Vd2GMxdlGmX9xbzg4Farths+AQGzYDH901Wo2Nsre+Cwv1Tk1rbCiay2V3ICYZYufytdWT6V++DISF3nvw==} + '@types/ember__runloop@3.16.10': + resolution: {integrity: sha512-abhXy3pikiQsQJKZhJXVW6BbIOM0E2+GlEJ63ZA/yKJLmcY9vuwCWLieaXXKyTyBolSOPLyofLVRJ/L/C2rp0A==} + '@types/ember__runloop@4.0.10': resolution: {integrity: sha512-9MZfOJBXuUP7RqLjovmzy1yY2xKTxVpqHMapqy6QJ8mjAekRmq9IJ+ni2zJ5CWftyb3Lqu3Eks05CL7fnbhcJA==} + '@types/ember__service@3.16.9': + resolution: {integrity: sha512-U3jhGybrSSqkZDpeF6v5y74GHMlPcfuhwhwXVR8M3YV8A8hsDkT4tiV4Ul7pHwh/HoYdw8giF9p8J0RXpmhPsg==} + '@types/ember__service@4.0.9': resolution: {integrity: sha512-DrepocL/4hH5YxbDWbxEKMDcAchBPSGGa4g+LEINW1Po81RmSdKw5GZV4UO0mvRWgkdu3EbWUxbTzB4gmbDSeQ==} + '@types/ember__string@2.0.7': + resolution: {integrity: sha512-N8ersNizusKO6mDylmxgS3IQQawyAJQQdb7/W/ZDBIIx9G/yxoTvgMOSjbR6V+wQYngnG3NeSh+DdK4RZj/cJw==} + '@types/ember__string@3.0.15': resolution: {integrity: sha512-SxoaweAJUJKSIt82clIwpi/Fm0IfeisozLnXthnBp/hE2JyVcnOb1wMIbw0CCfzercmyWG1njV45VBqy8SrLDQ==} + '@types/ember__template@3.16.7': + resolution: {integrity: sha512-Mj3BzTzXKrS2cX9rkUpsqnyCNnVUUJh6juhuJW9KleJNtrUdfGPPGkOonn+oXFKcWfxiRB15jx8Ypi668vDDQw==} + '@types/ember__template@4.0.7': resolution: {integrity: sha512-jv4hhG+8d1zdma+jhbCdJ3Ak7C22YNatGyWWvB3N9zbXq358AAPXaJoyNY8QTDbD/RIR9P6yoRk4u9vLbF6zfA==} @@ -1635,9 +1683,15 @@ packages: resolution: {integrity: sha512-GTucagS2Yqla9EkCe478DvF0n3SYaiJMf4v27SKw0DNm3JRoDGxfHp5guIKfoyeLH8yASl3RtsBwD5jNwM4qmw==} deprecated: This is a stub types definition. @ember/test-helpers provides its own type definitions, so you do not need this installed. + '@types/ember__test@3.16.7': + resolution: {integrity: sha512-xB74tYOxokbMnSP6RFlFscQ9M1o9vi0aI1SClwyviz9c6u7qVhJhJWzctad1aAY3gRwFh25CbKpXEw5KkOk88w==} + '@types/ember__test@4.0.6': resolution: {integrity: sha512-Nswm/epfTepXknT8scZvWyyop1aqJcZcyzY4THGHFcXvYQQfA9rgmgrx6vo9vCJmYHh3jm0TTAIAIfoCvGaX5g==} + '@types/ember__utils@3.16.8': + resolution: {integrity: sha512-r5vtLdK352rgqA0nOFqvNETIwPnLOnCRlfdhEifRzltetyN9YAlAwFMzO3+ECuDBQWuBlWkt0xV1b8EWbN6XCg==} + '@types/ember__utils@4.0.7': resolution: {integrity: sha512-qQPBeWRyIPigKnZ68POlkqI5e6XA78Q4G3xHo687wQTcEtfoL/iZyPC4hn70mdijcZq8Hjch2Y3E5yhsEMzK+g==} @@ -1681,6 +1735,9 @@ packages: '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} + '@types/jquery@3.5.32': + resolution: {integrity: sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1730,6 +1787,9 @@ packages: '@types/serve-static@1.15.8': resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + '@types/sizzle@2.3.9': + resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==} + '@types/supports-color@8.1.3': resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} @@ -3514,6 +3574,10 @@ packages: qunit: optional: true + ember-app-scheduler@7.0.1: + resolution: {integrity: sha512-7140A/4OJuYBlncfxmreZHX5S7FxO/4KX5NswowIrvGZpaLuoeULjBHgiKBWC1OUzsdHST4jwaDufniHEROajg==} + engines: {node: 12.* || 14.* || >= 16} + ember-arg-types@1.1.0: resolution: {integrity: sha512-hWpUz0eiNkWzi3FgHW5QU6LyCDyUlTWwuIROHluEKZoa9m6LJVXbb/EVFgIG3FkAib6a5Ie00WvkXEZFXxh3+A==} engines: {node: 14.* || >= 16} @@ -3852,6 +3916,10 @@ packages: resolution: {integrity: sha512-89oVHVJwmLDvGvAUWgS87KpBoRhy3aZ6U0Ql6HOmU4TrPkyaa8pM0W81wj9cIwjYprcQtN9EwzZMHnq46+oUyw==} engines: {node: 8.* || 10.* || >= 12} + ember-router-scroll@4.1.2: + resolution: {integrity: sha512-5AGRmbfhSx7kOu2U8caQkG8qOxlLnvJIoQgKRE9mc1isuYPdime6Qn061NSnnQukMMsSPlV8GAImiEk05BmfGA==} + engines: {node: 12.* || 14.* || >= 16} + ember-showdown-shiki@1.2.1: resolution: {integrity: sha512-h3WYvEVjK7R86SosU6Y9lA7kvlVff4Y/7KS/D79lJ828NReLW1CnQAcxRSoGVvu+S6A8uONzImzJhyDXwuZDZA==} peerDependencies: @@ -10084,6 +10152,26 @@ snapshots: - '@babel/core' - supports-color + '@types/ember@3.16.14': + dependencies: + '@types/ember__application': 3.16.10 + '@types/ember__array': 3.16.11 + '@types/ember__component': 3.16.14 + '@types/ember__controller': 3.16.14 + '@types/ember__debug': 3.16.12 + '@types/ember__engine': 3.16.9 + '@types/ember__error': 3.16.6 + '@types/ember__object': 3.12.13 + '@types/ember__polyfills': 3.12.7 + '@types/ember__routing': 3.16.23 + '@types/ember__runloop': 3.16.10 + '@types/ember__service': 3.16.9 + '@types/ember__string': 2.0.7 + '@types/ember__template': 3.16.7 + '@types/ember__test': 3.16.7 + '@types/ember__utils': 3.16.8 + '@types/rsvp': 4.0.9 + '@types/ember@4.0.11(@babel/core@7.28.3)': dependencies: '@types/ember__application': 4.0.11(@babel/core@7.28.3) @@ -10107,6 +10195,12 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__application@3.16.10': + dependencies: + '@types/ember__engine': 3.16.9 + '@types/ember__object': 3.12.13 + '@types/ember__routing': 3.16.23 + '@types/ember__application@4.0.11(@babel/core@7.28.3)': dependencies: '@glimmer/component': 1.1.2(@babel/core@7.28.3) @@ -10119,6 +10213,10 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__array@3.16.11': + dependencies: + '@types/ember__object': 3.12.13 + '@types/ember__array@4.0.10(@babel/core@7.28.3)': dependencies: '@types/ember': 4.0.11(@babel/core@7.28.3) @@ -10127,6 +10225,11 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__component@3.16.14': + dependencies: + '@types/ember__object': 3.12.13 + '@types/jquery': 3.5.32 + '@types/ember__component@4.0.22(@babel/core@7.28.3)': dependencies: '@types/ember': 4.0.11(@babel/core@7.28.3) @@ -10135,6 +10238,10 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__controller@3.16.14': + dependencies: + '@types/ember__object': 3.12.13 + '@types/ember__controller@4.0.12(@babel/core@7.28.3)': dependencies: '@types/ember__object': 4.0.12(@babel/core@7.28.3) @@ -10142,6 +10249,11 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__debug@3.16.12': + dependencies: + '@types/ember__engine': 3.16.9 + '@types/ember__object': 3.12.13 + '@types/ember__debug@4.0.8(@babel/core@7.28.3)': dependencies: '@types/ember__object': 4.0.12(@babel/core@7.28.3) @@ -10150,6 +10262,10 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__engine@3.16.9': + dependencies: + '@types/ember__object': 3.12.13 + '@types/ember__engine@4.0.11(@babel/core@7.28.3)': dependencies: '@types/ember__object': 4.0.12(@babel/core@7.28.3) @@ -10158,8 +10274,14 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__error@3.16.6': {} + '@types/ember__error@4.0.6': {} + '@types/ember__object@3.12.13': + dependencies: + '@types/rsvp': 4.0.9 + '@types/ember__object@4.0.12(@babel/core@7.28.3)': dependencies: '@types/ember': 4.0.11(@babel/core@7.28.3) @@ -10170,8 +10292,17 @@ snapshots: '@types/ember__owner@4.0.9': {} + '@types/ember__polyfills@3.12.7': {} + '@types/ember__polyfills@4.0.6': {} + '@types/ember__routing@3.16.23': + dependencies: + '@types/ember__component': 3.16.14 + '@types/ember__controller': 3.16.14 + '@types/ember__object': 3.12.13 + '@types/ember__service': 3.16.9 + '@types/ember__routing@4.0.22(@babel/core@7.28.3)': dependencies: '@types/ember': 4.0.11(@babel/core@7.28.3) @@ -10182,6 +10313,8 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__runloop@3.16.10': {} + '@types/ember__runloop@4.0.10(@babel/core@7.28.3)': dependencies: '@types/ember': 4.0.11(@babel/core@7.28.3) @@ -10189,6 +10322,10 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__service@3.16.9': + dependencies: + '@types/ember__object': 3.12.13 + '@types/ember__service@4.0.9(@babel/core@7.28.3)': dependencies: '@types/ember__object': 4.0.12(@babel/core@7.28.3) @@ -10196,8 +10333,14 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__string@2.0.7': + dependencies: + '@types/ember__template': 3.16.7 + '@types/ember__string@3.0.15': {} + '@types/ember__template@3.16.7': {} + '@types/ember__template@4.0.7': {} '@types/ember__test-helpers@2.9.3(@babel/core@7.28.3)(@glint/environment-ember-loose@0.9.7(@glimmer/component@1.1.2(@babel/core@7.28.3))(ember-cli-htmlbars@6.3.0)(ember-modifier@4.2.2(@babel/core@7.28.3)))(ember-source@4.12.4(@babel/core@7.28.3)(@glimmer/component@1.1.2(@babel/core@7.28.3))(webpack@5.101.2))': @@ -10210,6 +10353,10 @@ snapshots: - ember-source - supports-color + '@types/ember__test@3.16.7': + dependencies: + '@types/ember__application': 3.16.10 + '@types/ember__test@4.0.6(@babel/core@7.28.3)': dependencies: '@types/ember__application': 4.0.11(@babel/core@7.28.3) @@ -10217,6 +10364,8 @@ snapshots: - '@babel/core' - supports-color + '@types/ember__utils@3.16.8': {} + '@types/ember__utils@4.0.7(@babel/core@7.28.3)': dependencies: '@types/ember': 4.0.11(@babel/core@7.28.3) @@ -10282,6 +10431,10 @@ snapshots: '@types/http-errors@2.0.5': {} + '@types/jquery@3.5.32': + dependencies: + '@types/sizzle': 2.3.9 + '@types/json-schema@7.0.15': {} '@types/mdast@4.0.4': @@ -10330,6 +10483,8 @@ snapshots: '@types/node': 24.3.0 '@types/send': 0.17.5 + '@types/sizzle@2.3.9': {} + '@types/supports-color@8.1.3': {} '@types/symlink-or-copy@1.2.2': {} @@ -12581,6 +12736,19 @@ snapshots: - supports-color - webpack + ember-app-scheduler@7.0.1(@babel/core@7.28.3): + dependencies: + '@ember/test-waiters': 3.1.0 + '@types/ember': 3.16.14 + '@types/rsvp': 4.0.9 + ember-cli-babel: 7.26.11 + ember-cli-typescript: 4.2.1 + ember-compatibility-helpers: 1.2.7(@babel/core@7.28.3) + ember-destroyable-polyfill: 2.0.3(@babel/core@7.28.3) + transitivePeerDependencies: + - '@babel/core' + - supports-color + ember-arg-types@1.1.0(webpack@5.101.2): dependencies: '@embroider/macros': 1.18.1 @@ -13535,6 +13703,15 @@ snapshots: transitivePeerDependencies: - supports-color + ember-router-scroll@4.1.2(@babel/core@7.28.3): + dependencies: + ember-app-scheduler: 7.0.1(@babel/core@7.28.3) + ember-cli-babel: 7.26.11 + ember-compatibility-helpers: 1.2.7(@babel/core@7.28.3) + transitivePeerDependencies: + - '@babel/core' + - supports-color + ember-showdown-shiki@1.2.1(@babel/core@7.28.3)(showdown@2.1.0): dependencies: '@embroider/addon-shim': 1.10.0 diff --git a/public/_redirects b/public/_redirects index 713119b0a..ededb2efc 100644 --- a/public/_redirects +++ b/public/_redirects @@ -1,12 +1,46 @@ +# Old-style ?anchor=... URLs to new-style #:... URLs for classes /: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! +# Old-style classes/Application/methods/foo to new-style classes/Application#foo +/:project/:version/classes/:class/methods/:method /:project/:version/classes/:class#:method 301! +/:project/:version/classes/:class/properties/:property /:project/:version/classes/:class#:property 301! +/:project/:version/classes/:class/events/:event /:project/:version/classes/:class#:event 301! + +# Index page redirects for classes +/:project/:version/classes/:class/methods/ /:project/:version/classes/:class 301! +/:project/:version/classes/:class/properties/ /:project/:version/classes/:class 301! +/:project/:version/classes/:class/events/ /:project/:version/classes/:class 301! + +# Old-style ?anchor=... URLs to new-style #:... URLs for namespaces /: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! +# Old-style namespaces/Ember.FEATURES/methods/foo to new-style namespaces/Ember.FEATURES#foo +/:project/:version/namespaces/:namespace/methods/:method /:project/:version/namespaces/:namespace#:method 301! +/:project/:version/namespaces/:namespace/properties/:property /:project/:version/namespaces/:namespace#:property 301! +/:project/:version/namespaces/:namespace/events/:event /:project/:version/namespaces/:namespace#:event 301! + +# Index page redirects for namespaces +/:project/:version/namespaces/:namespace/methods/ /:project/:version/namespaces/:namespace 301! +/:project/:version/namespaces/:namespace/properties/ /:project/:version/namespaces/:namespace 301! +/:project/:version/namespaces/:namespace/events/ /:project/:version/namespaces/:namespace 301! + +# Old-style ?anchor=... URLs to new-style #:... URLs for modules (but not sure these were ever used) /: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! + +# Old-style modules/Ember.String/methods/foo to new-style modules/Ember.String#foo +/:project/:version/modules/:module/methods/:method /:project/:version/modules/:module#:method 301! +/:project/:version/modules/:module/properties/:property /:project/:version/modules/:module#:property 301! +/:project/:version/modules/:module/events/:event /:project/:version/modules/:module#:event 301! + +# Index page redirects for modules +/:project/:version/modules/:module/methods/ /:project/:version/modules/:module 301! +/:project/:version/modules/:module/properties/ /:project/:version/modules/:module 301! +/:project/:version/modules/:module/events/ /:project/:version/modules/:module 301! + /* /index.html 200 diff --git a/tests/acceptance/function-test.js b/tests/acceptance/function-test.js index df218328a..fcb1e10fe 100644 --- a/tests/acceptance/function-test.js +++ b/tests/acceptance/function-test.js @@ -21,10 +21,8 @@ module('Acceptance | Function', function (hooks) { await visit('ember/3.28/functions/@ember%2Fapplication/getOwner'); assert.dom('.method').exists({ count: 1 }, 'Single function per page'); - assert.equal( - find('.method .method-name').innerText, - 'getOwner', - 'Correct function is shown' - ); + assert + .dom('.method .method-name') + .hasText('getOwner', 'Correct function is shown'); }); }); diff --git a/tests/integration/components/class-field-description-test.js b/tests/integration/components/class-field-description-test.js index 42f1a501d..94ddd68ab 100644 --- a/tests/integration/components/class-field-description-test.js +++ b/tests/integration/components/class-field-description-test.js @@ -28,7 +28,7 @@ module('Integration | Component | class field description', function (hooks) { assert.dom('.method-name').hasText('concat'); assert.dom(findAll('.access')[0]).hasText('public'); assert.dom(findAll('.access')[1]).hasText('deprecated'); - assert.dom(findAll('.args')[0]).hasText('(param1, param2, param3)'); + assert.dom(findAll('.args')[0]).hasText('param1, param2, param3'); }); test('parameter props are displayed', async function (assert) {