diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee
index 25086ffcf7..cf1bf59ebd 100644
--- a/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee
+++ b/services/web/app/coffee/Features/Subscription/SubscriptionController.coffee
@@ -30,7 +30,6 @@ module.exports = SubscriptionController =
plans: plans
gaExperiments: Settings.gaExperiments.plansPage
recomendedCurrency:recomendedCurrency
- shouldABTestPlans: currentUser == null or (currentUser?.signUpDate? and currentUser.signUpDate >= '2018-06-06')
planFeatures: planFeatures
user_id = AuthenticationController.getLoggedInUserId(req)
if user_id?
diff --git a/services/web/app/views/subscriptions/_modal_group_inquiry.pug b/services/web/app/views/subscriptions/_modal_group_inquiry.pug
new file mode 100644
index 0000000000..5e54e31b7a
--- /dev/null
+++ b/services/web/app/views/subscriptions/_modal_group_inquiry.pug
@@ -0,0 +1,30 @@
+script(type="text/ng-template", id="groupPlanModalTemplate")
+ .modal-header
+ h3 #{translate("group_plan_enquiry")}
+ .modal-body
+ form.text-left.form(ng-controller="UniverstiesContactController", ng-submit="contactUs()")
+ span(ng-show="sent == false && error == false")
+ .form-group
+ label#title9(for='Field9')
+ | Name
+ input#Field9.field.text.medium.span8.form-control(ng-model="form.name", maxlength='255', tabindex='1', onkeyup='')
+ label#title11.desc(for='Field11')
+ | Email
+ .form-group
+ input#Field11.field.text.medium.span8.form-control(ng-model="form.email", name='Field11', type='email', spellcheck='false', value='', maxlength='255', tabindex='2')
+ label#title12.desc(for='Field12')
+ | University / Company
+ .form-group
+ input#Field12.field.text.medium.span8.form-control(ng-model="form.university", name='Field12', type='text', value='', maxlength='255', tabindex='3', onkeyup='')
+ label#title13.desc(for='Field13')
+ | Position
+ .form-group
+ input#Field13.field.text.medium.span8.form-control(ng-model="form.position", name='Field13', type='text', value='', maxlength='255', tabindex='4', onkeyup='')
+ .form-group
+ input(ng-model="form.source", type="hidden", ng-init="form.source = '__ref__'; form.subject = 'General enquiry for larger ShareLaTeX use';")
+ .form-group.text-center
+ input#saveForm.btn-success.btn.btn-lg(name='saveForm', type='submit', ng-disabled="sending", value='Request a quote')
+ span(ng-show="sent == true && error == false")
+ p Request Sent, Thank you.
+ span(ng-show="error")
+ p Error sending request.
\ No newline at end of file
diff --git a/services/web/app/views/subscriptions/_plans_faq.pug b/services/web/app/views/subscriptions/_plans_faq.pug
new file mode 100644
index 0000000000..7f35c23738
--- /dev/null
+++ b/services/web/app/views/subscriptions/_plans_faq.pug
@@ -0,0 +1,33 @@
+.faq
+ .row.row-spaced-large
+ .col-md-12
+ .page-header.plans-header.plans-subheader.text-centered
+ h2 FAQ
+ .row
+ .col-md-6
+ h3 #{translate("faq_how_free_trial_works_question")}
+ p #{translate('faq_how_free_trial_works_answer', { len:'{{trial_len}}' })}
+ .col-md-6
+ h3 #{translate('faq_change_plans_question')}
+ p #{translate('faq_change_plans_answer')}
+ .row
+ .col-md-6
+ h3 #{translate('faq_do_collab_need_premium_question')}
+ p #{translate('faq_do_collab_need_premium_answer')}
+ .col-md-6
+ h3 #{translate('faq_need_more_collab_question')}
+ p !{translate('faq_need_more_collab_answer', { referFriendsLink: '' + translate('referring_your_friends') + ''})}
+ .row
+ .col-md-6
+ h3 #{translate('faq_purchase_more_licenses_question')}
+ p !{translate('faq_purchase_more_licenses_answer', { groupLink: '' + translate('discounted_group_accounts') + '' })}
+ .col-md-6
+ h3 #{translate('faq_monthly_or_annual_question')}
+ p #{translate('faq_monthly_or_annual_answer')}
+ .row
+ .col-md-6
+ h3 #{translate('faq_how_to_pay_question')}
+ p #{translate('faq_how_to_pay_answer')}
+ .col-md-6
+ h3 #{translate('faq_pay_by_invoice_question')}
+ p !{translate('faq_pay_by_invoice_answer', { groupLink: '' + translate('discounted_group_accounts') + '' })}
diff --git a/services/web/app/views/subscriptions/_plans_page_details_less.pug b/services/web/app/views/subscriptions/_plans_page_details_less.pug
deleted file mode 100644
index 2aa572e4e7..0000000000
--- a/services/web/app/views/subscriptions/_plans_page_details_less.pug
+++ /dev/null
@@ -1,118 +0,0 @@
-.row
- .col-md-12
- .page-header.centered.plans-header.text-centered
- h1 #{translate("start_x_day_trial", {len:'{{trial_len}}'})}
-.row
- .col-md-8.col-md-offset-2
- p.text-centered #{translate("sl_benefits_plans")}
-
-.row.top-switch
- .col-md-6.col-md-offset-3
- +plan_switch('card')
- .col-md-2.text-right
- +currency_dropdown
-
-div(ng-show="showPlans")
- .row
- .col-md-10.col-md-offset-1
- .row
- .card-group.text-centered(ng-if="ui.view == 'monthly' || ui.view == 'annual'")
- .col-md-4
- .card.card-first
- .card-header
- h2 #{translate("personal")}
- .circle #{translate("free")}
- +features_free
- .col-md-4
- .card.card-highlighted
- .card-header
- h2 #{translate("collaborator")}
- .circle
- +price_collaborator
- +features_collaborator
- .col-md-4
- .card.card-last
- .card-header
- h2 #{translate("professional")}
- .circle
- +price_professional
- +features_professional
-
- .card-group.text-centered(ng-if="ui.view == 'student'")
- .col-md-4
- .card.card-first
- .card-header
- h2 #{translate("personal")}
- .circle #{translate("free")}
- +features_free
-
- .col-md-4
- .card.card-highlighted
- +card_student_monthly
-
- .col-md-4
- .card.card-last
- +card_student_annual
-
-.row.row-spaced
- p.text-centered #{translate("choose_plan_works_for_you", {len:'{{trial_len}}'})}
-
-.row
- .col-md-8.col-md-offset-2
- .alert.alert-info.text-centered
- | #{translate("interested_in_group_licence")}
- br
- a(href, ng-click="openGroupPlanModal()") #{translate("get_in_touch_for_details")}
-
- script(type="text/ng-template", id="groupPlanModalTemplate")
- .modal-header
- h3 #{translate("group_plan_enquiry")}
- .modal-body
- form.text-left.form(ng-controller="UniverstiesContactController", ng-submit="contactUs()")
- span(ng-show="sent == false && error == false")
- .form-group
- label#title9(for='Field9')
- | Name
- input#Field9.field.text.medium.span8.form-control(ng-model="form.name", maxlength='255', tabindex='1', onkeyup='')
- label#title11.desc(for='Field11')
- | Email
- .form-group
- input#Field11.field.text.medium.span8.form-control(ng-model="form.email", name='Field11', type='email', spellcheck='false', value='', maxlength='255', tabindex='2')
- label#title12.desc(for='Field12')
- | University / Company
- .form-group
- input#Field12.field.text.medium.span8.form-control(ng-model="form.university", name='Field12', type='text', value='', maxlength='255', tabindex='3', onkeyup='')
- label#title13.desc(for='Field13')
- | Position
- .form-group
- input#Field13.field.text.medium.span8.form-control(ng-model="form.position", name='Field13', type='text', value='', maxlength='255', tabindex='4', onkeyup='')
- .form-group
- input(ng-model="form.source", type="hidden", ng-init="form.source = '__ref__'; form.subject = 'General enquiry for larger ShareLaTeX use';")
- .form-group.text-center
- input#saveForm.btn-success.btn.btn-lg(name='saveForm', type='submit', ng-disabled="sending", value='Request a quote')
- span(ng-show="sent == true && error == false")
- p Request Sent, Thank you.
- span(ng-show="error")
- p Error sending request.
-
-.row
- .col-md-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 #{translate("enjoy_these_features")}
- .col-md-4
- .card.features.text-centered
- i.fa.fa-file-text-o.fa-5x
- h4 #{translate("unlimited_projects")}
- p #{translate("create_unlimited_projects")}
- .col-md-4
- .card.features.text-centered
- i.fa.fa-clock-o.fa-5x
- h4 #{translate("full_doc_history")}
- p #{translate("never_loose_work")}
- .col-md-4
- .card.features.text-centered
- i.fa.fa-dropbox.fa-5x
- |
- i.fa.fa-github.fa-5x
- h4 #{translate("sync_to_dropbox_and_github")}
- p #{translate("access_projects_anywhere")}
\ No newline at end of file
diff --git a/services/web/app/views/subscriptions/_plans_page_details_more.pug b/services/web/app/views/subscriptions/_plans_page_details_more.pug
deleted file mode 100644
index d4867c2811..0000000000
--- a/services/web/app/views/subscriptions/_plans_page_details_more.pug
+++ /dev/null
@@ -1,160 +0,0 @@
-.row
- .col-md-12
- .page-header.centered.plans-header.text-centered
- h1.text-capitalize #{translate('instant_access')}
-.row
- .col-md-8.col-md-offset-2
- p.text-centered #{translate("sl_benefits_plans")}
-
-.row.top-switch
- .col-md-6.col-md-offset-3
- +plan_switch('card')
- .col-md-2.text-right
- +currency_dropdown
-
-div(ng-show="showPlans")
- .row
- .col-md-10.col-md-offset-1
- .row
- .card-group.text-centered(ng-if="ui.view == 'monthly' || ui.view == 'annual'")
- .col-md-4
- .card.card-first
- .card-header
- h2 #{translate("personal")}
- h5.tagline #{translate("tagline_personal")}
- .circle #{translate("free")}
- +features_free
- .col-md-4
- .card.card-highlighted
- .best-value
- strong #{translate('best_value')}
- .card-header
- h2 #{translate("collaborator")}
- h5.tagline #{translate("tagline_collaborator")}
- .circle
- +price_collaborator
- +features_collaborator
- .col-md-4
- .card.card-last
- .card-header
- h2 #{translate("professional")}
- h5.tagline #{translate("tagline_professional")}
- .circle
- +price_professional
- +features_professional
-
- .card-group.text-centered(ng-if="ui.view == 'student'")
- .col-md-4
- .card.card-first
- .card-header
- h2 #{translate("personal")}
- h5.tagline #{translate("tagline_personal")}
- .circle #{translate("free")}
- +features_free
-
- .col-md-4
- .card.card-highlighted
- +card_student_annual
-
- .col-md-4
- .card.card-last
- +card_student_monthly
-
-.row.row-spaced-large.text-centered
- i.fa.fa-cc-mastercard.fa-2x
- i.fa.fa-cc-visa.fa-2x
- i.fa.fa-cc-amex.fa-2x
- i.fa.fa-cc-paypal.fa-2x
- div.text-centered #{translate('change_plans_any_time')}
#{translate('billed_after_x_days', {len:'{{trial_len}}'})}
-
-.row.row-spaced-large
- .col-md-8.col-md-offset-2
- .card.text-centered
- .card-header
- h2 #{translate('looking_multiple_licenses')}
- span #{translate('reduce_costs_group_licenses')}
- br
- br
- a.btn.btn-info(href="/i/university/groups") #{translate('find_out_more')}
-
-div
- .row.row-spaced-large
- .col-sm-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 #{translate('compare_plan_features')}
- .row
- .col-md-6.col-md-offset-3
- +plan_switch('table')
- .col-md-3.text-right
- +currency_dropdown
- .row(event-tracking="features-table-viewed" event-tracking-ga="subscription-funnel" event-tracking-trigger="scroll" event-tracking-send-once="true" event-tracking-label=`exp-{{plansVariant}}`)
- .col-sm-12(ng-if="ui.view != 'student'")
- +table_premium
- .col-sm-12(ng-if="ui.view == 'student'")
- +table_student
-
- .row.row-spaced-large
- .col-md-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 #{translate('in_good_company')}
- .row
- .col-md-6
- div
- .row
- .col-md-3
- .circle-img
- img(src=buildImgPath('advocates/erdogmus.jpg') alt="Professor Erdogmus")
- .col-md-9
- blockquote
- p The ability to track changes and the real-time collaborative nature is what sets ShareLaTeX apart.
- footer Professor Erdogmus, Northeastern University
- .col-md-6
- div
- .row
- .col-md-3
- .circle-img
- img(src=buildImgPath('advocates/henderson.jpg') alt="Rob Henderson")
- .col-md-9
- blockquote
- p ShareLaTeX has proven to be a powerful and robust collaboration tool that is widely used in our School.
- footer Rob Henderson, School Of Informatics And Computing - Indiana University
-
- .faq
- .row.row-spaced-large
- .col-md-12
- .page-header.plans-header.plans-subheader.text-centered
- h2 FAQ
- .row
- .col-md-6
- h3 #{translate("faq_how_free_trial_works_question")}
- p #{translate('faq_how_free_trial_works_answer', { len:'{{trial_len}}' })}
- .col-md-6
- h3 #{translate('faq_change_plans_question')}
- p #{translate('faq_change_plans_answer')}
- .row
- .col-md-6
- h3 #{translate('faq_do_collab_need_premium_question')}
- p #{translate('faq_do_collab_need_premium_answer')}
- .col-md-6
- h3 #{translate('faq_need_more_collab_question')}
- p !{translate('faq_need_more_collab_answer', { referFriendsLink: '' + translate('referring_your_friends') + ''})}
- .row
- .col-md-6
- h3 #{translate('faq_purchase_more_licenses_question')}
- p !{translate('faq_purchase_more_licenses_answer', { groupLink: '' + translate('discounted_group_accounts') + '' })}
- .col-md-6
- h3 #{translate('faq_monthly_or_annual_question')}
- p #{translate('faq_monthly_or_annual_answer')}
- .row
- .col-md-6
- h3 #{translate('faq_how_to_pay_question')}
- p #{translate('faq_how_to_pay_answer')}
- .col-md-6
- h3 #{translate('faq_pay_by_invoice_question')}
- p !{translate('faq_pay_by_invoice_answer', { groupLink: '' + translate('discounted_group_accounts') + '' })}
- .row.row-spaced-large.text-centery
- .col-md-12
- .plans-header.plans-subheader.text-centered
- h2 #{translate('still_have_questions')}
- button.btn.btn-info.btn-header.text-capitalize(ng-controller="ContactGeneralModal" ng-click="openModal()") #{translate('get_in_touch')}
- != moduleIncludes("contactModalGeneral", locals)
diff --git a/services/web/app/views/subscriptions/_plans_page_mixins.pug b/services/web/app/views/subscriptions/_plans_page_mixins.pug
index c1f19bca00..6dd91a79f3 100644
--- a/services/web/app/views/subscriptions/_plans_page_mixins.pug
+++ b/services/web/app/views/subscriptions/_plans_page_mixins.pug
@@ -12,8 +12,7 @@ mixin btn_buy_free(location)
style=(getLoggedInUserId() === null ? "" : "visibility: hidden")
ng-click="signUpNowClicked('free','" + location + "')"
)
- span(ng-if="plansVariant !== 'more-details'") #{translate('sign_up_now')}
- span.text-capitalize(ng-if="plansVariant === 'more-details'") #{translate('get_started_now')}
+ span.text-capitalize #{translate('get_started_now')}
mixin btn_buy_professional(location)
a.btn.btn-info(
ng-href="/user/subscription/new?planCode=professional{{ ui.view == 'annual' && '-annual' || planQueryString}}¤cy={{currencyCode}}"
@@ -36,11 +35,11 @@ mixin btn_buy_student(location, plan)
//- Cards
mixin card_student_annual
- .best-value(ng-if="plansVariant == 'more-details'")
+ .best-value
strong #{translate('best_value')}
.card-header
h2 #{translate("student")} (#{translate("annual")})
- h5.tagline(ng-if="plansVariant == 'more-details'") #{translate('tagline_student_annual')}
+ h5.tagline #{translate('tagline_student_annual')}
.circle
span
+price_student_annual
@@ -48,7 +47,7 @@ mixin card_student_annual
mixin card_student_monthly
.card-header
h2 #{translate("student")}
- h5.tagline(ng-if="plansVariant == 'more-details'") #{translate('tagline_student_monthly')}
+ h5.tagline #{translate('tagline_student_monthly')}
.circle
span
+price_student_monthly
@@ -69,23 +68,20 @@ mixin features_free
li(class="hidden-xs hidden-sm")
li(class="hidden-xs hidden-sm")
li(class="hidden-xs hidden-sm")
- li(class="hidden-xs hidden-sm" ng-if="plansVariant === 'more-details'")
- li(class="hidden-xs hidden-sm" ng-if="plansVariant === 'more-details'")
- li(class="hidden-xs hidden-sm" ng-if="plansVariant === 'more-details'")
+ li(class="hidden-xs hidden-sm")
+ li(class="hidden-xs hidden-sm")
+ li(class="hidden-xs hidden-sm")
li
br
+btn_buy_free('card')
mixin features_premium
- li(ng-if="plansVariant != 'more-details'") #{translate("full_doc_history")}
- li(ng-if="plansVariant != 'more-details'") #{translate("sync_to_dropbox")}
- li(ng-if="plansVariant != 'more-details'") #{translate("sync_to_github")}
- li(ng-if="plansVariant === 'more-details'")
- li(ng-if="plansVariant === 'more-details'")
+ li
+ li
strong #{translate('all_premium_features')}
- li(ng-if="plansVariant === 'more-details'") #{translate('sync_dropbox_github')}
- li(ng-if="plansVariant === 'more-details'") #{translate('full_doc_history')}
- li(ng-if="plansVariant === 'more-details'") #{translate('track_changes')}
- li(ng-if="plansVariant === 'more-details'") + #{translate('more').toLowerCase()}
+ li #{translate('sync_dropbox_github')}
+ li #{translate('full_doc_history')}
+ li #{translate('track_changes')}
+ li + #{translate('more').toLowerCase()}
mixin features_professional
ul.list-unstyled
li
@@ -159,4 +155,3 @@ mixin plan_switch(location)
href="#"
ng-click="switchToStudent($event,'" + location + "')"
) #{translate("half_price_student")}
-
diff --git a/services/web/app/views/subscriptions/_plans_page_tables.pug b/services/web/app/views/subscriptions/_plans_page_tables.pug
index 63c4747603..1931ff6beb 100644
--- a/services/web/app/views/subscriptions/_plans_page_tables.pug
+++ b/services/web/app/views/subscriptions/_plans_page_tables.pug
@@ -22,7 +22,7 @@ mixin table_premium
for feature in planFeatures
tr
- td(event-tracking="features-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}-exp-{{plansVariant}}`)
+ td(event-tracking="features-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}`)
if feature.info
span(tooltip=translate(feature.info)) #{translate(feature.feature)}
else
@@ -77,7 +77,7 @@ mixin table_student
for feature in planFeatures
tr
- td(event-tracking="plans-page-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}-exp-{{plansVariant}}`)
+ td(event-tracking="plans-page-table" event-tracking-trigger="hover" event-tracking-ga="subscription-funnel" event-tracking-label=`${feature.feature}`)
if feature.info
span(tooltip=translate(feature.info)) #{translate(feature.feature)}
else
@@ -104,4 +104,3 @@ mixin table_student
.outer-content
td
+btn_buy_student('table', 'monthly')
-
diff --git a/services/web/app/views/subscriptions/new.pug b/services/web/app/views/subscriptions/new.pug
index d3d99168d1..afbb066162 100644
--- a/services/web/app/views/subscriptions/new.pug
+++ b/services/web/app/views/subscriptions/new.pug
@@ -33,7 +33,7 @@ block content
a(
ng-click="changeCurrency(currency)",
) {{currency}} ({{value['symbol']}})
- .row(ng-if="plansVariant == 'more-details' && planCode == 'student-annual' || plansVariant == 'more-details' && planCode == 'student-monthly'")
+ .row(ng-if="planCode == 'student-annual' || planCode == 'student-monthly'")
.col-xs-12
p.student-disclaimer #{translate('student_disclaimer')}
diff --git a/services/web/app/views/subscriptions/plans.pug b/services/web/app/views/subscriptions/plans.pug
index 51efcd5125..33346d4a52 100644
--- a/services/web/app/views/subscriptions/plans.pug
+++ b/services/web/app/views/subscriptions/plans.pug
@@ -7,12 +7,140 @@ block scripts
script(type='text/javascript').
window.recomendedCurrency = '#{recomendedCurrency}'
window.abCurrencyFlag = '#{abCurrencyFlag}'
- window.shouldABTestPlans = #{shouldABTestPlans || false}
block content
.content.content-alt
- .content.plans(ng-controller="PlansController")
- .container(class="more-details" ng-cloak ng-if="plansVariant === 'more-details'")
- include _plans_page_details_more
- .container(ng-cloak ng-if="plansVariant === 'default' || !shouldABTestPlans || timeout")
- include _plans_page_details_less
+ .plans(ng-controller="PlansController")
+ .container(ng-cloak)
+ .row
+ .col-md-12
+ .page-header.centered.plans-header.text-centered
+ h1.text-capitalize #{translate('instant_access')}
+ .row
+ .col-md-8.col-md-offset-2
+ p.text-centered #{translate("sl_benefits_plans")}
+
+ .row.top-switch
+ .col-md-6.col-md-offset-3
+ +plan_switch('card')
+ .col-md-2.text-right
+ +currency_dropdown
+
+ div(ng-show="showPlans")
+ .row
+ .col-md-10.col-md-offset-1
+ .row
+ .card-group.text-centered(ng-if="ui.view == 'monthly' || ui.view == 'annual'")
+ .col-md-4
+ .card.card-first
+ .card-header
+ h2 #{translate("personal")}
+ h5.tagline #{translate("tagline_personal")}
+ .circle #{translate("free")}
+ +features_free
+ .col-md-4
+ .card.card-highlighted
+ .best-value
+ strong #{translate('best_value')}
+ .card-header
+ h2 #{translate("collaborator")}
+ h5.tagline #{translate("tagline_collaborator")}
+ .circle
+ +price_collaborator
+ +features_collaborator
+ .col-md-4
+ .card.card-last
+ .card-header
+ h2 #{translate("professional")}
+ h5.tagline #{translate("tagline_professional")}
+ .circle
+ +price_professional
+ +features_professional
+
+ .card-group.text-centered(ng-if="ui.view == 'student'")
+ .col-md-4
+ .card.card-first
+ .card-header
+ h2 #{translate("personal")}
+ h5.tagline #{translate("tagline_personal")}
+ .circle #{translate("free")}
+ +features_free
+
+ .col-md-4
+ .card.card-highlighted
+ +card_student_annual
+
+ .col-md-4
+ .card.card-last
+ +card_student_monthly
+
+ .row.row-spaced-large.text-centered
+ i.fa.fa-cc-mastercard.fa-2x
+ i.fa.fa-cc-visa.fa-2x
+ i.fa.fa-cc-amex.fa-2x
+ i.fa.fa-cc-paypal.fa-2x
+ div.text-centered #{translate('change_plans_any_time')}
#{translate('billed_after_x_days', {len:'{{trial_len}}'})}
+
+ .row.row-spaced-large
+ .col-md-8.col-md-offset-2
+ .card.text-centered
+ .card-header
+ h2 #{translate('looking_multiple_licenses')}
+ span #{translate('reduce_costs_group_licenses')}
+ br
+ br
+ a.btn.btn-info(href="/i/university/groups") #{translate('find_out_more')}
+
+ div
+ .row.row-spaced-large
+ .col-sm-12
+ .page-header.plans-header.plans-subheader.text-centered
+ h2 #{translate('compare_plan_features')}
+ .row
+ .col-md-6.col-md-offset-3
+ +plan_switch('table')
+ .col-md-3.text-right
+ +currency_dropdown
+ .row(event-tracking="features-table-viewed" event-tracking-ga="subscription-funnel" event-tracking-trigger="scroll" event-tracking-send-once="true" event-tracking-label=`exp-{{plansVariant}}`)
+ .col-sm-12(ng-if="ui.view != 'student'")
+ +table_premium
+ .col-sm-12(ng-if="ui.view == 'student'")
+ +table_student
+
+ .row.row-spaced-large
+ .col-md-12
+ .page-header.plans-header.plans-subheader.text-centered
+ h2 #{translate('in_good_company')}
+ .row
+ .col-md-6
+ div
+ .row
+ .col-md-3
+ .circle-img
+ img(src=buildImgPath('advocates/erdogmus.jpg') alt="Professor Erdogmus")
+ .col-md-9
+ blockquote
+ p The ability to track changes and the real-time collaborative nature is what sets ShareLaTeX apart.
+ footer Professor Erdogmus, Northeastern University
+ .col-md-6
+ div
+ .row
+ .col-md-3
+ .circle-img
+ img(src=buildImgPath('advocates/henderson.jpg') alt="Rob Henderson")
+ .col-md-9
+ blockquote
+ p ShareLaTeX has proven to be a powerful and robust collaboration tool that is widely used in our School.
+ footer Rob Henderson, School Of Informatics And Computing - Indiana University
+
+ include _plans_faq
+
+ .row.row-spaced-large
+ .col-md-12
+ .plans-header.plans-subheader.text-centered
+ h2 #{translate('still_have_questions')}
+ button.btn.btn-info.btn-header.text-capitalize(ng-controller="ContactGeneralModal" ng-click="openModal()") #{translate('get_in_touch')}
+ != moduleIncludes("contactModalGeneral", locals)
+
+ .row.row-spaced
+
diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee
index c9764418c7..1b9eda57d6 100644
--- a/services/web/public/coffee/ide.coffee
+++ b/services/web/public/coffee/ide.coffee
@@ -87,10 +87,6 @@ define [
}
$scope.user = window.user
- $scope.shouldABTestPlans = false
- if $scope.user.signUpDate >= '2018-06-06'
- $scope.shouldABTestPlans = true
-
$scope.settings = window.userSettings
$scope.anonymous = window.anonymous
$scope.isTokenMember = window.isTokenMember
diff --git a/services/web/public/coffee/main/new-subscription.coffee b/services/web/public/coffee/main/new-subscription.coffee
index e8294a5885..86cb6bf133 100644
--- a/services/web/public/coffee/main/new-subscription.coffee
+++ b/services/web/public/coffee/main/new-subscription.coffee
@@ -4,21 +4,20 @@ define [
"libs/recurly-4.8.5"
], (App)->
- App.controller "NewSubscriptionController", ($scope, MultiCurrencyPricing, abTestManager, $http, sixpack, event_tracking, ccUtils, ipCookie)->
+ App.controller "NewSubscriptionController", ($scope, MultiCurrencyPricing, $http, event_tracking, ccUtils)->
throw new Error("Recurly API Library Missing.") if typeof recurly is "undefined"
$scope.currencyCode = MultiCurrencyPricing.currencyCode
$scope.plans = MultiCurrencyPricing.plans
$scope.planCode = window.plan_code
- $scope.plansVariant = ipCookie('plansVariant')
$scope.switchToStudent = ()->
currentPlanCode = window.plan_code
planCode = currentPlanCode.replace('collaborator', 'student')
- event_tracking.sendMB 'subscription-form-switch-to-student', { plan: window.plan_code, variant: $scope.plansVariant }
+ event_tracking.sendMB 'subscription-form-switch-to-student', { plan: window.plan_code }
window.location = "/user/subscription/new?planCode=#{planCode}¤cy=#{$scope.currencyCode}&cc=#{$scope.data.coupon}"
- event_tracking.sendMB "subscription-form", { plan : window.plan_code, variant: $scope.plansVariant }
+ event_tracking.sendMB "subscription-form", { plan : window.plan_code }
$scope.paymentMethod =
value: "credit_card"
@@ -144,14 +143,13 @@ define [
currencyCode : postData.subscriptionDetails.currencyCode,
plan_code : postData.subscriptionDetails.plan_code,
coupon_code : postData.subscriptionDetails.coupon_code,
- isPaypal : postData.subscriptionDetails.isPaypal,
- variant : $scope.plansVariant
+ isPaypal : postData.subscriptionDetails.isPaypal
}
$http.post("/user/subscription/create", postData)
.then ()->
- event_tracking.sendMB "subscription-submission-success", { variant: $scope.plansVariant }
+ event_tracking.sendMB "subscription-submission-success"
window.location.href = "/user/subscription/thank-you"
.catch ()->
$scope.processing = false
diff --git a/services/web/public/coffee/main/plans.coffee b/services/web/public/coffee/main/plans.coffee
index f13dff689f..da0c6dad64 100644
--- a/services/web/public/coffee/main/plans.coffee
+++ b/services/web/public/coffee/main/plans.coffee
@@ -145,21 +145,7 @@ define [
}
- App.controller "PlansController", ($scope, $modal, event_tracking, abTestManager, MultiCurrencyPricing, $http, sixpack, $filter, ipCookie) ->
-
- $scope.showPlans = false
- $scope.shouldABTestPlans = window.shouldABTestPlans
-
- if $scope.shouldABTestPlans
- sixpack.participate 'plans-details', ['default', 'more-details'], (chosenVariation, rawResponse)->
- if rawResponse?.status != 'failed'
- $scope.plansVariant = chosenVariation
- expiration = new Date();
- expiration.setDate(expiration.getDate() + 5);
- ipCookie('plansVariant', chosenVariation, {expires: expiration})
- event_tracking.send 'subscription-funnel', 'plans-page-loaded', chosenVariation
- else
- $scope.timeout = true
+ App.controller "PlansController", ($scope, $modal, event_tracking, MultiCurrencyPricing, $http, $filter, ipCookie) ->
$scope.showPlans = true
@@ -190,10 +176,8 @@ define [
if $scope.ui.view == "annual"
plan = "#{plan}_annual"
plan = eventLabel(plan, location)
- event_tracking.sendMB 'plans-page-start-trial', {plan, variant: $scope.plansVariant}
+ event_tracking.sendMB 'plans-page-start-trial'
event_tracking.send 'subscription-funnel', 'sign_up_now_button', plan
- if $scope.plansVariant
- sixpack.convert 'plans-details'
$scope.switchToMonthly = (e, location) ->
uiView = 'monthly'
@@ -217,14 +201,9 @@ define [
event_tracking.send 'subscription-funnel', 'plans-page', 'group-inquiry-potential'
eventLabel = (label, location) ->
- if $scope.plansVariant && location && $scope.plansVariant != 'default'
- label = label + '-' + location
- if $scope.plansVariant && $scope.plansVariant != 'default'
- label += '-exp-' + $scope.plansVariant
label
switchEvent = (e, label, location) ->
e.preventDefault()
gaLabel = eventLabel(label, location)
event_tracking.send 'subscription-funnel', 'plans-page', gaLabel
-
diff --git a/services/web/public/stylesheets/app/plans.less b/services/web/public/stylesheets/app/plans.less
index 41e2fc80f1..bd10425425 100644
--- a/services/web/public/stylesheets/app/plans.less
+++ b/services/web/public/stylesheets/app/plans.less
@@ -3,6 +3,80 @@
color: @gray-dark;
margin-bottom: @line-height-computed;
}
+ .best-value {
+ color: @red;
+ line-height: @line-height-computed;
+ }
+ blockquote {
+ footer{
+ /* accessibility fix */
+ color: @gray-med;
+ }
+ }
+ .btn-header {
+ font-family: @font-family-sans-serif;
+ margin-left: 10px;
+ margin-top: -10px;
+ text-shadow: 0 0 0;
+ }
+ .card .btn { white-space:normal; }
+ .card-group {
+ .card-highlighted {
+ padding-top: @line-height-computed * 2;
+ padding-bottom: @line-height-computed * 2;
+ }
+ }
+ .card-first, .card-last {
+ background: @white-med;
+ }
+ .card-highlighted {
+ border: @highlight-border solid @gray-lighter;
+ padding-top: 10px!important;
+ .best-value {
+ margin-bottom: 15px;
+ }
+ .card-header {
+ padding-bottom: 22px; /* align hr with other plans */
+ }
+ }
+ .card-header {
+ margin-bottom: 15px;
+ }
+ .circle {
+ font-size: 1.5rem;
+ font-weight: 700;
+ padding: 38px 18px;
+ margin: 0 auto @line-height-computed;
+ text-shadow: 0 -1px 1px darken(@link-color, 10%);
+ width: 120px;
+ height: 120px;
+ border-radius: 50%;
+ background-color: @red;
+ color: white;
+ white-space: nowrap;
+ span.small {
+ color: rgba(255, 255, 255, 0.85);
+ font-size: @font-size-base * .8;
+ }
+ }
+ .circle-img {
+ border-radius: 50%;
+ float: right;
+ height: 100px;
+ overflow: hidden;
+ position: relative;
+ width: 100px;
+ img {
+ display: inline;
+ margin: 0 auto;
+ width: 100%;
+ }
+ }
+ .faq {
+ p {
+ margin: 0
+ }
+ }
.plans-header{
h1, h2, p {
text-shadow: 0 -1px 1px white;
@@ -17,37 +91,12 @@
.plans-subheader {
margin-bottom: @line-height-computed;
}
- .card.features {
- margin-top: @line-height-computed;
- i {
- color: @red;
- }
- p {
- margin: 0;
- }
+ .tagline {
+ margin-bottom: 20px;
}
- .card-group {
- .card-highlighted {
- padding-top: @line-height-computed * 2;
- padding-bottom: @line-height-computed * 2;
- }
- }
-
- .circle {
- font-size: 1.5rem;
- font-weight: 700;
- padding: 38px 18px;
- margin: 0 auto @line-height-computed;
- text-shadow: 0 -1px 1px darken(@link-color, 10%);
- width: 120px;
- height: 120px;
- border-radius: 50%;
- background-color: @red;
- color: white;
- white-space: nowrap;
- span.small {
- color: rgba(255, 255, 255, 0.75);
- font-size: @font-size-base * .8;
+ .top-switch {
+ .currency-dropdown {
+ margin-right: -15px;
}
}
ul.nav-pills {
@@ -61,14 +110,6 @@
margin-left: @line-height-computed / 2;
}
}
-
- .card .btn { white-space:normal; }
-
- .top-switch {
- .currency-dropdown {
- margin-right: -15px;
- }
- }
}
#changePlanSection {
@@ -98,41 +139,11 @@
}
-.feature {
- margin-top: (@line-height-computed / 2);
- margin-bottom: (@line-height-computed / 1.5);
-}
-
-.features-check,
-.features-copy {
- display: inline-block;
- width: 12%;
- line-height: 1.4;
- vertical-align: top;
-}
-
-.features-copy {
- width: 88%;
-}
-
-
.plansPageStudentLink {
margin-left: 20px;
margin-top: 20px;
}
-input.paymentTypeOption.ng-valid {
- margin-top: 15px;
-}
-
-.totalPrice {
- padding-top: 15px;
-}
-
-.pricingBreakdown {
- text-align: right;
-}
-
/**
Plans Test
*/
@@ -141,74 +152,10 @@ input.paymentTypeOption.ng-valid {
@highlight-color: #d3584b;
@gray-med: #6d6d6d;
@white-med: #fdfdfd;
-.more-details {
- .best-value {
- color: @red;
- line-height: @line-height-computed;
- }
- blockquote {
- footer{
- /* accessibility fix */
- color: @gray-med;
- }
- }
- .btn-header {
- font-family: @font-family-sans-serif;
- margin-left: 10px;
- margin-top: -10px;
- text-shadow: 0 0 0;
- }
- .card-first, .card-last {
- background: @white-med;
- }
- .card-highlighted {
- border: @highlight-border solid @gray-lighter;
- padding-top: 10px!important;
- .best-value {
- margin-bottom: 15px;
- }
- .card-header {
- padding-bottom: 22px; /* align hr with other plans */
- }
- }
- .card-header {
- margin-bottom: 15px;
- }
- .circle {
- /* accessibility fix */
- span.small {
- color: rgba(255, 255, 255, 0.85)
- }
- }
- .circle-img {
- border-radius: 50%;
- float: right;
- height: 100px;
- overflow: hidden;
- position: relative;
- width: 100px;
- img {
- display: inline;
- margin: 0 auto;
- width: 100%;
- }
- }
- .faq:last-child {
- p {
- margin-bottom: 0;
- }
- }
- .questions-header {
- color: @red;
- line-height: 37px;
- margin: 0;
- text-align: right;
- }
- .tagline {
- margin-bottom: 20px;
- }
- /* Media Queries */
- @media (max-width: @screen-md-min) {
+
+/* Media Queries */
+@media (max-width: @screen-sm-max) {
+ .plans {
.card-highlighted {
/*override style in cards.less */
margin-top: @line-height-computed!important;
@@ -217,8 +164,10 @@ input.paymentTypeOption.ng-valid {
float: left;
margin: 0 15px;
}
- }
- @media (min-width: @screen-md-min) {
+ }
+}
+@media (min-width: @screen-md-min) {
+ .plans {
blockquote {
margin-bottom: 0;
}
@@ -390,4 +339,4 @@ input.paymentTypeOption.ng-valid {
.tooltip.in {
min-width: 200px
}
-}
+}
\ No newline at end of file
diff --git a/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee b/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee
index f6808727d1..5fa0e414f5 100644
--- a/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee
+++ b/services/web/test/unit/coffee/Subscription/SubscriptionControllerTests.coffee
@@ -100,14 +100,6 @@ describe "SubscriptionController", ->
@UserGetter.getUser.callCount.should.equal 1
done()
- it 'should decide not to AB test the plans when signed up before 2018-06-06', (done) ->
- # Users before we introduce the test may have already seen the old variant,
- # and so may react positively to a change rather than the variant itself.
- # So it's more likely to skew in favour of the change
- # just because change makes things 'fresh'
- @res.renderedVariables.shouldABTestPlans.should.equal false
- done()
-
describe 'not dependant on logged in state', (done) ->
# these could have been put in 'when user is not logged in' too
it "should set the recommended currency from the geoiplookup", (done)->
@@ -115,7 +107,6 @@ describe "SubscriptionController", ->
@GeoIpLookup.getCurrencyCode.calledWith(@req.ip).should.equal true
done()
it 'should include data for features table', (done) ->
- # this is part of AB test. If default wins test, then remove this test
@res.renderedVariables.planFeatures.length.should.not.equal 0
done()
@@ -150,10 +141,6 @@ describe "SubscriptionController", ->
@UserGetter.getUser.callCount.should.equal 0
done()
- it 'should decide to AB test', (done) ->
- @res.renderedVariables.shouldABTestPlans.should.equal true
- done()
-
describe "paymentPage", ->
beforeEach ->
@req.headers = {}