Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit fe01070

Browse files
chore(docs): improve version picker
1 parent 13f6770 commit fe01070

File tree

12 files changed

+130
-57
lines changed

12 files changed

+130
-57
lines changed

Gruntfile.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ module.exports = function(grunt) {
346346

347347
grunt.registerTask('minify', ['bower', 'clean', 'build', 'minall']);
348348
grunt.registerTask('webserver', ['connect:devserver']);
349-
grunt.registerTask('package', ['bower', 'validate-angular-files', 'clean', 'buildall', 'minall', 'collect-errors', 'docs', 'copy', 'write', 'compress']);
349+
grunt.registerTask('package', ['bower', 'validate-angular-files', 'clean', 'buildall', 'minall', 'collect-errors', 'write', 'docs', 'copy', 'compress']);
350350
grunt.registerTask('ci-checks', ['ddescribe-iit', 'merge-conflict', 'eslint']);
351351
grunt.registerTask('default', ['package']);
352352
};

docs/app/src/app.js

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ angular.module('docsApp', [
66
'ngSanitize',
77
'ngAnimate',
88
'DocsController',
9-
'versionsData',
109
'pagesData',
1110
'navData',
1211
'directives',

docs/app/src/docs.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
angular.module('DocsController', [])
3+
angular.module('DocsController', ['versionData'])
44

55
.controller('DocsController', [
66
'$scope', '$rootScope', '$location', '$window', '$cookies',

docs/app/src/versions.js

+34-29
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,42 @@
11
'use strict';
2+
/* global console */
23

3-
angular.module('versions', [])
4+
angular.module('versions', ['versionData', 'versionsData'])
45

5-
.controller('DocsVersionsCtrl', ['$scope', '$location', '$window', 'NG_VERSIONS', function($scope, $location, $window, NG_VERSIONS) {
6-
$scope.docs_version = NG_VERSIONS[0];
7-
$scope.docs_versions = NG_VERSIONS;
6+
.directive('versionPicker', function() {
7+
return {
8+
restrict: 'E',
9+
scope: true,
10+
controllerAs: '$ctrl',
11+
controller: ['$location', '$window', 'NG_VERSION', 'NG_VERSIONS',
12+
/** @this VersionPickerController */
13+
function VersionPickerController($location, $window, NG_VERSION, NG_VERSIONS) {
814

9-
for (var i = 0, minor = NaN; i < NG_VERSIONS.length; i++) {
10-
var version = NG_VERSIONS[i];
11-
if (version.isSnapshot) {
12-
version.isLatest = true;
13-
continue;
14-
}
15-
// NaN will give false here
16-
if (minor <= version.minor) {
17-
continue;
18-
}
19-
version.isLatest = true;
20-
minor = version.minor;
21-
}
15+
var versionStr = NG_VERSION.isSnapshot ? 'snapshot' : NG_VERSION.version;
2216

23-
$scope.getGroupName = function(v) {
24-
return v.isLatest ? 'Latest' : ('v' + v.major + '.' + v.minor + '.x');
17+
this.versions = NG_VERSIONS;
18+
this.selectedVersion = find(NG_VERSIONS, function(value) { return value.version.version === versionStr; });
19+
20+
this.jumpToDocsVersion = function(value) {
21+
var currentPagePath = $location.path().replace(/\/$/, '');
22+
$window.location = value.docsUrl + currentPagePath;
23+
};
24+
}],
25+
template:
26+
'<div class="picker version-picker">' +
27+
' <select ng-options="v as v.label group by v.group for v in $ctrl.versions"' +
28+
' ng-model="$ctrl.selectedVersion"' +
29+
' ng-change="$ctrl.jumpToDocsVersion($ctrl.selectedVersion)"' +
30+
' class="docs-version-jump">' +
31+
' </select>' +
32+
'</div>'
2533
};
2634

27-
$scope.jumpToDocsVersion = function(version) {
28-
var currentPagePath = $location.path().replace(/\/$/, ''),
29-
url = '';
30-
if (version.isOldDocsUrl) {
31-
url = version.docsUrl;
32-
} else {
33-
url = version.docsUrl + currentPagePath;
35+
function find(collection, matcherFn) {
36+
for (var i = 0, ii = collection.length; i < ii; ++i) {
37+
if (matcherFn(collection[i])) {
38+
return collection[i];
39+
}
3440
}
35-
$window.location = url;
36-
};
37-
}]);
41+
}
42+
});
+84-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
'use strict';
22

3-
var _ = require('lodash');
3+
var exec = require('shelljs').exec;
4+
var semver = require('semver');
5+
6+
var currentVersion = require('../../../build/version.json');
47

58
/**
69
* @dgProcessor generateVersionDocProcessor
@@ -12,23 +15,93 @@ module.exports = function generateVersionDocProcessor(gitData) {
1215
return {
1316
$runAfter: ['generatePagesDataProcessor'],
1417
$runBefore: ['rendering-docs'],
18+
blacklist: ['1.3.4-build.3588'],
1519
$process: function(docs) {
1620

17-
var versionDoc = {
21+
var blacklist = this.blacklist;
22+
var output = exec('npm info angular versions --json', { silent: true }).stdout;
23+
var versions = processAllVersionsResponse(JSON.parse(output));
24+
25+
docs.push({
26+
docType: 'version-data',
27+
id: 'version-data',
28+
template: 'angular-service.template.js',
29+
outputPath: 'js/version-data.js',
30+
ngModuleName: 'versionData',
31+
serviceName: 'NG_VERSION',
32+
serviceValue: currentVersion
33+
});
34+
35+
docs.push({
1836
docType: 'versions-data',
1937
id: 'versions-data',
20-
template: 'versions-data.template.js',
38+
template: 'angular-service.template.js',
2139
outputPath: 'js/versions-data.js',
22-
currentVersion: gitData.version
23-
};
40+
ngModuleName: 'versionsData',
41+
serviceName: 'NG_VERSIONS',
42+
serviceValue: versions
43+
});
44+
45+
46+
function processAllVersionsResponse(versions) {
47+
48+
var latestMap = {};
49+
50+
versions = versions
51+
.filter(function(versionStr) {
52+
return blacklist.indexOf(versionStr) === -1;
53+
})
54+
.map(function(versionStr) {
55+
var version = semver.parse(versionStr);
56+
if (version) {
57+
var key = version.major + '.' + version.minor;
58+
var latest = latestMap[key];
59+
if (!latest || version.compare(latest) > 0) {
60+
latestMap[key] = version;
61+
}
62+
}
63+
return version;
64+
})
65+
.filter(function(version) {
66+
return version && version.major > 0;
67+
})
68+
.map(function(version) {
69+
return makeOption(version);
70+
})
71+
.reverse();
72+
73+
var latest = sortObject(latestMap, reverse(semver.compare)).map(function(version) { return makeOption(version, 'Latest'); });
74+
75+
return [makeOption({version: 'snapshot'}, 'Latest', 'master')]
76+
.concat(latest)
77+
.concat(versions);
78+
}
79+
80+
function makeOption(version, group, label) {
81+
return {
82+
version: version,
83+
label: label || 'v' + version.raw,
84+
group: group || 'v' + version.major + '.' + version.minor,
85+
docsUrl: createDocsUrl(version)
86+
};
87+
}
88+
89+
function createDocsUrl(version) {
90+
var url = 'https://code.angularjs.org/' + version.version + '/docs';
91+
// Versions before 1.0.2 had a different docs folder name
92+
if (version.major === 1 && version.minor === 0 && version.patch < 2) {
93+
url += '-' + version.version;
94+
}
95+
return url;
96+
}
2497

25-
versionDoc.versions = _(gitData.versions)
26-
.filter(function(version) { return version.major > 0; })
27-
.push(gitData.version)
28-
.reverse()
29-
.value();
98+
function reverse(fn) {
99+
return function(left, right) { return -fn(left, right); };
100+
}
30101

31-
docs.push(versionDoc);
102+
function sortObject(obj, cmp) {
103+
return Object.keys(obj).map(function(key) { return obj[key]; }).sort(cmp);
104+
}
32105
}
33106
};
34107
};

docs/config/services/deployments/debug.js

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module.exports = function debugDeployment(getVersion) {
2222
'components/lunr.js-' + getVersion('lunr.js') + '/lunr.js',
2323
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/prettify.js',
2424
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/lang-css.js',
25+
'js/version-data.js',
2526
'js/versions-data.js',
2627
'js/pages-data.js',
2728
'js/nav-data.js',

docs/config/services/deployments/default.js

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module.exports = function defaultDeployment(getVersion) {
2222
'components/lunr.js-' + getVersion('lunr.js') + '/lunr.min.js',
2323
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/prettify.js',
2424
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/lang-css.js',
25+
'js/version-data.js',
2526
'js/versions-data.js',
2627
'js/pages-data.js',
2728
'js/nav-data.js',

docs/config/services/deployments/jquery.js

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ module.exports = function jqueryDeployment(getVersion) {
2626
'components/lunr.js-' + getVersion('lunr.js') + '/lunr.min.js',
2727
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/prettify.js',
2828
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/lang-css.js',
29+
'js/version-data.js',
2930
'js/versions-data.js',
3031
'js/pages-data.js',
3132
'js/nav-data.js',

docs/config/services/deployments/production.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ module.exports = function productionDeployment(getVersion) {
3939
'components/lunr.js-' + getVersion('lunr.js') + '/lunr.min.js',
4040
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/prettify.js',
4141
'components/google-code-prettify-' + getVersion('google-code-prettify') + '/src/lang-css.js',
42-
'js/versions-data.js',
42+
'js/version-data.js',
43+
'https://code.angularjs.org/snapshot/docs/js/versions-data.js',
4344
'js/pages-data.js',
4445
'js/nav-data.js',
4546
'js/docs.min.js'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
'use strict';
2+
3+
angular.module('{$ doc.ngModuleName $}', [])
4+
.value('{$ doc.serviceName $}', {$ doc.serviceValue | json $});

docs/config/templates/indexPage.template.html

+1-7
Original file line numberDiff line numberDiff line change
@@ -165,13 +165,7 @@ <h4 class="search-results-group-heading">{{ key }}</h4>
165165
<section class="sup-header">
166166
<div class="container main-grid main-header-grid">
167167
<div class="grid-left">
168-
<div ng-controller="DocsVersionsCtrl" class="picker version-picker">
169-
<select ng-options="v as (v.isSnapshot ? v.branch : ('v' + v.version)) group by getGroupName(v) for v in docs_versions"
170-
ng-model="docs_version"
171-
ng-change="jumpToDocsVersion(docs_version)"
172-
class="docs-version-jump">
173-
</select>
174-
</div>
168+
<version-picker></version-picker>
175169
</div>
176170
<div class="grid-right">
177171
<ul class="nav-breadcrumb">

docs/config/templates/versions-data.template.js

-6
This file was deleted.

0 commit comments

Comments
 (0)