Skip to content
This repository was archived by the owner on Aug 30, 2021. It is now read-only.

Commit a069531

Browse files
committed
Merge pull request #1186 from itelo/ImproveSEO
feat (title): Dynamic Title: Improve SEO
2 parents 1cb72bc + 49f6a83 commit a069531

File tree

7 files changed

+132
-41
lines changed

7 files changed

+132
-41
lines changed

modules/articles/client/config/articles.client.routes.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
url: '',
1919
templateUrl: 'modules/articles/client/views/list-articles.client.view.html',
2020
controller: 'ArticlesListController',
21-
controllerAs: 'vm'
21+
controllerAs: 'vm',
22+
data: {
23+
pageTitle: 'Articles List'
24+
}
2225
})
2326
.state('articles.create', {
2427
url: '/create',
@@ -29,7 +32,8 @@
2932
articleResolve: newArticle
3033
},
3134
data: {
32-
roles: ['user', 'admin']
35+
roles: ['user', 'admin'],
36+
pageTitle : 'Articles Create'
3337
}
3438
})
3539
.state('articles.edit', {
@@ -41,7 +45,8 @@
4145
articleResolve: getArticle
4246
},
4347
data: {
44-
roles: ['user', 'admin']
48+
roles: ['user', 'admin'],
49+
pageTitle: 'Edit Article {{ articleResolve.title }}'
4550
}
4651
})
4752
.state('articles.view', {
@@ -51,6 +56,9 @@
5156
controllerAs: 'vm',
5257
resolve: {
5358
articleResolve: getArticle
59+
},
60+
data:{
61+
pageTitle: 'Article {{ articleResolve.title }}'
5462
}
5563
});
5664
}

modules/chat/client/config/chat.client.routes.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
controller: 'ChatController',
1616
controllerAs: 'vm',
1717
data: {
18-
roles: ['user', 'admin']
18+
roles: ['user', 'admin'],
19+
pageTitle: 'Chat'
1920
}
2021
});
2122
}

modules/core/client/config/core.client.routes.js

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,33 @@ angular.module('core').config(['$stateProvider', '$urlRouterProvider',
1313

1414
// Home state routing
1515
$stateProvider
16-
.state('home', {
17-
url: '/',
18-
templateUrl: 'modules/core/client/views/home.client.view.html'
19-
})
20-
.state('not-found', {
21-
url: '/not-found',
22-
templateUrl: 'modules/core/client/views/404.client.view.html',
23-
data: {
24-
ignoreState: true
25-
}
26-
})
27-
.state('bad-request', {
28-
url: '/bad-request',
29-
templateUrl: 'modules/core/client/views/400.client.view.html',
30-
data: {
31-
ignoreState: true
32-
}
33-
})
34-
.state('forbidden', {
35-
url: '/forbidden',
36-
templateUrl: 'modules/core/client/views/403.client.view.html',
37-
data: {
38-
ignoreState: true
39-
}
40-
});
16+
.state('home', {
17+
url: '/',
18+
templateUrl: 'modules/core/client/views/home.client.view.html'
19+
})
20+
.state('not-found', {
21+
url: '/not-found',
22+
templateUrl: 'modules/core/client/views/404.client.view.html',
23+
data: {
24+
ignoreState: true,
25+
pageTitle: 'Not-Found'
26+
}
27+
})
28+
.state('bad-request', {
29+
url: '/bad-request',
30+
templateUrl: 'modules/core/client/views/400.client.view.html',
31+
data: {
32+
ignoreState: true,
33+
pageTitle: 'Bad-Request'
34+
}
35+
})
36+
.state('forbidden', {
37+
url: '/forbidden',
38+
templateUrl: 'modules/core/client/views/403.client.view.html',
39+
data: {
40+
ignoreState: true,
41+
pageTitle: 'Forbidden'
42+
}
43+
});
4144
}
4245
]);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
(function () {
2+
'use strict';
3+
4+
angular.module('core')
5+
.directive('pageTitle', pageTitle);
6+
7+
pageTitle.$inject = ['$rootScope', '$timeout', '$interpolate', '$state'];
8+
9+
function pageTitle($rootScope, $timeout, $interpolate, $state) {
10+
var directive = {
11+
retrict: 'A',
12+
link: link
13+
};
14+
15+
return directive;
16+
17+
function link(scope, element) {
18+
$rootScope.$on('$stateChangeSuccess', listener);
19+
20+
function listener(event, toState) {
21+
var title = (getTitle($state.$current));
22+
$timeout(function () {
23+
element.text(title);
24+
}, 0, false);
25+
}
26+
27+
function getTitle(currentState) {
28+
var applicationCoreTitle = 'MEAN.js';
29+
var workingState = currentState;
30+
if (currentState.data) {
31+
workingState = (typeof workingState.locals !== 'undefined') ? workingState.locals.globals : workingState;
32+
var stateTitle = $interpolate(currentState.data.pageTitle)(workingState);
33+
return applicationCoreTitle + ' - ' + stateTitle;
34+
} else {
35+
return applicationCoreTitle;
36+
}
37+
}
38+
}
39+
}
40+
})();

