diff --git a/app/controllers/project-version.js b/app/controllers/project-version.js index 32662483f..8e5492fca 100644 --- a/app/controllers/project-version.js +++ b/app/controllers/project-version.js @@ -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; @@ -42,7 +39,7 @@ export default Controller.extend(FilterParams, { let relations = this.getRelations(moduleType); return relations.map(id => id.substring(versionId.length + 1)) }, - + getRelations(relationship) { return this.get('model').hasMany(relationship).ids().sort(); }, @@ -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'); }), @@ -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]; }), diff --git a/app/controllers/project-version/classes/class.js b/app/controllers/project-version/classes/class.js index fc233c9aa..6fa82eabb 100644 --- a/app/controllers/project-version/classes/class.js +++ b/app/controllers/project-version/classes/class.js @@ -5,7 +5,6 @@ const { Controller } = Ember; export default Controller.extend(ParentNameMixin, { filterData: Ember.inject.service(), - actions: { updateFilter(filter) { this.toggleProperty(`filterData.${filter}`); diff --git a/app/helpers/url-param.js b/app/helpers/url-param.js new file mode 100644 index 000000000..0cd588dac --- /dev/null +++ b/app/helpers/url-param.js @@ -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}`); + } +}); diff --git a/app/models/project.js b/app/models/project.js index e55505d45..b1be24584 100644 --- a/app/models/project.js +++ b/app/models/project.js @@ -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; + } + }); diff --git a/app/routes/project-version.js b/app/routes/project-version.js index f420dc6f0..cadd8f294 100644 --- a/app/routes/project-version.js +++ b/app/routes/project-version.js @@ -9,9 +9,10 @@ export default Ember.Route.extend({ }, async model(params) { - const id = `${params.project}-${params.project_version}`; this.get('projectService').setVersion(params.project_version); - await this.store.findRecord('project', params.project); + const project = await this.store.findRecord('project', params.project); + const version = project.getProjectVersion(params.project_version); + const id = `${params.project}-${version}`; return this.store.findRecord('project-version', id, { includes: 'project' }); }, diff --git a/app/routes/project-version/classes/class.js b/app/routes/project-version/classes/class.js index 729349774..74488a832 100644 --- a/app/routes/project-version/classes/class.js +++ b/app/routes/project-version/classes/class.js @@ -16,8 +16,9 @@ export default Ember.Route.extend(ScrollTracker, { }, 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}`); }, diff --git a/app/routes/project-version/modules/module.js b/app/routes/project-version/modules/module.js index 1025176db..724958bad 100644 --- a/app/routes/project-version/modules/module.js +++ b/app/routes/project-version/modules/module.js @@ -8,8 +8,9 @@ export default ClassRoute.extend(ScrollTracker, { }, 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}`; diff --git a/app/templates/class-index.hbs b/app/templates/class-index.hbs index 100b9cdbc..c0b2ffb46 100644 --- a/app/templates/class-index.hbs +++ b/app/templates/class-index.hbs @@ -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|}} @@ -8,7 +9,7 @@
  • {{#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)}} diff --git a/app/templates/components/table-of-contents.hbs b/app/templates/components/table-of-contents.hbs index 26f70a439..8908efa5a 100644 --- a/app/templates/components/table-of-contents.hbs +++ b/app/templates/components/table-of-contents.hbs @@ -4,7 +4,7 @@
      {{#each moduleIDs as |moduleID|}}
    1. - {{#link-to 'project-version.modules.module' version moduleID}}{{moduleID}}{{/link-to}} + {{#link-to 'project-version.modules.module' (url-param "project-version" "project_version") moduleID}}{{moduleID}}{{/link-to}}
    2. {{/each}}
    @@ -14,7 +14,7 @@
      {{#each namespaceIDs as |namespaceID|}}
    1. - {{#link-to 'project-version.namespaces.namespace' version namespaceID}}{{namespaceID}}{{/link-to}} + {{#link-to 'project-version.namespaces.namespace' (url-param "project-version" "project_version") namespaceID}}{{namespaceID}}{{/link-to}}
    2. {{/each}}
    @@ -24,7 +24,7 @@
      {{#each classesIDs as |classID|}}
    1. - {{#link-to 'project-version.classes.class' version classID}}{{classID}}{{/link-to}} + {{#link-to 'project-version.classes.class' (url-param "project-version" "project_version") classID}}{{classID}}{{/link-to}}
    2. {{/each}}
    diff --git a/app/templates/project-version/classes/class.hbs b/app/templates/project-version/classes/class.hbs index d3cad66fe..a7ffbab10 100644 --- a/app/templates/project-version/classes/class.hbs +++ b/app/templates/project-version/classes/class.hbs @@ -8,7 +8,7 @@ {{#if model.extends}}
    Extends: - {{#link-to 'project-version.classes.class' model.projectVersion.version model.extends}}{{model.extends}}{{/link-to}} + {{#link-to 'project-version.classes.class' (url-param "project-version" "project_version") model.extends}}{{model.extends}}{{/link-to}}
    {{/if}} {{#if model.uses}} @@ -17,7 +17,7 @@ {{#each model.uses as |parentClass idx|}} {{#unless (eq idx 0)}},{{/unless}} - {{#link-to 'project-version.classes.class' model.projectVersion.version parentClass}}{{parentClass}}{{/link-to}} + {{#link-to 'project-version.classes.class' (url-param "project-version" "project_version") parentClass}}{{parentClass}}{{/link-to}} {{/each}} @@ -26,14 +26,14 @@
    Defined in: - {{model.file}}:{{model.line}} + {{model.file}}:{{model.line}}
    {{/if}} {{#if model.module}}
    Module: - {{#link-to 'project-version.modules.module' model.projectVersion.version model.module}}{{model.module}}{{/link-to}} + {{#link-to 'project-version.modules.module' (url-param "project-version" "project_version") model.module}}{{model.module}}{{/link-to}}
    {{/if}} @@ -45,7 +45,7 @@