Răsfoiți Sursa

Merge pull request #22540 from overleaf/mf-remove-plans-page-default-variant-code

[web] Remove dead backend (include pug template) code after `website-redesign-plans` test has been concluded and `new-design` variant is fully activated

GitOrigin-RevId: 143129da71d43b88535f971b13e9e72c98bad798
M Fahru 1 an în urmă
părinte
comite
292308d546
23 a modificat fișierele cu 0 adăugiri și 3559 ștergeri
  1. 0 228
      services/web/app/src/Features/Subscription/SubscriptionController.js
  2. 0 229
      services/web/app/src/Features/Subscription/interstitialPaymentConfig.js
  3. 0 64
      services/web/app/src/Features/Subscription/plansConfig.js
  4. 0 651
      services/web/app/src/Features/Subscription/plansFeatures.js
  5. 0 75
      services/web/app/views/subscriptions/interstitial-payment-light-design.pug
  6. 0 72
      services/web/app/views/subscriptions/interstitial-payment.pug
  7. 0 59
      services/web/app/views/subscriptions/plans-light-design.pug
  8. 0 57
      services/web/app/views/subscriptions/plans.pug
  9. 0 74
      services/web/app/views/subscriptions/plans/_cards_controls_tables.pug
  10. 0 43
      services/web/app/views/subscriptions/plans/_faq.pug
  11. 0 111
      services/web/app/views/subscriptions/plans/_group_plan_modal.pug
  12. 0 646
      services/web/app/views/subscriptions/plans/_mixins.pug
  13. 0 25
      services/web/app/views/subscriptions/plans/_quotes.pug
  14. 0 16
      services/web/app/views/subscriptions/plans/_university_info.pug
  15. 0 17
      services/web/app/views/subscriptions/plans/_university_info_light_design.pug
  16. 0 76
      services/web/app/views/subscriptions/plans/light-redesign/_cards_controls_tables.pug
  17. 0 118
      services/web/app/views/subscriptions/plans/light-redesign/_group_plan_modal.pug
  18. 0 403
      services/web/app/views/subscriptions/plans/light-redesign/_mixins.pug
  19. 0 34
      services/web/app/views/subscriptions/plans/light-redesign/_table_column_headers_row.pug
  20. 0 146
      services/web/app/views/subscriptions/plans/light-redesign/_table_ctas.pug
  21. 0 49
      services/web/app/views/subscriptions/plans/light-redesign/_table_short_feature_lists.pug
  22. 0 110
      services/web/locales/en.json
  23. 0 256
      services/web/test/unit/src/Subscription/SubscriptionControllerTests.js

+ 0 - 228
services/web/app/src/Features/Subscription/SubscriptionController.js

@@ -9,8 +9,6 @@ const Settings = require('@overleaf/settings')
 const logger = require('@overleaf/logger')
 const GeoIpLookup = require('../../infrastructure/GeoIpLookup')
 const FeaturesUpdater = require('./FeaturesUpdater')
-const plansConfig = require('./plansConfig')
-const interstitialPaymentConfig = require('./interstitialPaymentConfig')
 const GroupPlansData = require('./GroupPlansData')
 const V1SubscriptionManager = require('./V1SubscriptionManager')
 const AnalyticsManager = require('../Analytics/AnalyticsManager')
@@ -19,13 +17,10 @@ const { expressify } = require('@overleaf/promise-utils')
 const OError = require('@overleaf/o-error')
 const { DuplicateAddOnError, AddOnNotPresentError } = require('./Errors')
 const SplitTestHandler = require('../SplitTests/SplitTestHandler')
-const SubscriptionHelper = require('./SubscriptionHelper')
 const AuthorizationManager = require('../Authorization/AuthorizationManager')
 const Modules = require('../../infrastructure/Modules')
 const async = require('async')
-const { formatCurrency } = require('../../util/currency')
 const HttpErrorHandler = require('../Errors/HttpErrorHandler')
-const { URLSearchParams } = require('url')
 const RecurlyClient = require('./RecurlyClient')
 const { AI_ADD_ON_CODE } = require('./RecurlyEntities')
 const PlansLocator = require('./PlansLocator')
@@ -38,154 +33,6 @@ const PlansLocator = require('./PlansLocator')
  */
 
 const groupPlanModalOptions = Settings.groupPlanModalOptions
