From 0c2514d13eaf8504d06ddc2f4db6694c447e74cb Mon Sep 17 00:00:00 2001 From: Simon Welsh Date: Thu, 10 Oct 2013 15:42:49 +1300 Subject: [PATCH 1/5] Calculate where to scroll to based off the position in the div Also, only scroll if not currently visible. --- javascript/CMSMain.Tree.js | 54 ++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/javascript/CMSMain.Tree.js b/javascript/CMSMain.Tree.js index 4774d9f0..a2f2ac6a 100644 --- a/javascript/CMSMain.Tree.js +++ b/javascript/CMSMain.Tree.js @@ -15,20 +15,20 @@ var menus = $('#vakata-contextmenu').find("ul ul"); menus.each(function(i){ - var col = "1", + var col = "1", count = $(menus[i]).find('li').length; //Assign columns to menus over 10 items long if(count > 20){ - col = "3"; + col = "3"; }else if(count > 10){ - col = "2"; + col = "2"; } $(menus[i]).addClass('col-' + col).removeClass('right'); //Remove "right" class that jstree adds on mouseenter - $(menus[i]).find('li').on("mouseenter", function (e) { + $(menus[i]).find('li').on("mouseenter", function (e) { $(this).parent('ul').removeClass("right"); }); }); @@ -38,7 +38,7 @@ config.plugins.push('contextmenu'); config.contextmenu = { 'items': function(node) { - + var menuitems = { 'edit': { 'label': ss.i18n._t('Tree.EditPage', 'Edit page', 100, 'Used in the context menu when right-clicking on a page node in the CMS tree'), @@ -64,7 +64,7 @@ } }; } - + // Build a list for allowed children as submenu entries var pagetype = node.data('pagetype'), id = node.data('id'), @@ -100,13 +100,13 @@ } }; }); - + if(hasAllowedChildren) { menuitems['addsubpage'] = { 'label': ss.i18n._t('Tree.AddSubPage', 'Add page under this page', 100, 'Used in the context menu when right-clicking on a page node in the CMS tree'), 'submenu': menuAllowedChildren }; - } + } menuitems['duplicate'] = { 'label': ss.i18n._t('Tree.Duplicate'), @@ -116,7 +116,7 @@ 'action': function(obj) { $('.cms-container').entwine('.ss').loadPanel( $.path.addSearchParams( - ss.i18n.sprintf(self.data('urlDuplicate'), obj.data('id')), + ss.i18n.sprintf(self.data('urlDuplicate'), obj.data('id')), self.data('extraParams') ) ); @@ -126,7 +126,7 @@ 'action': function(obj) { $('.cms-container').entwine('.ss').loadPanel( $.path.addSearchParams( - ss.i18n.sprintf(self.data('urlDuplicatewithchildren'), obj.data('id')), + ss.i18n.sprintf(self.data('urlDuplicatewithchildren'), obj.data('id')), self.data('extraParams') ) ); @@ -136,23 +136,33 @@ }; return menuitems; - } + } }; return config; } }); - - // Scroll tree down to context of the current page - $('.cms-tree a.jstree-clicked').entwine({ - onmatch: function(){ - var self = this, - panel = self.parents('.cms-panel-content'); - panel.animate({ - scrollTop: self.offset().top - (panel.height() / 2) - }, 'slow'); - } - }); + // Scroll tree down to context of the current page, if it isn't + // already visible + $('.cms-tree a.jstree-clicked').entwine({ + onmatch: function(){ + var self = this, + panel = self.parents('.cms-panel-content'), + scrollTo; + + if(self.offset().top < 0 || + self.offset().top > panel.height() - self.height()) { + // Current scroll top + our current offset top is our + // position in the panel + scrollTo = panel.scrollTop() + self.offset().top + + (panel.height() / 2); + + panel.animate({ + scrollTop: scrollTo + }, 'slow'); + } + } + }); }); }(jQuery)); From 68d254c3c4f982d4aa44a0d147a0b9e78063c6a7 Mon Sep 17 00:00:00 2001 From: Andrew Short Date: Fri, 11 Oct 2013 01:31:07 +1100 Subject: [PATCH 2/5] Add an extension hook for customising site tree hints. --- code/controllers/CMSMain.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/controllers/CMSMain.php b/code/controllers/CMSMain.php index 4eb61963..e427ebe3 100644 --- a/code/controllers/CMSMain.php +++ b/code/controllers/CMSMain.php @@ -446,6 +446,8 @@ class CMSMain extends LeftAndMain implements CurrentPageIdentifier, PermissionPr } } + $this->extend('updateSiteTreeHints', $def); + $json = Convert::raw2json($def); $cache->save($json, $cacheKey); } From aae6b2b2966db9b6b41621a3ce6e8c65337ba2c9 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Fri, 11 Oct 2013 00:27:14 +0200 Subject: [PATCH 3/5] Avoid encoded HTML breadcrumbs --- code/model/SiteConfig.php | 6 +++++- code/model/SiteTree.php | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/code/model/SiteConfig.php b/code/model/SiteConfig.php index c80539de..cc1ec1aa 100644 --- a/code/model/SiteConfig.php +++ b/code/model/SiteConfig.php @@ -53,7 +53,11 @@ class SiteConfig extends DataObject implements PermissionProvider { */ public function getCMSFields() { - $groupsMap = Group::get()->map('ID', 'Breadcrumbs')->toArray(); + $groupsMap = array(); + foreach(Group::get() as $group) { + // Listboxfield values are escaped, use ASCII char instead of » + $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); + } asort($groupsMap); $fields = new FieldList( diff --git a/code/model/SiteTree.php b/code/model/SiteTree.php index 42b3a1ee..53567dc0 100644 --- a/code/model/SiteTree.php +++ b/code/model/SiteTree.php @@ -1978,7 +1978,11 @@ class SiteTree extends DataObject implements PermissionProvider,i18nEntityProvid * @return FieldList */ public function getSettingsFields() { - $groupsMap = Group::get()->map('ID', 'Breadcrumbs')->toArray(); + $groupsMap = array(); + foreach(Group::get() as $group) { + // Listboxfield values are escaped, use ASCII char instead of » + $groupsMap[$group->ID] = $group->getBreadcrumbs(' > '); + } asort($groupsMap); $fields = new FieldList( From 69ae8a8fed6a3a947c8241fec8130d4fb22a6ca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Cieszy=C5=84ski?= Date: Wed, 16 Oct 2013 00:06:41 +0200 Subject: [PATCH 4/5] FIX Remove invalid single quote --- javascript/lang/pl_PL.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/lang/pl_PL.js b/javascript/lang/pl_PL.js index 668e97e6..860b2dd8 100644 --- a/javascript/lang/pl_PL.js +++ b/javascript/lang/pl_PL.js @@ -19,7 +19,7 @@ if(typeof(ss) == 'undefined' || typeof(ss.i18n) == 'undefined') { 'CMSMAIN.ERRORREVERTING': 'Błąd podczas powrotu do opublikowanej strony', 'CMSMAIN.SAVING' : 'Zapisywanie...', 'CMSMAIN.SELECTMOREPAGES' : "Zaznaczono %s stron.\n\nCzy na pewno chcesz wykonać tę akcje?", - 'CMSMAIN.ALERTCLASSNAME': 'Ta strona zostanie zaktualizowana po jej zapisani\'ur', + 'CMSMAIN.ALERTCLASSNAME': 'Ta strona zostanie zaktualizowana po jej zapisaniu', 'CMSMAIN.URLSEGMENTVALIDATION': 'Adres URL może składać się tylko z liter, cyfr i łączników.', 'AssetAdmin.BATCHACTIONSDELETECONFIRM': "Czy na pewno usunąć %s folderów?", 'AssetTableField.REALLYDELETE': 'Czy na pewno usunąć zaznaczone pliki??', From b884671bfba721d73efa4c3ca10ae5836d2c1902 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Wed, 16 Oct 2013 15:48:25 +0200 Subject: [PATCH 5/5] Behat travis tests --- .travis.yml | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 06edbd3e..da82b2e5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,13 @@ php: - 5.3 env: - - DB=MYSQL CORE_RELEASE=3.1 + global: + - "ARTIFACTS_AWS_REGION=us-east-1" + - "ARTIFACTS_S3_BUCKET=silverstripe-travis-artifacts" + - secure: "7V20Qk3bIG2AlTJaA5D/uzB8vUVvRwQp+xjRYUxlahtj9FcuqEV3HIyjwwJe0T6Z1bnRYuu28ZnCT2CfP9BBZ3FE7AwSZbPase9c0/at2qDJNqkvIdC1xZ1H6Fcy2LSwNB9wLQPe613ItVdanitEuwE41iowxBPslxUUTnwx7eY=" + - secure: "f/GWlbnNri2YpCOrJfZl7tkhpMmcRVUbCdmb+beAY90gFBJQPHtljzf8M4KaCP0OkLOtRFuGoMFdIcpadl4J6IG1XP18IJNz+nKzCL/sJj/FF9y77RdMHWE9jr21G9ar5tywkn7JM6vrnTCY89OnHeQx67SKvxqX5CpVx+rdcEU=" + matrix: + - DB=MYSQL CORE_RELEASE=3.1 matrix: include: @@ -16,25 +22,34 @@ matrix: env: DB=MYSQL CORE_RELEASE=3.1 - php: 5.5 env: DB=MYSQL CORE_RELEASE=3.1 + - php: 5.4 + env: DB=MYSQL CORE_RELEASE=3.1 BEHAT_TEST=1 before_script: + - composer self-update + - phpenv rehash - git clone git://github.com/silverstripe-labs/silverstripe-travis-support.git ~/travis-support - - php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss + - "if [ \"$BEHAT_TEST\" = \"\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss; fi" + - "if [ \"$BEHAT_TEST\" = \"1\" ]; then php ~/travis-support/travis_setup.php --source `pwd` --target ~/builds/ss --require silverstripe/behat-extension; fi" - cd ~/builds/ss + - php ~/travis-support/travis_setup_selenium.php --if-env BEHAT_TEST + - php ~/travis-support/travis_setup_php54_webserver.php --if-env BEHAT_TEST script: - - phpunit cms/tests/ + - "if [ \"$BEHAT_TEST\" = \"\" ]; then phpunit cms/tests; fi" + - "if [ \"$BEHAT_TEST\" = \"1\" ]; then vendor/bin/behat @cms; fi" + +after_failure: + - php ~/travis-support/travis_upload_artifacts.php --if-env BEHAT_TEST,ARTIFACTS_AWS_SECRET_ACCESS_KEY --target-path $TRAVIS_REPO_SLUG/$TRAVIS_BUILD_ID/$TRAVIS_JOB_ID --artifacts-base-url https://s3.amazonaws.com/$ARTIFACTS_S3_BUCKET/ branches: except: - 2.1 - 2.2 - 2.3 - - 2.4 - - post-2.4 - translation-staging notifications: irc: channels: - - "irc.freenode.org#silverstripe" + - "irc.freenode.org#silverstripe" \ No newline at end of file