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 = {}