-const validGroupPlanModalOptions = {
-  plan_code: groupPlanModalOptions.plan_codes.map(item => item.code),
-  currency: groupPlanModalOptions.currencies.map(item => item.code),
-  size: groupPlanModalOptions.sizes,
-  usage: groupPlanModalOptions.usages.map(item => item.code),
-}
-
-function _getGroupPlanModalDefaults(req, currency) {
-  function getDefault(param, category, defaultValue) {
-    const v = req.query && req.query[param]
-    if (v && validGroupPlanModalOptions[category].includes(v)) {
-      return v
-    }
-    return defaultValue
-  }
-
-  let defaultGroupPlanModalCurrency = 'USD'
-  if (validGroupPlanModalOptions.currency.includes(currency)) {
-    defaultGroupPlanModalCurrency = currency
-  }
-
-  return {
-    plan_code: getDefault('plan', 'plan_code', 'collaborator'),
-    size: getDefault('number', 'size', '2'),
-    currency: getDefault('currency', 'currency', defaultGroupPlanModalCurrency),
-    usage: getDefault('usage', 'usage', 'enterprise'),
-  }
-}
-
-function _plansBanners(countryCode) {
-  const showLATAMBanner = ['MX', 'CO', 'CL', 'PE'].includes(countryCode)
-  const showInrGeoBanner = countryCode === 'IN'
-  const showBrlGeoBanner = countryCode === 'BR'
-  return { showLATAMBanner, showInrGeoBanner, showBrlGeoBanner }
-}
-
-async function plansPage(req, res) {
-  const websiteRedesignPlansAssignment =
-    await SplitTestHandler.promises.getAssignment(
-      req,
-      res,
-      'website-redesign-plans'
-    )
-  if (websiteRedesignPlansAssignment.variant !== 'default') {
-    const queryParamString = new URLSearchParams(req.query)?.toString()
-    const queryParamForRedirect = queryParamString ? '?' + queryParamString : ''
-
-    if (websiteRedesignPlansAssignment.variant === 'new-design') {
-      return res.redirect(
-        302,
-        '/user/subscription/plans-2' + queryParamForRedirect
-      )
-    } else if (websiteRedesignPlansAssignment.variant === 'light-design') {
-      return res.redirect(
-        302,
-        '/user/subscription/plans-3' + queryParamForRedirect
-      )
-    }
-  }
-
-  const language = req.i18n.language || 'en'
-
-  const plans = SubscriptionViewModelBuilder.buildPlansList()
-
-  const { currency, countryCode } = await _getRecommendedCurrency(req, res)
-
-  const latamCountryBannerDetails = await getLatamCountryBannerDetails(req, res)
-  const groupPlanModalDefaults = _getGroupPlanModalDefaults(req, currency)
-
-  const currentView = 'annual'
-
-  const { showLATAMBanner, showInrGeoBanner, showBrlGeoBanner } =
-    _plansBanners(countryCode)
-
-  const shouldLoadHotjar = await getShouldLoadHotjar(req, res)
-
-  res.render('subscriptions/plans', {
-    title: 'plans_and_pricing',
-    currentView,
-    plans,
-    itm_content: req.query?.itm_content,
-    itm_referrer: req.query?.itm_referrer,
-    itm_campaign: 'plans',
-    language,
-    formatCurrency,
-    recommendedCurrency: currency,
-    plansConfig,
-    groupPlans: GroupPlansData,
-    groupPlanModalOptions,
-    groupPlanModalDefaults,
-    initialLocalizedGroupPrice:
-      SubscriptionHelper.generateInitialLocalizedGroupPrice(
-        currency ?? 'USD',
-        language
-      ),
-    showInrGeoBanner,
-    showBrlGeoBanner,
-    showLATAMBanner,
-    latamCountryBannerDetails,
-    countryCode,
-    websiteRedesignPlansVariant: 'default',
-    shouldLoadHotjar,
-  })
-}
-
-async function plansPageLightDesign(req, res) {
-  const { currency, countryCode } = await _getRecommendedCurrency(req, res)
-
-  const language = req.i18n.language || 'en'
-  const currentView = 'annual'
-  const plans = SubscriptionViewModelBuilder.buildPlansList()
-  const groupPlanModalDefaults = _getGroupPlanModalDefaults(req, currency)
-
-  const { showLATAMBanner, showInrGeoBanner, showBrlGeoBanner } =
-    _plansBanners(countryCode)
-
-  const latamCountryBannerDetails = await getLatamCountryBannerDetails(req, res)
-
-  const shouldLoadHotjar = await getShouldLoadHotjar(req, res)
-
-  res.render('subscriptions/plans-light-design', {
-    title: 'plans_and_pricing',
-    currentView,
-    plans,
-    itm_content: req.query?.itm_content,
-    itm_referrer: req.query?.itm_referrer,
-    itm_campaign: 'plans',
-    language,
-    formatCurrency,
-    recommendedCurrency: currency,
-    plansConfig,
-    groupPlans: GroupPlansData,
-    groupPlanModalOptions,
-    groupPlanModalDefaults,
-    initialLocalizedGroupPrice:
-      SubscriptionHelper.generateInitialLocalizedGroupPrice(
-        currency ?? 'USD',
-        language
-      ),
-    showLATAMBanner,
-    showInrGeoBanner,
-    showBrlGeoBanner,
-    latamCountryBannerDetails,
-    countryCode,
-    websiteRedesignPlansVariant: 'light-design',
-    shouldLoadHotjar,
-  })
-}
 
 function formatGroupPlansDataForDash() {
   return {
@@ -295,68 +142,6 @@ async function userSubscriptionPage(req, res) {
   res.render('subscriptions/dashboard-react', data)
 }
 
-async function interstitialPaymentPage(req, res) {
-  const websiteRedesignPlansAssignment =
-    await SplitTestHandler.promises.getAssignment(
-      req,
-      res,
-      'website-redesign-plans'
-    )
-
-  let template = 'subscriptions/interstitial-payment'
-
-  if (websiteRedesignPlansAssignment.variant === 'new-design') {
-    return await Modules.promises.hooks.fire(
-      'interstitialPaymentPageNewDesign',
-      req,
-      res
-    )
-  } else if (websiteRedesignPlansAssignment.variant === 'light-design') {
-    template = 'subscriptions/interstitial-payment-light-design'
-  }
-
-  const user = SessionManager.getSessionUser(req.session)
-  const { recommendedCurrency, countryCode } = await _getRecommendedCurrency(
-    req,
-    res
-  )
-
-  const latamCountryBannerDetails = await getLatamCountryBannerDetails(req, res)
-
-  const { hasSubscription } =
-    await LimitationsManager.promises.userHasSubscription(user)
-  const showSkipLink = req.query?.skipLink === 'true'
-
-  if (hasSubscription) {
-    res.redirect('/user/subscription?hasSubscription=true')
-  } else {
-    const { showLATAMBanner, showInrGeoBanner, showBrlGeoBanner } =
-      _plansBanners(countryCode)
-
-    const shouldLoadHotjar = await getShouldLoadHotjar(req, res)
-
-    res.render(template, {
-      title: 'subscribe',
-      itm_content: req.query?.itm_content,
-      itm_campaign: req.query?.itm_campaign,
-      itm_referrer: req.query?.itm_referrer,
-      recommendedCurrency,
-      interstitialPaymentConfig,
-      showSkipLink,
-      formatCurrency,
-      showCurrencyAndPaymentMethods: true, // TODO: remove hardcode
-      showInrGeoBanner,
-      showBrlGeoBanner,
-      showLATAMBanner,
-      latamCountryBannerDetails,
-      skipLinkTarget: req.session?.postCheckoutRedirect || '/project',
-      websiteRedesignPlansVariant: websiteRedesignPlansAssignment.variant,
-      countryCode,
-      shouldLoadHotjar,
-    })
-  }
-}
-
 async function successfulSubscription(req, res) {
   const user = SessionManager.getSessionUser(req.session)
 
@@ -828,15 +613,6 @@ async function getLatamCountryBannerDetails(req, res) {
   return latamCountryBannerDetails
 }
 
-async function getShouldLoadHotjar(req, res) {
-  const assignment = await SplitTestHandler.promises.getAssignment(
-    req,
-    res,
-    'hotjar-plans'
-  )
-  return assignment?.variant === 'enabled'
-}
-
 /**
  * Build a subscription change preview for display purposes
  *
@@ -886,10 +662,7 @@ function makeChangePreview(
 }
 
 module.exports = {
-  plansPage: expressify(plansPage),
-  plansPageLightDesign: expressify(plansPageLightDesign),
   userSubscriptionPage: expressify(userSubscriptionPage),
-  interstitialPaymentPage: expressify(interstitialPaymentPage),
   successfulSubscription: expressify(successfulSubscription),
   cancelSubscription,
   canceledSubscription: expressify(canceledSubscription),
@@ -904,7 +677,6 @@ module.exports = {
   recurlyNotificationParser,
   refreshUserFeatures: expressify(refreshUserFeatures),
   redirectToHostedPage: expressify(redirectToHostedPage),
-  plansBanners: _plansBanners,
   previewAddonPurchase: expressify(previewAddonPurchase),
   purchaseAddon,
   removeAddon,

+ 0 - 229
services/web/app/src/Features/Subscription/interstitialPaymentConfig.js

@@ -1,229 +0,0 @@
-const config = {
-  tableHead: {
-    individual_free: {},
-    individual_collaborator: {},
-    individual_professional: {},
-    student_student: {
-      showExtraContent: true,
-    },
-  },
-  highlightedColumn: {
-    index: 1,
-    text: {
-      monthly: 'most_popular',
-      annual: 'most_popular',
-    },
-  },
-  eventTrackingKey: 'paywall-plans-page-click',
-  showStudentsOnlyLabel: true,
-  features: [
-    {
-      divider: false,
-      items: [
-        {
-          feature: 'number_of_users',
-          info: 'number_of_users_info',
-          value: 'str',
-          plans: {
-            free: 'one_user',
-            collaborator: 'one_user',
-            professional: 'one_user',
-            student: 'one_user',
-          },
-        },
-        {
-          feature: 'max_collab_per_project',
-          info: 'max_collab_per_project_info',
-          value: 'str',
-          plans: {
-            free: 'you_plus_1',
-            collaborator: 'you_plus_10',
-            professional: 'unlimited_bold',
-            student: 'you_plus_6',
-          },
-        },
-      ],
-    },
-    {
-      divider: true,
-      dividerLabel: 'you_and_collaborators_get_access_to',
-      dividerInfo: 'you_and_collaborators_get_access_to_info',
-      items: [
-        {
-          feature: 'compile_timeout_short',
-          info: 'compile_timeout_short_info_basic',
-          value: 'str',
-          plans: {
-            free: 'basic',
-            collaborator: '12x_basic',
-            professional: '12x_basic',
-            student: '12x_basic',
-          },
-        },
-        {
-          feature: 'compile_servers',
-          info: 'compile_servers_info',
-          value: 'str',
-          plans: {
-            free: 'fast',
-            collaborator: 'fastest',
-            professional: 'fastest',
-            student: 'fastest',
-          },
-        },
-        {
-          feature: 'realtime_track_changes',
-          info: 'realtime_track_changes_info_v2',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'full_doc_history',
-          info: 'full_doc_history_info_v2',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'reference_search',
-          info: 'reference_search_info_v2',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'git_integration_lowercase',
-          info: 'git_integration_lowercase_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-      ],
-    },
-    {
-      divider: true,
-      dividerLabel: 'you_get_access_to',
-      dividerInfo: 'you_get_access_to_info',
-      items: [
-        {
-          feature: 'powerful_latex_editor_and_realtime_collaboration',
-          info: 'powerful_latex_editor_and_realtime_collaboration_info',
-          value: 'bool',
-          plans: {
-            free: true,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'unlimited_projects',
-          info: 'unlimited_projects_info',
-          value: 'bool',
-          plans: {
-            free: true,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'thousands_templates',
-          info: 'hundreds_templates_info',
-          value: 'bool',
-          plans: {
-            free: true,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'symbol_palette',
-          info: 'symbol_palette_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'github_only_integration_lowercase',
-          info: 'github_only_integration_lowercase_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'dropbox_integration_lowercase',
-          info: 'dropbox_integration_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'mendeley_integration_lowercase',
-          info: 'mendeley_integration_lowercase_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'zotero_integration_lowercase',
-          info: 'zotero_integration_lowercase_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-        {
-          feature: 'priority_support',
-          info: 'priority_support_info',
-          value: 'bool',
-          plans: {
-            free: false,
-            collaborator: true,
-            professional: true,
-            student: true,
-          },
-        },
-      ],
-    },
-  ],
-}
-
-module.exports = config

+ 0 - 64
services/web/app/src/Features/Subscription/plansConfig.js

@@ -1,64 +0,0 @@
-const plansFeatures = require('./plansFeatures')
-
-const config = {
-  individual: {
-    maxColumn: 3,
-    tableHead: {
-      individual_free: {},
-      individual_collaborator: {},
-      individual_professional: {},
-    },
-    features: plansFeatures.individual,
-    highlightedColumn: {
-      index: 1,
-      text: {
-        monthly: 'most_popular',
-        annual: 'most_popular',
-      },
-    },
-    eventTrackingKey: 'plans-page-click',
-    additionalEventSegmentation: {},
-  },
-  group: {
-    maxColumn: 3,
-    tableHead: {
-      group_collaborator: {},
-      group_professional: {},
-      group_organization: {},
-    },
-    features: plansFeatures.group,
-    highlightedColumn: {
-      index: 0,
-      text: {
-        annual: 'most_popular',
-      },
-    },
-    eventTrackingKey: 'plans-page-click',
-    additionalEventSegmentation: {},
-  },
-  student: {
-    baseColspan: 1,
-    maxColumn: 3,
-    tableHead: {
-      student_free: {
-        colspan: 1,
-      },
-      student_student: {
-        showExtraContent: false,
-        colspan: 1,
-      },
-    },
-    features: plansFeatures.student,
-    highlightedColumn: {
-      index: 1,
-      text: {
-        monthly: 'save_20_percent_by_paying_annually',
-        annual: 'saving_20_percent',
-      },
-    },
-    eventTrackingKey: 'plans-page-click',
-    additionalEventSegmentation: {},
-  },
-}
-
-module.exports = config

+ 0 - 651
services/web/app/src/Features/Subscription/plansFeatures.js

@@ -1,651 +0,0 @@
-const individualPlans = [
-  {
-    divider: false,
-    items: [
-      {
-        feature: 'number_of_users',
-        info: 'number_of_users_info',
-        value: 'str',
-        plans: {
-          free: 'one_user',
-          collaborator: 'one_user',
-          professional: 'one_user',
-        },
-      },
-      {
-        feature: 'max_collab_per_project',
-        info: 'max_collab_per_project_info',
-        value: 'str',
-        plans: {
-          free: 'you_plus_1',
-          collaborator: 'you_plus_10',
-          professional: 'unlimited_bold',
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'you_and_collaborators_get_access_to',
-    dividerInfo: 'you_and_collaborators_get_access_to_info',
-    items: [
-      {
-        feature: 'compile_timeout_short',
-        info: 'compile_timeout_short_info_basic',
-        value: 'str',
-        plans: {
-          free: 'basic',
-          collaborator: '12x_basic',
-          professional: '12x_basic',
-        },
-      },
-      {
-        feature: 'compile_servers',
-        info: 'compile_servers_info',
-        value: 'str',
-        plans: {
-          free: 'fast',
-          collaborator: 'fastest',
-          professional: 'fastest',
-        },
-      },
-      {
-        feature: 'realtime_track_changes',
-        info: 'realtime_track_changes_info_v2',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'full_doc_history',
-        info: 'full_doc_history_info_v2',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'reference_search',
-        info: 'reference_search_info_v2',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'git_integration_lowercase',
-        info: 'git_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'you_get_access_to',
-    dividerInfo: 'you_get_access_to_info',
-    items: [
-      {
-        feature: 'powerful_latex_editor_and_realtime_collaboration',
-        info: 'powerful_latex_editor_and_realtime_collaboration_info',
-        value: 'bool',
-        plans: {
-          free: true,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'unlimited_projects',
-        info: 'unlimited_projects_info',
-        value: 'bool',
-        plans: {
-          free: true,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'thousands_templates',
-        info: 'hundreds_templates_info',
-        value: 'bool',
-        plans: {
-          free: true,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'symbol_palette',
-        info: 'symbol_palette_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'github_only_integration_lowercase',
-        info: 'github_only_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'dropbox_integration_lowercase',
-        info: 'dropbox_integration_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'mendeley_integration_lowercase',
-        info: 'mendeley_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'zotero_integration_lowercase',
-        info: 'zotero_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-      {
-        feature: 'priority_support',
-        info: 'priority_support_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          collaborator: true,
-          professional: true,
-        },
-      },
-    ],
-  },
-]
-
-const groupPlans = [
-  {
-    divider: false,
-    items: [
-      {
-        feature: 'number_of_users',
-        info: 'number_of_users_info',
-        value: 'str',
-        plans: {
-          group_standard: 'two_users',
-          group_professional: 'two_users',
-          organization: 'contact_sales',
-        },
-      },
-      {
-        feature: 'max_collab_per_project',
-        info: 'max_collab_per_project_info',
-        value: 'str',
-        plans: {
-          group_standard: 'project_owner_plus_10',
-          group_professional: 'unlimited_bold',
-          organization: 'unlimited_bold',
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'group_admins_get_access_to',
-    dividerInfo: 'group_admins_get_access_to_info',
-    items: [
-      {
-        feature: 'user_management',
-        info: 'user_management_info',
-        value: 'str',
-        plans: {
-          group_standard: 'subscription_admin_panel',
-          group_professional: 'subscription_admin_panel',
-          organization: 'automatic_user_registration',
-        },
-      },
-      {
-        feature: 'usage_metrics',
-        info: 'usage_metrics_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'managed_users_accounts',
-        info: 'managed_users_accounts_plan_info',
-        value: 'bool',
-        plans: {
-          group_standard: false,
-          group_professional: true,
-          organization: false,
-        },
-      },
-      {
-        feature: 'sso_integration',
-        info: 'sso_integration_info',
-        value: 'bool',
-        plans: {
-          group_standard: false,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'sitewide_option_available',
-        info: 'sitewide_option_available_info',
-        value: 'bool',
-        plans: {
-          group_standard: false,
-          group_professional: false,
-          organization: true,
-        },
-      },
-      {
-        feature: 'custom_resource_portal',
-        info: 'custom_resource_portal_info',
-        value: 'bool',
-        plans: {
-          group_standard: false,
-          group_professional: false,
-          organization: true,
-        },
-      },
-      {
-        feature: 'personalized_onboarding',
-        info: 'personalized_onboarding_info',
-        value: 'bool',
-        plans: {
-          group_standard: false,
-          group_professional: false,
-          organization: true,
-        },
-      },
-      {
-        feature: 'dedicated_account_manager',
-        info: 'dedicated_account_manager_info',
-        value: 'bool',
-        plans: {
-          group_standard: false,
-          group_professional: false,
-          organization: true,
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'group_members_and_collaborators_get_access_to',
-    dividerInfo: 'group_members_and_their_collaborators_get_access_to_info',
-    items: [
-      {
-        feature: 'compile_timeout_short',
-        info: 'compile_timeout_short_info_basic',
-        value: 'str',
-        plans: {
-          group_standard: 'four_minutes',
-          group_professional: 'four_minutes',
-          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',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'full_doc_history',
-        info: 'full_doc_history_info_v2',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'reference_search',
-        info: 'reference_search_info_v2',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'git_integration_lowercase',
-        info: 'git_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'group_members_get_access_to',
-    dividerInfo: 'group_members_get_access_to_info',
-    items: [
-      {
-        feature: 'powerful_latex_editor_and_realtime_collaboration',
-        info: 'powerful_latex_editor_and_realtime_collaboration_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'unlimited_projects',
-        info: 'unlimited_projects_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'thousands_templates',
-        info: 'hundreds_templates_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'symbol_palette',
-        info: 'symbol_palette_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'github_only_integration_lowercase',
-        info: 'github_only_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'dropbox_integration_lowercase',
-        info: 'dropbox_integration_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'mendeley_integration_lowercase',
-        info: 'mendeley_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'zotero_integration_lowercase',
-        info: 'zotero_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-      {
-        feature: 'priority_support',
-        info: 'priority_support_info',
-        value: 'bool',
-        plans: {
-          group_standard: true,
-          group_professional: true,
-          organization: true,
-        },
-      },
-    ],
-  },
-]
-
-const studentPlans = [
-  {
-    divider: false,
-    items: [
-      {
-        feature: 'number_of_users',
-        info: 'number_of_users_info',
-        value: 'str',
-        plans: {
-          free: 'one_user',
-          student: 'one_user',
-        },
-      },
-      {
-        feature: 'max_collab_per_project',
-        info: 'max_collab_per_project_info',
-        value: 'str',
-        plans: {
-          free: 'you_plus_1',
-          student: 'you_plus_6',
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'you_and_collaborators_get_access_to',
-    dividerInfo: 'you_and_collaborators_get_access_to_info',
-    items: [
-      {
-        feature: 'compile_timeout_short',
-        info: 'compile_timeout_short_info_basic',
-        value: 'str',
-        plans: {
-          free: 'basic',
-          student: '12x_basic',
-        },
-      },
-      {
-        feature: 'compile_servers',
-        info: 'compile_servers_info',
-        value: 'str',
-        plans: {
-          free: 'fast',
-          student: 'fastest',
-        },
-      },
-      {
-        feature: 'realtime_track_changes',
-        info: 'realtime_track_changes_info_v2',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'full_doc_history',
-        info: 'full_doc_history_info_v2',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'reference_search',
-        info: 'reference_search_info_v2',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'git_integration_lowercase',
-        info: 'git_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-    ],
-  },
-  {
-    divider: true,
-    dividerLabel: 'you_get_access_to',
-    dividerInfo: 'you_get_access_to_info',
-    items: [
-      {
-        feature: 'powerful_latex_editor_and_realtime_collaboration',
-        info: 'powerful_latex_editor_and_realtime_collaboration_info',
-        value: 'bool',
-        plans: {
-          free: true,
-          student: true,
-        },
-      },
-      {
-        feature: 'unlimited_projects',
-        info: 'unlimited_projects_info',
-        value: 'bool',
-        plans: {
-          free: true,
-          student: true,
-        },
-      },
-      {
-        feature: 'thousands_templates',
-        info: 'thousands_templates_info',
-        value: 'bool',
-        plans: {
-          free: true,
-          student: true,
-        },
-      },
-      {
-        feature: 'symbol_palette',
-        info: 'symbol_palette_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'github_only_integration_lowercase',
-        info: 'github_only_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'dropbox_integration_lowercase',
-        info: 'dropbox_integration_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'mendeley_integration_lowercase',
-        info: 'mendeley_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'zotero_integration_lowercase',
-        info: 'zotero_integration_lowercase_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-      {
-        feature: 'priority_support',
-        info: 'priority_support_info',
-        value: 'bool',
-        plans: {
-          free: false,
-          student: true,
-        },
-      },
-    ],
-  },
-]
-
-module.exports = {
-  individual: individualPlans,
-  group: groupPlans,
-  student: studentPlans,
-}

+ 0 - 75
services/web/app/views/subscriptions/interstitial-payment-light-design.pug

@@ -1,75 +0,0 @@
-extends ../layout-website-redesign
-
-include ./plans/light-redesign/_mixins
-include ../_mixins/eyebrow
-include ../_mixins/links
-	
-block entrypointVar
-	- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
-
-block vars
-	- var suppressFooter = true
-	- var suppressNavbarRight = true
-	- var suppressCookieBanner = true
-
-block append meta
-	meta(name="ol-recommendedCurrency" content=recommendedCurrency)
-	meta(name="ol-itm_content" content=itm_content)
-	meta(name="ol-countryCode" content=countryCode)
-	meta(name="ol-websiteRedesignPlansVariant" content=websiteRedesignPlansVariant)
-	meta(name="ol-shouldLoadHotjar" data-type="boolean" content=shouldLoadHotjar)
-
-block content
-	main.website-redesign#main-content
-		.plans-page.plans-page-interstitial
-			.container
-				if showInrGeoBanner
-					.mb-5.notification.notification-type-success.text-center
-						div.notification-content !{translate("inr_discount_offer_plans_page_banner", {flag: '🇮🇳'})}
-				if showBrlGeoBanner
-					.mb-5.notification.notification-type-success.text-center
-						div.notification-content !{translate("brl_discount_offer_plans_page_banner", {flag: '🇧🇷'})}
-				if showLATAMBanner
-					.mb-5.notification.notification-type-success.text-center
-						div.notification-content !{translate("latam_discount_offer_plans_page_banner", {flag: latamCountryBannerDetails.latamCountryFlag, country: latamCountryBannerDetails.country, currency: latamCountryBannerDetails.currency, discount: latamCountryBannerDetails.discount })}
-
-				.row
-					.col-md-12.text-center
-						h1
-							+eyebrow(translate('plans_and_pricing_lowercase'))
-							| #{translate('choose_your_plan')}
-
-				+monthly_annual_switch("monthly", "paywall-plans-page-toggle", '{}')
-
-				.plans-table-sticky-header-container
-					+plans_table_sticky_header(true, interstitialPaymentConfig)
-
-				.row.plans-table-container(data-ol-plans-v2-period='monthly')
-					.col-sm-12
-						.row
-							table.card.plans-table.plans-table-individual
-								+plans_table('monthly', interstitialPaymentConfig)
-
-				.row.plans-table-container(hidden data-ol-plans-v2-period='annual')
-					.col-sm-12
-						.row
-							table.card.plans-table.plans-table-individual
-								+plans_table('annual', interstitialPaymentConfig)
-
-				if (showCurrencyAndPaymentMethods)
-					+currency_and_payment_methods()
-
-				//- 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)
-
-			if (showSkipLink)
-				.row.row-spaced-small.text-center
-					+linkWithArrow({
-						text: translate("continue_with_free_plan"),
-						href: skipLinkTarget,
-						eventTracking: 'skip-button-click',
-						eventSegmentation: {location: 'interstitial-page'},
-						eventTrackingTrigger: 'click'
-					})
-
-	!= moduleIncludes("contactModalGeneral-marketing", locals)

+ 0 - 72
services/web/app/views/subscriptions/interstitial-payment.pug

@@ -1,72 +0,0 @@
-extends ../layout-marketing
-
-include ./plans/_mixins
-	
-block entrypointVar
-	- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
-
-block vars
-	- var suppressFooter = true
-	- var suppressNavbarRight = true
-	- var suppressCookieBanner = true
-
-block append meta
-	meta(name="ol-recommendedCurrency" content=recommendedCurrency)
-	meta(name="ol-itm_content" content=itm_content)
-	meta(name="ol-countryCode" content=countryCode)
-	meta(name="ol-websiteRedesignPlansVariant" content=websiteRedesignPlansVariant)
-	meta(name="ol-shouldLoadHotjar" data-type="boolean" content=shouldLoadHotjar)
-
-block content
-	main.content.content-alt#main-content
-		.content-page
-			.plans
-				.container
-					if showInrGeoBanner
-						div.notification.notification-type-success.text-centered
-							div.notification-content !{translate("inr_discount_offer_plans_page_banner", {flag: '🇮🇳'})}
-					if showBrlGeoBanner
-						div.notification.notification-type-success.text-centered
-							div.notification-content !{translate("brl_discount_offer_plans_page_banner", {flag: '🇧🇷'})}
-					if showLATAMBanner
-						div.notification.notification-type-success.text-centered
-							div.notification-content !{translate("latam_discount_offer_plans_page_banner", {flag: latamCountryBannerDetails.latamCountryFlag, country: latamCountryBannerDetails.country, currency: latamCountryBannerDetails.currency, discount: latamCountryBannerDetails.discount })}
-
-					.row
-						.col-md-12
-							.page-header.centered.plans-header.text-centered.top-page-header
-								h1.text-capitalize #{translate('choose_your_plan')}
-
-					+monthly_annual_switch("monthly", "paywall-plans-page-toggle", '{}')
-
-					+plans_v2_table_sticky_header(true, interstitialPaymentConfig)
-
-					.row.plans-v2-table-container(data-ol-plans-v2-period='monthly')
-						.col-sm-12
-							.row
-								table.card.plans-v2-table.plans-v2-table-individual
-									+plans_v2_table('monthly', interstitialPaymentConfig)
-
-					.row.plans-v2-table-container(hidden data-ol-plans-v2-period='annual')
-						.col-sm-12
-							.row
-								table.card.plans-v2-table.plans-v2-table-individual
-									+plans_v2_table('annual', interstitialPaymentConfig)
-
-					if (showCurrencyAndPaymentMethods)
-						+currency_and_payment_methods()
-
-					//- 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)
-
-		if (showSkipLink)
-			.row.row-spaced-small.text-center
-				a(href=skipLinkTarget
-					event-tracking="skip-button-click"
-					event-tracking-mb="true"
-					event-tracking-trigger="click"
-					event-segmentation='{"location": "interstitial-page"}'
-				)
-					| #{translate("continue_with_free_plan")}			
-
-	!= moduleIncludes("contactModalGeneral-marketing", locals)

+ 0 - 59
services/web/app/views/subscriptions/plans-light-design.pug

@@ -1,59 +0,0 @@
-extends ../layout-website-redesign
-include ../_mixins/quote
-include ../_mixins/eyebrow
-
-block vars
-	- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
-	- var suppressRelAlternateLinks = true
-	- metadata.canonicalURL = (settings.siteUrl ? settings.siteUrl : '') + '/user/subscription/plans'
-
-block append meta
-	meta(name="ol-recommendedCurrency" content=recommendedCurrency)
-	meta(name="ol-groupPlans" data-type="json" content=groupPlans)
-	meta(name="ol-itm_content" content=itm_content)
-	meta(name="ol-currentView" content=currentView)
-	meta(name="ol-countryCode" content=countryCode)
-	meta(name="ol-websiteRedesignPlansVariant" content=websiteRedesignPlansVariant)
-	meta(name="ol-shouldLoadHotjar" data-type="boolean" content=shouldLoadHotjar)
-
-block content
-	main.website-redesign#main-content
-		.plans-page
-			.container
-				if showInrGeoBanner
-					.mb-5.notification.notification-type-success.text-center
-						div.notification-content !{translate("inr_discount_offer_plans_page_banner", {flag: '🇮🇳'})}
-				if showBrlGeoBanner
-					.mb-5.notification.notification-type-success.text-center
-						div.notification-content !{translate("brl_discount_offer_plans_page_banner", {flag: '🇧🇷'})}
-				if showLATAMBanner
-					.mb-5.notification.notification-type-success.text-center
-						div.notification-content !{translate("latam_discount_offer_plans_page_banner", {flag: latamCountryBannerDetails.latamCountryFlag, country: latamCountryBannerDetails.country, currency: latamCountryBannerDetails.currency, discount: latamCountryBannerDetails.discount })}
-
-				.row
-					.col-md-12
-						h1.text-center
-							+eyebrow(translate('plans_and_pricing_lowercase'))
-							| #{translate('choose_your_plan')}
-
-				include ./plans/light-redesign/_cards_controls_tables
-					
-				+currency_and_payment_methods()
-
-				//- TODO: changing .plans-page-quote-row-hidden causes flickering on page load
-				.plans-page-quote-row(data-ol-show-for-plan-type="individual")
-					+collinsQuote1()
-
-				.plans-page-quote-row.plans-page-quote-row-hidden(data-ol-show-for-plan-type="group")
-					+bennettQuote1()
-
-				.plans-page-quote-row.plans-page-quote-row-hidden(data-ol-show-for-plan-type="student")
-					+collinsQuote2()
-				
-				include ./plans/_university_info_light_design
-
-				include ./plans/_faq_new
-
-			include ./plans/light-redesign/_group_plan_modal
-
-	!= moduleIncludes("contactModalGeneral-marketing", locals)

+ 0 - 57
services/web/app/views/subscriptions/plans.pug

@@ -1,57 +0,0 @@
-extends ../layout-marketing
-
-block entrypointVar
-	- entrypoint = 'pages/user/subscription/plans-v2/plans-v2-main'
-
-block append meta
-	meta(name="ol-recommendedCurrency" content=recommendedCurrency)
-	meta(name="ol-groupPlans" data-type="json" content=groupPlans)
-	meta(name="ol-itm_content" content=itm_content)
-	meta(name="ol-currentView" content=currentView)
-	meta(name="ol-countryCode" content=countryCode)
-	meta(name="ol-websiteRedesignPlansVariant" content=websiteRedesignPlansVariant)
-	meta(name="ol-shouldLoadHotjar" data-type="boolean" content=shouldLoadHotjar)
-
-block content
-	main.content.content-alt#main-content
-		.content-page
-			.plans
-				.container
-					if showInrGeoBanner
-						div.notification.notification-type-success.text-centered
-							div.notification-content !{translate("inr_discount_offer_plans_page_banner", {flag: '🇮🇳'})}
-					if showBrlGeoBanner
-						div.notification.notification-type-success.text-centered
-							div.notification-content !{translate("brl_discount_offer_plans_page_banner", {flag: '🇧🇷'})}
-					if showLATAMBanner
-						div.notification.notification-type-success.text-centered
-							div.notification-content !{translate("latam_discount_offer_plans_page_banner", {flag: latamCountryBannerDetails.latamCountryFlag, country: latamCountryBannerDetails.country, currency: latamCountryBannerDetails.currency, discount: latamCountryBannerDetails.discount })}
-
-					.row
-						.col-md-12
-							.page-header.centered.plans-header.text-centered.top-page-header
-								h1.text-capitalize #{translate('choose_your_plan')}
-
-					include ./plans/_cards_controls_tables
-					
-					+currency_and_payment_methods()
-
-					include ./plans/_university_info
-
-					include ./plans/_quotes
-
-					include ./plans/_faq
-
-					.row.row-spaced-large
-						.col-md-12
-							.plans-header.text-centered
-								hr
-								h2 #{translate('still_have_questions')}
-								button.btn.plans-v2-btn-header.text-capitalize(
-									data-ol-open-contact-form-modal="general"
-								) #{translate('contact_us')}
-
-					.row.row-spaced-large
-
-	include ./plans/_group_plan_modal
-	!= moduleIncludes("contactModalGeneral-marketing", locals)

+ 0 - 74
services/web/app/views/subscriptions/plans/_cards_controls_tables.pug

@@ -1,74 +0,0 @@
-include ./_mixins
-
-.row.plans-v2-top-switch
-	.col-xs-12
-		ul.nav.plans-v2-nav(role="tablist")
-			li.active.plans-v2-top-switch-individual(
-				data-ol-plans-v2-view-tab='individual'
-				event-tracking="plans-page-toggle-plan"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "individual"}'
-				role="presentation"
-			)
-				button.btn.btn-default-outline(role="tab" aria-controls="panel-individual" aria-selected="true") #{translate("indvidual_plans")}
-			li.plans-v2-top-switch-group(
-				data-ol-plans-v2-view-tab='group'
-				event-tracking="plans-page-toggle-plan"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "group"}'
-				role="presentation"
-			)
-				button.btn.btn-default-outline(
-					aria-controls="panel-group"
-					href="#"
-					role="tab"
-					aria-selected="false"
-				)
-					span #{translate("group_plans")} 
-					span (#{translate("save_30_percent_or_more")})
-			li.plans-v2-top-switch-student(
-				data-ol-plans-v2-view-tab='student'
-				event-tracking="plans-page-toggle-plan"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "student"}'
-				role="presentation"
-			)
-				button.btn.btn-default-outline(
-					aria-controls="panel-student"
-					href="#"
-					role="tab"
-					aria-selected="false"					
-				) #{translate("student_plans")}
-
-+monthly_annual_switch("annual", "plans-page-toggle-period")
-
-.row(hidden data-ol-plans-v2-license-picker-container)
-	.col-sm-12
-		+group_plans_license_picker()
-
-+table_sticky_header_all(plansConfig)
-
-.row.plans-v2-table-container(hidden data-ol-plans-v2-period='monthly')
-	.col-sm-12(data-ol-plans-v2-view='individual' role="tabpanel")
-		.row
-			+table_individual('monthly')
-	.col-sm-12(hidden data-ol-plans-v2-view='student' role="tabpanel")
-		.row
-			+table_student('monthly')
-
-.row.plans-v2-table-container(data-ol-plans-v2-period='annual')
-	.col-sm-12(data-ol-plans-v2-view='individual' id="panel-individual" role="tabpanel")
-		.row
-			+table_individual('annual')
-	.col-sm-12(hidden data-ol-plans-v2-view='group' id="panel-group" role="tabpanel")
-		.row
-			+table_group('annual')
-	.col-sm-12(hidden data-ol-plans-v2-view='student' id="panel-student" role="tabpanel")
-		.row
-			+table_student('annual')
-
-//- 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)

+ 0 - 43
services/web/app/views/subscriptions/plans/_faq.pug

@@ -1,43 +0,0 @@
-.plans-v2-faq
-	.row.row-spaced-large
-		.col-md-12
-			.page-header.plans-header.text-centered
-				h2 FAQ
-	.row
-		.col-md-12
-			h3 #{translate('faq_what_is_the_difference_between_users_and_collaborators_question')}
-			p !{translate('faq_what_is_the_difference_between_users_and_collaborators_answer_first_paragraph', {}, [{name: 'strong'}])}
-			br
-			p #{translate('faq_what_is_the_difference_between_users_and_collaborators_answer_second_paragraph')}
-	.row
-		.col-md-12
-			h3 #{translate('faq_do_collab_need_on_paid_plan_question')}
-			p !{translate('faq_do_collab_need_on_paid_plan_answer', {}, [{ name: 'a', attrs: { href: "/learn/how-to/Overleaf_Accounts_and_Subscriptions", target: '_blank'}}, { name: 'a', attrs: { href: "/learn/how-to/Overleaf_premium_features", target: '_blank'}}])}
-	.row
-		.col-md-12
-			h3 #{translate('faq_i_have_free_account_want_subscription_how_question')}
-			p !{translate('faq_i_have_free_account_want_subscription_how_answer_first_paragraph', {}, [{ name: 'a', attrs: { href: "/for/universities", target: '_blank'}}])}
-			br
-			p !{translate('faq_i_have_free_account_want_subscription_how_answer_second_paragraph', {}, [{ name: 'a', attrs: { href: "/learn/how-to/Overleaf_Accounts_and_Subscriptions", target: '_blank'}}])}
-	.row
-		.col-md-12
-			h3 #{translate('faq_the_individual_standard_plan_10_collab_question')}
-			p #{translate('faq_the_individual_standard_plan_10_collab_first_paragraph')}
-			br
-			p !{translate('faq_the_individual_standard_plan_10_collab_second_paragraph', {}, [{ name: 'a', attrs: { href: "/learn/how-to/Overleaf_premium_features#Account_and_project_level_features", target: '_blank'}}])}
-	.row
-		.col-md-12
-			h3 #{translate('faq_how_does_a_group_plan_work_question')}
-			p !{translate('faq_how_does_a_group_plan_work_answer', {}, [{ name: 'a', attrs: { href: "/learn/how-to/Joining_an_Overleaf_Group_Subscription", target: '_blank'}}, { name: 'a', attrs: { href: "/learn/how-to/Managing_a_group_subscription", target: '_blank'}}, { name: 'a', attrs: { href: "/contact", target: '_blank'}}])}
-	.row
-		.col-md-12
-			h3 #{translate('faq_how_free_trial_works_question')}
-			p #{translate('faq_how_free_trial_works_answer_v2', { len:'7' })}
-	.row
-		.col-md-12
-			h3 #{translate('faq_change_plans_or_cancel_question')}
-			p #{translate('faq_change_plans_or_cancel_answer')}
-	.row
-		.col-md-12
-			h3 #{translate('faq_pay_by_invoice_question')}
-			p #{translate('faq_pay_by_invoice_answer_v2')}

+ 0 - 111
services/web/app/views/subscriptions/plans/_group_plan_modal.pug

@@ -1,111 +0,0 @@
-div.modal.fade(tabindex="-1" role="dialog" data-ol-group-plan-modal)
-	.modal-dialog(role="document")
-		.modal-content
-			.modal-header
-				button.close(
-					type="button"
-					data-dismiss="modal"
-					aria-label=translate("close")
-				)
-					span(aria-hidden="true") ×
-				h2 #{translate("customize_your_group_subscription")}
-				h3 #{translate("save_30_percent_or_more_uppercase")}
-			.modal-body.plans.group-subscription-modal
-				.container-fluid
-					.row
-						.col-md-6.text-center
-							.circle.circle-lg
-								span(data-ol-group-plan-display-price) ...
-								span.small / #{translate('year')}
-								br
-								span.circle-subtext(data-ol-group-plan-price-per-user=translate('per_user')) ...
-							ul.list-unstyled
-								li #{translate('each_user_will_have_access_to')}:
-								li  
-								li(
-									hidden=(groupPlanModalDefaults.plan_code !== 'collaborator')
-									data-ol-group-plan-plan-code='collaborator'
-								)
-									strong #{translate("collabs_per_proj", {collabcount:10})}
-								li(
-									hidden=(groupPlanModalDefaults.plan_code !== 'professional')
-									data-ol-group-plan-plan-code='professional'
-								)
-									strong #{translate("unlimited_collabs")}
-								+features_premium
-						.col-md-6
-							form.form(data-ol-group-plan-form)
-								.form-group
-									label(for='plan_code')
-										| #{translate('plan')}
-									for plan_code in groupPlanModalOptions.plan_codes
-										label.group-plan-option
-											input(
-												type="radio"
-												name="plan_code"
-												checked=(plan_code.code === "collaborator")
-												value=plan_code.code
-												data-ol-group-plan-code=plan_code.code
-											)
-											span #{translate(plan_code.i18n)}
-								.form-group
-									label(for='size')
-										| #{translate('number_of_users')}
-									select.form-control(
-										id="size"
-										event-tracking="groups-modal-group-size"
-										event-tracking-mb="true"
-										event-tracking-trigger="click"
-										event-tracking-element="select"
-									)
-										for size in groupPlanModalOptions.sizes
-											option(
-												value=size
-												selected=(size === groupPlanModalDefaults.size)
-											) #{size}
-								.form-group(data-ol-group-plan-form-currency)
-									label(for='currency')
-										| #{translate('currency')}
-									select.form-control(id="currency")
-										for currency in groupPlanModalOptions.currencies
-											option(
-												value=currency.code
-												selected=(currency.code === groupPlanModalDefaults.currency)
-											) #{currency.display}
-								.form-group
-									label(for='usage')
-										| #{translate('educational_discount_for_groups_of_ten_or_more')}
-								label.group-plan-option
-									input(
-										id="usage"
-										type="checkbox"
-										autocomplete="off"
-										event-tracking="groups-modal-edu-discount"
-										event-tracking-mb="true"
-										event-tracking-trigger="click"
-										event-tracking-element="checkbox"
-									)
-									span #{translate('educational_discount_disclaimer')}
-
-					.row
-						.col-md-12.text-center
-							.educational-discount-badge
-								div(hidden=(groupPlanModalDefaults.usage !== 'educational') data-ol-group-plan-educational-discount)
-									p.applied(hidden=true data-ol-group-plan-educational-discount-applied)
-										| #{translate('educational_discount_applied')}
-									p.ineligible(hidden=true data-ol-group-plan-educational-discount-ineligible)
-										| #{translate('educational_discount_available_for_groups_of_ten_or_more')}
-			.modal-footer
-				.text-center
-					button.btn.btn-primary.btn-lg(
-						data-ol-purchase-group-plan
-						event-tracking="form-submitted-groups-modal-purchase-click"
-						event-tracking-mb="true"
-						event-tracking-trigger="click"
-						) #{translate('purchase_now')}
-					hr.thin
-					a(
-						href
-						data-ol-open-contact-form-for-more-than-50-licenses
-					) #{translate('need_more_than_to_licenses_get_in_touch')}
-

+ 0 - 646
services/web/app/views/subscriptions/plans/_mixins.pug

@@ -1,646 +0,0 @@
-mixin features_premium
-	li  
-	li
-		strong #{translate('all_premium_features')}
-	li #{translate('sync_dropbox_github')}
-	li #{translate('full_doc_history')}
-	li #{translate('track_changes')}
-	li + #{translate('more').toLowerCase()}
-
-mixin gen_localized_price_for_plan_view(plan, view)
-	span #{formatCurrency(settings.localizedPlanPricing[recommendedCurrency][plan][view], recommendedCurrency, language, true)}
-
-mixin currency_and_payment_methods()
-	.row.row-spaced-large.text-centered
-		.col-xs-12
-			p.text-centered
-				strong #{translate("all_prices_displayed_are_in_currency", { recommendedCurrency })}
-				|  
-				span #{translate("subject_to_additional_vat")}
-			i.fa.fa-cc-mastercard.fa-2x(aria-hidden="true")  
-			span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Mastercard' })}
-			i.fa.fa-cc-visa.fa-2x(aria-hidden="true")  
-			span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Visa' })}
-			i.fa.fa-cc-amex.fa-2x(aria-hidden="true")  
-			span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Amex' })}
-			i.fa.fa-cc-paypal.fa-2x(aria-hidden="true")  
-			span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Paypal' })}
-
-
-mixin plans_v2_table(period, config)
-	- var baseColspan = config.baseColspan || 1
-	- var maxColumn = config.maxColumn || 4
-	- var tableHeadKeys = Object.keys(config.tableHead)
-	tr(class=`plans-v2-table-cols-${tableHeadKeys.length}`)
-		th(colspan=baseColspan)
-		- for (var i = 0; i < maxColumn; i++)
-			- var tableHeadKey = tableHeadKeys[i]
-			- var tableHeadOptions = Object.values(config.tableHead)[i] || {}
-			- var colspan = tableHeadOptions.colspan || baseColspan
-			- var highlighted = i === config.highlightedColumn.index
-			- var eventTrackingKey = config.eventTrackingKey
-			- var additionalEventSegmentation = config.additionalEventSegmentation || {}
-			-
-				if (highlighted) {
-					var thClass = 'plans-v2-table-green-highlighted'
-				} else if (i === config.highlightedColumn.index - 1) {
-					var thClass = 'plans-v2-table-cell-before-green-highlighted-column'
-				} else {
-					var thClass = ''
-				}
-				thClass += ' plans-v2-table-column-header'
-				if (colspan > 1) {
-					var scopeValue = 'colgroup'
-				}
-				else {
-					var scopeValue = 'col'
-				}
-			case tableHeadKey
-				when 'individual_free'
-					- var ariaLabel = translate("free")
-				when 'individual_collaborator'
-					- var ariaLabel = translate("standard")
-				when 'individual_professional'
-					- var ariaLabel = translate("professional")
-				when 'group_collaborator'
-					- var ariaLabel = translate("group_standard")
-				when 'group_professional'
-					- var ariaLabel = translate("group_professional")
-				when 'group_organization'
-					- var ariaLabel = translate("organization")
-				when 'student_free'
-					- var ariaLabel = translate("free")
-				when 'student_student'
-					- var ariaLabel = translate("student")
-				when 'student_university'
-					- var ariaLabel = translate("university")
-				default
-					- var ariaLabel = undefined
-			th(
-				aria-label=ariaLabel
-				class=thClass
-				colspan=colspan
-				scope=scopeValue
-			)
-				.plans-v2-table-th
-					if (highlighted)
-						p.plans-v2-table-green-highlighted-text #{translate(config.highlightedColumn.text[period]).toUpperCase()}
-					case tableHeadKey
-						when 'individual_free'
-							+table_head_individual_free(highlighted, period)
-						when 'individual_collaborator'
-							+table_head_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-						when 'individual_professional'
-							+table_head_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-						when 'group_collaborator'
-							+table_head_group_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation)
-						when 'group_professional'
-							+table_head_group_professional(highlighted, eventTrackingKey, additionalEventSegmentation)
-						when 'group_organization'
-							+table_head_group_organization(highlighted, eventTrackingKey, additionalEventSegmentation)
-						when 'student_free'
-							+table_head_student_free(highlighted, period)
-						when 'student_student'
-							+table_head_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period, tableHeadOptions.showExtraContent)
-						when 'student_university'
-							+table_head_student_university(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-	for featuresPerSection in config.features
-		- var dividerColspan = Object.values(config.tableHead).reduce((prev, curr) => (prev) + (curr.colspan || 1), baseColspan)
-		if featuresPerSection.divider
-			tr.plans-v2-table-divider
-				td(
-					colspan=dividerColspan
-					class=((config.highlightedColumn.index === Object.keys(config.tableHead).length - 1) ? 'plans-v2-table-divider-highlighted' : '')
-				)
-					div
-						b.plans-v2-table-divider-label #{translate(featuresPerSection.dividerLabel)}
-						//- will only appear on screen width >= 768px (using CSS)
-						i.fa.fa-question-circle.plans-v2-table-divider-question-icon(
-							data-toggle="tooltip"
-							title=translate(featuresPerSection.dividerInfo),
-							data-placement="top"
-						)
-						//- will only appear on screen width < 768px (using CSS)
-						span.plans-v2-table-divider-learn-more-container
-							span (
-							span.plans-v2-table-divider-learn-more-text(
-								data-toggle="tooltip"
-								title=translate(featuresPerSection.dividerInfo),
-								data-placement="top"
-							) #{translate("learn_more_lowercase")}
-							span )
-						span.sr-only #{translate(featuresPerSection.dividerInfo)}
-		for feature, featureIndex in featuresPerSection.items
-			tr(
-				class=(featureIndex === (featuresPerSection.items.length - 1) ? `plans-v2-table-row-last-row-per-section plans-v2-table-cols-${tableHeadKeys.length}` : `plans-v2-table-cols-${tableHeadKeys.length}`)
-			)
-				th(
-					class="plans-v2-table-row-header"
-					event-tracking="plans-page-table"
-					event-tracking-trigger="hover"
-					event-tracking-ga="subscription-funnel"
-					event-tracking-label=`${feature.feature}`
-					colspan=baseColspan
-					scope="row"
-				)
-					.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 )
-							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 === 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)
-
-mixin table_individual(period)
-	table.card.plans-v2-table.plans-v2-table-individual
-		+plans_v2_table(period, plansConfig.individual)
-
-mixin table_group
-	table.card.plans-v2-table.plans-v2-table-group
-		+plans_v2_table('annual', plansConfig.group)
-
-mixin table_student(period)
-	table.card.plans-v2-table.plans-v2-table-student
-		+plans_v2_table(period, plansConfig.student)
-
-mixin table_head_individual_free(highlighted, period)
-	.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("free")}
-		+table_head_price('free', period)
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_individual_free(highlighted)
-		ul.plans-v2-table-th-content-benefit
-			li #{translate("one_collaborator")}
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_individual_free(highlighted)
-
-mixin table_head_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("standard")}
-		+table_head_price('collaborator', period)
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-		ul.plans-v2-table-th-content-benefit
-			li !{translate("x_collaborators_per_project", {collaboratorsCount: '10'})}
-			li #{translate("all_premium_features")}
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-mixin table_head_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("professional")}
-		+table_head_price('professional', period)
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-		ul.plans-v2-table-th-content-benefit
-			li !{translate("unlimited_collabs_rt",{},["b"])}
-			li #{translate("all_premium_features")}
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-mixin table_head_group_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation)
-	.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("group_standard")}
-		.plans-v2-table-price-container
-			s.plans-v2-table-price-before-discount
-				+gen_localized_price_for_plan_view('collaborator', 'annual')
-			p.plans-v2-table-price
-				span(data-ol-plans-v2-group-price-per-user='collaborator') #{initialLocalizedGroupPrice.pricePerUser.collaborator}
-			p.plans-v2-table-price-period-label
-				| #{translate('per_user_year')}
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_group_collaborator(highlighted, eventTrackingKey)
-			+additional_link_group(eventTrackingKey, additionalEventSegmentation, 'group_collaborator')
-		ul.plans-v2-table-th-content-benefit
-			li #{translate("up_to")} !{translate("x_collaborators_per_project", {collaboratorsCount: '10'})}
-			li
-				+table_head_group_total_per_year('collaborator')
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_group_collaborator(highlighted, eventTrackingKey)
-			+additional_link_group(eventTrackingKey, additionalEventSegmentation, 'group_collaborator')
-
-mixin table_head_group_professional(highlighted, eventTrackingKey, additionalEventSegmentation)
-	.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("group_professional")}
-		.plans-v2-table-price-container
-			s.plans-v2-table-price-before-discount
-				+gen_localized_price_for_plan_view('professional', 'annual')
-			p.plans-v2-table-price
-				span(data-ol-plans-v2-group-price-per-user='professional') #{initialLocalizedGroupPrice.pricePerUser.professional}
-			p.plans-v2-table-price-period-label
-				| #{translate('per_user_year')}
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_group_professional(highlighted, eventTrackingKey)
-			+additional_link_group(eventTrackingKey, additionalEventSegmentation, 'group_professional')
-		ul.plans-v2-table-th-content-benefit
-			li #{translate("unlimited_collaborators_in_each_project")}
-			li
-				+table_head_group_total_per_year('professional')
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_group_professional(highlighted, eventTrackingKey)
-			+additional_link_group(eventTrackingKey, additionalEventSegmentation, 'group_professional')
-
-mixin table_head_group_total_per_year(groupPlan)
-	- var initialLicenseSize = '2'
-	span.plans-v2-group-total-price(data-ol-plans-v2-group-total-price=groupPlan) #{initialLocalizedGroupPrice.price[groupPlan]}
-	| &nbsp;
-	for licenseSize in groupPlanModalOptions.sizes
-		span(
-			hidden=(licenseSize !== initialLicenseSize)
-			data-ol-plans-v2-table-th-group-license-size=licenseSize
-		) !{translate("total_per_year_for_x_users", {licenseSize})}
-
-mixin table_head_group_organization(highlighted, eventTrackingKey, additionalEventSegmentation)
-	- additionalEventSegmentation = additionalEventSegmentation || {}
-	- var segmentation = { ...additionalEventSegmentation, button: 'group_organization-link', location: 'table-header-list', period: 'annual', currency: recommendedCurrency }
-
-	.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("organization")}
-		.plans-v2-table-comments-icon
-			i.fa.fa-comments-o
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_group_organization(highlighted, eventTrackingKey)
-			small.plans-v2-table-th-content-additional-link.invisible(aria-hidden="true")
-		ul.plans-v2-table-th-content-benefit
-			li #{translate("best_choices_companies_universities_non_profits")}
-			li #{translate("for_groups_or_site_wide")}
-			li
-				a(
-					target="_blank"
-					href="/for/contact-sales"
-					event-tracking="plans-page-click"
-					event-tracking-mb="true"
-					event-tracking-trigger="click"
-					event-segmentation=segmentation
-				) #{translate("also_available_as_on_premises")}
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_group_organization(highlighted, eventTrackingKey)
-			small.plans-v2-table-th-content-additional-link.invisible(aria-hidden="true")
-
-mixin table_head_student_free(highlighted, period)
-	div.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("free")}
-		+table_head_price('free', period)
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_student_free(highlighted)
-		ul.plans-v2-table-th-content-benefit
-			li #{translate("one_collaborator")}
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_student_free(highlighted)
-
-mixin table_head_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period, showExtraContent)
-	div.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("student")}
-		+table_head_price('student', period)
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-		ul.plans-v2-table-th-content-benefit
-			li !{translate("x_collaborators_per_project", {collaboratorsCount: '6'})}
-			li #{translate("all_premium_features")}
-			if showExtraContent
-				li 
-					b !{translate("for_students_only")}
-
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-mixin table_head_student_university(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	div.plans-v2-table-th-content
-		p.plans-v2-table-th-content-title #{translate("university")}
-		div.plans-v2-table-comments-icon
-			i.fa.fa-comments-o
-		.plans-v2-table-btn-buy-container-mobile
-			+btn_buy_student_university(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-		p.plans-v2-table-th-content-benefit !{translate("all_our_group_plans_offer_educational_discount", {}, [{name: 'b'}, {name: 'b'}])}
-		.plans-v2-table-btn-buy-container-desktop
-			+btn_buy_student_university(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-mixin table_head_price(plan, period)
-	div.plans-v2-table-price-container
-		if plan !== 'free' && period === 'annual'
-			s.plans-v2-table-price-before-discount
-				+gen_localized_price_for_plan_view(plan, 'monthlyTimesTwelve')
-		p.plans-v2-table-price
-			+gen_localized_price_for_plan_view(plan, period)
-		p.plans-v2-table-price-period-label
-			if period == 'annual'
-				| #{translate("per_year")}
-			else
-				| #{translate("per_month")}
-
-mixin table_cell(feature, plan)
-	- var planValue = feature.plans[plan]
-	- var featureName = feature.feature
-
-	.plans-v2-table-cell
-		.plans-v2-table-cell-content(
-			data-ol-plans-v2-table-cell-plan=plan
-			data-ol-plans-v2-table-cell-feature=featureName
-		)
-			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")}
-
-mixin group_plans_license_picker()
-	form.plans-v2-license-picker-form(data-ol-plans-v2-license-picker-form)
-		.plans-v2-license-picker-select-container
-			span #{translate("number_of_users_with_colon")}
-			select.plans-v2-license-picker-select(
-				name="plans-v2-license-picker-select"
-				id="plans-v2-license-picker-select"
-				autocomplete="off"
-				data-ol-plans-v2-license-picker-select
-				event-tracking="plans-page-group-size"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-tracking-element="select"
-			)
-				option(value="2") 2
-				option(value="3") 3
-				option(value="4") 4
-				option(value="5") 5
-				option(value="10") 10
-				option(value="20") 20
-				option(value="50") 50
-		.plans-v2-license-picker-educational-discount
-			label.plans-v2-license-picker-educational-discount-label(data-ol-plans-v2-license-picker-educational-discount-label)
-				input.plans-v2-license-picker-educational-discount-checkbox(
-					type="checkbox"
-					id="license-picker-educational-discount"
-					autocomplete="off"
-					data-ol-plans-v2-license-picker-educational-discount-input
-					event-tracking="plans-page-edu-discount"
-					event-tracking-mb="true"
-					event-tracking-trigger="click"
-					event-tracking-element="checkbox"
-				)
-				span #{translate("apply_educational_discount")}
-			//- will only appear on screen width >= 768px (using CSS)
-			i.fa.fa-question-circle.plans-v2-license-picker-educational-discount-question-icon(
-				data-toggle="tooltip"
-				title=translate("apply_educational_discount_info"),
-				data-placement="bottom"
-			)
-			//- will only appear on screen width < 768px (using CSS)
-			span.plans-v2-license-picker-educational-discount-learn-more-container
-				span (
-				span.plans-v2-license-picker-educational-discount-learn-more-text(
-					data-toggle="tooltip"
-					title=translate("apply_educational_discount_info"),
-					data-placement="bottom"
-				) #{translate("learn_more_lowercase")}
-				span )
-			span.sr-only #{translate("apply_educational_discount_info")}
-
-mixin btn_buy_individual(highlighted, eventTrackingKey, subscriptionPlan, period) 
-	a.btn.plans-v2-table-btn-buy(
-		data-ol-start-new-subscription=subscriptionPlan
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view=period
-		class=(highlighted ? 'btn-primary' : 'btn-default')
-	)
-		if (period === 'monthly')
-			span #{translate("try_for_free")}
-		else 
-			span #{translate("buy_now_no_exclamation_mark")}
-
-mixin btn_buy_individual_free()
-	if (!getSessionUser())
-		a.btn.plans-v2-table-btn-buy(
-			href="/register"
-			class=(highlighted ? 'btn-primary' : 'btn-default')
-		)
-			span #{translate("try_for_free")}
-	else
-		a.btn.plans-v2-table-btn-buy.invisible(
-			aria-hidden="true"
-			class=(highlighted ? 'btn-primary' : 'btn-default')
-		)
-
-mixin btn_buy_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	+btn_buy_individual(highlighted, eventTrackingKey, 'collaborator', period)
-	if (period === 'monthly')
-		+additional_link_buy(eventTrackingKey, additionalEventSegmentation, 'collaborator', period)
-
-mixin btn_buy_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	+btn_buy_individual(highlighted, eventTrackingKey, 'professional', period)
-	if (period === 'monthly')
-		+additional_link_buy(eventTrackingKey, additionalEventSegmentation, 'professional', period)
-
-mixin btn_buy_group_collaborator(highlighted, eventTrackingKey) 
-	a.btn.plans-v2-table-btn-buy(
-		data-ol-start-new-subscription='group_collaborator'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view='annual'
-		data-ol-has-custom-href
-		data-ol-location='table-header'
-		class=(highlighted ? 'btn-primary' : 'btn-default')
-	)
-		span.hidden-desktop #{translate("customize")} 
-		span.hidden-mobile #{translate("customize_your_plan")}
-
-mixin btn_buy_group_professional(highlighted, eventTrackingKey) 
-	a.btn.plans-v2-table-btn-buy(
-		data-ol-start-new-subscription='group_professional'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view='annual'
-		data-ol-has-custom-href
-		data-ol-location='table-header'
-		class=(highlighted ? 'btn-primary' : 'btn-default')
-	)
-		span.hidden-desktop #{translate("customize")} 
-		span.hidden-mobile #{translate("customize_your_plan")}
-
-mixin btn_buy_group_organization(highlighted, eventTrackingKey) 
-	a.btn.plans-v2-table-btn-buy(
-		data-ol-start-new-subscription='group_organization'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view='annual'
-		data-ol-has-custom-href
-		data-ol-location='table-header'
-		href='/for/contact-sales'
-		target='_blank'
-		class=(highlighted ? 'btn-primary' : 'btn-default')
-	)
-		span #{translate("contact_us_lowercase")}
-
-mixin btn_buy_student_free(highlighted)
-	if (!getSessionUser())
-		a.btn.plans-v2-table-btn-buy(
-			href="/register"
-			class=(highlighted ? 'btn-primary' : 'btn-default')
-		)
-			span #{translate("try_for_free")}
-
-mixin btn_buy_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	a.btn.plans-v2-table-btn-buy(
-		data-ol-start-new-subscription='student'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view=period
-		data-ol-location='card'
-		class=(highlighted ? 'btn-primary' : 'btn-default')
-	)
-		if (period === 'monthly')
-			span #{translate("try_for_free")}
-		else 
-			span #{translate("buy_now_no_exclamation_mark")}
-	if (period === 'monthly')
-		+additional_link_buy(eventTrackingKey, additionalEventSegmentation, 'student', period)
-
-mixin btn_buy_student_university(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	- var segmentation = JSON.stringify(Object.assign({}, {button: 'student-university', location: 'table-header-list', period}, additionalEventSegmentation))
-	a.btn.plans-v2-table-btn-buy(
-		href="/for/contact-sales"
-		target="_blank"
-		event-tracking=eventTrackingKey
-		event-tracking-mb="true"
-		event-tracking-trigger="click"
-		event-segmentation=segmentation
-		class=(highlighted ? 'btn-primary' : 'btn-default')
-	)
-		span #{translate("contact_us_lowercase")}
-
-mixin additional_link_group(eventTrackingKey, additionalEventSegmentation, plan)
-	- var buttonSegmentation = plan + '-link'
-	- additionalEventSegmentation = additionalEventSegmentation || {}
-	- var segmentation = { ...additionalEventSegmentation, button: buttonSegmentation, location: 'table-header', currency: recommendedCurrency }
-	small.plans-v2-table-th-content-additional-link
-		| #{translate("or")} 
-		a(
-			href="/for/contact-sales"
-			target="_blank"
-			event-tracking=eventTrackingKey
-			event-tracking-mb="true"
-			event-tracking-trigger="click"
-			event-segmentation=segmentation
-		) #{translate("contact_us_lowercase")}
-
-mixin additional_link_buy(eventTrackingKey, additionalEventSegmentation, plan, period)
-	- var buttonSegmentation = plan + '-link'
-	- additionalEventSegmentation = additionalEventSegmentation || {}
-	- var segmentation = { ...additionalEventSegmentation, button: buttonSegmentation, location: 'table-header', currency: recommendedCurrency }
-	- var itmCampaign = itm_campaign ? { itm_campaign } : {itm_campaign: 'plans'}
-	- var itmReferrer = itm_referrer ? { itm_referrer } : {}
-	- var qs = new URLSearchParams({planCode: plan, currency: recommendedCurrency, itm_content: 'card', ...itmCampaign, ...itmReferrer})
-	small.plans-v2-table-th-content-additional-link
-		| #{translate("or")} 
-		a(
-			href=`/user/subscription/new?${qs.toString()}`
-			event-tracking=eventTrackingKey
-			event-tracking-mb="true"
-			event-tracking-trigger="click"
-			event-segmentation=segmentation
-		) #{translate("buy_now_no_exclamation_mark")}
-
-mixin plans_v2_table_sticky_header(withSwitch, config)
-	- var tableHeadKeys = Object.keys(config.tableHead)
-	.row.plans-v2-table-sticky-header.sticky(
-		data-ol-plans-v2-table-sticky-header
-		class=(withSwitch ? 'plans-v2-table-sticky-header-with-switch' : 'plans-v2-table-sticky-header-without-switch')
-	)
-		- for (var i = 0; i < tableHeadKeys.length; i++)
-			- var tableHeadKey = tableHeadKeys[i]
-			- var translateKey = tableHeadKey.split('_')[1]
-			-
-				if (config.highlightedColumn.index === i) {
-					var elClass = 'plans-v2-table-sticky-header-item-green-highlighted'
-				} else {
-					var elClass = ''
-				}
-			.plans-v2-table-sticky-header-item(
-				class=elClass
-			)
-				case tableHeadKey
-					when 'individual_collaborator'
-						span #{translate('standard')}
-					when 'group_professional'
-						span #{translate(tableHeadKey)}
-					when 'group_collaborator'
-						span #{translate('group_standard')}
-					default
-						span #{translate(translateKey)}
-
-mixin table_sticky_header_all(plansConfig)
-	.row.plans-v2-table-sticky-header-container(
-		data-ol-plans-v2-view='individual'
-	)
-		+plans_v2_table_sticky_header(true, plansConfig.individual)
-	.row.plans-v2-table-sticky-header-container(
-		hidden
-		data-ol-plans-v2-view='group'
-	)
-		+plans_v2_table_sticky_header(false, plansConfig.group)
-	.row.plans-v2-table-sticky-header-container(
-		hidden
-		data-ol-plans-v2-view='student'
-	)
-		+plans_v2_table_sticky_header(true, plansConfig.student)
-
-mixin monthly_annual_switch(initialState, eventTracking, eventSegmentation)
-	- var monthlyAnnualToggleChecked = initialState === 'monthly'
-	.row
-		.col-md-4.col-md-offset-4.text-centered.plans-v2-m-a-switch-container(data-ol-plans-v2-m-a-switch-container)
-			.plans-v2-m-a-switch-annual-text-container
-				span.underline(data-ol-plans-v2-m-a-switch-text='annual') #{translate("annual")}
-				.tooltip.in.left.plans-v2-m-a-tooltip(
-					role="tooltip"
-					data-ol-plans-v2-m-a-tooltip
-					class=monthlyAnnualToggleChecked ? 'plans-v2-m-a-tooltip-monthly-selected' : ''
-				)
-					.tooltip-arrow
-					.tooltip-inner
-						span(hidden=!monthlyAnnualToggleChecked data-ol-tooltip-period='monthly') #{translate("save_20_percent_by_paying_annually")}
-						span(hidden=monthlyAnnualToggleChecked data-ol-tooltip-period='annual') #{translate("saving_20_percent")}
-
-			label.plans-v2-m-a-switch(data-ol-plans-v2-m-a-switch)
-				input(
-					type="checkbox"
-					checked=monthlyAnnualToggleChecked
-					role="switch"
-					aria-label=translate("select_monthly_plans")
-					autocomplete="off"
-					event-tracking=eventTracking
-					event-tracking-mb="true"
-					event-tracking-trigger="click"
-					event-tracking-element="checkbox"
-					event-segmentation=eventSegmentation
-				)
-				span
-			span(data-ol-plans-v2-m-a-switch-text='monthly') #{translate("monthly")}

+ 0 - 25
services/web/app/views/subscriptions/plans/_quotes.pug

@@ -1,25 +0,0 @@
-.row.row-spaced-large
-	.col-md-12
-		.page-header.plans-header.text-centered
-			h2 #{translate('in_good_company')}
-.row
-	.col-md-6
-		div
-			.row
-				.col-md-3
-					.circle-img
-						img(src=buildImgPath('advocates/schultz.jpg') alt="Kevin Schultz")
-				.col-md-9
-					blockquote
-						p It is the ability to collaborate very easily that drew me to Overleaf.
-						footer Kevin Schultz, Assistant Professor of Physics, Hartwick College
-	.col-md-6
-		div
-			.row
-				.col-md-3
-					.circle-img
-						img(src=buildImgPath('advocates/dagoret-campagne.jpg') alt="Dr Sylvie Dagoret-Campagne")
-				.col-md-9
-					blockquote
-						p Overleaf is a great educational tool for publishing scientific documents.
-						footer Dr Sylvie Dagoret-Campagne, Director of Research at CNRS, University of Paris-Saclay

+ 0 - 16
services/web/app/views/subscriptions/plans/_university_info.pug

@@ -1,16 +0,0 @@
-.row.row-spaced-large.text-centered(
-	data-ol-plans-university-info-container
-	hidden
-)
-	.col-sm-8.col-sm-offset-2.col-xs-12
-		.card.plans-v2-university-info
-			h3.plans-v2-university-info-header #{translate('would_you_like_to_see_a_university_subscription')}
-			p.plans-v2-university-info-text #{translate('student_and_faculty_support_make_difference')}
-			a.btn.plans-v2-btn-header.text-capitalize.plans-v2-btn-university-info(
-				target="_blank"
-				href="/for/support-an-overleaf-university-subscription"
-				event-tracking="plans-page-click"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation={button: "university-support", currency: recommendedCurrency}
-			) #{translate('show_your_support')}

+ 0 - 17
services/web/app/views/subscriptions/plans/_university_info_light_design.pug

@@ -1,17 +0,0 @@
-.row.row-spaced-large(
-	data-ol-plans-university-info-container
-	hidden
-)
-	.col-xs-12
-		.card.plans-v2-university-info-light
-			div
-				h3.plans-v2-university-info-header-light #{translate('would_you_like_to_see_a_university_subscription')}
-				p.plans-v2-university-info-text-light #{translate('student_and_faculty_support_make_difference')}
-			a.btn.btn-secondary.plans-v2-btn-header-light(
-				target="_blank"
-				href="/for/support-an-overleaf-university-subscription"
-				event-tracking="plans-page-click"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "university-support"}'
-			) #{translate('show_your_support')}

+ 0 - 76
services/web/app/views/subscriptions/plans/light-redesign/_cards_controls_tables.pug

@@ -1,76 +0,0 @@
-include ./_mixins
-
-.row.plans-top-switch.text-center
-	.col-xs-12
-		ul.nav(role="tablist")
-			li.active.plans-switch-individual(
-				data-ol-plans-v2-view-tab='individual'
-				event-tracking="plans-page-toggle-plan"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "individual"}'
-				role="presentation"
-			)
-				button.btn(
-					role="tab"
-					aria-controls="panel-individual"
-					aria-selected="true"
-				) #{translate("indvidual_plans")}
-			li.plans-switch-group(
-				data-ol-plans-v2-view-tab='group'
-				event-tracking="plans-page-toggle-plan"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "group"}'
-				role="presentation"
-			)
-				button.btn(
-					aria-controls="panel-group"
-					role="tab"
-					aria-selected="false"
-				)
-					span #{translate("group_plans")} 
-					span (#{translate("save_30_percent_or_more")})
-			li.plans-switch-student(
-				data-ol-plans-v2-view-tab='student'
-				event-tracking="plans-page-toggle-plan"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation='{"button": "student"}'
-				role="presentation"
-			)
-				button.btn(
-					aria-controls="panel-student"
-					role="tab"
-					aria-selected="false"
-				) #{translate("student_plans")}
-
-+monthly_annual_switch("annual", "plans-page-toggle-period")
-
-.row(hidden data-ol-plans-v2-license-picker-container)
-	.col-sm-12
-		+group_plans_license_picker()
-
-+table_sticky_header_all(plansConfig)
-
-.row.plans-table-container(hidden data-ol-plans-v2-period='monthly')
-	.col-sm-12(data-ol-plans-v2-view='individual' role="tabpanel")
-		.row
-			+table_individual('monthly')
-	.col-sm-12(hidden data-ol-plans-v2-view='student' role="tabpanel")
-		.row
-			+table_student('monthly')
-
-.row.plans-table-container(data-ol-plans-v2-period='annual')
-	.col-sm-12(data-ol-plans-v2-view='individual' id="panel-individual" role="tabpanel")
-		.row
-			+table_individual('annual')
-	.col-sm-12(hidden data-ol-plans-v2-view='group' id="panel-group" role="tabpanel")
-		.row
-			+table_group('annual')
-	.col-sm-12(hidden data-ol-plans-v2-view='student' id="panel-student" role="tabpanel")
-		.row
-			+table_student('annual')
-
-//- 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)

+ 0 - 118
services/web/app/views/subscriptions/plans/light-redesign/_group_plan_modal.pug

@@ -1,118 +0,0 @@
-include ../../../_mixins/notification
-
-div.modal.fade.group-customize-subscription-modal.website-redesign-modal(tabindex="-1" role="dialog" data-ol-group-plan-modal)
-	.modal-dialog(role="document")
-		.modal-content
-			.modal-header
-				button.close(
-					type="button"
-					data-dismiss="modal"
-					aria-label=translate("close")
-				)
-					i.material-symbols(aria-hidden="true") close
-				h1.modal-title #{translate("customize_your_group_subscription")}
-				h2.modal-subtitle #{translate("save_30_percent_or_more_uppercase")}
-			.modal-body
-				.container-fluid
-					.row
-						.col-md-6.text-center
-							.circle.circle-lg
-								.group-price
-									span(data-ol-group-plan-display-price) ...
-									span &nbsp;/#{translate('year')}
-								.group-price-per-user(data-ol-group-plan-price-per-user=translate('per_user')) ...
-							.group-modal-features
-								| #{translate('each_user_will_have_access_to')}:
-								ul.list-unstyled
-									li(
-										hidden=(groupPlanModalDefaults.plan_code !== 'collaborator')
-										data-ol-group-plan-plan-code='collaborator'
-									)
-										strong #{translate("collabs_per_proj", {collabcount:10})}
-									li(
-										hidden=(groupPlanModalDefaults.plan_code !== 'professional')
-										data-ol-group-plan-plan-code='professional'
-									)
-										strong #{translate("unlimited_collabs")}
-									li.list-item-pro-features-header #{translate('all_premium_features')}
-									li #{translate('sync_dropbox_github')}
-									li #{translate('full_doc_history')}
-									li #{translate('track_changes')}
-									li + #{translate('more_lowercase')}
-						.col-md-6
-							form.form(data-ol-group-plan-form)
-								.form-group
-									label(for='plan_code')
-										| #{translate('plan')}
-									for plan_code in groupPlanModalOptions.plan_codes
-										label.group-plan-option
-											input(
-												type="radio"
-												name="plan_code"
-												checked=(plan_code.code === groupPlanModalDefaults.plan_code)
-												value=plan_code.code
-												data-ol-group-plan-code=plan_code.code
-											)
-											span #{translate(plan_code.i18n)}
-								.form-group
-									label(for='size')
-										| #{translate('number_of_users')}
-									select.form-control(
-										id="size"
-										event-tracking="groups-modal-group-size"
-										event-tracking-mb="true"
-										event-tracking-trigger="click"
-										event-tracking-element="select"
-									)
-										for size in groupPlanModalOptions.sizes
-											option(
-												value=size
-												selected=(size === groupPlanModalDefaults.size)
-											) #{size}
-								.form-group(data-ol-group-plan-form-currency)
-									label(for='currency')
-										| #{translate('currency')}
-									select.form-control(id="currency")
-										for currency in groupPlanModalOptions.currencies
-											option(
-												value=currency.code
-												selected=(currency.code === groupPlanModalDefaults.currency)
-											) #{currency.display}
-								.form-group
-									label(for='usage')
-										| #{translate('educational_discount_for_groups_of_ten_or_more')}
-								label.group-plan-educational-discount
-									input(
-										id="usage"
-										type="checkbox"
-										autocomplete="off"
-										event-tracking="groups-modal-edu-discount"
-										event-tracking-mb="true"
-										event-tracking-trigger="click"
-										event-tracking-element="checkbox"
-									)
-									span #{translate('educational_discount_disclaimer')}
-
-					.row
-						.col-md-12
-							.educational-discount-section
-								div(hidden=(groupPlanModalDefaults.usage !== 'educational') data-ol-group-plan-educational-discount)
-									.applied(hidden=true data-ol-group-plan-educational-discount-applied)
-										+notification({ariaLive: 'polite', content: translate('educational_discount_applied'), type: 'success', ariaLive: 'polite'})
-									.ineligible(hidden=true data-ol-group-plan-educational-discount-ineligible)
-										+notification({ariaLive: 'polite', content: translate('educational_discount_available_for_groups_of_ten_or_more'), type: 'info', ariaLive: 'polite'})
-			.modal-footer
-				.text-center
-					button.btn.btn-primary.btn-lg(
-						data-ol-purchase-group-plan
-						event-tracking="form-submitted-groups-modal-purchase-click"
-						event-tracking-mb="true"
-						event-tracking-trigger="click"
-						) #{translate('purchase_now_lowercase')}
-					br
-					p #{translate('need_more_than_x_licenses', {x: '50'})}
-						| &nbsp;
-						button.btn.btn-inline-link(
-							data-ol-open-contact-form-for-more-than-50-licenses
-						) #{translate('please_get_in_touch')}
-

+ 0 - 403
services/web/app/views/subscriptions/plans/light-redesign/_mixins.pug

@@ -1,403 +0,0 @@
-include ./_table_ctas
-include ./_table_short_feature_lists
-include ./_table_column_headers_row
-
-mixin features_premium
-	li &nbsp;
-	li
-		strong #{translate('all_premium_features')}
-	li #{translate('sync_dropbox_github')}
-	li #{translate('full_doc_history')}
-	li #{translate('track_changes')}
-	li + #{translate('more').toLowerCase()}
-
-mixin gen_localized_price_for_plan_view(plan, view)
-	span #{formatCurrency(settings.localizedPlanPricing[recommendedCurrency][plan][view], recommendedCurrency, language, true)}
-
-mixin currency_and_payment_methods()
-	.row.plans-payment-methods.text-centered
-		.col-xs-12
-			p
-				b #{translate("all_prices_displayed_are_in_currency", { recommendedCurrency })}
-				| &nbsp;#{translate("subject_to_additional_vat")}
-
-			.plans-payment-methods-icons
-				img(src=buildImgPath('/other-brands/logo_mastercard.svg') aria-hidden="true")
-				span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Mastercard' })}
-				img(src=buildImgPath('/other-brands/logo_visa.svg') aria-hidden="true")
-				span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Visa' })}
-				img(src=buildImgPath('/other-brands/logo_amex.svg') aria-hidden="true")
-				span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Amex' })}
-				img(src=buildImgPath('/other-brands/logo_paypal.svg') aria-hidden="true")
-				span.sr-only #{translate('payment_method_accepted', { paymentMethod: 'Paypal' })}
-
-
-mixin plans_table(period, config)
-	- var maxColumn = config.maxColumn || 4
-	- var tableHeadKeys = Object.keys(config.tableHead)
-	- var highlightedColKey = tableHeadKeys[config.highlightedColumn.index]
-	-var highlightedColTranslationKey  = config.highlightedColumn.text[period] === 'most_popular' ? 'most_popular_uppercase' : config.highlightedColumn.text[period] === 'saving_20_percent' ? 'saving_20_percent_no_exclamation' : config.highlightedColumn.text[period] 
-
-	+table_column_headers_row({maxColumn, tableHeadKeys, highlightedColKey, highlightedColTranslationKey})
-
-	tr(class=`plans-table-price-row plans-table-cols-${tableHeadKeys.length}`)
-		td
-		- for (const [tableHeadKey] of Object.entries(config.tableHead))
-			- var highlighted =  highlightedColKey === tableHeadKey
-			- var eventTrackingKey = config.eventTrackingKey
-			- var additionalEventSegmentation = config.additionalEventSegmentation || {}
-			- var tdClass = highlighted ? 'plans-table-green-highlighted' : ''
-
-			td(class=tdClass)
-				.plans-table-cell.plans-table-cell-price
-					case tableHeadKey
-						when 'individual_free'
-							+table_head_price('free', period)
-						when 'individual_collaborator'
-							+table_head_price('collaborator', period)
-						when 'individual_professional'
-							+table_head_price('professional', period)
-						when 'group_collaborator'
-							+table_price_group_collaborator()
-						when 'group_professional'
-							+table_price_group_professional()
-						when 'group_organization'
-							.plans-table-comments-icon
-								.match-non-discounted-price-alignment &nbsp;
-								i.material-symbols.material-symbols-outlined(aria-hidden="true") forum
-						when 'student_free'
-							+table_head_price('free', period)
-						when 'student_student'
-							+table_head_price('student', period)
-
-	tr(class=`plans-table-cta-mobile plans-table-cols-${tableHeadKeys.length}`)
-		td
-		- for (const [tableHeadKey] of Object.entries(config.tableHead))
-			- var highlighted =  highlightedColKey === tableHeadKey
-			- var eventTrackingKey = config.eventTrackingKey
-			- var additionalEventSegmentation = config.additionalEventSegmentation || {}
-			- var tdClass = highlighted ? 'plans-table-green-highlighted' : ''
-
-			td(class=tdClass)
-				.plans-table-cell.plans-table-cell-cta-mobile
-					.plans-table-btn-buy-container-mobile
-						+plans_cta(tableHeadKey, highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-	tr(class=`plans-table-short-feature-list plans-table-cols-${tableHeadKeys.length}`)
-		td
-		- for (const [tableHeadKey, tableHeadOptions] of Object.entries(config.tableHead))
-			- var highlighted =  highlightedColKey === tableHeadKey
-			- var eventTrackingKey = config.eventTrackingKey
-			- var additionalEventSegmentation = config.additionalEventSegmentation || {}
-			- var tdClass = highlighted ? 'plans-table-green-highlighted' : ''
-
-			td(class=tdClass)
-				.plans-table-cell.plans-table-cell-short-feature-list
-					div
-						case tableHeadKey
-							when 'individual_free'
-								+table_short_feature_list_free()
-							when 'individual_collaborator'
-								+table_short_feature_list_collaborator()
-							when 'individual_professional'
-								+table_short_feature_list_professional()
-							when 'group_collaborator'
-								+table_short_feature_list_group_collaborator()
-							when 'group_professional'
-								+table_short_feature_list_group_professional()
-							when 'group_organization'
-								+table_short_feature_list_group_organization(additionalEventSegmentation)
-							when 'student_free'
-								+table_short_feature_list_free()
-							when 'student_student'	
-								+table_short_feature_list_student_student(tableHeadOptions.showExtraContent)
-
-	tr(class=`plans-table-cta-desktop plans-table-cols-${tableHeadKeys.length}`)
-		td
-		- for (const [tableHeadKey] of Object.entries(config.tableHead))
-			- var highlighted =  highlightedColKey === tableHeadKey
-			- var eventTrackingKey = config.eventTrackingKey
-			- var additionalEventSegmentation = config.additionalEventSegmentation || {}
-			- var tdClass = highlighted ? 'plans-table-green-highlighted' : ''
-
-			td(class=tdClass)
-				.plans-table-cell.plans-table-cell-cta-desktop
-					.plans-table-btn-buy-container-desktop
-						+plans_cta(tableHeadKey, highlighted, eventTrackingKey, additionalEventSegmentation, period)
-
-	for featuresPerSection, featuresSectionIndex in config.features
-		- var dividerColspan = Object.values(config.tableHead).length + 1
-		if featuresPerSection.divider
-			tr.plans-table-divider
-				td(
-					colspan=dividerColspan
-					class=((config.highlightedColumn.index === Object.keys(config.tableHead).length - 1) ? 'plans-table-last-col-highlighted' : '')
-				)
-					.plans-table-cell-divider
-						//- all cells need 2 layers of divs for handling border and padding. See .plans-table in CSS for more details
-						.plans-table-cell-divider-content
-							b.plans-table-divider-label #{translate(featuresPerSection.dividerLabel)}
-							//- will only appear on screen width >= 768px (using CSS)
-							i.material-symbols.material-symbols-outlined.icon-sm(
-								data-toggle="tooltip"
-								title=translate(featuresPerSection.dividerInfo),
-								data-placement="top"
-							) help
-							//- will only appear on screen width < 768px (using CSS)
-							span.plans-table-divider-learn-more-container
-								span (
-								span.plans-table-divider-learn-more-text(
-									data-toggle="tooltip"
-									title=translate(featuresPerSection.dividerInfo),
-									data-placement="top"
-								) #{translate("learn_more_lowercase")}
-								span )
-							span.sr-only #{translate(featuresPerSection.dividerInfo)}
-		for feature, featureIndex in featuresPerSection.items
-			tr(
-				class=`plans-table-feature-row plans-table-cols-${tableHeadKeys.length}`
-			)
-				th(
-					event-tracking="plans-page-table"
-					event-tracking-trigger="hover"
-					event-tracking-ga="subscription-funnel"
-					event-tracking-label=`${feature.feature}`
-					scope="row"
-					class=`${featuresSectionIndex === 0 && featureIndex === 0 ? 'plans-table-first-feature-header' : ''}`
-				)
-					.plans-table-feature-name
-						.plans-table-feature-name-content
-							if feature.info
-								span #{translate(feature.feature)}
-								//- will only appear on screen width >= 768px (using CSS)
-								i.material-symbols.material-symbols-outlined.icon-sm.plans-table-feature-question-icon(
-									data-toggle="tooltip"
-									title=translate(feature.info),
-									data-placement="right"
-								) help
-								//- will only appear on screen width < 768px (using CSS)
-								span.plans-table-feature-learn-more-container
-									span (
-									span.plans-table-feature-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 tdClass = planIndex === config.highlightedColumn.index ? 'plans-table-green-highlighted' : ''
-
-					td(class=tdClass)
-						+table_cell(feature, plan)
-
-mixin table_individual(period)
-	table.plans-table.plans-table-individual
-		+plans_table(period, plansConfig.individual)
-
-mixin table_group
-	table.plans-table.plans-table-group
-		+plans_table('annual', plansConfig.group)
-
-mixin table_student(period)
-	table.plans-table.plans-table-student
-		+plans_table(period, plansConfig.student)
-
-//- group mixins
-
-mixin table_price_group_collaborator()
-	.plans-table-price-container
-		s
-			+gen_localized_price_for_plan_view('collaborator', 'annual')
-		p.plans-table-price
-			span(data-ol-plans-v2-group-price-per-user='collaborator') #{initialLocalizedGroupPrice.pricePerUser.collaborator}
-		p.plans-table-price-period-label
-			| #{translate('per_user_year')}
-
-mixin table_price_group_professional()
-	.plans-table-price-container
-		s
-			+gen_localized_price_for_plan_view('professional', 'annual')
-		p.plans-table-price
-			span(data-ol-plans-v2-group-price-per-user='professional') #{initialLocalizedGroupPrice.pricePerUser.professional}
-		p.plans-table-price-period-label
-			| #{translate('per_user_year')}
-
-mixin table_head_group_total_per_year(groupPlan)
-	- var initialLicenseSize = '2'
-	span.plans-group-total-price(data-ol-plans-v2-group-total-price=groupPlan) #{initialLocalizedGroupPrice.price[groupPlan]}
-	| &nbsp;
-	for licenseSize in groupPlanModalOptions.sizes
-		span(
-			hidden=(licenseSize !== initialLicenseSize)
-			data-ol-plans-v2-table-th-group-license-size=licenseSize
-		) !{translate("total_per_year_for_x_users", {licenseSize})}
-
-mixin group_plans_license_picker()
-	form.plans-license-picker-form(data-ol-plans-v2-license-picker-form)
-		.plans-license-picker-select-container
-			span #{translate("number_of_users_with_colon")}
-			select(
-				name="plans-v2-license-picker-select"
-				id="plans-v2-license-picker-select"
-				autocomplete="off"
-				data-ol-plans-v2-license-picker-select
-				event-tracking="plans-page-group-size"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-tracking-element="select"
-			)
-				option(value="2") 2
-				option(value="3") 3
-				option(value="4") 4
-				option(value="5") 5
-				option(value="10") 10
-				option(value="20") 20
-				option(value="50") 50
-		.plans-v2-license-picker-educational-discount
-			label(data-ol-plans-v2-license-picker-educational-discount-label)
-				input.plans-v2-license-picker-educational-discount-checkbox(
-					type="checkbox"
-					id="license-picker-educational-discount"
-					autocomplete="off"
-					data-ol-plans-v2-license-picker-educational-discount-input
-					event-tracking="plans-page-edu-discount"
-					event-tracking-mb="true"
-					event-tracking-trigger="click"
-					event-tracking-element="checkbox"
-				)
-				span #{translate("apply_educational_discount")}
-			//- will only appear on screen width >= 768px (using CSS)
-			i.material-symbols.material-symbols-outlined.icon-sm(
-				data-toggle="tooltip"
-				title=translate("apply_educational_discount_info"),
-				data-placement="bottom"
-			) help
-			
-			//- will only appear on screen width < 768px (using CSS)
-			span.plans-v2-license-picker-educational-discount-learn-more-container
-				span (
-				span.plans-v2-license-picker-educational-discount-learn-more-text(
-					data-toggle="tooltip"
-					title=translate("apply_educational_discount_info"),
-					data-placement="bottom"
-				) #{translate("learn_more_lowercase")}
-				span )
-			span.sr-only #{translate("apply_educational_discount_info")}
-
-//- all plans mixins
-
-mixin table_head_price(plan, period)
-	div.plans-table-price-container
-		if plan !== 'free' && period === 'annual'
-			s
-				+gen_localized_price_for_plan_view(plan, 'monthlyTimesTwelve')
-		else
-			.match-non-discounted-price-alignment &nbsp;
-		p.plans-table-price
-			+gen_localized_price_for_plan_view(plan, period)
-		p.plans-table-price-period-label
-			if period == 'annual'
-				| #{translate("per_year")}
-			else
-				| #{translate("per_month")}
-
-mixin table_cell(feature, plan)
-	- var planValue = feature.plans[plan]
-	- var featureName = feature.feature
-
-	.plans-table-cell
-		.plans-table-cell-content(
-			data-ol-plans-v2-table-cell-plan=plan
-			data-ol-plans-v2-table-cell-feature=featureName
-		)
-			if (feature.value === 'str')
-				| !{translate(planValue, {}, ['strong'])}
-			else if (feature.value === 'bool')
-				if (planValue)
-					i.material-symbols.material-symbols-outlined.icon-green-round-background.icon-sm(aria-hidden="true") check
-					span.sr-only #{translate("feature_included")}
-				else
-					span(aria-hidden="true") -
-					span.sr-only #{translate("feature_not_included")}
-
-//- table header and control mixins
-
-mixin plans_table_sticky_header(withSwitch, config)
-	- var tableHeadKeys = Object.keys(config.tableHead)
-	.row.plans-table-sticky-header.sticky(
-		data-ol-plans-v2-table-sticky-header
-		class=(withSwitch ? 'plans-table-sticky-header-with-switch' : 'plans-table-sticky-header-without-switch')
-	)
-		- for (var i = 0; i < tableHeadKeys.length; i++)
-			- var tableHeadKey = tableHeadKeys[i]
-			- var translateKey = tableHeadKey.split('_')[1]
-			-
-				if (config.highlightedColumn.index === i) {
-					var elClass = 'plans-table-sticky-header-item-green-highlighted'
-				} else {
-					var elClass = ''
-				}
-			.plans-table-sticky-header-item(
-				class=elClass
-			)
-				case tableHeadKey
-					when 'individual_collaborator'
-						span #{translate('standard')}
-					when 'group_professional'
-						span #{translate(tableHeadKey)}
-					when 'group_collaborator'
-						span #{translate('group_standard')}
-					default
-						span #{translate(translateKey)}
-
-mixin table_sticky_header_all(plansConfig)
-	.row.plans-table-sticky-header-container(
-		data-ol-plans-v2-view='individual'
-	)
-		+plans_table_sticky_header(true, plansConfig.individual)
-	.row.plans-table-sticky-header-container(
-		hidden
-		data-ol-plans-v2-view='group'
-	)
-		+plans_table_sticky_header(false, plansConfig.group)
-	.row.plans-table-sticky-header-container(
-		hidden
-		data-ol-plans-v2-view='student'
-	)
-		+plans_table_sticky_header(true, plansConfig.student)
-
-mixin monthly_annual_switch(initialState, eventTracking, eventSegmentation)
-	- var monthlyAnnualToggleChecked = initialState === 'monthly'
-	.row
-		.col-md-4.col-md-offset-4.text-centered.monthly-annual-switch(data-ol-plans-v2-m-a-switch-container)
-			.monthly-annual-switch-text
-				span.underline(data-ol-plans-v2-m-a-switch-text='annual') #{translate("annual")}
-				.tooltip.in.left(
-					role="tooltip"
-					data-ol-plans-v2-m-a-tooltip
-					class=monthlyAnnualToggleChecked ? 'plans-v2-m-a-tooltip-monthly-selected' : ''
-				)
-					.tooltip-arrow
-					.tooltip-inner
-						span(hidden=!monthlyAnnualToggleChecked data-ol-tooltip-period='monthly') #{translate("save_20_percent_by_paying_annually")}
-						span(hidden=monthlyAnnualToggleChecked data-ol-tooltip-period='annual') #{translate("saving_20_percent")}
-
-			label(data-ol-plans-v2-m-a-switch)
-				input(
-					type="checkbox"
-					checked=monthlyAnnualToggleChecked
-					role="switch"
-					aria-label=translate("select_monthly_plans")
-					autocomplete="off"
-					event-tracking=eventTracking
-					event-tracking-mb="true"
-					event-tracking-trigger="click"
-					event-tracking-element="checkbox"
-					event-segmentation=eventSegmentation
-				)
-				span
-			span(data-ol-plans-v2-m-a-switch-text='monthly') #{translate("monthly")}

+ 0 - 34
services/web/app/views/subscriptions/plans/light-redesign/_table_column_headers_row.pug

@@ -1,34 +0,0 @@
-mixin table_column_headers_row({maxColumn, tableHeadKeys, highlightedColKey, highlightedColTranslationKey})
-	tr(class=`plans-table-cols-${tableHeadKeys.length}`)
-		th
-		- for (var i = 0; i < maxColumn; i++)
-			- var tableHeadKey = tableHeadKeys[i]
-			- var highlighted = highlightedColKey === tableHeadKey
-			- var thClass = highlighted ? 'plans-table-green-highlighted' : ''
-
-			th(
-				class=thClass
-				scope="col"
-			)
-				.plans-table-th
-					if (highlighted)
-						p.plans-table-green-highlighted-text #{translate(highlightedColTranslationKey)}
-					.plans-table-th-content
-						if tableHeadKey
-							case tableHeadKey
-								when 'individual_free'
-									| #{translate("free")}
-								when 'individual_collaborator'
-									| #{translate("standard")}
-								when 'individual_professional'
-									| #{translate("professional")}
-								when 'group_collaborator'
-									| #{translate("group_standard")}
-								when 'group_professional'
-									| #{translate("group_professional")}
-								when 'group_organization'
-									| #{translate("organization")}
-								when 'student_free'
-									| #{translate("free")}
-								when 'student_student'
-									| #{translate("student")}

+ 0 - 146
services/web/app/views/subscriptions/plans/light-redesign/_table_ctas.pug

@@ -1,146 +0,0 @@
-mixin btn_buy_individual(highlighted, eventTrackingKey, subscriptionPlan, period) 
-	a.btn(
-		data-ol-start-new-subscription=subscriptionPlan
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view=period
-		class=(highlighted ? 'btn-primary' : 'btn-secondary')
-	)
-		if (period === 'monthly')
-			span #{translate("try_for_free")}
-		else 
-			span #{translate("buy_now_no_exclamation_mark")}
-
-mixin btn_buy_individual_free()
-	if (!getSessionUser())
-		a.btn(
-			href="/register"
-			class=(highlighted ? 'btn-primary' : 'btn-secondary')
-		)
-			span #{translate("try_for_free")}
-	else
-		a.btn.invisible(
-			aria-hidden="true"
-			class=(highlighted ? 'btn-primary' : 'btn-secondary')
-		)
-
-mixin btn_buy_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	+btn_buy_individual(highlighted, eventTrackingKey, 'collaborator', period)
-	if (period === 'monthly')
-		+additional_link_buy(eventTrackingKey, additionalEventSegmentation, 'collaborator', period)
-
-mixin btn_buy_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	+btn_buy_individual(highlighted, eventTrackingKey, 'professional', period)
-	if (period === 'monthly')
-		+additional_link_buy(eventTrackingKey, additionalEventSegmentation, 'professional', period)
-
-mixin btn_buy_group_collaborator(highlighted, eventTrackingKey) 
-	a.btn(
-		data-ol-start-new-subscription='group_collaborator'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view='annual'
-		data-ol-has-custom-href
-		data-ol-location='table-header'
-		class=(highlighted ? 'btn-primary' : 'btn-secondary')
-	)
-		span.visible-mobile-and-tablet #{translate("customize")}
-		span.visible-desktop #{translate("customize_your_plan")}
-
-mixin btn_buy_group_professional(highlighted, eventTrackingKey) 
-	a.btn(
-		data-ol-start-new-subscription='group_professional'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view='annual'
-		data-ol-has-custom-href
-		data-ol-location='table-header'
-		class=(highlighted ? 'btn-primary' : 'btn-secondary')
-	)
-		span.visible-mobile-and-tablet #{translate("customize")}
-		span.visible-desktop #{translate("customize_your_plan")}
-
-mixin btn_buy_group_organization(highlighted, eventTrackingKey) 
-	a.btn(
-		data-ol-start-new-subscription='group_organization'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view='annual'
-		data-ol-has-custom-href
-		data-ol-location='table-header'
-		href='/for/contact-sales'
-		target='_blank'
-		class=(highlighted ? 'btn-primary' : 'btn-secondary')
-	)
-		span #{translate("contact_us_lowercase")}
-
-mixin btn_buy_student_free(highlighted)
-	if (!getSessionUser())
-		a.btn(
-			href="/register"
-			class=(highlighted ? 'btn-primary' : 'btn-secondary')
-		)
-			span #{translate("try_for_free")}
-
-mixin btn_buy_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	a.btn(
-		data-ol-start-new-subscription='student'
-		data-ol-event-tracking-key=eventTrackingKey
-		data-ol-item-view=period
-		data-ol-location='card'
-		class=(highlighted ? 'btn-primary' : 'btn-secondary')
-	)
-		if (period === 'monthly')
-			span #{translate("try_for_free")}
-		else 
-			span #{translate("buy_now_no_exclamation_mark")}
-	if (period === 'monthly')
-		+additional_link_buy(eventTrackingKey, additionalEventSegmentation, 'student', period)
-
-mixin additional_link_group(eventTrackingKey, additionalEventSegmentation, plan)
-	- var buttonSegmentation = plan + '-link'
-	- additionalEventSegmentation = additionalEventSegmentation || {}
-	- var segmentation = { ...additionalEventSegmentation, button: buttonSegmentation, location: 'table-header' }
-
-	a.btn.btn-bg-ghost(
-		href="/for/contact-sales"
-		target="_blank"
-		event-tracking=eventTrackingKey
-		event-tracking-mb="true"
-		event-tracking-trigger="click"
-		event-segmentation=segmentation
-	) #{translate("contact_us_lowercase")}
-
-mixin additional_link_buy(eventTrackingKey, additionalEventSegmentation, plan, period)
-	- var buttonSegmentation = plan + '-link'
-	- additionalEventSegmentation = additionalEventSegmentation || {}
-	- var segmentation = { ...additionalEventSegmentation, button: buttonSegmentation, location: 'table-header', period }
-	- var itmCampaign = itm_campaign ? { itm_campaign } : {itm_campaign: 'plans'}
-	- var itmReferrer = itm_referrer ? { itm_referrer } : {}
-	- var qs = new URLSearchParams({planCode: plan, currency: recommendedCurrency, itm_content: 'card', ...itmCampaign, ...itmReferrer})
-
-	a.btn.btn-bg-ghost(
-		href=`/user/subscription/new?${qs.toString()}`
-		event-tracking=eventTrackingKey
-		event-tracking-mb="true"
-		event-tracking-trigger="click"
-		event-segmentation=segmentation
-	) #{translate("buy_now_no_exclamation_mark")}
-
-mixin plans_cta(tableHeadKey, highlighted, eventTrackingKey, additionalEventSegmentation, period)
-	case tableHeadKey
-		when 'individual_free'
-			+btn_buy_individual_free()
-		when 'individual_collaborator'
-			+btn_buy_individual_collaborator(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-		when 'individual_professional'
-			+btn_buy_individual_professional(highlighted, eventTrackingKey, additionalEventSegmentation, period)
-		when 'group_collaborator'
-			+btn_buy_group_collaborator(highlighted, eventTrackingKey)
-			+additional_link_group(eventTrackingKey, additionalEventSegmentation, 'group_collaborator')
-		when 'group_professional'
-			+btn_buy_group_professional(highlighted, eventTrackingKey)
-			+additional_link_group(eventTrackingKey, additionalEventSegmentation, 'group_professional')
-		when 'group_organization'
-			+btn_buy_group_organization(highlighted, eventTrackingKey)
-			small.plans-table-th-content-additional-link.invisible(aria-hidden="true")
-		when 'student_free'
-			+btn_buy_student_free(highlighted)
-		when 'student_student'
-			+btn_buy_student_student(highlighted, eventTrackingKey, additionalEventSegmentation, period)

+ 0 - 49
services/web/app/views/subscriptions/plans/light-redesign/_table_short_feature_lists.pug

@@ -1,49 +0,0 @@
-mixin table_short_feature_list_free()
-	ul
-		li #{translate("one_collaborator")}
-
-mixin table_short_feature_list_collaborator()
-	ul
-		li !{translate("x_collaborators_per_project", {collaboratorsCount: '10'})}
-		li #{translate("all_premium_features")}
-
-mixin table_short_feature_list_professional()
-	ul
-		li !{translate("unlimited_collabs_rt",{},["b"])}
-		li #{translate("all_premium_features")}
-
-mixin table_short_feature_list_group_collaborator()
-	ul
-		li #{translate("up_to")} !{translate("x_collaborators_per_project", {collaboratorsCount: '10'})}
-		li
-			+table_head_group_total_per_year('collaborator')
-
-mixin table_short_feature_list_group_professional()
-	ul
-		li #{translate("unlimited_collaborators_in_each_project")}
-		li
-			+table_head_group_total_per_year('professional')
-
-mixin table_short_feature_list_group_organization(additionalEventSegmentation)
-	- additionalEventSegmentation = additionalEventSegmentation || {}
-	- var segmentation = { ...additionalEventSegmentation, button: 'group_organization-link', location: 'table-header-list', period: 'annual', currency: recommendedCurrency}
-	ul
-		li #{translate("best_choices_companies_universities_non_profits")}
-		li #{translate("for_groups_or_site_wide")}
-		li
-			a.inline-green-link(
-				target="_blank"
-				href="/for/contact-sales"
-				event-tracking="plans-page-click"
-				event-tracking-mb="true"
-				event-tracking-trigger="click"
-				event-segmentation=segmentation
-			) #{translate("also_available_as_on_premises")}
-
-mixin table_short_feature_list_student_student(showExtraContent)
-	ul
-		li !{translate("x_collaborators_per_project", {collaboratorsCount: '6'})}
-		li #{translate("all_premium_features")}
-		if showExtraContent
-			li 
-				b !{translate("for_students_only")}

+ 0 - 110
services/web/locales/en.json

@@ -131,7 +131,6 @@
   "all": "All",
   "all_borders": "All borders",
   "all_features_in_group_standard_plus": "All features in Group Standard, plus:",
-  "all_our_group_plans_offer_educational_discount": "All of our <0>group plans</0> offer an <1>educational discount</1> for students and faculty",
   "all_premium_features": "All premium features",
   "all_premium_features_including": "All premium features, including:",
   "all_prices_displayed_are_in_currency": "All prices displayed are in __recommendedCurrency__.",
@@ -145,7 +144,6 @@
   "already_have_sl_account": "Already have an __appName__ account?",
   "already_subscribed_try_refreshing_the_page": "Already subscribed? Try refreshing the page.",
   "also": "Also",
-  "also_available_as_on_premises": "Also available as On-Premises",
   "alternatively_create_new_institution_account": "Alternatively, you can create a <b>new account</b> with your institution email (<b>__email__</b>) by clicking <b>__clickText__</b>.",
   "an_email_has_already_been_sent_to": "An email has already been sent to <0>__email__</0>. Please wait and try again later.",
   "an_error_occured_while_restoring_project": "An error occured while restoring the project",
@@ -158,7 +156,6 @@
   "anyone_with_link_can_view": "Anyone with this link can view this project",
   "app_on_x": "__appName__ on __social__",
   "apply_educational_discount": "Apply educational discount",
-  "apply_educational_discount_info": "Overleaf offers a 40% educational discount for groups of 10 or more. Applies to students or faculty using Overleaf for teaching.",
   "apply_educational_discount_info_2025_pricing": "40% discount for groups using __appName__ for teaching",
   "apply_educational_discount_info_new": "40% discount for groups of 10 or more using __appName__ for teaching",
   "apply_suggestion": "Apply suggestion",
@@ -193,7 +190,6 @@
   "autocompile_disabled_reason": "Due to high server load, background recompilation has been temporarily disabled. Please recompile by clicking the button above.",
   "autocomplete": "Autocomplete",
   "autocomplete_references": "Reference Autocomplete (inside a <code>\\cite{}</code> block)",
-  "automatic_user_registration": "automatic user registration",
   "automatic_user_registration_uppercase": "Automatic user registration",
   "back": "Back",
   "back_to_account_settings": "Back to account settings",
@@ -207,7 +203,6 @@
   "basic_compile_timeout_on_fast_servers": "Basic compile timeout on fast servers",
   "become_an_advisor": "Become an __appName__ advisor",
   "before_you_use_error_assistant": "Before you use Error Assist",
-  "best_choices_companies_universities_non_profits": "Best choice for companies, universities and non-profits",
   "beta": "Beta",
   "beta_feature_badge": "Beta feature badge",
   "beta_program_already_participating": "You are enrolled in the Beta Program",
@@ -352,11 +347,9 @@
   "compile_larger_projects": "Compile larger projects",
   "compile_mode": "Compile Mode",
   "compile_servers": "Compile servers",
-  "compile_servers_info": "Compiles for users on premium plans always run on a dedicated pool of the fastest available servers.",
   "compile_servers_info_new": "The servers used to compile your project. Compiles for users on paid plans always run on the fastest available servers.",
   "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_short": "Compile timeout",
-  "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.",
   "compile_timeout_short_info_new": "This is how much time you get to compile your project on Overleaf. You may need additional time for longer or more complex projects.",
   "compiler": "Compiler",
   "compiling": "Compiling",
@@ -440,12 +433,9 @@
   "currently_subscribed_to_plan": "You are currently subscribed to the <0>__planName__</0> plan.",
   "custom": "Custom",
   "custom_borders": "Custom borders",
-  "custom_resource_portal": "Custom resource portal",
-  "custom_resource_portal_info": "You can have your own custom portal page on Overleaf. This is a great place for your users to find out more about Overleaf, access templates, FAQs and Help resources, and sign up to Overleaf.",
   "customer_resource_portal": "Customer resource portal",
   "customize": "Customize",
   "customize_your_group_subscription": "Customize your group subscription",
-  "customize_your_plan": "Customize your plan",
   "customizing_figures": "Customizing figures",
   "customizing_tables": "Customizing tables",
   "da": "Danish",
@@ -455,7 +445,6 @@
   "dealing_with_errors": "Dealing with errors",
   "december": "December",
   "dedicated_account_manager": "Dedicated account manager",
-  "dedicated_account_manager_info": "Our Account Management Team will be able to assist with requests, questions and to help you spread the word about Overleaf with promotional materials, training resources and webinars.",
   "default": "Default",
   "delete": "Delete",
   "delete_account": "Delete Account",
@@ -548,7 +537,6 @@
   "dropbox_duplicate_project_names_suggestion": "Please make your project names unique across all your <0>active, archived and trashed</0> projects and then re-link your Dropbox account.",
   "dropbox_email_not_verified": "We have been unable to retrieve updates from your Dropbox account. Dropbox reported that your email address is unverified. Please verify your email address in your Dropbox account to resolve this.",
   "dropbox_for_link_share_projs": "This project was accessed via link-sharing and won’t be synchronised to your Dropbox unless you are invited via e-mail by the project owner.",
-  "dropbox_integration_info": "Work online and offline seamlessly with two-way Dropbox sync. Changes you make locally will be sent automatically to the version on Overleaf and vice versa.",
   "dropbox_integration_lowercase": "Dropbox integration",
   "dropbox_successfully_linked_description": "Thanks, we’ve successfully linked your Dropbox account to __appName__.",
   "dropbox_sync": "Dropbox Sync",
@@ -592,10 +580,6 @@
   "editor_theme": "Editor theme",
   "educational_disclaimer": "I confirm that users will be students or faculty using Overleaf primarily for study and teaching, and can provide evidence of this if requested.",
   "educational_disclaimer_heading": "Educational discount confirmation",
-  "educational_discount_applied": "40% educational discount applied!",
-  "educational_discount_available_for_groups_of_ten_or_more": "The educational discount is available for groups of 10 or more",
-  "educational_discount_disclaimer": "This license is for educational purposes (applies to students or faculty using Overleaf for teaching)",
-  "educational_discount_for_groups_of_ten_or_more": "Overleaf offers a 40% educational discount for groups of 10 or more.",
   "educational_discount_for_groups_of_x_or_more": "The educational discount is available for groups of __size__ or more",
   "educational_percent_discount_applied": "__percent__% educational discount applied!",
   "email": "Email",
@@ -671,26 +655,7 @@
   "failed_to_send_group_invite_to_email": "Failed to send Group invite to <0>__email__</0>. Please try again later.",
   "failed_to_send_managed_user_invite_to_email": "Failed to send Managed User invite to <0>__email__</0>. Please try again later.",
   "failed_to_send_sso_link_invite_to_email": "Failed to send SSO invite reminder to <0>__email__</0>. Please try again later.",
-  "faq_change_plans_or_cancel_answer": "Yes, you can do this at any time via your subscription settings. You can change plans, switch between monthly and annual billing options, or cancel to downgrade to the free plan. When cancelling, your subscription will continue until the end of the billing period.  If your account temporarily does not have a subscription, the only change will be to the features available to you. Your projects will always be available on your account.",
-  "faq_change_plans_or_cancel_question": "Can I change plans or cancel later?",
-  "faq_do_collab_need_on_paid_plan_answer": "No, they can be on any plan, including the free plan. If you are on a premium plan, some premium features will be available to your collaborators in projects that you have created, even if those collaborators are on the free plan. For more information, read about <0>account and subscriptions</0> and <1>how premium features work</1>.",
-  "faq_do_collab_need_on_paid_plan_question": "Do my collaborators also need to be on a paid plan?",
-  "faq_how_does_a_group_plan_work_answer": "Group subscriptions are a way to upgrade more than one Overleaf account. They are easy to manage, help to save on paperwork, and reduce the cost of purchasing multiple subscriptions separately. To learn more, read about <0>joining a group subscription</0> and <1>managing a group subscription</1>. You can purchase group subscriptions above or by <2>contacting us</2>.",
-  "faq_how_does_a_group_plan_work_question": "How does a group plan work? How can I add people to the plan?",
   "faq_how_does_free_trial_works_answer": "You get full access to your chosen __appName__ plan during your __len__-day free trial. There is no obligation to continue beyond the trial. Your card will be charged at the end of your __len__ day trial unless you cancel before then. You can cancel via your subscription settings.",
-  "faq_how_free_trial_works_answer_v2": "You get full access to your chosen premium plan during your __len__ day free trial, and there is no obligation to continue beyond the trial. Your card will be charged at the end of your trial unless you cancel before then. To cancel, go to your subscription settings in your account (the trial will continue for the full __len__ days).",
-  "faq_how_free_trial_works_question": "How does the free trial work?",
-  "faq_i_have_free_account_want_subscription_how_answer_first_paragraph": "In Overleaf, every user creates and manages their own Overleaf account. Most users start on the free plan but can upgrade and enjoy the premium features by subscribing to a plan, joining a group subscription or joining a <0>Commons subscription</0>. When you purchase, join or leave a subscription, you can still keep the same Overleaf account.",
-  "faq_i_have_free_account_want_subscription_how_answer_second_paragraph": "To find out more, read more about <0>how accounts and subscriptions work together in Overleaf</0>.",
-  "faq_i_have_free_account_want_subscription_how_question": "I have a free account and want to join a subscription, how do I do that?",
-  "faq_pay_by_invoice_answer_v2": "Yes, if you’d like to purchase a group subscription for five or more people, or a site license. For individual subscriptions we can only accept payment online via credit card, debit card or PayPal.",
-  "faq_pay_by_invoice_question": "Can I pay by invoice / purchase order?",
-  "faq_the_individual_standard_plan_10_collab_first_paragraph": "No. Only the subscriber’s account will be upgraded. An individual Standard subscription allows you to invite 10 collaborators to each project owned by you.",
-  "faq_the_individual_standard_plan_10_collab_question": "The individual Standard plan has 10 project collaborators, does it mean that 10 people will be upgraded?",
-  "faq_the_individual_standard_plan_10_collab_second_paragraph": "While working on a project that you, as a subscriber, share with them, your collaborators will be able to access some premium features such as the full document history and extended compile time for that particular project. Inviting them to a particular project does not upgrade their accounts overall, however. Read more about <0>which features are per project, and which are per account</0>.",
-  "faq_what_is_the_difference_between_users_and_collaborators_answer_first_paragraph": "In Overleaf, every user creates their own account. You can create projects that only you work on, and you can also invite others to view or work with you on projects that you own. Users that you share your project with are called <0>collaborators</0>. We sometimes refer to them as project collaborators.",
-  "faq_what_is_the_difference_between_users_and_collaborators_answer_second_paragraph": "In other words, collaborators are just other Overleaf users that you are working with on one of your projects.",
-  "faq_what_is_the_difference_between_users_and_collaborators_question": "What’s the difference between users and collaborators?",
   "fast": "Fast",
   "fastest": "Fastest",
   "feature_included": "Feature included",
@@ -746,14 +711,12 @@
   "for_business": "For business",
   "for_enterprise": "For enterprise",
   "for_government": "For government",
-  "for_groups_or_site_wide": "For groups or site-wide",
   "for_individuals_and_groups": "For individuals & groups",
   "for_large_institutions_and_organizations_need_sitewide_on_premise": "For large institutions and organizations that need site-wide access or an on-premises solution.",
   "for_more_information_see_managed_accounts_section": "For more information, see the \"Managed Accounts\" section in <0>our terms of use</0>, which you agree to by clicking Accept invitation.",
   "for_publishers": "For publishers",
   "for_small_teams_and_departments_who_want_to_write_collaborate": "For small teams and departments who want to write and collaborate easily in LaTeX.",
   "for_students": "For students",
-  "for_students_only": "For students only",
   "for_teaching": "For teaching",
   "for_teams_and_organizations_who_want_a_streamlined_sso_and_security": "For teams and organizations who want a streamlined sign-on process and our strongest cloud security.",
   "for_universities": "For universities",
@@ -761,7 +724,6 @@
   "forgot_your_password": "Forgot your password",
   "format": "Format",
   "found_matching_deleted_users": "Found __deletedUserCount__ matching deleted users",
-  "four_minutes": "4 minutes",
   "fr": "French",
   "free": "Free",
   "free_7_day_trial_billed_annually": "Free 7-day trial, then billed annually",
@@ -779,7 +741,6 @@
   "from_provider": "From __provider__",
   "from_url": "From URL",
   "full_doc_history": "Full document history",
-  "full_doc_history_info_v2": "You can see all the edits in your project and who made every change. Add labels to quickly access specific versions.",
   "full_document_history": "Full document <0>history</0>",
   "full_project_search": "Full Project Search",
   "full_width": "Full width",
@@ -831,8 +792,6 @@
   "git_gitHub_dropbox_mendeley_and_zotero_integrations": "Git, GitHub, Dropbox, Mendeley, and Zotero integrations",
   "git_integration": "Git Integration",
   "git_integration_info": "With Git integration, you can clone your Overleaf projects with Git. For full instructions on how to do this, read <0>our help page</0>.",
-  "git_integration_lowercase": "Git integration",
-  "git_integration_lowercase_info": "You can clone your Overleaf project to a local repository, treating your Overleaf project as a remote repository that changes can be pushed to and pulled from.",
   "github": "GitHub",
   "github_commit_message_placeholder": "Commit message for changes made in __appName__...",
   "github_credentials_expired": "Your GitHub authorization credentials have expired",
@@ -847,8 +806,6 @@
   "github_large_files_error": "Merge failed: your GitHub repository contains files over the 50mb file size limit ",
   "github_merge_failed": "Your changes in __appName__ and GitHub could not be automatically merged. Please manually merge the <0>__sharelatex_branch__</0> branch into the default branch in git. Click below to continue, after you have manually merged.",
   "github_no_master_branch_error": "This repository cannot be imported as it is missing a default branch. Please make sure the project has a default branch",
-  "github_only_integration_lowercase": "GitHub integration",
-  "github_only_integration_lowercase_info": "Link your Overleaf projects directly to a GitHub repository that acts as a remote repository for your overleaf project. This allows you to share with collaborators outside of Overleaf, and integrate Overleaf into more complex workflows.",
   "github_private_description": "You choose who can see and commit to this repository.",
   "github_public_description": "Anyone can see this repository. You choose who can commit.",
   "github_repository_diverged": "The default branch of the linked repository has been force-pushed. Pulling GitHub changes after a force push can cause Overleaf and GitHub to get out of sync. You might need to push changes after pulling to get back in sync.",
@@ -886,22 +843,15 @@
   "great_for_small_teams_and_departments": "Great for small teams and departments",
   "group": "Group",
   "group_admin": "Group admin",
-  "group_admins_get_access_to": "Group admins get access to",
-  "group_admins_get_access_to_info": "Special features available only on group plans.",
   "group_full": "This group is already full",
   "group_invitations": "Group invitations",
   "group_invite_has_been_sent_to_email": "Group invite has been sent to <0>__email__</0>",
   "group_libraries": "Group Libraries",
   "group_managed_by_group_administrator": "User accounts in this group are managed by the group administrator.",
-  "group_members_and_collaborators_get_access_to": "Group members and their project collaborators get access to",
-  "group_members_and_their_collaborators_get_access_to_info": "These features are available to group members and their collaborators (other Overleaf users invited to projects owned by a group member).",
-  "group_members_get_access_to": "Group members get access to",
-  "group_members_get_access_to_info": "These features are available only to group members (subscribers).",
   "group_plan_admins_can_easily_add_and_remove_users_from_a_group": "Group plan admins can easily add and remove users from a group. For site-wide plans, users are automatically upgraded when they register or add their email address to Overleaf (domain-based enrollment or SSO).",
   "group_plan_tooltip": "You are on the __plan__ plan as a member of a group subscription. Click to find out how to make the most of your Overleaf premium features.",
   "group_plan_upgrade_description": "You’re on the <0>__currentPlan__</0> plan and you’re upgrading to the <0>__nextPlan__</0> plan. If you’re interested in a site-wide Overleaf Commons plan please <1>get in touch</1>.",
   "group_plan_with_name_tooltip": "You are on the __plan__ plan as a member of a group subscription, __groupName__. Click to find out how to make the most of your Overleaf premium features.",
-  "group_plans": "Group Plans",
   "group_professional": "Group Professional",
   "group_sso_configuration_idp_metadata": "The information you provide here comes from your Identity Provider (IdP). This is often referred to as its <0>SAML metadata</0>. You can add this manually or click <1>Import IdP metadata</1> to import an XML file.",
   "group_sso_configure_service_provider_in_idp": "For some IdPs, you must configure Overleaf as a Service Provider to get the data you need to fill out this form. To do this, you will need to download the Overleaf metadata.",
@@ -1005,7 +955,6 @@
   "imported_from_zotero_at_date": "Imported from Zotero  at __formattedDate__ __relativeDate__",
   "importing": "Importing",
   "importing_and_merging_changes_in_github": "Importing and merging changes in GitHub",
-  "in_good_company": "You’re In Good Company",
   "in_order_to_have_a_secure_account_make_sure_your_password": "To help keep your account secure, make sure your new password:",
   "in_order_to_match_institutional_metadata_2": "In order to match your institutional metadata, we’ve linked your account using <0>__email__</0>.",
   "in_order_to_match_institutional_metadata_associated": "In order to match your institutional metadata, your account is associated with the email <b>__email__</b>.",
@@ -1016,7 +965,6 @@
   "include_the_error_message_and_ai_response": "Include the error message and AI response",
   "increased_compile_timeout": "Increased compile timeout",
   "individuals": "Individuals",
-  "indvidual_plans": "Individual Plans",
   "info": "Info",
   "inr_discount_modal_info": "Get document history, track changes, additional collaborators, and more at Purchasing Power Parity prices.",
   "inr_discount_modal_title": "70% off all Overleaf premium plans for users in India",
@@ -1158,7 +1106,6 @@
   "learn_more_about_link_sharing": "Learn more about Link Sharing",
   "learn_more_about_managed_users": "Learn more about Managed Users.",
   "learn_more_about_other_causes_of_compile_timeouts": "<0>Learn more</0> about other causes of compile timeouts and how to fix them.",
-  "learn_more_lowercase": "learn more",
   "leave": "Leave",
   "leave_any_group_subscriptions": "Leave any group subscriptions other than the one that will be managing your account. <0>Leave them from the Subscription page.</0>",
   "leave_group": "Leave group",
@@ -1279,8 +1226,6 @@
   "managed_user_accounts": "Managed user accounts",
   "managed_user_invite_has_been_sent_to_email": "Managed User invite has been sent to <0>__email__</0>",
   "managed_users": "Managed Users",
-  "managed_users_accounts": "Managed user accounts",
-  "managed_users_accounts_plan_info": "Managed Users gives you more control over your group’s use of Overleaf. It ensures tighter management of user access and deletion and allows you to keep control of projects when someone leaves the group.",
   "managed_users_explanation": "Managed Users ensures you stay in control of your organization’s projects and who owns them. <0>Read more about Managed Users.</0>",
   "managed_users_gives_gives_you_more_control_over_your_group": "Managed Users gives you more control over your group’s use of __appName__. It ensures tighter management of user access and deletion and allows you to keep control of your projects when someone leaves the group.",
   "managed_users_is_enabled": "Managed Users is enabled",
@@ -1294,8 +1239,6 @@
   "marked_as_resolved": "Marked as resolved",
   "math_display": "Math Display",
   "math_inline": "Math Inline",
-  "max_collab_per_project": "Max. collaborators per project",
-  "max_collab_per_project_info": "The number of people you can invite to work on each project. They just need to have an Overleaf account. They can be different people in each project.",
   "maximum_files_uploaded_together": "Maximum __max__ files uploaded together",
   "may": "May",
   "maybe_later": "Maybe later",
@@ -1307,8 +1250,6 @@
   "mendeley_groups_loading_error": "There was an error loading groups from Mendeley",
   "mendeley_groups_relink": "There was an error accessing your Mendeley data. This was likely caused by lack of permissions. Please re-link your account and try again.",
   "mendeley_integration": "Mendeley Integration",
-  "mendeley_integration_lowercase": "Mendeley integration",
-  "mendeley_integration_lowercase_info": "Manage your reference library in Mendeley, and link it directly to .bib files in Overleaf, so you can easily cite anything from your libraries.",
   "mendeley_is_premium": "Mendeley integration is a premium feature",
   "mendeley_reference_loading_error": "Error, could not load references from Mendeley",
   "mendeley_reference_loading_error_expired": "Mendeley token expired, please re-link your account",
@@ -1328,12 +1269,10 @@
   "more_actions": "More actions",
   "more_comments": "More comments",
   "more_info": "More Info",
-  "more_lowercase": "more",
   "more_options": "More options",
   "more_options_for_border_settings_coming_soon": "More options for border settings coming soon.",
   "more_project_collaborators": "<0>More</0> project <0>collaborators</0>",
   "more_than_one_kind_of_snippet_was_requested": "The link to open this content on Overleaf included some invalid parameters. If this keeps happening for links on a particular site, please report this to them.",
-  "most_popular": "most popular",
   "most_popular_uppercase": "Most popular",
   "must_be_email_address": "Must be an email address",
   "must_be_purchased_online": "Must be purchased online",
@@ -1358,7 +1297,6 @@
   "need_contact_group_admin_to_make_changes": "You’ll need to contact your group admin if you want to make certain changes to your account. <0>Read more about managed users.</0>",
   "need_make_changes": "You need to make some changes",
   "need_more_than_50_users": "Need more than 50 users?",
-  "need_more_than_to_licenses_get_in_touch": "Need more than 50 licenses? Please get in touch",
   "need_more_than_x_licenses": "Need more than __x__ licenses?",
   "need_to_add_new_primary_before_remove": "You’ll need to add a new primary email address before you can remove this one.",
   "need_to_leave": "Need to leave?",
@@ -1438,8 +1376,6 @@
   "number_collab_info": "The number of people you can invite to work on a project with you. The limit is per project, so you can invite different people to each project.",
   "number_of_projects": "Number of projects",
   "number_of_users": "Number of users",
-  "number_of_users_info": "The number of users that can upgrade their Overleaf account if you purchase this plan.",
-  "number_of_users_with_colon": "Number of users:",
   "oauth_orcid_description": " <a href=\"__link__\">Securely establish your identity by linking your ORCID iD to your __appName__ account</a>. Submissions to participating publishers will automatically include your ORCID iD for improved workflow and visibility. ",
   "october": "October",
   "off": "Off",
@@ -1449,12 +1385,10 @@
   "ok_join_project": "OK, join project",
   "on": "On",
   "on_free_plan_upgrade_to_access_features": "You are on the __appName__ Free plan. Upgrade to access these <0>Premium features</0>",
-  "one_collaborator": "Only one collaborator",
   "one_collaborator_per_project": "1 collaborator per project",
   "one_free_collab": "One free collaborator",
   "one_per_project": "1 per project",
   "one_step_away_from_professional_features": "You are one step away from accessing <0>Overleaf Professional features</0>!",
-  "one_user": "1 user",
   "ongoing_experiments": "Ongoing experiments",
   "online_latex_editor": "Online LaTeX Editor",
   "only_group_admin_or_managers_can_delete_your_account_1": "By becoming a managed user, your organization will have admin rights over your account and control over your stuff, including the right to close your account and access, delete and share your stuff. As a result:",
@@ -1569,7 +1503,6 @@
   "personal": "Personal",
   "personal_library": "Personal library",
   "personalized_onboarding": "Personalized onboarding",
-  "personalized_onboarding_info": "We’ll help you get everything set up and then we’re here to answer questions from your users about the platform, templates or LaTeX!",
   "pl": "Polish",
   "plan": "Plan",
   "plan_tooltip": "You’re on the __plan__ plan. Click to find out how to make the most of your Overleaf premium features.",
@@ -1612,8 +1545,6 @@
   "position": "Position",
   "postal_code": "Postal Code",
   "postal_code_sentence_case": "Postal code",
-  "powerful_latex_editor_and_realtime_collaboration": "Powerful LaTeX editor & real-time collaboration",
-  "powerful_latex_editor_and_realtime_collaboration_info": "Spell check, intelligent autocomplete, syntax highlighting, dozens of color themes, vim and emacs bindings, help with LaTeX warnings and error messages, and more. Everyone always has the latest version, and you can see your collaborators’ cursors and changes in real time.",
   "premium_feature": "Premium feature",
   "premium_features": "Premium features",
   "premium_plan_label": "You’re using <b>Overleaf Premium</b>",
@@ -1631,7 +1562,6 @@
   "primary_certificate": "Primary certificate",
   "primary_email_check_question": "Is <0>__email__</0> still your email address?",
   "priority_support": "Priority support",
-  "priority_support_info": "Our helpful Support team will prioritise and escalate your support requests where necessary.",
   "privacy": "Privacy",
   "privacy_and_terms": "Privacy and Terms",
   "privacy_policy": "Privacy Policy",
@@ -1656,7 +1586,6 @@
   "project_layout_sharing_submission": "Project Layout, Sharing, and Submission",
   "project_name": "Project Name",
   "project_not_linked_to_github": "This project is not linked to a GitHub repository. You can create a repository for it in GitHub:",
-  "project_owner_plus_10": "Project author + 10",
   "project_ownership_transfer_confirmation_1": "Are you sure you want to make <0>__user__</0> the owner of <1>__project__</1>?",
   "project_ownership_transfer_confirmation_2": "This action cannot be undone. The new owner will be notified and will be able to change project access settings (including removing your own access).",
   "project_renamed_or_deleted": "Project Renamed or Deleted",
@@ -1683,8 +1612,6 @@
   "publisher_account": "Publisher Account",
   "publishing": "Publishing",
   "pull_github_changes_into_sharelatex": "Pull GitHub changes into __appName__",
-  "purchase_now": "Purchase Now",
-  "purchase_now_lowercase": "Purchase now",
   "push_sharelatex_changes_to_github": "Push __appName__ changes to GitHub",
   "push_to_github_pull_to_overleaf": "Push to GitHub, pull to __appName__",
   "quoted_text": "Quoted text",
@@ -1706,7 +1633,6 @@
   "ready_to_use_templates": "Ready-to-use templates",
   "real_time_track_changes": "Real-time track-changes",
   "realtime_track_changes": "Real-time track changes",
-  "realtime_track_changes_info_v2": "Switch on track changes to see who made every change, accept or reject others’ changes, and write comments.",
   "reasons_for_compile_timeouts": "Reasons for compile timeouts",
   "reauthorize_github_account": "Reauthorize your GitHub Account",
   "recaptcha_conditions": "The site is protected by reCAPTCHA and the Google <1>Privacy Policy</1> and <2>Terms of Service</2> apply.",
@@ -1731,7 +1657,6 @@
   "reference_managers": "Reference managers",
   "reference_search": "Advanced reference search",
   "reference_search_info_new": "Find your references easily—search by author, title, year, or journal.",
-  "reference_search_info_v2": "It’s easy to find your references - you can search by author, title, year or journal. You can still search by citation key too.",
   "reference_search_setting": "Reference search",
   "reference_search_settings": "Reference search settings",
   "reference_search_style": "Reference search style",
@@ -1861,17 +1786,13 @@
   "saml_response": "SAML Response",
   "save": "Save",
   "save_20_percent": "save 20%",
-  "save_20_percent_by_paying_annually": "Save 20% by paying annually",
   "save_30_percent_or_more": "save 30% or more",
-  "save_30_percent_or_more_uppercase": "Save 30% or more",
   "save_n_percent": "Save __percentage__%",
   "save_or_cancel-cancel": "Cancel",
   "save_or_cancel-or": "or",
   "save_or_cancel-save": "Save",
   "save_x_percent_or_more": "Save __percent__% or more",
   "saving": "Saving",
-  "saving_20_percent": "Saving 20%!",
-  "saving_20_percent_no_exclamation": "Saving 20%",
   "saving_notification_with_seconds": "Saving __docname__... (__seconds__ seconds of unsaved changes)",
   "search": "Search",
   "search_all_project_files": "Search all project files",
@@ -1982,7 +1903,6 @@
   "show_more": "show more",
   "show_outline": "Show File outline",
   "show_x_more_projects": "Show __x__ more projects",
-  "show_your_support": "Show your support",
   "showing_1_result": "Showing 1 result",
   "showing_1_result_of_total": "Showing 1 result of __total__",
   "showing_x_out_of_n_projects": "Showing __x__ out of __n__ projects.",
@@ -1995,8 +1915,6 @@
   "single_sign_on_sso": "Single Sign-On (SSO)",
   "site_description": "An online LaTeX editor that’s easy to use. No installation, real-time collaboration, version control, hundreds of LaTeX templates, and more.",
   "site_wide_option_available": "Site-wide option available",
-  "sitewide_option_available": "Site-wide option available",
-  "sitewide_option_available_info": "Users are automatically upgraded when they register or add their email address to Overleaf (domain-based enrollment or SSO).",
   "six_collaborators_per_project": "6 collaborators per project",
   "six_per_project": "6 per project",
   "skip": "Skip",
@@ -2049,7 +1967,6 @@
   "sso_explanation": "Set up single sign-on for your group. This sign in method will be optional for group members unless Managed Users is enabled. <0>Learn more about Overleaf Group SSO</0>.",
   "sso_here_is_the_data_we_received": "Here is the data we received in the SAML response:",
   "sso_integration": "SSO integration",
-  "sso_integration_info": "Overleaf offers a standard SAML-based Single Sign On integration.",
   "sso_is_disabled": "SSO is disabled",
   "sso_is_disabled_explanation_1": "Group members won’t be able to log in via SSO",
   "sso_is_disabled_explanation_2": "All members of the group will need a username and password to log in to __appName__",
@@ -2095,9 +2012,7 @@
   "store_your_work": "Store your work on your own infrastructure",
   "stretch_width_to_text": "Stretch width to text",
   "student": "Student",
-  "student_and_faculty_support_make_difference": "Student and faculty support make a difference! We can share this information with our contacts at your university when discussing an Overleaf institutional account.",
   "student_disclaimer": "The educational discount applies to all students at secondary and postsecondary institutions (schools and universities). We may contact you to confirm that you’re eligible for the discount.",
-  "student_plans": "Student Plans",
   "students": "Students",
   "subject": "Subject",
   "subject_area": "Subject area",
@@ -2108,7 +2023,6 @@
   "subscribe_to_find_the_symbols_you_need_faster": "Subscribe to find the symbols you need faster",
   "subscribe_to_plan": "Subscribe to __planName__",
   "subscription": "Subscription",
-  "subscription_admin_panel": "admin panel",
   "subscription_admins_cannot_be_deleted": "You cannot delete your account while on a subscription. Please cancel your subscription and try again. If you keep seeing this message please contact us.",
   "subscription_canceled": "Subscription canceled",
   "subscription_canceled_and_terminate_on_x": " Your subscription has been canceled and will terminate on <0>__terminateDate__</0>. No further payments will be taken.",
@@ -2133,7 +2047,6 @@
   "switch_to_pdf": "Switch to PDF",
   "symbol_palette": "Symbol palette",
   "symbol_palette_highlighted": "<0>Symbol</0> palette",
-  "symbol_palette_info": "A quick and convenient way to insert math symbols into your document.",
   "symbol_palette_info_new": "Insert math symbols into your document with the click of a button.",
   "sync": "Sync",
   "sync_dropbox_github": "Sync with Dropbox and GitHub",
@@ -2238,8 +2151,6 @@
   "this_total_reflects_the_amount_due_until": "This total reflects the amount due from today until <strong>__date__</strong>, the end of the billing period of your existing plan.",
   "this_was_helpful": "This was helpful",
   "this_wasnt_helpful": "This wasn’t helpful",
-  "thousands_templates": "Thousands of templates",
-  "thousands_templates_info": "Produce beautiful documents starting from our gallery of LaTeX templates for journals, conferences, theses, reports, CVs and much more.",
   "three_free_collab": "Three free collaborators",
   "timedout": "Timed out",
   "tip": "Tip",
@@ -2317,7 +2228,6 @@
   "total_due_today": "Total due today",
   "total_per_month": "Total per month",
   "total_per_year": "Total per year",
-  "total_per_year_for_x_users": "total per year for __licenseSize__ users",
   "total_per_year_lowercase": "total per year",
   "total_today": "Total today",
   "total_with_subtotal_and_tax": "Total: <0>__total__</0> (__subtotal__ + __tax__ tax) per year",
@@ -2360,7 +2270,6 @@
   "turn_on": "Turn on",
   "turn_on_link_sharing": "Turn on link sharing",
   "tutorials": "Tutorials",
-  "two_users": "2 users",
   "uk": "Ukrainian",
   "unable_to_extract_the_supplied_zip_file": "Opening this content on Overleaf failed because the zip file could not be extracted. Please ensure that it is a valid zip file. If this keeps happening for links on a particular site, please report this to them.",
   "unarchive": "Restore",
@@ -2376,13 +2285,9 @@
   "university_school": "University or school name",
   "unknown": "Unknown",
   "unlimited": "Unlimited",
-  "unlimited_bold": "<0>Unlimited</0>",
-  "unlimited_collaborators_in_each_project": "Unlimited collaborators in each project",
   "unlimited_collaborators_per_project": "Unlimited collaborators per project",
   "unlimited_collabs": "Unlimited collaborators",
-  "unlimited_collabs_rt": "<0>Unlimited</0> collaborators",
   "unlimited_projects": "Unlimited projects",
-  "unlimited_projects_info": "Your projects are private by default. This means that only you can view them, and only you can allow other people to access them.",
   "unlink": "Unlink",
   "unlink_all_users": "Unlink all users",
   "unlink_all_users_explanation": "You’re about to remove the SSO login option for all users in your group. If SSO is enabled, this will force users to reauthenticate their Overleaf accounts with your IdP. They’ll receive an email asking them to do this.",
@@ -2408,7 +2313,6 @@
   "unsubscribed": "Unsubscribed",
   "unsubscribing": "Unsubscribing",
   "untrash": "Restore",
-  "up_to": "Up to",
   "update": "Update",
   "update_account_info": "Update Account Info",
   "update_billing_details": "Update billing details",
@@ -2436,8 +2340,6 @@
   "url_to_fetch_the_file_from": "URL to fetch the file from",
   "us_gov_banner_government_purchasing": "<0>Get __appName__ for US federal government. </0>Move faster through procurement with our tailored purchasing options. Talk to our government team.",
   "us_gov_banner_small_business_reseller": "<0>Easy procurement for US federal government. </0>We partner with small business resellers to help you buy Overleaf organizational plans. Talk to our government team.",
-  "usage_metrics": "Usage metrics",
-  "usage_metrics_info": "Metrics that show how many users are accessing the licence, how many projects are being created and worked on, and how much collaboration is happening in Overleaf.",
   "use_a_different_password": "Please use a different password",
   "use_saml_metadata_to_configure_sso_with_idp": "Use the Overleaf SAML metadata to configure SSO with your Identity Provider.",
   "use_your_own_machine": "Use your own machine, with your own setup",
@@ -2454,7 +2356,6 @@
   "user_is_not_part_of_group": "User is not part of group",
   "user_last_name_attribute": "User last name attribute",
   "user_management": "User management",
-  "user_management_info": "Group plan admins have access to an admin panel where users can be added and removed easily. For site-wide plans, users are automatically upgraded when they register or add their email address to Overleaf (domain-based enrollment or SSO).",
   "user_metrics": "User metrics",
   "user_not_found": "User not found",
   "user_sessions": "User Sessions",
@@ -2541,7 +2442,6 @@
   "work_or_university_sso": "Work/university single sign-on",
   "work_with_non_overleaf_users": "Work with non Overleaf users",
   "work_with_other_github_users": "Work with other GitHub users",
-  "would_you_like_to_see_a_university_subscription": "Would you like to see a university-wide __appName__ subscription at your university?",
   "write_and_collaborate_faster_with_features_like": "Write and collaborate faster with features like:",
   "writefull": "Writefull",
   "writefull_learn_more": "Learn more about Writefull for Overleaf",
@@ -2550,7 +2450,6 @@
   "writefull_settings_description": "Get free AI-based language feedback specifically tailored for research writing with Writefull for Overleaf.",
   "x_changes_in": "__count__ change in",
   "x_changes_in_plural": "__count__ changes in",
-  "x_collaborators_per_project": "__collaboratorsCount__ collaborators per project",
   "x_libraries_accessed_in_this_project": "__provider__ libraries accessed in this project",
   "x_price_for_first_month": "<0>__price__</0> for your first month",
   "x_price_for_first_year": "<0>__price__</0> for your first year",
@@ -2564,8 +2463,6 @@
   "yes_that_is_correct": "Yes, that’s correct",
   "you": "You",
   "you_already_have_a_subscription": "You already have a subscription",
-  "you_and_collaborators_get_access_to": "You and your project collaborators get access to",
-  "you_and_collaborators_get_access_to_info": "These features are available to you and your collaborators (other Overleaf users that you invite to your projects).",
   "you_are_a_manager_and_member_of_x_plan_as_member_of_group_subscription_y_administered_by_z": "You are a <1>manager</1> and <1>member</1> of the <0>__planName__</0> group subscription <1>__groupName__</1> administered by <1>__adminEmail__</1>.",
   "you_are_a_manager_and_member_of_x_plan_as_member_of_group_subscription_y_administered_by_z_you": "You are a <1>manager</1> and <1>member</1> of the <0>__planName__</0> group subscription <1>__groupName__</1> administered by <1>you (__adminEmail__)</1>.",
   "you_are_a_manager_of_commons_at_institution_x": "You are a <0>manager</0> of the Overleaf Commons subscription at <0>__institutionName__</0>",
@@ -2591,8 +2488,6 @@
   "you_cant_join_this_group_subscription": "You can’t join this group subscription",
   "you_cant_reset_password_due_to_sso": "You can’t reset your password because your group or organization uses SSO. <0>Log in with SSO</0>.",
   "you_dont_have_any_repositories": "You don’t have any repositories",
-  "you_get_access_to": "You get access to",
-  "you_get_access_to_info": "These features are available only to you (the subscriber).",
   "you_have_0_free_suggestions_left": "You have 0 free suggestions left",
   "you_have_1_free_suggestion_left": "You have 1 free suggestion left",
   "you_have_1_user_and_your_plan_supports_up_to_y": "You have 1 user and your plan supports up to __groupSize__.",
@@ -2603,9 +2498,6 @@
   "you_have_x_users_and_your_plan_supports_up_to_y": "You have __addedUsersSize__ users and your plan supports up to __groupSize__.",
   "you_have_x_users_on_your_subscription": "You have __groupSize__ users on your subscription.",
   "you_need_to_configure_your_sso_settings": "You need to configure and test your SSO settings before enabling SSO",
-  "you_plus_1": "You + 1",
-  "you_plus_10": "You + 10",
-  "you_plus_6": "You + 6",
   "you_will_be_able_to_contact_us_any_time_to_share_your_feedback": "<0>You will be able to contact us</0> any time to share your feedback",
   "you_will_be_able_to_reassign_subscription": "You will be able to reassign their subscription membership to another person in your organization",
   "youll_get_best_results_in_visual_but_can_be_used_in_source": "You’ll get the best results from using this tool in the <0>Visual Editor</0>, although you can still use it to insert tables in the <1>Code Editor</1>. Once you’ve selected the number of rows and columns you need, the table will appear in your document and you can double click in a cell to add contents to it.",
@@ -2672,8 +2564,6 @@
   "zotero_groups_loading_error": "There was an error loading groups from Zotero",
   "zotero_groups_relink": "There was an error accessing your Zotero data. This was likely caused by lack of permissions. Please re-link your account and try again.",
   "zotero_integration": "Zotero Integration",
-  "zotero_integration_lowercase": "Zotero integration",
-  "zotero_integration_lowercase_info": "Manage your reference library in Zotero, and link it directly to .bib files in Overleaf, so you can easily cite anything from your libraries.",
   "zotero_is_premium": "Zotero integration is a premium feature",
   "zotero_reference_loading_error": "Error, could not load references from Zotero",
   "zotero_reference_loading_error_expired": "Zotero token expired, please re-link your account",

+ 0 - 256
services/web/test/unit/src/Subscription/SubscriptionControllerTests.js

@@ -132,9 +132,6 @@ describe('SubscriptionController', function () {
         getAssignment: sinon.stub().resolves({ variant: 'default' }),
       },
     }
-    this.SubscriptionHelper = {
-      generateInitialLocalizedGroupPrice: sinon.stub(),
-    }
     this.Features = {
       hasFeature: sinon.stub().returns(false),
     }
@@ -189,259 +186,6 @@ describe('SubscriptionController', function () {
     this.stubbedCurrencyCode = 'GBP'
   })
 
-  describe('plansPage', function () {
-    beforeEach(function () {
-      this.req.ip = '1234.3123.3131.333 313.133.445.666 653.5345.5345.534'
-      this.GeoIpLookup.promises.getCurrencyCode.resolves({
-        currencyCode: this.stubbedCurrencyCode,
-      })
-    })
-
-    describe('ip override', function () {
-      beforeEach(function () {
-        this.req.ip = '1.2.3.4'
-        this.req.query = { ip: '5.6.7.8' }
-        this.GeoIpLookup.promises.getCurrencyCode.withArgs('1.2.3.4').resolves({
-          currencyCode: 'GBP',
-        })
-        this.GeoIpLookup.promises.getCurrencyCode.withArgs('5.6.7.8').resolves({
-          currencyCode: 'USD',
-        })
-      })
-      it('should ignore override for non admin', function (done) {
-        this.res.render = (page, opts) => {
-          opts.recommendedCurrency.should.equal('GBP')
-          done()
-        }
-        this.AuthorizationManager.promises.isUserSiteAdmin.resolves(false)
-        this.SubscriptionController.plansPage(this.req, this.res)
-      })
-
-      it('should accept override for admin', function (done) {
-        this.res.render = (page, opts) => {
-          opts.recommendedCurrency.should.equal('USD')
-          done()
-        }
-        this.AuthorizationManager.promises.isUserSiteAdmin.resolves(true)
-        this.SubscriptionController.plansPage(this.req, this.res)
-      })
-    })
-
-    describe('groupPlanModal data', function () {
-      it('should pass local currency if valid', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/plans')
-          opts.groupPlanModalDefaults.currency.should.equal('GBP')
-          done()
-        }
-        this.GeoIpLookup.promises.getCurrencyCode.resolves({
-          currencyCode: 'GBP',
-        })
-        this.SubscriptionController.plansPage(this.req, this.res)
-      })
-
-      it('should fallback to USD when valid', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/plans')
-          opts.groupPlanModalDefaults.currency.should.equal('USD')
-          done()
-        }
-        this.GeoIpLookup.promises.getCurrencyCode.resolves({
-          currencyCode: 'FOO',
-        })
-        this.SubscriptionController.plansPage(this.req, this.res)
-      })
-
-      it('should pass valid options for group plan modal and discard invalid', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/plans')
-          opts.groupPlanModalDefaults.size.should.equal('42')
-          opts.groupPlanModalDefaults.plan_code.should.equal('collaborator')
-          opts.groupPlanModalDefaults.currency.should.equal('GBP')
-          opts.groupPlanModalDefaults.usage.should.equal('foo')
-          done()
-        }
-        this.GeoIpLookup.isValidCurrencyParam.returns(false)
-        this.req.query = {
-          number: '42',
-          currency: 'ABC',
-          plan: 'does-not-exist',
-          usage: 'foo',
-        }
-        this.SubscriptionController.plansPage(this.req, this.res)
-      })
-    })
-
-    describe('formatCurrency data', function () {
-      it('return correct formatCurrency function', function (done) {
-        this.res.render = (page, opts) => {
-          expect(opts.formatCurrency).to.equal(this.currency.formatCurrency)
-          done()
-        }
-        this.SubscriptionController.plansPage(this.req, this.res)
-      })
-    })
-
-    it('should return correct countryCode', function (done) {
-      this.GeoIpLookup.promises.getCurrencyCode.resolves({
-        countryCode: 'MX',
-      })
-      this.res.render = (page, opts) => {
-        expect(opts.countryCode).to.equal('MX')
-        done()
-      }
-      this.SubscriptionController.plansPage(this.req, this.res)
-    })
-  })
-
-  describe('plansPage light touch redesign', function () {
-    beforeEach(function () {
-      this.req.ip = '1234.3123.3131.333 313.133.445.666 653.5345.5345.534'
-      this.GeoIpLookup.promises.getCurrencyCode.resolves({
-        currencyCode: this.stubbedCurrencyCode,
-      })
-    })
-
-    describe('ip override', function () {
-      beforeEach(function () {
-        this.req.ip = '1.2.3.4'
-        this.req.query = { ip: '5.6.7.8' }
-        this.GeoIpLookup.promises.getCurrencyCode.withArgs('1.2.3.4').resolves({
-          currencyCode: 'GBP',
-        })
-        this.GeoIpLookup.promises.getCurrencyCode.withArgs('5.6.7.8').resolves({
-          currencyCode: 'USD',
-        })
-      })
-      it('should ignore override for non admin', function (done) {
-        this.res.render = (page, opts) => {
-          opts.recommendedCurrency.should.equal('GBP')
-          done()
-        }
-        this.AuthorizationManager.promises.isUserSiteAdmin.resolves(false)
-        this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-      })
-
-      it('should accept override for admin', function (done) {
-        this.res.render = (page, opts) => {
-          opts.recommendedCurrency.should.equal('USD')
-          done()
-        }
-        this.AuthorizationManager.promises.isUserSiteAdmin.resolves(true)
-        this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-      })
-    })
-
-    describe('groupPlanModal data', function () {
-      it('should pass local currency if valid', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/plans-light-design')
-          opts.groupPlanModalDefaults.currency.should.equal('GBP')
-          done()
-        }
-        this.GeoIpLookup.promises.getCurrencyCode.resolves({
-          currencyCode: 'GBP',
-        })
-        this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-      })
-
-      it('should fallback to USD when valid', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/plans-light-design')
-          opts.groupPlanModalDefaults.currency.should.equal('USD')
-          done()
-        }
-        this.GeoIpLookup.promises.getCurrencyCode.resolves({
-          currencyCode: 'FOO',
-        })
-        this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-      })
-
-      it('should pass valid options for group plan modal and discard invalid', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/plans-light-design')
-          opts.groupPlanModalDefaults.size.should.equal('42')
-          opts.groupPlanModalDefaults.plan_code.should.equal('collaborator')
-          opts.groupPlanModalDefaults.currency.should.equal('GBP')
-          opts.groupPlanModalDefaults.usage.should.equal('foo')
-          done()
-        }
-        this.GeoIpLookup.isValidCurrencyParam.returns(false)
-        this.req.query = {
-          number: '42',
-          currency: 'ABC',
-          plan: 'does-not-exist',
-          usage: 'foo',
-        }
-        this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-      })
-    })
-
-    describe('formatCurrency data', function () {
-      it('return correct formatCurrency function', function (done) {
-        this.res.render = (page, opts) => {
-          expect(opts.formatCurrency).to.equal(this.currency.formatCurrency)
-          done()
-        }
-        this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-      })
-    })
-
-    it('should return correct countryCode', function (done) {
-      this.GeoIpLookup.promises.getCurrencyCode.resolves({
-        countryCode: 'MX',
-      })
-      this.res.render = (page, opts) => {
-        expect(opts.countryCode).to.equal('MX')
-        done()
-      }
-      this.SubscriptionController.plansPageLightDesign(this.req, this.res)
-    })
-  })
-
-  describe('interstitialPaymentPage', function () {
-    beforeEach(function () {
-      this.req.ip = '1234.3123.3131.333 313.133.445.666 653.5345.5345.534'
-      this.GeoIpLookup.promises.getCurrencyCode.resolves({
-        currencyCode: this.stubbedCurrencyCode,
-      })
-    })
-
-    describe('with a user without subscription', function () {
-      it('should render the interstitial payment page', function (done) {
-        this.res.render = (page, opts) => {
-          page.should.equal('subscriptions/interstitial-payment')
-          done()
-        }
-        this.SubscriptionController.interstitialPaymentPage(this.req, this.res)
-      })
-    })
-
-    describe('with a user with subscription', function () {
-      it('should redirect to the subscription dashboard', function (done) {
-        this.LimitationsManager.promises.userHasSubscription.resolves({
-          hasSubscription: true,
-        })
-        this.res.redirect = url => {
-          url.should.equal('/user/subscription?hasSubscription=true')
-          done()
-        }
-        this.SubscriptionController.interstitialPaymentPage(this.req, this.res)
-      })
-    })
-
-    it('should return correct countryCode', function (done) {
-      this.GeoIpLookup.promises.getCurrencyCode.resolves({
-        countryCode: 'MX',
-      })
-      this.res.render = (page, opts) => {
-        expect(opts.countryCode).to.equal('MX')
-        done()
-      }
-      this.SubscriptionController.interstitialPaymentPage(this.req, this.res)
-    })
-  })
-
   describe('successfulSubscription', function () {
     it('without a personal subscription', function (done) {
       this.SubscriptionViewModelBuilder.promises.buildUsersSubscriptionViewModel.resolves(