From 695d7ad1ad86a339d32b9b1d573a296380af5823 Mon Sep 17 00:00:00 2001 From: Marcin Suchorski Date: Wed, 18 Jul 2018 11:55:52 +0200 Subject: [PATCH 1/6] Fixed #70 - user now stays in the same tab while navigating around the tree --- .../components/keyboardShortcuts.directive.js | 101 ++++++++++++++---- .../app/services/userSettings.service.js | 18 +++- 2 files changed, 96 insertions(+), 23 deletions(-) diff --git a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js index 0f0cbf85c..883e87969 100644 --- a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js +++ b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js @@ -124,7 +124,8 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { var currentTest, currentLocation = window.location.hash, $nextElement, - $firstElementInTest; + $firstElementInTest, + currentTab; if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, @@ -141,28 +142,32 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { if (!_.isEmpty($(suiteContainer).nextAll( '.aside-report:not(.is-hidden)').first().find( '.test-name'))) { + currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); testContainer.removeClass('is-active'); currentItem.removeClass('is-active'); - toggleNextTest(suiteContainer); $nextElement = suiteContainer.nextAll( '.aside-report:not(.is-hidden)').first(); $nextElement.addClass('is-expanded'); $nextElement.children().first().addClass('is-active'); scrollTo($nextElement.find('.is-active')); + toggleNextTestItem(suiteContainer); + userSettingsService.setLastTab(currentTab); } - } else { + currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + userSettingsService.setLastTab(currentTab); nextUrl.click(); scrollTo(nextUrl); $(testUrlSelector).not(nextUrl).removeClass('is-active'); + clickOnTab(); } } else { - currentTest = findCurrentTest(currentLocation.split('/').pop()); - $firstElementInTest = currentTest.find('.url-name:not(.is-hidden)').find( - testUrlSelector).first(); - currentTest.addClass('is-expanded'); - $firstElementInTest.click(); - scrollTo($firstElementInTest); + currentTest = findCurrentTest(currentLocation.split('/').pop()); + $firstElementInTest = currentTest.find('.url-name:not(.is-hidden)').find( + testUrlSelector).first(); + currentTest.addClass('is-expanded'); + $firstElementInTest.click(); + scrollTo($firstElementInTest); } } @@ -170,7 +175,8 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { testUrlSelector) { var previousTest, currentLocation = window.location.hash, - $previousElement; + $previousElement, + currentTab; if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, @@ -183,14 +189,26 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { '.url-name:not(.is-hidden)').filter(':first').find( testUrlSelector); if (_.isEmpty(previousTest)) { - $previousElement = suiteContainer.find('.test-name'); - scrollTo($previousElement); - $previousElement.click(); - currentItem.parents('.url-name').removeClass('is-active'); - suiteContainer.addClass('is-expanded'); + if (!_.isEmpty($(suiteContainer).prevAll( + '.aside-report:not(.is-hidden)').first() + .find('.test-name'))) { + currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + testContainer.removeClass('is-active'); + currentItem.removeClass('is-active'); + $previousElement = suiteContainer.prevAll( + '.aside-report:not(.is-hidden)').first(); + $previousElement.addClass('is-expanded'); + $previousElement.children().first().addClass('is-active'); + scrollTo($previousElement.find('.is-active')); + togglePrevTestItem(suiteContainer); + userSettingsService.setLastTab(currentTab); + } } else { + currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + userSettingsService.setLastTab(currentTab); scrollTo(previousTest); previousTest.click(); + clickOnTab(); } } else { previousTest = findPreviousTest(currentLocation.split('/').pop()); @@ -208,13 +226,54 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { } } - function toggleNextTest(currentTest) { - $(currentTest).nextAll('.aside-report:not(.is-hidden)') - .first() - .find('.test-name') - .click(); + function toggleNextTestItem(currentTest) { + $(currentTest).nextAll( + '.aside-report:not(.is-hidden)') + .first() + .find('.test-url') + .first() + .click(); } + function togglePrevTestItem(currentTest) { + $(currentTest).prevAll( + '.aside-report:not(.is-hidden)') + .first() + .find('.test-url') + .last() + .click(); + } + + function clickOnTab() { + var currentTab = userSettingsService.getLastTab(); + var nextTestTabs = $('.nav-tabs').children(); + for(var i=0;i 0; } @@ -252,4 +311,4 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { } } } -}); +}); \ No newline at end of file diff --git a/report/src/main/webapp/app/services/userSettings.service.js b/report/src/main/webapp/app/services/userSettings.service.js index 943b52178..a9c724d36 100644 --- a/report/src/main/webapp/app/services/userSettings.service.js +++ b/report/src/main/webapp/app/services/userSettings.service.js @@ -28,13 +28,17 @@ define(['angularAMD', 'localStorageService'], function (angularAMD) { isScreenshotMaskVisible: isScreenshotMaskVisible, toggleScreenshotMask: toggleScreenshotMask, isFullSourceVisible: isFullSourceVisible, - toggleFullSource: toggleFullSource + toggleFullSource: toggleFullSource, + setLastTab: setLastTab, + getLastTab: getLastTab, }, SCREENSHOT_MASK_STORAGE_KEY = 'aet:settings.visibility.screenshotMask', FULL_SOURCE_MASK_STORAGE_KEY = 'aet:settings.visibility.fullSource', + USER_TAB_MASK_STORAGE_KEY = 'aet:settings.raport.lastTab', settings = { screenshotMaskVisible: true, - fullSourceMaskVisible: false + fullSourceMaskVisible: false, + lastUserTab: null, }; setupService(); @@ -45,6 +49,8 @@ define(['angularAMD', 'localStorageService'], function (angularAMD) { true); settings.fullSourceMaskVisible = getSetting(FULL_SOURCE_MASK_STORAGE_KEY, false); + settings.lastUserTab = getSetting(USER_TAB_MASK_STORAGE_KEY, + null); } function isScreenshotMaskVisible() { @@ -67,6 +73,14 @@ define(['angularAMD', 'localStorageService'], function (angularAMD) { return settings.fullSourceMaskVisible; } + function setLastTab(val) { + settings.userTab = val; + } + + function getLastTab() { + return settings.userTab; + } + /*************************************** *********** Private methods ********* ***************************************/ From 148b425f37348f3734d1d5d86e64c6c67fc4c735 Mon Sep 17 00:00:00 2001 From: Marcin Suchorski Date: Thu, 19 Jul 2018 13:55:58 +0200 Subject: [PATCH 2/6] Fixed #70 - structure and variable names fixes --- .../main/webapp/app/components/keyboardShortcuts.directive.js | 1 - 1 file changed, 1 deletion(-) diff --git a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js index 883e87969..3a7675898 100644 --- a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js +++ b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js @@ -177,7 +177,6 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { currentLocation = window.location.hash, $previousElement, currentTab; - if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, '/report/'))) { From 123c1062f795c2397522918f23967d21386ef831 Mon Sep 17 00:00:00 2001 From: Marcin Suchorski Date: Thu, 19 Jul 2018 14:05:03 +0200 Subject: [PATCH 3/6] Fixed #70 - variable names and structure fixes --- .../components/keyboardShortcuts.directive.js | 77 ++++++++++--------- 1 file changed, 39 insertions(+), 38 deletions(-) diff --git a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js index 3a7675898..1b75fa101 100644 --- a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js +++ b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js @@ -125,7 +125,7 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { currentLocation = window.location.hash, $nextElement, $firstElementInTest, - currentTab; + currentTabLabel; if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, @@ -142,24 +142,19 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { if (!_.isEmpty($(suiteContainer).nextAll( '.aside-report:not(.is-hidden)').first().find( '.test-name'))) { - currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); - testContainer.removeClass('is-active'); - currentItem.removeClass('is-active'); + currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); $nextElement = suiteContainer.nextAll( - '.aside-report:not(.is-hidden)').first(); - $nextElement.addClass('is-expanded'); - $nextElement.children().first().addClass('is-active'); - scrollTo($nextElement.find('.is-active')); + '.aside-report:not(.is-hidden)').first(); + handleStyling(testContainer, currentItem, $nextElement); toggleNextTestItem(suiteContainer); - userSettingsService.setLastTab(currentTab); + userSettingsService.setLastTab(currentTabLabel); } } else { - currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); - userSettingsService.setLastTab(currentTab); + currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + userSettingsService.setLastTab(currentTabLabel); nextUrl.click(); scrollTo(nextUrl); $(testUrlSelector).not(nextUrl).removeClass('is-active'); - clickOnTab(); } } else { currentTest = findCurrentTest(currentLocation.split('/').pop()); @@ -176,7 +171,8 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { var previousTest, currentLocation = window.location.hash, $previousElement, - currentTab; + currentTabLabel; + if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, '/report/'))) { @@ -191,23 +187,18 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { if (!_.isEmpty($(suiteContainer).prevAll( '.aside-report:not(.is-hidden)').first() .find('.test-name'))) { - currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); - testContainer.removeClass('is-active'); - currentItem.removeClass('is-active'); + currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); $previousElement = suiteContainer.prevAll( - '.aside-report:not(.is-hidden)').first(); - $previousElement.addClass('is-expanded'); - $previousElement.children().first().addClass('is-active'); - scrollTo($previousElement.find('.is-active')); + '.aside-report:not(.is-hidden)').first(); + handleStyling(testContainer, currentItem, $previousElement); togglePrevTestItem(suiteContainer); - userSettingsService.setLastTab(currentTab); + userSettingsService.setLastTab(currentTabLabel); } } else { - currentTab = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); - userSettingsService.setLastTab(currentTab); + currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + userSettingsService.setLastTab(currentTabLabel); scrollTo(previousTest); previousTest.click(); - clickOnTab(); } } else { previousTest = findPreviousTest(currentLocation.split('/').pop()); @@ -225,13 +216,21 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { } } + function handleStyling(testContainer, currentItem, $element) { + testContainer.removeClass('is-active'); + currentItem.removeClass('is-active'); + $element.addClass('is-expanded'); + $element.children().first().addClass('is-active'); + scrollTo($element.find('.is-active')); + } + function toggleNextTestItem(currentTest) { $(currentTest).nextAll( '.aside-report:not(.is-hidden)') .first() .find('.test-url') .first() - .click(); + .click(); } function togglePrevTestItem(currentTest) { @@ -244,26 +243,28 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { } function clickOnTab() { - var currentTab = userSettingsService.getLastTab(); - var nextTestTabs = $('.nav-tabs').children(); - for(var i=0;i Date: Fri, 20 Jul 2018 09:00:41 +0200 Subject: [PATCH 4/6] Fixed #70 - minor fixes & optimalization --- .../components/keyboardShortcuts.directive.js | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js index 1b75fa101..b2fba1ea9 100644 --- a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js +++ b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js @@ -121,11 +121,11 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { function traverseTreeDown(currentItem, testContainer, suiteContainer, testUrlSelector) { - var currentTest, - currentLocation = window.location.hash, - $nextElement, - $firstElementInTest, - currentTabLabel; + var currentTest; + var currentLocation = window.location.hash; + var $nextElement; + var $firstElementInTest; + var currentTabLabel; if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, @@ -142,7 +142,7 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { if (!_.isEmpty($(suiteContainer).nextAll( '.aside-report:not(.is-hidden)').first().find( '.test-name'))) { - currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); $nextElement = suiteContainer.nextAll( '.aside-report:not(.is-hidden)').first(); handleStyling(testContainer, currentItem, $nextElement); @@ -168,10 +168,10 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { function traverseTreeUp(currentItem, testContainer, suiteContainer, testUrlSelector) { - var previousTest, - currentLocation = window.location.hash, - $previousElement, - currentTabLabel; + var previousTest; + var currentLocation = window.location.hash; + var $previousElement; + var currentTabLabel; if (!(ifRootPage(currentLocation, '/url/') || ifRootPage( currentLocation, '/test/') || ifRootPage(currentLocation, @@ -268,8 +268,6 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { } mutationObserver.observe(document, { - attributes: true, - characterData: true, childList: true, subtree: true, }); From f7a2ce76014816cc31e0be17b011e53cdfe7ae98 Mon Sep 17 00:00:00 2001 From: Marcin Suchorski Date: Fri, 27 Jul 2018 12:27:41 +0200 Subject: [PATCH 5/6] Added information in changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d57a79ccd..64380c641 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ All notable changes to AET will be documented in this file. ## Unreleased **List of changes that are finished but not yet released in any final version.** +- [PR-289](https://github.com/Cognifide/aet/pull/289) User now stays on the same tab while navigating between URLs - [PR-271](https://github.com/Cognifide/aet/pull/271) Added possibility to override name parameter from the aet client - [PR-268](https://github.com/Cognifide/aet/pull/268) Bobcat upgrade to version 1.4.0 - [PR-279](https://github.com/Cognifide/aet/pull/279) Upgrade for some of libraries used by AET From d97eb264744550267d30efbec90c9b5d8771f2e8 Mon Sep 17 00:00:00 2001 From: Marcin Suchorski Date: Fri, 27 Jul 2018 14:38:37 +0200 Subject: [PATCH 6/6] Minor structure fixes --- .../app/components/keyboardShortcuts.directive.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js index b2fba1ea9..9da4dcf47 100644 --- a/report/src/main/webapp/app/components/keyboardShortcuts.directive.js +++ b/report/src/main/webapp/app/components/keyboardShortcuts.directive.js @@ -142,7 +142,7 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { if (!_.isEmpty($(suiteContainer).nextAll( '.aside-report:not(.is-hidden)').first().find( '.test-name'))) { - currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + currentTabLabel = getCurrentTabLabel(); $nextElement = suiteContainer.nextAll( '.aside-report:not(.is-hidden)').first(); handleStyling(testContainer, currentItem, $nextElement); @@ -150,7 +150,7 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { userSettingsService.setLastTab(currentTabLabel); } } else { - currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + currentTabLabel = getCurrentTabLabel(); userSettingsService.setLastTab(currentTabLabel); nextUrl.click(); scrollTo(nextUrl); @@ -187,7 +187,7 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { if (!_.isEmpty($(suiteContainer).prevAll( '.aside-report:not(.is-hidden)').first() .find('.test-name'))) { - currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + currentTabLabel = getCurrentTabLabel(); $previousElement = suiteContainer.prevAll( '.aside-report:not(.is-hidden)').first(); handleStyling(testContainer, currentItem, $previousElement); @@ -195,7 +195,7 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { userSettingsService.setLastTab(currentTabLabel); } } else { - currentTabLabel = $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + currentTabLabel = getCurrentTabLabel(); userSettingsService.setLastTab(currentTabLabel); scrollTo(previousTest); previousTest.click(); @@ -242,6 +242,10 @@ define(['angularAMD', 'userSettingsService'], function (angularAMD) { .click(); } + function getCurrentTabLabel() { + return $('.nav-tabs > .nav-item').filter('.active').text().replace(/\s/g, ''); + } + function clickOnTab() { var currentTabLabel = userSettingsService.getLastTab(); var $nextTestTabs = $('.nav-tabs').children();