Skip to content

Instantly share code, notes, and snippets.

@xypaul
Forked from tim-evans/document_title.js
Created September 1, 2014 06:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xypaul/e16e1257805777415ac3 to your computer and use it in GitHub Desktop.
Save xypaul/e16e1257805777415ac3 to your computer and use it in GitHub Desktop.
import Ember from "ember";
var get = Ember.get;
var copy = Ember.copy;
var removeObserver = Ember.removeObserver;
var addObserver = Ember.addObserver;
var DocumentTitleMixin = Ember.Mixin.create({
titleTokensDidChange: function () {
this.notifyPropertyChange('titleTokens');
},
titleTokens: function () {
var currentHandlerInfos = get(this, 'router.currentHandlerInfos'),
tokens = [],
token;
if (currentHandlerInfos) {
for (var i = 0, len = currentHandlerInfos.length; i < len; i++) {
token = get(currentHandlerInfos[i], 'handler.title');
if (token) {
tokens.push(token);
}
}
}
return tokens;
}.property(),
titleDivider: '|',
titleSpecificityIncreases: true,
title: function () {
var tokens = get(this, 'titleTokens'),
divider = get(this, 'titleDivider');
divider = ' ' + divider + ' ';
if (!get(this, 'titleSpecificityIncreases')) {
tokens = copy(tokens).reverse();
}
return tokens.join(divider);
}.property('titleTokens', 'titleDivider', 'titleSpecificityIncreases'),
titleDidChange: function () {
var title = get(this, 'title');
if (title) {
document.title = title;
}
}.observes('title').on('init'),
willTransition: function () {
var oldInfos = get(this, 'router.currentHandlerInfos');
if (oldInfos) {
for (var i = 0, len = oldInfos.length; i < len; i++) {
removeObserver(oldInfos[i].handler, 'title', this, this.titleTokensDidChange);
}
}
},
didTransition: function (infos) {
for (var i = 0, len = infos.length; i < len; i++) {
addObserver(infos[i].handler, 'title', this, this.titleTokensDidChange);
}
this.notifyPropertyChange('titleTokens');
return this._super(infos);
},
_setupRouter: function (router, location) {
var emberRouter = this;
router.willTransition = function (infos) {
emberRouter.willTransition(infos);
};
this._super(router, location);
}
});
export default DocumentTitleMixin;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment