{"version":3,"mappings":"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","names":["auth_ee","trackSignUp","trackSignIn","Notifier","I18n","msg","CallbackQueue","RemoteState","onLoad","WaitObjectByPathPromise","Modernizr","whatever","captureException","rejection_reason","RejectionReasons","inputmultiple_onLoad","linkClickSelector","buttonClickSelector","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","metaTag","cspNonce","m","matches","element","selector","EXPANDO","getData","key","setData","value","$","isContentEditable","isEditable","csrfToken","meta","csrfParam","CSRFProtection","xhr","token","refreshCSRFTokens","param","input","AcceptHeaders","ajax","options","prepareOptions","createXHR","response","processResponse","done","type","error","script","parser","error1","href","isCrossDomain","url","originAnchor","urlAnchor","e","preventDefault","CustomEvent","event","params","evt","result","fire","obj","name","data","stopEverything","delegate","eventType","handler","target","toArray","serializeElement","additionalParam","inputs","option","formElements","form","el","handleConfirmWithRails","rails","allowAction","confirm","message","callback","answer","handleDisabledElement","enableElement","isXhrRedirect","enableLinkElement","enableFormElement","enableFormElements","disableElement","disableLinkElement","disableFormElement","disableFormElements","replacement","originalText","handleMethodWithRails","link","method","csrfToken$1","csrfParam$1","formContent","isRemote","handleRemoteWithRails","withCredentials","dataType","button","args","formSubmitButtonClick","preventInsignificantClick","insignificantMetaClick","Rails","handleConfirm","handleMethod","handleRemote","start","originalOptions","jQuery","init","rails_ujs","factory","require$$0","timestamp","inWords","$t","distanceMillis","$l","prefix","suffix","seconds","minutes","hours","days","years","substitute","stringOrFunction","number","string","words","separator","iso8601","s","elem","functions","refresh_el","refresh","$s","date","action","fn","prepareData","distance","text","lang","__vitePreload","n","initAllMatchingElements","INIT_DONE_CLASS_NAME","selector_or_el","force","_idx","$el","on_domready","timeago","loglevel_init","modernizr_onLoad","SwitchMode","track","u","Google_Event","listing_contract_button","root","module","this","Collapse","hasWidth","dimension","scroll","actives","hasData","size","startEvent","completeEvent","that","complete","old","$this","$nav_collapse_element","nav_related","buttons","init_with_promise","Promise","resolve","reject","err","FirstTimeModal","modal","DEFAULT_SELECTOR","CitySelectMenu","EventEmitter","onClickOutside","Factory","AreaSizeSelectMenu","area_size_unit","new_url","URI","locale","$link_el_for_url","captureMessage","LanguageSelect","getMainNavbar","BS3_Dropdown","CitySelectMenuFactory","AreaSizeSelectMenuFactory","LanguageSelectFactory","onSignedIn","desktop_ver","HAS_SMART_BANNER","$navbar","main_container","smart_banner_is_shown","last_scroll_top","page_container_height","current_scroll_top","mobile_ver","Page","main_navbar","requestAnimFrame","decouple","node","eve","tracking","captureEvent","update","decouple_1","_classCallCheck","instance","Constructor","exports","Emitter","listener","self","listeners","i","_this","_len","_key","require$$1","scrollTimeout","scrolling","doc","html","msPointerSupported","touch","regex","styleDeclaration","prop","extend","destination","from","inherits","child","uber","hasIgnoredElements","Slideout","translateX","dif_x","oriented_dif_x","slideout","SLIDEOUT_MENU_SELECTOR","init_slideout","$slideout_menu","$page_container","$backdrops","page_container_el","main_navbar_menu_slideout_el","slideout_menu","main_navbar_menu","requestIdleCallback","lister_app_banner","searcher_app_banner","layout","default_selector","initPhoneInput","sele","$searcher_app_box","initAjax","$form","form_el","q_ajax_3","serialize","Input","CELL_CLASS_NAME","CELL_INITIALIZED_CLASS_NAME","IntlTelInput","MobileApps_SearcherApp_DownloadLink","$body","CLASS_NAMES","getFooterElement","_once","getPopupElement","getShowPopupButton","showWechatPopup","CLICK_EVENT_HANDLER_FOR_HIDING_WECHAT_POPUP","hideWechatPopup","toggleWechatPopup","$container","$button","event_target","children","main_footer","SELECTOR","NO_WRAPPER_CLASS","$link","url_or_selector","noWrapper","_propertyOf","Modal","js_link_modal","init_select2","idx","placeholder_text","select2_options","select2","widgets_onload","refresh_component","START_MARK_NAME","END_MARK_NAME","performance","mark","contact_info_caching","ContactInfoCachingOnLoad","notifier","Facebook","fbAsyncInitCalled","fbMessengerPlugins","FB","fbAsyncInit","facebook_app_id","DataRetriever","item","facebook","Timer","concierge","GOOGLE_CLIENT_ID","isSignedIn","create_user_with_google","CreateUserResultTypes","decodeToken","current_unix_time","result_type","Auth_manager","notification","log","googleyolo","getTruePush","RentalListingSearch_PageVisitCount","SaleListingSearch_PageVisitCount","ServicedApartments_PageVisitCount","CityLevelOverseasPropertiesLandingPage_PageVisitCount","ListerLandingPage_PVTracker","PageVisitCountTrackerPerPageType","PageInstance","get_current_authenticated_user","GetCurrentAuthenticatedUserTypes","input_data","val","authentication_load","notifier_load","truepush_onLoad","showSignUpModal","CLASS_NAME_ON_EXPANDED","$cells","$cell","$expand_button","Index","ListingsCarousel","merged_selector","ActiveSwitches","MAP_INITIALIZED_CLASS_NAME","GoogleMapDiv","map_el","L","LeafletMapTileLayer","map_tile_layer","AssetsInfoStore","icon_image_data","lat_str","lng_str","lat","lng","center","LeafletSettings","baidu_latlng","Geometry_Coordinates_ValueFromWgs84ToGsj02Conversion_Op","dom_id","DomIdGenerator","marker_icon","leaflet_map","AppMapZoomLevels","map","GoogleStreetDiv","GoogleMaps_asyncLoad","street_view_box","isBlankStr","existing_panorama","google_maps","latlng_obj","sv","status","location_pano","new_panorama","panorama","reason_or_error","Carousel","Pictures","all_internal_module_init_promises","GoogleMap","GoogleStreet","Tabbed","with_toggle_google_street","pictures_and_map_browser","init_button_on_load","deadline","contact","_onLoad","LastSaveNotice","SavedPromptModalSave","save_search_button","addPostLCPTaskOrRun","Saved","SaveManager","Google_PageView","Desktop","Mobile","init_tutorial_save_search","tutorial_save_search","FilterBar","Searches","carousel_onload","$browserNotice","notice","browser","CELL_SELECTOR","remote_email","INPUTS_SELECTOR","$el_with_change","latest_value","email_sync","SIGNIN_SIGNUP_BOX","FORGOT_PASSWORD_BOX","CELL_CLASS","SIGNIN_EMAIL_INPUT","FORGOT_PASSWORD_BOX_EMAIL_INPUT","signin_email_input","box_switch","CLASS_TO_TOGGLE","modal_switch","auth_onload","INIT_COMPLETE_CLASS","Component$3","Component","Component$2","init_some_matching_elements","Component$1","current_area_size_unit_selection_menu_button_style_on_load","current_area_size_unit_selection_menu_navbar_style_on_load","languages_selection_menu_button_style_on_load","languages_selection_menu_navbar_style_on_load","user_menu_onload","buildings_description_text_box_sometimes_collapsed_style_onload","building_follow_button_on_load","neighbourhood_follow_button_on_load","listings_onload","page_onLoad","SELECTORS","collapse_toggle","$collapse_container_el","$collapse_toggle_el","$collapse_toggle","$collapse_container","initOneElement","collapse_container_el","Collapsible","TARGET_DATA_ATTR_NAME","TARGET_IN_CHILDREN_DATA_ATTR_NAME","TARGET_IN_PARENTS_DATA_ATTR_NAME","TRIGGER_ONEOFF_SWITCH_DATA_ATTR_NAME","TRIGGER_ONEOFF_PROCESSED_DATA_ATTR_NAME","TARGET_ONEOFF_SWITCH_DATA_ATTR_NAME","TARGET_ONEOFF_PROCESSED_DATA_ATTR_NAME","TARGET_TOGGLED_CLASS","get_$targets","$trigger","trigger","is_oneoff_trigger","$targets","$target","is_oneoff_target","DataToggleableTriggersAndTargets","$window","extraOffset","StickyNavbarHandler","target_offset","JsScrollspyNavbar","link_container","$link_container","$targetElement","JsSmoothScrollingNavbar","TOGGLE_SELECTOR","targetSelector","ToggleDisplay","CONTAINER_SELECTOR","ONEOFF_CLASS","TOGGLED_CLASS","Toggleable","BackgroundImageLazyloading","ImageLazyLoading","SimplePerformanceMetric","plugins_onLoad","app_onLoad","components_onLoad","widgets_onLoad","concepts_onLoad"],"ignoreList":[5,7,24,25,26],"sources":["../../../app/assets/javascripts/app/authentication/track.ts","../../../app/assets/javascripts/app/authentication/flash_message.ts","../../../app/assets/javascripts/app/authentication/beforeCreated.ts","../../../app/assets/javascripts/plugins/modernizr/inputmultiple/onload.ts","../../../app/assets/javascripts/plugins/modernizr/onLoad.ts","../../../node_modules/@rails/ujs/app/assets/javascripts/rails-ujs.esm.js","../../../app/assets/javascripts/plugins/rails-ujs/index.ts","../../../node_modules/timeago/jquery.timeago.js","../../../app/assets/javascripts/plugins/jquery-timeago/index.ts","../../../app/assets/javascripts/plugins/onLoad.ts","../../../app/assets/javascripts/components/widgets/onLoad.ts","../../../app/assets/javascripts/components/buttons/listing_contact_button/track.ts","../../../vendor/assets/pseudo_plugins/bootstrap-collapse.js","../../../app/assets/javascripts/components/buttons/navbar_related/onLoad.ts","../../../app/assets/javascripts/components/buttons/onLoad.ts","../../../app/assets/javascripts/components/modal/first_time_modal.ts","../../../app/assets/javascripts/components/modal/onLoad.ts","../../../app/assets/javascripts/components/main_navbar/desktop_ver/components/city_select_menu/index.ts","../../../app/assets/javascripts/components/main_navbar/desktop_ver/components/area_size_select_menu/index.ts","../../../app/assets/javascripts/components/main_navbar/desktop_ver/components/language_select/index.ts","../../../app/assets/javascripts/components/main_navbar/desktop_ver/index.ts","../../../app/assets/javascripts/components/main_navbar/mobile_ver/components/language_select/index.ts","../../../app/assets/javascripts/components/main_navbar/mobile_ver/index.ts","../../../app/assets/javascripts/components/main_navbar/onLoad.ts","../../../node_modules/decouple/index.js","../../../node_modules/emitter/dist/index.js","../../../node_modules/slideout/index.js","../../../app/assets/javascripts/components/main_navbar_menu/slideout_menu/index.ts","../../../app/assets/javascripts/components/main_navbar_menu/onLoad.ts","../../../app/assets/javascripts/components/layout/onLoad.ts","../../../app/assets/javascripts/concepts/mobile_apps/searcher_app/download_link/components/input/index.ts","../../../app/assets/javascripts/concepts/mobile_apps/searcher_app/download_link/index.ts","../../../app/assets/javascripts/components/main_footer/index.ts","../../../app/assets/javascripts/components/js_link_modal.ts","../../../app/assets/javascripts/components/select2/index.ts","../../../app/assets/javascripts/components/onLoad.ts","../../../app/assets/javascripts/app/authentication/onLoad.ts","../../../app/assets/javascripts/app/notifier/onLoad.ts","../../../app/assets/javascripts/app/facebook/index.ts","../../../app/assets/javascripts/app/facebook/onLoad.ts","../../../app/assets/javascripts/app/concierge/onLoad.ts","../../../app/assets/javascripts/app/googleyolo/onLoad.ts","../../../app/assets/javascripts/app/truepush/onLoad.ts","../../../app/assets/javascripts/app/onLoad.ts","../../../app/assets/javascripts/concepts/users/menu/onLoad/use-js-not-link.ts","../../../app/assets/javascripts/concepts/buildings/description_text/box/sometimes_collapsed_style/onLoad.ts","../../../app/assets/javascripts/concepts/listings/carousel/onLoad.ts","../../../app/assets/javascripts/concepts/listings/pictures_and_map_browser/tabbed/mark-switch-active.ts","../../../app/assets/javascripts/concepts/listings/pictures_and_map_browser/tabbed/google_map.ts","../../../app/assets/javascripts/concepts/listings/pictures_and_map_browser/tabbed/google_street.ts","../../../app/assets/javascripts/concepts/listings/pictures_and_map_browser/tabbed/components/pictures.ts","../../../app/assets/javascripts/concepts/listings/pictures_and_map_browser/tabbed/index.ts","../../../app/assets/javascripts/concepts/listings/pictures_and_map_browser/onLoad.ts","../../../app/assets/javascripts/concepts/listings/contact/onLoad.ts","../../../app/assets/javascripts/concepts/listings/searches/saved/onLoad.ts","../../../app/assets/javascripts/concepts/listings/searches/filter_bar/tracking/index.ts","../../../app/assets/javascripts/concepts/listings/searches/filter_bar/onLoad.ts","../../../app/assets/javascripts/concepts/listings/searches/onLoad.ts","../../../app/assets/javascripts/concepts/listings/onLoad.ts","../../../app/assets/javascripts/concepts/browser/upgrade/notice/index.ts","../../../app/assets/javascripts/concepts/browser/onLoad.ts","../../../app/assets/javascripts/concepts/authentication/modal/remote-email-auth.ts","../../../app/assets/javascripts/concepts/authentication/box/email_sync.ts","../../../app/assets/javascripts/concepts/authentication/box/switch_sign_up_sign_in.ts","../../../app/assets/javascripts/concepts/authentication/modal/switch_sign_up_sign_in.ts","../../../app/assets/javascripts/concepts/authentication/onLoad.ts","../../../app/assets/javascripts/concepts/app/current_area_size_unit/selection_menu/button_style/factory.ts","../../../app/assets/javascripts/concepts/app/current_area_size_unit/selection_menu/button_style/index.ts","../../../app/assets/javascripts/concepts/app/current_area_size_unit/selection_menu/navbar_style/factory.ts","../../../app/assets/javascripts/concepts/app/current_area_size_unit/selection_menu/navbar_style/index.ts","../../../app/assets/javascripts/concepts/app/languages/selection_menu/button_style/factory.ts","../../../app/assets/javascripts/concepts/app/languages/selection_menu/button_style/index.ts","../../../app/assets/javascripts/concepts/app/languages/selection_menu/navbar_style/factory.ts","../../../app/assets/javascripts/concepts/app/languages/selection_menu/navbar_style/index.ts","../../../app/assets/javascripts/concepts/onLoad.ts","../../../app/assets/javascripts/pages/onLoad.ts","../../../app/assets/javascripts/widgets/collapsible/index.ts","../../../app/assets/javascripts/widgets/data-toggleable-triggers-and-targets/index.ts","../../../app/assets/javascripts/widgets/js-scrollspy-navbar/index.ts","../../../app/assets/javascripts/widgets/js-smooth-scrolling-navbar/index.ts","../../../app/assets/javascripts/widgets/toggle-display/index.ts","../../../app/assets/javascripts/widgets/toggleable/index.ts","../../../app/assets/javascripts/widgets/index.ts","../../../app/assets/javascripts/application/es6_onLoad.ts"],"sourcesContent":["\nimport auth_ee from \"./manager\"\n\nimport {\n trackSignUp,\n trackSignIn,\n} from \"app/authentication/tracking\"\n\nauth_ee.on(\"sign_up:success:action\", () => {\n trackSignUp()\n})\n\nauth_ee.on(\"sign_in:success:action\", () => {\n trackSignIn()\n})\n\n","\nimport auth_ee from \"./manager\"\nimport Notifier from \"app/notifier/index\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\n\nauth_ee.on(\"sign_up:success:action\", () => {\n Notifier.showSuccess(I18n.t(\"flashes.users.registrations.signed_up\"))\n})\n\n\nauth_ee.on(\"sign_in:success:action\", () => {\n Notifier.showSuccess(I18n.t(\"flashes.users.sessions.signed_in\"))\n})\ntype sign_in_error = \"password\" | \"username\"\nauth_ee.on(\"sign_in:error:action\", (msg?: sign_in_error) => {\n switch (msg) {\n case \"password\":\n Notifier.showWarning(I18n.t(\"js.app.authentication.sign_in.password.invalid\"))\n break\n case \"username\":\n Notifier.showWarning(I18n.t(\"js.app.authentication.sign_in.email.invalid\"))\n break\n default:\n Notifier.showWarning(I18n.t(\"js.app.authentication.sign_in.invalid\"))\n break\n }\n})\n\nauth_ee.on(\"forgot_password:success:action\", () => {\n Notifier.showSuccess(I18n.t(\"flashes.users.passwords.instruction_sent\"))\n})\nauth_ee.on(\"forgot_password:error:action\", () => {\n Notifier.showWarning(I18n.t(\"flashes.users.passwords.not_found\"))\n})\n","\nimport auth_ee from \"./manager\"\nimport \"./track\"\nimport CallbackQueue from \"./callback_queue\"\nimport RemoteState from \"./remote_state\"\nimport \"./flash_message\"\n\n// Wonder: is it better to do event init apart?\nauth_ee.on(\"sign_in:success:action\", () => {\n CallbackQueue.drain()\n RemoteState.refreshAndUpdateComponentPromise().done()\n})\nauth_ee.on(\"sign_up:success:action\", () => {\n CallbackQueue.drain()\n RemoteState.refreshAndUpdateComponentPromise().done()\n})\n\n\n","\nimport {\n WaitObjectByPathPromise,\n RejectionReasons,\n} from \"app/wait_object_by_path_promise\"\n\nimport {\n captureException,\n} from \"app/error_reporting/index\"\n\n\nconst onLoad = () => {\n // This is for adding the classname for CSS\n WaitObjectByPathPromise(\"Modernizr\")\n .then((Modernizr) =>\n Modernizr.addTest(\"inputmultiple\", !!(Modernizr.input.multiple))\n )\n .catch((whatever) => {\n if (whatever instanceof Error) {\n captureException(whatever, {\n source_file_path: \"plugins/modernizr/inputmultiple/onload\",\n })\n\n return\n }\n\n if (typeof whatever === \"object\") {\n const { rejection_reason } = whatever\n\n if (rejection_reason === RejectionReasons.TIMEOUT) {\n // Normal to be timeout\n return\n }\n }\n\n throw whatever\n })\n .done()\n}\n\n\nexport default onLoad\n","\nimport inputmultiple_onLoad from \"./inputmultiple/onload\"\n\nconst onLoad = () => {\n inputmultiple_onLoad()\n}\n\nexport default onLoad\n","/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/main/actionview/app/javascript\nReleased under the MIT license\n */\nconst linkClickSelector = \"a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]\";\n\nconst buttonClickSelector = {\n selector: \"button[data-remote]:not([form]), button[data-confirm]:not([form])\",\n exclude: \"form button\"\n};\n\nconst inputChangeSelector = \"select[data-remote], input[data-remote], textarea[data-remote]\";\n\nconst formSubmitSelector = \"form:not([data-turbo=true])\";\n\nconst formInputClickSelector = \"form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])\";\n\nconst formDisableSelector = \"input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled\";\n\nconst formEnableSelector = \"input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled\";\n\nconst fileInputSelector = \"input[name][type=file]:not([disabled])\";\n\nconst linkDisableSelector = \"a[data-disable-with], a[data-disable]\";\n\nconst buttonDisableSelector = \"button[data-remote][data-disable-with], button[data-remote][data-disable]\";\n\nlet nonce = null;\n\nconst loadCSPNonce = () => {\n const metaTag = document.querySelector(\"meta[name=csp-nonce]\");\n return nonce = metaTag && metaTag.content;\n};\n\nconst cspNonce = () => nonce || loadCSPNonce();\n\nconst m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nconst matches = function(element, selector) {\n if (selector.exclude) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n};\n\nconst EXPANDO = \"_ujsData\";\n\nconst getData = (element, key) => element[EXPANDO] ? element[EXPANDO][key] : undefined;\n\nconst setData = function(element, key, value) {\n if (!element[EXPANDO]) {\n element[EXPANDO] = {};\n }\n return element[EXPANDO][key] = value;\n};\n\nconst $ = selector => Array.prototype.slice.call(document.querySelectorAll(selector));\n\nconst isContentEditable = function(element) {\n var isEditable = false;\n do {\n if (element.isContentEditable) {\n isEditable = true;\n break;\n }\n element = element.parentElement;\n } while (element);\n return isEditable;\n};\n\nconst csrfToken = () => {\n const meta = document.querySelector(\"meta[name=csrf-token]\");\n return meta && meta.content;\n};\n\nconst csrfParam = () => {\n const meta = document.querySelector(\"meta[name=csrf-param]\");\n return meta && meta.content;\n};\n\nconst CSRFProtection = xhr => {\n const token = csrfToken();\n if (token) {\n return xhr.setRequestHeader(\"X-CSRF-Token\", token);\n }\n};\n\nconst refreshCSRFTokens = () => {\n const token = csrfToken();\n const param = csrfParam();\n if (token && param) {\n return $('form input[name=\"' + param + '\"]').forEach((input => input.value = token));\n }\n};\n\nconst AcceptHeaders = {\n \"*\": \"*/*\",\n text: \"text/plain\",\n html: \"text/html\",\n xml: \"application/xml, text/xml\",\n json: \"application/json, text/javascript\",\n script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"\n};\n\nconst ajax = options => {\n options = prepareOptions(options);\n var xhr = createXHR(options, (function() {\n const response = processResponse(xhr.response != null ? xhr.response : xhr.responseText, xhr.getResponseHeader(\"Content-Type\"));\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : undefined;\n }));\n if (options.beforeSend && !options.beforeSend(xhr, options)) {\n return false;\n }\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n};\n\nvar prepareOptions = function(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n if (options.type === \"GET\" && options.data) {\n if (options.url.indexOf(\"?\") < 0) {\n options.url += \"?\" + options.data;\n } else {\n options.url += \"&\" + options.data;\n }\n }\n if (!(options.dataType in AcceptHeaders)) {\n options.dataType = \"*\";\n }\n options.accept = AcceptHeaders[options.dataType];\n if (options.dataType !== \"*\") {\n options.accept += \", */*; q=0.01\";\n }\n return options;\n};\n\nvar createXHR = function(options, done) {\n const xhr = new XMLHttpRequest;\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader(\"Accept\", options.accept);\n if (typeof options.data === \"string\") {\n xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n }\n if (!options.crossDomain) {\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n CSRFProtection(xhr);\n }\n xhr.withCredentials = !!options.withCredentials;\n xhr.onreadystatechange = function() {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n return xhr;\n};\n\nvar processResponse = function(response, type) {\n if (typeof response === \"string\" && typeof type === \"string\") {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n const script = document.createElement(\"script\");\n script.setAttribute(\"nonce\", cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n const parser = new DOMParser;\n type = type.replace(/;.+/, \"\");\n try {\n response = parser.parseFromString(response, type);\n } catch (error1) {}\n }\n }\n return response;\n};\n\nconst href = element => element.href;\n\nconst isCrossDomain = function(url) {\n const originAnchor = document.createElement(\"a\");\n originAnchor.href = location.href;\n const urlAnchor = document.createElement(\"a\");\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === \":\") && !urlAnchor.host || originAnchor.protocol + \"//\" + originAnchor.host === urlAnchor.protocol + \"//\" + urlAnchor.host);\n } catch (e) {\n return true;\n }\n};\n\nlet preventDefault;\n\nlet {CustomEvent: CustomEvent} = window;\n\nif (typeof CustomEvent !== \"function\") {\n CustomEvent = function(event, params) {\n const evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n ({preventDefault: preventDefault} = CustomEvent.prototype);\n CustomEvent.prototype.preventDefault = function() {\n const result = preventDefault.call(this);\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, \"defaultPrevented\", {\n get() {\n return true;\n }\n });\n }\n return result;\n };\n}\n\nconst fire = (obj, name, data) => {\n const event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n};\n\nconst stopEverything = e => {\n fire(e.target, \"ujs:everythingStopped\");\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n};\n\nconst delegate = (element, selector, eventType, handler) => element.addEventListener(eventType, (function(e) {\n let {target: target} = e;\n while (!!(target instanceof Element) && !matches(target, selector)) {\n target = target.parentNode;\n }\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n e.stopPropagation();\n }\n}));\n\nconst toArray = e => Array.prototype.slice.call(e);\n\nconst serializeElement = (element, additionalParam) => {\n let inputs = [ element ];\n if (matches(element, \"form\")) {\n inputs = toArray(element.elements);\n }\n const params = [];\n inputs.forEach((function(input) {\n if (!input.name || input.disabled) {\n return;\n }\n if (matches(input, \"fieldset[disabled] *\")) {\n return;\n }\n if (matches(input, \"select\")) {\n toArray(input.options).forEach((function(option) {\n if (option.selected) {\n params.push({\n name: input.name,\n value: option.value\n });\n }\n }));\n } else if (input.checked || [ \"radio\", \"checkbox\", \"submit\" ].indexOf(input.type) === -1) {\n params.push({\n name: input.name,\n value: input.value\n });\n }\n }));\n if (additionalParam) {\n params.push(additionalParam);\n }\n return params.map((function(param) {\n if (param.name) {\n return `${encodeURIComponent(param.name)}=${encodeURIComponent(param.value)}`;\n } else {\n return param;\n }\n })).join(\"&\");\n};\n\nconst formElements = (form, selector) => {\n if (matches(form, \"form\")) {\n return toArray(form.elements).filter((el => matches(el, selector)));\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n};\n\nconst handleConfirmWithRails = rails => function(e) {\n if (!allowAction(this, rails)) {\n stopEverything(e);\n }\n};\n\nconst confirm = (message, element) => window.confirm(message);\n\nvar allowAction = function(element, rails) {\n let callback;\n const message = element.getAttribute(\"data-confirm\");\n if (!message) {\n return true;\n }\n let answer = false;\n if (fire(element, \"confirm\")) {\n try {\n answer = rails.confirm(message, element);\n } catch (error) {}\n callback = fire(element, \"confirm:complete\", [ answer ]);\n }\n return answer && callback;\n};\n\nconst handleDisabledElement = function(e) {\n const element = this;\n if (element.disabled) {\n stopEverything(e);\n }\n};\n\nconst enableElement = e => {\n let element;\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n element = e.target;\n } else {\n element = e;\n }\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return enableFormElements(element);\n }\n};\n\nconst disableElement = e => {\n const element = e instanceof Event ? e.target : e;\n if (isContentEditable(element)) {\n return;\n }\n if (matches(element, linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, buttonDisableSelector) || matches(element, formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, formSubmitSelector)) {\n return disableFormElements(element);\n }\n};\n\nvar disableLinkElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n }\n element.addEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableLinkElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, \"ujs:enable-with\", null);\n }\n element.removeEventListener(\"click\", stopEverything);\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar disableFormElements = form => formElements(form, formDisableSelector).forEach(disableFormElement);\n\nvar disableFormElement = function(element) {\n if (getData(element, \"ujs:disabled\")) {\n return;\n }\n const replacement = element.getAttribute(\"data-disable-with\");\n if (replacement != null) {\n if (matches(element, \"button\")) {\n setData(element, \"ujs:enable-with\", element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, \"ujs:enable-with\", element.value);\n element.value = replacement;\n }\n }\n element.disabled = true;\n return setData(element, \"ujs:disabled\", true);\n};\n\nvar enableFormElements = form => formElements(form, formEnableSelector).forEach((element => enableFormElement(element)));\n\nvar enableFormElement = function(element) {\n const originalText = getData(element, \"ujs:enable-with\");\n if (originalText != null) {\n if (matches(element, \"button\")) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n setData(element, \"ujs:enable-with\", null);\n }\n element.disabled = false;\n return setData(element, \"ujs:disabled\", null);\n};\n\nvar isXhrRedirect = function(event) {\n const xhr = event.detail ? event.detail[0] : undefined;\n return xhr && xhr.getResponseHeader(\"X-Xhr-Redirect\");\n};\n\nconst handleMethodWithRails = rails => function(e) {\n const link = this;\n const method = link.getAttribute(\"data-method\");\n if (!method) {\n return;\n }\n if (isContentEditable(this)) {\n return;\n }\n const href = rails.href(link);\n const csrfToken$1 = csrfToken();\n const csrfParam$1 = csrfParam();\n const form = document.createElement(\"form\");\n let formContent = ``;\n if (csrfParam$1 && csrfToken$1 && !isCrossDomain(href)) {\n formContent += ``;\n }\n formContent += '';\n form.method = \"post\";\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n stopEverything(e);\n};\n\nconst isRemote = function(element) {\n const value = element.getAttribute(\"data-remote\");\n return value != null && value !== \"false\";\n};\n\nconst handleRemoteWithRails = rails => function(e) {\n let data, method, url;\n const element = this;\n if (!isRemote(element)) {\n return true;\n }\n if (!fire(element, \"ajax:before\")) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n if (isContentEditable(element)) {\n fire(element, \"ajax:stopped\");\n return false;\n }\n const withCredentials = element.getAttribute(\"data-with-credentials\");\n const dataType = element.getAttribute(\"data-type\") || \"script\";\n if (matches(element, formSubmitSelector)) {\n const button = getData(element, \"ujs:submit-button\");\n method = getData(element, \"ujs:submit-button-formmethod\") || element.getAttribute(\"method\") || \"get\";\n url = getData(element, \"ujs:submit-button-formaction\") || element.getAttribute(\"action\") || location.href;\n if (method.toUpperCase() === \"GET\") {\n url = url.replace(/\\?.*$/, \"\");\n }\n if (element.enctype === \"multipart/form-data\") {\n data = new FormData(element);\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n setData(element, \"ujs:submit-button\", null);\n setData(element, \"ujs:submit-button-formmethod\", null);\n setData(element, \"ujs:submit-button-formaction\", null);\n } else if (matches(element, buttonClickSelector) || matches(element, inputChangeSelector)) {\n method = element.getAttribute(\"data-method\");\n url = element.getAttribute(\"data-url\");\n data = serializeElement(element, element.getAttribute(\"data-params\"));\n } else {\n method = element.getAttribute(\"data-method\");\n url = rails.href(element);\n data = element.getAttribute(\"data-params\");\n }\n ajax({\n type: method || \"GET\",\n url: url,\n data: data,\n dataType: dataType,\n beforeSend(xhr, options) {\n if (fire(element, \"ajax:beforeSend\", [ xhr, options ])) {\n return fire(element, \"ajax:send\", [ xhr ]);\n } else {\n fire(element, \"ajax:stopped\");\n return false;\n }\n },\n success(...args) {\n return fire(element, \"ajax:success\", args);\n },\n error(...args) {\n return fire(element, \"ajax:error\", args);\n },\n complete(...args) {\n return fire(element, \"ajax:complete\", args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== \"false\"\n });\n stopEverything(e);\n};\n\nconst formSubmitButtonClick = function(e) {\n const button = this;\n const {form: form} = button;\n if (!form) {\n return;\n }\n if (button.name) {\n setData(form, \"ujs:submit-button\", {\n name: button.name,\n value: button.value\n });\n }\n setData(form, \"ujs:formnovalidate-button\", button.formNoValidate);\n setData(form, \"ujs:submit-button-formaction\", button.getAttribute(\"formaction\"));\n return setData(form, \"ujs:submit-button-formmethod\", button.getAttribute(\"formmethod\"));\n};\n\nconst preventInsignificantClick = function(e) {\n const link = this;\n const method = (link.getAttribute(\"data-method\") || \"GET\").toUpperCase();\n const data = link.getAttribute(\"data-params\");\n const metaClick = e.metaKey || e.ctrlKey;\n const insignificantMetaClick = metaClick && method === \"GET\" && !data;\n const nonPrimaryMouseClick = e.button != null && e.button !== 0;\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n e.stopImmediatePropagation();\n }\n};\n\nconst Rails = {\n $: $,\n ajax: ajax,\n buttonClickSelector: buttonClickSelector,\n buttonDisableSelector: buttonDisableSelector,\n confirm: confirm,\n cspNonce: cspNonce,\n csrfToken: csrfToken,\n csrfParam: csrfParam,\n CSRFProtection: CSRFProtection,\n delegate: delegate,\n disableElement: disableElement,\n enableElement: enableElement,\n fileInputSelector: fileInputSelector,\n fire: fire,\n formElements: formElements,\n formEnableSelector: formEnableSelector,\n formDisableSelector: formDisableSelector,\n formInputClickSelector: formInputClickSelector,\n formSubmitButtonClick: formSubmitButtonClick,\n formSubmitSelector: formSubmitSelector,\n getData: getData,\n handleDisabledElement: handleDisabledElement,\n href: href,\n inputChangeSelector: inputChangeSelector,\n isCrossDomain: isCrossDomain,\n linkClickSelector: linkClickSelector,\n linkDisableSelector: linkDisableSelector,\n loadCSPNonce: loadCSPNonce,\n matches: matches,\n preventInsignificantClick: preventInsignificantClick,\n refreshCSRFTokens: refreshCSRFTokens,\n serializeElement: serializeElement,\n setData: setData,\n stopEverything: stopEverything\n};\n\nconst handleConfirm = handleConfirmWithRails(Rails);\n\nRails.handleConfirm = handleConfirm;\n\nconst handleMethod = handleMethodWithRails(Rails);\n\nRails.handleMethod = handleMethod;\n\nconst handleRemote = handleRemoteWithRails(Rails);\n\nRails.handleRemote = handleRemote;\n\nconst start = function() {\n if (window._rails_loaded) {\n throw new Error(\"rails-ujs has already been loaded!\");\n }\n window.addEventListener(\"pageshow\", (function() {\n $(formEnableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n $(linkDisableSelector).forEach((function(el) {\n if (getData(el, \"ujs:disabled\")) {\n enableElement(el);\n }\n }));\n }));\n delegate(document, linkDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, linkDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:complete\", enableElement);\n delegate(document, buttonDisableSelector, \"ajax:stopped\", enableElement);\n delegate(document, linkClickSelector, \"click\", preventInsignificantClick);\n delegate(document, linkClickSelector, \"click\", handleDisabledElement);\n delegate(document, linkClickSelector, \"click\", handleConfirm);\n delegate(document, linkClickSelector, \"click\", disableElement);\n delegate(document, linkClickSelector, \"click\", handleRemote);\n delegate(document, linkClickSelector, \"click\", handleMethod);\n delegate(document, buttonClickSelector, \"click\", preventInsignificantClick);\n delegate(document, buttonClickSelector, \"click\", handleDisabledElement);\n delegate(document, buttonClickSelector, \"click\", handleConfirm);\n delegate(document, buttonClickSelector, \"click\", disableElement);\n delegate(document, buttonClickSelector, \"click\", handleRemote);\n delegate(document, inputChangeSelector, \"change\", handleDisabledElement);\n delegate(document, inputChangeSelector, \"change\", handleConfirm);\n delegate(document, inputChangeSelector, \"change\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", handleDisabledElement);\n delegate(document, formSubmitSelector, \"submit\", handleConfirm);\n delegate(document, formSubmitSelector, \"submit\", handleRemote);\n delegate(document, formSubmitSelector, \"submit\", (e => setTimeout((() => disableElement(e)), 13)));\n delegate(document, formSubmitSelector, \"ajax:send\", disableElement);\n delegate(document, formSubmitSelector, \"ajax:complete\", enableElement);\n delegate(document, formInputClickSelector, \"click\", preventInsignificantClick);\n delegate(document, formInputClickSelector, \"click\", handleDisabledElement);\n delegate(document, formInputClickSelector, \"click\", handleConfirm);\n delegate(document, formInputClickSelector, \"click\", formSubmitButtonClick);\n document.addEventListener(\"DOMContentLoaded\", refreshCSRFTokens);\n document.addEventListener(\"DOMContentLoaded\", loadCSPNonce);\n return window._rails_loaded = true;\n};\n\nRails.start = start;\n\nif (typeof jQuery !== \"undefined\" && jQuery && jQuery.ajax) {\n if (jQuery.rails) {\n throw new Error(\"If you load both jquery_ujs and rails-ujs, use rails-ujs only.\");\n }\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter((function(options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n }));\n}\n\nexport { Rails as default };\n","\n// Make `rails-ujs` able to detect jquery\nimport Rails from \"@rails/ujs\"\nimport jQuery from \"jquery\"\n\n\ndeclare global {\n interface Window {\n _rails_loaded?: boolean\n }\n}\n\n\njQuery.ajaxPrefilter((options, originalOptions, xhr) => {\n if (!options.crossDomain) {\n return Rails.CSRFProtection(xhr)\n }\n})\n\nconst init = () => {\n // Avoid error message (although not sure what's the cause)\n if (window._rails_loaded) { return }\n\n Rails.start()\n}\n\n\nexport default {\n init,\n}\n","/**\n * Timeago is a jQuery plugin that makes it easy to support automatically\n * updating fuzzy timestamps (e.g. \"4 minutes ago\" or \"about 1 day ago\").\n *\n * @name timeago\n * @version 1.6.7\n * @requires jQuery >=1.5.0 <4.0\n * @author Ryan McGeary\n * @license MIT License - http://www.opensource.org/licenses/mit-license.php\n *\n * For usage and examples, visit:\n * http://timeago.yarp.com/\n *\n * Copyright (c) 2008-2019, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)\n */\n\n(function (factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && typeof module.exports === 'object') {\n factory(require('jquery'));\n } else {\n // Browser globals\n factory(jQuery);\n }\n}(function ($) {\n $.timeago = function(timestamp) {\n if (timestamp instanceof Date) {\n return inWords(timestamp);\n } else if (typeof timestamp === \"string\") {\n return inWords($.timeago.parse(timestamp));\n } else if (typeof timestamp === \"number\") {\n return inWords(new Date(timestamp));\n } else {\n return inWords($.timeago.datetime(timestamp));\n }\n };\n var $t = $.timeago;\n\n $.extend($.timeago, {\n settings: {\n refreshMillis: 60000,\n allowPast: true,\n allowFuture: false,\n localeTitle: false,\n cutoff: 0,\n autoDispose: true,\n strings: {\n prefixAgo: null,\n prefixFromNow: null,\n suffixAgo: \"ago\",\n suffixFromNow: \"from now\",\n inPast: 'any moment now',\n seconds: \"less than a minute\",\n minute: \"about a minute\",\n minutes: \"%d minutes\",\n hour: \"about an hour\",\n hours: \"about %d hours\",\n day: \"a day\",\n days: \"%d days\",\n month: \"about a month\",\n months: \"%d months\",\n year: \"about a year\",\n years: \"%d years\",\n wordSeparator: \" \",\n numbers: []\n }\n },\n\n inWords: function(distanceMillis) {\n if (!this.settings.allowPast && ! this.settings.allowFuture) {\n throw 'timeago allowPast and allowFuture settings can not both be set to false.';\n }\n\n var $l = this.settings.strings;\n var prefix = $l.prefixAgo;\n var suffix = $l.suffixAgo;\n if (this.settings.allowFuture) {\n if (distanceMillis < 0) {\n prefix = $l.prefixFromNow;\n suffix = $l.suffixFromNow;\n }\n }\n\n if (!this.settings.allowPast && distanceMillis >= 0) {\n return this.settings.strings.inPast;\n }\n\n var seconds = Math.abs(distanceMillis) / 1000;\n var minutes = seconds / 60;\n var hours = minutes / 60;\n var days = hours / 24;\n var years = days / 365;\n\n function substitute(stringOrFunction, number) {\n var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;\n var value = ($l.numbers && $l.numbers[number]) || number;\n return string.replace(/%d/i, value);\n }\n\n var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||\n seconds < 90 && substitute($l.minute, 1) ||\n minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||\n minutes < 90 && substitute($l.hour, 1) ||\n hours < 24 && substitute($l.hours, Math.round(hours)) ||\n hours < 42 && substitute($l.day, 1) ||\n days < 30 && substitute($l.days, Math.round(days)) ||\n days < 45 && substitute($l.month, 1) ||\n days < 365 && substitute($l.months, Math.round(days / 30)) ||\n years < 1.5 && substitute($l.year, 1) ||\n substitute($l.years, Math.round(years));\n\n var separator = $l.wordSeparator || \"\";\n if ($l.wordSeparator === undefined) { separator = \" \"; }\n return $.trim([prefix, words, suffix].join(separator));\n },\n\n parse: function(iso8601) {\n var s = $.trim(iso8601);\n s = s.replace(/\\.\\d+/,\"\"); // remove milliseconds\n s = s.replace(/-/,\"/\").replace(/-/,\"/\");\n s = s.replace(/T/,\" \").replace(/Z/,\" UTC\");\n s = s.replace(/([\\+\\-]\\d\\d)\\:?(\\d\\d)/,\" $1$2\"); // -04:00 -> -0400\n s = s.replace(/([\\+\\-]\\d\\d)$/,\" $100\"); // +09 -> +0900\n return new Date(s);\n },\n datetime: function(elem) {\n var iso8601 = $t.isTime(elem) ? $(elem).attr(\"datetime\") : $(elem).attr(\"title\");\n return $t.parse(iso8601);\n },\n isTime: function(elem) {\n // jQuery's `is()` doesn't play well with HTML5 in IE\n return $(elem).get(0).tagName.toLowerCase() === \"time\"; // $(elem).is(\"time\");\n }\n });\n\n // functions that can be called via $(el).timeago('action')\n // init is default when no action is given\n // functions are called with context of a single element\n var functions = {\n init: function() {\n functions.dispose.call(this);\n var refresh_el = $.proxy(refresh, this);\n refresh_el();\n var $s = $t.settings;\n if ($s.refreshMillis > 0) {\n this._timeagoInterval = setInterval(refresh_el, $s.refreshMillis);\n }\n },\n update: function(timestamp) {\n var date = (timestamp instanceof Date) ? timestamp : $t.parse(timestamp);\n $(this).data('timeago', { datetime: date });\n if ($t.settings.localeTitle) {\n $(this).attr(\"title\", date.toLocaleString());\n }\n refresh.apply(this);\n },\n updateFromDOM: function() {\n $(this).data('timeago', { datetime: $t.parse( $t.isTime(this) ? $(this).attr(\"datetime\") : $(this).attr(\"title\") ) });\n refresh.apply(this);\n },\n dispose: function () {\n if (this._timeagoInterval) {\n window.clearInterval(this._timeagoInterval);\n this._timeagoInterval = null;\n }\n }\n };\n\n $.fn.timeago = function(action, options) {\n var fn = action ? functions[action] : functions.init;\n if (!fn) {\n throw new Error(\"Unknown function name '\"+ action +\"' for timeago\");\n }\n // each over objects here and call the requested function\n this.each(function() {\n fn.call(this, options);\n });\n return this;\n };\n\n function refresh() {\n var $s = $t.settings;\n\n //check if it's still visible\n if ($s.autoDispose && !$.contains(document.documentElement,this)) {\n //stop if it has been removed\n $(this).timeago(\"dispose\");\n return this;\n }\n\n var data = prepareData(this);\n\n if (!isNaN(data.datetime)) {\n if ( $s.cutoff === 0 || Math.abs(distance(data.datetime)) < $s.cutoff) {\n $(this).text(inWords(data.datetime));\n } else {\n if ($(this).attr('title').length > 0) {\n $(this).text($(this).attr('title'));\n }\n }\n }\n return this;\n }\n\n function prepareData(element) {\n element = $(element);\n if (!element.data(\"timeago\")) {\n element.data(\"timeago\", { datetime: $t.datetime(element) });\n var text = $.trim(element.text());\n if ($t.settings.localeTitle) {\n element.attr(\"title\", element.data('timeago').datetime.toLocaleString());\n } else if (text.length > 0 && !($t.isTime(element) && element.attr(\"title\"))) {\n element.attr(\"title\", text);\n }\n }\n return element.data(\"timeago\");\n }\n\n function inWords(date) {\n return $t.inWords(distance(date));\n }\n\n function distance(date) {\n return (new Date().getTime() - date.getTime());\n }\n\n // fix for IE6 suckage\n document.createElement(\"abbr\");\n document.createElement(\"time\");\n}));\n","\nimport on_domready from \"domready\"\nimport $ from \"jquery\"\nimport \"timeago\"\n\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n($ as any).timeago.settings.allowFuture = true\nconst lang = $(\"html\").attr(\"lang\")\n\nif (lang === \"zh-TW\") {\n void import(\n \"timeago/locales/jquery.timeago.zh-TW\"\n )\n .then(() => {\n // Update rendered text\n initAllMatchingElements(\"[data-time-ago]\", true)\n })\n}\nelse if (lang === \"zh-CN\") {\n void import(\n \"timeago/locales/jquery.timeago.zh-CN\"\n )\n .then(() => {\n // Update rendered text\n initAllMatchingElements(\"[data-time-ago]\", true)\n })\n}\nelse {\n // Should this even be loaded since default is en?\n void import(\n \"timeago/locales/jquery.timeago.en\"\n )\n .then(() => {\n // Update rendered text\n initAllMatchingElements(\"[data-time-ago]\", true)\n })\n}\n/* eslint-enable global-require */\n\n\nconst INIT_DONE_CLASS_NAME = \"js--jquery-timeago-init-done\"\n\nfunction initAllMatchingElements(selector_or_el: string | JQuery, force: boolean = false) {\n $(selector_or_el).each((_idx, el) => {\n const $el = $(el)\n if ($el.hasClass(INIT_DONE_CLASS_NAME) || !force) {\n return\n }\n\n $el.addClass(INIT_DONE_CLASS_NAME);\n ($el as any).timeago()\n })\n}\n\nconst onLoad = () => {\n on_domready(() => {\n initAllMatchingElements(\"[data-time-ago]\")\n\n // TODO: Move to page specific scripts later\n // For some reason only the jQuery instance on window works\n $(document).on(\"ajaxSuccess\", () => {\n setTimeout(() => {\n initAllMatchingElements(\"[data-time-ago]\")\n }, 1000)\n })\n })\n}\n\n\nexport default {\n onLoad: onLoad,\n}\n","\nimport { init as loglevel_init } from \"./loglevel/index\"\nimport modernizr_onLoad from \"./modernizr/onLoad\"\nimport rails_ujs from \"./rails-ujs\"\nimport timeago from \"./jquery-timeago\"\n\nconst onLoad = () => {\n loglevel_init()\n modernizr_onLoad()\n rails_ujs.init()\n timeago.onLoad()\n}\n\nexport default onLoad\n","\nimport SwitchMode from \"./switch_mode\"\n\nconst onLoad = () => {\n SwitchMode.onLoad()\n}\n\nexport default onLoad\n","\nimport u from \"umbrellajs\"\nimport Google_Event from \"app/tracking/google/event\"\n\nconst track = () => {\n u(\"body\").on(\"click\", \".cell--listings--contact--button__link\", () => {\n Google_Event.track({category: \"Listings\", action: \"Contact\"})\n })\n}\nexport default {track}\n","// we tailor make umd pattern for better support\n(function(root, factory){\n\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n var jQuery = require('jquery');\n module.exports = factory(jQuery);\n\n }else{\n // Browser globals\n factory(root.jQuery);\n }\n}(this, function(jQuery){\n /* =============================================================\n * bootstrap-collapse.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#collapse\n * =============================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n !function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* COLLAPSE PUBLIC CLASS DEFINITION\n * ================================ */\n\n var Collapse = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, $.fn.collapse.defaults, options)\n\n if (this.options.parent) {\n this.$parent = $(this.options.parent)\n }\n\n this.options.toggle && this.toggle()\n }\n\n Collapse.prototype = {\n\n constructor: Collapse\n\n , dimension: function () {\n var hasWidth = this.$element.hasClass('width')\n return hasWidth ? 'width' : 'height'\n }\n\n , show: function () {\n var dimension\n , scroll\n , actives\n , hasData\n\n if (this.transitioning || this.$element.hasClass('in')) return\n\n dimension = this.dimension()\n scroll = $.camelCase(['scroll', dimension].join('-'))\n actives = this.$parent && this.$parent.find('> .accordion-group > .in')\n\n if (actives && actives.length) {\n hasData = actives.data('collapse')\n if (hasData && hasData.transitioning) return\n actives.collapse('hide')\n hasData || actives.data('collapse', null)\n }\n\n this.$element[dimension](0)\n this.transition('addClass', $.Event('show'), 'shown')\n $.support.transition && this.$element[dimension](this.$element[0][scroll])\n }\n\n , hide: function () {\n var dimension\n if (this.transitioning || !this.$element.hasClass('in')) return\n dimension = this.dimension()\n this.reset(this.$element[dimension]())\n this.transition('removeClass', $.Event('hide'), 'hidden')\n this.$element[dimension](0)\n }\n\n , reset: function (size) {\n var dimension = this.dimension()\n\n this.$element\n .removeClass('collapse')\n [dimension](size || 'auto')\n [0].offsetWidth\n\n this.$element[size !== null ? 'addClass' : 'removeClass']('collapse')\n\n return this\n }\n\n , transition: function (method, startEvent, completeEvent) {\n var that = this\n , complete = function () {\n if (startEvent.type == 'show') that.reset()\n that.transitioning = 0\n that.$element.trigger(completeEvent)\n }\n\n this.$element.trigger(startEvent)\n\n if (startEvent.isDefaultPrevented()) return\n\n this.transitioning = 1\n\n this.$element[method]('in')\n\n $.support.transition && this.$element.hasClass('collapse') ?\n this.$element.one($.support.transition.end, complete) :\n complete()\n }\n\n , toggle: function () {\n this[this.$element.hasClass('in') ? 'hide' : 'show']()\n }\n\n }\n\n\n /* COLLAPSE PLUGIN DEFINITION\n * ========================== */\n\n var old = $.fn.collapse\n\n $.fn.collapse = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('collapse')\n , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option)\n if (!data) $this.data('collapse', (data = new Collapse(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.collapse.defaults = {\n toggle: true\n }\n\n $.fn.collapse.Constructor = Collapse\n\n\n /* COLLAPSE NO CONFLICT\n * ==================== */\n\n $.fn.collapse.noConflict = function () {\n $.fn.collapse = old\n return this\n }\n\n\n /* COLLAPSE DATA-API\n * ================= */\n\n $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) {\n var $this = $(this), href\n , target = $this.attr('data-target')\n || e.preventDefault()\n || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') //strip for ie7\n , option = $(target).data('collapse') ? 'toggle' : $this.data()\n $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed')\n $(target).collapse(option)\n })\n\n }(jQuery);\n}));\n","\nimport $ from \"jquery\"\nimport \"bootstrap-collapse\"\n\nconst onLoad = () => {\n const $nav_collapse_element = $(\".nav-collapse\")\n if ($nav_collapse_element.length === 0) { return }\n\n $nav_collapse_element.find(\".navbar-close-button\")\n .on(\"click\", () => {\n $nav_collapse_element.collapse(\"hide\")\n })\n}\n\nexport default {onLoad}\n","\nimport listing_contract_button from \"./listing_contact_button/track\"\nimport nav_related from \"./navbar_related/onLoad\"\n\nconst onLoad = () => {\n listing_contract_button.track()\n nav_related.onLoad()\n}\n\nexport default {onLoad}\n","\nimport $ from \"jquery\"\nimport Promise from \"plugins/bluebird\"\n\ninterface Result {\n modal_shown: boolean\n modal_hidden_promise: Promise\n}\n\nconst init_with_promise = (): Promise => {\n return new Promise((resolve, reject) => {\n try{\n const $container_for_modal_content = $(\"#layout--application__first-time-user-modal-wrapper\")\n // When it does not exists, it means it should not be shown\n if ($container_for_modal_content.length === 0 ){\n resolve({\n modal_shown: false,\n modal_hidden_promise: Promise.resolve(),\n })\n return\n }\n\n // # == Temporary ==\n // ## Always hide the modal during the period with ad modal for Nam Fung active\n resolve({\n modal_shown: false,\n modal_hidden_promise: Promise.resolve(),\n })\n return\n\n // Whole chunk of code not run due to return statement above\n // Uncomment once the code upstair removed\n\n // let $modal = Modal.showModalWithContent(\n // $container_for_modal_content.html(),\n // {customContent: true},\n // )\n // let modal_hidden_deferred = Promise.defer()\n // // Resolve the promise AFTER hidden\n // $modal.on(\"hidden\", () => modal_hidden_deferred.resolve())\n // resolve({\n // modal_shown: true,\n // modal_hidden_promise: modal_hidden_deferred.promise,\n // })\n\n // // # Some mobile specifc style fix?\n // if (!Page.isForMobile())\n // return\n\n // let adjust_vertical_position = ()=> {\n // let $inner_container =\n // $(\".cell--app--first_time_user_modal--default_style.modal\")\n // .find(\".cell--app--first_time_user_modal--default_style__inner\")\n\n // if ($inner_container.length === 0){\n // setTimeout(adjust_vertical_position, 500)\n // return\n // }\n\n // let inner_container_height = $inner_container.height()\n // let view_port_height = ($(window).height() || 0)\n\n // if (inner_container_height === 0){\n // setTimeout(adjust_vertical_position, 500)\n // return\n // }\n\n // if (inner_container_height >= view_port_height){\n // $inner_container.css(\"margin-top\", \"0\")\n // return\n // }\n\n // // # We want to center the modal vertically on start\n // // # So set the spacing between page top to remaining height / 2\n // let remaining_space_height = view_port_height - inner_container_height\n // $inner_container.css(\"margin-top\", \"#{remaining_space_height / 2}px\")\n // }\n // adjust_vertical_position()\n }\n catch (err){\n reject(err)\n }\n })\n}\n\nexport default {init_with_promise}\n","\nimport FirstTimeModal from \"./first_time_modal\"\n\nconst onLoad = () => {\n FirstTimeModal.init_with_promise()\n}\n\nexport default {onLoad}\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport { EventEmitter } from \"events\"\n\nimport dayjs from \"plugins/dayjs/index\"\nimport I18n from \"plugins/i18n-js\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\nimport {\n onClickOutside,\n} from \"plugins/vanilla-clickout\"\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nexport interface Selector {\n scope: string\n main: string\n\n city_menu_toggle: string\n city_menu_dropdown: string\n}\nexport interface InputSelector {\n scope?: string\n main?: string\n\n city_menu_toggle?: string\n city_menu_dropdown?: string\n}\n\nconst DEFAULT_SELECTOR = {\n scope: \".main-navbar-desktop\",\n main: \".cell--cities--change-current-city-menu\",\n\n city_menu_toggle: \".cell--cities--change-current-city-menu__dropdown-toggle\",\n city_menu_dropdown: \".cell--cities--change-current-city-menu-dropdown-menu\",\n}\n\nclass CitySelectMenu extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $main: JQuery\n\n protected $city_menu_toggle: JQuery\n protected $city_menu_dropdown: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n\n this.$scope = $(this.selector.scope)\n this.$main = this.$scope.find(this.selector.main)\n\n this.$city_menu_toggle = this.$scope.find(this.selector.city_menu_toggle)\n this.$city_menu_dropdown = this.$scope.find(this.selector.city_menu_dropdown)\n\n this.bind_action()\n }\n\n protected created(){}\n\n\n protected bind_action() {\n this.$city_menu_toggle.on(\"click\", () => {\n if ( this.$city_menu_dropdown.hasClass(\"active\") ) {\n this.$city_menu_dropdown.removeClass(\"active\")\n }\n else {\n this.$city_menu_dropdown.addClass(\"active\")\n }\n })\n\n onClickOutside(this.$main[0] as HTMLElement, () => {\n this.$city_menu_dropdown.removeClass(\"active\")\n })\n }\n\n}\n\nconst Factory = {\n _instance: null as null | CitySelectMenu,\n\n instance(selector?: InputSelector){\n if (this._instance != null) { return this._instance }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector){\n return new CitySelectMenu(selector)\n },\n}\n\nexport {\n Factory,\n CitySelectMenu,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport { EventEmitter } from \"events\"\n\nimport URI from \"urijs\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\nimport {\n onClickOutside,\n} from \"plugins/vanilla-clickout\"\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nexport interface Selector {\n scope: string\n main: string\n\n area_menu_toggle: string\n area_menu_dropdown: string\n\n link: string\n}\nexport interface InputSelector {\n scope?: string\n main?: string\n\n area_menu_toggle?: string\n area_menu_dropdown?: string\n\n link?: string\n}\n\nconst DEFAULT_SELECTOR = {\n scope: \".main-navbar-desktop\",\n main: \".current-area-size-select-menu\",\n\n area_menu_toggle: \".current-area-size-select-menu-dropdown-toggle\",\n area_menu_dropdown: \".current-area-size-select-menu-dropdown\",\n\n link: \".current-area-size-select-menu-dropdown-item-link\",\n}\n\nclass AreaSizeSelectMenu extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $main: JQuery\n\n protected $area_menu_toggle: JQuery\n protected $area_menu_dropdown: JQuery\n\n protected $link: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n\n this.$scope = $(this.selector.scope)\n this.$main = this.$scope.find(this.selector.main)\n\n this.$area_menu_toggle = this.$scope.find(this.selector.area_menu_toggle)\n this.$area_menu_dropdown = this.$scope.find(this.selector.area_menu_dropdown)\n\n this.$link = this.$scope.find(this.selector.link)\n\n this.bind_action()\n }\n\n protected created(){}\n\n\n protected bind_action() {\n this.$area_menu_toggle.on(\"click\", () => {\n if ( this.$area_menu_dropdown.hasClass(\"active\") ) {\n this.$area_menu_dropdown.removeClass(\"active\")\n }\n else {\n this.$area_menu_dropdown.addClass(\"active\")\n }\n })\n\n this.$link.each((_idx, el) => {\n const area_size_unit = $(el).data(\"area-size-unit\")\n\n const new_url = URI(window.location)\n new_url.addSearch(\"current_area_size_unit\", area_size_unit)\n\n $(el).attr(\"href\", new_url.toString())\n })\n\n onClickOutside(this.$main[0] as HTMLElement, () => {\n this.$area_menu_dropdown.removeClass(\"active\")\n })\n }\n\n}\n\nconst Factory = {\n _instance: null as null | AreaSizeSelectMenu,\n\n instance(selector?: InputSelector){\n if (this._instance != null) { return this._instance }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector){\n return new AreaSizeSelectMenu(selector)\n },\n}\n\nexport {\n Factory,\n AreaSizeSelectMenu,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport { EventEmitter } from \"events\"\n// endregion External Modules\n\n// region Private Modules\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n// endregion Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nexport interface Selector {\n scope: string\n main: string\n\n button: string\n link: string\n}\nexport interface InputSelector {\n scope?: string\n main?: string\n\n button?: string\n link?: string\n}\n\nconst DEFAULT_SELECTOR = {\n scope: \".main-navbar-desktop\",\n main: \".main-navbar-desktop--app-languages-select\",\n\n button: \".main-navbar-desktop--app-languages-select-item\",\n link: \".main-navbar-desktop--app-languages-select-item-link\",\n}\n\nclass LanguageSelect extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $main: JQuery\n\n protected $button: JQuery\n protected $link: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n\n this.$scope = $(this.selector.scope)\n this.$main = this.$scope.find(this.selector.main)\n\n this.$button = this.$scope.find(this.selector.button)\n this.$link = this.$button.find(this.selector.link)\n\n this.bind_action()\n }\n\n protected bind_action(){\n this.$link.each((_idx, el) => {\n const $el = $(el)\n // Only \"#\" should be replaced\n // Other values are assumed to be valid URLs\n if ($el.attr(\"href\") !== \"#\") { return }\n\n const locale = $el.data(\"locale\")\n\n let $link_el_for_url = $()\n switch (locale) {\n case \"zh-HK\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-TW\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-CN\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hans\\\"]\")\n break\n }\n case \"en\": {\n $link_el_for_url = $(\"link[hreflang=\\\"en\\\"]\")\n break\n }\n }\n\n // This can sometimes be >1 elements so unknown reasons\n // But we can still use the value\n if ($link_el_for_url.length >= 1) {\n const new_url = $link_el_for_url.attr(\"href\") as string\n\n $el.attr(\"href\", new_url)\n return\n }\n\n captureMessage(\n \"concepts/app/languages/selection_menu/button_style $link_el_for_url absent\",\n {\n locale: locale,\n $link_el_for_url_length: $link_el_for_url.length,\n }\n )\n })\n }\n\n}\n\nconst Factory = {\n _instance: null as null | LanguageSelect,\n\n instance(selector?: InputSelector){\n if (this._instance != null) { return this._instance }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector){\n return new LanguageSelect(selector)\n },\n}\n\nexport {\n Factory,\n LanguageSelect,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\n// endregion External Modules\n\n// Private Modules\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\n\nimport {\n onSignedIn,\n} from \"app/authentication/remote_state\"\n// Private Modules\n\n// region Public Components\nimport BS3_Dropdown from \"components/bootstrap3-like-dropdown\"\n// endregion Public Components\n\n// region Private Components\nimport {\n Factory as CitySelectMenuFactory,\n} from \"./components/city_select_menu/index\"\n\nimport {\n Factory as AreaSizeSelectMenuFactory,\n} from \"./components/area_size_select_menu/index\"\n\nimport {\n Factory as LanguageSelectFactory,\n LanguageSelect,\n} from \"./components/language_select/index\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst getMainNavbar = () => {\n return $(\".main-navbar-desktop\")\n}\n\nfunction initAllMatchingElements() {\n BS3_Dropdown.init({\n scope: \".main-navbar-desktop\",\n dropdown_toggle: \".dropdown-toggle\",\n dropdown_container: \".dropdown\",\n })\n}\n\nconst init = () => {\n if (getMainNavbar().length !== 1) { return }\n\n CitySelectMenuFactory.instance()\n AreaSizeSelectMenuFactory.instance()\n LanguageSelectFactory.instance()\n\n WaitObjectByPathPromise(\"window._spacious_main_css_loaded\")\n .then(() => {\n\n initAllMatchingElements()\n\n $(document).on(\"ajaxSuccess\", () => {\n // to wait for dom tree update before update\n // TODO: do these reinitialization on some events only instead globally\n setTimeout(initAllMatchingElements, 200)\n })\n\n onSignedIn(() => {\n initAllMatchingElements()\n })\n })\n .done()\n}\n\n\nexport default {\n init,\n // initAllMatchingElements,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport { EventEmitter } from \"events\"\n// endregion External Modules\n\n// region Private Modules\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n// endregion Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nexport interface Selector {\n scope: string\n main: string\n\n button: string\n link: string\n}\nexport interface InputSelector {\n scope?: string\n main?: string\n\n button?: string\n link?: string\n}\n\nconst DEFAULT_SELECTOR = {\n scope: \".main-navbar-mobile\",\n main: \".main-navbar-mobile--app-languages-select\",\n\n button: \".main-navbar-mobile--app-languages-select-item\",\n link: \".main-navbar-mobile--app-languages-select-item-link\",\n}\n\nclass LanguageSelect extends EventEmitter {\n protected selector: Selector\n\n protected $scope: JQuery\n protected $main: JQuery\n\n protected $button: JQuery\n protected $link: JQuery\n\n constructor(selector?: InputSelector){\n super()\n\n this.selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n\n this.$scope = $(this.selector.scope)\n this.$main = this.$scope.find(this.selector.main)\n\n this.$button = this.$scope.find(this.selector.button)\n this.$link = this.$button.find(this.selector.link)\n\n this.bind_action()\n }\n\n protected bind_action(){\n this.$link.each((_idx, el) => {\n const $el = $(el)\n // Only \"#\" should be replaced\n // Other values are assumed to be valid URLs\n if ($el.attr(\"href\") !== \"#\") { return }\n\n const locale = $el.data(\"locale\")\n\n let $link_el_for_url = $()\n switch (locale) {\n case \"zh-HK\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-TW\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-CN\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hans\\\"]\")\n break\n }\n case \"en\": {\n $link_el_for_url = $(\"link[hreflang=\\\"en\\\"]\")\n break\n }\n }\n\n // This can sometimes be >1 elements so unknown reasons\n // But we can still use the value\n if ($link_el_for_url.length >= 1) {\n const new_url = $link_el_for_url.attr(\"href\") as string\n\n $el.attr(\"href\", new_url)\n return\n }\n\n captureMessage(\n \"concepts/app/languages/selection_menu/button_style $link_el_for_url absent\",\n {\n locale: locale,\n $link_el_for_url_length: $link_el_for_url.length,\n }\n )\n })\n }\n\n}\n\nconst Factory = {\n _instance: null as null | LanguageSelect,\n\n instance(selector?: InputSelector){\n if (this._instance != null) { return this._instance }\n\n this._instance = this.create(selector)\n return this._instance\n },\n create(selector?: InputSelector){\n return new LanguageSelect(selector)\n },\n}\n\nexport {\n Factory,\n LanguageSelect,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\nimport $ from \"jquery\"\n// endregion External Modules\n\n// Private Modules\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\n\nimport {\n onSignedIn,\n} from \"app/authentication/remote_state\"\n// Private Modules\n\n// region Public Components\nimport BS3_Dropdown from \"components/bootstrap3-like-dropdown\"\n// endregion Public Components\n\n// region Private Components\nimport {\n Factory as LanguageSelectFactory,\n} from \"./components/language_select/index\"\n// endregion Private Components\n\n// endregion JS Imports\n\nconst HAS_SMART_BANNER = \"has-smart-banner\"\nconst $navbar = $(\"#main-navbar\")\nconst main_container = document.querySelector(\".main-container\") as Element\n\nlet smart_banner_is_shown = false\n\nconst getMainNavbar = () => {\n return u(\"#main-navbar\")\n}\n\nfunction initAllMatchingElements() {\n BS3_Dropdown.init({\n scope: \".main-navbar-mobile\",\n dropdown_toggle: \".dropdown-toggle\",\n dropdown_container: \".dropdown\",\n })\n}\n\nconst init = () => {\n if (getMainNavbar().length !== 1) { return }\n\n LanguageSelectFactory.instance()\n\n WaitObjectByPathPromise(\"window._spacious_main_css_loaded\").then(() => {\n initAllMatchingElements()\n\n $(document).on(\"ajaxSuccess\", () => {\n // to wait for dom tree update before update\n // TODO: do these reinitialization on some events only instead globally\n setTimeout(initAllMatchingElements, 200)\n })\n\n onSignedIn(() => {\n initAllMatchingElements()\n })\n })\n .done()\n\n // This implementation would only be applied to those main navbar with class has-universal-search in mobile version only\n if (getMainNavbar().hasClass(\"has-universal-search\") ) {\n\n // for changing navbar and filter bar sticky top positon if spacious searcher app download banner is shown\n if (document.querySelector(\".layout-section--mobile-searcher-app-smart-banner--shown\") && document.querySelector(\".cell--mobile-apps--searcher-app--smart-banner--default-style\") != null) {\n $navbar.addClass(HAS_SMART_BANNER)\n\n smart_banner_is_shown = true\n }\n\n // change position of filter bar when dismissing download banner\n $(\".cell--mobile-apps--searcher-app--smart-banner--default-style__close-banner-button\").on(\"click\", () => {\n $navbar.removeClass(HAS_SMART_BANNER)\n\n // reset smart banner show flag to false\n smart_banner_is_shown = false\n })\n\n let last_scroll_top = 0\n\n $(window).scroll(() => {\n const page_container_height = main_container.getBoundingClientRect().height as number\n\n const current_scroll_top = $(window).scrollTop() || 0\n\n // need to make sure this part would be executed only when scrolling but not touching\n if (!document.body.classList.contains(\"page--filter--js-expanded\") && Math.abs(current_scroll_top - last_scroll_top) > 20) {\n if (current_scroll_top > 46 && (current_scroll_top > last_scroll_top) && current_scroll_top < page_container_height) {\n if (smart_banner_is_shown) {\n $navbar.css({\"transform\": \"translateY(-41px)\", \"transition\": \"transform 0.2s\"})\n }\n else {\n $navbar.css({\"transform\": \"translateY(-46px)\", \"transition\": \"transform 0.2s\"})\n }\n }\n else {\n $navbar.css({\"transform\": \"translateY(0)\", \"transition\": \"transform 0.2s\"})\n }\n\n last_scroll_top = current_scroll_top\n }\n })\n }\n}\n\n\nexport default {\n init,\n initAllMatchingElements,\n}\n","\nimport desktop_ver from \"./desktop_ver/index\"\nimport mobile_ver from \"./mobile_ver/index\"\nimport {\n Page\n} from \"app/multi_device\"\n\nconst onLoad = () => {\n\n if ( Page.isForMobile() ) {\n mobile_ver.init()\n }\n else {\n desktop_ver.init()\n }\n\n}\n\nexport default {onLoad}\n","'use strict';\n\nvar requestAnimFrame = (function() {\n return window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n}());\n\nfunction decouple(node, event, fn) {\n var eve,\n tracking = false;\n\n function captureEvent(e) {\n eve = e;\n track();\n }\n\n function track() {\n if (!tracking) {\n requestAnimFrame(update);\n tracking = true;\n }\n }\n\n function update() {\n fn.call(node, eve);\n tracking = false;\n }\n\n node.addEventListener(event, captureEvent, false);\n\n return captureEvent;\n}\n\n/**\n * Expose decouple\n */\nmodule.exports = decouple;\n","\"use strict\";\n\nvar _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } };\n\nexports.__esModule = true;\n/**\n * Creates a new instance of Emitter.\n * @class\n * @returns {Object} Returns a new instance of Emitter.\n * @example\n * // Creates a new instance of Emitter.\n * var Emitter = require('emitter');\n *\n * var emitter = new Emitter();\n */\n\nvar Emitter = (function () {\n function Emitter() {\n _classCallCheck(this, Emitter);\n }\n\n /**\n * Adds a listener to the collection for the specified event.\n * @memberof! Emitter.prototype\n * @function\n * @param {String} event - The event name.\n * @param {Function} listener - A listener function to add.\n * @returns {Object} Returns an instance of Emitter.\n * @example\n * // Add an event listener to \"foo\" event.\n * emitter.on('foo', listener);\n */\n\n Emitter.prototype.on = function on(event, listener) {\n // Use the current collection or create it.\n this._eventCollection = this._eventCollection || {};\n\n // Use the current collection of an event or create it.\n this._eventCollection[event] = this._eventCollection[event] || [];\n\n // Appends the listener into the collection of the given event\n this._eventCollection[event].push(listener);\n\n return this;\n };\n\n /**\n * Adds a listener to the collection for the specified event that will be called only once.\n * @memberof! Emitter.prototype\n * @function\n * @param {String} event - The event name.\n * @param {Function} listener - A listener function to add.\n * @returns {Object} Returns an instance of Emitter.\n * @example\n * // Will add an event handler to \"foo\" event once.\n * emitter.once('foo', listener);\n */\n\n Emitter.prototype.once = function once(event, listener) {\n var self = this;\n\n function fn() {\n self.off(event, fn);\n listener.apply(this, arguments);\n }\n\n fn.listener = listener;\n\n this.on(event, fn);\n\n return this;\n };\n\n /**\n * Removes a listener from the collection for the specified event.\n * @memberof! Emitter.prototype\n * @function\n * @param {String} event - The event name.\n * @param {Function} listener - A listener function to remove.\n * @returns {Object} Returns an instance of Emitter.\n * @example\n * // Remove a given listener.\n * emitter.off('foo', listener);\n */\n\n Emitter.prototype.off = function off(event, listener) {\n\n var listeners = undefined;\n\n // Defines listeners value.\n if (!this._eventCollection || !(listeners = this._eventCollection[event])) {\n return this;\n }\n\n listeners.forEach(function (fn, i) {\n if (fn === listener || fn.listener === listener) {\n // Removes the given listener.\n listeners.splice(i, 1);\n }\n });\n\n // Removes an empty event collection.\n if (listeners.length === 0) {\n delete this._eventCollection[event];\n }\n\n return this;\n };\n\n /**\n * Execute each item in the listener collection in order with the specified data.\n * @memberof! Emitter.prototype\n * @function\n * @param {String} event - The name of the event you want to emit.\n * @param {...Object} data - Data to pass to the listeners.\n * @returns {Object} Returns an instance of Emitter.\n * @example\n * // Emits the \"foo\" event with 'param1' and 'param2' as arguments.\n * emitter.emit('foo', 'param1', 'param2');\n */\n\n Emitter.prototype.emit = function emit(event) {\n var _this = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var listeners = undefined;\n\n // Defines listeners value.\n if (!this._eventCollection || !(listeners = this._eventCollection[event])) {\n return this;\n }\n\n // Clone listeners\n listeners = listeners.slice(0);\n\n listeners.forEach(function (fn) {\n return fn.apply(_this, args);\n });\n\n return this;\n };\n\n return Emitter;\n})();\n\n/**\n * Exports Emitter\n */\nexports[\"default\"] = Emitter;\nmodule.exports = exports[\"default\"];","'use strict';\n\n/**\n * Module dependencies\n */\nvar decouple = require('decouple');\nvar Emitter = require('emitter');\n\n/**\n * Privates\n */\nvar scrollTimeout;\nvar scrolling = false;\nvar doc = window.document;\nvar html = doc.documentElement;\nvar msPointerSupported = window.navigator.msPointerEnabled;\nvar touch = {\n 'start': msPointerSupported ? 'MSPointerDown' : 'touchstart',\n 'move': msPointerSupported ? 'MSPointerMove' : 'touchmove',\n 'end': msPointerSupported ? 'MSPointerUp' : 'touchend'\n};\nvar prefix = (function prefix() {\n var regex = /^(Webkit|Khtml|Moz|ms|O)(?=[A-Z])/;\n var styleDeclaration = doc.getElementsByTagName('script')[0].style;\n for (var prop in styleDeclaration) {\n if (regex.test(prop)) {\n return '-' + prop.match(regex)[0].toLowerCase() + '-';\n }\n }\n // Nothing found so far? Webkit does not enumerate over the CSS properties of the style object.\n // However (prop in style) returns the correct value, so we'll have to test for\n // the precence of a specific property\n if ('WebkitOpacity' in styleDeclaration) { return '-webkit-'; }\n if ('KhtmlOpacity' in styleDeclaration) { return '-khtml-'; }\n return '';\n}());\nfunction extend(destination, from) {\n for (var prop in from) {\n if (from[prop]) {\n destination[prop] = from[prop];\n }\n }\n return destination;\n}\nfunction inherits(child, uber) {\n child.prototype = extend(child.prototype || {}, uber.prototype);\n}\nfunction hasIgnoredElements(el) {\n while (el.parentNode) {\n if (el.getAttribute('data-slideout-ignore') !== null) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n\n/**\n * Slideout constructor\n */\nfunction Slideout(options) {\n options = options || {};\n\n // Sets default values\n this._startOffsetX = 0;\n this._currentOffsetX = 0;\n this._opening = false;\n this._moved = false;\n this._opened = false;\n this._preventOpen = false;\n this._touch = options.touch === undefined ? true : options.touch && true;\n this._side = options.side || 'left';\n\n // Sets panel\n this.panel = options.panel;\n this.menu = options.menu;\n\n // Sets classnames\n if (!this.panel.classList.contains('slideout-panel')) {\n this.panel.classList.add('slideout-panel');\n }\n if (!this.panel.classList.contains('slideout-panel-' + this._side)) {\n this.panel.classList.add('slideout-panel-' + this._side);\n }\n if (!this.menu.classList.contains('slideout-menu')) {\n this.menu.classList.add('slideout-menu');\n }\n if (!this.menu.classList.contains('slideout-menu-' + this._side)) {\n this.menu.classList.add('slideout-menu-' + this._side);\n }\n\n // Sets options\n this._fx = options.fx || 'ease';\n this._duration = parseInt(options.duration, 10) || 300;\n this._tolerance = parseInt(options.tolerance, 10) || 70;\n this._padding = this._translateTo = parseInt(options.padding, 10) || 256;\n this._orientation = this._side === 'right' ? -1 : 1;\n this._translateTo *= this._orientation;\n\n // Init touch events\n if (this._touch) {\n this._initTouchEvents();\n }\n}\n\n/**\n * Inherits from Emitter\n */\ninherits(Slideout, Emitter);\n\n/**\n * Opens the slideout menu.\n */\nSlideout.prototype.open = function() {\n var self = this;\n this.emit('beforeopen');\n if (!html.classList.contains('slideout-open')) {\n html.classList.add('slideout-open');\n }\n this._setTransition();\n this._translateXTo(this._translateTo);\n this._opened = true;\n setTimeout(function() {\n self.panel.style.transition = self.panel.style['-webkit-transition'] = '';\n self.emit('open');\n }, this._duration + 50);\n return this;\n};\n\n/**\n * Closes slideout menu.\n */\nSlideout.prototype.close = function() {\n var self = this;\n if (!this.isOpen() && !this._opening) {\n return this;\n }\n this.emit('beforeclose');\n this._setTransition();\n this._translateXTo(0);\n this._opened = false;\n setTimeout(function() {\n html.classList.remove('slideout-open');\n self.panel.style.transition = self.panel.style['-webkit-transition'] = self.panel.style[prefix + 'transform'] = self.panel.style.transform = '';\n self.emit('close');\n }, this._duration + 50);\n return this;\n};\n\n/**\n * Toggles (open/close) slideout menu.\n */\nSlideout.prototype.toggle = function() {\n return this.isOpen() ? this.close() : this.open();\n};\n\n/**\n * Returns true if the slideout is currently open, and false if it is closed.\n */\nSlideout.prototype.isOpen = function() {\n return this._opened;\n};\n\n/**\n * Translates panel and updates currentOffset with a given X point\n */\nSlideout.prototype._translateXTo = function(translateX) {\n this._currentOffsetX = translateX;\n this.panel.style[prefix + 'transform'] = this.panel.style.transform = 'translateX(' + translateX + 'px)';\n return this;\n};\n\n/**\n * Set transition properties\n */\nSlideout.prototype._setTransition = function() {\n this.panel.style[prefix + 'transition'] = this.panel.style.transition = prefix + 'transform ' + this._duration + 'ms ' + this._fx;\n return this;\n};\n\n/**\n * Initializes touch event\n */\nSlideout.prototype._initTouchEvents = function() {\n var self = this;\n\n /**\n * Decouple scroll event\n */\n this._onScrollFn = decouple(doc, 'scroll', function() {\n if (!self._moved) {\n clearTimeout(scrollTimeout);\n scrolling = true;\n scrollTimeout = setTimeout(function() {\n scrolling = false;\n }, 250);\n }\n });\n\n /**\n * Prevents touchmove event if slideout is moving\n */\n this._preventMove = function(eve) {\n if (self._moved) {\n eve.preventDefault();\n }\n };\n\n doc.addEventListener(touch.move, this._preventMove);\n\n /**\n * Resets values on touchstart\n */\n this._resetTouchFn = function(eve) {\n if (typeof eve.touches === 'undefined') {\n return;\n }\n\n self._moved = false;\n self._opening = false;\n self._startOffsetX = eve.touches[0].pageX;\n self._preventOpen = (!self._touch || (!self.isOpen() && self.menu.clientWidth !== 0));\n };\n\n this.panel.addEventListener(touch.start, this._resetTouchFn);\n\n /**\n * Resets values on touchcancel\n */\n this._onTouchCancelFn = function() {\n self._moved = false;\n self._opening = false;\n };\n\n this.panel.addEventListener('touchcancel', this._onTouchCancelFn);\n\n /**\n * Toggles slideout on touchend\n */\n this._onTouchEndFn = function() {\n if (self._moved) {\n self.emit('translateend');\n (self._opening && Math.abs(self._currentOffsetX) > self._tolerance) ? self.open() : self.close();\n }\n self._moved = false;\n };\n\n this.panel.addEventListener(touch.end, this._onTouchEndFn);\n\n /**\n * Translates panel on touchmove\n */\n this._onTouchMoveFn = function(eve) {\n if (\n scrolling ||\n self._preventOpen ||\n typeof eve.touches === 'undefined' ||\n hasIgnoredElements(eve.target)\n ) {\n return;\n }\n\n var dif_x = eve.touches[0].clientX - self._startOffsetX;\n var translateX = self._currentOffsetX = dif_x;\n\n if (Math.abs(translateX) > self._padding) {\n return;\n }\n\n if (Math.abs(dif_x) > 20) {\n\n self._opening = true;\n\n var oriented_dif_x = dif_x * self._orientation;\n\n if (self._opened && oriented_dif_x > 0 || !self._opened && oriented_dif_x < 0) {\n return;\n }\n\n if (!self._moved) {\n self.emit('translatestart');\n }\n\n if (oriented_dif_x <= 0) {\n translateX = dif_x + self._padding * self._orientation;\n self._opening = false;\n }\n\n if (!(self._moved && html.classList.contains('slideout-open'))) {\n html.classList.add('slideout-open');\n }\n\n self.panel.style[prefix + 'transform'] = self.panel.style.transform = 'translateX(' + translateX + 'px)';\n self.emit('translate', translateX);\n self._moved = true;\n }\n\n };\n\n this.panel.addEventListener(touch.move, this._onTouchMoveFn);\n\n return this;\n};\n\n/**\n * Enable opening the slideout via touch events.\n */\nSlideout.prototype.enableTouch = function() {\n this._touch = true;\n return this;\n};\n\n/**\n * Disable opening the slideout via touch events.\n */\nSlideout.prototype.disableTouch = function() {\n this._touch = false;\n return this;\n};\n\n/**\n * Destroy an instance of slideout.\n */\nSlideout.prototype.destroy = function() {\n // Close before clean\n this.close();\n\n // Remove event listeners\n doc.removeEventListener(touch.move, this._preventMove);\n this.panel.removeEventListener(touch.start, this._resetTouchFn);\n this.panel.removeEventListener('touchcancel', this._onTouchCancelFn);\n this.panel.removeEventListener(touch.end, this._onTouchEndFn);\n this.panel.removeEventListener(touch.move, this._onTouchMoveFn);\n doc.removeEventListener('scroll', this._onScrollFn);\n\n // Remove methods\n this.open = this.close = function() {};\n\n // Return the instance so it can be easily dereferenced\n return this;\n};\n\n/**\n * Expose Slideout\n */\nmodule.exports = Slideout;\n","\nimport $ from \"jquery\"\nimport Slideout from \"slideout\"\nimport BS3_Dropdown from \"components/bootstrap3-like-dropdown\"\n\nconst SLIDEOUT_MENU_SELECTOR = \"#main-navbar-menu--slideout\"\n\nconst init_slideout = () => {\n const $slideout_menu = $(SLIDEOUT_MENU_SELECTOR)\n\n if ($slideout_menu.length === 0){\n return\n }\n\n const $page_container = $(\"#page-container\")\n\n if ($page_container.length !== 1){\n return\n }\n\n const $backdrops = $(\".main-navbar-mobile-backdrop, .main-navbar__mobile-backdrop\")\n\n if ($backdrops.length === 0){\n return\n }\n\n const page_container_el = document.getElementById(\"page-container\")\n const main_navbar_menu_slideout_el = document.getElementById(\"main-navbar-menu--slideout\")\n\n if (page_container_el == null || main_navbar_menu_slideout_el == null) {\n return\n }\n\n const slideout = new Slideout({\n panel: page_container_el,\n menu: main_navbar_menu_slideout_el,\n padding: 280,\n tolerance: 70,\n side: \"right\",\n\n // temporary fix for broken existing animation when swiping left\n touch: false,\n })\n\n $(\".js-slideout-toggle\").on(\"click\", () => {\n slideout.toggle()\n })\n\n BS3_Dropdown.init({\n scope: SLIDEOUT_MENU_SELECTOR,\n dropdown_toggle: \".dropdown-toggle\",\n dropdown_container: \".dropdown\",\n })\n\n $slideout_menu.find(\".navbar-close-button\").on(\"click\", () => {\n slideout.close()\n })\n\n slideout.on(\"open\", () => {\n $page_container.addClass(\"slideout-panel-right\")\n $page_container.addClass(\"page--main-navbar-mobile-backdrop-enabled\")\n })\n\n slideout.on(\"close\", () => {\n $page_container.removeClass(\"slideout-panel-right\")\n $page_container.removeClass(\"page--main-navbar-mobile-backdrop-enabled\")\n })\n\n $backdrops.on(\"click\", () => {\n slideout.close()\n })\n}\n\nconst init = () => {\n init_slideout()\n}\n\n\nexport default {\n init: init,\n}\n","\nimport slideout_menu from \"./slideout_menu\"\n\nconst onLoad = () => {\n slideout_menu.init()\n}\n\nexport default {onLoad}\n","\nimport Promise from \"plugins/bluebird\"\n\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nconst onLoad = () => {\n requestIdleCallback(() => {\n Promise.resolve(\n import(\"./sections/mobile_lister_app_smart_banner/onLoad\")\n )\n .then(({default: lister_app_banner}) => {\n lister_app_banner.onLoad()\n })\n\n Promise.resolve(\n import(\"./sections/mobile_searcher_app_smart_banner/onLoad\")\n )\n .then(({default: searcher_app_banner}) => {\n searcher_app_banner.onLoad()\n })\n })\n}\n\nexport default { onLoad }\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\nimport serialize from \"form-serialize\"\n\nimport I18n from \"plugins/i18n-js\"\n// endregion External Modules\n\n// Private Modules\nimport Notifier from \"app/notifier/index\"\n\nimport {\n q_ajax_3,\n} from \"app/utils/q_ajax/q_ajax_3\"\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\n// unused?\n// deprecated logic? //hide div?\nconst default_selector = {\n main: \".cell--mobile-apps--searcher-app--download-link\",\n box: \".cell--mobile-apps--searcher-app--download-link__actions--get\",\n form: \"form.send_searcher_app_link\",\n}\n\nconst initPhoneInput = (selector: object) => {\n const sele = Object.assign({}, default_selector, selector)\n const $el = u(sele.main)\n const $searcher_app_box = $el.find(sele.box)\n const $form = $el.find(sele.form)\n const $lister_app_form_selector_phone_input = $form.find(\"#phone_number\")\n\n $lister_app_form_selector_phone_input.on(\"click\", () =>\n $searcher_app_box.removeClass(\"lister-app--sms-sent\")\n )\n\n}\n\nconst initAjax = (selector: object) => {\n const sele = Object.assign({}, default_selector, selector)\n const $el = u(sele.main)\n const $searcher_app_box = $el.find(sele.box)\n const $form = $el.find(sele.form)\n const form_el = $form.first() as HTMLFormElement\n\n $form.on(\"submit\", (e) => {\n e.preventDefault()\n\n q_ajax_3({\n url: $form.attr(\"action\"),\n method: \"POST\",\n data: serialize(form_el, {hash: true}),\n })\n .then(() => {\n Notifier.showSuccess(I18n.t(\"js.app.notifier.send_sms.successfully_submitted\"))\n\n $searcher_app_box.addClass(\"searcher-app--sms-sent\")\n })\n .catch(() => {\n Notifier.showWarning(I18n.t(\"js.app.notifier.send_sms.reenter_phone\"))\n })\n .done()\n })\n}\n\n\nconst init = (selector: object = {}) => {\n initPhoneInput(selector)\n initAjax(selector)\n}\n\n\nexport default {init}\n","\nimport u from \"umbrellajs\"\n\nimport Input from \"./components/input/index\"\nimport IntlTelInput from \"plugins/intl_tel_input/index\"\n\nconst CELL_CLASS_NAME = \"cell--mobile-apps--searcher-app--download-link\"\nconst CELL_INITIALIZED_CLASS_NAME = `${CELL_CLASS_NAME}--js-spacious-initialized`\n\nconst init = () => {\n u(`.${CELL_CLASS_NAME}`).each((el) => {\n if (el.classList.contains(CELL_INITIALIZED_CLASS_NAME)) { return }\n el.classList.add(CELL_INITIALIZED_CLASS_NAME)\n\n Input.init({main: el})\n })\n IntlTelInput.init()\n}\n\nexport default {\n init,\n}\n","\nimport u from \"umbrellajs\"\nimport _once from \"lodash/once\"\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport MobileApps_SearcherApp_DownloadLink from \"concepts/mobile_apps/searcher_app/download_link/index\"\n\n// Mobile footer wechat QRcode popover\nconst $body = u(\"body\")\n\nconst CLASS_NAMES = {\n WECHAT_POPUP_SHOWN: \"main-footer--wechat-popup-shown\",\n}\n\nconst getFooterElement = _once(() => u(\".main-footer\"))\nconst getPopupElement = () => u(\".main-footer__wechat-id-popup\")\nconst getShowPopupButton = () => u(\"#main-footer__btn-show-wechat-popup\")\n\n\n\nconst showWechatPopup = () => {\n getFooterElement().addClass(CLASS_NAMES.WECHAT_POPUP_SHOWN)\n // # add click event handler\n $body.on(\"click\", CLICK_EVENT_HANDLER_FOR_HIDING_WECHAT_POPUP)\n}\n\nconst hideWechatPopup = () => {\n $body.off(\"click\", CLICK_EVENT_HANDLER_FOR_HIDING_WECHAT_POPUP)\n getFooterElement().removeClass(CLASS_NAMES.WECHAT_POPUP_SHOWN)\n}\n\nconst toggleWechatPopup = () => {\n if (getFooterElement().hasClass(CLASS_NAMES.WECHAT_POPUP_SHOWN)) {\n hideWechatPopup()\n }\n else {\n showWechatPopup()\n }\n}\n\nfunction CLICK_EVENT_HANDLER_FOR_HIDING_WECHAT_POPUP(e: Event) {\n const $container = getPopupElement()\n const $button = getShowPopupButton()\n // # Since this handler is fired right after being added\n // # This is a workaround\n const event_target = e.target as HTMLElement\n\n if (event_target == null) { return }\n\n const button_contains_event_target = $button.is((el) => {\n if (el === event_target) { return true }\n\n const children = el.getElementsByTagName(\"*\")\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < children.length; i++) {\n if (children[i] === event_target) { return true }\n }\n\n return false\n })\n if (button_contains_event_target) { return }\n\n // # Prevent closing it when clicked inside\n const container_contains_event_target = $container.is((el) => {\n if (el === event_target) { return true }\n\n const children = el.getElementsByTagName(\"*\")\n // eslint-disable-next-line @typescript-eslint/prefer-for-of\n for (let i = 0; i < children.length; i++) {\n if (children[i] === event_target) { return true }\n }\n\n return false\n })\n if (container_contains_event_target) { return }\n\n hideWechatPopup()\n e.preventDefault()\n e.stopPropagation()\n}\n\nconst onLoad = () => {\n requestIdleCallback(() => {\n getShowPopupButton().on(\"click\", () => {\n toggleWechatPopup()\n })\n\n MobileApps_SearcherApp_DownloadLink.init()\n })\n}\n\nexport default {onLoad}\n\n","\n// region JS Imports\n\n// region External Modules\nimport $ from \"jquery\"\nimport \"bootstrap-modal\"\nimport \"bootstrap-modalmanager\"\nimport _propertyOf from \"lodash/propertyOf\"\n// endregion External Modules\n\n// Private Modules\nimport {\n q_ajax_3,\n} from \"app/utils/q_ajax/q_ajax_3\"\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\nconst SELECTOR = \".js-link-modal\"\n// # Switch for using no wrapper\nconst NO_WRAPPER_CLASS = \"js-link-modal-no-wrapper\"\n\nconst onLoad = () => {\n const $body = $(\"body\")\n\n $body.on(\"click\", SELECTOR, (e) =>{\n e.preventDefault()\n\n const $link = $(e.currentTarget)\n const url_or_selector = $link.attr(\"href\")\n const noWrapper = $link.hasClass(NO_WRAPPER_CLASS)\n\n $body.modalmanager(\"loading\")\n\n // # if starts with \"#\" or \".\", assumed selector\n if ( _propertyOf(url_or_selector)(0) === \"#\" || _propertyOf(url_or_selector)(0) === \".\" ){\n Promise.resolve(\n import(\"app/modal/show-modal\")\n )\n .then(({default: Modal}) => {\n Modal.showModalWithSelector(url_or_selector, {customContent: noWrapper})\n })\n }\n else{\n q_ajax_3({\n url: url_or_selector,\n method: \"GET\",\n dataType: \"html\",\n })\n .then(({data}) =>\n Promise.resolve(\n import(\"app/modal/show-modal\")\n )\n .then(({default: Modal}) => {\n Modal.showModalWithContent(data, {customContent: noWrapper})\n })\n )\n .done()\n }\n })\n}\n\nexport default {onLoad}\n","\nimport $ from \"jquery\"\nimport \"bootstrap-transition\"\nimport \"bootstrap-modal\"\nimport \"bootstrap-modalmanager\"\nimport {Page} from \"app/multi_device\"\n\n\nconst init_select2 = (selector = \".js-select2\") => {\n // It could failed when multiple sign up modals exist\n try{\n $(selector).each((idx, el) => {\n const $el = $(el)\n const placeholder_text = $el.attr(\"placeholder\")\n\n const select2_options: Select2.Options = {\n width: \"resolve\",\n allowClear: true,\n }\n\n if (placeholder_text == null) {\n select2_options.placeholder = \"Select an option...\"\n }\n import(\n \"select2/dist/js/select2.full\"\n )\n .then(() => {\n $el.select2(select2_options)\n })\n })\n }\n catch (e){\n // do nothing\n }\n}\n\nconst onLoad = () => {\n if (Page.isForMobile()) { return }\n\n init_select2()\n $(\"body\").on(\"shown.bs.modal\", () => {\n setTimeout(init_select2, 1000)\n })\n}\n\nexport default {onLoad}\n\n\n","\nimport on_domready from \"domready\"\n\nimport widgets_onload from \"./widgets/onLoad\"\nimport buttons from \"./buttons/onLoad\"\nimport modal from \"./modal/onLoad\"\nimport main_navbar from \"./main_navbar/onLoad\"\nimport main_navbar_menu from \"./main_navbar_menu/onLoad\"\nimport layout from \"./layout/onLoad\"\nimport main_footer from \"./main_footer/index\"\nimport js_link_modal from \"./js_link_modal\"\nimport select2 from \"./select2/index\"\n\nconst onLoad = () => {\n on_domready(() => {\n widgets_onload()\n buttons.onLoad()\n modal.onLoad()\n main_navbar.onLoad()\n main_navbar_menu.onLoad()\n layout.onLoad()\n main_footer.onLoad()\n js_link_modal.onLoad()\n select2.onLoad()\n })\n}\n\nexport default onLoad\n","\nimport {\n performance,\n} from \"plugins/user-timing-polyfill\"\n\nimport RemoteState from \"./remote_state\"\n\n\nfunction refresh_component() {\n const START_MARK_NAME = \"spacious_mark__app_authentication_onLoad__refresh_component__start\"\n const END_MARK_NAME = \"spacious_mark__app_authentication_onLoad__refresh_component__end\"\n\n performance.mark(START_MARK_NAME)\n\n RemoteState.refreshAndUpdateComponentPromise()\n .then(() => {\n performance.mark(END_MARK_NAME)\n\n const marks = performance.getEntriesByType(\"mark\")\n const isStartMarkFound = marks.find((mark) => mark.name === START_MARK_NAME)\n\n if(!isStartMarkFound) { return }\n\n performance.measure(\n \"spacious_measure__app_authentication_onLoad__refresh_component\",\n START_MARK_NAME,\n END_MARK_NAME,\n )\n })\n .done()\n}\nfunction contact_info_caching() {\n import(\n \"./contact_info_caching/index\"\n )\n .then(({onLoad: ContactInfoCachingOnLoad}) => {\n performance.mark(\"spacious_mark__ContactInfoCachingOnLoad__start\")\n\n ContactInfoCachingOnLoad()\n .then(() => {\n performance.mark(\"spacious_mark__ContactInfoCachingOnLoad__end\")\n performance.measure(\n \"spacious_measure__ContactInfoCachingOnLoad\",\n \"spacious_mark__ContactInfoCachingOnLoad__start\",\n \"spacious_mark__ContactInfoCachingOnLoad__end\",\n )\n })\n .done()\n })\n}\n\nconst onLoad = () => {\n refresh_component()\n\n contact_info_caching()\n}\n\nexport default onLoad\n","import notifier from \"./index\"\n\nconst onLoad = () => {\n notifier.onPageLoad()\n}\n\nexport default onLoad\n","\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\n\nconst Facebook = {\n subscribeListeners: [] as Array<() => void>,\n // # Subscribe the facebook event without waiting for the FB JS SDK to load\n // # @param [String] event_name Same event name as FB provided\n // # @param [Function] callback The callback function passed to FB.Event.subscribe with response as param\n // #\n // ## Examples\n // #window.App.Facebook.subscribe \"comment.create\", (response) ->\n // # console.log \"You created comment, data: {id: #{response.commentID}, href: #{response.href}}\"\n subscribe(event_name: string, callback: (() => void)) {\n this.subscribeListeners.push(() => {\n WaitObjectByPathPromise(\"FB\")\n .then((FB) => (FB.Event as any).subscribe(event_name, callback))\n .catch(() => {\n // Do nothing, FB can be absent\n })\n })\n },\n}\n\nexport default Facebook\n","\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport Facebook from \"./index\"\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\nimport DataRetriever from \"app/data_retriever\"\n\nlet fbAsyncInitCalled = false\n\ndeclare global {\n interface Window {\n fbMessengerPlugins: {\n init: () => void,\n callable: Array<(() => void)>,\n } | null,\n fbAsyncInit: (() => void) | null,\n }\n}\nconst fbMessengerPlugins = {\n init: () => {\n WaitObjectByPathPromise(\"FB\")\n .then((FB) => {\n FB.init({\n appId: \"1678638095724206\",\n autoLogAppEvents: true,\n xfbml: true,\n version: \"v3.1\",\n })\n })\n .catch(() => {\n // Do nothing, FB can be absent\n })\n },\n callable: [],\n}\nwindow.fbMessengerPlugins = window.fbMessengerPlugins || fbMessengerPlugins\n\nconst fbAsyncInit = () => {\n // # Duplicated call protection\n if (fbAsyncInitCalled) { return }\n fbAsyncInitCalled = true\n\n const facebook_app_id = DataRetriever.get(\"facebook-app-id\")\n if (!facebook_app_id) { return }\n\n // # init the FB JS SDK\n WaitObjectByPathPromise(\"FB\")\n .then((FB) => {\n FB.init({\n // # App ID from the app dashboard\n appId: facebook_app_id,\n // # Check Facebook Login status\n status: true,\n // # Look for social plugins on the page\n xfbml: true,\n // # This is required, DO NOT omit it\n // # @see https://developers.facebook.com/docs/javascript/reference/FB.init/v12.0\n version: \"v12.0\",\n })\n })\n .then(() => {\n fbMessengerPlugins.callable.forEach((item: (() => void)) => item())\n fbMessengerPlugins.init()\n\n Facebook.subscribeListeners.forEach((listener: (() => void)) => listener())\n // # Delete all the listeners after running them\n Facebook.subscribeListeners.length = 0\n })\n .catch(() => {\n // Do nothing, FB can be absent\n })\n}\nwindow.fbAsyncInit = fbAsyncInit\n\nfunction onLoad() {\n requestIdleCallback(() => {\n fbAsyncInit()\n })\n}\n\nexport default {\n onLoad,\n}\n","\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nconst onLoad = () => {\n requestIdleCallback(() => {\n Promise.resolve(\n import(\"./timer\")\n )\n .then(({Timer}) => {\n Timer.onLoad()\n })\n })\n}\n\nexport default {\n onLoad,\n}\n","\nimport on_domready from \"domready\"\nimport log from \"plugins/loglevel\"\nimport Promise from \"plugins/bluebird\"\nimport Auth_manager from \"app/authentication/manager\"\n\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\nimport {\n isSignedIn,\n} from \"app/authentication/state\"\n\nimport {\n trackSignUp,\n} from \"app/authentication/tracking\"\n\nimport {\n refreshAndUpdateComponentPromise,\n} from \"app/authentication/remote_state\"\n\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n\nimport Notifier from \"app/notifier/index\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\n// https://developers.google.com/identity/one-tap/web/reference/js-reference#CredentialResponse\ninterface GoogleYoloCredentialResponse {\n credential: string\n select_by: string\n client_id: string\n}\n// https://developers.google.com/identity/sign-in/web/backend-auth#verify-the-integrity-of-the-id-token\ninterface GoogleYoloCredentialDecodedData {\n // OUR app's client ID\n aud: string\n // Should be `accounts.google.com` or `https://accounts.google.com`\n iss: string\n // Expiry time, should be unix time\n exp: number\n\n //region User data\n email: string\n email_verified: boolean\n name: string\n // URL\n picture: string\n //endregion\n\n [key: string]: any\n}\n// https://developers.google.com/identity/one-tap/web/reference/js-reference#PromptMomentNotification\ninterface PromptMomentNotification {\n isDisplayMoment: () => boolean\n isDisplayed: () => boolean\n\n isNotDisplayed: () => boolean\n getNotDisplayedReason: () => string\n\n isSkippedMoment: () => boolean\n getSkippedReason: () => string\n\n isDismissedMoment: () => boolean\n getDismissedReason: () => string\n\n getMomentType: () => string\n}\n\ninterface GoogleYoloHintInputs {\n supportedAuthMethods: string[],\n supportedIdTokenProviders: Array<{\n uri: string,\n clientId: string,\n }>,\n}\n\ninterface GoogleYolo {\n hint: (object: GoogleYoloHintInputs) => Promise,\n}\n\ntype OnGoogleYoloLoad = (yolo: GoogleYolo) => void\n\nconst GOOGLE_CLIENT_ID = \"872042080587.apps.googleusercontent.com\"\n\ndeclare global {\n interface Window {\n onGoogleYoloLoad: OnGoogleYoloLoad | null,\n // https://developers.google.com/identity/one-tap/web/guides/migration/hint-only-integration?hl=en\n onGoogleLibraryLoad: () => void | null,\n\n google: null | {\n accounts: null | {\n id: null | {\n initialize: (opts: {\n client_id: string,\n callback: (response: GoogleYoloCredentialResponse) => void,\n use_fedcm_for_prompt: boolean;\n }) => void\n prompt: (callback?: (notification: PromptMomentNotification) => void) => void\n }\n }\n },\n }\n}\n\nconst RejectionReasons = {\n ERROR_REPORTED: \"ERROR_REPORTED\",\n}\n\nconst onLoad = () => {\n on_domready(() => {\n if (isSignedIn()) {\n return\n }\n\n requestIdleCallback(() => {\n WaitObjectByPathPromise(\"google.accounts.id\", {\n should_log_timeout: true,\n })\n .then(() => {\n import(\n \"app/resources/users/create_with_google/index\"\n )\n .then(({\n create: create_user_with_google,\n ResultTypeEnums: CreateUserResultTypes,\n }) => {\n if (window.google == null ||\n window.google.accounts == null ||\n window.google.accounts.id == null) {\n return\n }\n\n window.google.accounts.id.initialize({\n client_id: \"872042080587.apps.googleusercontent.com\",\n // Allow the browser to control user sign-in prompts and mediate the sign-in flow between your website and Google.\n // https://developers.google.com/identity/gsi/web/reference/js-reference#use_fedcm_for_prompt\n use_fedcm_for_prompt: true,\n\n callback: (response) => {\n if (isSignedIn()) { return }\n\n return Promise.resolve(\n import(\"jsontokens\")\n )\n .then(({decodeToken}) => {\n const data = decodeToken(response.credential).payload as GoogleYoloCredentialDecodedData\n if (data.aud !== GOOGLE_CLIENT_ID) { return }\n if (![\"https://accounts.google.com\", \"accounts.google.com\"].includes(data.iss)) { return }\n\n const current_unix_time = Math.round((new Date()).getTime() / 1000)\n // If current time passed token expiry time\n if (data.exp < current_unix_time) { return }\n\n create_user_with_google({\n email: data.email,\n full_name: data.name,\n image: data.picture,\n // It seems we are using the JWT as access token\n // Keeping passing it unless it affects security or function\n id_token: response.credential,\n })\n .then(({result_type}) => {\n switch (result_type) {\n case CreateUserResultTypes.SUCCESS:\n Auth_manager.emit(\"sign_up:success\")\n return\n case CreateUserResultTypes.CONFLICT:\n return\n case CreateUserResultTypes.UNAUTHORIZED:\n return\n default:\n captureMessage(\n `unexpected/unhandled result_type: <${result_type}>`,\n {\n source_file_path:\n \"app/googleyolo/onLoad\",\n response_credential: response.credential,\n data: data,\n },\n )\n throw RejectionReasons.ERROR_REPORTED\n }\n })\n })\n },\n })\n window.google.accounts.id.prompt((notification) => {\n log.debug(\"window.google.accounts.id.prompt callback response\")\n log.debug({\n isDisplayMoment: notification.isDisplayMoment(),\n isDisplayed: notification.isDisplayed(),\n\n isNotDisplayed: notification.isNotDisplayed(),\n getNotDisplayedReason: notification.getNotDisplayedReason(),\n\n isSkippedMoment: notification.isSkippedMoment(),\n getSkippedReason: notification.getSkippedReason(),\n\n isDismissedMoment: notification.isDismissedMoment(),\n getDismissedReason: notification.getDismissedReason(),\n\n getMomentType: notification.getMomentType(),\n })\n })\n })\n })\n })\n })\n}\n\nexport default {onLoad}\n","\nimport log from \"plugins/loglevel/index\"\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport WaitObjectByPathPromise from \"app/wait_object_by_path_promise\"\n\nimport {\n isSignedIn,\n} from \"app/authentication/state\"\n\nimport PageInstance from \"app/page_instance\"\n\nimport RentalListingSearch_PageVisitCount from \"pages/cities/rental_listing_search/data/page_visit_count\"\nimport SaleListingSearch_PageVisitCount from \"pages/cities/sale_listing_search/data/page_visit_count\"\nimport ServicedApartments_PageVisitCount from \"pages/cities/serviced_apartments/components/page_visit_count\"\nimport CityLevelOverseasPropertiesLandingPage_PageVisitCount from \"apps/spacious_website/pages/buildings/city_level_overseas_properties_landing_page/page_visit_count\"\nimport ListerLandingPage_PVTracker from \"apps/spacious_website/pages/listers/lister_landing_page/components/page_visit_count_tracker\"\n\nimport PageVisitCountTrackerPerPageType from \"app/page_visit_count_tracker_per_page_type\"\n\n\ninterface RemoveTagDataEntry {\n tagName: string\n tagType: \"string\" | \"number\" | \"boolean\" | \"list\"\n}\ntype AddTagDataEntry = RemoveTagDataEntry & {\n tagValue: string | number | boolean\n}\n\ndeclare global {\n interface Window {\n truepush: {\n push(x: (() => void) | {\n operation: \"add-tags\"\n data: AddTagDataEntry[]\n } | {\n operation: \"remove-tags\"\n data: RemoveTagDataEntry[]\n }): void,\n } | any[] | null,\n }\n}\nconst getTruePush = () => {\n return window.truepush || []\n}\n\n// Ensure global var exists\nwindow.truepush = getTruePush()\n\n\nconst onLoad = () => {\n requestIdleCallback(() => {\n log.debug(\"Starting onLoad for truepush\")\n\n getTruePush().push({\n operation: \"add-tags\",\n data: [\n {\n tagName: \"last_visited_domain_name\",\n tagType: \"string\",\n // From\n // http://stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc\n tagValue: window.location.hostname,\n },\n\n {\n tagName: \"signed_in_to_spacious\",\n tagType: \"boolean\",\n // Assumed the response is not cached\n // which should be true most of the time\n tagValue: isSignedIn(),\n },\n\n\n {\n tagName: \"city_rental_listing_search_page_visit_count\",\n tagType: \"number\",\n tagValue: RentalListingSearch_PageVisitCount.getValue(),\n },\n {\n tagName: \"city_sale_listing_search_page_visit_count\",\n tagType: \"number\",\n tagValue: SaleListingSearch_PageVisitCount.getValue(),\n },\n {\n tagName: \"city_serviced_apartments_page_visit_count\",\n tagType: \"number\",\n tagValue: ServicedApartments_PageVisitCount.getValue(),\n },\n {\n tagName: \"city_overseas_properties_page_visit_count\",\n tagType: \"number\",\n tagValue: CityLevelOverseasPropertiesLandingPage_PageVisitCount.getValue(),\n },\n\n\n {\n tagName: \"byb_landing_page_visit_count\",\n tagType: \"number\",\n tagValue: ListerLandingPage_PVTracker.getValue(),\n },\n\n {\n tagName: \"byb_residential_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_domestic_residential_agencies_page,\n )).getValue(),\n },\n {\n tagName: \"byb_commercial_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_domestic_commercial_agencies_page,\n )).getValue(),\n },\n\n {\n tagName: \"byb_developer_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_domestic_project_developers_page,\n )).getValue(),\n },\n {\n tagName: \"byb_serviced_apartment_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_serviced_apartment_providers_page,\n )).getValue(),\n },\n\n {\n tagName: \"byb_serviced_office_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_serviced_office_providers_page,\n )).getValue(),\n },\n {\n tagName: \"byb_coworking_space_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_coworking_space_providers_page,\n )).getValue(),\n },\n\n {\n tagName: \"byb_overseas_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_overseas_real_estate_properties_providers_page,\n )).getValue(),\n },\n\n {\n tagName: \"byb_advertiser_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.spacious_business_intro_for_advertiser_page,\n )).getValue(),\n },\n\n {\n tagName: \"byb_landlord_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.listings_submission_pricing,\n )).getValue(),\n },\n\n {\n tagName: \"byb_remarketing_page_visit_count\",\n tagType: \"number\",\n tagValue: (new PageVisitCountTrackerPerPageType(\n PageInstance.Enum.lister_remarketing_page,\n )).getValue(),\n },\n ],\n })\n\n // `I18n` might not be defined when this code run\n // Let's assume the worst\n WaitObjectByPathPromise(\"I18n.locale\")\n .then((locale: string) => {\n getTruePush().push({\n operation: \"add-tags\",\n data: [\n {\n tagName: \"last_used_locale\",\n tagType: \"string\",\n tagValue: locale,\n },\n ],\n })\n })\n .done()\n\n // Delete unused/incorrectly set tags\n getTruePush().push(\n {\n operation: \"remove-tags\",\n data: [\n {\n // Incorrect spelling\n // Should be `city_overseas_properties_page_visit_count`\n tagName: \"city_overseas_proeprties_page_visit_count\",\n tagType: \"number\",\n },\n ],\n }\n )\n\n getTruePush().push(() => {\n import(\n \"app/resources/current_authenticated_user/get/index\"\n )\n .then(({\n get: get_current_authenticated_user,\n ResultTypeEnums: GetCurrentAuthenticatedUserTypes,\n }) => {\n get_current_authenticated_user()\n .then(({result_type, data}) => {\n switch (result_type) {\n case GetCurrentAuthenticatedUserTypes.SUCCESS: {\n const input_data: AddTagDataEntry[] = []\n Object.entries(data.onesignal_tags).forEach(([key, val]) => {\n if (typeof val === \"string\") {\n input_data.push({\n tagName: key,\n tagType: \"string\",\n tagValue: val,\n })\n return\n }\n if (typeof val === \"number\") {\n input_data.push({\n tagName: key,\n tagType: \"number\",\n tagValue: val,\n })\n return\n }\n if (typeof val === \"boolean\") {\n input_data.push({\n tagName: key,\n tagType: \"boolean\",\n tagValue: val,\n })\n return\n }\n })\n\n getTruePush().push({\n operation: \"add-tags\",\n data: input_data,\n })\n\n break\n }\n case GetCurrentAuthenticatedUserTypes.NOT_SIGNED_IN: {\n break\n }\n default: {\n break\n }\n }\n })\n .done()\n })\n })\n\n log.debug(\"Ending onLoad for truepush\")\n })\n}\n\nexport {\n onLoad,\n}\n","\nimport authentication_load from \"./authentication/onLoad\"\nimport notifier_load from \"./notifier/onLoad\"\nimport facebook from \"./facebook/onLoad\"\nimport concierge from \"./concierge/onLoad\"\nimport googleyolo from \"./googleyolo/onLoad\"\nimport { onLoad as truepush_onLoad } from \"./truepush/onLoad\"\n\nconst onLoad = () => {\n authentication_load()\n notifier_load()\n facebook.onLoad()\n concierge.onLoad()\n truepush_onLoad()\n googleyolo.onLoad()\n}\n\nexport default onLoad\n","\nimport $ from \"jquery\"\n\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nconst onLoad = () => {\n requestIdleCallback(() => {\n // listener on .main-navbar-inner\n // as app/authentication/remote_state setAsSignedInAndRefreshComponents\n // will modify dom tree\n import(\n \"app/authentication/action\"\n )\n .then(({showSignUpModal}) => {\n $(\".js-btn-sign-up\").on(\"click\", (e) => {\n e.stopPropagation()\n e.preventDefault()\n showSignUpModal().done()\n })\n })\n })\n}\n\nexport {\n onLoad,\n}\n","\nimport $ from \"jquery\"\n\nconst CLASS_NAME_ON_EXPANDED = \"cell--buildings--description-text--box--sometimes-collapsed-style--expanded\"\n\nexport default function onLoad() {\n const $cells = $(\".cell--buildings--description-text--box--sometimes-collapsed-style\")\n if ($cells.length === 0) { return }\n\n $cells.each((_idx, el) => {\n const $cell = $(el)\n const $expand_button = $cell.find(\".cell--buildings--description-text--box--sometimes-collapsed-style__btn-see-more\")\n if ($expand_button.length === 0) { return }\n\n $expand_button.on(\"click\", (() => $cell.addClass(CLASS_NAME_ON_EXPANDED)))\n })\n}\n","\nimport $ from \"jquery\"\n\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport Index from \"./index\"\n\nfunction initAllMatchingElements() {\n Index.init()\n}\n\nfunction onLoad() {\n requestIdleCallback(() => {\n initAllMatchingElements()\n\n // TODO: Move to page specific scripts later\n // For some reason only the jQuery instance on window works\n $(document).on(\"ajaxSuccess\", () => {\n setTimeout(initAllMatchingElements, 1000)\n })\n })\n}\n\nexport default onLoad\n","\nimport {\n ActiveSwitches,\n InputSelector,\n} from \"components/picture_and_map_browser/mark_swtich_active\"\nimport ListingsCarousel from \"concepts/listings/carousel\"\n\nconst DEFAULT_SELECTOR = {\n switches_anchors: \".cell--listings--pictures-and-map-browser--tabbed__switch\",\n page: \".cell--overlay-on-page\",\n}\n\n\nconst Factory = {\n _instance: null as null | ActiveSwitches,\n instance(selector?: InputSelector){\n if (this._instance != null) {\n return this._instance\n }\n\n const instance = this.create(selector)\n this._instance = instance\n instance.on(\"switch_click\", () => {\n // Fix for not auto sliding carousel after tab switched\n if (instance.getCurrentMode() === \"pictures\") {\n ListingsCarousel.startCycling()\n }\n })\n return this._instance\n },\n create(selector?: InputSelector){\n const merged_selector = Object.assign({}, DEFAULT_SELECTOR, selector)\n return new ActiveSwitches(merged_selector)\n },\n}\n\nexport default Factory\n","\nimport u from \"umbrellajs\"\nimport Promise from \"plugins/bluebird/index\"\n\nimport AssetsInfoStore from \"app/assets_info_store\"\n\nimport LeafletSettings from \"app/map/leaflet/settings\"\nimport AppMapZoomLevels from \"app/map/zoom_levels\"\n\nimport DomIdGenerator from \"app/utils/dom_id_generator\"\n\nimport Geometry_Coordinates_ValueFromWgs84ToGsj02Conversion_Op from \"app/geometry/coordinates/value_from_wgs84_to_gsj02_conversion/operation\"\n\nimport ActiveSwitches from \"./mark-switch-active\"\n\n\ninterface Selector {\n scope: string\n maps: string\n}\n\ninterface InputSelector {\n scope?: string\n maps?: string\n}\n\nconst default_selector = {\n scope: \".cell--listings--pictures-and-map-browser--tabbed\",\n maps: \".js-google-map\",\n}\n\n\nconst MAP_INITIALIZED_CLASS_NAME = \"cell--listings--pictures-and-map-browser--tabbed__google-map--js-spacious-initialized\"\n\n\ninterface MapEntry {\n map: L.Map,\n center: L.LatLng,\n map_tile_layer: L.TileLayer & {\n _update?: () => void\n },\n}\n\n\nclass GoogleMapDiv {\n private selector: Selector\n\n private $scope: UmbrellaInstance\n private $maps: UmbrellaInstance\n\n private maplist: MapEntry[]\n\n constructor(selector?: InputSelector) {\n this.selector = Object.assign({}, default_selector, selector)\n this.$scope = u(this.selector.scope)\n this.$maps = this.$scope.find(this.selector.maps)\n\n this.maplist = []\n }\n\n public create_with_promise(): Promise {\n return this.created().then(() => {\n this.bind_action()\n })\n }\n\n private created(){\n return Promise.all(this.$maps.nodes.map((map_el) => {\n if (map_el.classList.contains(MAP_INITIALIZED_CLASS_NAME)) { return }\n map_el.classList.add(MAP_INITIALIZED_CLASS_NAME)\n\n // If we add map tile layer AFTER creating map object\n // The location of tile layer is drifted on load\n // To workaround this we create tile layer first and\n // pass it on map object creation\n return import(\n \"plugins/leaflet\"\n )\n .then(({L}) => {\n return import(\n \"app/map/leaflet/map_tile_layer\"\n )\n .then(({LeafletMapTileLayer}) => {\n return LeafletMapTileLayer.getNewTileLayerPromise()\n .then((map_tile_layer) => {\n return AssetsInfoStore.fetch(\"map/markers/s-spacious.png\")\n .then((icon_image_data) => {\n const lat_str = map_el.getAttribute(\"data-lat\")\n const lng_str = map_el.getAttribute(\"data-lng\")\n if (lat_str == null || lng_str == null) {\n return\n }\n\n const lat = parseFloat(lat_str)\n const lng = parseFloat(lng_str)\n\n let center: L.LatLng = L.latLng(lat, lng)\n if (LeafletSettings.get_use_baidu_maps()) {\n const baidu_latlng = (new Geometry_Coordinates_ValueFromWgs84ToGsj02Conversion_Op({\n latitude: lat,\n longitude: lng,\n })).call()\n\n center = L.latLng(baidu_latlng.latitude, baidu_latlng.longitude)\n }\n\n const dom_id = DomIdGenerator.generateNewId()\n // Set new ID if applicable\n if (dom_id !== map_el.id) {\n map_el.setAttribute(\"id\", dom_id)\n }\n\n const marker_icon = L.icon({\n iconUrl: icon_image_data.url,\n iconSize: [25, 29],\n })\n\n const leaflet_map = LeafletSettings.get_use_baidu_maps() ?\n L.map(dom_id, {\n center: center,\n zoom: 17,\n minZoom: AppMapZoomLevels.min,\n maxZoom: AppMapZoomLevels.max,\n zoomControl: true,\n\n wheelPxPerZoomLevel: 210,\n\n layers: [\n map_tile_layer,\n ],\n })\n :\n L.map(dom_id, {\n center: center,\n\n zoom: 17,\n minZoom: AppMapZoomLevels.min,\n maxZoom: AppMapZoomLevels.max,\n zoomControl: true,\n\n // Has to be true, or labels doesn't follow panning\n markerZoomAnimation: true,\n zoomAnimation: false,\n inertia: false,\n\n wheelPxPerZoomLevel: 210,\n\n layers: [\n map_tile_layer,\n ],\n })\n\n L.marker(center, {\n icon: marker_icon,\n }).addTo(leaflet_map)\n this.maplist.push({map: leaflet_map, center, map_tile_layer})\n })\n })\n })\n })\n }))\n }\n private bind_action(){\n ActiveSwitches.instance().on(\"switch_click\", () => {\n this.resize()\n })\n\n return this\n }\n private resize(){\n // setTimeout to makesure it is the last event handler\n // damn components/widgets/switch_mode\n setTimeout(() => {\n this.maplist.forEach((obj) => {\n const {map, center, map_tile_layer} = obj\n map.setView(center, 17, {\n animate: false,\n })\n map.invalidateSize({\n animate: false,\n debounceMoveend: true,\n })\n if (typeof map_tile_layer._update === \"function\") {\n map_tile_layer._update()\n }\n })\n }, 0)\n }\n}\n\n\nconst factory = {\n create_with_promise(): Promise {\n return new Promise((resolve) => {\n const x = new GoogleMapDiv()\n x.create_with_promise().then(() => {\n resolve()\n })\n .done()\n })\n },\n}\n\nexport default factory\n","\nimport $ from \"jquery\"\nimport isBlankStr from \"underscore.string/isBlank\"\nimport Promise from \"plugins/bluebird/index\"\n\nimport DomIdGenerator from \"app/utils/dom_id_generator\"\nimport Notifier from \"app/notifier\"\nimport {captureException} from \"app/error_reporting\"\nimport GoogleMaps_asyncLoad from \"app/google-maps\"\n\nimport SwitchMode from \"components/widgets/switch_mode\"\n\n\nimport I18n from \"plugins/i18n-js\"\n\n\nconst RejectionReasons = {\n FAILURE_CASE_HANDLED: \"FAILURE_CASE_HANDLED\",\n}\n\n\ninterface Selector {\n scope: string\n street: string\n}\n\ninterface InputSelector {\n scope?: string\n street?: string\n}\n\nconst default_selector = {\n scope: \".cell--listings--pictures-and-map-browser--tabbed\",\n street: \".js-google-street-view\",\n}\n\n\nclass GoogleStreetDiv {\n private selector: Selector\n\n private $scope: JQuery\n private $street_view_box: JQuery\n\n private panoramas_per_dom_id: {\n [index: string]: google.maps.StreetViewPanorama\n }\n\n constructor(selector?: InputSelector) {\n this.selector = Object.assign({}, default_selector, selector)\n this.$scope = $(this.selector.scope)\n this.$street_view_box = this.$scope.find(this.selector.street)\n\n this.panoramas_per_dom_id = {}\n }\n\n public create_with_promise(): Promise {\n return this.created().then(() => {\n this.bind_action()\n // Since there are visitors switched to street view before\n // Promise resolved\n // We need to try to display after load\n // `set_street_view_visible` will do nothing when container invisible\n this.set_street_view_visible()\n })\n }\n\n private created(){\n return GoogleMaps_asyncLoad()\n }\n private bind_action(){\n SwitchMode.on(\"switch_mode:mode_switched\", () => {\n this.set_street_view_visible()\n })\n\n return this\n }\n private set_street_view_visible(){\n this.$street_view_box.each((_idx, street_view_box) => {\n const $street_view_box = $(street_view_box)\n\n if ($street_view_box.is(\":hidden\")) { return }\n\n let dom_id = street_view_box.id\n if (isBlankStr(street_view_box.id)) {\n dom_id = DomIdGenerator.generateNewId()\n street_view_box.setAttribute(\"id\", dom_id)\n }\n\n const existing_panorama = this.panoramas_per_dom_id[dom_id]\n\n const panorama_promise: Promise = Promise.resolve()\n .then(() => {\n if (existing_panorama != null) {\n return existing_panorama\n }\n\n return GoogleMaps_asyncLoad()\n .then((google_maps) => {\n // # `getAttribute` is used instead of `dataset` for better compatibility\n // # Both return string\n const lat_str = street_view_box.getAttribute(\"data-lat\")\n const lng_str = street_view_box.getAttribute(\"data-lng\")\n if (lat_str == null || lng_str == null) {\n Notifier.showError(I18n.t(\"js.app.street_view.errors.street_view_unavailable_at_this_location\"))\n throw RejectionReasons.FAILURE_CASE_HANDLED\n }\n\n const lat = parseFloat(lat_str)\n const lng = parseFloat(lng_str)\n const latlng_obj = new google_maps.LatLng(lat, lng)\n\n const sv = new google_maps.StreetViewService()\n\n return new Promise((resolve, reject) => {\n // Default is 50m\n sv.getPanorama({location: latlng_obj, radius: 50}, (data, status) => {\n if (status === google_maps.StreetViewStatus.OK) {\n const location_pano = (data == null || data.location == null) ? null : data.location.pano\n if (location_pano == null) {\n Notifier.showError(I18n.t(\"js.app.street_view.errors.street_view_unavailable_at_this_location\"))\n reject(RejectionReasons.FAILURE_CASE_HANDLED)\n return\n }\n\n const new_panorama = new google_maps.StreetViewPanorama(\n street_view_box,\n )\n new_panorama.setPano(location_pano)\n new_panorama.setPov({\n heading: 0,\n pitch: 0,\n })\n\n this.panoramas_per_dom_id[dom_id] = new_panorama\n\n resolve(new_panorama)\n return\n }\n\n Notifier.showError(I18n.t(\"js.app.street_view.errors.street_view_unavailable_at_this_location\"))\n reject(RejectionReasons.FAILURE_CASE_HANDLED)\n })\n })\n })\n })\n\n panorama_promise.then((panorama) => {\n panorama.setVisible(true)\n })\n .catch((reason_or_error) => {\n if (reason_or_error === RejectionReasons.FAILURE_CASE_HANDLED) {\n return\n }\n\n captureException(reason_or_error)\n })\n .done()\n })\n }\n}\n\n\nconst factory = {\n create_with_promise(): Promise {\n return new Promise((resolve) => {\n const x = new GoogleStreetDiv()\n x.create_with_promise().then(() => {\n resolve()\n })\n .done()\n })\n },\n}\n\nexport default factory\n","\n// region JS Imports\n\n// region External Modules\nimport Promise from \"plugins/bluebird\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\nimport Carousel from \"concepts/listings/carousel\"\nimport $ from \"jquery\"\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\nfunction init_with_promise(): Promise {\n return new Promise((resolve) => {\n Carousel.init()\n\n $(\".overlay-fullscreen.cell-listing-carousel\").each((idx, el) => {\n Carousel.init_one_element_with_promise({\n container_element: el,\n listing_carousel_selector: {\n carousel: \".carousel\",\n },\n disable_init_protection: true,\n }).done()\n })\n\n resolve()\n })\n}\n\n\nexport default {\n init_with_promise,\n}\nexport {\n init_with_promise,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport Promise from \"plugins/bluebird/index\"\n// endregion External Modules\n\n// Private Modules\nimport DataRetriever from \"app/data_retriever\"\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport ActiveSwitches from \"./mark-switch-active\"\nimport GoogleMap from \"./google_map\"\nimport GoogleStreet from \"./google_street\"\nimport Pictures from \"./components/pictures\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\n\nconst init_with_promise = () => {\n const all_internal_module_init_promises = [] as Array>\n\n ActiveSwitches.instance()\n all_internal_module_init_promises.push(Pictures.init_with_promise())\n all_internal_module_init_promises.push(GoogleMap.create_with_promise())\n\n if (! DataRetriever.get(\"current-location-country-code-is-china\")){\n all_internal_module_init_promises.push(GoogleStreet.create_with_promise())\n }\n\n return Promise.all(all_internal_module_init_promises)\n}\n\nexport default {\n init_with_promise,\n}\n","\nimport Tabbed from \"./tabbed\"\nimport with_toggle_google_street from \"./with_toggle/google_street_view\"\nimport $ from \"jquery\"\n\nconst onLoad = () => {\n if ($(\".cell--listings--pictures-and-map-browser--tabbed\").length > 0){\n Tabbed.init_with_promise().done()\n }\n with_toggle_google_street.onLoad()\n}\n\nexport default {onLoad}\n","\nimport Promise from \"plugins/bluebird\"\nimport {\n requestIdleCallback,\n RequestIdleCallbackPayload,\n} from \"plugins/request-animation-frame-polyfill\"\n\nconst onLoad = () => {\n function init_button_on_load(deadline: RequestIdleCallbackPayload) {\n Promise.resolve(\n import(\"./button/index\")\n )\n .then(({default: button}) => {\n const more_work_required = button.onLoad(deadline)\n if (more_work_required) {\n requestIdleCallback(init_button_on_load)\n }\n })\n }\n\n requestIdleCallback(init_button_on_load)\n}\n\nexport default {onLoad}\n","\nimport Promise from \"plugins/bluebird\"\nimport _once from \"lodash/once\"\n\nconst _onLoad = _once(() => {\n // Too much blocking time running these in a single task\n setTimeout(() => {\n Promise.resolve(\n import(\n \"./prompt_modal/last_save_search_notice\"\n )\n )\n .then(({default: LastSaveNotice}) => {\n LastSaveNotice.show()\n })\n })\n setTimeout(() => {\n Promise.resolve(\n import(\n \"./prompt_modal/save/index\"\n )\n )\n .then(({default: SavedPromptModalSave}) => {\n SavedPromptModalSave.init()\n })\n })\n setTimeout(() => {\n Promise.resolve(\n import(\n \"./button/save_search_button\"\n )\n )\n .then(({default: save_search_button}) => {\n save_search_button.init()\n })\n })\n})\n\nconst onLoad = () => {\n // Do this after LCP to avoid affecting LCP metric\n import(\n \"app/deferred_task_executor/spacious_post_lcp_tasks/scheduler\"\n )\n .then(({addPostLCPTaskOrRun}) => {\n addPostLCPTaskOrRun(_onLoad)\n })\n\n // This is a fallback in case LCP is supported but\n // `getLCP` is bugged/fired really late\n // (Already happening sometimes)\n window.addEventListener(\"load\", _onLoad)\n}\n\nexport default {onLoad}\n","\nimport Google_PageView from \"app/tracking/google/page_view\"\nimport SaveManager from \"concepts/listings/searches/saved/manager\"\n\nconst init = () => {\n SaveManager.on(\"save_click:tracking\", () => {\n Google_PageView.track([\n \"/fake-path\",\n \"/apps/spacious-web-app\",\n \"/pages/all-pages\",\n \"/components/listing-filter-bar/save-filter-criteria-button\",\n \"/events/click\",\n ].join(\"\"))\n })\n}\nexport default {init}\n","\nimport Promise from \"plugins/bluebird\"\n\nimport {\n requestIdleCallback,\n RequestIdleCallbackPayload,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport tracking from \"./tracking/index\"\nimport {Page} from \"app/multi_device\"\n\nconst onLoad = (): void => {\n tracking.init()\n\n if (Page.isForDesktop()){\n Promise.resolve(\n import(\"./desktop/onLoad\")\n )\n .then(({default: Desktop}) => {\n Desktop.onLoad()\n })\n }\n if (Page.isForMobile()){\n Promise.resolve(\n import(\"./mobile/onLoad\")\n )\n .then(({default: Mobile}) => {\n Mobile.onLoad()\n })\n }\n\n function init_tutorial_save_search(deadline: RequestIdleCallbackPayload) {\n if (deadline.timeRemaining() <= 0 && !deadline.didTimeout) {\n // Reschedule\n requestIdleCallback(init_tutorial_save_search)\n return\n }\n\n Promise.resolve(\n import(\"./tutorial_save_search/index\")\n )\n .then(({default: tutorial_save_search}) => {\n requestIdleCallback(() => {\n tutorial_save_search.onLoad()\n })\n })\n }\n requestIdleCallback(init_tutorial_save_search)\n}\n\nexport default {onLoad}\n","\nimport Saved from \"./saved/onLoad\"\nimport FilterBar from \"./filter_bar/onLoad\"\n\nconst onLoad = () => {\n Saved.onLoad()\n FilterBar.onLoad()\n}\n\nexport default {onLoad}\n","\nimport carousel_onload from \"./carousel/onLoad\"\nimport pictures_and_map_browser from \"./pictures_and_map_browser/onLoad\"\nimport contact from \"./contact/onLoad\"\nimport Searches from \"./searches/onLoad\"\n\nconst onLoad = () => {\n carousel_onload()\n pictures_and_map_browser.onLoad()\n contact.onLoad()\n Searches.onLoad()\n}\n\nexport default onLoad\n","\nimport $ from \"jquery\"\n\nconst onLoad = () => {\n const $browserNotice = $(\"#cell--browser--upgrade--notice\")\n if ($browserNotice.length === 0) { return }\n\n setTimeout(() => {\n $browserNotice.hide()\n }, 20 * 1000) // 20 sec\n}\n\nexport default {\n onLoad,\n}\n","import notice from \"./upgrade/notice/index\"\n\nconst onLoad = () => {\n notice.onLoad()\n}\n\nexport default {\n onLoad,\n}\n","\nimport $ from \"jquery\"\nimport \"bootstrap-modal\"\nimport \"bootstrap-modalmanager\"\nimport Auth_manager from \"app/authentication/manager\"\n\nconst CELL_SELECTOR = \".cell-authentication-modal\"\n\nconst onLoad = () => {\n Auth_manager.on(\"sign_in:success:action\", () => $(CELL_SELECTOR).modal(\"hide\"))\n Auth_manager.on(\"sign_up:success:action\", () => $(CELL_SELECTOR).modal(\"hide\"))\n Auth_manager.on(\"forgot_password:success:action\", () => $(CELL_SELECTOR).modal(\"hide\"))\n}\n\nexport default {onLoad}\n","\nimport $ from \"jquery\"\n\nconst CELL_SELECTOR = \".cell-authentication-box\"\n\nconst INPUTS_SELECTOR = `${CELL_SELECTOR} .cell-section-auth--sign-up__email-input, ${CELL_SELECTOR} .cell-section-auth--sign-in__email-input`\n\n// unused logic?\nconst onLoad = () => {\n $(\"body\").on(\"change keypress paste textInput input\", INPUTS_SELECTOR, (e) => {\n const $el_with_change = $(e.currentTarget)\n const latest_value = $el_with_change.val()\n\n // # This includes `this` and another hidden input\n $(INPUTS_SELECTOR).each((idx, el) => {\n // # The field with input should NOT be update\n const $el = $(el)\n if ($el[0] === $el_with_change[0]) { return }\n\n $el.val(latest_value)\n })\n })\n}\n\nexport default {onLoad}\n","\nimport $ from \"jquery\"\n\nconst SIGNIN_SIGNUP_BOX = \"state-sign-in\"\nconst FORGOT_PASSWORD_BOX = \"state-forgot-password\"\nconst CELL_CLASS = \".cell-authentication-box\"\nconst SIGNIN_EMAIL_INPUT = \".cell-section-auth--sign-in__email-input\"\nconst FORGOT_PASSWORD_BOX_EMAIL_INPUT = \".cell-section-auth--forgot-password__email-input\"\n\nconst $body = $(\"body\")\n// should combine with concepts/authentication/modal/switch_sign_up_sing_in ?\n\n// TODO: This init should be call after modal appear to prevent event listener on body\nconst init = () => {\n $body.on(\"click\", `${CELL_CLASS} .js-switch-sign-up-in`, (e) => {\n e.preventDefault()\n const $el = $(e.currentTarget)\n $el.closest(CELL_CLASS).toggleClass(SIGNIN_SIGNUP_BOX)\n $el.closest(CELL_CLASS).removeClass(FORGOT_PASSWORD_BOX)\n })\n\n $body.on(\"click\", `${CELL_CLASS} .js-switch-forgot-password`, (e) => {\n e.preventDefault()\n const $el = $(e.currentTarget)\n $el.closest(CELL_CLASS).toggleClass(FORGOT_PASSWORD_BOX)\n const signin_email_input = $el.closest(CELL_CLASS).find(SIGNIN_EMAIL_INPUT).val()\n $el.closest(CELL_CLASS).find(FORGOT_PASSWORD_BOX_EMAIL_INPUT).val(signin_email_input)\n })\n}\n\nexport default {init}\n","\nimport $ from \"jquery\"\nconst CLASS_TO_TOGGLE = \"state-sign-in\"\nconst CELL_CLASS = \".cell-authentication-modal\"\n\nconst $body = $(\"body\")\n\n// TODO: should combine with concepts/authentication/box/switch_sign_up_sing_in ?\n\n// TODO: This init should be call after modal appear to prevent event listener on body\nconst init = () => {\n $body.on(\"click\", `${CELL_CLASS} .js-switch-sign-up-in`, (e) => {\n e.preventDefault()\n $(e.currentTarget).closest(CELL_CLASS).toggleClass(CLASS_TO_TOGGLE)\n })\n}\n\nexport default {init}\n","\nimport remote_email from \"./modal/remote-email-auth\"\nimport email_sync from \"./box/email_sync\"\nimport box_switch from \"./box/switch_sign_up_sign_in\"\nimport modal_switch from \"./modal/switch_sign_up_sign_in\"\n\nconst onLoad = () => {\n remote_email.onLoad()\n email_sync.onLoad()\n box_switch.init()\n modal_switch.init()\n}\n\nexport default {onLoad}\n","\nimport $ from \"jquery\"\nimport URI from \"urijs\"\n\nconst INIT_COMPLETE_CLASS = \"cell--app--current-area-size-unit--selection-menu--button-style__js-init-done\"\n\n\nexport interface Selector {\n cell: string | JQuery | Element\n links: string\n}\nexport interface InputSelector {\n cell?: string | JQuery | Element\n links?: string\n}\nconst default_selector = {\n cell: \".cell--app--current-area-size-unit--selection-menu--button-style\",\n links: \".cell--app--current-area-size-unit--selection-menu--button-style__item\",\n}\n\nclass Component {\n protected selector: Selector\n\n protected $cell: JQuery\n protected $links: JQuery\n\n constructor(selector?: InputSelector){\n this.selector = Object.assign({}, default_selector, selector)\n\n this.$cell = $(this.selector.cell)\n this.$links = this.$cell.find(this.selector.links)\n\n this.bind_action()\n }\n\n protected bind_action(){\n if (this.$cell.hasClass(INIT_COMPLETE_CLASS)) { return this }\n\n this.$cell.addClass(INIT_COMPLETE_CLASS)\n\n this.$links.each((_idx, link) => {\n const $link = $(link)\n const area_size_unit = $link.data(\"area-size-unit\")\n\n const new_url = URI(window.location)\n new_url.addSearch(\"current_area_size_unit\", area_size_unit)\n\n $link.attr(\"href\", new_url.toString())\n })\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new Component(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport {\n Factory,\n} from \"./factory\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst CELL_CLASS_NAME = \"cell--app--current-area-size-unit--selection-menu--button-style\"\n\nconst initAllMatchingElements = () => {\n u(`.${CELL_CLASS_NAME}`).each((el) => {\n Factory.create({\n cell: el,\n })\n })\n}\n\nfunction onLoad() {\n initAllMatchingElements()\n}\n\nexport default {\n initAllMatchingElements,\n}\n\nexport {\n onLoad,\n}\n","\nimport $ from \"jquery\"\nimport URI from \"urijs\"\n\nconst INIT_COMPLETE_CLASS = \"cell--app--current-area-size-unit--selection-menu--navbar-style__js-init-done\"\n\n\nexport interface Selector {\n cell: string | JQuery | Element\n links: string\n}\nexport interface InputSelector {\n cell?: string | JQuery | Element\n links?: string\n}\nconst default_selector = {\n cell: \".cell--app--current-area-size-unit--selection-menu--navbar-style\",\n links: \".cell--app--current-area-size-unit--selection-menu--navbar-style__link\",\n}\n\nclass Component {\n protected selector: Selector\n\n protected $cell: JQuery\n protected $links: JQuery\n\n constructor(selector?: InputSelector){\n this.selector = Object.assign({}, default_selector, selector)\n\n this.$cell = $(this.selector.cell)\n this.$links = this.$cell.find(this.selector.links)\n\n this.bind_action()\n }\n\n protected bind_action(){\n if (this.$cell.hasClass(INIT_COMPLETE_CLASS)) { return this }\n\n this.$cell.addClass(INIT_COMPLETE_CLASS)\n\n this.$links.each((_idx, link) => {\n const $link = $(link)\n const area_size_unit = $link.data(\"area-size-unit\")\n\n const new_url = URI(window.location)\n new_url.addSearch(\"current_area_size_unit\", area_size_unit)\n\n $link.attr(\"href\", new_url.toString())\n })\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new Component(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\nimport {\n requestIdleCallback,\n RequestIdleCallbackPayload,\n} from \"plugins/request-animation-frame-polyfill\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport {\n Factory,\n} from \"./factory\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst CELL_CLASS_NAME = \"cell--app--current-area-size-unit--selection-menu--navbar-style\"\n\nconst initAllMatchingElements = (deadline?: RequestIdleCallbackPayload): boolean => {\n return u(`.${CELL_CLASS_NAME}`).nodes.some((el) => {\n if (deadline != null && deadline.timeRemaining() <= 10.0) return true\n\n Factory.create({\n cell: el,\n })\n })\n}\n\nfunction onLoad() {\n function init_some_matching_elements(deadline: RequestIdleCallbackPayload) {\n const more_work_required = initAllMatchingElements(deadline)\n if (more_work_required) {\n requestIdleCallback(init_some_matching_elements)\n }\n }\n\n requestIdleCallback(init_some_matching_elements)\n}\n\nexport default {\n initAllMatchingElements,\n}\n\nexport {\n onLoad,\n}\n","\nimport $ from \"jquery\"\n\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n\n\nconst INIT_COMPLETE_CLASS = \"cell--app--languages--selection-menu--button-style__js-init-done\"\n\n\nexport interface Selector {\n cell: string | JQuery | Element\n links: string\n}\nexport interface InputSelector {\n cell?: string | JQuery | Element\n links?: string\n}\nconst default_selector = {\n cell: \".cell--app--languages--selection-menu--button-style\",\n links: \".cell--app--languages--selection-menu--button-style__button\",\n}\n\nclass Component {\n protected selector: Selector\n\n protected $cell: JQuery\n protected $links: JQuery\n\n constructor(selector?: InputSelector){\n this.selector = Object.assign({}, default_selector, selector)\n\n this.$cell = $(this.selector.cell)\n this.$links = this.$cell.find(this.selector.links)\n\n this.bind_action()\n }\n\n protected bind_action(){\n if (this.$cell.hasClass(INIT_COMPLETE_CLASS)) { return this }\n\n this.$cell.addClass(INIT_COMPLETE_CLASS)\n\n this.$links.each((_idx, link) => {\n const $link = $(link)\n // Only \"#\" should be replaced\n // Other values are assumed to be valid URLs\n if ($link.attr(\"href\") !== \"#\") { return }\n\n const locale = $link.data(\"locale\")\n\n let $link_el_for_url = $()\n switch (locale) {\n case \"zh-HK\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-TW\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-CN\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hans\\\"]\")\n break\n }\n case \"en\": {\n $link_el_for_url = $(\"link[hreflang=\\\"en\\\"]\")\n break\n }\n }\n\n // This can sometimes be >1 elements so unknown reasons\n // But we can still use the value\n if ($link_el_for_url.length >= 1) {\n const new_url = $link_el_for_url.attr(\"href\")\n\n $link.attr(\"href\", new_url)\n return\n }\n\n captureMessage(\n \"concepts/app/languages/selection_menu/button_style $link_el_for_url absent\",\n {\n locale: locale,\n $link_el_for_url_length: $link_el_for_url.length,\n }\n )\n })\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new Component(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport {\n Factory,\n} from \"./factory\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst CELL_CLASS_NAME = \"cell--app--languages--selection-menu--button-style\"\n\nconst initAllMatchingElements = () => {\n u(`.${CELL_CLASS_NAME}`).each((el) => {\n Factory.create({\n cell: el,\n })\n })\n}\n\nfunction onLoad() {\n initAllMatchingElements()\n}\n\nexport default {\n initAllMatchingElements,\n}\n\nexport {\n onLoad,\n}\n","\nimport $ from \"jquery\"\n\nimport {\n captureMessage,\n} from \"app/error_reporting\"\n\n\nconst INIT_COMPLETE_CLASS = \"cell--app--languages--selection-menu--navbar-style__js-init-done\"\n\n\nexport interface Selector {\n cell: string | JQuery | Element\n links: string\n}\nexport interface InputSelector {\n cell?: string | JQuery | Element\n links?: string\n}\nconst default_selector = {\n cell: \".cell--app--languages--selection-menu--navbar-style\",\n links: \".cell--app--languages--selection-menu--navbar-style__link\",\n}\n\nclass Component {\n protected selector: Selector\n\n protected $cell: JQuery\n protected $links: JQuery\n\n constructor(selector?: InputSelector){\n this.selector = Object.assign({}, default_selector, selector)\n\n this.$cell = $(this.selector.cell)\n this.$links = this.$cell.find(this.selector.links)\n\n this.bind_action()\n }\n\n protected bind_action(){\n if (this.$cell.hasClass(INIT_COMPLETE_CLASS)) { return this }\n\n this.$cell.addClass(INIT_COMPLETE_CLASS)\n\n this.$links.each((_idx, link) => {\n const $link = $(link)\n // Only \"#\" should be replaced\n // Other values are assumed to be valid URLs\n if ($link.attr(\"href\") !== \"#\") { return }\n\n const locale = $link.data(\"locale\")\n\n let $link_el_for_url = $()\n switch (locale) {\n case \"zh-HK\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-TW\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hant\\\"]\")\n break\n }\n case \"zh-CN\": {\n $link_el_for_url = $(\"link[hreflang=\\\"zh-Hans\\\"]\")\n break\n }\n case \"en\": {\n $link_el_for_url = $(\"link[hreflang=\\\"en\\\"]\")\n break\n }\n }\n\n // This can sometimes be >1 elements so unknown reasons\n // But we can still use the value\n if ($link_el_for_url.length >= 1) {\n const new_url = $link_el_for_url.attr(\"href\")\n\n $link.attr(\"href\", new_url)\n return\n }\n\n captureMessage(\n \"concepts/app/languages/selection_menu/button_style $link_el_for_url absent\",\n {\n locale: locale,\n $link_el_for_url_length: $link_el_for_url.length,\n }\n )\n })\n }\n}\n\nconst Factory = {\n create(selector?: InputSelector){\n return new Component(selector)\n },\n}\n\nexport {\n Factory,\n}\n","\n// region JS Imports\n\n// region External Modules\nimport u from \"umbrellajs\"\n// endregion External Modules\n\n// Private Modules\n// Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\nimport {\n Factory,\n} from \"./factory\"\n// endregion Private Components\n\n// endregion JS Imports\n\n\nconst CELL_CLASS_NAME = \"cell--app--languages--selection-menu--navbar-style\"\n\nconst initAllMatchingElements = () => {\n u(`.${CELL_CLASS_NAME}`).each((el) => {\n Factory.create({\n cell: el,\n })\n })\n}\n\nfunction onLoad() {\n initAllMatchingElements()\n}\n\nexport default {\n initAllMatchingElements,\n}\n\nexport {\n onLoad,\n}\n","\nimport on_domready from \"domready\"\n\nimport {\n onLoad as user_menu_onload,\n} from \"./users/menu/onLoad/use-js-not-link\"\nimport buildings_description_text_box_sometimes_collapsed_style_onload from \"./buildings/description_text/box/sometimes_collapsed_style/onLoad\"\nimport listings_onload from \"./listings/onLoad\"\nimport browser from \"./browser/onLoad\"\nimport auth_onload from \"./authentication/onLoad\"\n\nimport {\n onLoad as building_follow_button_on_load,\n} from \"./buildings/building_follow_button/index\"\nimport {\n onLoad as neighbourhood_follow_button_on_load,\n} from \"./neighbourhoods/neighbourhood_follow_button/index\"\nimport {\n onLoad as current_area_size_unit_selection_menu_button_style_on_load,\n} from \"./app/current_area_size_unit/selection_menu/button_style\"\nimport {\n onLoad as current_area_size_unit_selection_menu_navbar_style_on_load,\n} from \"./app/current_area_size_unit/selection_menu/navbar_style\"\nimport {\n onLoad as languages_selection_menu_button_style_on_load,\n} from \"./app/languages/selection_menu/button_style\"\nimport {\n onLoad as languages_selection_menu_navbar_style_on_load,\n} from \"./app/languages/selection_menu/navbar_style\"\n\n\nconst onLoad = () => {\n on_domready(() => {\n current_area_size_unit_selection_menu_button_style_on_load()\n current_area_size_unit_selection_menu_navbar_style_on_load()\n languages_selection_menu_button_style_on_load()\n languages_selection_menu_navbar_style_on_load()\n user_menu_onload()\n buildings_description_text_box_sometimes_collapsed_style_onload()\n building_follow_button_on_load()\n neighbourhood_follow_button_on_load()\n listings_onload()\n browser.onLoad()\n auth_onload.onLoad()\n })\n}\n\nexport default onLoad\n","\nimport on_domready from \"domready\"\n\nimport Users from \"./users/onLoad\"\n\nconst onLoad = () => {\n on_domready(() => {\n Users.onLoad()\n })\n}\n\nexport default {onLoad}\n","\nimport $ from \"jquery\"\n\n\nconst INIT_DONE_CLASS_NAME = \"js--collapsible--init-done\"\n\n\nconst SELECTORS = {\n COLLAPSIBLE_CONTAINER: \".collapsible\",\n COLLAPSIBLE_TOGGLE: \".collapsible-toggle\",\n}\n\n\nfunction collapse_toggle($collapse_container_el: JQuery, $collapse_toggle_el: JQuery, event: Event) {\n const $collapse_toggle = $collapse_toggle_el\n const $collapse_container = $collapse_container_el\n\n // Don\"t do anything when the toggle is freezed\n if ($collapse_toggle.data(\"freezed\") != null) {\n return\n }\n\n // If it\"s showing stuff by hover, clicking shouldn\"t toggle again\n if ((event != null) &&\n (event.type === \"click\") &&\n !$collapse_container.hasClass(\"collapsed\") &&\n $collapse_container.hasClass(\"uncollapsed-by-hover\")) {\n return\n }\n\n if (event == null) {\n // if it\"s simple clicking or function call, toggle directly\n setTimeout(() => {\n $collapse_toggle\n .toggleClass(\"collapsed\")\n .find(\".collapsible-content\")\n .toggle()\n }, 0)\n return\n }\n\n // Must use `setTimeout` because otherwise click/touch events can goes to\n // the content directly, in rare cases where the content and the\n // toggle overlaps.\n if ((event.type === \"mouseover\") || (event.type === \"mouseenter\")) {\n setTimeout(() => {\n $collapse_toggle\n .removeClass(\"collapsed\")\n .find(\".collapsible-content\")\n .show()\n\n // Add this class so that next time when it\"s clicked, we know\n // the click shouldn\"t change anything\n $collapse_container.addClass(\"uncollapsed-by-hover\")\n }, 0)\n }\n else if ((event.type === \"mouseout\") || (event.type === \"mouseleave\")) {\n setTimeout(() => {\n $collapse_toggle\n .addClass(\"collapsed\")\n .find(\".collapsible-content\")\n .hide()\n\n $collapse_container.removeClass(\"uncollapsed-by-hover\")\n }, 0)\n }\n}\n\n\n// === Hide toggle target on start or after AJAX ===\nfunction initOneElement(collapse_container_el: Element) {\n const $collapse_container_el = $(collapse_container_el)\n const $collapse_toggle_el = $collapse_container_el.find(`> ${SELECTORS.COLLAPSIBLE_TOGGLE}`)\n\n if ($collapse_container_el.hasClass(INIT_DONE_CLASS_NAME)) {\n return\n }\n else {\n $collapse_container_el.addClass(INIT_DONE_CLASS_NAME)\n }\n\n $collapse_toggle_el.on(\"click\", (e: JQueryEventObject) => {\n collapse_toggle($collapse_container_el, $collapse_toggle_el, e)\n })\n\n if ($collapse_container_el.attr(\"data-js-enable-hover\") === \"true\") {\n $(\".collapsible[data-js-enable-hover='true']\").hover(\n (e) => {\n collapse_toggle($collapse_container_el, $collapse_toggle_el, e)\n },\n (e) => {\n collapse_toggle($collapse_container_el, $collapse_toggle_el, e)\n }\n )\n }\n}\n\n\n\nconst onLoad = () => {\n // On document ready\n $(SELECTORS.COLLAPSIBLE_CONTAINER).each((_idx, element) => {\n initOneElement(element)\n })\n\n // On AJAX success\n $(document).ajaxSuccess(() => {\n $(SELECTORS.COLLAPSIBLE_CONTAINER).each((_idx, element) => {\n initOneElement(element)\n })\n })\n}\n\n\nexport default {\n onLoad: onLoad,\n}\n","\nimport $ from \"jquery\"\nimport log from \"plugins/loglevel\"\n\n\n// Remeber, BOTH the trigger and target can be multiple\n// but trigger is singular in event listener\n\n// Required data attribute, either one of them\nconst TARGET_DATA_ATTR_NAME = \"toggleable-target\" // use this to search globally\nconst TARGET_IN_CHILDREN_DATA_ATTR_NAME = \"toggleable-child\" // use this to search for target in children\nconst TARGET_IN_PARENTS_DATA_ATTR_NAME = \"toggleable-parent\" // use this to search for target in parents\n// This is for TRIGGER, optional\nconst TRIGGER_ONEOFF_SWITCH_DATA_ATTR_NAME = \"toggleable-trigger-oneoff\"\n// No need to add this attribute\nconst TRIGGER_ONEOFF_PROCESSED_DATA_ATTR_NAME = \"toggleable-trigger-oneoff-processed\"\n// This is for TARGET, optional\nconst TARGET_ONEOFF_SWITCH_DATA_ATTR_NAME = \"toggleable-target-oneoff\"\n// No need to add this attribute\nconst TARGET_ONEOFF_PROCESSED_DATA_ATTR_NAME = \"toggleable-target-oneoff-processed\"\n\nconst SELECTOR = `[data-${TARGET_DATA_ATTR_NAME}], [data-${TARGET_IN_CHILDREN_DATA_ATTR_NAME}], [data-${TARGET_IN_PARENTS_DATA_ATTR_NAME}] `\n\n// Use this class for styling\nconst TARGET_TOGGLED_CLASS = \"with-js-state-toggled\"\n\nconst INIT_DONE_CLASS_NAME = \"js--data-toggleable-triggers-and-targets--init-done\"\n\n\n\nconst get_$targets = ($trigger: JQuery): JQuery => {\n if ($trigger.data(TARGET_DATA_ATTR_NAME) != null) {\n return $($trigger.data(TARGET_DATA_ATTR_NAME))\n }\n else if ($trigger.data(TARGET_IN_CHILDREN_DATA_ATTR_NAME) != null) {\n return $trigger.find($trigger.data(TARGET_IN_CHILDREN_DATA_ATTR_NAME))\n }\n else if ($trigger.data(TARGET_IN_PARENTS_DATA_ATTR_NAME) != null) {\n return $trigger.parents($trigger.data(TARGET_IN_PARENTS_DATA_ATTR_NAME))\n }\n else {\n log.error(`Element ${$trigger.toString()} has no neither of 3 attributes, selector might be incorrect`)\n return $()\n }\n}\n\n\n// === Hide toggle target on start or after AJAX ===\nfunction initOneElement(trigger: Element): void {\n const $trigger = $(trigger)\n\n if ($trigger.hasClass(INIT_DONE_CLASS_NAME)) {\n return\n }\n else {\n $trigger.addClass(INIT_DONE_CLASS_NAME)\n }\n\n $trigger.on(\"click\", (e) => {\n const is_oneoff_trigger = ($trigger.data(TRIGGER_ONEOFF_SWITCH_DATA_ATTR_NAME) != null)\n\n // if trigger is a one off trigger and already processed, ignore\n if (is_oneoff_trigger && ($trigger.data(TRIGGER_ONEOFF_PROCESSED_DATA_ATTR_NAME) != null)) {\n return\n }\n\n if (is_oneoff_trigger) {\n $trigger.data(TRIGGER_ONEOFF_PROCESSED_DATA_ATTR_NAME, true)\n }\n\n const $targets = get_$targets($trigger)\n\n if ($targets.length === 0) {\n return\n }\n\n $targets.each((_idx, element) => {\n const $target = $(element)\n\n const is_oneoff_target = ($target.data(TARGET_ONEOFF_SWITCH_DATA_ATTR_NAME) != null)\n\n // if trigger is a one off trigger and already processed, ignore\n if (is_oneoff_target && ($target.data(TARGET_ONEOFF_PROCESSED_DATA_ATTR_NAME) != null)) {\n return\n }\n\n if (is_oneoff_target) {\n $target.data(TARGET_ONEOFF_PROCESSED_DATA_ATTR_NAME, true)\n }\n\n $target.toggleClass(TARGET_TOGGLED_CLASS)\n })\n\n e.preventDefault()\n })\n}\n\n\n\nconst onLoad = () => {\n // On document ready\n $(SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n\n // On AJAX success\n $(document).ajaxSuccess(() => {\n $(SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n })\n}\n\n\nexport default {\n onLoad: onLoad,\n}\n","\nimport $ from \"jquery\"\n\nimport StickyNavbarHandler from \"app/sticky_navbar_handler/index\"\n\n\nconst SELECTOR = \".js-scrollspy-navbar\"\n\n\nconst onLoad = () => {\n const $window = $(window)\n\n $(`${SELECTOR} li > a`).each((_idx, element) => {\n const $this = $(element)\n const $target = $($this.attr(\"href\") as string)\n\n if (!$target.length) {\n return\n }\n\n $window.on(\"scroll touchmove\", () => {\n let extraOffset = 60\n extraOffset += StickyNavbarHandler.getTotalOffsetForScrolling()\n\n const target_offset = $target.offset()\n if (target_offset == null) { return }\n\n if ( ($window.scrollTop() || 0) > (target_offset.top - extraOffset)) {\n $(`${SELECTOR} li`).removeClass(\"active\")\n $this.parent(\"li\").addClass(\"active\")\n }\n })\n })\n\n // First thing should have active class on start\n $(`${SELECTOR} li:first-child`).addClass(\"active\")\n}\n\n\nexport default {\n onLoad: onLoad,\n}\n","\nimport $ from \"jquery\"\n\nimport StickyNavbarHandler from \"app/sticky_navbar_handler/index\"\n\n\nconst SELECTOR = \".js-smooth-scrolling-navbar\"\n\nconst INIT_DONE_CLASS_NAME = \"js--js-smooth-scrolling-navbar--init-done\"\n\n\nfunction initOneElement(link_container: Element): void {\n const $link_container = $(link_container)\n\n if ($link_container.hasClass(INIT_DONE_CLASS_NAME)) {\n return\n }\n else {\n $link_container.addClass(INIT_DONE_CLASS_NAME)\n }\n\n $link_container.find(\"a\").each((_idx, link) => {\n const $link = $(link)\n\n $link.on(\"click\", (e: JQueryEventObject) => {\n const href = $link.attr(\"href\")\n // Prevent non anchor value\n if (!/^#/.test(href)) {\n return\n }\n const $targetElement = $(href)\n\n // If found\n if ($targetElement.length) {\n StickyNavbarHandler.scrollTo($targetElement)\n\n // And prevent adding the hash to URL\n e.preventDefault()\n e.stopPropagation()\n }\n })\n })\n}\n\nconst onLoad = () => {\n // On document ready\n $(SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n\n // On AJAX success\n $(document).ajaxSuccess(() => {\n $(SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n })\n}\n\n\nexport default {\n onLoad: onLoad,\n}\n","\nimport $ from \"jquery\"\n\n\nconst TOGGLE_SELECTOR = \"[data-toggle='display'][data-target]\"\n\nconst INIT_DONE_CLASS_NAME = \"js--toggle-display--init-done\"\n\n\n// === Hide toggle target on start or after AJAX ===\nfunction initOneElement(element: Element) {\n const $this = $(element)\n\n if ($this.hasClass(INIT_DONE_CLASS_NAME)) {\n return\n }\n else {\n $this.addClass(INIT_DONE_CLASS_NAME)\n }\n\n const $container = $this.parents($this.data(\"parent\") || \"body\")\n const targetSelector = $this.data(\"target\")\n const $target = $container.find(targetSelector)\n\n // Use this class name as a flag of processed\n if (!$this.hasClass(\"js-toggle-display-init-done\")) {\n $this.addClass(\"js-toggle-display-init-done\")\n\n if ($this.data(\"hide\") != null) {\n return $target.hide()\n }\n }\n\n $this.on(\"click\", (e) => {\n if ($this.data(\"effect\") === \"slide\") {\n $target.slideToggle()\n }\n else if ($this.data(\"effect\") === \"fade\") {\n $target.fadeToggle()\n }\n else {\n $target.toggle()\n }\n\n if ($this.data(\"oneoff\") != null) {\n $this.hide()\n }\n\n e.preventDefault()\n })\n}\n\nconst initAllMatchingElements = () => {\n $(TOGGLE_SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n}\n\nconst onLoad = () => {\n // On document ready\n initAllMatchingElements()\n\n // On AJAX success\n $(document).ajaxSuccess(() => {\n initAllMatchingElements()\n })\n // === Hide toggle target on start or after AJAX ===\n}\n\n\nexport default {\n onLoad: onLoad,\n initAllMatchingElements: initAllMatchingElements,\n}\n","\nimport $ from \"jquery\"\n\n\nconst CONTAINER_SELECTOR = \".js-toggleable-container\"\nconst ONEOFF_CLASS = \"js-toggleable-mode-oneoff\"\nconst TOGGLED_CLASS = \"js-toggleable-state-oneoff-toggled\"\n\nconst INIT_DONE_CLASS_NAME = \"js--toggleable--init-done\"\n\n\n// === Hide toggle target on start or after AJAX ===\nfunction initOneElement(element: Element) {\n const $this = $(element)\n\n if ($this.hasClass(INIT_DONE_CLASS_NAME)) {\n return\n }\n else {\n $this.addClass(INIT_DONE_CLASS_NAME)\n }\n\n if ($this.hasClass(ONEOFF_CLASS)) {\n if ($this.hasClass(TOGGLED_CLASS)) {\n return\n }\n else {\n // So that next time would be stopped\n $this.addClass(TOGGLED_CLASS)\n }\n }\n\n $this.toggleClass(\"is-toggled\")\n}\n\n\nconst onLoad = () => {\n // On document ready\n $(CONTAINER_SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n\n // On AJAX success\n $(document).ajaxSuccess(() => {\n $(CONTAINER_SELECTOR).each((_idx, element) => {\n initOneElement(element)\n })\n })\n // === Hide toggle target on start or after AJAX ===\n}\n\n\nexport default {\n onLoad: onLoad,\n}\n","\nimport on_domready from \"domready\"\n\nimport {\n requestIdleCallback,\n} from \"plugins/request-animation-frame-polyfill\"\n\nimport Collapsible from \"./collapsible\"\nimport DataToggleableTriggersAndTargets from \"./data-toggleable-triggers-and-targets\"\nimport JsScrollspyNavbar from \"./js-scrollspy-navbar\"\nimport JsSmoothScrollingNavbar from \"./js-smooth-scrolling-navbar\"\nimport ToggleDisplay from \"./toggle-display\"\nimport Toggleable from \"./toggleable\"\nimport ImageLazyLoading from \"widgets/image_lazyloading\"\nimport BackgroundImageLazyloading from \"widgets/background_image_lazyloading\"\n\n\nconst onLoad = () => {\n on_domready(() => {\n Collapsible.onLoad()\n DataToggleableTriggersAndTargets.onLoad()\n JsScrollspyNavbar.onLoad()\n JsSmoothScrollingNavbar.onLoad()\n ToggleDisplay.onLoad()\n Toggleable.onLoad()\n\n requestIdleCallback(() => {\n BackgroundImageLazyloading.default_lazyload_instance().update()\n // Not calling `update` on initialization\n ImageLazyLoading.default_lazyload_instance()\n })\n })\n}\n\n\nexport {\n onLoad,\n}\n","\nimport {\n SimplePerformanceMetric,\n} from \"plugins/@figliolia/metrics\"\n\nimport \"app/beforeCreated\"\n\nimport plugins_onLoad from \"plugins/onLoad\"\nimport components_onLoad from \"components/onLoad\"\nimport app_onLoad from \"app/onLoad\"\nimport concepts_onLoad from \"concepts/onLoad\"\nimport page_onLoad from \"pages/onLoad\"\nimport {\n onLoad as widgets_onLoad,\n} from \"widgets/index\"\n\nconst onLoad = () => {\n new SimplePerformanceMetric(\"plugins_onLoad\").measure(() => {\n plugins_onLoad()\n })\n new SimplePerformanceMetric(\"app_onLoad\").measure(() => {\n app_onLoad()\n })\n new SimplePerformanceMetric(\"components_onLoad\").measure(() => {\n components_onLoad()\n })\n new SimplePerformanceMetric(\"widgets_onLoad\").measure(() => {\n widgets_onLoad()\n })\n new SimplePerformanceMetric(\"concepts_onLoad\").measure(() => {\n concepts_onLoad()\n })\n new SimplePerformanceMetric(\"page_onLoad.onLoad\").measure(() => {\n page_onLoad.onLoad()\n })\n}\n\nexport default onLoad\n"],"file":"assets/es6_onLoad-YZxU0OBj.js"}