From aee07770321c16403f17ea3d128420b0ae5f2672 Mon Sep 17 00:00:00 2001 From: alekseybobkov Date: Thu, 26 Jun 2014 15:29:38 +1100 Subject: [PATCH] Display a correct CMS object name in the page title. Fixes #28. Fixes #354. --- modules/backend/assets/js/october.layout.js | 24 +++++++++++++++--- modules/backend/classes/Controller.php | 5 ++++ modules/backend/layouts/_head.htm | 4 ++- modules/cms/assets/js/october.cmspage.js | 28 +++++++++++++++++---- modules/cms/controllers/Index.php | 7 +++--- 5 files changed, 56 insertions(+), 12 deletions(-) diff --git a/modules/backend/assets/js/october.layout.js b/modules/backend/assets/js/october.layout.js index 7c97e9191..f671dc6c1 100644 --- a/modules/backend/assets/js/october.layout.js +++ b/modules/backend/assets/js/october.layout.js @@ -1,5 +1,16 @@ (function($){ - function updateLayout() { + var OctoberLayout = function() {} + + OctoberLayout.prototype.setPageTitle = function(title) { + var $title = $('title') + + if (this.pageTitleTemplate === undefined) + this.pageTitleTemplate = $title.data('titleTemplate') + + $title.text(this.pageTitleTemplate.replace('%s', title)) + } + + OctoberLayout.prototype.updateLayout = function(title) { $('.layout-cell.width-fix').each(function(){ var $el = $(this).children(); if ($el.length > 0) { @@ -14,6 +25,13 @@ }) } - $(document).ready(updateLayout) - $(window).on('resize', updateLayout) + if ($.oc === undefined) + $.oc = {} + + $.oc.layout = new OctoberLayout() + + $(document).ready($.oc.layout.updateLayout()) + $(window).on('resize', function() { + $.oc.layout.updateLayout() + }) })(jQuery); \ No newline at end of file diff --git a/modules/backend/classes/Controller.php b/modules/backend/classes/Controller.php index 6bc7e434a..4594c3d07 100644 --- a/modules/backend/classes/Controller.php +++ b/modules/backend/classes/Controller.php @@ -76,6 +76,11 @@ class Controller extends Extendable */ public $pageTitle; + /** + * @var string Page title template + */ + public $pageTitleTemplate; + /** * @var string Body class property used for customising the layout on a controller basis. */ diff --git a/modules/backend/layouts/_head.htm b/modules/backend/layouts/_head.htm index b8eb382d3..487c74f20 100644 --- a/modules/backend/layouts/_head.htm +++ b/modules/backend/layouts/_head.htm @@ -1,6 +1,8 @@ -<?= $this->pageTitle ?> | October CMS + + <?= $this->pageTitle ?> | October CMS + diff --git a/modules/cms/assets/js/october.cmspage.js b/modules/cms/assets/js/october.cmspage.js index 2a8fdc04d..e2da4b975 100644 --- a/modules/cms/assets/js/october.cmspage.js +++ b/modules/cms/assets/js/october.cmspage.js @@ -40,7 +40,7 @@ success: function(data) { this.success(data).done(function(){ $.oc.stripeLoadIndicator.hide() - $('#cms-master-tabs').ocTab('addTab', data.title, data.tab, tabId, $form.data('type-icon')) + $('#cms-master-tabs').ocTab('addTab', data.tabTitle, data.tab, tabId, $form.data('type-icon')) }).always(function(){ $.oc.stripeLoadIndicator.hide() }) @@ -82,6 +82,9 @@ */ $('#cms-master-tabs').on('closed.oc.tab', function(event){ updateModifiedCounter() + + if ($('> div.tab-content > div.tab-pane', '#cms-master-tabs').length == 0) + setPageTitle('') }) /* @@ -92,6 +95,11 @@ return var dataId = $(event.target).closest('li').attr('data-tab-id') + + var title = $(event.target).attr('title') + if (title) + setPageTitle(title) + $('#cms-side-panel [data-control=filelist]').fileList('markActive', dataId) $('#cms-side-panel form').trigger('oc.list.setActiveItem', [dataId]) }) @@ -202,8 +210,10 @@ $('[data-control=preview-button]', this).attr('href', data.pageUrl) } - if (data.title !== undefined) - $('#cms-master-tabs').ocTab('updateTitle', $(this).closest('.tab-pane'), data.title) + if (data.tabTitle !== undefined) { + $('#cms-master-tabs').ocTab('updateTitle', $(this).closest('.tab-pane'), data.tabTitle) + setPageTitle(data.tabTitle) + } var tabId = $('input[name=templateType]', this).val() + '-' + $('input[name=theme]', this).val() + '-' @@ -251,8 +261,9 @@ }, success: function(data) { this.success(data).done(function(){ - $('#cms-master-tabs').ocTab('addTab', data.title, data.tab, tabId, $form.data('type-icon') + ' new-template') + $('#cms-master-tabs').ocTab('addTab', data.tabTitle, data.tab, tabId, $form.data('type-icon') + ' new-template') $('#layout-side-panel').trigger('close.oc.sidePanel') + setPageTitle(data.tabTitle) }).always(function(){ $.oc.stripeLoadIndicator.hide() }) @@ -446,7 +457,7 @@ success: function(data) { this.success(data).done(function(){ $.oc.stripeLoadIndicator.hide() - $('#cms-master-tabs').ocTab('updateTab', tab, data.title, data.tab) + $('#cms-master-tabs').ocTab('updateTab', tab, data.tabTitle, data.tab) $('#cms-master-tabs').ocTab('unmodifyTab', tab) updateModifiedCounter() }).always(function(){ @@ -460,6 +471,13 @@ }) } + function setPageTitle(title) { + if (title.length) + $.oc.layout.setPageTitle(title + ' | ') + else + $.oc.layout.setPageTitle(title) + } + /* * Listen for the click event on the components' remove link */ diff --git a/modules/cms/controllers/Index.php b/modules/cms/controllers/Index.php index 91e895dfd..e14845c5d 100644 --- a/modules/cms/controllers/Index.php +++ b/modules/cms/controllers/Index.php @@ -90,6 +90,7 @@ class Index extends Controller $this->bodyClass = 'compact-container side-panel-not-fixed'; $this->pageTitle = Lang::get('cms::lang.cms.menu_label'); + $this->pageTitleTemplate = '%s CMS | October'; } // @@ -116,7 +117,7 @@ class Index extends Controller } return [ - 'title' => $this->getTabTitle($type, $template), + 'tabTitle' => $this->getTabTitle($type, $template), 'tab' => $this->makePartial('form_page', [ 'form' => $widget, 'templateType' => $type, @@ -162,7 +163,7 @@ class Index extends Controller $result = [ 'templatePath' => $template->fileName, 'templateMtime' => $template->mtime, - 'title' => $this->getTabTitle($type, $template) + 'tabTitle' => $this->getTabTitle($type, $template) ]; if ($type == 'page') { @@ -192,7 +193,7 @@ class Index extends Controller $this->vars['templatePath'] = ''; return [ - 'title' => $this->getTabTitle($type, $template), + 'tabTitle' => $this->getTabTitle($type, $template), 'tab' => $this->makePartial('form_page', [ 'form' => $widget, 'templateType' => $type,