Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
18 changes: 2 additions & 16 deletions app/controllers/project-version.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
import Ember from 'ember';
import _ from 'lodash';
import semverCompare from 'npm:semver-compare';
import getMinorVersion from "../utils/get-minor-version";
import FilterParams from '../mixins/filter-params';

const { Controller, computed, A, inject: {service} } = Ember;
Expand Down Expand Up @@ -53,6 +50,8 @@ export default Controller.extend(FilterParams, {
return A(sorted).toArray().map(id => id.split('-').pop());
},

projectVersions: computed.alias('model.project.sortedProjectVersions'),

shownClassesIDs: computed('showPrivateClasses', 'classesIDs', 'publicClassesIDs', function() {
return this.get('showPrivateClasses') ? this.get('classesIDs') : this.get('publicClassesIDs');
}),
Expand All @@ -65,19 +64,6 @@ export default Controller.extend(FilterParams, {
return this.get('showPrivateClasses') ? this.get('namespaceIDs') : this.get('publicNamespaceIDs');
}),

projectVersions: computed('metaStore.availableProjectVersions', 'model.project.id', function() {
const projectVersions = this.get('metaStore.availableProjectVersions')[this.get('model.project.id')];
let versions = projectVersions.sort((a, b) => semverCompare(b, a));

versions = versions.map((version) => {
const minorVersion = getMinorVersion(version);
return { id: version, minorVersion };
});
let groupedVersions = _.groupBy(versions, version => version.minorVersion);

return _.values(groupedVersions).map(groupedVersion => groupedVersion[0]);
}),

selectedProjectVersion:computed('projectVersions.[]', 'model.version', function() {
return this.get('projectVersions').filter(pV => pV.id === this.get('model.version'))[0];
}),
Expand Down
1 change: 0 additions & 1 deletion app/controllers/project-version/class.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const { Controller } = Ember;

export default Controller.extend(ParentNameMixin, {
filterData: Ember.inject.service(),

actions: {
updateFilter(filter) {
this.toggleProperty(`filterData.${filter}`);
Expand Down
12 changes: 12 additions & 0 deletions app/helpers/url-param.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import Ember from 'ember';

const { inject } = Ember;

export default Ember.Helper.extend({

router: inject.service(),

compute([modelName, paramName]) {
return this.get(`router.router.state.params.${modelName}.${paramName}`);
}
});
36 changes: 35 additions & 1 deletion app/models/project.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,43 @@
import DS from 'ember-data';
import Ember from 'ember';
import semverCompare from 'npm:semver-compare';
import getMinorVersion from "../utils/get-minor-version";
import _ from 'lodash';
import config from 'ember-api-docs/config/environment';


const {Model, attr, hasMany} = DS;
const {computed,A} = Ember;

export default Model.extend({
name: attr(),
githubUrl: attr(),
projectVersions: hasMany('project-version', {async: true})
projectVersions: hasMany('project-version', {async: true}),

latestProjectVersion: computed.alias('sortedProjectVersions.firstObject'),
sortedProjectVersions: computed(function() {
let projectVersions = this.hasMany('projectVersions').ids().map(id => {
return id.replace(this.id, '').split('-')[1];
});
let sortedVersions = projectVersions.sort((a, b) => semverCompare(b, a));
sortedVersions = sortedVersions.map((version) => {
const minorVersion = getMinorVersion(version);
return { id: version, minorVersion };
});

let groupedVersions = _.groupBy(sortedVersions, version => version.minorVersion);

return A(_.values(groupedVersions).map(groupedVersion => groupedVersion[0]));
}),

getProjectVersion(version) {
if (version === 'release') {
return this.get('latestProjectVersion.id');
}
if (version === 'lts') {
return config.ltsVersion;
}
return version;
}

});
8 changes: 5 additions & 3 deletions app/routes/project-version.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ export default Ember.Route.extend({
},

model(params) {
const id = `${params.project}-${params.project_version}`;
this.get('projectService').setVersion(params.project_version);
return this.store.findRecord('project', params.project).then(() => {

return this.store.findRecord('project', params.project).then(project => {
this.get('projectService').setVersion(params.project_version);
const version = project.getProjectVersion(params.project_version);
const id = `${params.project}-${version}`;
return this.store.findRecord('project-version', id, { includes: 'project' });
});
},
Expand Down
3 changes: 2 additions & 1 deletion app/routes/project-version/class.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ export default Ember.Route.extend({
},

getModel(typeName, params, transition) {
const projectModel = this.modelFor('project-version').get('project.content');
const projectID = transition.params['project-version'].project;
const version = transition.params['project-version'].project_version;
const version = projectModel.getProjectVersion(transition.params['project-version'].project_version);
const klass = params[typeName];
return this.find(typeName, `${projectID}-${version}-${klass}`);
},
Expand Down
3 changes: 2 additions & 1 deletion app/routes/project-version/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ export default ClassRoute.extend({
},

getModel(typeName, params, transition) {
const projectModel = this.modelFor('project-version').get('project.content');
const projectID = transition.params['project-version'].project;
const version = transition.params['project-version'].project_version;
const version = projectModel.getProjectVersion(transition.params['project-version'].project_version);
let klass = params[typeName];
if (!~klass.indexOf(projectID)) {
klass = `${projectID}-${klass}`;
Expand Down
3 changes: 2 additions & 1 deletion app/templates/class-index.hbs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

{{#api-index-filter model=model filterData=filterData as |filteredModel|}}
{{#api-index itemData=filteredModel classNames="api__index__content" as |sectionData|}}
{{#each sectionData.sections as |section|}}
Expand All @@ -8,7 +9,7 @@
<li>
{{#link-to (concat parentName section.routeSuffix)
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
item.name
(query-params anchor=item.name)}}
Expand Down
6 changes: 3 additions & 3 deletions app/templates/components/table-of-contents.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,23 @@
<a {{action 'toggle' 'modules'}} href="#">Modules</a>
<ol class="toc-level-1 modules" style="display: block">
{{#each moduleIDs as |moduleID|}}
<li class="toc-level-1">{{#link-to 'project-version.module' version moduleID}}{{moduleID}}{{/link-to}}</li>
<li class="toc-level-1">{{#link-to 'project-version.module' (url-param "project-version" "project_version") moduleID}}{{moduleID}}{{/link-to}}</li>
{{/each}}
</ol>
</li>
<li class="toc-level-0">
<a {{action 'toggle' 'namespaces'}} href="#">Namespaces</a>
<ol class="toc-level-1 namespaces" style="display: block">
{{#each namespaceIDs as |namespaceID|}}
<li class="toc-level-1">{{#link-to 'project-version.namespace' version namespaceID}}{{namespaceID}}{{/link-to}}</li>
<li class="toc-level-1">{{#link-to 'project-version.namespace' (url-param "project-version" "project_version") namespaceID}}{{namespaceID}}{{/link-to}}</li>
{{/each}}
</ol>
</li>
<li class="toc-level-0">
<a {{action 'toggle' 'classes'}} href="#">Classes</a>
<ol class="toc-level-1 classes" style="display: block">
{{#each classesIDs as |classID|}}
<li class="toc-level-1">{{#link-to 'project-version.class' version classID}}{{classID}}{{/link-to}}</li>
<li class="toc-level-1">{{#link-to 'project-version.class' (url-param "project-version" "project_version") classID}}{{classID}}{{/link-to}}</li>
{{/each}}
</ol>
</li>
Expand Down
16 changes: 8 additions & 8 deletions app/templates/project-version/class.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
{{#if model.extends}}
<div class="attribute">
<span class="attribute-label">Extends:</span>
<span class="attribute-value">{{#link-to 'project-version.class' model.projectVersion.version model.extends}}{{model.extends}}{{/link-to}}</span>
<span class="attribute-value">{{#link-to 'project-version.class' (url-param "project-version" "project_version") model.extends}}{{model.extends}}{{/link-to}}</span>
</div>
{{/if}}
{{#if model.uses}}
Expand All @@ -17,7 +17,7 @@
<span class="attribute-value">
{{#each model.uses as |parentClass idx|}}
{{#unless (eq idx 0)}}<span class="comma">,</span>{{/unless}}
{{#link-to 'project-version.class' model.projectVersion.version parentClass}}{{parentClass}}{{/link-to}}
{{#link-to 'project-version.class' (url-param "project-version" "project_version") parentClass}}{{parentClass}}{{/link-to}}
{{/each}}
</span>
</div>
Expand All @@ -26,14 +26,14 @@
<div class="attribute">
<span class="attribute-label">Defined in:</span>
<span class="attribute-value">
<a href="{{github-link model.project.id model.projectVersion.version model.file model.line}}" target="_blank" rel="noopener">{{model.file}}:{{model.line}}</a>
<a href="{{github-link model.project.id (url-param "project-version" "project_version") model.file model.line}}" target="_blank" rel="noopener">{{model.file}}:{{model.line}}</a>
</span>
</div>
{{/if}}
{{#if model.module}}
<div class="attribute">
<span class="attribute-label">Module:</span>
<span class="attribute-value">{{#link-to 'project-version.module' model.projectVersion.version model.module}}{{model.module}}{{/link-to}}</span>
<span class="attribute-value">{{#link-to 'project-version.module' (url-param "project-version" "project_version") model.module}}{{model.module}}{{/link-to}}</span>
</div>
{{/if}}
</div>
Expand All @@ -45,7 +45,7 @@
<ul class="tabbed-layout__menu">
{{#link-to (concat parentName ".index")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand All @@ -58,7 +58,7 @@
{{#if model.methods}}
{{#link-to (concat parentName ".methods")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand All @@ -72,7 +72,7 @@
{{#if model.properties}}
{{#link-to (concat parentName ".properties")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand All @@ -86,7 +86,7 @@
{{#if model.events}}
{{#link-to (concat parentName ".events")
model.project.id
model.projectVersion.version
(url-param "project-version" "project_version")
model.name
(query-params anchor="")
tagName="li"
Expand Down
2 changes: 1 addition & 1 deletion app/templates/project-version/module.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{{#if model.parent}}
<div class="attribute">
<span class="attribute-label">Parent:</span>
<span class="attribute-value">{{#link-to 'project-version.module' model.projectVersion.version model.parent}}{{model.parent}}{{/link-to}}</span>
<span class="attribute-value">{{#link-to 'project-version.module' (url-param "project-version" "project_version") model.parent}}{{model.parent}}{{/link-to}}</span>
</div>
{{/if}}
</p>
Expand Down
1 change: 1 addition & 0 deletions config/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

module.exports = function(environment) {
var ENV = {
ltsVersion: process.env.LTS_VERSION || '2.8.3',
modulePrefix: 'ember-api-docs',
environment: environment,
rootURL: '/',
Expand Down
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,6 @@
"ember-cli-qunit": "^3.1.2",
"ember-cli-release": "^1.0.0-beta.2",
"ember-cli-sass": "^6.1.2",
"ember-service-worker": "0.6.2",
"ember-service-worker-asset-cache": "0.6.0",
"ember-service-worker-cache-fallback": "0.6.0",
"ember-service-worker-index": "0.6.1",
"ember-cli-shims": "^1.0.2",
"ember-cli-template-lint": "^0.5.2",
"ember-cli-test-loader": "^1.1.1",
Expand All @@ -78,6 +74,11 @@
"ember-power-select": "^1.6.1",
"ember-resolver": "^3.0.0",
"ember-route-action-helper": "^2.0.2",
"ember-router-service": "^1.0.2",
"ember-service-worker": "0.6.2",
"ember-service-worker-asset-cache": "0.6.0",
"ember-service-worker-cache-fallback": "0.6.0",
"ember-service-worker-index": "0.6.1",
"ember-source": "~2.12.0",
"ember-tether": "0.4.1",
"ember-truth-helpers": "^1.3.0",
Expand Down
78 changes: 78 additions & 0 deletions tests/acceptance/release-lts-project-versions-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { test } from 'qunit';
import moduleForAcceptance from 'ember-api-docs/tests/helpers/module-for-acceptance';
import { click } from 'ember-native-dom-helpers';
import Ember from 'ember';

const {$} = Ember;

moduleForAcceptance('Acceptance | release lts project versions');

test('release url param', function(assert) {
visit('/ember/release/namespaces/Ember');

let checkLinks = (label, selector, versionString) => {
return $('.attributes a').toArray().forEach(el => {
let href = el.attributes.href.value;
if (href[0] === '/') {

assert.ok(href.indexOf(versionString) > -1, `${label} link contains ${versionString} - ${href}`);
}
});
};

let checkSidebarLinks = versionString => {
return checkLinks('side',
'.toc-level-1.modules li:first-child a, .toc-level-1.namespaces li:first-child a, .toc-level-1.classes li:first-child a',
versionString);
};

let checkAttributeLinks = versionString => {
return checkLinks('attributes', '.attributes a', versionString);
};

let checkIndexListLinks = versionString => {
return checkLinks('index-list', '.api-index-filter a', versionString);
};

let checkActiveClass = versionString => {
return assert.ok($('.tabbed-layout__menu li:first-child').hasClass('tabbed-layout__menu__item_selected'), `active class works with ${versionString}`)
};

andThen(function() {
assert.equal(currentURL(), '/ember/release/namespaces/Ember');

checkSidebarLinks('release');
checkActiveClass('release');
checkIndexListLinks('release');
checkAttributeLinks('release');

return click('.tabbed-layout__menu__item:nth-child(2)'); //clicking methods
});

andThen(() => {
assert.equal(currentURL(), '/ember/release/namespaces/Ember/methods?anchor=');
return visit('/ember-data/release/namespaces/DS');
});

andThen(() => {
assert.equal(currentURL(), '/ember-data/release/namespaces/DS');

checkSidebarLinks('release');
checkActiveClass('release');
checkIndexListLinks('release');
checkAttributeLinks('release');

return visit('/ember/lts/namespaces/Ember');
});

return andThen(() => {
assert.equal(currentURL(), '/ember/lts/namespaces/Ember');

checkSidebarLinks('lts');
checkActiveClass('lts');
checkIndexListLinks('lts');
checkAttributeLinks('lts');

return this;
});
});
Loading