vendor: 5,483 bytes, lines 1-2
1;(function () {// LICENSE_CODE ZON 2 'use strict'; /*jslint node:true, es6:true, react:true*/function _regenerator() {/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r = "function" == typeof Symbol ? Symbol : {},n = r.iterator || "@@iterator",o = r.toStringTag || "@@toStringTag";function i(r, n, o, i) {var c = n && n.prototype instanceof Generator ? n : Generator,u = Object.create(c.prototype);return _regeneratorDefine2(u, "_invoke", function (r, n, o) {var i,c,u,f = 0,p = o || [],y = !1,G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) {return i = t, c = 0, u = e, G.n = r, a;} };function d(r, n) {for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {var o,i = p[t],d = G.p,l = i[2];r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));}if (o || r > 1) return a;throw y = !0, n;}return function (o, p, l) {if (f > 1) throw TypeError("Generator is already running");for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);try {if (f = 2, i) {if (c || (o = "next"), t = i[o]) {if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");if (!t.done) return t;u = t.value, c < 2 && (c = 0);} else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);i = e;} else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;} catch (t) {i = e, c = 1, u = t;} finally {f = 1;}}return { value: t, done: y };};}(r, o, i), !0), u;}var a = {};function Generator() {}function GeneratorFunction() {}function GeneratorFunctionPrototype() {}t = Object.getPrototypeOf;var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () {return this;}), t),u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);function f(e) {return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;}return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () {return this;}), _regeneratorDefine2(u, "toString", function () {return "[object Generator]";}), (_regenerator = function _regenerator() {return { w: i, m: f };})();}function _regeneratorDefine2(e, r, n, t) {var i = Object.defineProperty;try {i({}, "", {});} catch (e) {i = 0;}_regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) {function o(r, n) {_regeneratorDefine2(e, r, function (e) {return this._invoke(r, n, e);});}r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));}, _regeneratorDefine2(e, r, n, t);}function _extends() {return _extends = Object.assign ? Object.assign.bind() : function (n) {for (var e = 1; e < arguments.length; e++) {var t = arguments[e];for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);}return n;}, _extends.apply(null, arguments);}function _slicedToArray(r, e) {return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;}function _iterableToArrayLimit(r, l) {var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];if (null != t) {var e,n,i,u,a = [],f = !0,o = !1;try {if (i = (t = t.call(r)).next, 0 === l) {if (Object(t) !== t) return;f = !1;} else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);} catch (r) {o = !0, n = r;} finally {try {if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return;} finally {if (o) throw n;}}return a;}}function _arrayWithHoles(r) {if (Array.isArray(r)) return r;}function ownKeys(e, r) {var t = Object.keys(e);if (Object.getOwnPropertySymbols) {var o = Object.getOwnPropertySymbols(e);r && (o = o.filter(function (r) {return Object.getOwnPropertyDescriptor(e, r).enumerable;})), t.push.apply(t, o);}return t;}function _objectSpread(e) {for (var r = 1; r < arguments.length; r++) {var t = null != arguments[r] ? arguments[r] : {};
2r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {_defineProperty(e, r, t[r]);}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));});}return e;}function _defineProperty(e, r, t) {return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e;}function _toPropertyKey(t) {var i = _toPrimitive(t, "string");return "symbol" == _typeof(i) ? i : i + "";}function _toPrimitive(t, r) {if ("object" != _typeof(t) || !t) return t;var e = t[Symbol.toPrimitive];if (void 0 !== e) {var i = e.call(t, r || "default");if ("object" != _typeof(i)) return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return ("string" === r ? String : Number)(t);}function _typeof(o) {"@babel/helpers - typeof";return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {return typeof o;} : function (o) {return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;}, _typeof(o);} 3 var define; 4 var is_node = (typeof module === "undefined" ? "undefined" : _typeof(module)) == 'object' && module.exports; 5 if (is_node) 6 define = require('../../../util/require_node.js').define(module, '..');else 7 8 define = self.define; 9 define(['react', 10 '/util/url.js', '/www/hola/pub/ui/trustpilot_link.tsx', 11 '/www/hola/pub/lib/screen_util.ts', 12 '/www/hola/pub/ui/install_util.js', '/www/hola/pub/ui/img_url.ts', 13 'hola_opt', '/util/etask.js', '/util/escape.js', 14 'classnames', 'zutil', 15 '/svc/account/pub/membership.js', '/www/hola/pub/plus_util.js', 16 '/www/hola/pub/eec.js', '/www/hola/pub/gtm.ts', 17 '/util/zerr.js', '/util/hash.js', 18 '/www/hola/pub/plus_ui.js', '/www/hola/pub/install_util.js', 19 '/www/hola/pub/util.js', '/util/country.js', 'react-router-dom', 20 '/www/hola/pub/pages_dict.js', '/www/hola/pub/plans_util.js', 21 'react-i18next', 22 '/www/hola/pub/experiment_init', 23 '/www/hola/pub/experiment_util', 24 '/www/hola/pub/ui/navbar/navbar_logo.js', '/www/hola/pub/plus/plans.js', 25 '/www/hola/pub/lib/slider.tsx', 26 '/www/hola/pub/settings_ctx.tsx', 27 '/www/hola/pub/plus/payment_progress.tsx', 28 '/www/hola/pub/lib/tooltip.js', 29 '/www/hola/pub/plus/currency_select.tsx', 30 '/www/hola/pub/lib/use_qs.ts', '/www/hola/pub/plus/plan_banner.tsx', 31 '/www/hola/pub/ui/browser/br_footer.tsx', 32 // imports only 33 '/www/hola/pub/css/join_n.less'], 34 function (React, zurl, _ref, _ref2, _ref3, _ref4, hopt, etask, zescape, 35 cn, _, membership, plus_util, eec, gtm, zerr, zhash, plus_ui, 36 iutil, www_util, zcountry, RRD, pages_dict, 37 plans_util, react_i18n, 38 experiment_init, experiment_util, _ref5, _ref6, _ref7, _ref8, _ref9, _ref0, _ref1, _ref10, _ref11, _ref12) 39 40 41 42 {var Trustpilot_link = _ref.Trustpilot_link;var get_width = _ref2.get_width;var _start_install = _ref3._start_install;var img_url = _ref4.img_url;var Navbar_logo = _ref5.Navbar_logo;var Plus_plans = _ref6.Plus_plans;var Slider = _ref7.Slider;var Settings_context = _ref8.Settings_context;var Payment_progress = _ref9.Payment_progress;var Tooltip = _ref0.Tooltip;var Currency_select = _ref1.Currency_select;var use_qs_with_set = _ref10.use_qs_with_set;var Plan_banner = _ref11.Plan_banner;var Br_footer = _ref12.Br_footer; 43 var useState = React.useState,useEffect = React.useEffect,Fragment = React.Fragment,useContext = React.useContext; 44 var useLocation = RRD.useLocation; 45 var T = react_i18n.Trans,useTranslation = react_i18n.useTranslation; 46 experiment_init = experiment_init["default"]; 47 experiment_util = experiment_util["default"]; 48 var E = {}; 49 50 var qs_o = function qs_o() {return zurl.qs_parse(location.search.substr(1), { safe: true });}; 51 var N = 2; 52 var ref = qs_o().ref || ''; 53 54 var perr = function perr(opt) {return ( 55 plus_util.perr(_objectSpread(_objectSpread({}, opt), {}, { id: opt.id.replace(/^www_join1/, "www_join".concat(N)) })));}; 56 var perr_hashes = {}; 57 var perr_once = function perr_once(opt) { 58 var hash = '' + zhash.hash_string(zerr.json(opt)); 59 if (perr_hashes[hash]) 60 return; 61 perr_hashes[hash] = true; 62 return perr(opt); 63 }; 64 var plan_to_url = function plan_to_url(plan) {var opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};return plan && ( 65 opt.ultra ? plan.id : plan.period.toLowerCase().replace(' ', ''));}; 66 var get_url_plan = function get_url_plan(params) { 67 params = params || qs_o(); 68 if (plans_util.get_coupon_flow() == 'coupon') 69 return { id: 'coupon', price: 0 }; 70 var plan, period; 71 if (params.plan_id) 72 { 73 plan = plans_util.get_plans_info_obj({ id: params.plan_id }); 74 if (plan) 75 return plans_util.get_discount_plan(plan) || plan; 76 perr_once({ id: 'www_join1_plan_not_found', info: params }); 77 } 78 if (!plan && params.plan) 79 period = plus_util.parse_plan_period(params.plan); 80 if (!period && params.plan_id) 81 period = plus_util.parse_plan_period(params.plan_id); 82 if (period) 83 { 84 plan = plans_util.get_plans_info_obj({ period: period }); 85 plan = plans_util.get_discount_plan(plan) || plan; 86 if (!plan) 87 perr_once({ id: 'www_join1_plan_not_found', info: params }); 88 return plan; 89 } 90 }; 91 E.get_url_plan = get_url_plan; 92 var get_url_plan_or_default = function get_url_plan_or_default(def, params) { 93 var plan = get_url_plan(params); 94 if (plan) 95 return plan; 96 return get_url_plan(def); 97 }; 98 E.get_url_plan_or_default = get_url_plan_or_default; 99 100 var Free_period_label = function Free_period_label(_ref13) {var plan = _ref13.plan,is_payment_slide = _ref13.is_payment_slide; 101 var _ref14 = plan || {},free_period = _ref14.free_period,plan_id = _ref14.id; 102 var _ref15 = { 103 '1 M': { src: 'plus/free_for_month.png' } 104 }[free_period] || {},src = _ref15.src; 105 var _useState = useState(src),_useState2 = _slicedToArray(_useState, 2),img_src = _useState2[0],set_img_src = _useState2[1];
106 var _useState3 = useState(false),_useState4 = _slicedToArray(_useState3, 2),show_label = _useState4[0],set_show_label = _useState4[1]; 107 useEffect(function () { 108 if (plan_id) 109 set_img_src(src); 110 }, [src, plan_id]); 111 useEffect(function () { 112 set_show_label(img_src && is_payment_slide); 113 }, [img_src, is_payment_slide]); 114 return img_src ? /*#__PURE__*/React.createElement("img", { src: img_url(img_src), alt: "free_period", 115 className: cn('free_period_label label_appear', 'lazyload', 116 !show_label && 'label_hidden') }) : null; 117 }; 118 119 var Header = function Header() { 120 if (pages_dict.is_uninstall_page()) 121 { 122 return /*#__PURE__*/React.createElement("div", { className: "header uninstall" }, /*#__PURE__*/ 123 React.createElement("p", null, "Special offer:"), /*#__PURE__*/ 124 React.createElement("h2", null, /*#__PURE__*/React.createElement("span", null, "Save 47% "), "on Hola Premium") 125 ); 126 } 127 return /*#__PURE__*/React.createElement("div", { className: "header" }, /*#__PURE__*/ 128 React.createElement("h2", null, /*#__PURE__*/React.createElement(T, null, "Choose Your Plan")), /*#__PURE__*/ 129 React.createElement("p", null, /*#__PURE__*/React.createElement("b", null, /*#__PURE__*/React.createElement(T, null, "Unlimited super fast browsing" 130 ))) 131 ); 132 }; 133 134 var Select_plan = function Select_plan(props) { 135 var downloads = 136 props.downloads,plans = props.plans,set_plan = props.set_plan,country = props.country,set_currency = props.set_currency,cls = props.cls,only_right_part = props.only_right_part; 137 var _useContext = useContext(Settings_context),theme = _useContext.theme; 138 var _useLocation = useLocation(),pathname = _useLocation.pathname; 139 plans = plans.slice(); 140 if (plans.length == 0) 141 return /*#__PURE__*/React.createElement(Fragment, null); 142 var _plans_util$get_speci = plans_util.get_special_plans(plans),best = _plans_util$get_speci.best; 143 var _plus_util$get_curren = plus_util.get_currency_o(props.currency, 144 best),currency = _plus_util$get_curren.currency,currencies = _plus_util$get_curren.currencies; 145 var _membership$get_price = membership.get_price_plan(best, currency),renewal_price = _membership$get_price.renewal_price; 146 var annual_promo = pages_dict.is_uninstall_page() || 147 pages_dict.is_annual_promo(); 148 var bogof_promo = pages_dict.is_bogof_promo(); 149 var is_afflp_ni = (qs_o().ref || '').indexOf('afflp_ni') > -1; 150 var is_afflp_annual = (qs_o().ref || '').indexOf('afflp_annual') > -1; 151 var is_new_tabs = pathname == '/premium' && ( 152 is_afflp_ni || is_afflp_annual); 153 var _qs_o = qs_o(),layout = _qs_o.layout; 154 var condensed = layout == 'condensed'; 155 return /*#__PURE__*/React.createElement("div", { className: cn('select-plan', cls) }, 156 currencies.length > 1 && /*#__PURE__*/ 157 React.createElement(Currency_select, { only_right_part: only_right_part, 158 currency: currency, on_change: set_currency, currencies: currencies, 159 cls: cn('currency_select_float_right', 160 condensed && 'condensed_currency_select_float_right') }), 161 !only_right_part && /*#__PURE__*/React.createElement(Header, { downloads: downloads, country: country }), /*#__PURE__*/ 162 React.createElement("div", { className: "container" }, 163 is_new_tabs ? /*#__PURE__*/React.createElement(plus_ui.Plus_plans_tabs, { plans: plans, 164 set_plan: set_plan, best: best, currency: currency }) : /*#__PURE__*/ 165 React.createElement(Plus_plans, { plans: plans, best: best, N: N, bogof: bogof_promo, 166 set_plan: set_plan, "short": true, currency: currency }), /*#__PURE__*/ 167 React.createElement("div", { className: "money-back" }, /*#__PURE__*/ 168 React.createElement(T, { i18nKey: "30_day_moneyback_text.join_n", 169 components: { span: /*#__PURE__*/React.createElement("span", { className: cn(theme.P, theme.xs) }), 170 b: /*#__PURE__*/React.createElement("b", null), strong: /*#__PURE__*/React.createElement("strong", null), 171 a: /*#__PURE__*/React.createElement("a", { href: "/faq#refund-policy", target: "_blank", 172 rel: "noopener noreferrer" }) } }) 173 ), 174 annual_promo && /*#__PURE__*/React.createElement("div", { className: "renewal" }, /*#__PURE__*/ 175 React.createElement("p", { className: theme.p2 }, /*#__PURE__*/ 176 React.createElement("sup", null, "*"), "After the initial period, you will be charged ", 177 zcountry.format_price( 178 currency, renewal_price), " annual service fee until you cancel the subscription" 179 180 ) 181 ), 182 bogof_promo && /*#__PURE__*/React.createElement("div", { className: "renewal" }, /*#__PURE__*/ 183 React.createElement("p", { className: theme.p2 }, "* After the initial 2 months period, you will be charged ", 184 185 zcountry.format_price( 186 currency, best.price), " monthly service fee until you cancel the subscription" 187 188 ) 189 ) 190 ) 191 ); 192 }; 193 194 var Slide_select_plan = function Slide_select_plan(_ref16) {var cls = _ref16.cls,cmp_props = _ref16.cmp_props; 195 return /*#__PURE__*/React.createElement(Select_plan, _extends({ key: "select_plan", cls: cls }, cmp_props)); 196 }; 197 198 var Coupon_slide = function Coupon_slide(_ref17) {var cls = _ref17.cls,cmp_props = _ref17.cmp_props; 199 var email = 200 cmp_props.email,coupon_flow = cmp_props.coupon_flow,slide = cmp_props.slide,go_back = cmp_props.go_back,show_back = cmp_props.show_back,on_continue = cmp_props.on_continue; 201 return /*#__PURE__*/React.createElement("div", { key: "coupon", className: cls }, 202 !!show_back && /*#__PURE__*/React.createElement("a", { className: "back-button", onClick: go_back }, "Back" 203 ), /*#__PURE__*/ 204 React.createElement(plus_ui.Step_redeem, { email: email, 205 slide_active: slide == 'coupon', 206 hide_agree: coupon_flow != 'coupon', 207 on_continue: coupon_flow != 'coupon' && on_continue }) 208 ); 209 }; 210 var Payment_slide = function Payment_slide(_ref18) {var cls = _ref18.cls,cmp_props = _ref18.cmp_props; 211 var slide = cmp_props.slide,plan = cmp_props.plan;
212 var _useState5 = useState(false),_useState6 = _slicedToArray(_useState5, 2),method_chosen = _useState6[0],set_method_chosen = _useState6[1]; 213 var payment_step_cls = cn('container payment-container', 214 method_chosen && 'method-chosen'); 215 return /*#__PURE__*/React.createElement("div", { key: "payment", className: cls }, /*#__PURE__*/ 216 React.createElement("div", { className: payment_step_cls }, 217 plan && /*#__PURE__*/React.createElement(plus_ui.Step_payment, _extends({ expand: "cc", selected_plan: plan, 218 slide_active: slide == 'payment', set_method_chosen: set_method_chosen, 219 method_chosen: method_chosen }, cmp_props) 220 ) 221 ) 222 ); 223 }; 224 225 var Slides = function Slides(props) { 226 var user = 227 228 229 230 props.user,user_email = props.user_email,load_user = props.load_user,plan = props.plan,api = props.api,set_api = props.set_api,api_loaded = props.api_loaded,go_back = props.go_back,on_continue = props.on_continue,slide = props.slide,set_plan = props.set_plan,downloads = props.downloads,currency = props.currency,country = props.country,coupon = props.coupon,set_currency = props.set_currency,script_err = props.script_err,set_coupon = props.set_coupon,on_script_load_err = props.on_script_load_err,only_right_part = props.only_right_part,on_method_tab_change = props.on_method_tab_change,on_vat_obj_change = props.on_vat_obj_change; 231 var _useLocation2 = useLocation(),pathname = _useLocation2.pathname; 232 var _useState7 = useState({ email: user_email, 233 email_error: null }),_useState8 = _slicedToArray(_useState7, 2),state = _useState8[0],set_state = _useState8[1]; 234 var _useState9 = useState([]),_useState0 = _slicedToArray(_useState9, 2),plans = _useState0[0],set_plans = _useState0[1]; 235 useEffect(function () { 236 perr({ id: "www_join1_".concat(slide, "_show") }); 237 }, [slide]); 238 var plans_version = plans_util.use_plans(); 239 useEffect(function () { 240 var plans_info = _.values(plans_util.get_plans_info(plans_util. 241 get_plan_ids())); 242 set_plans(plans_info); 243 var _plans_util$get_speci2 = plans_util.get_special_plans(plans_info || []),best = _plans_util$get_speci2.best; 244 var currency_o = plus_util.get_currency_o(currency, best); 245 set_currency(currency_o.currency); 246 }, [pathname, plans_version]); 247 var set_email = function set_email(email) {return set_state(function (_st) { 248 email = "".concat(email || '').trim(); 249 return _objectSpread(_objectSpread({}, _st), {}, { email: email, email_error: null }); 250 });}; 251 var set_email_err = function set_email_err(email_error) {return set_state(function (_st) { 252 return _objectSpread(_objectSpread({}, _st), {}, { email_error: email_error }); 253 });}; 254 var email = state.email,email_error = state.email_error; 255 var check_email = function check_email(_email) { 256 if ((_email || email) && !user) 257 { 258 var err = plus_util.validate_email_syntax(_email || email); 259 if (!err) 260 return true; 261 set_email_err(err); 262 return false; 263 } 264 return true; 265 }; 266 var coupon_flow = plans_util.get_coupon_flow(); 267 var show_back = slide == 'account' && !coupon_flow || slide == 'payment' && ( 268 !coupon_flow || !user); 269 var steps_cls = cn('steps'); 270 var cmp_props = { downloads: downloads, plan: plan, plans: plans, set_plan: set_plan, country: country, set_coupon: set_coupon, 271 coupon: coupon, currency: currency, set_currency: set_currency, user: user, slide: slide, load_user: load_user, email_error: email_error, 272 set_email_err: set_email_err, set_email: set_email, email: email, on_continue: on_continue, check_email: check_email, coupon_flow: coupon_flow, 273 show_back: show_back, go_back: go_back, script_err: script_err, api: api, user_email: user_email, api_loaded: api_loaded, set_api: set_api, 274 set_plans: set_plans, on_script_load_err: on_script_load_err, only_right_part: only_right_part, 275 on_method_tab_change: on_method_tab_change, on_vat_obj_change: on_vat_obj_change }; 276 return /*#__PURE__*/React.createElement("div", { className: steps_cls }, /*#__PURE__*/ 277 React.createElement(Slider, { active: slide, items: [ 278 { id: 'select_plan', content: Slide_select_plan }, 279 { id: 'coupon', content: !!coupon_flow && Coupon_slide }, 280 { id: 'payment', 281 content: coupon_flow != 'coupon' && Payment_slide }], 282 timeout: 200, cmp_props: cmp_props, distance: 150, 283 on_end_animation: function on_end_animation() {return window.scrollTo(0, 0);} }) 284 ); 285 }; 286 287 var Advantages = function Advantages(_ref19) {var type = _ref19.type,plan = _ref19.plan; 288 var _useTranslation = useTranslation(),t = _useTranslation.t; 289 var _useContext2 = useContext(Settings_context),theme = _useContext2.theme; 290 var platforms = img_url('platforms/platforms_list.svg'); 291 if (get_width() < 768) 292 platforms = img_url('platforms/platforms_list_mobile.svg'); 293 return /*#__PURE__*/React.createElement("ul", { className: "advantages ".concat(type) }, /*#__PURE__*/ 294 React.createElement("li", { className: "unblock" }, /*#__PURE__*/ 295 React.createElement("p", { className: theme.p2 }, /*#__PURE__*/React.createElement(T, null, 296 type == 'free' && 'Unblock 99.9% of websites', 297 type == 'plus' && 'Access more global content', 298 type == 'ultra' && (plan ? /*#__PURE__*/React.createElement("b", null, "Everything in Premium") : 299 'Access more global content') 300 )) 301 ), /*#__PURE__*/ 302 React.createElement("li", { className: "devices" }, /*#__PURE__*/ 303 React.createElement("p", { className: theme.p2 }, 304 t('connect_devices', { count: type == 'ultra' ? 20 : 305 type == 'plus' ? 10 : 3 }) 306 ) 307 ), /*#__PURE__*/ 308 React.createElement("li", { className: "streaming" }, /*#__PURE__*/React.createElement("p", { className: theme.p2 }, /*#__PURE__*/React.createElement(T, null, type == 'ultra' ? 309 '4K' : type == 'plus' ? 'HD' : 'SD', " Video streaming"))), /*#__PURE__*/ 310 React.createElement("li", { className: "servers" }, /*#__PURE__*/React.createElement("p", { className: theme.p2 }, t("".concat(type == 'ultra' ? 311 'Ultra fast' : 'Super fast', " servers")))), 312 type == 'free' && /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/ 313 React.createElement("li", null, /*#__PURE__*/React.createElement("p", { className: theme.p2 }, "Free limited browsing time")) 314 ), 315 (type == 'plus' || type == 'ultra' && !plan) && /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/ 316 React.createElement("li", { className: "vpn_time" }, /*#__PURE__*/React.createElement("p", { className: theme.p2 }, /*#__PURE__*/ 317 React.createElement(T, null, "Unlimited usage"))) 318 ), 319 (type == 'ultra' || type == 'plus') && /*#__PURE__*/React.createElement("li", { className: "platforms" }, /*#__PURE__*/ 320 React.createElement("p", { className: theme.p2 }, "Apps across all of your ", /*#__PURE__*/React.createElement(Tooltip, { 321 content: /*#__PURE__*/React.createElement("img", { alt: "platforms", src: platforms, className: "lazyload" }), 322 cls_cn: "platforms-tooltip" }, /*#__PURE__*/ 323 React.createElement("span", { className: cn(theme.primary, 'platforms-tooltip-text') }, "favorite platforms" 324 ) 325 )) 326 ), 327 (type == 'ultra' || type == 'plus') && /*#__PURE__*/React.createElement("li", { className: "smart_dns" }, /*#__PURE__*/ 328 React.createElement("p", { className: theme.p2 }, "Smart DNS for TVs, Gaming Consoles")), 329 type == 'ultra' && /*#__PURE__*/React.createElement("li", { className: "support" }, /*#__PURE__*/React.createElement("p", { className: theme.p2 }, "24/7 Real person support" 330 )) 331 ); 332 }; 333 E.Advantages = Advantages; 334 335 var start_install = function start_install(ctx, agree) { 336 _start_install({ ctx: ctx, agree: agree, 337 install_src: "join".concat(N), 338 skip: { choose_plan: true } 339 }, function () {return perr({ id: 'www_join1_start_install' });}); 340 }; 341 342 var install_ctx_et, install_ctx; 343 var init_install_ctx = function init_install_ctx() { 344 if (install_ctx) 345 return; 346 return install_ctx_et || etask(/*#__PURE__*/_regenerator().m(function _callee() {return _regenerator().w(function (_context) {while (1) switch (_context.n) {case 0: 347 install_ctx_et = this; 348 this["finally"](function () {return install_ctx_et = null;});_context.n = 1; 349 return iutil.init_ctx({ install_src: "join".concat(N) });case 1:install_ctx = _context.v;case 2:return _context.a(2);}}, _callee, this);}) 350 ); 351 }; 352 353 var Summary_info = function Summary_info(_ref20) {var plan = _ref20.plan,currency = _ref20.currency; 354 var _useContext3 = useContext(Settings_context),theme = _useContext3.theme;
355 var _useLocation3 = useLocation(),pathname = _useLocation3.pathname; 356 var type = pathname == '/ultra' ? 'Ultra' : 'Premium'; 357 var price_o = membership.get_price_plan(plan, currency); 358 var regular_price = price_o.regular_price,price = price_o.price,discount_percent = price_o.discount_percent; 359 var save_money = regular_price - price; 360 return /*#__PURE__*/React.createElement("div", { className: cn('payment_summary_info') }, /*#__PURE__*/ 361 React.createElement("div", { className: "payment_summary_row" }, /*#__PURE__*/ 362 React.createElement("p", { className: cn(theme.xs, theme.grey_2) }, "Hola ", type), /*#__PURE__*/ 363 React.createElement("p", { className: cn(theme.xs, theme.grey_2) }, 364 zcountry.format_price(currency, regular_price)) 365 ), /*#__PURE__*/ 366 React.createElement("div", { className: "payment_summary_row" }, /*#__PURE__*/ 367 React.createElement("p", { className: cn(theme.xs, theme.grey_2, 'payment_flex_discount') }, "Discount ", 368 discount_percent > 0 ? /*#__PURE__*/React.createElement("span", { 369 className: "payment_discount_label" }, discount_percent, "% saving" 370 ) : ''), /*#__PURE__*/ 371 React.createElement("p", { className: cn(theme.xs, theme.grey_2) }, 372 zcountry.format_price(currency, 373 save_money > 0 ? -save_money : 0)) 374 ), /*#__PURE__*/ 375 React.createElement("div", { className: "payment_summary_line" }), /*#__PURE__*/ 376 React.createElement("div", { className: "payment_summary_row" }, /*#__PURE__*/ 377 React.createElement("p", { className: cn(theme.xs, theme.grey_2) }, /*#__PURE__*/React.createElement("b", null, "Order total")), /*#__PURE__*/ 378 React.createElement("p", { className: cn(theme.xs, theme.grey_2) }, 379 zcountry.format_price(currency, price)) 380 ) 381 ); 382 }; 383 384 var Payment = function Payment(_ref21) {var opt = _ref21.opt,only_right_part = _ref21.only_right_part; 385 var _useContext4 = useContext(Settings_context),theme = _useContext4.theme; 386 var _useLocation4 = useLocation(),pathname = _useLocation4.pathname; 387 var type = pathname == '/ultra' ? 'ultra' : 'plus'; 388 plans_util.use_plans(); 389 var plans = _.values(plans_util.get_plans_info(plans_util. 390 get_plan_ids())); 391 var best = _.min_by(plans, function (p) {return p.month_price;}); 392 var on_click_select = function on_click_select() { 393 if (opt.slide != 'select_plan') 394 opt.go_back(); 395 }; 396 var on_click_payment = function on_click_payment() { 397 if (opt.slide != 'payment') 398 opt.set_plan(best); 399 }; 400 var plan = opt.plan; 401 var new_uninstall = pages_dict.is_uninstall_page(); 402 var refund_page = ref == 'refund' || ref == 'refund_special_big_offer' || 403 ref == 'refund_special_cta'; 404 var is_condensed = qs_o().layout == 'condensed' && 'condensed'; 405 return /*#__PURE__*/React.createElement("div", { className: cn(is_condensed ? 'condensed' : theme.container, 406 'payment') }, 407 !is_condensed && /*#__PURE__*/React.createElement(Payment_progress, { slide: opt.slide, 408 on_click_select: on_click_select, 409 on_click_payment: on_click_payment }), /*#__PURE__*/ 410 React.createElement("section", { className: cn('payment-section', 411 only_right_part && 'only_right_part') }, 412 !only_right_part && !is_condensed && /*#__PURE__*/React.createElement("div", { className: "payment-info" }, 413 new_uninstall ? /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/ 414 React.createElement("h3", null, "Seems you are not happy with our free version\u2026", /*#__PURE__*/ 415 React.createElement("br", null), "Try Hola Premium!" 416 417 ) 418 ) : refund_page ? /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/ 419 React.createElement("p", { className: "refund-text" }, /*#__PURE__*/ 420 React.createElement("span", null, "Don't worry! "), "After confirming the payment, we will process the ", /*#__PURE__*/ 421 React.createElement("b", null, "refund for your previous purchase" 422 ), " and you will receive it in the next 5-7 business days." 423 424 ) 425 ) : /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/ 426 React.createElement("h3", null, /*#__PURE__*/React.createElement(T, null, "Experience the full power of Hola")), /*#__PURE__*/ 427 React.createElement("b", { className: theme.P }, /*#__PURE__*/React.createElement(T, { i18nKey: "get_in_join" }), " ", type == 'ultra' ? 428 'Ultra' : 'Premium') 429 ), 430 plan && opt.currency && opt.slide == 'payment' && /*#__PURE__*/ 431 React.createElement(Summary_info, opt), /*#__PURE__*/ 432 React.createElement(Advantages, { type: type }), /*#__PURE__*/ 433 React.createElement(Trustpilot_link, null), 434 plan && opt.slide == 'payment' && /*#__PURE__*/React.createElement(Plan_banner, { plan_id: plan.id }) 435 ), /*#__PURE__*/ 436 React.createElement("div", { className: "payment-steps" }, /*#__PURE__*/React.createElement(Slides, _extends({}, opt, { 437 only_right_part: only_right_part }))) 438 ), /*#__PURE__*/ 439 React.createElement(Free_period_label, { plan: plan, is_payment_slide: opt.slide === 'payment' }) 440 ); 441 }; 442 443 E.Root = function (_ref22) {var users_number = _ref22.users_number,user_country = _ref22.user_country,only_right_part = _ref22.only_right_part,_goto = _ref22["goto"]; 444 if (_goto) 445 console.log(_goto); 446 var _useContext5 = useContext(Settings_context),theme = _useContext5.theme; 447 var _useState1 = useState({}),_useState10 = _slicedToArray(_useState1, 2),script_err = _useState10[0],set_script_err = _useState10[1];
448 var _useLocation5 = useLocation(),pathname = _useLocation5.pathname; 449 var plan = get_url_plan(); 450 var version = plans_util.use_plans(); 451 var coupon_flow = plans_util.get_coupon_flow(); 452 var _useState11 = useState({ 453 user: null, 454 api: plus_util.api, 455 slide: plan ? coupon_flow ? 'coupon' : 'payment' : 'select_plan', 456 plan_id: plan && plan.id, 457 currency: hopt.user_currency, 458 provider: undefined, 459 vat_obj: undefined 460 }),_useState12 = _slicedToArray(_useState11, 2),state = _useState12[0],set_state = _useState12[1]; 461 useEffect(function () { 462 var plan2 = get_url_plan(); 463 if (plan2 && state.plan_id != plan2.id) 464 set_state(function (v) {return _objectSpread(_objectSpread({}, v), {}, { plan_id: plan2.id });}); 465 }, [version, state.plan_id]); 466 var api = state.api,user = state.user,api_loaded = state.api_loaded; 467 var _use_qs_with_set = use_qs_with_set(),set_url_params = _use_qs_with_set.set_qs; 468 var load_user = function load_user(force) {return etask(/*#__PURE__*/_regenerator().m(function _callee2() {var _user, coupon, new_state;return _regenerator().w(function (_context2) {while (1) switch (_context2.n) {case 0:_context2.n = 1; 469 return plus_util.login_get_user(force);case 1:_user = _context2.v; 470 coupon = state.coupon; 471 new_state = { user: _user, api: plus_util.api, 472 api_loaded: true }; 473 if (_user && _user.coupon && _user.coupon.type && (!coupon_flow || 474 coupon_flow == _user.coupon.type)) 475 { 476 new_state.coupon = coupon = _user.coupon._id; 477 if (_user.coupon.currency) 478 new_state.currency = _user.coupon.currency; 479 if (coupon_flow == 'promo_plan') 480 { 481 plans_util.set_fixed_plan_ids(['promo_y1', 'promo_y3']); 482 if (ref && !ref.includes(_user.coupon.affiliate)) 483 set_url_params({ ref: _user.coupon.affiliate + ref }); 484 } 485 } 486 new_state.slide = !get_url_plan() ? 'select_plan' : 487 coupon_flow && !coupon ? 'coupon' : 'payment'; 488 set_state(function (_state) {return _objectSpread(_objectSpread({}, _state), new_state);});return _context2.a(2, 489 _user);}}, _callee2);}) 490 );}; 491 var on_qs_change = function on_qs_change() { 492 var _plan = get_url_plan(); 493 var plan_id = _plan && _plan.id; 494 set_state(function (_state) {return _objectSpread(_objectSpread({}, _state), {}, { slide: !plan_id ? 'select_plan' : 495 coupon_flow && !_state.coupon ? 'coupon' : 'payment', 496 plan_id: plan_id || _state.plan_id });}); 497 }; 498 var on_method_tab_change = function on_method_tab_change(method, provider) { 499 set_state(function (s) {return _objectSpread(_objectSpread({}, s), {}, { provider: provider });}); 500 }; 501 var on_vat_obj_change = function on_vat_obj_change(vat_obj) { 502 set_state(function (s) {return _objectSpread(_objectSpread({}, s), {}, { vat_obj: vat_obj });}); 503 }; 504 var checkout_redirect = function checkout_redirect() { 505 506 507 // XXX dmitriiz: do nothing, there was code for "old layout" 508 };var on_script_load_err = function on_script_load_err(ev) {var src = _.get(ev, 'target.src') || ''; 509 var match = src.match(/(2pay\.js|bluesnap\.js|js\.stripe\.com|paypal\.com\/sdk\/js|pay\.google\.com)/); 510 perr({ id: 'www_premium_payment_script_load_err', info: { src: src } }); 511 if (match) 512 set_script_err(function (errs) {return _objectSpread(_objectSpread({}, errs), {}, _defineProperty({}, match[1], true));}); 513 }; 514 useEffect(function () { 515 checkout_redirect(); 516 window.addEventListener('popstate', on_qs_change); 517 return function () {return window.removeEventListener('popstate', on_qs_change);}; 518 }, [state]); 519 useEffect(function () { 520 document.addEventListener('click', function (event) { 521 var _www_util$get_click_d = www_util.get_click_data(event.target),click_id = _www_util$get_click_d.id,info = _www_util$get_click_d.info; 522 if (click_id) 523 www_util.perr({ id: "www_join".concat(N, "_click_").concat(click_id), info: info }); 524 }); 525 plus_util.set_ppc_cookie(); 526 var plans_info = plans_util.get_plans_info(plans_util.get_plan_ids()); 527 var plans = Object.keys(plans_info).map(function (key) { 528 var _plans_info$key = plans_info[key],id = _plans_info$key.id,name = _plans_info$key.name,price = _plans_info$key.price; 529 return { id: id, name: name, price: price, category: 'vpn-b2c', 530 list: 'Plus page plans' }; 531 }); 532 eec.view_item_list(plans); 533 etask(/*#__PURE__*/_regenerator().m(function _callee3() {var _user, page, info;return _regenerator().w(function (_context3) {while (1) switch (_context3.n) {case 0:_context3.n = 1; 534 return load_user();case 1:_user = _context3.v; 535 page = pathname.slice(1).replace('/', '_'); 536 info = { login: _user && _user.hola_uid, template: "join".concat( 537 N) }; 538 perr({ id: 'www_premium_visit', info: info }); 539 perr({ id: "www_premium_".concat(page, "_visit"), info: info });if (! 540 plans_util.get_plan_ids().includes('free')) {_context3.n = 2;break;}_context3.n = 2; 541 return init_install_ctx();case 2:_context3.n = 3; 542 return plus_ui.init(api, on_script_load_err);case 3:return _context3.a(2);}}, _callee3);}) 543 ); 544 }, []); 545 plan = plans_util.get_plans_info_obj({ id: state.plan_id }); 546 if (state.plan_id && !plan) 547 { 548 set_url_params({ plan_id: null, plan: null }); 549 state.plan_id = null; 550 on_qs_change(); 551 } 552 var opt = { 553 plan: plan, 554 slide: state.slide, 555 coupon: state.coupon, 556 user: user, 557 provider: state.provider, 558 vat_obj: state.vat_obj, 559 currency: state.currency, 560 set_currency: function set_currency(value) {return set_state(function (_state) {return _objectSpread(_objectSpread({}, _state), {}, { 561 currency: value ? value.toUpperCase() : 'USD' });});}, 562 user_email: _.get(user, 'emails[0].value'), 563 country: (user_country || '').toLowerCase(), 564 load_user: load_user, 565 api: api, 566 api_loaded: api_loaded, 567 script_err: script_err, 568 on_script_load_err: on_script_load_err, 569 downloads: users_number, 570 set_coupon: function set_coupon(code) { 571 set_state(function (v) {return _objectSpread(_objectSpread({}, v), {}, { coupon: code });}); 572 }, 573 set_plan: function set_plan(_plan) {var _opt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 574 _plan = plans_util.get_discount_plan(_plan) || _plan; 575 plans_util.set_plan_opt(_opt);
576 perr({ id: "www_join1_plan_click_".concat(_plan.id) }); 577 if (_plan.id == 'free') 578 { 579 etask(/*#__PURE__*/_regenerator().m(function _callee4() {return _regenerator().w(function (_context4) {while (1) switch (_context4.n) {case 0:_context4.n = 1; 580 return init_install_ctx();case 1: 581 if (iutil.need_choose_plan(install_ctx)) 582 perr({ id: 'www_join1_agree_show' });else 583 584 start_install(install_ctx);case 2:return _context4.a(2);}}, _callee4);}) 585 ); 586 return; 587 } 588 plus_ui.start_checkout(); 589 gtm.push({ event: 'choose_plan', id: _plan.id }); 590 set_url_params({ plan: plan_to_url(_plan, _opt) }); 591 on_qs_change(); 592 }, 593 go_back: function go_back() { 594 perr({ id: 'www_join1_back_click' }); 595 set_url_params({ plan_id: null, plan: null }); 596 on_qs_change(); 597 }, 598 set_api: function set_api(change) {return set_state(function (_state) { 599 plus_util.api = _objectSpread(_objectSpread({}, plus_util.api), change); 600 return _objectSpread(_objectSpread({}, _state), {}, { api: plus_util.api }); 601 });}, 602 on_continue: function on_continue(_opt) { 603 perr({ id: 'www_join1_continue_click' }); 604 var next_slide = 'payment'; 605 if (state.slide == 'account' && coupon_flow) 606 next_slide = 'coupon'; 607 set_state(function (_state) {return _objectSpread(_objectSpread(_objectSpread({}, _state), _opt), {}, { slide: next_slide });}); 608 }, 609 on_method_tab_change: on_method_tab_change, 610 on_vat_obj_change: on_vat_obj_change 611 }; 612 var _ref23 = plan && 613 membership.get_price_plan(plan, state.currency) || {},discount_percent = _ref23.discount_percent; 614 var bf_conf = hopt.www_hola.black_friday_badge_on_checkout || {}; 615 var cls = cn("join_page join".concat(N, " plus_layout2"), theme.root, { 616 uninstall_page: pages_dict.is_uninstall_page(), 617 refund_page: ref == 'refund' || ref == 'refund_special_big_offer' || 618 ref == 'refund_special_cta', 619 black_friday_badge: bf_conf && bf_conf.enabled && ( 620 !bf_conf.only_for_ext || +!qs_o().bext), 621 plan_selected: plan, 622 only_right_part_root: only_right_part 623 }, plan && "plan_period_" + plan.period.toLowerCase().replace(' ', ''), 624 discount_percent && 'plan_discount_percent_' + discount_percent); 625 return /*#__PURE__*/React.createElement("div", { className: cls }, 626 !only_right_part && /*#__PURE__*/React.createElement("div", { 627 className: cn('container plus_header', qs_o().hide_header && 628 'invisible') }, /*#__PURE__*/ 629 React.createElement(Navbar_logo, null) 630 ), /*#__PURE__*/ 631 React.createElement(Payment, { opt: opt, 632 only_right_part: only_right_part }), /*#__PURE__*/ 633 React.createElement(Br_footer, null) 634 ); 635 }; 636 637 return E; 638 });})(); 639//# sourceMappingURL=join_n.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.