diff --git a/services/web/app/src/Features/Subscription/SubscriptionController.js b/services/web/app/src/Features/Subscription/SubscriptionController.js index 112a65abf2..dc9fe602bf 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionController.js +++ b/services/web/app/src/Features/Subscription/SubscriptionController.js @@ -133,24 +133,6 @@ async function plansPage(req, res) { plansPageViewSegmentation ) - let showNewCompileTimeoutVariant = false - const compileAssignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'compile-backend-class-n2d' - ) - if (compileAssignment?.variant === 'n2d') { - const timeoutAssignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'compile-timeout-20s' - ) - if (timeoutAssignment?.variant === '20s') { - // there may be anonymous/logged out users in this group - showNewCompileTimeoutVariant = true - } - } - res.render('subscriptions/plans', { title: 'plans_and_pricing', currentView, @@ -168,7 +150,6 @@ async function plansPage(req, res) { SubscriptionHelper.generateInitialLocalizedGroupPrice(currency), showInrGeoBanner, annualTrialsAssignment: annualTrialsAssignment?.variant, - showNewCompileTimeoutVariant, }) } @@ -371,24 +352,6 @@ async function interstitialPaymentPage(req, res) { templatePath = 'subscriptions/interstitial-payment' } - let showNewCompileTimeoutVariant = false - const compileAssignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'compile-backend-class-n2d' - ) - if (compileAssignment?.variant === 'n2d') { - const timeoutAssignment = await SplitTestHandler.promises.getAssignment( - req, - res, - 'compile-timeout-20s' - ) - if (timeoutAssignment?.variant === '20s') { - // there may be anonymous/logged out users in this group - showNewCompileTimeoutVariant = true - } - } - res.render(templatePath, { title: 'subscribe', itm_content: req.query?.itm_content, @@ -398,7 +361,6 @@ async function interstitialPaymentPage(req, res) { interstitialPaymentConfig, showSkipLink, showInrGeoBanner, - showNewCompileTimeoutVariant, }) } } diff --git a/services/web/app/src/Features/Subscription/interstitialPaymentConfig.js b/services/web/app/src/Features/Subscription/interstitialPaymentConfig.js index 91d6b80d60..cbe138c566 100644 --- a/services/web/app/src/Features/Subscription/interstitialPaymentConfig.js +++ b/services/web/app/src/Features/Subscription/interstitialPaymentConfig.js @@ -51,13 +51,13 @@ const config = { items: [ { feature: 'compile_timeout_short', - info: 'compile_timeout_short_info', + info: 'compile_timeout_short_info_basic', value: 'str', plans: { - free: 'one_minute', - collaborator: 'four_minutes', - professional: 'four_minutes', - student: 'four_minutes', + free: 'basic', + collaborator: '12x_basic', + professional: '12x_basic', + student: '12x_basic', }, }, { diff --git a/services/web/app/src/Features/Subscription/plansFeatures.js b/services/web/app/src/Features/Subscription/plansFeatures.js index 3d003326cd..481b3cd5ed 100644 --- a/services/web/app/src/Features/Subscription/plansFeatures.js +++ b/services/web/app/src/Features/Subscription/plansFeatures.js @@ -33,12 +33,12 @@ const individualPlans = [ items: [ { feature: 'compile_timeout_short', - info: 'compile_timeout_short_info', + info: 'compile_timeout_short_info_basic', value: 'str', plans: { - free: 'one_minute', - collaborator: 'four_minutes', - professional: 'four_minutes', + free: 'basic', + collaborator: '12x_basic', + professional: '12x_basic', }, }, { @@ -302,7 +302,7 @@ const groupPlans = [ items: [ { feature: 'compile_timeout_short', - info: 'compile_timeout_short_info', + info: 'compile_timeout_short_info_basic', value: 'str', plans: { group_standard: 'four_minutes', @@ -310,6 +310,16 @@ const groupPlans = [ organization: 'four_minutes', }, }, + { + feature: 'compile_servers', + info: 'compile_servers_info', + value: 'str', + plans: { + group_standard: 'fastest', + group_professional: 'fastest', + organization: 'fastest', + }, + }, { feature: 'realtime_track_changes', info: 'realtime_track_changes_info_v2', @@ -482,11 +492,20 @@ const studentPlans = [ items: [ { feature: 'compile_timeout_short', - info: 'compile_timeout_short_info', + info: 'compile_timeout_short_info_basic', value: 'str', plans: { - free: 'one_minute', - student: 'four_minutes', + free: 'basic', + student: '12x_basic', + }, + }, + { + feature: 'compile_servers', + info: 'compile_servers_info', + value: 'str', + plans: { + free: 'fast', + student: 'fastest', }, }, { diff --git a/services/web/app/views/subscriptions/interstitial-payment.pug b/services/web/app/views/subscriptions/interstitial-payment.pug index efecb58383..172308a04a 100644 --- a/services/web/app/views/subscriptions/interstitial-payment.pug +++ b/services/web/app/views/subscriptions/interstitial-payment.pug @@ -44,13 +44,6 @@ block content //- sticky header on mobile will be "hidden" (by removing its sticky position) if it reaches this div .invisible(aria-hidden="true" data-ol-plans-v2-table-sticky-header-stop) - .row.row-spaced-large.text-centered - .col-xs-12 - p.text-centered - strong * - |   - | !{translate("the_free_compile_timeout_will_be_changing_soon_with_faster_servers", {}, [{name: 'a', attrs: {href: '/blog/changes-to-free-compile-timeouts-and-servers', rel: 'noopener noreferrer', target: '_blank'}}])} - if (showSkipLink) .row.row-spaced-small.text-center a(href='/project' diff --git a/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug b/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug index a2e805bcc0..3c2f712af2 100644 --- a/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug +++ b/services/web/app/views/subscriptions/interstitial-payment_no_nudge_monthly.pug @@ -44,13 +44,6 @@ block content //- sticky header on mobile will be "hidden" (by removing its sticky position) if it reaches this div .invisible(aria-hidden="true" data-ol-plans-v2-table-sticky-header-stop) - .row.row-spaced-large.text-centered - .col-xs-12 - p.text-centered - strong * - |   - | !{translate("the_free_compile_timeout_will_be_changing_soon_with_faster_servers", {}, [{name: 'a', attrs: {href: '/blog/changes-to-free-compile-timeouts-and-servers', rel: 'noopener noreferrer', target: '_blank'}}])} - if (showSkipLink) .row.row-spaced-small.text-center a(href='/project' diff --git a/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug b/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug index 082594e97a..47f01ff18e 100644 --- a/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug +++ b/services/web/app/views/subscriptions/interstitial-payment_nudge_annual.pug @@ -44,13 +44,6 @@ block content //- sticky header on mobile will be "hidden" (by removing its sticky position) if it reaches this div .invisible(aria-hidden="true" data-ol-plans-v2-table-sticky-header-stop) - .row.row-spaced-large.text-centered - .col-xs-12 - p.text-centered - strong * - |   - | !{translate("the_free_compile_timeout_will_be_changing_soon_with_faster_servers", {}, [{name: 'a', attrs: {href: '/blog/changes-to-free-compile-timeouts-and-servers', rel: 'noopener noreferrer', target: '_blank'}}])} - if (showSkipLink) .row.row-spaced-small.text-center a(href='/project' diff --git a/services/web/app/views/subscriptions/plans.pug b/services/web/app/views/subscriptions/plans.pug index cfaa34d60e..baeef21b28 100644 --- a/services/web/app/views/subscriptions/plans.pug +++ b/services/web/app/views/subscriptions/plans.pug @@ -26,10 +26,6 @@ block content include ./plans/_cards_controls_tables .row.row-spaced-large.text-centered .col-xs-12 - p.text-centered - strong * - |   - | !{translate("the_free_compile_timeout_will_be_changing_soon_with_faster_servers", {}, [{name: 'a', attrs: {href: '/blog/changes-to-free-compile-timeouts-and-servers', rel: 'noopener noreferrer', target: '_blank'}}])} p.text-centered strong #{translate("all_prices_displayed_are_in_currency", {recommendedCurrency})} |   diff --git a/services/web/app/views/subscriptions/plans/_mixins.pug b/services/web/app/views/subscriptions/plans/_mixins.pug index 5b8abed766..073a521aed 100644 --- a/services/web/app/views/subscriptions/plans/_mixins.pug +++ b/services/web/app/views/subscriptions/plans/_mixins.pug @@ -90,73 +90,54 @@ mixin plans_v2_table(period, config) span ) span.sr-only #{translate(featuresPerSection.dividerInfo)} for feature, featureIndex in featuresPerSection.items - unless !showNewCompileTimeoutVariant && feature.feature === 'compile_servers' - tr( - class=(featureIndex === (featuresPerSection.items.length - 1) ? `plans-v2-table-row-last-row-per-section cols-${maxColumn}` : `cols-${maxColumn}`) + tr( + class=(featureIndex === (featuresPerSection.items.length - 1) ? `plans-v2-table-row-last-row-per-section cols-${maxColumn}` : `cols-${maxColumn}`) + ) + td( + event-tracking="plans-page-table" + event-tracking-trigger="hover" + event-tracking-ga="subscription-funnel" + event-tracking-label=`${feature.feature}` + colspan=baseColspan ) + .plans-v2-table-feature-name + if feature.info + span #{translate(feature.feature)} + //- will only appear on screen width >= 768px (using CSS) + i.fa.fa-question-circle.plans-v2-table-feature-name-question-icon( + data-toggle="tooltip" + title=translate(feature.info), + data-placement="right" + ) + //- will only appear on screen width < 768px (using CSS) + span.plans-v2-table-feature-name-learn-more-container + span ( + span.plans-v2-table-feature-name-learn-more-text( + data-toggle="tooltip" + title=translate(feature.info), + data-placement="top" + ) #{translate("learn_more_lowercase")} + span ) + else + | #{translate(feature.feature)} + for plan, planIndex in Object.keys(feature.plans) + - var tableHeadOptions = Object.values(config.tableHead)[planIndex] || {} + - var colspan = tableHeadOptions.colspan || baseColspan + - + if (planIndex === discountedColumn.index) { + var tdClass = 'plans-v2-table-discount-highlighted' + } else if (planIndex === config.highlightedColumn.index) { + var tdClass = 'plans-v2-table-green-highlighted' + } else if (planIndex === config.highlightedColumn.index - 1) { + var tdClass = 'plans-v2-table-cell-before-green-highlighted-column' + } else { + var tdClass = '' + } td( - event-tracking="plans-page-table" - event-tracking-trigger="hover" - event-tracking-ga="subscription-funnel" - event-tracking-label=`${feature.feature}` - colspan=baseColspan + class=tdClass + colspan=colspan ) - .plans-v2-table-feature-name - if feature.info - span #{translate(feature.feature)} - //- will only appear on screen width >= 768px (using CSS) - if showNewCompileTimeoutVariant && feature.info === 'compile_timeout_short_info' - i.fa.fa-question-circle.plans-v2-table-feature-name-question-icon( - data-toggle="tooltip" - title=translate("compile_timeout_short_info_basic"), - data-placement="right" - ) - //- will only appear on screen width < 768px (using CSS) - span.plans-v2-table-feature-name-learn-more-container - span ( - span.plans-v2-table-feature-name-learn-more-text( - data-toggle="tooltip" - title=translate("compile_timeout_short_info_basic"), - data-placement="top" - ) #{translate("learn_more_lowercase")} - span ) - span.sr-only #{translate("compile_timeout_short_info_basic")} - else - i.fa.fa-question-circle.plans-v2-table-feature-name-question-icon( - data-toggle="tooltip" - title=translate(feature.info), - data-placement="right" - ) - //- will only appear on screen width < 768px (using CSS) - span.plans-v2-table-feature-name-learn-more-container - span ( - span.plans-v2-table-feature-name-learn-more-text( - data-toggle="tooltip" - title=translate(feature.info), - data-placement="top" - ) #{translate("learn_more_lowercase")} - span ) - span.sr-only #{translate(feature.info)} - else - | #{translate(feature.feature)} - for plan, planIndex in Object.keys(feature.plans) - - var tableHeadOptions = Object.values(config.tableHead)[planIndex] || {} - - var colspan = tableHeadOptions.colspan || baseColspan - - - if (planIndex === discountedColumn.index) { - var tdClass = 'plans-v2-table-discount-highlighted' - } else if (planIndex === config.highlightedColumn.index) { - var tdClass = 'plans-v2-table-green-highlighted' - } else if (planIndex === config.highlightedColumn.index - 1) { - var tdClass = 'plans-v2-table-cell-before-green-highlighted-column' - } else { - var tdClass = '' - } - td( - class=tdClass - colspan=colspan - ) - +table_cell(feature, plan) + +table_cell(feature, plan) mixin table_individual(period) table.card.plans-v2-table.plans-v2-table-individual @@ -342,32 +323,15 @@ mixin table_cell(feature, plan) data-ol-plans-v2-table-cell-plan=plan data-ol-plans-v2-table-cell-feature=featureName ) - if feature.feature === 'compile_servers' - if showNewCompileTimeoutVariant - | #{translate(planValue)} - else if feature.feature === 'compile_timeout_short' - if showNewCompileTimeoutVariant && plan !== 'group_standard' && plan !== 'group_professional' && plan !== 'organization' - if plan === 'free' - | #{translate("basic")}  - strong * - else - | #{translate("12x_basic")} + if (feature.value === 'str') + | !{translate(planValue, {}, ['strong'])} + else if (feature.value === 'bool') + if (planValue) + i.fa.fa-check(aria-hidden="true") + span.sr-only #{translate("feature_included")} else - if plan === 'free' - | #{translate(planValue)}  - strong * - else - | #{translate(planValue)} - else - if (feature.value === 'str') - | !{translate(planValue, {}, ['strong'])} - else if (feature.value === 'bool') - if (planValue) - i.fa.fa-check(aria-hidden="true") - span.sr-only #{translate("feature_included")} - else - span(aria-hidden="true") - - span.sr-only #{translate("feature_not_included")} + span(aria-hidden="true") - + span.sr-only #{translate("feature_not_included")} mixin group_plans_license_picker() form.plans-v2-license-picker-form(data-ol-plans-v2-license-picker-form) diff --git a/services/web/locales/en.json b/services/web/locales/en.json index 22ba22259e..4c1e809351 100644 --- a/services/web/locales/en.json +++ b/services/web/locales/en.json @@ -281,7 +281,6 @@ "compile_terminated_by_user": "The compile was cancelled using the ‘Stop Compilation’ button. You can download the raw logs to see where the compile stopped.", "compile_timeout": "Compile timeout (minutes)", "compile_timeout_short": "Compile timeout", - "compile_timeout_short_info": "This is how much time you get to compile your project on the Overleaf servers. For short and simple projects, 1 minute should be enough, but you may need longer for complex or longer projects", "compile_timeout_short_info_basic": "This is how much time you get to compile your project on the Overleaf servers. You may need additional time for longer or more complex projects.", "compiler": "Compiler", "compiles_on_our_free_plan_are_now_on_faster_servers": "Compiles on our free plan are now on faster servers, and we’re gradually <0>introducing a shorter compile timeout limit. This project currently exceeds the new limit, so it might not compile in future.", @@ -1218,7 +1217,6 @@ "on_free_plan_upgrade_to_access_features": "You are on the __appName__ Free plan. Upgrade to access these <0>Premium Features", "one_collaborator": "Only one collaborator", "one_free_collab": "One free collaborator", - "one_minute": "1 minute", "one_step_away_from_professional_features": "You are one step away from accessing <0>Overleaf Professional features!", "one_user": "1 user", "online_latex_editor": "Online LaTeX Editor", @@ -1848,7 +1846,6 @@ "the_easy_online_collab_latex_editor": "The easy to use, online, collaborative LaTeX editor", "the_file_supplied_is_of_an_unsupported_type ": "The link to open this content on Overleaf pointed to the wrong kind of file. Valid file types are .tex documents and .zip files. If this keeps happening for links on a particular site, please report this to them.", "the_following_files_already_exist_in_this_project": "The following files already exist in this project:", - "the_free_compile_timeout_will_be_changing_soon_with_faster_servers": "The free compile timeout will be changing soon as we introduce faster servers. <0>Find out more.", "the_project_that_contains_this_file_is_not_shared_with_you": "The project that contains this file is not shared with you", "the_requested_conversion_job_was_not_found": "The link to open this content on Overleaf specified a conversion job that could not be found. It’s possible that the job has expired and needs to be run again. If this keeps happening for links on a particular site, please report this to them.", "the_requested_publisher_was_not_found": "The link to open this content on Overleaf specified a publisher that could not be found. If this keeps happening for links on a particular site, please report this to them.",