modules/core/server/views/layout.server.view.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
66
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
77
<base href="/">
8-
<title>{{title}}</title>
8+
<title page-title></title>
99
<meta name="description" content="{{description}}">
1010
<meta name="fragment" content="!">
1111

modules/users/client/config/users-admin.client.routes.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ angular.module('users.admin.routes').config(['$stateProvider',
77
.state('admin.users', {
88
url: '/users',
99
templateUrl: 'modules/users/client/views/admin/list-users.client.view.html',
10-
controller: 'UserListController'
10+
controller: 'UserListController',
11+
data: {
12+
pageTitle: 'Users List'
13+
}
1114
})
1215
.state('admin.user', {
1316
url: '/users/:userId',
@@ -19,6 +22,9 @@ angular.module('users.admin.routes').config(['$stateProvider',
1922
userId: $stateParams.userId
2023
});
2124
}]
25+
},
26+
data: {
27+
pageTitle: 'Edit {{ userResolve.displayName }}'
2228
}
2329
})
2430
.state('admin.user-edit', {
@@ -31,6 +37,9 @@ angular.module('users.admin.routes').config(['$stateProvider',
3137
userId: $stateParams.userId
3238
});
3339
}]
40+
},
41+
data: {
42+
pageTitle: 'Edit User {{ userResolve.displayName }}'
3443
}
3544
});
3645
}

modules/users/client/config/users.client.routes.js

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,31 @@ angular.module('users').config(['$stateProvider',
1515
})
1616
.state('settings.profile', {
1717
url: '/profile',
18-
templateUrl: 'modules/users/client/views/settings/edit-profile.client.view.html'
18+
templateUrl: 'modules/users/client/views/settings/edit-profile.client.view.html',
19+
data: {
20+
pageTitle: 'Settings'
21+
}
1922
})
2023
.state('settings.password', {
2124
url: '/password',
22-
templateUrl: 'modules/users/client/views/settings/change-password.client.view.html'
25+
templateUrl: 'modules/users/client/views/settings/change-password.client.view.html',
26+
data: {
27+
pageTitle: 'Settings password'
28+
}
2329
})
2430
.state('settings.accounts', {
2531
url: '/accounts',
26-
templateUrl: 'modules/users/client/views/settings/manage-social-accounts.client.view.html'
32+
templateUrl: 'modules/users/client/views/settings/manage-social-accounts.client.view.html',
33+
data: {
34+
pageTitle: 'Settings accounts'
35+
}
2736
})
2837
.state('settings.picture', {
2938
url: '/picture',
30-
templateUrl: 'modules/users/client/views/settings/change-profile-picture.client.view.html'
39+
templateUrl: 'modules/users/client/views/settings/change-profile-picture.client.view.html',
40+
data: {
41+
pageTitle: 'Settings picture'
42+
}
3143
})
3244
.state('authentication', {
3345
abstract: true,
@@ -36,11 +48,17 @@ angular.module('users').config(['$stateProvider',
3648
})
3749
.state('authentication.signup', {
3850
url: '/signup',
39-
templateUrl: 'modules/users/client/views/authentication/signup.client.view.html'
51+
templateUrl: 'modules/users/client/views/authentication/signup.client.view.html',
52+
data: {
53+
pageTitle: 'Signup'
54+
}
4055
})
4156
.state('authentication.signin', {
4257
url: '/signin?err',
43-
templateUrl: 'modules/users/client/views/authentication/signin.client.view.html'
58+
templateUrl: 'modules/users/client/views/authentication/signin.client.view.html',
59+
data: {
60+
pageTitle: 'Signin'
61+
}
4462
})
4563
.state('password', {
4664
abstract: true,
@@ -49,7 +67,10 @@ angular.module('users').config(['$stateProvider',
4967
})
5068
.state('password.forgot', {
5169
url: '/forgot',
52-
templateUrl: 'modules/users/client/views/password/forgot-password.client.view.html'
70+
templateUrl: 'modules/users/client/views/password/forgot-password.client.view.html',
71+
data: {
72+
pageTitle: 'Password forgot'
73+
}
5374
})
5475
.state('password.reset', {
5576
abstract: true,
@@ -58,15 +79,24 @@ angular.module('users').config(['$stateProvider',
5879
})
5980
.state('password.reset.invalid', {
6081
url: '/invalid',
61-
templateUrl: 'modules/users/client/views/password/reset-password-invalid.client.view.html'
82+
templateUrl: 'modules/users/client/views/password/reset-password-invalid.client.view.html',
83+
data: {
84+
pageTitle: 'Password reset invalid'
85+
}
6286
})
6387
.state('password.reset.success', {
6488
url: '/success',
65-
templateUrl: 'modules/users/client/views/password/reset-password-success.client.view.html'
89+
templateUrl: 'modules/users/client/views/password/reset-password-success.client.view.html',
90+
data: {
91+
pageTitle: 'Password reset success'
92+
}
6693
})
6794
.state('password.reset.form', {
6895
url: '/:token',
69-
templateUrl: 'modules/users/client/views/password/reset-password.client.view.html'
96+
templateUrl: 'modules/users/client/views/password/reset-password.client.view.html',
97+
data: {
98+
pageTitle: 'Password reset form'
99+
}
70100
});
71101
}
72102
]);

0 commit comments

Comments
 (0)