diff --git a/website/assets/js/pages/account/edit-password.page.js b/website/assets/js/pages/account/edit-password.page.js index c6a614e058..b745d92a13 100644 --- a/website/assets/js/pages/account/edit-password.page.js +++ b/website/assets/js/pages/account/edit-password.page.js @@ -43,7 +43,7 @@ parasails.registerPage('edit-password', { // > (Note that we re-enable the syncing state here. This is on purpose-- // > to make sure the spinner stays there until the page navigation finishes.) this.syncing = true; - window.location = '/account'; + this.goto('/account'); }, } diff --git a/website/assets/js/pages/account/edit-profile.page.js b/website/assets/js/pages/account/edit-profile.page.js index 4a9ce71221..6a13dc6a4b 100644 --- a/website/assets/js/pages/account/edit-profile.page.js +++ b/website/assets/js/pages/account/edit-profile.page.js @@ -45,7 +45,7 @@ parasails.registerPage('edit-profile', { // > (Note that we re-enable the syncing state here. This is on purpose-- // > to make sure the spinner stays there until the page navigation finishes.) this.syncing = true; - window.location = '/account'; + this.goto('/account'); }, } diff --git a/website/assets/js/pages/connect-vanta.page.js b/website/assets/js/pages/connect-vanta.page.js index 2733f5f687..be024d0125 100644 --- a/website/assets/js/pages/connect-vanta.page.js +++ b/website/assets/js/pages/connect-vanta.page.js @@ -39,7 +39,7 @@ parasails.registerPage('connect-vanta', { submittedAuthorizationForm: async function() { this.syncing = true; - window.location = this.vantaAuthorizationRequestURL; + this.goto(this.vantaAuthorizationRequestURL); }, clickClearErrors: async function() { diff --git a/website/assets/js/pages/contact.page.js b/website/assets/js/pages/contact.page.js index d5f36f1d0c..3a4314bf01 100644 --- a/website/assets/js/pages/contact.page.js +++ b/website/assets/js/pages/contact.page.js @@ -88,9 +88,9 @@ parasails.registerPage('contact', { submittedTalkToUsForm: async function() { this.syncing = true; if(this.formData.numberOfHosts > 700){ - window.location = `https://calendly.com/fleetdm/talk-to-us?email=${encodeURIComponent(this.formData.emailAddress)}&name=${encodeURIComponent(this.formData.firstName+' '+this.formData.lastName)}`; + this.goto(`https://calendly.com/fleetdm/talk-to-us?email=${encodeURIComponent(this.formData.emailAddress)}&name=${encodeURIComponent(this.formData.firstName+' '+this.formData.lastName)}`); } else { - window.location = `https://calendly.com/fleetdm/chat?email=${encodeURIComponent(this.formData.emailAddress)}&name=${encodeURIComponent(this.formData.firstName+' '+this.formData.lastName)}`; + this.goto(`https://calendly.com/fleetdm/chat?email=${encodeURIComponent(this.formData.emailAddress)}&name=${encodeURIComponent(this.formData.firstName+' '+this.formData.lastName)}`); } }, diff --git a/website/assets/js/pages/customers/new-license.page.js b/website/assets/js/pages/customers/new-license.page.js index f49312ffff..6917592f51 100644 --- a/website/assets/js/pages/customers/new-license.page.js +++ b/website/assets/js/pages/customers/new-license.page.js @@ -67,7 +67,7 @@ parasails.registerPage('new-license', { clickGoToDashboard: async function() { this.syncing = true; - window.location = '/customers/dashboard?order-complete'; + this.goto('/customers/dashboard?order-complete'); }, submittedQuoteForm: async function(quote) { @@ -90,7 +90,7 @@ parasails.registerPage('new-license', { clickScheduleDemo: async function() { this.syncing = true; // Note: we keep loading spinner present indefinitely so that it is apparent that a new page is loading - window.location = `https://calendly.com/fleetdm/talk-to-us?email=${encodeURIComponent(this.me.emailAddress)}&name=${encodeURIComponent(this.me.firstName+' '+this.me.lastName)}`; + this.goto(`https://calendly.com/fleetdm/talk-to-us?email=${encodeURIComponent(this.me.emailAddress)}&name=${encodeURIComponent(this.me.firstName+' '+this.me.lastName)}`); }, clickResetForm: async function() { diff --git a/website/assets/js/pages/docs/basic-documentation.page.js b/website/assets/js/pages/docs/basic-documentation.page.js index 978277a36a..5b7262b8f2 100644 --- a/website/assets/js/pages/docs/basic-documentation.page.js +++ b/website/assets/js/pages/docs/basic-documentation.page.js @@ -223,7 +223,7 @@ parasails.registerPage('basic-documentation', { methods: { clickCTA: function (slug) { - window.location = slug; + this.goto(slug); }, isCurrentSection: function (section) { diff --git a/website/assets/js/pages/entrance/login.page.js b/website/assets/js/pages/entrance/login.page.js index a73ca3fc79..a506effa58 100644 --- a/website/assets/js/pages/entrance/login.page.js +++ b/website/assets/js/pages/entrance/login.page.js @@ -59,7 +59,7 @@ parasails.registerPage('login', { // > (Note that we re-enable the syncing state here. This is on purpose-- // > to make sure the spinner stays there until the page navigation finishes.) this.syncing = true; - window.location = this.pageToRedirectToAfterLogin; + this.goto(this.pageToRedirectToAfterLogin); }, } diff --git a/website/assets/js/pages/entrance/new-password.page.js b/website/assets/js/pages/entrance/new-password.page.js index 74a032f5ab..0b934c8326 100644 --- a/website/assets/js/pages/entrance/new-password.page.js +++ b/website/assets/js/pages/entrance/new-password.page.js @@ -45,7 +45,7 @@ parasails.registerPage('new-password', { // > (Note that we re-enable the syncing state here. This is on purpose-- // > to make sure the spinner stays there until the page navigation finishes.) this.syncing = true; - window.location = '/customers/login'; + this.goto('/customers/login'); }, } diff --git a/website/assets/js/pages/entrance/signup.page.js b/website/assets/js/pages/entrance/signup.page.js index 0680b39b98..598e3b073e 100644 --- a/website/assets/js/pages/entrance/signup.page.js +++ b/website/assets/js/pages/entrance/signup.page.js @@ -68,7 +68,7 @@ parasails.registerPage('signup', { // > (Note that we re-enable the syncing state here. This is on purpose-- // > to make sure the spinner stays there until the page navigation finishes.) this.syncing = true; - window.location = this.pageToRedirectToAfterRegistration;// « / start if the user came here from the start now button, or customers/new-license if the user came here from the "Get your license" link. + this.goto(this.pageToRedirectToAfterRegistration);// « / start if the user came here from the start now button, or customers/new-license if the user came here from the "Get your license" link. } diff --git a/website/assets/js/pages/query-detail.page.js b/website/assets/js/pages/query-detail.page.js index f05e8e97eb..e273a48243 100644 --- a/website/assets/js/pages/query-detail.page.js +++ b/website/assets/js/pages/query-detail.page.js @@ -23,7 +23,7 @@ parasails.registerPage('query-detail', { // ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝ methods: { clickAvatar: function (contributor) { - window.location = contributor.htmlUrl; + this.goto(contributor.htmlUrl); }, getDisplayName: function (contributor) { return !contributor.name ? contributor.handle : contributor.name; diff --git a/website/assets/js/pages/query-library.page.js b/website/assets/js/pages/query-library.page.js index 053682d737..7da650d012 100644 --- a/website/assets/js/pages/query-library.page.js +++ b/website/assets/js/pages/query-library.page.js @@ -57,11 +57,11 @@ parasails.registerPage('query-library', { }, clickCard: function (querySlug) { - window.location = '/queries/' + querySlug; // we can trust the query slug is url-safe + this.goto('/queries/' + querySlug); // we can trust the query slug is url-safe }, clickAvatar: function (contributor) { - window.location = contributor.htmlUrl; + this.goto(contributor.htmlUrl); }, getAvatarUrl: function (contributorData) { diff --git a/website/assets/js/pages/start.page.js b/website/assets/js/pages/start.page.js index 7be20fa6ba..846c700647 100644 --- a/website/assets/js/pages/start.page.js +++ b/website/assets/js/pages/start.page.js @@ -104,7 +104,7 @@ parasails.registerPage('start', { }); this.previouslyAnsweredQuestions[this.currentStep] = getStartedProgress[this.currentStep]; if(_.startsWith(nextStep, '/')){ - window.location = nextStep; + this.goto(nextStep); } else { this.syncing = false; this.currentStep = nextStep; @@ -282,10 +282,10 @@ parasails.registerPage('start', { return nextStepInForm; }, clickGoToCalendly: function() { - window.location = `https://calendly.com/fleetdm/talk-to-us?email=${encodeURIComponent(this.me.emailAddress)}&name=${encodeURIComponent(this.me.firstName+' '+this.me.lastName)}`; + this.goto(`https://calendly.com/fleetdm/talk-to-us?email=${encodeURIComponent(this.me.emailAddress)}&name=${encodeURIComponent(this.me.firstName+' '+this.me.lastName)}`); }, clickGoToContactPage: function() { - window.location = `/contact?prefillFormDataFromUserRecord`; + this.goto(`/contact`); }, clickClearOneFormError: function(field) { if(this.formErrors[field]){ diff --git a/website/assets/js/pages/try-fleet/query-report.page.js b/website/assets/js/pages/try-fleet/query-report.page.js index 2d453c0bff..f3d76c9494 100644 --- a/website/assets/js/pages/try-fleet/query-report.page.js +++ b/website/assets/js/pages/try-fleet/query-report.page.js @@ -55,17 +55,17 @@ parasails.registerPage('query-report', { watch: { selectedTable: function(val){ if(val !== this.tableToDisplay){ - window.location = `/try-fleet/explore-data/${this.selectedHost}/${this.selectedTable}`; + this.goto(`/try-fleet/explore-data/${this.selectedHost}/${this.selectedTable}`); } }, hostToDisplayResultsFor: function(val){ if(val !== this.selectedHost){ if(val === 'Linux'){ - window.location = `/try-fleet/explore-data/linux/apparmor_events`; + this.goto(`/try-fleet/explore-data/linux/apparmor_events`); } else if(val === 'Windows'){ - window.location = `/try-fleet/explore-data/windows/appcompat_shims`; + this.goto(`/try-fleet/explore-data/windows/appcompat_shims`); } else { - window.location = `/try-fleet/explore-data/macos/account_policy_data`; + this.goto(`/try-fleet/explore-data/macos/account_policy_data`); } } } @@ -85,7 +85,6 @@ parasails.registerPage('query-report', { tableContainer.addEventListener('scroll', (event)=>{ let container = event.target; - console.log(container); let isScrolledFullyToLeft = container.scrollLeft === 0; let isScrolledFullyToRight = (container.scrollWidth - container.scrollLeft <= container.clientWidth + 1); // Update the class on the table container based on how much the table is scrolled. diff --git a/website/assets/js/pages/try-fleet/sandbox-teleporter.page.js b/website/assets/js/pages/try-fleet/sandbox-teleporter.page.js index 730a9b3869..964af18ca6 100644 --- a/website/assets/js/pages/try-fleet/sandbox-teleporter.page.js +++ b/website/assets/js/pages/try-fleet/sandbox-teleporter.page.js @@ -22,7 +22,7 @@ parasails.registerPage('sandbox-teleporter', { // Binding an event handler to 'onpageshow', if a user navigates to a locally cached version of this page (e.g., A Safari user clicking the back button from their Fleet Sandbox), they will be taken to the fleetdm.com homepage. window.onpageshow = function(event) { if(event.persisted) { - window.location = '/'; + this.goto('/'); } }; // Confused? Understandable, this approach is a bit unusual. See this page's view action for more info on what this code is doing and why, as well as a link where you can read more information. diff --git a/website/assets/styles/pages/device-management.less b/website/assets/styles/pages/device-management.less index 21d927f058..70df383852 100644 --- a/website/assets/styles/pages/device-management.less +++ b/website/assets/styles/pages/device-management.less @@ -38,6 +38,11 @@ font-size: 16px; line-height: @text-lineheight; color: @core-fleet-black-75; + a[href] { + text-decoration: underline; + color: @core-fleet-black-75; + text-underline-offset: 3px; + } } strong { color: @core-fleet-black; @@ -185,6 +190,13 @@ } [purpose='testimonial-quote'] { width: 640px; + a { + text-decoration: none; + color: unset; + &:hover { + text-decoration: none; + } + } [purpose='quote'] { p { color: @core-fleet-black-75; diff --git a/website/assets/styles/pages/endpoint-ops.less b/website/assets/styles/pages/endpoint-ops.less index 7f69ef95e6..10ea15b5c9 100644 --- a/website/assets/styles/pages/endpoint-ops.less +++ b/website/assets/styles/pages/endpoint-ops.less @@ -174,6 +174,13 @@ } } [purpose='testimonial-quote'] { + a { + text-decoration: none; + color: unset; + &:hover { + text-decoration: none; + } + } max-width: 591px; [purpose='quote'] { p { diff --git a/website/assets/styles/pages/vulnerability-management.less b/website/assets/styles/pages/vulnerability-management.less index 93bdc23532..db96337311 100644 --- a/website/assets/styles/pages/vulnerability-management.less +++ b/website/assets/styles/pages/vulnerability-management.less @@ -172,6 +172,13 @@ } [purpose='testimonial-quote'] { width: 380px; + a { + text-decoration: none; + color: unset; + &:hover { + text-decoration: none; + } + } [purpose='quote'] { p { color: @core-fleet-black-75; diff --git a/website/views/pages/device-management.ejs b/website/views/pages/device-management.ejs index 8486a80a11..08fc39c3ac 100644 --- a/website/views/pages/device-management.ejs +++ b/website/views/pages/device-management.ejs @@ -25,7 +25,8 @@