{"version":3,"file":"js/119-cc03efaa66140a343b20.js","mappings":"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","sources":["webpack://jumpstart-app/./app/javascript/channels/ sync _channel\\.js$","webpack://jumpstart-app/./app/javascript/controllers/ sync _controller\\.js$","webpack://jumpstart-app/./app/javascript/channels/index.js","webpack://jumpstart-app/./app/javascript/controllers/account/slug_controller.js","webpack://jumpstart-app/./app/javascript/controllers/account_onboarding_controller.js","webpack://jumpstart-app/./app/javascript/channels/consumer.js","webpack://jumpstart-app/./app/javascript/controllers/accounts_controller.js","webpack://jumpstart-app/./app/javascript/controllers/appointment_types/appointment_types_controller.js","webpack://jumpstart-app/./app/javascript/controllers/appointment_types/booking_controller.js","webpack://jumpstart-app/./app/javascript/controllers/appointment_types/booking_page_controller.js","webpack://jumpstart-app/./app/javascript/controllers/appointment_types/booking_questions_controller.js","webpack://jumpstart-app/./app/javascript/controllers/autosave_controller.js","webpack://jumpstart-app/./app/javascript/controllers/availability_controller.js","webpack://jumpstart-app/./app/javascript/controllers/background_images_controller.js","webpack://jumpstart-app/./app/javascript/controllers/braintree_controller.js","webpack://jumpstart-app/./app/javascript/controllers/breadcrumbs_controller.js","webpack://jumpstart-app/./app/javascript/controllers/bulk_controller.js","webpack://jumpstart-app/./app/javascript/controllers/calendar_controller.js","webpack://jumpstart-app/./app/javascript/controllers/clone_element_controller.js","webpack://jumpstart-app/./app/javascript/controllers/close_controller.js","webpack://jumpstart-app/./app/javascript/controllers/colors/apply_colors_controller.js","webpack://jumpstart-app/./app/javascript/controllers/colors/color_picker_controller.js","webpack://jumpstart-app/./app/javascript/controllers/colors/color_settings_controller.js","webpack://jumpstart-app/./app/javascript/controllers/colors/style_selection_controller.js","webpack://jumpstart-app/./app/javascript/controllers/colors/theme_selection_controller.js","webpack://jumpstart-app/./app/javascript/controllers/commerce/actions_controller.js","webpack://jumpstart-app/./app/javascript/controllers/commerce/after_purchase_controller.js","webpack://jumpstart-app/./app/javascript/controllers/commerce/manage_subscription_controller.js","webpack://jumpstart-app/./app/javascript/controllers/commerce/pricing_controller.js","webpack://jumpstart-app/./app/javascript/controllers/commerce/product_controller.js","webpack://jumpstart-app/./app/javascript/controllers/commerce/purchase_flow_controller.js","webpack://jumpstart-app/./app/javascript/controllers/contact_attributes/contact_attributes_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/after_post_prompt_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/compose_email_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/embed_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/flow_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/load_thumbnail_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/navigation_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/scroll_messages_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/settings_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/share_modal_controller.js","webpack://jumpstart-app/./app/javascript/controllers/conversation/thumbnail_controller.js","webpack://jumpstart-app/./app/javascript/controllers/copy_controller.js","webpack://jumpstart-app/./app/javascript/controllers/delete_controller.js","webpack://jumpstart-app/./app/javascript/controllers/detect_link_controller.js","webpack://jumpstart-app/./app/javascript/controllers/dropdown_controller.js","webpack://jumpstart-app/./app/javascript/controllers/dropdown_hover_controller.js","webpack://jumpstart-app/./app/javascript/controllers/dropdown_multi_select_controller.js","webpack://jumpstart-app/./app/javascript/controllers/dropzone_controller.js","webpack://jumpstart-app/./app/javascript/controllers/facebook_controller.js","webpack://jumpstart-app/./app/javascript/controllers/field_option_controller.js","webpack://jumpstart-app/./app/javascript/controllers/file_uploads_controller.js","webpack://jumpstart-app/./app/javascript/controllers/forms/builder_controller.js","webpack://jumpstart-app/./app/javascript/controllers/forms/form_settings_controller.js","webpack://jumpstart-app/./app/javascript/controllers/forms/form_submission_controller.js","webpack://jumpstart-app/./app/javascript/controllers/forms/forms_controller.js","webpack://jumpstart-app/./app/javascript/controllers/google_tag_manager_controller.js","webpack://jumpstart-app/./app/javascript/controllers/image_upload_controller.js","webpack://jumpstart-app/./app/javascript/controllers/index.js","webpack://jumpstart-app/./app/javascript/controllers/intake_page/embed_controller.js","webpack://jumpstart-app/./app/javascript/controllers/intake_page/intake_page_tags_controller.js","webpack://jumpstart-app/./app/javascript/controllers/integrations/slack_channels_controller.js","webpack://jumpstart-app/./app/javascript/controllers/invitation_template_controller.js","webpack://jumpstart-app/./app/javascript/controllers/invitations/create_invitation_controller.js","webpack://jumpstart-app/./app/javascript/controllers/invitations/invitation_onboarding_controller.js","webpack://jumpstart-app/./app/javascript/controllers/lib/search_methods.js","webpack://jumpstart-app/./app/javascript/controllers/login_controller.js","webpack://jumpstart-app/./app/javascript/controllers/mentions_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/clarityflow_login_instructions_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/concerns/detect_audio_level.js","webpack://jumpstart-app/./app/javascript/controllers/message/conversation_link_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/concerns/upload_error.js","webpack://jumpstart-app/./app/javascript/controllers/message/media_streams/screen_media_stream.js","webpack://jumpstart-app/./app/javascript/controllers/message/concerns/multipart_upload.js","webpack://jumpstart-app/./app/javascript/controllers/message/concerns/rails_direct_upload.js","webpack://jumpstart-app/./app/javascript/controllers/message/creation_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/recorder/media_recorder.js","webpack://jumpstart-app/./app/javascript/controllers/message/edit_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/embed_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/embed_media_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/error_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/kickoff_recording_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/library_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/media_streams/audio_media_stream.js","webpack://jumpstart-app/./app/javascript/controllers/message/media_streams/camera_media_stream.js","webpack://jumpstart-app/./app/javascript/controllers/message/message_type_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/misc_ui_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/navigation_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/resizeable_clip_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/save_message_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/schedule_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/thread_state_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/threads_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/toggle_form_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/tour_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message/view_controller.js","webpack://jumpstart-app/./app/javascript/controllers/message_templates_controller.js","webpack://jumpstart-app/./app/javascript/controllers/mixpanel_controller.js","webpack://jumpstart-app/./app/javascript/controllers/mobile/mobile_onboarding_controller.js","webpack://jumpstart-app/./app/javascript/controllers/mobile_app_controller.js","webpack://jumpstart-app/./app/javascript/controllers/modal_controller.js","webpack://jumpstart-app/./app/javascript/controllers/onboarding_controller.js","webpack://jumpstart-app/./app/javascript/controllers/paypal_controller.js","webpack://jumpstart-app/./app/javascript/controllers/plausible_controller.js","webpack://jumpstart-app/./app/javascript/controllers/popover_controller.js","webpack://jumpstart-app/./app/javascript/controllers/programs/program_item_creation_controller.js","webpack://jumpstart-app/./app/javascript/controllers/programs/programs_controller.js","webpack://jumpstart-app/./app/javascript/controllers/radios_controller.js","webpack://jumpstart-app/./app/javascript/controllers/reactions_controller.js","webpack://jumpstart-app/./app/javascript/controllers/rewardful_controller.js","webpack://jumpstart-app/./app/javascript/controllers/richtext_controller.js","webpack://jumpstart-app/./app/javascript/controllers/search_controller.js","webpack://jumpstart-app/./app/javascript/controllers/search_objects_controller.js","webpack://jumpstart-app/./app/javascript/controllers/select_dynamic_controller.js","webpack://jumpstart-app/./app/javascript/controllers/sidebar/conversations_controller.js","webpack://jumpstart-app/./app/javascript/controllers/sidebar/sidebar_controller.js","webpack://jumpstart-app/./app/javascript/controllers/space_controller.js","webpack://jumpstart-app/./app/javascript/controllers/space_program_controller.js","webpack://jumpstart-app/./app/javascript/controllers/stripe_controller.js","webpack://jumpstart-app/./app/javascript/controllers/subscription/cancel_controller.js","webpack://jumpstart-app/./app/javascript/controllers/subscription/plans_controller.js","webpack://jumpstart-app/./app/javascript/controllers/support_widget_controller.js","webpack://jumpstart-app/./app/javascript/controllers/tabs_controller.js","webpack://jumpstart-app/./app/javascript/controllers/tags/tag_controller.js","webpack://jumpstart-app/./app/javascript/controllers/tags/tags_controller.js","webpack://jumpstart-app/./app/javascript/controllers/tasks/task_controller.js","webpack://jumpstart-app/./app/javascript/controllers/tasks/task_creation_controller.js","webpack://jumpstart-app/./app/javascript/controllers/tasks/task_modal_controller.js","webpack://jumpstart-app/./app/javascript/controllers/text_editor_controller.js","webpack://jumpstart-app/./app/javascript/controllers/toggle_controller.js","webpack://jumpstart-app/./app/javascript/controllers/toggle_settings_panel_controller.js","webpack://jumpstart-app/./app/javascript/controllers/toggle_switch_controller.js","webpack://jumpstart-app/./app/javascript/controllers/troubleshoot_controller.js","webpack://jumpstart-app/./app/javascript/controllers/video_controller.js","webpack://jumpstart-app/./app/javascript/controllers/webhooks_controller.js","webpack://jumpstart-app/./app/javascript/controllers/workflows/config_controller.js","webpack://jumpstart-app/./app/javascript/controllers/workflows/runs_controller.js","webpack://jumpstart-app/./app/javascript/helpers/index.js","webpack://jumpstart-app/./app/javascript/src/actiontext.js","webpack://jumpstart-app/./app/javascript/src/direct_uploads.js","webpack://jumpstart-app/./app/javascript/src/emojis.js","webpack://jumpstart-app/./app/javascript/src/forms.js","webpack://jumpstart-app/./app/javascript/src/timezone.js","webpack://jumpstart-app/./app/javascript/src/tooltips.js"],"sourcesContent":["function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nwebpackEmptyContext.id = 6463;\nmodule.exports = webpackEmptyContext;","var map = {\n\t\"./account/slug_controller.js\": 1191,\n\t\"./account_onboarding_controller.js\": 4760,\n\t\"./accounts_controller.js\": 2614,\n\t\"./appointment_types/appointment_types_controller.js\": 5575,\n\t\"./appointment_types/booking_controller.js\": 5054,\n\t\"./appointment_types/booking_page_controller.js\": 3023,\n\t\"./appointment_types/booking_questions_controller.js\": 189,\n\t\"./autosave_controller.js\": 9342,\n\t\"./availability_controller.js\": 8100,\n\t\"./background_images_controller.js\": 3639,\n\t\"./braintree_controller.js\": 8290,\n\t\"./breadcrumbs_controller.js\": 496,\n\t\"./bulk_controller.js\": 8330,\n\t\"./calendar_controller.js\": 2494,\n\t\"./clone_element_controller.js\": 554,\n\t\"./close_controller.js\": 5626,\n\t\"./colors/apply_colors_controller.js\": 5463,\n\t\"./colors/color_picker_controller.js\": 1827,\n\t\"./colors/color_settings_controller.js\": 6387,\n\t\"./colors/style_selection_controller.js\": 9779,\n\t\"./colors/theme_selection_controller.js\": 6234,\n\t\"./commerce/actions_controller.js\": 7158,\n\t\"./commerce/after_purchase_controller.js\": 6187,\n\t\"./commerce/manage_subscription_controller.js\": 5945,\n\t\"./commerce/pricing_controller.js\": 6280,\n\t\"./commerce/product_controller.js\": 3888,\n\t\"./commerce/purchase_flow_controller.js\": 2406,\n\t\"./contact_attributes/contact_attributes_controller.js\": 4656,\n\t\"./conversation/after_post_prompt_controller.js\": 9656,\n\t\"./conversation/compose_email_controller.js\": 9501,\n\t\"./conversation/embed_controller.js\": 9923,\n\t\"./conversation/flow_controller.js\": 7083,\n\t\"./conversation/load_thumbnail_controller.js\": 3320,\n\t\"./conversation/navigation_controller.js\": 5661,\n\t\"./conversation/scroll_messages_controller.js\": 3830,\n\t\"./conversation/settings_controller.js\": 3072,\n\t\"./conversation/share_modal_controller.js\": 3701,\n\t\"./conversation/thumbnail_controller.js\": 611,\n\t\"./copy_controller.js\": 6348,\n\t\"./delete_controller.js\": 375,\n\t\"./detect_link_controller.js\": 9048,\n\t\"./dropdown_controller.js\": 1826,\n\t\"./dropdown_hover_controller.js\": 8762,\n\t\"./dropdown_multi_select_controller.js\": 4908,\n\t\"./dropzone_controller.js\": 6712,\n\t\"./facebook_controller.js\": 3064,\n\t\"./field_option_controller.js\": 5295,\n\t\"./file_uploads_controller.js\": 3169,\n\t\"./forms/builder_controller.js\": 9570,\n\t\"./forms/form_settings_controller.js\": 7737,\n\t\"./forms/form_submission_controller.js\": 8349,\n\t\"./forms/forms_controller.js\": 7688,\n\t\"./google_tag_manager_controller.js\": 8028,\n\t\"./image_upload_controller.js\": 4018,\n\t\"./intake_page/embed_controller.js\": 9543,\n\t\"./intake_page/intake_page_tags_controller.js\": 9574,\n\t\"./intake_page/toggle_reply_controller.js\": 9278,\n\t\"./integrations/slack_channels_controller.js\": 3527,\n\t\"./invitation_template_controller.js\": 1540,\n\t\"./invitations/create_invitation_controller.js\": 3514,\n\t\"./invitations/invitation_onboarding_controller.js\": 8034,\n\t\"./login_controller.js\": 1320,\n\t\"./mentions_controller.js\": 1072,\n\t\"./message/clarityflow_login_instructions_controller.js\": 1135,\n\t\"./message/conversation_link_controller.js\": 7137,\n\t\"./message/creation_controller.js\": 1372,\n\t\"./message/edit_controller.js\": 8733,\n\t\"./message/embed_controller.js\": 1677,\n\t\"./message/embed_media_controller.js\": 9757,\n\t\"./message/error_controller.js\": 47,\n\t\"./message/kickoff_recording_controller.js\": 2372,\n\t\"./message/library_controller.js\": 2630,\n\t\"./message/message_type_controller.js\": 5372,\n\t\"./message/misc_ui_controller.js\": 2628,\n\t\"./message/navigation_controller.js\": 2352,\n\t\"./message/resizeable_clip_controller.js\": 8537,\n\t\"./message/save_message_controller.js\": 3917,\n\t\"./message/schedule_controller.js\": 4336,\n\t\"./message/thread_state_controller.js\": 1168,\n\t\"./message/threads_controller.js\": 7395,\n\t\"./message/toggle_form_controller.js\": 3003,\n\t\"./message/tour_controller.js\": 4290,\n\t\"./message/view_controller.js\": 1880,\n\t\"./message_templates_controller.js\": 5844,\n\t\"./mixpanel_controller.js\": 1054,\n\t\"./mobile/mobile_onboarding_controller.js\": 1182,\n\t\"./mobile_app_controller.js\": 2567,\n\t\"./modal_controller.js\": 7654,\n\t\"./onboarding_controller.js\": 933,\n\t\"./paypal_controller.js\": 8081,\n\t\"./plausible_controller.js\": 2835,\n\t\"./popover_controller.js\": 6530,\n\t\"./programs/program_item_creation_controller.js\": 1012,\n\t\"./programs/programs_controller.js\": 4591,\n\t\"./radios_controller.js\": 2606,\n\t\"./reactions_controller.js\": 3303,\n\t\"./rewardful_controller.js\": 5870,\n\t\"./richtext_controller.js\": 6037,\n\t\"./search_controller.js\": 4282,\n\t\"./search_objects_controller.js\": 2755,\n\t\"./select_dynamic_controller.js\": 3476,\n\t\"./sidebar/conversations_controller.js\": 9733,\n\t\"./sidebar/sidebar_controller.js\": 8465,\n\t\"./space_controller.js\": 9307,\n\t\"./space_program_controller.js\": 6918,\n\t\"./stripe_controller.js\": 2254,\n\t\"./subscription/cancel_controller.js\": 6714,\n\t\"./subscription/plans_controller.js\": 1772,\n\t\"./support_widget_controller.js\": 1108,\n\t\"./tabs_controller.js\": 8105,\n\t\"./tags/tag_controller.js\": 5420,\n\t\"./tags/tags_controller.js\": 2616,\n\t\"./tasks/task_controller.js\": 3728,\n\t\"./tasks/task_creation_controller.js\": 5119,\n\t\"./tasks/task_modal_controller.js\": 2338,\n\t\"./text_editor_controller.js\": 8574,\n\t\"./toggle_controller.js\": 5467,\n\t\"./toggle_settings_panel_controller.js\": 2597,\n\t\"./toggle_switch_controller.js\": 823,\n\t\"./troubleshoot_controller.js\": 4115,\n\t\"./video_controller.js\": 3901,\n\t\"./webhooks_controller.js\": 8074,\n\t\"./workflows/config_controller.js\": 9729,\n\t\"./workflows/runs_controller.js\": 9882,\n\t\"controllers/account/slug_controller.js\": 1191,\n\t\"controllers/account_onboarding_controller.js\": 4760,\n\t\"controllers/accounts_controller.js\": 2614,\n\t\"controllers/appointment_types/appointment_types_controller.js\": 5575,\n\t\"controllers/appointment_types/booking_controller.js\": 5054,\n\t\"controllers/appointment_types/booking_page_controller.js\": 3023,\n\t\"controllers/appointment_types/booking_questions_controller.js\": 189,\n\t\"controllers/autosave_controller.js\": 9342,\n\t\"controllers/availability_controller.js\": 8100,\n\t\"controllers/background_images_controller.js\": 3639,\n\t\"controllers/braintree_controller.js\": 8290,\n\t\"controllers/breadcrumbs_controller.js\": 496,\n\t\"controllers/bulk_controller.js\": 8330,\n\t\"controllers/calendar_controller.js\": 2494,\n\t\"controllers/clone_element_controller.js\": 554,\n\t\"controllers/close_controller.js\": 5626,\n\t\"controllers/colors/apply_colors_controller.js\": 5463,\n\t\"controllers/colors/color_picker_controller.js\": 1827,\n\t\"controllers/colors/color_settings_controller.js\": 6387,\n\t\"controllers/colors/style_selection_controller.js\": 9779,\n\t\"controllers/colors/theme_selection_controller.js\": 6234,\n\t\"controllers/commerce/actions_controller.js\": 7158,\n\t\"controllers/commerce/after_purchase_controller.js\": 6187,\n\t\"controllers/commerce/manage_subscription_controller.js\": 5945,\n\t\"controllers/commerce/pricing_controller.js\": 6280,\n\t\"controllers/commerce/product_controller.js\": 3888,\n\t\"controllers/commerce/purchase_flow_controller.js\": 2406,\n\t\"controllers/contact_attributes/contact_attributes_controller.js\": 4656,\n\t\"controllers/conversation/after_post_prompt_controller.js\": 9656,\n\t\"controllers/conversation/compose_email_controller.js\": 9501,\n\t\"controllers/conversation/embed_controller.js\": 9923,\n\t\"controllers/conversation/flow_controller.js\": 7083,\n\t\"controllers/conversation/load_thumbnail_controller.js\": 3320,\n\t\"controllers/conversation/navigation_controller.js\": 5661,\n\t\"controllers/conversation/scroll_messages_controller.js\": 3830,\n\t\"controllers/conversation/settings_controller.js\": 3072,\n\t\"controllers/conversation/share_modal_controller.js\": 3701,\n\t\"controllers/conversation/thumbnail_controller.js\": 611,\n\t\"controllers/copy_controller.js\": 6348,\n\t\"controllers/delete_controller.js\": 375,\n\t\"controllers/detect_link_controller.js\": 9048,\n\t\"controllers/dropdown_controller.js\": 1826,\n\t\"controllers/dropdown_hover_controller.js\": 8762,\n\t\"controllers/dropdown_multi_select_controller.js\": 4908,\n\t\"controllers/dropzone_controller.js\": 6712,\n\t\"controllers/facebook_controller.js\": 3064,\n\t\"controllers/field_option_controller.js\": 5295,\n\t\"controllers/file_uploads_controller.js\": 3169,\n\t\"controllers/forms/builder_controller.js\": 9570,\n\t\"controllers/forms/form_settings_controller.js\": 7737,\n\t\"controllers/forms/form_submission_controller.js\": 8349,\n\t\"controllers/forms/forms_controller.js\": 7688,\n\t\"controllers/google_tag_manager_controller.js\": 8028,\n\t\"controllers/image_upload_controller.js\": 4018,\n\t\"controllers/intake_page/embed_controller.js\": 9543,\n\t\"controllers/intake_page/intake_page_tags_controller.js\": 9574,\n\t\"controllers/intake_page/toggle_reply_controller.js\": 9278,\n\t\"controllers/integrations/slack_channels_controller.js\": 3527,\n\t\"controllers/invitation_template_controller.js\": 1540,\n\t\"controllers/invitations/create_invitation_controller.js\": 3514,\n\t\"controllers/invitations/invitation_onboarding_controller.js\": 8034,\n\t\"controllers/login_controller.js\": 1320,\n\t\"controllers/mentions_controller.js\": 1072,\n\t\"controllers/message/clarityflow_login_instructions_controller.js\": 1135,\n\t\"controllers/message/conversation_link_controller.js\": 7137,\n\t\"controllers/message/creation_controller.js\": 1372,\n\t\"controllers/message/edit_controller.js\": 8733,\n\t\"controllers/message/embed_controller.js\": 1677,\n\t\"controllers/message/embed_media_controller.js\": 9757,\n\t\"controllers/message/error_controller.js\": 47,\n\t\"controllers/message/kickoff_recording_controller.js\": 2372,\n\t\"controllers/message/library_controller.js\": 2630,\n\t\"controllers/message/message_type_controller.js\": 5372,\n\t\"controllers/message/misc_ui_controller.js\": 2628,\n\t\"controllers/message/navigation_controller.js\": 2352,\n\t\"controllers/message/resizeable_clip_controller.js\": 8537,\n\t\"controllers/message/save_message_controller.js\": 3917,\n\t\"controllers/message/schedule_controller.js\": 4336,\n\t\"controllers/message/thread_state_controller.js\": 1168,\n\t\"controllers/message/threads_controller.js\": 7395,\n\t\"controllers/message/toggle_form_controller.js\": 3003,\n\t\"controllers/message/tour_controller.js\": 4290,\n\t\"controllers/message/view_controller.js\": 1880,\n\t\"controllers/message_templates_controller.js\": 5844,\n\t\"controllers/mixpanel_controller.js\": 1054,\n\t\"controllers/mobile/mobile_onboarding_controller.js\": 1182,\n\t\"controllers/mobile_app_controller.js\": 2567,\n\t\"controllers/modal_controller.js\": 7654,\n\t\"controllers/onboarding_controller.js\": 933,\n\t\"controllers/paypal_controller.js\": 8081,\n\t\"controllers/plausible_controller.js\": 2835,\n\t\"controllers/popover_controller.js\": 6530,\n\t\"controllers/programs/program_item_creation_controller.js\": 1012,\n\t\"controllers/programs/programs_controller.js\": 4591,\n\t\"controllers/radios_controller.js\": 2606,\n\t\"controllers/reactions_controller.js\": 3303,\n\t\"controllers/rewardful_controller.js\": 5870,\n\t\"controllers/richtext_controller.js\": 6037,\n\t\"controllers/search_controller.js\": 4282,\n\t\"controllers/search_objects_controller.js\": 2755,\n\t\"controllers/select_dynamic_controller.js\": 3476,\n\t\"controllers/sidebar/conversations_controller.js\": 9733,\n\t\"controllers/sidebar/sidebar_controller.js\": 8465,\n\t\"controllers/space_controller.js\": 9307,\n\t\"controllers/space_program_controller.js\": 6918,\n\t\"controllers/stripe_controller.js\": 2254,\n\t\"controllers/subscription/cancel_controller.js\": 6714,\n\t\"controllers/subscription/plans_controller.js\": 1772,\n\t\"controllers/support_widget_controller.js\": 1108,\n\t\"controllers/tabs_controller.js\": 8105,\n\t\"controllers/tags/tag_controller.js\": 5420,\n\t\"controllers/tags/tags_controller.js\": 2616,\n\t\"controllers/tasks/task_controller.js\": 3728,\n\t\"controllers/tasks/task_creation_controller.js\": 5119,\n\t\"controllers/tasks/task_modal_controller.js\": 2338,\n\t\"controllers/text_editor_controller.js\": 8574,\n\t\"controllers/toggle_controller.js\": 5467,\n\t\"controllers/toggle_settings_panel_controller.js\": 2597,\n\t\"controllers/toggle_switch_controller.js\": 823,\n\t\"controllers/troubleshoot_controller.js\": 4115,\n\t\"controllers/video_controller.js\": 3901,\n\t\"controllers/webhooks_controller.js\": 8074,\n\t\"controllers/workflows/config_controller.js\": 9729,\n\t\"controllers/workflows/runs_controller.js\": 9882\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 7074;","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","import { Controller } from 'stimulus'\n\nvar timer = null;\nexport default class extends Controller {\n\n static targets = [\"input\", \n \"slugResponse\", \n \"submitButton\", \n \"onboardingSlugChanged\", \n \"onboardingSlugUnchanged\",\n \"onboardingSlugCanChange\"]\n static values = {\n responsePresent: Boolean,\n onboarding: Boolean,\n payingSubscription: Boolean\n }\n\n connect() {\n }\n\n fetchResult() {\n if (this.hassubmitButtonTarget !== null) {\n this.submitButtonTarget.classList.add(\"btn-disabled\")\n this.submitButtonTarget.setAttribute(\"disabled\", \"disabled\")\n }\n clearTimeout(timer);\n timer = setTimeout(function() {\n this.getResultAndUpdate(this.submitButtonTarget);\n }.bind(this), 1000)\n }\n\n getResultAndUpdate(button) {\n let accountSlug = this.inputTarget;\n\n var params = new URLSearchParams({\n slug: accountSlug.value, \n onboarding: this.onboardingValue\n })\n\n fetch(`/accounts/${accountId}/slug_validation?${params}`, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(response => response.json())\n .then(data => {\n var values = JSON.parse(data.response);\n var accountSlugContainer = this.element;\n var slugResponseDiv = this.slugResponseTarget;\n\n slugResponseDiv.classList.remove(\"hidden\");\n slugResponseDiv.innerHTML = \"\";\n\n if (values.status === \"error\") {\n slugResponseDiv.classList.remove(\"alert-success\");\n slugResponseDiv.classList.add(\"alert-error\");\n } else {\n slugResponseDiv.classList.add(\"alert-success\");\n slugResponseDiv.classList.remove(\"alert-error\");\n }\n\n if (\"errors\" in values) {\n for (const error of values.errors) {\n var errorItem = document.createElement(\"div\");\n errorItem.setAttribute(\"class\", \"\");\n errorItem.innerHTML = error;\n slugResponseDiv.appendChild(errorItem);\n }\n } else {\n var successMessage = document.createElement(\"div\");\n successMessage.setAttribute(\"class\", \"\");\n successMessage.innerHTML = values.success;\n slugResponseDiv.appendChild(successMessage);\n }\n this.responsePresentValue = true;\n if (button!== null) {\n button.classList.remove(\"btn-disabled\")\n button.removeAttribute(\"disabled\", \"disabled\")\n }\n\n if (this.onboardingValue == true && this.responsePresentValue == true && values.status === \"success\") {\n var url = new URL(window.location.href);\n if ( (this.payingSubscriptionValue == true) || (url.searchParams.get('subscription_success')) ) {\n console.log('yuppppp');\n this.onboardingSlugChangedTarget.classList.add(\"hidden\");\n this.onboardingSlugUnchangedTarget.classList.add(\"hidden\");\n this.onboardingSlugCanChangeTarget.classList.remove(\"hidden\");\n } else {\n this.onboardingSlugChangedTarget.classList.remove(\"hidden\");\n this.onboardingSlugUnchangedTarget.classList.add(\"hidden\");\n this.onboardingSlugCanchangeTarget.classList.add(\"hidden\");\n }\n \n }\n })\n .catch(e => {\n if (button !== null) {\n button.classList.remove(\"btn-disabled\")\n button.removeAttribute(\"disabled\", \"disabled\")\n }\n console.log(e)\n });\n }\n}","import {Controller} from \"stimulus\"\n\nexport default class extends Controller {\n static targets = ['launchAccountOnboardingLink']\n static values = {\n autolaunch: Boolean,\n accountSlug: String\n }\n\n connect() {\n // UPDATE JUNE 2024: Disabling auto-popup of onboarding setup guide.\n // To re-enable, uncomment this code and also uncomment the code in in account_onboardings_helper.rb for autolaunch_account_onboarding?(account)\n\n // // Handle auto launching the modal on page load.\n // if (this.autolaunchValue == true && this.hasLaunchAccountOnboardingLinkTarget) {\n // // On page load, add fade_in param to the link that launches the modal, which will apply a short delay and fade in effect when clicked.\n // this.launchAccountOnboardingLinkTarget.href = this.launchAccountOnboardingLinkTarget.href + '&fade_in=true';\n //\n // // click the link to launch the modal.\n // this.launchAccountOnboardingLinkTarget.click();\n // }\n\n }\n\n\n // These actions are related to the setup guide modal, which has multiple tabs.\n\n toggleTab(event) {\n this.stopVideos();\n }\n\n toggleNext(event) {\n var current_tab_position = event.target.closest(\".btn\").dataset.currentTabPosition;\n var next_tab_position = parseInt(current_tab_position) + 1;\n var next_tab = document.querySelector('#account-onboarding-modal .tabs-list .tab[data-tab-position=\"' + next_tab_position + '\"]');\n if (next_tab) {\n next_tab.click();\n }\n }\n\n togglePrev(event) {\n var current_tab_position = event.target.closest(\".btn\").dataset.currentTabPosition;\n var prev_tab_position = parseInt(current_tab_position) - 1;\n var prev_tab = document.querySelector('#account-onboarding-modal .tabs-list .tab[data-tab-position=\"' + prev_tab_position + '\"]');\n if (prev_tab) {\n prev_tab.click();\n }\n }\n\n stopVideos() {\n var videos = document.querySelectorAll('iframe, video');\n Array.prototype.forEach.call(videos, function (video) {\n if (video.tagName.toLowerCase() === 'video') {\n video.pause();\n } else {\n var src = video.src;\n video.src = ''; // Set src to empty string to force iframe to reload\n video.src = src + (src.includes('?') ? '&' : '?') + 't=' + new Date().getTime();\n }\n });\n }\n\n escRemoveMinimize(event) {\n if (event.key == \"Escape\") {\n var shown_modal = document.querySelector(\".modal.shown\");\n if (shown_modal) {\n shown_modal.remove();\n this.minimize();\n }\n }\n }\n\n clickOutsideRemoveMinimize(event) {\n var modal_container = event.target.closest(\".modal\");\n var modal_box = modal_container.querySelector(\".modal-box\");\n\n if (modal_box.contains(event.target) === false) {\n modal_container.remove();\n this.minimize();\n }\n }\n\n minimize() {\n var tip_relaunch_onboarding = document.querySelector('.relaunch-onboarding-widget #tip-relaunch-onboarding');\n\n // get localstorage value for hide_tip_relaunch_onboarding\n var hide_tip_relaunch_onboarding = localStorage.getItem('hide_tip_relaunch_onboarding');\n // if hide_tip_relaunch_onboarding is not true, then show the tip\n if (tip_relaunch_onboarding && hide_tip_relaunch_onboarding != 'true') {\n tip_relaunch_onboarding.classList.remove('hidden', 'opacity-0');\n tip_relaunch_onboarding.classList.add(\"translate-x-8\", \"opacity-100\");\n }\n\n // insert a link on the page and then click it to launch the modal\n var link = document.createElement('a');\n var account_slug = this.accountSlugValue;\n link.href = `/${account_slug}/minimize_account_onboarding`;\n link.classList.add('hidden');\n link.setAttribute('data-remote', 'true');\n document.body.appendChild(link);\n link.click();\n link.remove();\n }\n\n hideTipRelaunchOnboarding(event) {\n var tip_element = event.target.closest(\"#tip-relaunch-onboarding\");\n tip_element.remove();\n localStorage.setItem('hide_tip_relaunch_onboarding', 'true');\n document.querySelector('.close-relaunch-onboarding').classList.remove('hidden');\n }\n\n}","// Action Cable provides the framework to deal with WebSockets in Rails.\n// You can generate new channels where WebSocket features live using the `rails generate channel` command.\n\nimport { createConsumer } from \"@rails/actioncable\"\n\nexport default createConsumer()\n","// Reconnect ActionCable after switching accounts\n\nimport { Controller } from \"stimulus\"\nimport consumer from \"../channels/consumer\"\n\nexport default class extends Controller {\n reconnect(event) {\n if (consumer.connection.isActive()) {\n consumer.connection.reopen()\n }\n }\n}\n","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\n \"teamMembersAssignment\",\n \"teamMembersToggleSwitch\",\n \"appointmentTypeRedirectType\",\n \"appointmentTypeConfirmationContent\",\n \"appointmentTypeLocationPreference\",\n \"appointmentTypeLocation\",\n \"appointmentOfferSelectField\",\n ];\n\n toggleTeamMembersAssignment() {\n if (this.togglesTeamMembersCount() >= 2) {\n this.teamMembersAssignmentTarget.classList.remove(\"hidden\");\n } else {\n this.teamMembersAssignmentTarget.classList.add(\"hidden\");\n }\n }\n\n togglesTeamMembersCount() {\n this.checkedCount = 0;\n this.teamMembersToggleSwitchTargets.forEach((toggle) => {\n if (toggle.classList.contains(\"active\")) {\n this.checkedCount++;\n }\n });\n\n return this.checkedCount;\n }\n\n displayConfirmationContent() {\n if (this.appointmentTypeRedirectTypeTarget.value === \"confirmation\") {\n this.appointmentTypeConfirmationContentTarget.classList.remove(\"hidden\");\n } else {\n this.appointmentTypeConfirmationContentTarget.classList.add(\"hidden\");\n }\n var conversationContent = document.querySelector(\n \".appointment-type-conversation-content\"\n );\n if (this.appointmentTypeRedirectTypeTarget.value === \"conversation\") {\n if (conversationContent) conversationContent.classList.remove(\"hidden\");\n } else {\n if (conversationContent) conversationContent.classList.add(\"hidden\");\n }\n\n var customUrlField = document.querySelector(\n \".appointment-type-custom-url-field\"\n );\n if (this.appointmentTypeRedirectTypeTarget.value === \"custom\") {\n if (customUrlField) customUrlField.classList.remove(\"hidden\");\n } else {\n if (customUrlField) customUrlField.classList.add(\"hidden\");\n }\n }\n\n displayLocation() {\n if (this.appointmentTypeLocationPreferenceTarget.value == \"custom\") {\n this.appointmentTypeLocationTarget.classList.remove(\"hidden\");\n } else {\n this.appointmentTypeLocationTarget.classList.add(\"hidden\");\n }\n }\n\n refreshBookingContent(event) {\n var selectATimeButton = event.target.closest(\".select-a-time-button\");\n var appointmentTypeId;\n if (selectATimeButton) {\n appointmentTypeId = selectATimeButton.dataset.appointmentTypeId;\n var canBookAppointment = selectATimeButton.dataset.canBookAppointment;\n var messageId = selectATimeButton.dataset.messageId;\n var viewerEmail = selectATimeButton.dataset.viewerEmail;\n } else {\n // it must be a select.appointment-offer-select-field\n appointmentTypeId = event.target.value;\n }\n var appointmentOfferBlock =\n event.target.closest(\".message-block.appointment-offer-block\") ||\n event.target.closest(\".message-block.edit-appointment-offer-block\");\n if (appointmentOfferBlock)\n var messageBookingContentPartial = appointmentOfferBlock.querySelector(\n \".message-booking-content-partial\"\n );\n if (appointmentTypeId) {\n if (messageBookingContentPartial) {\n messageBookingContentPartial.innerHTML = \"\";\n const spinner = document.createElement(\"i\");\n spinner.className =\n \"loading-icon fa-duotone fa-spinner-third animate-spin fa-3x inline-flex py-12\";\n messageBookingContentPartial.innerHTML = spinner.outerHTML;\n messageBookingContentPartial.classList.add(\n \"appointment-type-\" + appointmentTypeId\n );\n }\n Rails.ajax({\n type: \"get\",\n url: `/appointments/types/${appointmentTypeId}/refresh_booking_content?can_book=${canBookAppointment}&message_id=${messageId}&viewer=${viewerEmail}`,\n });\n } else {\n if (messageBookingContentPartial) {\n messageBookingContentPartial.innerHTML = \"\";\n }\n }\n }\n\n setAppointmentTypeId() {\n if (this.hasAppointmentOfferSelectFieldTarget) {\n var appointmentTypeSelect = this.appointmentOfferSelectFieldTarget;\n var appointmentTypeId = appointmentTypeSelect.dataset.appointmentTypeId;\n if (appointmentTypeSelect.value) {\n appointmentTypeSelect.value = null;\n } else {\n appointmentTypeSelect.value = appointmentTypeId;\n }\n var optionToHide =\n appointmentTypeSelect.querySelector(`option[value='']`);\n optionToHide.hidden = true;\n }\n }\n}\n","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n static targets = [\n \"selectedTimeInput\",\n \"selectTimeContainer\",\n \"selectedTimeContainer\",\n \"selectedDate\",\n \"selectedStartTime\",\n \"selectedEndTime\",\n \"selectedTimezone\",\n \"bookingQuestions\",\n \"submitButton\",\n \"answerField\",\n \"startDatetimeField\",\n \"endDatetimeField\",\n \"messageIdField\",\n \"appointmentChangeReasonField\"\n ]\n\n selectTime(event) {\n var selectable_time = event.target.closest(\".selectable-time\");\n var availability_block_id = selectable_time.dataset.availabilityBlockId;\n var date = selectable_time.dataset.date;\n var start_time = selectable_time.dataset.startTime;\n var end_time = selectable_time.dataset.endTime;\n var timezone = selectable_time.dataset.timezone;\n var actual_start_datetime = selectable_time.dataset.actualStartDatetime;\n var actual_end_datetime = selectable_time.dataset.actualEndDatetime;\n var message_id = selectable_time.dataset.messageId;\n\n this.selectedTimeInputTarget.value = availability_block_id;\n\n this.selectedDateTarget.innerHTML = date;\n this.selectedStartTimeTarget.innerHTML = start_time;\n this.selectedEndTimeTarget.innerHTML = end_time;\n this.selectedTimezoneTarget.innerHTML = timezone;\n\n this.startDatetimeFieldTarget.value = actual_start_datetime;\n this.endDatetimeFieldTarget.value = actual_end_datetime;\n this.messageIdFieldTarget.value = message_id;\n\n this.selectTimeContainerTarget.classList.add(\"hidden\");\n if (this.bookingQuestionsTarget.dataset.bookingQuestion === \"true\") {\n this.bookingQuestionsTarget.classList.remove(\"hidden\");\n // Find the first input field within the booking questions and focus it\n const firstInput = this.bookingQuestionsTarget.querySelector('input.booking-question');\n if (firstInput) {\n firstInput.focus();\n }\n } else if(this.bookingQuestionsTarget.dataset.updateAppointment === \"true\") {\n this.appointmentChangeReasonFieldTarget.classList.remove('hidden')\n } else{\n this.selectedTimeContainerTarget.classList.remove(\"hidden\");\n }\n }\n\n\n displaySubmitButton(){\n const requiredFields = this.answerFieldTargets.filter(field => field.getAttribute('data-required') === 'true');\n const allRequiredFieldsValid = requiredFields.every(field => field.value.trim() !== '');\n this.submitButtonTarget.disabled = !allRequiredFieldsValid;\n this.submitButtonTarget.classList.toggle('btn-disabled', !allRequiredFieldsValid);\n }\n\n displaySelectTimeContainer(event) {\n event.preventDefault()\n const update_appointment = event.target.dataset.updateAppointment === \"true\";\n console.log(' update appointment: ', update_appointment)\n if (update_appointment) {\n this.appointmentChangeReasonFieldTarget.classList.remove(\"hidden\");\n this.bookingQuestionsTarget.classList.add(\"hidden\");\n } else {\n this.selectedTimeContainerTarget.classList.remove(\"hidden\");\n this.bookingQuestionsTarget.classList.add(\"hidden\");\n this.appointmentChangeReasonFieldTarget.classList.add(\"hidden\");\n }\n }\n}\n","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\n \"bookingPageUiContainer\"\n ]\n\n showBookingUi() {\n var booking_ui = this.bookingPageUiContainerTarget;\n booking_ui.scrollIntoView({behavior: `smooth`, block: 'start'});\n }\n}","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n static targets = [\n \"question\",\n \"questionList\"\n ]\n\n addQuestion(){\n\n }\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = ['form', 'status', 'loading', 'saved', 'error', 'focusMe']\n static values = { \n statusOnLoad: String\n }\n\n connect() {\n this.timeout = null\n this.duration = this.data.get('duration') || 1000\n\n if (this.hasStatusOnLoadValue && this.hasStatusTarget) {\n this.statusTarget.classList.remove(\"hidden\");\n if (this.statusOnLoadValue == \"success\") {\n this.savedTarget.classList.remove(\"hidden\");\n this.timeout = setTimeout(() => {\n this.savedTarget.classList.add(\"hidden\");\n }, 2000)\n } else if (this.statusOnLoadValue == \"error\") {\n this.errorTarget.classList.remove(\"hidden\");\n }\n }\n }\n\n submit(event) {\n if(this.timeout) {\n clearTimeout(this.timeout);\n }\n\n if (event.key !== \"Tab\") { // don't trigger if the event was a key press of the 'Tab' key\n\n // If multiple elements within the same form are to be autosaved, then each autosaving field must set 'id' on it's associated '.autosave-icon-container'\n var container = this.element.querySelector(\".autosave-icon-container#\"+event.target.dataset.autosaveid);\n if (!container) {\n // If an .autosave-icon-container isn't defined with an 'id', then find the first '.autosave-icon-container'\n var container = this.element.querySelector(\".autosave-icon-container\");\n }\n\n if (container) {\n var loading_icon = container.querySelector(\".loading-icon\");\n var saved_icon = container.querySelector(\".saved-icon\");\n var error_icon = container.querySelector(\".error-icon\");\n\n // Show this icon container and mark it as the one that's changing\n container.classList.remove(\"hidden\");\n container.classList.add(\"changed\");\n\n // Show the loading state\n loading_icon.classList.remove(\"hidden\");\n saved_icon.classList.add(\"hidden\");\n error_icon.classList.add(\"hidden\");\n }\n this.timeout = setTimeout(() => {\n Rails.fire(this.formTarget, 'submit')\n }, this.duration)\n }\n }\n\n success() {\n container = this.element.querySelector(\".autosave-icon-container.changed\");\n if (!container) {\n // If an .autosave-icon-container.changed isn't found, then find the first '.autosave-icon-container'\n var container = this.element.querySelector(\".autosave-icon-container\");\n }\n \n if (container) {\n var loading_icon = container.querySelector(\".loading-icon\");\n var saved_icon = container.querySelector(\".saved-icon\");\n var error_icon = container.querySelector(\".error-icon\");\n container.classList.remove(\"changed\");\n\n // Show the 'saved' checkmark icon\n loading_icon.classList.add(\"hidden\");\n saved_icon.classList.remove(\"hidden\");\n\n // Hide the checkmark icon after 2 seconds\n this.timeout = setTimeout(() => {\n saved_icon.classList.add(\"hidden\");\n }, 2000)\n }\n }\n\n error(event) {\n console.log('error');\n console.log(event);\n if (this.hasStatusTarget && this.data.get('for') === 'contact') {\n console.log(this.element.querySelectorAll(\".autosave-icon-container\"))\n container = this.element.querySelector(\".autosave-icon-container.changed\");\n if (!container) {\n // If an .autosave-icon-container.changed isn't found, then find the first '.autosave-icon-container'\n var container = this.element.querySelector(\".autosave-icon-container\");\n }\n var loading_icon = container.querySelector(\".loading-icon\");\n var saved_icon = container.querySelector(\".saved-icon\");\n var error_icon = container.querySelector(\".error-icon\");\n\n container.classList.remove(\"changed\");\n\n // Show the 'error' icon\n loading_icon.classList.add(\"hidden\");\n saved_icon.classList.add(\"hidden\");\n error_icon.classList.remove(\"hidden\");\n } else if (this.hasStatusTarget) {\n this.loadingTarget.classList.add(\"hidden\");\n this.errorTarget.classList.remove(\"hidden\");\n this.savedTarget.classList.add(\"hidden\");\n }\n }\n\n listenBackspace(event) {\n const key = event.key;\n if (key === \"Backspace\" && this.timeout) {\n clearTimeout(this.timeout);\n }\n }\n}","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n static targets = [\n\n ]\n\n connect() {\n\n }\n\n reset_availability_form(event){\n var form = document.querySelector('.new-availability-block-form')\n var addTimeBlockButton = document.querySelector('.add-time-block-button')\n var availabilityEditBlock = document.querySelector('.availability-block-edit-block-' + event.target.dataset.availabilityBlockId)\n var availabilityBlock = document.querySelector('.availability-block-content-' + event.target.dataset.availabilityBlockId)\n if (availabilityEditBlock) availabilityEditBlock.innerHTML = ''\n if (availabilityBlock) availabilityBlock.classList.remove('hidden')\n form.innerHTML = ''\n addTimeBlockButton.classList.remove('hidden')\n }\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\n \"selectableImage\",\n \"clearSelectionLink\"\n ]\n\n static values = {\n }\n\n connect() {\n var currently_selected_image = this.element.querySelector(\".selectable-image.selected\");\n if (currently_selected_image) {\n this.clearSelectionLinkTarget.classList.remove(\"hidden\");\n }\n }\n\n selectImage(event) {\n var currently_selected_image = this.element.querySelector(\".selectable-image.selected\");\n var clicked_image = event.target.closest(\".selectable-image\");\n if (currently_selected_image) {\n currently_selected_image.classList.remove(\"selected\");\n }\n\n clicked_image.classList.add(\"selected\");\n document.querySelector(\"#bgimage\").setAttribute('crossOrigin', 'Anonymous');\n var controlsBtn = document.querySelector(\"a[data-message--creation-target='backgroundImage']\");\n if (currently_selected_image === clicked_image) {\n this.clearSelection();\n if (controlsBtn) {\n controlsBtn.classList.remove(\"active\");\n }\n }else {\n document.querySelector(\"#bgimage\").src = clicked_image.querySelector(\"div:nth-child(2)\").style.backgroundImage.slice(5, -2)+ \"?not-from-cache-please\";\n sessionStorage.setItem('background_image_id', clicked_image.dataset.backgroundImageId);\n this.clearSelectionLinkTarget.classList.remove(\"hidden\");\n if (controlsBtn) {\n controlsBtn.classList.add(\"active\");\n }\n }\n }\n\n clearSelection() {\n var clicked_image = document.querySelector(\".selected\");\n document.querySelector(\"#bgimage\").src = document.querySelector(\"#nobackground\").src;\n clicked_image.classList.remove(\"selected\");\n sessionStorage.setItem('background_image_id', document.querySelector(\"#nobackground\").dataset.imageId);\n this.clearSelectionLinkTarget.classList.add(\"hidden\");\n }\n\n account_default(){\n setTimeout(()=> {\n var params = {\n background_image_id: (this.element.classList.contains(\"active\") === true) ? this.element.dataset.backgroundImageId : \" \"\n };\n\n fetch(`/accounts/${accountId}/update_image`, {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params),\n credentials: \"same-origin\"\n }).then(response => response.text())\n .then(data => {\n setTimeout(() =>{\n document.querySelector(\"#background-images-list\").innerHTML = data;\n }, 300);\n })\n\n }, 200);\n }\n\n account_all_default(){\n var user_id, account_id;\n setTimeout(()=> {\n if(this.element.classList.contains(\"active\") === true)\n { user_id = \"\"\n account_id = accountId\n } else {\n user_id = userId\n account_id = \"\"\n }\n\n var params = {\n user_id: user_id,\n account_id: account_id\n };\n fetch(`/background/${this.element.dataset.backgroundImageId}/update_image`, {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params),\n credentials: \"same-origin\"\n }).then(response => response.text())\n .then(data => {\n document.querySelector(\"#background-images-list\").innerHTML = data;\n })\n\n }, 200);\n\n }\n\n user_default(){\n setTimeout(()=> {\n var params = {\n background_image_id: (this.element.classList.contains(\"active\") === true) ? this.element.dataset.backgroundImageId : \" \"\n };\n\n fetch(`/users/${userId}/update_image`, {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(params),\n credentials: \"same-origin\"\n }).then(response => response.text())\n .then(data => {\n setTimeout(() =>{\n document.querySelector(\"#background-images-list\").innerHTML = data;\n }, 200);\n })\n\n }, 200);\n }\n\n\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"dropin\", \"form\" ]\n\n connect() {\n braintree.dropin.create({\n authorization: this.data.get(\"clientToken\"),\n container: this.dropinTarget,\n //threeDSecure: true,\n paypal: {\n flow: \"vault\"\n },\n // Uncomment this to only display PayPal in the Drop-in UI\n //paymentOptionPriority: ['paypal']\n },\n this.clientCreated.bind(this)\n )\n }\n\n clientCreated(error, instance) {\n if (error) {\n console.error(\"Error setting up Braintree dropin:\", error)\n return\n }\n\n this.instance = instance\n }\n\n submit(event) {\n event.preventDefault()\n\n this.instance.requestPaymentMethod(this.paymentMethod.bind(this))\n }\n\n paymentMethod(error, payload) {\n if (error) {\n console.error(\"Error with payment method:\", error)\n return\n }\n\n this.addHiddenField(\"account[processor]\", \"braintree\")\n this.addHiddenField(\"account[card_token]\", payload.nonce)\n\n Rails.fire(this.formTarget, \"submit\")\n }\n\n addHiddenField(name, value) {\n let hiddenInput = document.createElement(\"input\")\n hiddenInput.setAttribute(\"type\", \"hidden\")\n hiddenInput.setAttribute(\"name\", name)\n hiddenInput.setAttribute(\"value\", value)\n this.formTarget.appendChild(hiddenInput)\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['truncateToggle',\n 'truncatedMenu',\n 'truncatedMenuContent',\n 'truncatedLink'\n ];\n\n static values = {\n truncateAtSize: String,\n truncate: Boolean\n }\n\n connect() {\n if (this.hasTruncatedMenuTarget) {\n // Elements\n var truncateMenu = this.truncatedMenuTarget;\n var truncateMenuContent = this.truncatedMenuContentTarget;\n var truncateMenuLinks = this.truncatedLinkTargets;\n var truncateToggle = this.truncateToggleTarget;\n\n // Classes as arrays\n var truncatedMenuClasses = this.element.dataset.truncatedMenuClasses.split(' ');\n var nonTruncatedMenuClasses = this.element.dataset.nonTruncatedMenuClasses.split(' '); \n var truncatedMenuContentClasses = this.element.dataset.truncatedMenuContentClasses.split(' ');\n var nonTruncatedMenuContentClasses = this.element.dataset.nonTruncatedMenuContentClasses.split(' ');\n var truncatedLinkClasses = this.element.dataset.truncatedLinkClasses.split(' ');\n var nonTruncatedLinkClasses = this.element.dataset.nonTruncatedLinkClasses.split(' ');\n\n // Set the menu to truncated state by default\n truncateMenu.classList.add(...truncatedMenuClasses);\n truncateMenuContent.classList.add(...truncatedMenuContentClasses);\n \n for (let link of truncateMenuLinks) {\n link.classList.add(...truncatedLinkClasses);\n }\n\n var truncateAtWidth = this.truncateAtSizeValue == 'xl' ? 1280 : 1536;\n\n if (window.innerWidth > truncateAtWidth) {\n // Change menu to not truncated state\n this.truncateValue = false;\n truncateToggle.classList.add(\"hidden\");\n truncateToggle.classList.remove(\"flex\");\n truncateMenu.classList.remove(...truncatedMenuClasses);\n truncateMenu.classList.add(...nonTruncatedMenuClasses);\n truncateMenuContent.classList.remove(...truncatedMenuContentClasses);\n truncateMenuContent.classList.add(...nonTruncatedMenuContentClasses);\n for (let link of truncateMenuLinks ) {\n link.classList.remove(...truncatedLinkClasses);\n link.classList.add(...nonTruncatedLinkClasses);\n }\n } else {\n // Change menu to truncated state\n this.truncateValue = true;\n truncateToggle.classList.add(\"flex\");\n truncateToggle.classList.remove(\"hidden\");\n truncateMenu.classList.add(...truncatedMenuClasses);\n truncateMenu.classList.remove(...nonTruncatedMenuClasses);\n truncateMenuContent.classList.add(...truncatedMenuContentClasses);\n truncateMenuContent.classList.remove(...nonTruncatedMenuContentClasses);\n for (let link of truncateMenuLinks ) {\n link.classList.add(...truncatedLinkClasses);\n link.classList.remove(...nonTruncatedLinkClasses);\n }\n }\n }\n }\n\n open(event) {\n this.truncatedMenuTarget.classList.remove('hidden');\n }\n\n close(event) {\n if (this.truncateValue == true) {\n this.truncatedMenuTarget.classList.add('hidden');\n }\n }\n\n}","// The BulkController can be used for adding bulk operations to your index views.\n// You can add a Select All checkbox and checkboxes for each record and easily grab\n// the selected records.\n//\n// Usage:\n//\n// import BulkController from \"controllers/bulk_controller\"\n//\n// export default class extends BulkController {\n// }\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\tstatic targets = [ \"checkbox\", \"selectAll\" ]\n\n // Toggles all checkboxes based upon what is currently checked\n toggleSelectAll(event) {\n (!this.allCheckboxesSelected) ? this.selectAll() : this.unselectAll()\n }\n\n // Selects all checkboxes\n selectAll() {\n this.selectAllTarget.checked = true\n this.selectAllTarget.indeterminate = false\n this.unselected.forEach(target => target.checked = true)\n }\n\n // Unselects all checkboxes\n unselectAll() {\n this.selectAllTarget.checked = false\n this.selectAllTarget.indeterminate = false\n this.selected.forEach(target => target.checked = false)\n }\n\n // Keep track of SelectAll state based upon how many checkboxes are selected\n change(event) {\n if (this.noCheckboxesSelected) {\n this.selectAllTarget.checked = false\n this.selectAllTarget.indeterminate = false\n\n } else if (this.allCheckboxesSelected) {\n this.selectAllTarget.checked = true\n this.selectAllTarget.indeterminate = false\n\n } else {\n this.selectAllTarget.indeterminate = true\n }\n }\n\n // Returns true if Select All checkbox is checked\n get selectedAll() {\n return this.selectAllTarget.checked\n }\n\n // Returns all selected checkboxes\n get selected() {\n return this.checkboxTargets.filter(target => target.checked)\n }\n\n // Returns all unselected checkboxes\n get unselected() {\n return this.checkboxTargets.filter(target => !target.checked)\n }\n\n // Returns data-id attributes for all selected checkboxes\n get selectedIds() {\n return this.selected.map(target => target.dataset.id)\n }\n\n // Returns true if all checkboxes are checked\n get allCheckboxesSelected() {\n return this.checkboxTargets.every(target => target.checked)\n }\n\n // Returns true if no checkboxes are checked\n get noCheckboxesSelected() {\n return this.checkboxTargets.every(target => !target.checked)\n }\n}\n","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n static targets = [\n \"googleCalendarIdField\",\n \"calendarNameField\"\n ]\n\n setCalendarName() {\n console.log('set_calendar_name')\n var selectedOption = this.googleCalendarIdFieldTarget.options[this.googleCalendarIdFieldTarget.selectedIndex];\n this.calendarNameFieldTarget.value = selectedOption.text;\n }\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"cloneButton\", \"clonesContainer\", \"elementToClone\", \"pluralizeMe\"]\n\n static values = {\n }\n\n connect() {\n }\n\n cloneElement(){\n var elementToClone = this.elementToCloneTargets[0];\n var clonedElement = elementToClone.cloneNode(true);\n var insertedElement = this.clonesContainerTarget.insertAdjacentElement('beforeend', clonedElement);\n\n // If the cloned element contains an input, focus the cloned input\n var input = insertedElement.querySelector('input');\n if (input) {\n input.value = '';\n input.focus();\n }\n\n // If we need to pluralize a label's text when element is cloned\n var pluralizeElement = this.pluralizeMeTarget;\n if (pluralizeElement) {\n var text = pluralizeElement.innerText;\n if (!text.endsWith('s')) {\n pluralizeElement.innerHTML = text+\"s\";\n }\n }\n }\n \n}\n\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['removeMe'];\n\n static values = { \n autoclose: Boolean\n }\n\n connect() {\n if (this.autocloseValue == true) {\n this.timeout = setTimeout(() => {\n this.removeMeTarget.remove();\n }, 2000)\n }\n }\n\n close() {\n this.removeMeTarget.remove();\n }\n}","// This handles applying the colors (the account's or the default colors) to the page on every page load.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = []\n\n static values = { \n accountId: Number,\n accountColorsVersion: Number,\n respondent: Boolean\n }\n\n connect() {\n let account_id = this.accountIdValue;\n let account_colors_version = this.accountColorsVersionValue;\n let storedColorsString;\n let storedColorsVersion;\n let defaultColors;\n let respondent = this.respondentValue;\n\n if (account_id) {\n // We're viewing a view that is associated with an account\n\n storedColorsString = localStorage.getItem(`colors-${account_id}`);\n storedColorsVersion = localStorage.getItem(`colors-${account_id}-version`);\n\n if (storedColorsVersion) {\n // The user has visited this account before \n // and that account has set their colors \n // and those colors (and version) have been stored to this user's localstorage (but we don't yet know if this is the latest version of the account's colors)\n\n if (account_colors_version && account_colors_version == storedColorsVersion) {\n // The account colors version matches the stored colors version\n\n if (storedColorsString) {\n // If colors are still in this user's localstorage... \n\n // Apply the colors that are currently in localstorage\n let colors_json = JSON.parse(storedColorsString);\n this.setCss(colors_json);\n\n } else {\n // The colors were somehow removed from localstorage\n\n // Fetch and apply this account's colors\n // This will also update localstorage values to match account's current values\n this.fetchAndApplyAccountColors(account_id);\n }\n\n } else {\n // The account colors version doesn't match the version in localstorage\n\n // Fetch and apply this account's colors\n // This will also update localstorage values to match account's current values\n this.fetchAndApplyAccountColors(account_id);\n }\n\n } else {\n // There is no version set in this user's localstorage for this account\n // That could mean this account has never set its colors (that would mean it's still using default colors)\n // Or that could mean the account has set its colors but this user has not seen them yet.\n\n if (account_colors_version) {\n // This account has saved at least 1 version of its colors to the database\n // But this user has not yet seen the accounts' saved colors\n\n // Fetch and apply this account's colors\n // This will also update localstorage values to match account's current values\n this.fetchAndApplyAccountColors(account_id);\n\n } else {\n // This account has not yet saved its colors (it's still using default colors)\n\n if (storedColorsString) {\n // The user has colors saved in localstorage for this account (likely the default colors, which were stored on this user's last visit)\n\n // Apply the colors that are currently in localstorage\n let colors_json = JSON.parse(storedColorsString);\n this.setCss(colors_json);\n\n } else {\n // The user has no localstorage records for this account\n\n // Apply the Clarityflow default colors\n defaultColors = this.getDefaultColors();\n this.setCss(defaultColors);\n\n // Store the default colors in localStorage\n this.setAccountLocalStorage(defaultColors);\n }\n\n }\n }\n\n } else {\n // We're viewing a non-account-specific view (like a login view or user profile view etc.)\n // The user is now on app.clarityflow.com (or a custom domain)\n\n if (respondent) {\n // User is a respondent\n\n // Check if the url param 'brand_id' is present in the url\n let urlParams = new URLSearchParams(window.location.search);\n let brand_id = urlParams.get('brand_id');\n let lastViewedAccountColors = localStorage.getItem('last-viewed-account-colors');\n\n if (brand_id) {\n // brand_id URL param is present\n\n // the account_id is hidden in the middle of the brand_id string. Parse it and get the substring that is after '4123' and before '61424'\n let account_id = brand_id.substring(4, brand_id.length - 5);\n \n // Fetch the colors from the account_id, and set the 2nd value to true to indicate it's a respondent on a non-account view\n this.fetchAndApplyAccountColors(account_id, true);\n\n } else {\n if (lastViewedAccountColors) {\n // Apply that account's colors\n let colors_json = JSON.parse(lastViewedAccountColors);\n this.setCss(colors_json);\n\n } else {\n // Apply the Clarityflow default colors\n defaultColors = this.getDefaultColors();\n this.setCss(defaultColors);\n }\n }\n\n } else {\n // User is not a respondent\n\n // Apply the Clarityflow default colors\n defaultColors = this.getDefaultColors();\n this.setCss(defaultColors);\n }\n }\n }\n\n fetchAndApplyAccountColors(account_id, respondent=false) {\n fetch(`/accounts/${account_id}/colors.json`) \n .then(response => {\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n return response.json();\n })\n .then(colors_json => {\n // if colors_json is returned from this account's colors column in the database...\n if (colors_json) { // This account has custom colors saved\n \n // Apply this account's colors\n this.setCss(colors_json);\n\n if (respondent) {\n // user is a respondent viewing a non-account view, but was sent here after viewing an account view\n // so we need to store that account's colors into localstorage so that they can be applied when viewing home screen and other non-account views\n localStorage.setItem('last-viewed-account-colors', JSON.stringify(colors_json));\n } else {\n // Store the fetched colors for this account in localStorage\n // Also store this account's colors version\n this.setAccountLocalStorage(colors_json);\n }\n\n } else { // this account has no custom colors saved\n // Set the CSS variables using Clarityflow's default colors\n let defaultColors = this.getDefaultColors();\n this.setCss(defaultColors);\n\n if (!respondent) {\n // Store the default colors in localStorage\n this.setAccountLocalStorage(defaultColors);\n }\n }\n })\n .catch(error => {\n\n // Set the CSS variables using Clarityflow's default colors, then log the error\n let defaultColors = this.getDefaultColors();\n this.setCss(defaultColors);\n\n if (!respondent) {\n // Store the default colors in localStorage\n this.setAccountLocalStorage(defaultColors);\n }\n\n console.error('There was a problem fetching the colors:', error);\n });\n }\n\n setCss(colors_json) {\n\n // Create a style element, which will be filled...\n let style = document.createElement('style');\n let root = document.documentElement;\n\n // Loop through colors_json for each color. We match the color_id key value to the CSS variable name like this: --${color_id}\n for (let color of colors_json) {\n let color_id = color.color_id;\n let rgb = color.rgb\n \n root.style.setProperty(`--${color_id}`, rgb);\n this.setStyle(style, 'background', color_id, rgb);\n this.setStyle(style, 'border', color_id, rgb);\n this.setStyle(style, 'text', color_id, rgb);\n }\n\n // Insert the style element at the bottom of the head\n document.head.appendChild(style);\n }\n\n setStyle(style_tag, style_type, color_id, rgb) {\n let style;\n\n if (style_type == \"background\") {\n style = `.bg-${color_id}, .hover-bg-${color_id}:hover, .group:hover .group-hover-bg-${color_id} { background-color: rgb(${rgb} / var(--tw-bg-opacity)); }`;\n } else if (style_type == \"border\") {\n style = `.border-${color_id}, .hover-border-${color_id}:hover, .group:hover .group-hover-border-${color_id} { border-color: rgb(${rgb} / var(--tw-border-opacity)); }`;\n } else if (style_type == \"text\") {\n style = `.text-${color_id}, .hover-text-${color_id}:hover, .group:hover .group-hover-text-${color_id} { color: rgb(${rgb} / var(--tw-text-opacity)); }`;\n }\n\n style_tag.insertAdjacentHTML(\"beforeend\", style)\n }\n\n setAccountLocalStorage(colors_json) {\n let account_id = this.accountIdValue;\n let colors_version = this.accountColorsVersionValue;\n localStorage.setItem(`colors-${account_id}`, JSON.stringify(colors_json));\n if (colors_version) {\n localStorage.setItem(`colors-${account_id}-version`, colors_version);\n }\n }\n\n getDefaultColors() {\n // Find the meta tag by its name\n let metaTag = document.querySelector('meta[name=\"default-colors\"]');\n\n // Get the content of the meta tag\n let content = metaTag.getAttribute('content');\n\n // Parse the content as JSON\n let colorArray = JSON.parse(content);\n\n return colorArray;\n }\n\n}","// This handles a single color picker field and 2-way syncing the colorpicker with it's accompanying hex code text input.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = [\"rgbField\", \"hexField\", \"colorPickerField\"]\n\n static values = { \n accountId: Number,\n hex: String,\n rgb: String\n }\n\n connect() {\n\n }\n\n updateColor(event) {\n var rgb_field = this.rgbFieldTarget;\n var hex_field = this.hexFieldTarget;\n var colorpicker_field = this.colorPickerFieldTarget;\n let new_hex_value;\n let new_rgb_value;\n\n // Check if input was generated by an external event (i.e. user selecting a style from the style selector, which updates the values on the associated color pickers)\n var inputGenerated = colorpicker_field.getAttribute('data-input-generated') === 'true';\n\n // if the colorpicker field was clicked\n if (event.target == colorpicker_field) {\n var colorpicker_value = colorpicker_field.value;\n\n // Strip the colorpicker_value of # because we must save the hex field value without a #\n if (colorpicker_value[0] == \"#\") {\n colorpicker_value = colorpicker_value.substring(1);\n }\n\n new_hex_value = colorpicker_value\n new_rgb_value = this.hexToRGB(new_hex_value);\n\n // Update the hex field with the colorpicker value\n hex_field.value = new_hex_value;\n\n // Update the rgb field with the colorpicker value\n rgb_field.value = new_rgb_value;\n\n } else { // the hex field was clicked\n var hex_field_value = hex_field.value;\n\n new_hex_value = hex_field.value;\n new_rgb_value = this.hexToRGB(new_hex_value);\n\n // if the new_hex_value does not start with a #, add it because the the colorpicker needs it included\n if (new_hex_value[0] != \"#\") {\n new_hex_value = \"#\" + new_hex_value;\n }\n\n // Update the colorpicker field with the hex code WITH the #\n colorpicker_field.value = new_hex_value;\n\n // Update the rgb field with the hex field value\n rgb_field.value = new_rgb_value;\n }\n\n\n // Strip the new_hex_value of # because we must save the hex field value without a #\n if (new_hex_value[0] == \"#\") {\n new_hex_value = new_hex_value.substring(1);\n }\n this.element.dataset.hexValue = new_hex_value;\n this.element.dataset.rgbValue = new_rgb_value;\n\n if (!inputGenerated) {\n\n // Update this selection's selected item to \"customized\"\n var color_group = colorpicker_field.closest(\".color-group\");\n var selected_style_list = color_group.querySelector(\".selected-style\");\n var selected_style = selected_style_list.querySelector(\".style:not(.hidden)\");\n if (selected_style) {\n selected_style.classList.add(\"hidden\");\n }\n var customized_selection = selected_style_list.querySelector(\".customized-selection\");\n if (customized_selection) {\n customized_selection.classList.remove(\"hidden\");\n }\n\n // Update the theme selection's selected item to \"customized\"\n var theme_selection = document.querySelector(\".theme-selection\");\n var selected_theme_list = theme_selection.querySelector(\".selected-theme\");\n var selected_theme = selected_theme_list.querySelector(\".theme:not(.hidden)\");\n if (selected_theme) {\n selected_theme.classList.add(\"hidden\");\n }\n var customized_theme_selection = selected_theme_list.querySelector(\".customized-theme-selection\");\n if (customized_theme_selection) {\n customized_theme_selection.classList.remove(\"hidden\");\n }\n\n // Set the selected theme localstorage to \"customized\"\n localStorage.setItem(\"selected_theme_\"+this.accountIdValue, \"customized\");\n }\n\n // Reset the data-input-generated attribute to false after handling the event\n colorpicker_field.setAttribute('data-input-generated', 'false');\n hex_field.setAttribute('data-input-generated', 'false');\n\n }\n\n hexToRGB(hex) {\n let r = 0, g = 0, b = 0;\n\n // 3 digits\n if (hex.length == 3) {\n r = \"0x\" + hex[0] + hex[0];\n g = \"0x\" + hex[1] + hex[1];\n b = \"0x\" + hex[2] + hex[2];\n\n // 6 digits\n } else if (hex.length == 6) {\n r = \"0x\" + hex[0] + hex[1];\n g = \"0x\" + hex[2] + hex[3];\n b = \"0x\" + hex[4] + hex[5];\n }\n \n // Ensure values are between 0 and 255\n r = Math.max(0, Math.min(255, r));\n g = Math.max(0, Math.min(255, g));\n b = Math.max(0, Math.min(255, b));\n\n return `${+r} ${+g} ${+b}`;\n }\n\n}","// This handles saving color settings and storing them in localstorage\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = ['colorsField', \n 'colorField', \n\n 'toggleSelectTheme', \n 'toggleCustomColors',\n 'selectTheme',\n 'customColors']\n\n static values = { \n accountId: Number,\n modeActiveClasses: String,\n modeInactiveClasses: String\n }\n\n connect() {\n let default_colors_json = this.getDefaultColors(); \n let stored_colors_string = localStorage.getItem(`colors-${accountId}`); \n let colors_field = this.colorsFieldTarget;\n\n // Set the value of the hidden colors field to the current colors\n if (stored_colors_string) {\n colors_field.value = stored_colors_string;\n } else {\n colors_field.value = JSON.stringify(default_colors_json);\n }\n\n // Using the value that's been saved to colors_field, set the colors_string and colors_json variables\n let colors_string = colors_field.value;\n let colors_json = JSON.parse(colors_string);\n\n this.updateAllColors(colors_json);\n }\n\n toggleMode() {\n let toggleSelectTheme = this.toggleSelectThemeTarget;\n let toggleCustomColors = this.toggleCustomColorsTarget;\n let selectTheme = this.selectThemeTarget;\n let customColors = this.customColorsTarget;\n\n // Split the active and inactive classes strings into arrays\n let activeToggleClasses = this.modeActiveClassesValue;\n let activeToggleClassesArray = activeToggleClasses.split(\" \");\n let inactiveToggleClasses = this.modeInactiveClassesValue;\n let inactiveToggleClassesArray = inactiveToggleClasses.split(\" \");\n\n\n if (selectTheme.classList.contains(\"hidden\")) {\n toggleSelectTheme.classList.add(...activeToggleClassesArray);\n toggleSelectTheme.classList.remove(...inactiveToggleClassesArray);\n toggleCustomColors.classList.remove(...activeToggleClassesArray);\n toggleCustomColors.classList.add(...inactiveToggleClassesArray);\n selectTheme.classList.remove(\"hidden\");\n customColors.classList.add(\"hidden\");\n } else {\n toggleSelectTheme.classList.remove(...activeToggleClassesArray);\n toggleSelectTheme.classList.add(...inactiveToggleClassesArray);\n toggleCustomColors.classList.add(...activeToggleClassesArray);\n toggleCustomColors.classList.remove(...inactiveToggleClassesArray);\n selectTheme.classList.add(\"hidden\");\n customColors.classList.remove(\"hidden\");\n }\n }\n\n updateColor(event) {\n let colors_field = this.colorsFieldTarget;\n let colors_json = JSON.parse(colors_field.value);\n let color_picker_container = event.target.closest(\".color-picker\");\n let color_id = color_picker_container.dataset.colorId;\n let new_hex_value = color_picker_container.dataset.hexValue;\n let new_rgb_value = color_picker_container.dataset.rgbValue;\n\n // find the color with the matching color_id and update its hex and rgb properties\n let color = colors_json.find(c => c.color_id === color_id);\n if (color) {\n color.hex = new_hex_value;\n color.rgb = new_rgb_value;\n }\n\n colors_field.value = JSON.stringify(colors_json);\n }\n\n updateAllColors(colors_json) {\n for (let color_field of this.colorFieldTargets) {\n let color_id = color_field.dataset.colorId;\n let hex_field = color_field.querySelector(\".hex-color-field\");\n let colorpicker_field = color_field.querySelector(\".colorpicker-field\");\n\n // Find the object in colors_json that has the matching color_id\n let colorObject = colors_json.find(color => color.color_id === color_id);\n\n if (colorObject) {\n // If a matching color was found, update the fields\n hex_field.value = colorObject.hex;\n colorpicker_field.value = '#' + colorObject.hex;\n\n // Trigger change events manually\n hex_field.dispatchEvent(new Event('change'));\n colorpicker_field.dispatchEvent(new Event('change'));\n } else {\n console.log(`No color found with id ${color_id}`);\n }\n }\n }\n\n getDefaultColors() {\n // Find the meta tag by its name\n let metaTag = document.querySelector('meta[name=\"default-colors\"]');\n\n // Get the content of the meta tag\n let content = metaTag.getAttribute('content');\n\n // Parse the content as JSON\n let colorArray = JSON.parse(content);\n\n return colorArray;\n }\n\n}","// This handles the selection dropdowns for styles in a color group\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = ['selectedStyleList']\n\n static values = { \n accountId: Number\n }\n\n connect() {\n }\n\n select(event) {\n var option_element = event.target.closest(\".style\");\n var style_name = option_element.dataset.styleName;\n var selected_style_list = this.selectedStyleListTarget;\n var selected_style_list_items = selected_style_list.querySelectorAll(\".style\");\n\n // Set the selected option to the clicked option\n for (let style of selected_style_list_items) {\n if (style.dataset.styleName == style_name) {\n style.classList.remove(\"hidden\");\n } else {\n style.classList.add(\"hidden\");\n }\n }\n\n // If the .customized-selection element is present and shown, hide it\n var customized_selection = selected_style_list.querySelector(\".customized-selection\");\n if (customized_selection && customized_selection.classList.contains(\"hidden\") == false) {\n customized_selection.classList.add(\"hidden\");\n }\n\n // Update the color pickers for this group with the selected set of colors\n var color_group_container = option_element.closest(\".color-group\");\n var colorpickers = color_group_container.querySelectorAll(\".color-picker\");\n\n // Get the json string from the HTML data attribute on the option_element\n // Replace its single quotes with double quotes so that it can be parsed\n var colorsGroupStr = option_element.dataset.colorsGroup.replace(/'/g, '\\\"');\n var colorsGroup = JSON.parse(colorsGroupStr);\n\n // Convert the colorsGroup array into an object indexed by color_id\n var colorsObject = {};\n for (let color of colorsGroup) {\n colorsObject[color.color_id] = color;\n }\n\n // Loop through all of the color pickers and update their values\n for (let colorpicker of colorpickers) {\n let color_id = colorpicker.dataset.colorId;\n let color = colorsObject[color_id]; // Get the color object using color_id\n\n if (color) {\n // If a matching color was found, update the fields\n let hex_field = colorpicker.querySelector(\".hex-color-field\");\n let rgb_field = colorpicker.querySelector(\".rgb-field\");\n let colorpicker_field = colorpicker.querySelector(\".colorpicker-field\");\n\n hex_field.value = color.hex;\n rgb_field.value = color.rgb; // Update RGB field\n colorpicker_field.value = '#' + color.hex;\n\n // set the data-input-generated attribute to true on hex_field and colorpicker_field\n hex_field.setAttribute('data-input-generated', 'true');\n colorpicker_field.setAttribute('data-input-generated', 'true');\n\n // fire the input event on the hex field\n hex_field.dispatchEvent(new Event('input'));\n } else {\n console.log(\"No color found with this ID.\");\n }\n }\n\n // Check if input was generated by an external event (i.e. user selecting a theme from the theme selector)\n var inputGenerated = selected_style_list.closest(\".style-selection\").getAttribute('data-input-generated') === 'true';\n\n if (!inputGenerated) {\n // Update the theme selection's selected item to \"customized\"\n var theme_selection = document.querySelector(\".theme-selection\");\n var selected_theme_list = theme_selection.querySelector(\".selected-theme\");\n var selected_theme = selected_theme_list.querySelector(\".theme:not(.hidden)\");\n if (selected_theme) {\n selected_theme.classList.add(\"hidden\");\n }\n var customized_theme_selection = selected_theme_list.querySelector(\".customized-theme-selection\");\n if (customized_theme_selection) {\n customized_theme_selection.classList.remove(\"hidden\");\n }\n\n // Set the selected theme localstorage to \"customized\"\n localStorage.setItem(\"selected_theme_\"+this.accountIdValue, \"customized\");\n }\n\n }\n\n}","// This handles the selection of a theme, which dictates the style selection for each color group.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = ['selectedThemeList', 'styleSelection', 'surfacesStyleSelection']\n\n static values = { \n accountId: Number\n }\n\n connect() {\n // If there is a selected theme in localstorage, select it\n var selected_theme = localStorage.getItem(\"selected_theme_\"+this.accountIdValue);\n if (selected_theme) {\n // Set the selected theme to the clicked option\n var selected_theme_list = this.selectedThemeListTarget;\n var selected_theme_list_items = selected_theme_list.querySelectorAll(\".theme\");\n for (let theme of selected_theme_list_items) {\n if (theme.dataset.themeName == selected_theme) {\n theme.classList.remove(\"hidden\");\n } else {\n theme.classList.add(\"hidden\");\n }\n }\n if (selected_theme == \"customized\") {\n selected_theme_list.querySelector(\".customized-theme-selection\").classList.remove(\"hidden\");\n }\n }\n }\n\n select(event) {\n var theme_name = event.target.closest(\".theme\").dataset.themeName;\n var selected_theme_list = this.selectedThemeListTarget;\n var selected_theme_list_items = selected_theme_list.querySelectorAll(\".theme\");\n\n // Set the selected theme to the clicked option\n for (let theme of selected_theme_list_items) {\n if (theme.dataset.themeName == theme_name) {\n theme.classList.remove(\"hidden\");\n } else {\n theme.classList.add(\"hidden\");\n }\n }\n\n // If the .customized-selection element is present and shown, hide it\n var customized_theme_selection = selected_theme_list.querySelector(\".customized-theme-selection\");\n if (customized_theme_selection && customized_theme_selection.classList.contains(\"hidden\") == false) {\n customized_theme_selection.classList.add(\"hidden\");\n }\n\n // reset all color groups to the style selector (hide the color pickers)\n let color_groups = document.querySelectorAll(\".color-group\");\n for (let color_group of color_groups) {\n // reset to style selector mode\n let style_selection = color_group.querySelector(\".style-selection\");\n // set the data-input-generated attribute to true on style_selection element\n style_selection.setAttribute('data-input-generated', 'true');\n if (style_selection.classList.contains(\"hidden\")) {\n let toggle_link = color_group.querySelector(\".styles-colorpickers-toggle\");\n toggle_link.click();\n }\n }\n\n // Select this theme's style for each color group\n var style_selections = this.styleSelectionTargets;\n for (let style_selection of style_selections) {\n var theme_option = style_selection.querySelector(\".dropdown-menu .style-\"+theme_name);\n if (theme_option) {\n theme_option.click();\n }\n }\n\n // Select this theme's surfaces style\n var surfaces_style_selection = this.surfacesStyleSelectionTarget;\n var surface_styles = surfaces_style_selection.querySelectorAll(\".dropdown-menu .style\");\n for (let surface_style of surface_styles) {\n // If surface_style.dataset.themesForSurfaceStyle contains the selected theme name click it\n if (surface_style.dataset.themesForSurfaceStyle.includes(theme_name)) {\n surface_style.click();\n }\n }\n\n // store the selected theme name in localstorage\n localStorage.setItem(\"selected_theme_\"+this.accountIdValue, theme_name);\n }\n\n}","// When editing a product, this stimulus controller is used for both of these, since their UI's are very similar:\n// purchase-actions\n// subscription-end-actions\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = [\n 'submitButton',\n 'newActionForm',\n 'actionsList',\n 'newActionButton',\n 'noActions'\n ];\n\n static values = {\n productSlug: String\n }\n\n connect() {\n }\n\n toggle() {\n }\n\n cancelNewAction(event) {\n this.newActionFormTarget.remove();\n\n if (this.hasActionsListTarget) {\n this.newActionButtonTarget.classList.remove(\"hidden\");\n } else {\n this.noActionsTarget.classList.remove(\"hidden\");\n }\n }\n\n revealSubmitBtn() {\n this.submitButtonTarget.classList.remove('hidden');\n }\n\n revealContactAttributeValueField(event) {\n var selected_contact_attribute_id = event.target.value;\n console.log(\"selected_contact_attribute_id\", selected_contact_attribute_id);\n var action_id = event.target.dataset.actionId;\n var actions_type = event.target.dataset.actionsType;\n var param;\n\n if (actions_type === 'subscription_end_actions')\n var param = `${actions_type}_id=${event.target.dataset.subscriptionEndActionId}`\n else\n var param = `${actions_type}_id=${event.target.dataset.purchaseActionId}`\n\n const url = `/products/${this.productSlugValue}/fetch_contact_attribute_value_field?selected_contact_attribute_id=${selected_contact_attribute_id}&actions_type=${actions_type}&action_id=${action_id}&${param}`;\n this.fetch_action_field(url);\n }\n\n fetch_action_field(url) {\n Rails.ajax({\n type: \"GET\",\n url: url,\n dataType: 'script', \n success: (data) => {\n // Successfully fetched redirect_rule_form\n },\n error: (err) => {\n console.error(\"Failed to fetch action field:\", err);\n }\n });\n }\n\n}","// When editing a product, this stimulus controller is used on the after purchase (redirect_rule) options\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = [\n ];\n\n static values = {\n productSlug: String,\n }\n\n connect() {\n }\n\n toggleRedirectType(event) {\n var selected_redirect_type = event.target.value;\n const url = `/products/${this.productSlugValue}/reload_redirect_rule_form?selected_redirect_type=${selected_redirect_type}`;\n this.fetch_redirect_rule_form(url);\n }\n\n toggleSpaceType(event) {\n var selected_space_type = event.target.value;\n const url = `/products/${this.productSlugValue}/reload_redirect_rule_form?selected_redirect_type=space&selected_space_type=${selected_space_type}`;\n this.fetch_redirect_rule_form(url);\n }\n\n fetch_redirect_rule_form(url) {\n Rails.ajax({\n type: \"GET\",\n url: url,\n dataType: 'script', \n success: (data) => {\n // Successfully fetched redirect_rule_form\n },\n error: (err) => {\n console.error(\"Failed to fetch redirect_rule_form:\", err);\n }\n });\n }\n\n}","// Manages JS for the manage Commerce subscription modal\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\n ];\n\n static values = {\n }\n\n connect() {\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n \n static targets = [\n \"priceInput\",\n \"pricesList\",\n \"newPriceButton\",\n \"noPrices\",\n \"newPriceForm\",\n ];\n\n static values = {}\n\n connect() {\n }\n\n formatPrice() {\n // Clear any previous timeout to prevent immediate execution\n if (this.formatTimeout) {\n clearTimeout(this.formatTimeout);\n }\n\n // Set a new timeout to execute the formatting after a delay (e.g., 1000 milliseconds)\n this.formatTimeout = setTimeout(() => {\n var inputField = this.priceInputTarget;\n var inputValue = inputField.value;\n\n // Check if the input value is empty or contains only a decimal point\n if (inputValue === \"\" || inputValue === \".\") {\n // Handle empty or invalid input as needed (e.g., reset the input)\n return;\n }\n\n // Remove non-numeric and non-decimal characters\n var numericValue = inputValue.replace(/[^0-9.]/g, \"\");\n\n // Split the value into dollars and cents parts\n var parts = numericValue.split(\".\");\n var centpart1 = parts[0] || \"0\";\n var centpart2 = parts[1] || \"00\";\n\n // Limit the number of decimal places to 2\n if (parts.length > 1) {\n centpart2 = parts[1].substring(0, 2); // Only keep the first 2 decimal places\n }\n\n // Add a trailing \"0\" if there's only one decimal place\n if (centpart2.length === 1) {\n centpart2 = centpart2 + \"0\";\n } else if (centpart2 === \"\") {\n centpart2 = \"00\"; // Ensure there are always 2 digits for cents\n }\n\n // Join dollars and cents\n var formattedValue = centpart2 === \"00\" ? centpart1 : `${centpart1}.${centpart2}`;\n\n // Update the input field with the formatted value\n inputField.value = formattedValue;\n }, 1500); // Adjust the delay as needed\n }\n\n cancelNewPrice() {\n this.newPriceFormTarget.remove();\n\n if (this.hasPriceListTarget) {\n this.newPriceButtonTarget.classList.remove(\"hidden\");\n } else {\n this.noPricesTarget.classList.remove(\"hidden\");\n }\n }\n\n cancelEditPrice() {\n this.element.querySelector(\"form#edit-price\").remove();\n }\n\n resetTrial(){\n var toggle = document.querySelector('#subscription-trial-toggle')\n var toggleValue = toggle.dataset.toggleSwitchActiveValue\n var trialField = document.querySelector('#product_price_trial_days')\n if (toggleValue == 'false'){\n trialField.value = null\n } else if (toggleValue == 'true'){\n trialField.value = 7\n }\n }\n\n resetSubscriptionEndInterval(){\n var toggle = document.querySelector('#subscription-end-toggle')\n var toggleValue = toggle.dataset.toggleSwitchActiveValue\n var intervalCountField = document.querySelector('#product_price_subscription_end_interval_count')\n var intervalField = document.querySelector('#product_price_subscription_end_interval')\n if (toggleValue == 'false'){\n intervalCountField.value = null\n intervalField.value = null\n intervalField.required = false\n }else if (toggleValue == 'true'){\n intervalCountField.value = 1\n intervalField.value = 'day'\n intervalField.required = true\n }\n }\n\n resetRecurringOptions(){\n var toggle = document.querySelector('#recurring-toggle')\n var toggleValue = toggle.dataset.toggleSwitchActiveValue\n var intervalCountField = document.querySelector('#product_price_recurring_interval_count')\n var intervalField = document.querySelector('#product_price_recurring_interval')\n if (toggleValue == 'false'){\n intervalCountField.value = null\n intervalField.value = null\n intervalField.required = false\n }else if (toggleValue == 'true'){\n intervalCountField.value = 1\n intervalField.value = 'month'\n intervalField.required = true\n }\n }\n}","// Used for misc UI stuff when editing a product\n\nimport { Controller } from \"stimulus\"\nimport Trix from 'trix'; // Import the Trix library\n\nexport default class extends Controller {\n\n static targets = ['purchaseButton'];\n\n static values = {\n }\n\n connect() {\n const trixEditors = this.element.querySelectorAll('.display-link-trix-tool trix-editor');\n trixEditors.forEach(editor => editor.toolbarElement.innerHTML = Trix.config.toolbar.getLinkToolHTML());\n }\n\n open_purchase_flow_settings() {\n var purchase_flow_settings = document.getElementById(\"product-purchase-flow\");\n var toggle_panel = purchase_flow_settings.querySelector(\"div[data-action='click->toggle-settings-panel#toggle']\")\n toggle_panel.click();\n purchase_flow_settings.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n RevealPurchaseButton(){\n var agreeToTermsCheckbox = this.element.querySelector(\"#purchase-agree-to-terms\")\n this.purchaseButtonTarget.disabled = !agreeToTermsCheckbox.checked\n this.purchaseButtonTarget.classList.toggle('btn-primary', agreeToTermsCheckbox.checked)\n this.purchaseButtonTarget.classList.toggle('btn-secondary', !agreeToTermsCheckbox.checked)\n }\n\n}","// This handles the customer-facing purchase flow UI \n\nimport {Controller} from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"couponCodeField\"];\n\n static values = {}\n\n connect() {\n var couponWithParam = this.element.querySelector('.coupon-field-with-params')\n if ( window.location.href.includes('?coupon') && couponWithParam ){\n if (couponWithParam) couponWithParam.classList.remove('hidden')\n if (this.hasCouponCodeFieldTarget && window.location.href.split('?coupon=')[1]) {\n this.couponCodeFieldTarget.value = window.location.href.split('?coupon=')[1]\n this.element.querySelector('.verify-coupon-button').click()\n this.element.querySelector('.enter-coupon-link').click()\n }\n }else{\n if (couponWithParam) couponWithParam.classList.add('hidden')\n }\n }\n\n verifyCoupon(event) {\n var buttonTarget = event.target\n buttonTarget.disabled = true\n if (buttonTarget.getAttribute('data-disable-with')) {\n buttonTarget.setAttribute('data-btn-text', buttonTarget.innerHTML)\n buttonTarget.innerHTML = buttonTarget.getAttribute('data-disable-with')\n }\n event.preventDefault()\n var couponCode = this.couponCodeFieldTarget.value\n Rails.ajax({\n type: \"get\",\n url: '/verify_coupon?coupon_code=' + couponCode,\n })\n }\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = ['newContactAttributeBtn']\n static values = { \n }\n\n connect() {\n }\n\n cancelEdit(event) {\n var contactAttributeContainer = event.target.closest(\".contact-attribute-container\");\n var form = contactAttributeContainer.querySelector(\"form\");\n var viewContactAttribute = contactAttributeContainer.querySelector(\".view-contact-attribute\");\n contactAttributeContainer.classList.remove(\"editing\");\n form.remove();\n viewContactAttribute.classList.remove(\"hidden\");\n }\n\n cancelNew(event) {\n var newContactAttributeContainer = event.target.closest(\"#new-contact-attribute\");\n newContactAttributeContainer.remove();\n this.newContactAttributeBtnTarget.classList.remove(\"hidden\");\n }\n\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['modal']\n\n static values = {\n }\n\n connect() {\n\n if (this.hasModalTarget) {\n var new_respondent = window.location.href.indexOf(\"new_respondent=true\") > -1;\n var via_intake = window.location.href.indexOf(\"via_intake=true\") > -1;\n \n if (new_respondent || via_intake) {\n var modal = this.modalTarget;\n modal.classList.remove(\"hidden\");\n var delayInMilliseconds = 1000; //miliseconds\n setTimeout(function() {\n modal.classList.add(\"modal-transition-in\");\n }, delayInMilliseconds);\n }\n }\n \n }\n \n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['invitationsToggle',\n 'invitationsHiddenField',\n 'toEmailsInput',\n 'toEmailError',\n 'toEmailsHiddenField',\n 'fromNameInput',\n 'fromNameHiddenField',\n 'replyToInput',\n 'replyToHiddenField',\n 'subjectInput', \n 'subjectHiddenField',\n 'messageInput', \n 'messageHiddenField',\n 'messageCopyableContent',\n 'bottomMessageInput', \n 'bottomMessageHiddenField', \n 'bottomMessageCopyableContent', \n\n \n 'showThumbnailInEmail',\n 'hideThumbnailInEmail',\n 'thumbnailProcessing',\n 'thumbnailInEmailHiddenField',\n 'thumbnailCopyableContent',\n\n 'buttonRender',\n 'buttonEditor',\n 'buttonTypeInput',\n 'buttonTypeHiddenField',\n 'buttonTextInput',\n 'buttonTextHiddenField',\n 'buttonTextCopyableContent',\n 'renderedButton',\n 'renderedTextLink',\n 'renderedUrlLink',\n\n 'conversationInviteForm', \n\n 'emailComposer',\n 'emailSent',\n 'copyableContent'\n ]\n\n static values = { \n conversationUrl: String\n }\n\n connect() {\n this.timer = 0;\n\n // This ensures the copyable content has proper formatting by default\n if(this.hasMessageCopyableContentTarget && this.hasMessageInputTarget)\n this.messageCopyableContentTarget.innerHTML = this.messageInputTarget.value;\n\n if(this.hasBottomMessageCopyableContentTarget && this.hasBottomMessageInputTarget)\n this.bottomMessageCopyableContentTarget.innerHTML = this.bottomMessageInputTarget.value;\n }\n\n // Email fields (to, reply-to, subject, message, bottom_message)\n\n updateInvitations() {\n this.delay().then( () => {\n this.invitationsHiddenFieldTarget.value = this.invitationsToggleTarget.value;\n })\n }\n\n updateFromName() {\n this.delay().then( () => {\n this.fromNameHiddenFieldTarget.value = this.fromNameInputTarget.value;\n })\n }\n\n updateToEmails() {\n this.delay().then( () => {\n this.toEmailsHiddenFieldTarget.value = this.toEmailsInputTarget.value;\n })\n }\n\n updateReplyTo() {\n this.delay().then( () => {\n this.replyToHiddenFieldTarget.value = this.replyToInputTarget.value;\n })\n }\n\n updateSubject() {\n this.delay().then( () => {\n this.subjectHiddenFieldTarget.value = this.subjectInputTarget.value;\n })\n }\n\n updateMessage() {\n this.delay().then( () => {\n this.messageHiddenFieldTarget.value = this.messageInputTarget.value;\n if(this.hasMessageCopyableContentTarget)\n this.messageCopyableContentTarget.innerHTML = this.messageInputTarget.value;\n })\n }\n\n updateBottomMessage() {\n this.delay().then( () => {\n this.bottomMessageHiddenFieldTarget.value = this.bottomMessageInputTarget.value;\n this.bottomMessageCopyableContentTarget.innerHTML = this.bottomMessageInputTarget.value;\n })\n }\n\n\n // Thumbnail in email composer:\n // These actions only toggle whether or not to include thumbnail in the composed email.\n // The logic for toggling beween presenting and changing the thumbnail is in conversation--thumbnail\n\n hideThumbnailInEmail() {\n // Toggles OFF the option show the thumbnail in the email.\n \n // Set the thumbnailInEmail field value and toggle what the user sees \n this.thumbnailInEmailHiddenFieldTarget.value = \"false\";\n this.hideThumbnailInEmailTarget.classList.remove(\"hidden\");\n this.showThumbnailInEmailTarget.classList.add(\"hidden\");\n\n // Remove the thumbnail from the content for copy to clipboard by moving it outside of that copyable div, but still inside the DOM so we can move it back into the copyable div, if user wants.\n this.copyableContentTarget.insertAdjacentElement(\"beforebegin\", this.thumbnailCopyableContentTarget);\n this.thumbnailCopyableContentTarget.classList.add(\"hidden\");\n }\n\n showThumbnailInEmail() {\n // Toggles ON the option show the thumbnail in the email.\n\n // Set the thumbnailInEmail field value and toggle what the user sees\n this.thumbnailInEmailHiddenFieldTarget.value = \"true\";\n this.hideThumbnailInEmailTarget.classList.add(\"hidden\");\n this.showThumbnailInEmailTarget.classList.remove(\"hidden\");\n\n // Add thumbnail back into the content for copy to clipboard.\n this.messageCopyableContentTarget.insertAdjacentElement(\"afterend\", this.thumbnailCopyableContentTarget);\n this.thumbnailCopyableContentTarget.classList.remove(\"hidden\");\n }\n\n\n // Call-to-action (CTA) button in email composer:\n\n toggleButtonEditor() {\n if (this.buttonRenderTarget.classList.contains(\"hidden\")) {\n this.buttonRenderTarget.classList.remove(\"hidden\");\n this.buttonEditorTarget.classList.add(\"hidden\");\n } else {\n this.buttonRenderTarget.classList.add(\"hidden\");\n this.buttonEditorTarget.classList.remove(\"hidden\");\n }\n }\n\n changeLinkType(event) {\n if (event.target.value == 'url') {\n this.buttonTextInputTarget.classList.add(\"hidden\");\n\n this.renderedButtonTarget.classList.add(\"hidden\");\n this.renderedTextLinkTarget.classList.add(\"hidden\");\n this.renderedUrlLinkTarget.classList.remove(\"hidden\");\n this.buttonTextHiddenFieldTarget.value = this.conversationUrlValue;\n\n } else if (event.target.value == 'text_link') {\n\n this.buttonTextInputTarget.classList.remove(\"hidden\");\n this.buttonTextInputTarget.querySelector(\"label\").innerHTML = \"Link Text\";\n\n this.renderedButtonTarget.classList.add(\"hidden\");\n this.renderedTextLinkTarget.classList.remove(\"hidden\");\n this.renderedUrlLinkTarget.classList.add(\"hidden\");\n\n } else { // 'button'\n\n this.buttonTextInputTarget.classList.remove(\"hidden\");\n this.buttonTextInputTarget.querySelector(\"label\").innerHTML = \"Button Text\";\n\n this.renderedButtonTarget.classList.remove(\"hidden\");\n this.renderedTextLinkTarget.classList.add(\"hidden\");\n this.renderedUrlLinkTarget.classList.add(\"hidden\");\n }\n this.buttonTypeHiddenFieldTarget.value = this.buttonTypeInputTarget.querySelector(\"select\").value;\n }\n\n updateButtonText() {\n this.delay().then( () => {\n this.bottomMessageHiddenFieldTarget.value = this.bottomMessageInputTarget.value;\n\n var new_value = this.buttonTextInputTarget.querySelector(\"input\").value;\n this.buttonTextHiddenFieldTarget.value = new_value;\n this.buttonTextCopyableContentTarget.innerHTML = new_value;\n this.renderedButtonTarget.innerHTML = new_value;\n this.renderedTextLinkTarget.innerHTML = new_value;\n })\n }\n\n customFormSubmit(event) {\n event.preventDefault();\n\n if(this.toEmailsHiddenFieldTarget.value === undefined || this.toEmailsHiddenFieldTarget.value === null || this.toEmailsHiddenFieldTarget.value === \"\") {\n // verify if the TO input field is blank and show the error message\n for (const error_message of this.toEmailErrorTargets) {\n error_message.classList.remove(\"hidden\");\n }\n } else {\n // submit form if TO input field is not empty\n Rails.fire(this.conversationInviteFormTarget, 'submit')\n }\n\n }\n\n delay() {\n return new Promise(resolve => {\n clearTimeout(this.timer);\n\n this.timer = setTimeout(() => {\n this.timer = null;\n\n resolve(0);\n }, 500);\n })\n }\n\n resetEmailComposer() {\n this.emailComposerTarget.classList.remove(\"hidden\");\n this.emailComposerTarget.querySelector(\"input#emails_input\").value = \"\";\n this.emailComposerTarget.querySelector(\"input#emails\").value = \"\";\n this.emailComposerTarget.querySelector(\"input#emails_input\").focus();\n this.emailSentTarget.classList.add(\"hidden\");\n this.element.querySelector(\"#toggle-invitations-via-email\").classList.remove(\"hidden\");\n } \n\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n static targets = [\"embedCodeInput\"]\n\n connect() {\n }\n\n // When user obtains the conversation embed code, they can toggle ?allow_replies off/on the src URL using this action\n toggleAllowReplies(event) {\n var input = this.embedCodeInputTarget;\n var input_value = input.value;\n var copy_element = this.element.querySelector(\"div[data-copy-string-value]\");\n\n // If allow_replies is present, remove it.\n if (input_value.includes(\"allow_replies=true\")) {\n if (input_value.includes(\"?allow_replies=true\")) { // allow_replies is the only param\n input.value = input_value.replace(\"?allow_replies=true\", \"\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(\"?allow_replies=true\", \"\"); // replace the copy element data attr\n } else if (input_value.includes(\"&allow_replies=true\")) { // allow_replies is present along with token param\n input.value = input_value.replace(\"&allow_replies=true\", \"\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(\"&allow_replies=true\", \"\"); // replace the copy element data attr\n }\n } else { // allow_replies is not present, so add it.\n if (input_value.includes(\"?token\")) { // token is present\n var token_index = input_value.indexOf(\"token=\") + 6;\n var token_value = input_value.substring(token_index, input_value.indexOf(\"'\", token_index));\n input.value = input_value.replace(token_value, token_value+\"&allow_replies=true\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(token_value, token_value+\"&allow_replies=true\"); // replace the copy element data attr\n } else { // token isn't present\n var src_index = input_value.indexOf(\"src='\") + 5;\n var src_value = input_value.substring(src_index, input_value.indexOf(\"'\", src_index));\n input.value = input_value.replace(src_value, src_value+\"?allow_replies=true\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(src_value, src_value+\"?allow_replies=true\"); // replace the copy element data attr\n }\n }\n\n }\n\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static values = {\n basePath: String,\n messageCount: Number\n }\n\n connect() {\n window.oncontextmenu = () => {\n return this.element.dataset.allowDownloads === 'true';\n }\n\n // When user hits a conversation view that specifies a message ID like this: https://accountslug.clarityflow.com/c/conversationslug/#message-123, we must scroll to that message on page load.\n var base_path = this.basePathValue;\n var message_count = this.messageCountValue;\n\n if (window.location.hash) {\n var message_anchor = window.location.hash;\n var message_id = message_anchor.split(\"-\").pop();\n var new_message_thread = message_anchor.split(\"#\").pop();\n var message_container = document.querySelector(\".message#message-\"+message_id);\n\n if (new_message_thread === 'new_message_thread')\n {\n var element = document.querySelector(\"#new-message-btn-bottom button\");\n if (!element) {\n element = document.querySelector(\"#new-message-btn-top button\");\n }\n setTimeout(() => { element?.click() }, 1000);\n } else if(message_container) {\n // the message is a top-level message. We can scroll right to it.\n message_container.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n\n if (message_count > 1) {\n var request_link = document.createElement('a');\n request_link.href = \"/\" + base_path + \"/scroll_to_threaded_message?message_id=\" + message_id;\n request_link.setAttribute(\"data-remote\", \"true\");\n document.querySelector(\"body\").appendChild(request_link);\n request_link.click();\n request_link.remove();\n }\n this.updateConversationUrlMessageId(message_id)\n\n } else {\n // load more link will only be visible for conversations with more than 8 messages.\n var link = document.querySelector('.load-all-messages');\n link ??= document.querySelector('.load-few-messages');\n if (link) {\n link.href += `&message_id=${message_id}`;\n link.click()\n } else {\n // message_container wasn't found so we'll assume the message is probably inside a message thread, but hasn't been loaded into the DOM yet.\n\n // Insert a link element that points to the scroll_to_threaded_message endpoint and click it.\n var request_link = document.createElement('a');\n request_link.href = \"/\"+base_path+\"/scroll_to_threaded_message?message_id=\"+message_id;\n request_link.setAttribute(\"data-remote\", \"true\");\n document.querySelector(\"body\").appendChild(request_link);\n request_link.click();\n request_link.remove();\n\n this.updateConversationUrlMessageId(message_id)\n }\n }\n }\n\n }\n\n //When viewing a single message thread, the conversation show link's #message- will point to the specific message provided in the browser URL.\n updateConversationUrlMessageId(message_id){\n var singleMessageViewConversationShowLinks = document.querySelectorAll('.single-message-view-conversation-show-link')\n if (singleMessageViewConversationShowLinks.length > 0) {\n singleMessageViewConversationShowLinks.forEach(element => {\n var link = element.querySelector('a');\n var hrefParts = link.href.split('-');\n hrefParts[hrefParts.length - 1] = message_id;\n link.href = hrefParts.join('-');\n });\n }\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['conversationItem', 'conversationThumbnailContainer']\n\n static values = {}\n\n connect() {\n var conversation_ids = []\n for (let conversationItem of this.conversationItemTargets) {\n conversation_ids.push(conversationItem.id.split('-')[1]);\n }\n\n var queryParams = window.location.href.split('?')[1]?.split('&');\n var params = {};\n queryParams?.forEach(function(param) {\n var parts = param.split('=');\n var key = decodeURIComponent(parts[0]);\n var value = decodeURIComponent(parts[1]);\n params[key] = value;\n });\n\n Rails.ajax({\n type: \"get\",\n url: '/load_conversation_thumbnail/?conversation_ids=' + conversation_ids+ '&mode=' + params['mode'],\n })\n }\n}\n","// Used to control the conversation sidebar navigator\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\n 'messagesNav',\n 'sidebarFilterUnseenToggle',\n 'statusWidget',\n 'statusWidgetUnseenFilterToggle'\n ]\n\n static values = {\n loadUrl: String,\n userSignedIn: Boolean\n }\n\n connect() {\n if (this.hasMessagesNavTarget) {\n // When the page loads, load the sidebar navigation using ajax\n this.loadSidebar();\n\n if (this.userSignedInValue == true) {\n var cta_banner = document.querySelector(\"#upgrade-cta\");\n\n // Set offsetTop to be the distance of the messages nav from the top of the viewport when the page is scrolled to the top.\n if (cta_banner) {\n this.offsetTop = 210;\n } else {\n this.offsetTop = 165;\n }\n\n this.isFixed = false;\n } else {\n this.offsetTop = 0;\n this.isFixed = true; \n }\n\n // If the page is not scrolled to the top at the time the page loads, then run stickyNav() to ensure the sidebar is fully visible on load.\n if (window.pageYOffset !== 0) {\n this.stickyNav();\n }\n }\n }\n\n async loadSidebar() {\n const link = document.createElement('a')\n link.style.display = 'none'\n link.href = this.loadUrlValue\n link.setAttribute('data-remote', 'true')\n\n // Append to the document\n document.body.appendChild(link)\n\n // Trigger the click event manually\n await this.triggerClickEvent(link)\n\n // Remove the link from the DOM\n document.body.removeChild(link)\n\n // Apply class to handle scrollbar on sidebar nav if it overflows\n this.overflowNav();\n\n // apply .has-unseen to conversation threads that contain unseen messages for the user\n }\n\n triggerClickEvent(element) {\n return new Promise(resolve => {\n element.addEventListener('ajax:success', resolve, { once: true })\n element.click()\n })\n }\n\n scroll_to_message(event) {\n event.preventDefault(); \n var navigate_link = event.target.closest(\".message-link\");\n var message_id = navigate_link.dataset.messageId;\n var message_thread_id = navigate_link.dataset.messageThreadId;\n var message = document.querySelector(\"#messages #message-\"+message_id);\n if(message){\n message.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n }\n else { // If the target message is not present on the page, click the \"load all\" link to load all messages\n var link = document.querySelector('.load-all-messages') || document.querySelector('.load-few-messages');\n if (link) {\n link.href += \"&message_id=\" + message_id + '&message_thread_id=' + message_thread_id;\n link.click()\n }\n }\n }\n\n stickyNav() {\n var distance_from_top = 0;\n if (window.scrollY >= this.offsetTop - distance_from_top && !this.isFixed) {\n this.messagesNavTarget.classList.add('fixed-nav');\n this.isFixed = true;\n } else if (window.scrollY < this.offsetTop - distance_from_top && this.isFixed) {\n this.messagesNavTarget.classList.remove('fixed-nav');\n this.isFixed = false;\n }\n this.overflowNav();\n }\n\n overflowNav() {\n // Applies class to nav so that bottom is styled to show user that they can scroll the overflowing nav\n var conversation_nav_links_container = this.messagesNavTarget.querySelector(\"#conversation-sidebar-links-container\");\n\n if (conversation_nav_links_container) {\n // Check if the element's content overflows\n if (conversation_nav_links_container.scrollHeight > conversation_nav_links_container.clientHeight) {\n // If content overflows, add the class\n conversation_nav_links_container.classList.add('overflowing-nav');\n } else {\n // If content doesn't overflow, remove the class\n conversation_nav_links_container.classList.remove('overflowing-nav');\n } \n }\n }\n\n toggleFilterUnseenMessageThreads() {\n var sidebar_settings = document.querySelector(\"#conversation-sidebar-section .section-settings.conversation-sidebar-options\");\n var sidebar_filter_unseen_toggle = this.sidebarFilterUnseenToggleTarget;\n var status_widget = this.statusWidgetTarget;\n var status_widget_unseen_toggle = this.statusWidgetUnseenFilterToggleTarget;\n \n if (this.element.classList.contains(\"hiding-seen-message-threads\")) { // We're showing all messages\n\n // Remove body class to show all messages\n this.element.classList.remove(\"hiding-seen-message-threads\");\n\n // Remove active status from sidebar messages settings icon \n sidebar_filter_unseen_toggle.classList.remove(\"active\");\n if (sidebar_settings) {\n sidebar_settings.classList.remove(\"active\");\n }\n\n // Hide the conversation status widget\n status_widget.classList.add(\"hidden\");\n status_widget_unseen_toggle.classList.add(\"hidden\");\n\n if (this.element.classList.contains(\"viewing-single-thread-view\")) {\n messages.querySelectorAll('.message').forEach(message => {\n if (message && !message.classList.contains('unseen')){\n message.classList.remove('hidden');\n }\n })\n }\n\n } else { // We're hiding unseen messages\n\n // Add body class to hide unseen messages\n this.element.classList.add(\"hiding-seen-message-threads\");\n\n // Add active status to sidebar messages settings icon \n sidebar_filter_unseen_toggle.classList.add(\"active\");\n if (sidebar_settings) {\n sidebar_settings.classList.add(\"active\");\n }\n\n // Show the conversation status widget\n status_widget.classList.remove(\"hidden\");\n status_widget_unseen_toggle.classList.remove(\"hidden\");\n\n if (this.element.classList.contains(\"viewing-single-thread-view\")) {\n messages.querySelectorAll('.message').forEach(message => {\n if (message && !message.classList.contains('unseen')){\n message.classList.add('hidden');\n }\n })\n }\n }\n\n // run overflowNav again since the sidebar height changed\n this.overflowNav();\n }\n\n}","// This handles the Zoom effect when scrolling through messages in a conversation\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['mediaMessage', \n 'scrollZoomOnBtn',\n 'scrollZoomOffBtn'\n ]\n\n static values = {\n scrollMessagesSetting: Boolean\n }\n\n initialize() {\n var scroll_zoom_setting = localStorage.getItem('scroll-zoom');\n var supports_intersectionOptions = ('IntersectionObserver' in window) || ('IntersectionObserverEntry' in window) || ('intersectionRatio' in window.IntersectionObserverEntry.prototype);\n if ((scroll_zoom_setting && scroll_zoom_setting == 'off') || !supports_intersectionOptions) { // Scroll Zoom setting is off OR IntersectionObserver isn't supported in this browser\n // Set Zoom Scrolling to Off state\n this.element.classList.add(\"disable-zoom-effect\"); \n } else { // Scroll Zoom effect is on\n\n var mediaMessages = this.mediaMessageTargets;\n initZoomEffect(mediaMessages);\n }\n\n }\n\n toggle_zoom_effect(event) {\n var body_tag = this.element;\n var zoom_on_btn = this.scrollZoomOnBtnTarget;\n var zoom_off_btn = this.scrollZoomOffBtnTarget;\n\n if (body_tag.classList.contains(\"disable-zoom-effect\")) {\n // Set Zoom on state\n this.element.classList.remove(\"disable-zoom-effect\");\n localStorage.setItem('scroll-zoom', 'on');\n \n // Initialize Scrolling effect\n var mediaMessages = this.mediaMessageTargets;\n initZoomEffect(mediaMessages);\n } else {\n // Set Zoom off state\n this.element.classList.add(\"disable-zoom-effect\");\n localStorage.setItem('scroll-zoom', 'off');\n }\n }\n\n}\n\nfunction intersectionCallback(entries) {\n entries.forEach(function(entry) {\n if (entry.isIntersecting) {\n // Add the focused class:\n entry.target.classList.add(\"focused\");\n } else {\n // Otherwise remove the focused class\n entry.target.classList.remove(\"focused\");\n }\n });\n}\n\nfunction initZoomEffect(entries) {\n // Set up the observer for messages entering the viewport\n let intersectionOptions = {\n root: null,\n rootMargin: \"0px\",\n threshold: 0.6\n };\n\n const intersectionObserver = new IntersectionObserver(intersectionCallback, intersectionOptions);\n entries.forEach(function(entry) {\n // Add each message (with media) to the watcher\n intersectionObserver.observe(entry);\n });\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['field', \n 'privateField'\n ]\n\n connect() {\n var selected_field = this.element.querySelector(\"input[type='radio']:checked\");\n if (selected_field) {\n selected_field.closest(\".radio-field\").classList.add(\"active\");\n }\n }\n\n toggle(event) {\n var container = event.target.closest(\".radio-field\");\n var label = event.target.closest(\"label\");\n var input = label.querySelector(\"input\");\n\n if (!input.checked) {\n container.classList.remove(\"active\");\n input.click();\n } \n }\n \n\n}","// HOW TO USE:\n// ==============\n\n// Top navigation tabs (_share_modal_nav.html.erb) use this markup:\n\n// conversation--share-modal#navigate\" \n// data-panel-to-activate=\"link\" \n// data-tab-id=\"share\">\n// ...\n// \n\n\n// Sub nav tabs (examples: _share_subnav.html.erb, _people_subnav.html.erb _settings_subnav.html.erb) use this markup:\n\n//
\n//\n// conversation--share-modal#navigate\" \n// data-panel-to-activate=\"link\"\n// data-subtab-id=\"link\" \n// data-parent-tab-id=\"share\">\n// \n// ...\n// \n// \n//\n// conversation--share-modal#navigate\" \n// data-panel-to-activate=\"email\"\n// data-subtab-id=\"email\" \n// data-parent-tab-id=\"share\">\n// \n// ...\n// \n// \n//\n//
\n\n\n// To place links on the page that both open the modal and navigate straight to a panel, use this markup:\n\n// \n\n\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['modal',\n 'modalBox',\n 'titleContainer',\n 'title',\n 'titleForm',\n 'tabNav',\n 'panel',\n 'refreshPageLink',\n 'addSubscribersToggle',\n 'addSubscribersForm']\n \n open(event) {\n var modal = this.modalTarget;\n modal.classList.remove(\"hidden\");\n modal.classList.add(\"shown\");\n\n var focus_title_field = event.target.closest(\".open-share-modal\").dataset.focusTitleField;\n if (focus_title_field) {\n this.showTitleForm();\n }\n\n var tab_id = '';\n var panel_id = null;\n\n var open_to = event.target.closest(\".open-share-modal\").dataset.openTo;\n if (open_to) {\n if (open_to == \"settings\") {\n this.activateSubTab(\"visibility_settings\");\n } else if (open_to == \"share\") {\n this.activateSubTab(\"link\");\n } else if (open_to == \"people\") {\n this.activateSubTab(\"conversation_users\");\n } else if (open_to == \"email\") {\n this.activateSubTab(\"email\");\n } else if (open_to == \"workflows\") {\n this.activateTab(\"workflows\", null, false, true)\n }\n } else { // default to opening to the People panel\n this.activateSubTab(\"conversation_users\");\n }\n }\n\n close() {\n this.modalTarget.classList.add(\"hidden\");\n }\n\n navigate(event){ // called from the tab navs and subnav links within the share modal.\n var clickedTab = event.target.closest(\".modal-nav-link\");\n var clickedSubTab = event.target.closest(\".modal-subnav-link\");\n var triggeredSubTab = event.target.closest(\".trigger-subnav-link\"); // used to trigger .modal-subnav-link without applying the css styles that .modal-subnav-link applies.\n if (clickedTab) { // Clicked a top nav link\n var tab_id_to_activate = clickedTab.dataset.tabId;\n var panel_id_to_activate = clickedTab.dataset.panelToActivate;\n this.activateTab(tab_id_to_activate, panel_id_to_activate);\n } else if (clickedSubTab || triggeredSubTab) { // Clicked a sub nav link\n if (clickedSubTab) {\n var panel_id_to_activate = clickedSubTab.dataset.panelToActivate;\n } else if (triggeredSubTab) {\n var panel_id_to_activate = triggeredSubTab.dataset.panelToActivate;\n }\n this.activateSubTab(panel_id_to_activate);\n }\n }\n\n activateTab(tabId, panelId=null, activatingParent=false, click=false) { // called from navigate() as well as links on that page the will open the share modal to a specific panel.\n // Deactivate the currently active tab\n var active_tab = this.tabNavTarget.querySelector(\".modal-nav-link.active\");\n if (active_tab) {\n active_tab.classList.remove(\"active\");\n }\n\n // Activate this tab\n var tab_to_activate = this.element.querySelector(\".modal-nav-link[data-tab-id=\"+tabId+\"]\");\n tab_to_activate.classList.add(\"active\");\n\n // Activate the panel, unless the sub-nav link already did that and we only wanted to activate its' parent tab\n if (!activatingParent) {\n if (!panelId) {\n var panelId = tabId;\n if (tabId == \"workflows\") {\n panelId = \"all_workflows\";\n }\n }\n this.activatePanel(panelId);\n }\n\n // if click is true, then simuluate clicking the tab (we do this when the tab is an ajax link)\n if (click) {\n tab_to_activate.click();\n }\n }\n\n activateSubTab(panelId) {\n var subtab_to_activate = this.element.querySelector(\".modal-subnav .modal-subnav-link[data-subtab-id=\"+panelId+\"]\");\n if (subtab_to_activate) {\n var parentTabId = subtab_to_activate.dataset.parentTabId;\n\n // Deactivate the currently active sub tab\n var active_subtab = this.element.querySelector(\".modal-subnav[data-parent-id='\"+parentTabId+\"'] .modal-subnav-link.active\");\n if (active_subtab) {\n active_subtab.classList.remove(\"active\");\n }\n\n // Activate this sub tab\n subtab_to_activate.classList.add(\"active\");\n }\n\n // Activate this sub tab's parent tab\n if (parentTabId) {\n this.activateTab(parentTabId, null, true);\n }\n\n // Activate the panel\n this.activatePanel(panelId);\n }\n\n activatePanel(panelId) { // called from both activateTab() and activateSubTab()\n // Hide all panels\n for (let panel of this.panelTargets) {\n panel.classList.add(\"hidden\");\n }\n\n // Unhide this panel\n var panel_to_activate = this.element.querySelector(\".share-panel[data-panel-id='\"+panelId+\"']\");\n panel_to_activate.classList.remove(\"hidden\");\n }\n \n\n // Title form field\n\n showTitleForm() {\n this.titleTarget.classList.add(\"hidden\", \"md:hidden\");\n this.titleFormTarget.classList.remove(\"hidden\", \"md:hidden\");\n this.titleFormTarget.querySelector(\"input[type=text]\").focus();\n }\n\n hideTitleForm(event) {\n if (event.key == \"Tab\" || this.titleContainerTarget.contains(event.target) === false) {\n this.titleTarget.classList.remove(\"hidden\", \"md:hidden\");\n this.titleFormTarget.classList.add(\"hidden\", \"md:hidden\");\n this.titleContainerTarget.querySelector(\".autosave-icon-container\").classList.add(\"hidden\");\n this.titleContainerTarget.querySelector(\".autosave-icon-container .error-icon\").classList.add(\"hidden\");\n }\n }\n\n\n showRefreshPageLink(event) {\n setTimeout(() => {\n this.refreshPageLinkTarget.classList.remove(\"hidden\");\n }, 1000);\n }\n\n reloadPage() {\n window.location.reload();\n }\n\n toggleAddSubscribers() {\n if (this.addSubscribersFormTarget.classList.contains(\"hidden\")) {\n this.addSubscribersToggleTarget.classList.add(\"hidden\");\n this.addSubscribersFormTarget.classList.remove(\"hidden\");\n this.addSubscribersFormTarget.querySelector(\"textarea\").focus();\n\n } else {\n this.addSubscribersFormTarget.classList.add(\"hidden\");\n this.addSubscribersToggleTarget.classList.remove(\"hidden\");\n }\n }\n\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['thumbnailContainer',\n 'thumbnailPresentation',\n 'thumbnailEditor',\n\n 'thumbnail', \n 'thumbnailForm',\n 'thumbnailButton', \n ]\n\n static values = {\n context: String\n }\n\n connect() {\n }\n\n toggleThumbnailEditor() {\n // Toggles between showing the thumbnail (or empty thumbnail if none exists yet) and the thumbnail uploader form\n if (this.thumbnailPresentationTarget.classList.contains(\"hidden\")) {\n this.thumbnailPresentationTarget.classList.remove(\"hidden\");\n this.thumbnailEditorTarget.classList.add(\"hidden\"); \n } else {\n this.thumbnailPresentationTarget.classList.add(\"hidden\");\n this.thumbnailEditorTarget.classList.remove(\"hidden\"); \n }\n }\n\n toggleThumbnail() {\n if (this.thumbnailTarget.classList.contains(\"hidden\")) {\n this.thumbnailTarget.classList.remove(\"hidden\");\n this.thumbnailFormTarget.classList.add(\"hidden\");\n } else {\n this.thumbnailTarget.classList.add(\"hidden\");\n this.thumbnailFormTarget.classList.remove(\"hidden\");\n }\n }\n\n toggleThumbnailButton() {\n document.querySelector(\"form#conversation-thumbnail-form.in-email-composer\").remove();\n if (this.thumbnailButtonTarget.classList.contains(\"hidden\")) {\n this.thumbnailButtonTarget.classList.remove(\"hidden\");\n } else {\n this.thumbnailButtonTarget.classList.add(\"hidden\");\n }\n }\n \n\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['input', 'copyButton', 'richContent']\n static values = { \n prepend: String,\n success: String, \n string: String,\n append: String\n }\n\n copy() {\n if (this.hasInputTarget) {\n var input_value = this.inputTarget.value; \n }\n \n var prepend_value = this.prependValue;\n var success_value = this.successValue;\n var string_value = this.stringValue;\n var append_value = this.appendValue\n\n if (string_value) {\n var copy_text = string_value;\n } else {\n if (prepend_value && input_value && append_value) {\n var copy_text = prepend_value+input_value+append_value;\n } else if (prepend_value && input_value) {\n var copy_text = prepend_value+input_value;\n } else if (append_value && input_value) {\n var copy_text = input_value+append_value;\n } else {\n var copy_text = input_value;\n }\n }\n\n var input = document.createElement('input');\n input.setAttribute('value', copy_text);\n document.body.appendChild(input);\n input.select();\n var result = document.execCommand('copy');\n document.body.removeChild(input);\n\n if (success_value) {\n this.copyButtonTarget.innerHTML = success_value;\n } else {\n this.copyButtonTarget.innerHTML = \"Copied\"\n }\n \n }\n\n highlight(event) {\n event.target.closest(\"input\").select();\n }\n\n copyRichContent() {\n var rich_content = this.richContentTarget.innerHTML;\n copyRichContentToClipboard(rich_content);\n\n var success_value = this.successValue;\n if (success_value) {\n this.copyButtonTarget.innerHTML = success_value;\n } else {\n this.copyButtonTarget.innerHTML = \"Copied\"\n }\n }\n\n}\n\nfunction copyRichContentToClipboard(str) {\n function listener(e) {\n e.clipboardData.setData(\"text/html\", str);\n e.clipboardData.setData(\"text/plain\", str);\n e.preventDefault();\n }\n document.addEventListener(\"copy\", listener);\n document.execCommand(\"copy\");\n document.removeEventListener(\"copy\", listener);\n};","const RESET_TIMEOUT_MILLIS = 3000;\nconst CONFIRMATION_MESSAGE = 'Are you sure?';\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['link', 'confirmMessageContainer']\n\n connect() {\n this.delete = false;\n }\n\n click(event) {\n if(this.hasLinkTarget) {\n if(this.linkTarget.dataset.linkDisabled === 'true')\n return\n }\n\n let preventRemove = this.element.getAttribute(\"data-prevent-remove\");\n if(this.delete && preventRemove) {\n this.resetState();\n } else if (this.delete && (preventRemove === undefined || preventRemove === null)) {\n this.delete = false;\n this.linkTarget.addEventListener('ajax:success', this.handleSuccess.bind(this))\n this.linkTarget.addEventListener('ajax:error', this.handleError.bind(this))\n } else {\n if (this.hasConfirmMessageContainerTarget) {\n var confirm_container = this.confirmMessageContainerTarget;\n } else {\n var confirm_container = this.linkTarget;\n }\n this.oldMessage = this.linkTarget.innerHTML;\n var custom_confirmation_message = this.element.dataset.confirmationMessage || this.element.dataset.deleteConfirmationMessage;\n if (custom_confirmation_message) {\n confirm_container.innerHTML = custom_confirmation_message\n } else {\n confirm_container.innerHTML = CONFIRMATION_MESSAGE;\n }\n this.delete = true;\n this.timeout = setTimeout(() => {\n this.resetState();\n }, RESET_TIMEOUT_MILLIS);\n event.preventDefault();\n event.stopImmediatePropagation()\n return false;\n }\n }\n\n handleSuccess(event) {\n clearTimeout(this.timeout);\n var messageTemplateId = this.linkTarget.dataset.messageTemplateId;\n if(messageTemplateId)\n return\n this.element.style = 'display: none;';\n\n if (this.element.parentNode) {\n this.element.parentNode.removeChild(this.element);\n }\n }\n\n handleError(event) {\n clearTimeout(this.timeout);\n this.resetState();\n this.element.style = '';\n }\n\n resetState() {\n var message;\n if (this.delete && this.hasLinkTarget) {\n this.linkTarget.removeEventListener('ajax:success', this.handleSuccess.bind(this))\n this.linkTarget.removeEventListener('ajax:error', this.handleError.bind(this))\n if(this.linkTarget.getAttribute('data-old-delete-text')){\n message = this.linkTarget.getAttribute('data-old-delete-text')\n }else{\n message = this.oldMessage;\n }\n this.linkTarget.innerHTML = message;\n this.delete = false;\n }\n }\n \n\n // This action is used specifically in the message creation UI, to discard a recording before saving it\n discardRecording(event) {\n if (this.linkTarget.getAttribute('data-prevent-execution') !== null)\n return\n\n this.click(event);\n this.linkTarget.removeAttribute(\"data-discard-recording\")\n this.linkTarget.setAttribute(\"data-action\", \"click->message--creation#discard_and_re_record\")\n\n setTimeout(() => {\n this.linkTarget.setAttribute(\"data-action\", \"click->delete#discardRecording\")\n }, RESET_TIMEOUT_MILLIS);\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['input', 'linkContainer', 'linkElement']\n \n static values = { \n }\n\n connect() {\n var linkContainer = this.linkContainerTarget;\n var input = this.inputTarget;\n var value = input.value;\n var linkElement = this.linkElementTarget;\n if (linkContainer && value && !(/\\s/.test(value)) && value.includes(\".\") && (value.includes(\"http://\") || value.includes(\"https://\"))) {\n linkContainer.classList.remove(\"hidden\");\n linkElement.href = value;\n linkElement.innerHTML = value;\n }\n }\n\n focusInput() {\n this.linkContainerTarget.classList.add(\"hidden\");\n this.inputTarget.focus();\n }\n\n}","// handles dropdown menus that trigger on click. If you need a hover-based dropdown menu, use dropdown_hover_controller.\n\n// both dropdown controllers offer this system for handling dropdowns that overlap other dropdowns (like on record-listings). \n// How to use:\n// - Set the \"dropdown-hide-overlapped-value\" to \"true\"\n// - Set the \"siblings-group-id\" to an ID shared by all dropdowns in this group (for example, the record-listing.id). This ensures that these siblings won't be hidden when dropdown is open.\n// - Add \"dropdown-overlaps\" class to all other elements that this dropdown may overlap when opened.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['button', 'menu'];\n static values = {\n hideOverlapped: Boolean\n }\n\n toggle(event) {\n var menu = this.menuTarget;\n\n if (this.hideOverlappedValue) {\n var overlappedDropdowns = document.querySelectorAll(\".dropdown-overlaps\");\n var siblingsGroupId = this.element.dataset.siblingsGroupId;\n }\n\n if (menu.classList.contains(\"hidden\")) {\n menu.classList.remove(\"hidden\");\n\n if (overlappedDropdowns) {\n for (let overlappedDropdown of overlappedDropdowns) {\n if (overlappedDropdown !== this.element && overlappedDropdown.dataset.siblingsGroupId !== siblingsGroupId) {\n overlappedDropdown.classList.add(\"hidden\");\n }\n }\n }\n } else {\n menu.classList.add(\"hidden\");\n\n if (overlappedDropdowns) {\n for (let overlappedDropdown of overlappedDropdowns) {\n if (overlappedDropdown !== this.element && overlappedDropdown.dataset.siblingsGroupId !== siblingsGroupId) {\n overlappedDropdown.classList.remove(\"hidden\");\n }\n }\n }\n }\n\n }\n\n hide(event) {\n if (this.element.contains(event.target) === false) {\n this.menuTarget.classList.add(\"hidden\");\n }\n }\n}","// handles dropdown menus that trigger on click. If you need a hover-based dropdown menu, use dropdown_hover_controller.\n\n// both dropdown controllers offer this system for handling dropdowns that overlap other dropdowns (like on record-listings). \n// How to use:\n// - Set the \"dropdown-hide-overlapped-value\" to \"true\"\n// - Set the \"siblings-group-id\" to an ID shared by all dropdowns in this group (for example, the record-listing.id). This ensures that these siblings won't be hidden when dropdown is open.\n// - Add \"dropdown-overlaps\" class to all other elements that this dropdown may overlap when opened.\n\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = ['button', 'menu'];\n static values = {\n hideOverlapped: Boolean\n }\n\n openOnHover() {\n if (this.hideOverlappedValue) {\n var overlappedDropdowns = document.querySelectorAll(\".dropdown-overlaps\");\n var siblingsGroupId = this.element.dataset.siblingsGroupId;\n }\n\n this.menuTarget.classList.remove(\"hidden\");\n this.buttonTarget.classList.add(\"active\");\n\n if (overlappedDropdowns) {\n for (let overlappedDropdown of overlappedDropdowns) {\n if (overlappedDropdown !== this.element && overlappedDropdown.dataset.siblingsGroupId !== siblingsGroupId) {\n overlappedDropdown.classList.add(\"hidden\");\n }\n }\n }\n }\n\n closeOnHoverOut() {\n if (this.hideOverlappedValue) {\n var overlappedDropdowns = document.querySelectorAll(\".dropdown-overlaps\");\n var siblingsGroupId = this.element.dataset.siblingsGroupId;\n }\n\n this.menuTarget.classList.add(\"hidden\");\n this.buttonTarget.classList.remove(\"active\");\n\n if (overlappedDropdowns) {\n for (let overlappedDropdown of overlappedDropdowns) {\n if (overlappedDropdown !== this.element && overlappedDropdown.dataset.siblingsGroupId !== siblingsGroupId) {\n overlappedDropdown.classList.remove(\"hidden\");\n }\n }\n }\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['multiSelectLink'];\n\n toggle(event) {\n var multi_select_link = event.target.closest(\".multi-select-link\");\n if (multi_select_link.classList.contains(\"multi-select-link-active\")) {\n multi_select_link.classList.remove(\"multi-select-link-active\");\n } else {\n multi_select_link.classList.add(\"multi-select-link-active\");\n }\n\n var active_links = this.element.querySelectorAll('.multi-select-link.multi-select-link-active');\n if (active_links.length >= 1) {\n this.element.classList.add(\"multi-select-links-active\");\n } else {\n this.element.classList.remove(\"multi-select-links-active\");\n }\n }\n \n}","import Dropzone from \"dropzone\";\nimport { Controller } from \"stimulus\";\nimport { DirectUpload } from \"@rails/activestorage\";\nimport {\n getMetaValue,\n toArray,\n findElement,\n removeElement,\n insertAfter\n} from \"helpers\";\n\nexport default class extends Controller {\n static targets = [\"input\"];\n\n connect() {\n this.inputTarget.dataset.directUploadUrl = this.inputTarget.dataset.directUploadUrl + '?file_attachment=true';\n this.dropZone = createDropZone(this);\n if (this.hasInputTarget && this.inputTarget.dataset.disableFileInput === 'true') {\n this.dropZone.disable();\n }\n this.hideFileInput();\n this.bindEvents();\n Dropzone.autoDiscover = false; // necessary quirk for Dropzone error in console\n\n // When a user tries to upload a video or audio file via file message type and that file exceed the maxFileSize we display the following error message\n this.dropZone.dictFileTooBig = () => {\n return (file) => { // Return a function that accepts the file\n if (file && (file.type.startsWith('audio/') || file.type.startsWith('video/'))) {\n return \"Looks like you're trying to upload a media file as an attachment. Use the media player upload option instead.\";\n }\n return null; // Return null for default handling\n };\n };\n\n this.dropZone.on('error', (file, message) => {\n if (message.includes(\"File is too big\")) { // Check for the default file too big message\n const customMessage = this.dropZone.dictFileTooBig()(file);\n\n if (customMessage) {\n // Replace the default error message with the custom one\n file.previewElement.querySelector('.dz-error-message span').textContent = customMessage;\n }\n }\n });\n }\n\n editUploadClickHandler(event) {\n if (!event.target.classList.contains('dz-remove-edit-form')) return false\n\n event.target.closest('.dz-preview').remove()\n }\n\n toggleSubmitButton(show = true){\n if(this.dropZone.files.length < 0)\n return\n\n this.inputTarget.setAttribute(\"data-files-length\", this.dropZone.files.length)\n\n var message_form = this.element.closest(\"form\");\n if (!message_form) {\n return\n }\n var submit_button_top = message_form.querySelector(\"#submitBtnTop\");\n var submit_button_bottom = message_form.querySelector(\"#submitBtnBottomContainer\");\n var save_draft_button = message_form.querySelector(\".save-draft-btn\");\n var schedule_button = message_form.querySelector(\".schedule-message-btn\");\n\n if (show) {\n if (submit_button_top) {\n submit_button_top.classList.remove(\"hidden\");\n }\n if (submit_button_bottom) {\n submit_button_bottom.classList.remove(\"hidden\");\n }\n if (save_draft_button) {\n save_draft_button.classList.remove(\"hidden\");\n }\n if (schedule_button) {\n schedule_button.classList.remove(\"hidden\");\n }\n } else {\n if (submit_button_top) {\n submit_button_top.classList.add(\"hidden\");\n }\n if (submit_button_bottom) {\n submit_button_bottom.classList.add(\"hidden\");\n }\n if (save_draft_button) {\n save_draft_button.classList.add(\"hidden\");\n }\n if (schedule_button) {\n schedule_button.classList.add(\"hidden\");\n }\n }\n }\n\n // Private\n hideFileInput() {\n this.inputTarget.disabled = true;\n this.inputTarget.style.display = \"none\";\n }\n\n bindEvents() {\n this.dropZone.on(\"addedfile\", file => {\n setTimeout(() => {\n file.accepted && createDirectUploadController(this, file).start();\n }, 500);\n });\n\n this.dropZone.on(\"removedfile\", file => {\n file.controller && removeElement(file.controller.hiddenInput);\n this.toggleSubmitButton()\n });\n\n this.dropZone.on(\"canceled\", file => {\n file.controller && file.controller.xhr.abort();\n });\n\n this.dropZone.on(\"success\", (file) => {\n this.toggleSubmitButton()\n })\n\n this.dropZone.on('error', (file) => {\n var element = document.getElementsByClassName('dz-error-message')\n length = element.length\n element[length-1].style.display='block'\n element[length-1].style.opacity='1'\n this.toggleSubmitButton(false)\n });\n }\n\n get headers() {\n return { \"X-CSRF-Token\": getMetaValue(\"csrf-token\") };\n }\n\n get url() {\n return this.inputTarget.getAttribute(\"data-direct-upload-url\");\n }\n\n get maxFiles() {\n return this.data.get(\"maxFiles\") || 10;\n }\n\n get maxFileSize() {\n if (this.hasInputTarget && this.inputTarget.dataset.fileInputFrom === 'form') {\n return 50\n }\n return this.data.get(\"maxFileSize\") || 100;\n }\n\n get dictFileTooBig() {\n return this.data.get(\"dictFileTooBig\") || \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\"\n }\n\n get acceptedFiles() {\n if (this.hasInputTarget && this.inputTarget.dataset.fileInputFrom === 'form') {\n\n return JSON.parse(this.inputTarget.dataset.acceptedFileType).join(\",\")\n }\n return this.data.get(\"acceptedFiles\")\n }\n\n get addRemoveLinks() {\n return this.data.get(\"addRemoveLinks\") || true;\n }\n\n get dictDefaultMessage(){\n if (this.hasInputTarget && this.inputTarget.dataset.fileInputFrom === 'form') {\n return \"Drag and drop or click to upload file(s).
Maximum 50MB per file.\"\n }\n return this.data.get(\"dictDefaultMessage\") || \"Drop files here to upload\"\n }\n\n get form() {\n return this.element.closest(\"form\")\n }\n\n}\n\nclass DirectUploadController {\n constructor(source, file) {\n this.directUpload = createDirectUpload(file, source.url, this);\n this.source = source;\n this.file = file;\n }\n\n start() {\n this.file.controller = this;\n this.hiddenInput = this.createHiddenInput();\n this.directUpload.create((error, attributes) => {\n if (error) {\n removeElement(this.hiddenInput);\n this.emitDropzoneError(error);\n } else {\n this.hiddenInput.value = attributes.signed_id;\n this.emitDropzoneSuccess();\n // trigger blur event to check \"validation\" on upload, blurHandler on validation.js\n this.hiddenInput.dispatchEvent(new Event(\"blur\"))\n }\n });\n }\n\n createHiddenInput() {\n const input = document.createElement(\"input\");\n input.type = \"hidden\";\n input.name = this.source.inputTarget.name;\n insertAfter(input, this.source.inputTarget);\n return input;\n }\n\n directUploadWillStoreFileWithXHR(xhr) {\n this.bindProgressEvent(xhr);\n this.emitDropzoneUploading();\n }\n\n bindProgressEvent(xhr) {\n this.xhr = xhr;\n this.xhr.upload.addEventListener(\"progress\", event =>\n this.uploadRequestDidProgress(event)\n );\n }\n\n uploadRequestDidProgress(event) {\n const element = this.source.element;\n const progress = (event.loaded / event.total) * 100;\n findElement(\n this.file.previewTemplate,\n \".dz-upload\"\n ).style.width = `${progress}%`;\n }\n\n emitDropzoneUploading() {\n this.file.status = Dropzone.UPLOADING;\n this.source.dropZone.emit(\"processing\", this.file);\n }\n\n emitDropzoneError(error) {\n this.file.status = Dropzone.ERROR;\n this.source.dropZone.emit(\"error\", this.file, error);\n this.source.dropZone.emit(\"complete\", this.file);\n }\n\n emitDropzoneSuccess() {\n this.file.status = Dropzone.SUCCESS;\n this.source.dropZone.emit(\"success\", this.file);\n this.source.dropZone.emit(\"complete\", this.file);\n }\n}\n\nfunction createDirectUploadController(source, file) {\n return new DirectUploadController(source, file);\n}\n\nfunction createDirectUpload(file, url, controller) {\n return new DirectUpload(file, url, controller);\n}\n\nfunction createDropZone(controller) {\n return new Dropzone(controller.element, {\n url: controller.url,\n headers: controller.headers,\n maxFiles: controller.maxFiles,\n maxFilesize: controller.maxFileSize,\n acceptedFiles: controller.acceptedFiles,\n addRemoveLinks: controller.addRemoveLinks,\n autoQueue: false,\n dictFileTooBig: controller.dictFileTooBig,\n dictDefaultMessage: controller.dictDefaultMessage\n });\n}\n","// This manages custom events sent to Plausible Analytics\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n \n static values = { \n userPresent: Boolean,\n conversationPresent: Boolean\n }\n\n connect() {\n\n // Track the page view\n if (this.userPresentValue == true) {\n fbq('track', 'Page view (logged-in user');\n } else {\n // User is not logged-in\n if (this.conversationPresentValue == true) {\n // Viewing a conversation\n fbq('track', 'Conversation page view (non-logged-in user');\n } else {\n // Not viewing a conversation\n fbq('track', 'Non-conversation page view (non-logged-in user');\n }\n }\n\n // New public account signup\n if (window.location.href.indexOf(\"new_account=true\") > -1) {\n fbq('track', 'Free signup', {type: \"public\"});\n }\n\n // New account signup by a respondent\n if (window.location.href.indexOf(\"new_account_via_resp=true\") > -1) {\n fbq('track', 'Free signup', {type: \"respondent\"});\n }\n\n // New account signup by a respondent\n if (window.location.href.indexOf(\"new_respondent=true\") > -1) {\n fbq('track', 'Respondent registration');\n }\n\n // New paying customer converted\n if (window.location.href.indexOf(\"subscription_success=true\") > -1) {\n fbq('track', 'New paid subscription', {value: 50.00});\n }\n\n }\n\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['optionField'];\n\n oneOptionSelected(event) {\n if (event.target.checked && this.hasOptionFieldTarget) {\n var checkboxes = this.optionFieldTargets;\n for (let checkbox of checkboxes) {\n if (event.target !== checkbox) {\n checkbox.checked = false;\n }\n }\n }\n }\n}","// Used for handling single-file upload fields with a drag and drop area.\n// If we need a multi-file upload area, use dropzone.\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['dropArea', 'input', 'filesList', 'templateFileElement', 'mobileLabel'];\n\n dragOver(event) {\n event.preventDefault();\n this.dropAreaTarget.classList.add(\"border-gray-400\");\n }\n\n dragLeave(event) {\n event.preventDefault();\n this.dropAreaTarget.classList.remove(\"border-gray-400\");\n }\n\n inputFiles(event) {\n event.preventDefault();\n this.filesListTarget.classList.remove(\"hidden\");\n\n if (event.dataTransfer) { // file was dropped into the drop area on desktop\n var files = event.dataTransfer.files;\n } else { // label was clicked and user browsed and selected file(s)\n var files = event.target.files;\n if (this.hasMobileLabelTarget) {\n this.mobileLabelTarget.innerHTML = \"Media is ready to save...\"\n }\n }\n\n var templateFileElement = this.templateFileElementTarget;\n\n this.inputTarget.files = files;\n \n // Since we've already selected the 1 file to upload, hide the drop area\n this.dropAreaTarget.classList.add(\"hidden\");\n\n // Show the selected file\n templateFileElement.querySelector(\".filename\").innerHTML = files[0].name;\n templateFileElement.classList.remove(\"hidden\");\n }\n\n removeFile(event) {\n var oldFilesList = this.inputTarget.files;\n var fileElementToRemove = event.target.closest(\".file\");\n var fileNameToRemove = fileElementToRemove.dataset.fileName;\n\n // Create a DataTransfer to transfer the files from the oldFilesList to the new\n const dT = new DataTransfer();\n for (let file of oldFilesList) {\n if (file.name != fileNameToRemove) {\n dT.items.add(new File(['name'], file.name));\n }\n }\n\n // Replace the old input with the new\n this.replaceInput();\n var newInput = this.element.querySelector(\"input[data-file-uploads-target='input']\");\n\n // Set the new input's fileList to dT.files\n newInput.files = dT.files;\n console.log(newInput.files);\n\n // Remove the file element from the DOM\n fileElementToRemove.remove();\n\n // If we've removed the only file, hide the files list\n if (newInput.files.length == 0) {\n this.filesListTarget.classList.add(\"hidden\");\n }\n }\n\n resetField(event) {\n this.replaceInput();\n // Show the drop area and the hide the files list to reset\n this.filesListTarget.classList.add(\"hidden\");\n this.dropAreaTarget.classList.remove(\"hidden\");\n }\n\n replaceInput() {\n // Clear the file(s) from the input by replacing the old input with a new one with all the same attributes\n var oldInput = this.inputTarget;\n var newInput = document.createElement(\"input\"); \n for (let attribute of oldInput.attributes) {\n newInput.setAttribute(attribute.nodeName ,attribute.nodeValue);\n }\n oldInput.insertAdjacentElement(\"afterend\", newInput);\n oldInput.remove();\n }\n\n}","import {Controller} from \"stimulus\";\n\nexport default class extends Controller {\n\n static targets = [\"label\", \"fieldName\", \"optionSelectType\"];\n\n connect() {\n }\n\n validateFieldName() {\n var labelValue = this.labelTarget.value.toLowerCase().replace(/\\s/g, '_').replace(/[^\\w]/g, '');\n this.fieldNameTarget.value = labelValue;\n }\n\n displayFields(event) {\n var selected_option = event.target.value;\n var toggleable = document.querySelector(\".form-field-fields\");\n if (toggleable) {\n var values = toggleable.dataset.toggleWhenSelected.split(' ');\n if (values.includes(selected_option)) {\n toggleable.classList.remove(\"hidden\");\n } else {\n toggleable.classList.add(\"hidden\");\n }\n }\n if (selected_option === 'selection') {\n this.revealSelectOptionsField();\n }\n this.resetSelectOptionsValue(event);\n\n // Focus on the label field\n var label_field = this.element.querySelector(\"input#form_field_label\");\n if (label_field) {\n label_field.focus();\n }\n }\n\n revealSelectOptionsField() {\n var select = document.querySelector(\".select-options-field\");\n if (select) {\n if (this.optionSelectTypeTarget.value === 'selection_dropdown') {\n select.classList.remove(\"hidden\");\n } else {\n select.classList.add(\"hidden\");\n }\n }\n }\n\n resetSelectOptionsValue(event) {\n var selected_option = event.target.value;\n var selectOptionsContainer = document.querySelector(\".select-options-container\");\n var multiSelectOptionsContainer = document.querySelector(\".select-options-container.multi-select\");\n var selectOptionFields = selectOptionsContainer.querySelectorAll('.select-option-field');\n var multiSelectOptionFields = multiSelectOptionsContainer.querySelectorAll('.select-option-field');\n if (selected_option === 'selection') {\n if (multiSelectOptionFields) {\n if (multiSelectOptionFields.length > 1) {\n for (let i = 1; i < multiSelectOptionFields.length; i++) {\n multiSelectOptionFields[i].remove();\n }\n }\n if (multiSelectOptionFields[0].querySelector(\"input[type='text']\"))\n multiSelectOptionFields[0].querySelector(\"input[type='text']\").value = '';\n\n\n }\n\n } else if (selected_option === 'multi_select') {\n if (selectOptionFields) {\n if (selectOptionFields.length > 1) {\n for (let i = 1; i < selectOptionFields.length; i++) {\n selectOptionFields[i].remove();\n }\n }\n if (selectOptionFields[0].querySelector(\"input[type='text']\"))\n selectOptionFields[0].querySelector(\"input[type='text']\").value = '';\n }\n }\n }\n\n\n deleteSelectOption(event) {\n event.target.closest(\".select-option-field\").remove();\n this.updateSelectOptionOrderFields();\n }\n\n moveUpSelectOptions(event) {\n this.moveSelectOption(event, -1); // Move up by decreasing index\n }\n\n moveDownSelectOptions(event) {\n this.moveSelectOption(event, 1); // Move down by increasing index\n }\n\n\n moveSelectOption(event, direction) {\n var selectOptionFieldContainer = event.target.closest(\".select-options-container\");\n var selectOptionField = event.target.closest(\".select-option-field\");\n\n const allSelectOptionFields = Array.from(selectOptionFieldContainer.querySelectorAll(\".select-option-field\"));\n\n const currentIndex = allSelectOptionFields.indexOf(selectOptionField);\n\n if (currentIndex === -1) {\n return; // Stop if the field is not found\n }\n\n const newIndex = currentIndex + direction;\n\n if (newIndex < 0 || newIndex >= allSelectOptionFields.length) {\n return; // Stop if the item is already at the first or last position\n }\n\n const targetOption = allSelectOptionFields[newIndex];\n\n if (direction === -1) {\n selectOptionFieldContainer.insertBefore(selectOptionField, targetOption);\n this.updateSelectOptionOrderFields();\n } else {\n selectOptionFieldContainer.insertBefore(targetOption, selectOptionField);\n this.updateSelectOptionOrderFields();\n }\n }\n\n updateSelectOptionOrderFields() {\n const selectOptionFieldContainer = event.target.closest(\".select-options-container\");\n const allSelectOptionFields = Array.from(selectOptionFieldContainer.querySelectorAll(\".select-option-field\"));\n\n allSelectOptionFields.forEach((selectOptionField, index) => {\n const orderField = selectOptionField.querySelector(\".select-option-order-field\");\n\n if (orderField) {\n orderField.value = index + 1; // Assuming index starts from 1 for user display\n }\n });\n }\n\n\n updateDefault(event) {\n const selectOptionFieldContainer = event.target.closest(\".select-options-container\");\n const multiSelectOptionFieldContainer = event.target.closest(\".select-options-container.multi-select\");\n if (multiSelectOptionFieldContainer) return;\n var allSelectOptionFields = Array.from(selectOptionFieldContainer.querySelectorAll(\".select-option-field\"));\n allSelectOptionFields = allSelectOptionFields.filter((selectOptionField) => selectOptionField !== event.target.closest(\".select-option-field\"));\n allSelectOptionFields.forEach((selectOptionField) => {\n const toggleSwitch = selectOptionField.querySelector(\".select-option-default-toggle\");\n if (toggleSwitch) {\n toggleSwitch.querySelector('input').value = false;\n toggleSwitch.dataset.toggleSwitchActiveValue = false;\n toggleSwitch.classList.remove(\"active\");\n toggleSwitch.querySelector(\"button\").classList.remove('bg-primary-600')\n toggleSwitch.querySelector(\"button\").classList.add('bg-gray-200')\n }\n\n });\n }\n}\n","import {Controller} from \"stimulus\";\n\nexport default class extends Controller {\n\n static targets = [\"accountUserEmailSubject\", \"multiSelectHiddenField\"]\n\n connect() {\n if (this.hasMultiSelectHiddenFieldTarget) {\n this.updateHiddenField();\n }\n }\n\n revealEmailSubjectField() {\n var notifyAccountUsers = document.querySelectorAll(\".notify-account-users\");\n var canDisplayField = false;\n if (notifyAccountUsers) {\n document.querySelectorAll(\".notify-account-users input:checked\").forEach(checkbox => {\n canDisplayField = true;\n });\n this.accountUserEmailSubjectTarget.classList.toggle(\"hidden\", !canDisplayField);\n }\n }\n\n updateHiddenField(){\n const selectedOptions = this.element.querySelectorAll('input[type=\"checkbox\"]:checked');\n const selectedValues = Array.from(selectedOptions).map(option => option.value);\n this.multiSelectHiddenFieldTarget.value = JSON.stringify(selectedValues);\n }\n}","import {Controller} from \"stimulus\";\n\nexport default class extends Controller {\n\n connect() {\n this.refreshCloudflareToken()\n this.refreshGoogleRecaptchaToken()\n }\n refreshCloudflareToken(){\n const turnstileElements = this.element.querySelectorAll(\".cf-turnstile\");\n turnstile.ready(function () {\n turnstileElements.forEach(element => {\n element.innerHTML = \"\"\n turnstile.render(element, {\n sitekey: element.dataset.sitekey,\n callback: function (token) {\n console.log(`Turnstile verification Success`);\n }\n });\n });\n });\n }\n\n refreshGoogleRecaptchaToken() {\n console.log('entered')\n const recaptchaElements = document.querySelectorAll(\".g-recaptcha\");\n recaptchaElements.forEach(element => {\n setTimeout(function() {\n grecaptcha.ready(function() {\n setTimeout(function() {\n grecaptcha.render(element, {\n 'sitekey': element.dataset.sitekey,\n callback: function (token) {\n console.log(`Recaptcha verification Success`);\n }\n });\n }, 1000);\n });\n }, 1000);\n });\n }\n}","import {Controller} from \"stimulus\";\n\nexport default class extends Controller {\n\n connect() {\n }\n\n revealFormFields(event){\n var selectedFormId = event.target.value;\n var reveal_form_url = '/reveal_form_block/?form_id=' + selectedFormId\n\n Rails.ajax({\n type: \"get\",\n url: reveal_form_url,\n })\n }\n}","// This manages Google Tag Manager's DataLayer.\n// Use the actions in this controller to push data into the DataLayer, which is injested by GTM and can then be pushed to other services, such as Google Analytics 4, etc.\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n \n static targets = [\"conversationPage\"];\n\n static values = {\n userId: Number\n }\n\n connect() {\n \n // Custom page_view event\n window.dataLayer = window.dataLayer || []; \n if (this.hasConversationPageTarget) {\n window.dataLayer.push({\n \"event\": \"page_view\",\n \"conversation_page\": true,\n \"logged_in_user\": this.hasUserIdValue\n });\n } else {\n window.dataLayer.push({\n \"event\": \"page_view\",\n \"conversation_page\": false,\n \"logged_in_user\": this.hasUserIdValue\n });\n }\n \n\n // GA4 Event - identify_user\n // Fires on every page load where current_user is defined\n if (this.hasUserIdValue) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"identify_user\",\n \"user_id\": this.userIdValue\n });\n }\n\n\n // GA4 Event - respondent_registration\n // Fires when someone registers as a respondent user.\n if (window.location.href.indexOf(\"new_respondent=true\") > -1) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"respondent_registration\",\n \"user_id\": this.userIdValue\n });\n }\n\n\n // GA4 Event - sign_up (public)\n // Fires when a user signs up for a new free account via our public signup form\n // Does not fire when a respondent creates an account from within the app\n // Does not fire when a logged-in user creates an additional new account\n if (window.location.href.indexOf(\"new_account=true\") > -1) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"sign_up\",\n \"user_id\": this.userIdValue,\n \"converted_from_respondent\": false\n });\n }\n\n\n // GA4 Event - sign_up (converted from respondent)\n // Fires when a user signs up for a new free account via the /try_zipmessage page, which they access after they're logged-in as a respondent user.\n if (window.location.href.indexOf(\"new_account_via_resp=true\") > -1) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"sign_up\",\n \"user_id\": this.userIdValue,\n \"converted_from_respondent\": true\n });\n }\n\n\n // GA4 Event - activated_paid_subscription\n // Fires after user converts from free to paid\n if (window.location.href.indexOf(\"subscription_success=true\") > -1) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"activated_paid_subscription\",\n \"user_id\": this.userIdValue\n });\n }\n\n\n // GA4 Event - upgraded_subscription_plan\n // Fires after user converts from Basic plan to Premium plan\n if (window.location.href.indexOf(\"upgraded_plan=true\") > -1) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"upgraded_subscription_plan\",\n \"user_id\": this.userIdValue\n });\n }\n\n\n // GA4 Event - invited_teammember\n // Fires after user sends a team member invitation\n if (window.location.href.indexOf(\"send_invite_event=true\") > -1) {\n window.dataLayer = window.dataLayer || []; \n window.dataLayer.push({\n \"event\": \"invited_teammember\",\n \"user_id\": this.userIdValue\n });\n }\n\n \n\n \n // Google Tag Manager\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','GTM-PXC2VCW');\n\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"output\", \"input\", \"hiddenButton\" ]\n\n updateImage() {\n var input = this.inputTarget;\n var output = this.outputTarget;\n\n if (input.files && input.files[0]) {\n var reader = new FileReader();\n\n reader.onload = function () {\n output.src = reader.result;\n }\n\n reader.readAsDataURL(input.files[0]);\n }\n\n if (this.hasHiddenButtonTarget) {\n this.hiddenButtonTarget.classList.remove(\"hidden\");\n }\n }\n\n revealImagePreview() {\n this.outputTarget.classList.remove(\"hidden\");\n }\n\n}","// Load all the controllers within this directory and all subdirectories.\n// Controller files must be named *_controller.js.\n\nimport { Application } from \"stimulus\"\nimport { definitionsFromContext } from \"stimulus/webpack-helpers\"\n\n// AppSignal\nimport Appsignal from \"@appsignal/javascript\"\nimport { plugin } from \"@appsignal/plugin-window-events\"\n\nconst application = Application.start()\n\nconst context = require.context(\"controllers\", true, /_controller\\.js$/)\napplication.load(definitionsFromContext(context))\n\ntry {\n if(process.env.APPSIGNAL_FRONTEND_KEY) {\n window.appsignal = new Appsignal({\n key: process.env.APPSIGNAL_FRONTEND_KEY\n })\n\n const options = {\n onerror: true,\n onunhandledrejection: true\n };\n\n window.appsignal.use(plugin(options));\n }\n} catch (e) {\n console.log(e)\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n static targets = [\"embedCodeInput\"]\n\n connect() {\n }\n\n // When user obtains the intake page embed code, they can toggle ?show_headline off/on in the src URL using this action\n toggleHeadline(event) {\n var input = this.embedCodeInputTarget;\n var input_value = input.value;\n var copy_element = this.element.querySelector(\"div[data-copy-string-value]\");\n\n // If show_headline is present, remove it.\n if (input_value.includes(\"show_headline=true\")) {\n input.value = input_value.replace(\"?show_headline=true\", \"\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(\"?show_headline=true\", \"\"); // replace the copy element data attr\n } else { // show_headline is not present, so add it.\n var src_index = input_value.indexOf(\"src='\") + 5;\n var src_value = input_value.substring(src_index, input_value.indexOf(\"'\", src_index));\n input.value = input_value.replace(src_value, src_value+\"?show_headline=true\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(src_value, src_value+\"?show_headline=true\"); // replace the copy element data attr\n }\n\n }\n\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n\n connect() {\n }\n\n updateTagIds(event) {\n var intakePageId = event.target.dataset.intakePageId;\n if (event.target.value) {\n Rails.ajax({\n type: \"patch\",\n url: '/setup_tags?id=' + intakePageId + '&tag_id=' + event.target.value\n })\n }\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['input', 'slackChannel', 'channelOption']\n\n toggle(event) {\n var slack_channel_div = event.target.closest(\".slack-username\");\n var channel = slack_channel_div.dataset.channel;\n\n this.slackChannelTarget.value = \"\";\n\n if(this.hasChannelOptionTarget) {\n for (let channelOption of this.channelOptionTargets) {\n channelOption.classList.remove(\"mention-enabled\");\n }\n }\n\n slack_channel_div.classList.add(\"mention-enabled\");\n this.slackChannelTarget.value = channel;\n\n this.element.querySelector(\".slack-mentions-submit-button\").classList.remove(\"hidden\");\n\n }\n\n}","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['name', 'description']\n\n static values = {}\n\n connect() {\n }\n\n changeDefaultToggleLabel(event) {\n var invitationType = event.target.value\n var toggleLabel = document.querySelector('#invitation-template-invitation-type')\n if (toggleLabel) {\n if (invitationType === 'space_conversation') {\n var invitationTypeValue = 'group_conversation'\n } else if (invitationType === 'space_membership') {\n var invitationTypeValue = 'group_membership'\n } else if (invitationType === 'program_enrollment') {\n var invitationTypeValue = 'course_enrollment'\n } else {\n var invitationTypeValue = invitationType\n }\n toggleLabel.innerText = invitationTypeValue.replace(/_/g, ' ')\n }\n if (this.hasNameTarget && this.hasDescriptionTarget) {\n var namePlaceholders = this.nameTarget.dataset.placeholders\n var descPlaceholders = this.descriptionTarget.dataset.placeholders\n\n // Parse the placeholders JSON string to an object\n var namePlaceholdersObj = JSON.parse(namePlaceholders)\n var descPlaceholdersObj = JSON.parse(descPlaceholders)\n\n // Update the placeholder of the name field\n if (this.hasNameTarget && namePlaceholdersObj.hasOwnProperty(invitationType)) {\n this.nameTarget.placeholder = namePlaceholdersObj[invitationType]\n }\n\n // Update the placeholder of the description field\n if (this.hasDescriptionTarget && descPlaceholdersObj.hasOwnProperty(invitationType)) {\n this.descriptionTarget.placeholder = descPlaceholdersObj[invitationType]\n }\n }\n }\n}","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['searchContactsInput',\n 'newInviteLinkContainer',\n 'newInviteLink',\n 'invitingTeammemberField']\n\n static values = { \n canInviteTeamMembers: Boolean,\n atTeamMemberLimit: Boolean\n }\n\n updateNewInvitationLinkUrl(event) {\n var search_contacts_input = this.searchContactsInputTarget;\n var new_invite_link = this.newInviteLinkTarget;\n var input_value_encoded = encodeURIComponent(search_contacts_input.value);\n var new_invite_link_url = new_invite_link.href;\n\n // if new_invite_link_url has a query parameter input_value, then update that parameter with the value of the search query.\n // Otherwise add it.\n if (new_invite_link_url.includes(\"?\")) {\n var new_invite_link_url_no_query_string = new_invite_link_url.split(\"?\")[0];\n var new_invite_link_url_query_string = new_invite_link_url.split(\"?\")[1];\n var new_invite_link_url_query_params = new_invite_link_url_query_string.split(\"&\");\n var new_invite_link_url_query_params_without_input_value = new_invite_link_url_query_params.filter(param => !param.includes(\"input_value=\"));\n new_invite_link_url_query_params_without_input_value.push(\"input_value=\" + input_value_encoded);\n new_invite_link.href = new_invite_link_url_no_query_string + \"?\" + new_invite_link_url_query_params_without_input_value.join(\"&\");\n } else {\n new_invite_link.href = new_invite_link_url+ \"?input_value=\" + input_value_encoded;\n }\n }\n\n toggleInviteeType(event) {\n var radios_group = event.target.closest('.radios-group');\n var guest_radio = radios_group.querySelector('.radio-field[data-value=\"guest\"]');\n var team_member_radio = radios_group.querySelector('.radio-field[data-value=\"team_member\"]');\n var invitee_type = event.target.closest('.radio-field').dataset.value;\n var inviting_teammember_field = this.invitingTeammemberFieldTarget;\n\n if (invitee_type == \"team_member\") {\n if (this.canInviteTeamMembersValue == false) {\n this.element.querySelector(\"#cant-invite-team-members\").classList.remove(\"hidden\");\n } else {\n if (this.atTeamMemberLimitValue == true) {\n this.element.querySelector(\"#team-member-cost-alert\").classList.remove(\"hidden\");\n }\n inviting_teammember_field.value = \"true\";\n team_member_radio.classList.add('active');\n guest_radio.classList.remove('active');\n }\n } else {\n inviting_teammember_field.value = \"false\";\n guest_radio.classList.add('active');\n team_member_radio.classList.remove('active');\n }\n }\n\n initiateNewInvitation(event) {\n if (event.keyCode == 13) { // return key code is 13. Only run if that was pressed.\n\n // Only proceed if the newInviteLink is currently visible (means there are no search results and user has inputted name or email of a new person to invite)\n var new_invite_link_container = this.newInviteLinkContainerTarget;\n if (!new_invite_link_container.classList.contains('hidden')) {\n this.newInviteLinkTarget.click();\n }\n }\n }\n\n}","import {Controller} from \"stimulus\";\nimport camera_media_stream from \"../message/media_streams/camera_media_stream\";\nimport audio_media_stream from \"../message/media_streams/audio_media_stream\";\n\nexport default class extends Controller {\n static targets = [\n \"emailField\",\n \"passwordField\",\n \"turnOnCameraBtn\",\n \"turnOnMicBtn\",\n \"cameraCheck\",\n \"micCheck\",\n \"camChecked\",\n \"camNotChecked\",\n \"micChecked\",\n \"micNotChecked\",\n \"cameraInstruction\",\n \"micInstruction\",\n \"camSelectors\",\n \"selectAudioSource\",\n \"selectVideoSource\",\n \"preview\",\n \"camMicSelectors\",\n \"micSelectorsContainer\",\n \"troubleshootModal\",\n \"welcomeMessageTypeField\",\n ];\n\n static values = {};\n\n connect() {\n function mobile_screen() {\n var mq = window.matchMedia(\"(max-width: 640px)\");\n if (mq.matches) {\n return true;\n } else {\n return false;\n }\n }\n\n if (mobile_screen() && window.location.href.includes(\"devices\")) {\n window.location.href = this.element.dataset.mobileRedirectTo;\n }\n\n if (this.hasEmailFieldTarget) {\n var email_field = this.emailFieldTarget;\n if (email_field.value == \"\") {\n var urlParams = new URLSearchParams(window.location.search);\n var viewer = urlParams.get(\"viewer\");\n if (viewer) {\n email_field.value = viewer;\n this.passwordFieldTarget.focus();\n } else {\n email_field.focus();\n }\n }\n }\n }\n\n initiateDeviceSelection() {\n if (event.target.dataset.device === \"camera\") {\n this.turnOnCameraBtnTarget.classList.add(\"hidden\");\n this.cameraInstructionTarget\n .querySelector(\".authorization-instruction\")\n .classList.add(\"hidden\");\n this.cameraInstructionTarget\n .querySelector(\".selection-instruction\")\n .classList.remove(\"hidden\");\n this.selectVideoSourceTarget.classList.remove(\"hidden\");\n this.previewStream(\"camera\");\n } else if (event.target.dataset.device === \"mic\") {\n this.turnOnMicBtnTarget.classList.add(\"hidden\");\n this.selectAudioSourceTarget.classList.remove(\"hidden\");\n this.micSelectorsContainerTarget.classList.add(\"active\");\n this.micInstructionTarget\n .querySelector(\".authorization-instruction\")\n .classList.add(\"hidden\");\n this.micInstructionTarget\n .querySelector(\"#mic-check-message\")\n .classList.remove(\"hidden\");\n this.previewStream(\"mic\");\n }\n }\n\n previewStream(device) {\n var cameraButton = document.querySelector(\n 'div[data-message--kickoff-recording-target=\"cameraButton\"]'\n );\n var micButton = document.querySelector(\n 'div[data-message--kickoff-recording-target=\"micButton\"]'\n );\n\n if (device === \"camera\") {\n this.stop();\n this.selectAudioSourceTarget.classList.add(\"hidden\");\n camera_media_stream.call(this);\n this.previewTarget.classList.remove(\"hidden\");\n this.camNotCheckedTarget.classList.add(\"hidden\");\n this.camCheckedTarget.classList.remove(\"hidden\");\n this.micNotCheckedTarget.classList.add(\"hidden\");\n this.micCheckedTarget.classList.add(\"hidden\");\n } else if (device === \"mic\") {\n this.stop();\n this.selectVideoSourceTarget.classList.add(\"hidden\");\n audio_media_stream.call(this);\n this.previewTarget.classList.add(\"hidden\");\n this.camNotCheckedTarget.classList.add(\"hidden\");\n this.camCheckedTarget.classList.add(\"hidden\");\n this.micNotCheckedTarget.classList.add(\"hidden\");\n this.micCheckedTarget.classList.remove(\"hidden\");\n }\n }\n\n stop() {\n // stop stream\n if (window.stream) {\n window.stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n\n if (window.streamArr) {\n window.streamArr.forEach((stream) => {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n });\n\n window.streamArr = [];\n }\n }\n\n continueToMicCheck() {\n this.stop();\n this.cameraCheckTarget.classList.add(\"hidden\");\n this.micCheckTarget.classList.remove(\"hidden\");\n this.camNotCheckedTarget.classList.add(\"hidden\");\n this.camCheckedTarget.classList.add(\"hidden\");\n this.micNotCheckedTarget.classList.remove(\"hidden\");\n this.micCheckedTarget.classList.add(\"hidden\");\n }\n\n mediaError(error) {\n var troubleshootModal = this.troubleshootModalTarget;\n var jsError = document.querySelector(\"#troubleshootJsError\");\n\n if (troubleshootModal) troubleshootModal.click(); // open modal\n\n if (jsError) jsError.innerText = error.name;\n }\n\n toggleOnboardingStep(event) {\n console.log(\"toggleOnboardingStep\");\n var onboardingStepContainer = event.target.closest(\".onboarding-step\");\n console.log(onboardingStepContainer);\n var toggleSubContent = onboardingStepContainer.querySelector(\n \".toggle-step-content\"\n );\n console.log(toggleSubContent);\n\n if (onboardingStepContainer.classList.contains(\"disabled\")) {\n console.log(\n \"currently disabled. We will remove .disabled class from container.\"\n );\n onboardingStepContainer.classList.remove(\"disabled\");\n onboardingStepContainer.classList.remove(\"hide-sub-content\");\n if (toggleSubContent) {\n console.log(\"unhide toggleSubContent\");\n toggleSubContent.classList.remove(\"hidden\");\n }\n } else {\n console.log(\n \"currently enabled. We will add .disabled class to container.\"\n );\n onboardingStepContainer.classList.add(\"disabled\");\n onboardingStepContainer.classList.add(\"hide-sub-content\");\n if (toggleSubContent) {\n console.log(\"hide toggleSubContent\");\n toggleSubContent.classList.add(\"hidden\");\n }\n }\n }\n\n toggleOnboardingStepContent(event) {\n var onboardingStepContainer = event.target.closest(\".onboarding-step\");\n\n if (onboardingStepContainer.classList.contains(\"hide-sub-content\")) {\n onboardingStepContainer.classList.remove(\"hide-sub-content\");\n } else {\n onboardingStepContainer.classList.add(\"hide-sub-content\");\n }\n }\n\n toggleWelcomeMessageType(event) {\n var radiosGroup = event.target.closest(\".radios-group\");\n var radioContainer = event.target.closest(\".radio-field\");\n var label = event.target.closest(\"label\");\n\n // Update the WelcomeMessageType field\n if (!radioContainer.classList.contains(\"active\")) {\n // Deactivate the currently active radio\n var currentActiveRadio = radiosGroup.querySelector(\".radio-field.active\");\n currentActiveRadio.classList.remove(\"active\");\n\n // Activate this radio\n radioContainer.classList.add(\"active\");\n\n // Update the field value\n this.welcomeMessageTypeFieldTarget.value = radioContainer.dataset.value;\n }\n\n // Reveal the fields for the selected message type\n var genericWelcomeMessage = document.querySelector(\n \"#generic-welcome-message\"\n );\n var messageTemplateWelcomeMessage = document.querySelector(\n \"#message-template-welcome-message\"\n );\n var customWelcomeMessage = document.querySelector(\n \"#custom-welcome-message\"\n );\n if (radioContainer.dataset.value == \"generic\") {\n genericWelcomeMessage.classList.remove(\"hidden\");\n messageTemplateWelcomeMessage.classList.add(\"hidden\");\n customWelcomeMessage?.classList.add(\"hidden\");\n } else if (radioContainer.dataset.value == \"message_template\") {\n genericWelcomeMessage.classList.add(\"hidden\");\n messageTemplateWelcomeMessage.classList.remove(\"hidden\");\n customWelcomeMessage?.classList.add(\"hidden\");\n } else {\n // 'custom'\n genericWelcomeMessage.classList.add(\"hidden\");\n messageTemplateWelcomeMessage.classList.add(\"hidden\");\n customWelcomeMessage?.classList.remove(\"hidden\");\n }\n }\n\n openRecordWelcomeMessageModal() {\n document\n .querySelector(\"#record-welcome-message-modal\")\n .classList.remove(\"hidden\");\n }\n\n ShowSpaceNote(event) {\n var params = new URLSearchParams({\n conversation_id: event.target.value,\n invitation_id: event.target.dataset.invitationId,\n multi_use_invitation_id: event.target.dataset.multiUseInvitationId,\n });\n\n fetch(`/showing_space_details?${params}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/js\",\n },\n }).then(function (result) {\n result.text().then(function (val) {\n return eval(val);\n });\n });\n }\n\n updateProceedsTo(event) {\n var step_content = event.target.closest(\".onboarding-step-content\");\n var step_title = step_content.querySelector(\".onboarding-step-title\");\n var select_field = event.target.closest('select');\n var selected_option = event.target.value;\n var selected_text = select_field.querySelector(`option[value='${selected_option}']`).innerHTML;\n\n // make the first letter of selected_text lowercase\n var updated_destination_text = selected_text.charAt(0).toLowerCase() + selected_text.slice(1);\n\n step_title.innerHTML = \"Proceeds to \" + updated_destination_text;\n }\n}\n\nfunction validateEmail(email) {\n var re = /\\S+@\\S+\\.\\S+/;\n return re.test(email);\n}\n","export default class search_methods {\n\n async get_search_results(path) {\n var results = fetch(path, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then((response) => {\n return response.json();\n }).then((json) => {\n if (json.search_results_found === true) {\n return json.search_results\n }\n }).catch((error) => {\n console.log(error)\n error.json().then(errorMessage => {\n console.log(errorMessage)\n })\n })\n\n return results\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['accountsList']\n\n connect() {\n // Focus the first acount in the list, if the list is present\n if (this.hasAccountsListTarget) {\n this.accountsListTarget.querySelector(\"a\").focus();\n }\n }\n\n navigate_accounts(event) {\n if (this.hasAccountsListTarget) {\n var account_links = Array.from(this.accountsListTarget.querySelectorAll(\"a\"));\n var focused_account = this.accountsListTarget.querySelector(\"a:focus\");\n var i = 0;\n\n if (event.keyCode == 38) { // UP key is pressed\n event.preventDefault();\n if (focused_account) {\n i = account_links.indexOf(focused_account);\n if (i == 0) {\n } else {\n i = i - 1;\n account_links[i].focus();\n }\n } else {\n account_links[i].focus();\n }\n }\n if (event.keyCode == 40) { // DOWN key is pressed\n event.preventDefault();\n if (focused_account) {\n i = account_links.indexOf(focused_account);\n if (i == account_links.length - 1) {\n this.searchInputTarget.focus();\n } else {\n i = i + 1;\n account_links[i].focus();\n }\n } else {\n account_links[i].focus();\n }\n }\n }\n }\n\n}","import {Controller} from \"stimulus\"\nimport Tribute from \"tributejs\"\nimport Trix from \"trix\"\n\nexport default class extends Controller {\n static targets = [\"field\"]\n static values = {\n searchScope: String, conversationId: Number, currentUserContactId: Number\n }\n\n\n connect() {\n this.editor = this.fieldTarget.editor\n this.initializeTribute()\n }\n\n disconnect() {\n this.tribute.detach(this.fieldTarget)\n }\n\n initializeTribute() {\n var searchScope = this.searchScopeValue\n var conversationId = this.conversationIdValue\n var currentUserContactId = this.currentUserContactIdValue\n\n this.tribute = new Tribute({\n lookup: 'name', menuItemTemplate: function (item) {\n return `${item.original.content}`\n }, values: function fetchUsers(text, callback) {\n fetch(`/users/mentions.json?query=${text}&search_scope=${searchScope}&conversation_id=${conversationId}¤t_user_contact_id=${currentUserContactId}`)\n .then(response => response.json())\n .then(users => callback(users))\n .catch(error => callback([]))\n }, menuItemLimit: 10\n\n })\n this.tribute.attach(this.fieldTarget)\n this.fieldTarget.addEventListener(\"tribute-replaced\", this.replaced)\n this.tribute.range.pasteHtml = this._pasteHtml.bind(this)\n }\n\n replaced(e) {\n let mention = e.detail.item.original\n let attachment = new Trix.Attachment({\n sgid: mention.sgid, content: mention.content, contentType: 'application/vnd.my-application.mention'\n })\n this.editor.insertAttachment(attachment)\n this.editor.insertString(\" \")\n }\n\n _pasteHtml(html, startPos, endPos) {\n let range = this.editor.getSelectedRange()\n let position = range[0]\n let length = endPos - startPos\n\n this.editor.setSelectedRange([position - length, position])\n this.editor.deleteInDirection(\"backward\")\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"downloadInstruction\", \"uploadInstruction\"]\n\n static values = {\n }\n\n connect() {\n var new_message_form = document.querySelector(\"#new_message\");\n if (!new_message_form) { // it's an intake page\n new_message_form = document.querySelector(\"#new-conversation\");\n }\n var download_button = new_message_form.querySelector(\".more-controls-buttons #downloadBtn\");\n\n if (!download_button.classList.contains(\"hidden\")) {\n this.downloadInstructionTarget.classList.remove(\"hidden\");\n this.uploadInstructionTarget.classList.remove(\"hidden\");\n\n // Number the steps apprioriately\n var steps = this.element.querySelectorAll(\".clarityflow-login-instruction-step\");\n var counter = 1;\n for (let step of steps) {\n if (!step.classList.contains(\"hidden\")) {\n step.querySelector(\".clarityflow-login-step-number\").innerHTML = counter;\n counter++;\n }\n }\n }\n }\n\n downloadRecording() {\n var new_message_form = document.querySelector(\"#new_message\");\n if (!new_message_form) { // it's an intake page\n new_message_form = document.querySelector(\"#new-conversation\");\n }\n var download_button = new_message_form.querySelector(\".more-controls-buttons #downloadBtn\");\n download_button.click();\n }\n\n}","export default class DetectAudioLevel {\n\n detectAudioLevel(stream, meterId, camMicSelectorsTarget, messageUITarget) {\n var audioContext;\n var meter;\n var mediaStreamSource;\n var audioMeter = camMicSelectorsTarget.querySelector('#' + meterId)\n var WIDTH = audioMeter.width;\n var HEIGHT = audioMeter.height;\n var canvasContext = audioMeter.getContext(\"2d\");\n var maxWidth = WIDTH * 1.8;\n var preRecAudioThresholdReached = false; // flag to identify if the audio threshold is reached in pre-recording state\n var recStateAudioThresholdReached = false; // flag to identify if the audio threshold is reached in recording state\n var recordingStateFlag = false;\n var audioInternalTimer = 4000;\n var audioLevelSet = false;\n var micCheckMessage = document.querySelector('#mic-check-message'); // Used on invitation onboarding mic check\n var micButton = document.querySelector('div[data-message--kickoff-recording-target=\"micButton\"]')\n\n if(micButton == null)\n var micButton = document.querySelector('div[data-invitations--invitation-onboarding-target=\"micSelectorsContainer\"]')\n\n audioContext = new AudioContext();\n // Create an AudioNode from the stream.\n mediaStreamSource = audioContext.createMediaStreamSource(stream);\n\n // Create a new volume meter and connect it.\n meter = this.createAudioMeter(audioContext);\n mediaStreamSource.connect(meter);\n\n if(messageUITarget) {\n var preRecAudioAlert = messageUITarget.querySelector(\"#lowAudioLevelAlert\");\n var recAudioAlert = messageUITarget.querySelector(\"#recLowAudioLevelAlert\");\n }\n\n // kick off the visual updating\n onLevelChange();\n\n function onLevelChange() {\n var isMicActive = micButton.classList.contains('active');\n canvasContext.clearRect(0, 0, WIDTH, HEIGHT); // clear the background\n canvasContext.fillStyle = \"#E0EBFD\";\n\n var actualWidth = meter.volume * maxWidth;\n\n canvasContext.fillRect(0, 0, actualWidth, HEIGHT); // draw a bar based on the current volume\n\n // Check if the audio level is reached 10% of the max width and set the \"recording threshold reached flag\" to true.\n if (actualWidth >= maxWidth * 0.1) {\n preRecAudioThresholdReached = true;\n\n if (recordingStateFlag)\n recStateAudioThresholdReached = true\n }\n\n if(audioLevelSet === false && micCheckMessage) {\n if(preRecAudioThresholdReached) {\n audioLevelSet = true\n micCheckMessage.innerHTML = 'Audio level is good!';\n } else {\n micCheckMessage.innerHTML = 'Speak into your mic to confirm your audio level';\n }\n }\n\n if (messageUITarget) {\n // Set the recording flag to true when this function executed first time after recording started\n if (recordingStateFlag === false && document.querySelector(\"#stopRecordingBtn\").classList.contains(\"recording\") && stream['active']) {\n preRecAudioThresholdReached = false\n recordingStateFlag = true;\n preRecAudioAlert.classList.add(\"hidden\");\n }\n\n // Hide/show audio alert based on toggle state(on/off) of Mic\n if (!isMicActive) {\n preRecAudioThresholdReached = true;\n preRecAudioAlert.classList.add(\"hidden\");\n recAudioAlert.classList.add(\"hidden\");\n }\n\n if (recordingStateFlag) { // Control the recording state low level alert if it is in recording state\n preRecAudioAlert.classList.add(\"hidden\");\n\n setTimeout(() => {\n if (recStateAudioThresholdReached) {\n recAudioAlert.classList.add(\"hidden\");\n } else {\n preRecAudioAlert.classList.add(\"hidden\");\n recAudioAlert.classList.remove(\"hidden\");\n }\n }, audioInternalTimer)\n } else { // Control the pre-recording state low level alert if it is in pre-recording state\n setTimeout(() => {\n if (preRecAudioThresholdReached) {\n preRecAudioAlert.classList.add(\"hidden\");\n } else {\n preRecAudioAlert.classList.remove(\"hidden\");\n }\n }, audioInternalTimer)\n }\n }\n\n if(stream['active'] && isMicActive) // set up the next visual callback only if the stream is 'active'\n window.requestAnimationFrame(onLevelChange);\n }\n }\n\n createAudioMeter(audioContext,clipLevel,averaging,clipLag) {\n var processor = audioContext.createScriptProcessor(512);\n processor.onaudioprocess = this.volumeAudioProcess;\n processor.clipping = false;\n processor.lastClip = 0;\n processor.volume = 0;\n processor.clipLevel = clipLevel || 0.98;\n processor.averaging = averaging || 0.95;\n processor.clipLag = clipLag || 750;\n\n // this will have no effect, since we don't copy the input to the output,\n // but works around a current Chrome bug.\n processor.connect(audioContext.destination);\n\n processor.checkClipping =\n function(){\n if (!this.clipping)\n return false;\n if ((this.lastClip + this.clipLag) < window.performance.now())\n this.clipping = false;\n return this.clipping;\n };\n\n processor.shutdown =\n function(){\n this.disconnect();\n this.onaudioprocess = null;\n };\n\n return processor;\n }\n\n volumeAudioProcess( event ) {\n var buf = event.inputBuffer.getChannelData(0);\n var bufLength = buf.length;\n var sum = 0;\n var x;\n\n // Do a root-mean-square on the samples: sum up the squares...\n for (var i=0; i=this.clipLevel) {\n this.clipping = true;\n this.lastClip = window.performance.now();\n }\n sum += x * x;\n }\n\n // ... then take the square root of the sum.\n var rms = Math.sqrt(sum / bufLength);\n\n // Now smooth this out with the averaging factor applied\n // to the previous sample - take the max here because we\n // want \"fast attack, slow release.\"\n this.volume = Math.max(rms, this.volume * this.averaging);\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"applyBtn\", \"ErrorContainer\"]\n\n connect() {\n }\n\n revealApplyBtn(event) {\n if (this.hasApplyBtnTarget) {\n if(event.target.value.length > 0){\n this.applyBtnTarget.classList.remove(\"hidden\");\n }\n else{\n this.applyBtnTarget.classList.add(\"hidden\");\n }\n }\n }\n\n validateAndRevealApplyBtn(event) {\n if(event.target.value.length < 0) {\n this.applyBtnTarget.classList.add(\"hidden\");\n } else {\n this.isValidUrl(event.target.value, event)\n }\n }\n\n\n isValidUrl(url, event) {\n var urlPattern = new RegExp(\"^http(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\\/\\\\\\+&%\\$#_]*)?$\");\n\n if(url && urlPattern.test(url)){\n fetch(`/conversations/validate_conversation_url?url=${url}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\"\n }\n }).then(response => response.text())\n .then(data => {\n if(JSON.parse(data)['valid']){\n this.hideEmbedError()\n this.dispatchLinkValidated(event)\n }\n else{\n this.ErrorContainerTarget.innerHTML = 'Conversation URL is invalid'\n this.ErrorContainerTarget.classList.remove('hidden')\n this.dispatchLinkNotValid(event)\n }\n })\n }\n else{\n this.ErrorContainerTarget.innerHTML = 'Conversation URL is invalid'\n this.ErrorContainerTarget.classList.remove('hidden')\n this.dispatchLinkNotValid(event)\n }\n }\n\n hideEmbedError(){\n this.ErrorContainerTarget.innerHTML = ''\n this.ErrorContainerTarget.classList.add('hidden')\n }\n\n dispatchLinkValidated(event){\n event.target.dispatchEvent(new CustomEvent(\"link-validated\", { bubbles: true }));\n }\n\n dispatchLinkNotValid(event){\n event.target.dispatchEvent(new CustomEvent(\"link-invalid\", { bubbles: true }));\n }\n}\n","export default class UploadError {\n constructor() {\n this.errorHash = {};\n this.errorSend = false;\n\n this.message_form = document.querySelector(\"#new-conversation\");\n if(this.message_form === undefined || this.message_form === null) {\n this.message_form = document.querySelector(\"#new_message\");\n }\n }\n\n getValuesFromMediaStream() {\n var streams = (window.streamArr !== undefined && window.streamArr.length > 0) ? window.streamArr : window.stream;\n\n if(streams === undefined) {\n this.errorHash.camera = this.errorHash.screen = this.errorHash.mic = false;\n } else {\n if(streams instanceof Array) {\n streams.forEach(stream => this.assignActiveMediasValues(stream));\n } else {\n this.assignActiveMediasValues(streams);\n }\n }\n }\n\n assignActiveMediasValues(mediaStream) {\n mediaStream.getTracks().forEach(stream => {\n if(stream.kind === \"video\") {\n\n if(stream.label.toLowerCase().includes(\"camera\")) {\n this.errorHash.camera = true;\n if(!this.errorHash.hasOwnProperty(\"screen\")) this.errorHash.screen = false;\n if(!this.errorHash.hasOwnProperty(\"mic\")) this.errorHash.mic = false;\n } else {\n this.errorHash.screen = true;\n if(!this.errorHash.hasOwnProperty(\"camera\")) this.errorHash.camera = false;\n if(!this.errorHash.hasOwnProperty(\"mic\")) this.errorHash.mic = false;\n }\n\n } else if(stream.kind === \"audio\") {\n\n this.errorHash.mic = true;\n if(!this.errorHash.hasOwnProperty(\"camera\")) this.errorHash.camera = false;\n if(!this.errorHash.hasOwnProperty(\"screen\")) this.errorHash.screen = false;\n\n }\n })\n }\n\n assignError(error, additionalInfoHash) {\n this.errorHash.error = error;\n if(additionalInfoHash[\"errorName\"] !== undefined) {\n this.errorHash.error_category = additionalInfoHash[\"errorName\"];\n } else {\n this.errorHash.error_category = error.name;\n }\n this.errorHash.browser = additionalInfoHash[\"browserName\"];\n if(typeof accountId !== 'undefined') this.errorHash.account_id = accountId;\n if(typeof userId !== 'undefined') this.errorHash.user_id = userId;\n this.errorHash.internet_connection = navigator.onLine;\n\n if(additionalInfoHash[\"recordingTimerSec\"] !== undefined)\n this.errorHash.recording_timer_sec = additionalInfoHash[\"recordingTimerSec\"]\n\n if(additionalInfoHash[\"key\"] !== undefined)\n this.errorHash.key = additionalInfoHash[\"key\"]\n\n if(additionalInfoHash[\"uploadId\"] !== undefined)\n this.errorHash.upload_id = additionalInfoHash[\"uploadId\"]\n\n this.getValuesFromMediaStream(this.errorHash.error_category);\n if(additionalInfoHash[\"errorName\"] !== undefined && additionalInfoHash[\"errorName\"] === 'UserOffline') this.errorSend = false;\n }\n sendError() {\n if(this.errorSend) {\n return this.errorSend;\n }\n\n this.errorSend = true;\n\n fetch(`/accounts/${accountId}/recording_issues_logs`,\n {\n method: \"POST\",\n body: new URLSearchParams(this.errorHash)\n })\n .then(response => response.json())\n .then(data => {\n if(this.message_form) {\n var hiddenField = document.createElement(\"input\");\n hiddenField.type = \"hidden\";\n hiddenField.value = data.id;\n hiddenField.name = \"recording_issue_log_id\";\n\n this.message_form.appendChild(hiddenField);\n }\n })\n }\n\n setItemInLocalStorage() {\n var error_info;\n error_info = localStorage.getItem(\"error-info\");\n if (error_info) {\n error_info = JSON.parse(error_info);\n var error_hash = {\n browserName: error_info[0],\n errorName: error_info[1]\n }\n window.uploadErrorInitializer.assignError(\"User's network got disconnected\", error_hash);\n window.uploadErrorInitializer.sendError();\n\n localStorage.removeItem(\"error-info\");\n }\n }\n}","// `screen_media_stream` function will get the screen + camera + mic stream by requesting the users for access\n//\n// Full Screen\n// If User shares full Screen then PiP will be used to record camera preview\n// Once the permissions are granted full screen stream will be returned\n//\n// Windowed screen\n// If User shares windowed Screen then PiP window will be opened\n// but both screen and camera preview will be rendered in HTML canvas\n// Each frame rendered in HTML canvas will be shared as a stream\n//\n// IMPORTANT FUNCTIONS\n// getDevices()\n// gotDevices()\n// getStream()\n// gotStream()\n// getCameraStream()\n// getAudioStream()\n// drawVideo()\n// Above mentioned functions are the main functions used to get the screen stream\n\n\nimport DetectAudioLevel from \"../concerns/detect_audio_level\";\n\nexport default function screen_media_stream() {\n var previewElement = this.previewTarget;\n var audioSource = this.selectAudioSourceTarget;\n var videoSource = this.selectVideoSourceTarget;\n var resetButton = this.resetBtnTarget;\n var audioSelect = this.selectAudioSourceTarget.querySelector(\"select\");\n var videoSelect = this.selectVideoSourceTarget.querySelector(\"select\");\n var startScreenCameraBtn = document.getElementById(\"startScreenCameraRecordingBtn\");\n var selectCameraLayout = this.selectCameraLayoutTarget;\n var cameraLayoutSelect = this.selectCameraLayoutTarget.querySelector(\"fieldset\");\n var startCameraRecordBtn = this.startCameraRecordBtnTarget;\n var startScreenRecordBtn = this.startScreenRecordBtnTarget;\n var startMicRecordBtn = this.startMicRecordBtnTarget;\n var loadingIcon = this.loadingIconTarget;\n var mediaField = this.mediaFieldTarget;\n var preRecordPipBtnTarget = this.preRecordPipBtnTarget;\n var duringRecordPipBtnTarget = this.duringRecordPipBtnTarget;\n var canDrawInCanvas = false;\n var recordingStopped = false;\n var frameRate = 22;\n var stopAnim;\n var currentTabVisibility, timeoutReference, displaySurface, entireScreen, pipOpen, canvas, context;\n let audioStream, cameraStream, screenStream;\n var activeMediaElements = this.activeMediaTargets;\n var activeMedia = [];\n var camera_video = document.createElement(\"video\");\n var camMicSelectorsTarget = this.camMicSelectorsTarget\n var messageUITarget = this.messageUITarget\n\n camera_video.classList.add(\"hidden\");\n previewElement.insertAdjacentElement(\"afterend\", camera_video);\n\n const sUsrAg = navigator.userAgent.toLowerCase();\n let isSafari = false;\n if (sUsrAg.indexOf('safari') !== -1 && sUsrAg.indexOf('chrome') === -1) {\n isSafari = true;\n entireScreen = true;\n preRecordPipBtnTarget.dataset.cameraOn = \"false\";\n }\n\n // When Audio, Camera or Camera layout is changed stop the current stream and request access to new device\n if(isSafari){\n audioSelect.onchange = startStream;\n videoSelect.onchange = startStream;\n } else {\n audioSelect.onchange = getStream;\n videoSelect.onchange = getStream;\n }\n // When camera Layout is changed in windowed mode then reset HTML canvas stream\n cameraLayoutSelect.onchange = restartCanvas;\n\n // Show and hide media like audio, camera icon in `start recording` button\n showHideActiveMediaElements.call(this);\n\n // start a dummy stream\n if(!isSafari) startPip().then();\n\n // Get previously used devices for recording\n if((localStorage.getItem(\"zipmessage-camera\") ||\n localStorage.getItem(\"zipmessage-mic\") ||\n localStorage.getItem(\"zipmessage-camera-layout\")) && !isSafari) {\n // Call `gotDevices` before getStream to pass previously used devices\n getDevices().then(gotDevices).then(() => getStream.call(this)).then(getDevices).then(gotDevices);\n\n if(localStorage.getItem(\"zipmessage-camera-layout\"))\n choosePreviousCameraLayout();\n } else if(isSafari) {\n getStream.call(this);\n } else {\n getStream.call(this).then(getDevices).then(gotDevices);\n }\n\n // Listen for stop event and stop animation\n listenStopEvent.call(this);\n\n // ---MAIN FUNCTION STARTS---\n\n function getDevices() {\n // return all the media devices present in the system\n return navigator.mediaDevices.enumerateDevices();\n }\n\n function gotDevices(deviceInfos) {\n // based on the devices present update media settings dropdown\n videoSelect.innerHTML = \"\";\n audioSelect.innerHTML = \"\";\n window.deviceInfos = deviceInfos; // make available to console\n\n\n console.log('Available input and output devices:', deviceInfos);\n for (const deviceInfo of deviceInfos) {\n const option = document.createElement('option');\n option.value = deviceInfo.deviceId;\n\n let layoutCamera = localStorage.getItem(\"zipmessage-camera\");\n let layoutMic = localStorage.getItem(\"zipmessage-mic\");\n\n if (deviceInfo.kind === 'audioinput') {\n option.text = deviceInfo.label || `Microphone ${audioSelect.length + 1}`;\n\n if(layoutMic === JSON.stringify(option.value)) {\n option.selected = true;\n }\n\n audioSelect.appendChild(option);\n } else if (deviceInfo.kind === 'videoinput') {\n if(deviceInfo.label && deviceInfo.label.toLowerCase().indexOf('back') >= 0) {\n option.text = \"Back camera - facing out\"\n } else if(deviceInfo.label && deviceInfo.label.toLowerCase().indexOf('front') >= 0) {\n option.text = \"Front camera - facing you\"\n } else {\n option.text = deviceInfo.label || `Camera ${videoSelect.length + 1}`;\n }\n\n if(layoutCamera === JSON.stringify(option.value)) {\n option.selected = true;\n }\n\n videoSelect.appendChild(option);\n }\n }\n }\n\n function getStream() {\n stopStreamsAndAnimation();\n\n const displayMediaOptions = {\n video: { mediaSource: \"screen\" },\n selfBrowserSurface: \"include\" // Chrome is rolling out the change to hide the current tab\n // (unless selfBrowserSurface is set to 'include' user can't current tab in the navigator pop up window) along with the reordering of tabs.\n }\n\n return navigator.mediaDevices.getDisplayMedia(displayMediaOptions)\n .then(stream => {\n screenStream = stream;\n window.streamArr.push(stream);\n\n return gotStream.call(this, stream);\n })\n .catch(error => handleError.call(this, error));\n }\n\n function gotStream(stream) {\n window.screenStream = stream;\n if(!isSafari) {\n displaySurface = stream.getVideoTracks()[0].getSettings().displaySurface;\n entireScreen = (displaySurface === \"monitor\")\n }\n\n return startStream.call(this, stream);\n }\n\n function startStream(){\n if(activeMedia.includes(\"camera\") && document.pictureInPictureEnabled && (preRecordPipBtnTarget.dataset.cameraOn === \"true\" || (isSafari && preRecordPipBtnTarget.dataset.cameraOn === \"false\"))) {\n return getCameraStream.call(this)\n } else if(activeMedia.includes(\"mic\")) {\n return getAudioStream.call(this)\n } else {\n drawVideo(context);\n }\n }\n\n function getCameraStream() {\n const videoSource = videoSelect.value;\n\n var idealWidth = 1280;\n var idealHeight = 720;\n var minWidth = 320;\n var minHeight= 320;\n\n if(mediaField.dataset.enableHdVideo) {\n idealWidth = 1920;\n idealHeight = 1080;\n minWidth = 500;\n minHeight = 500;\n }\n\n const constraints = {\n video: {\n deviceId: videoSource ? {exact: videoSource} : undefined,\n width: {\n min: minWidth,\n ideal: idealWidth\n },\n height: {\n min: minHeight,\n ideal: idealHeight\n },\n facingMode: \"user\"\n }\n };\n\n return navigator.mediaDevices.getUserMedia(constraints)\n .then(stream => {\n window.cameraStream = stream;\n cameraStream = stream;\n window.streamArr.push(stream);\n\n if(activeMedia.includes(\"mic\")) {\n return getAudioStream.call(this)\n } else {\n drawVideo(context);\n }\n })\n .catch(error => handleError.call(this, error));\n }\n\n function getAudioStream() {\n const audioSource = audioSelect.value;\n\n const audioConstraints = {\n audio: {deviceId: audioSource ? {exact: audioSource} : undefined},\n echoCancellation: true,\n noiseSuppression: true,\n sampleRate: 44100\n }\n\n return navigator.mediaDevices.getUserMedia(audioConstraints).then(stream => {\n audioStream = stream;\n window.streamArr.push(stream);\n canDrawInCanvas = true;\n\n // show audio level of mic\n var detectAudio = new DetectAudioLevel();\n detectAudio.detectAudioLevel(stream, 'audio-meter', camMicSelectorsTarget, messageUITarget);\n\n drawVideo(context);\n }).catch(error => handleError.call(this, error))\n }\n\n function drawVideo(context) {\n var mergedStream;\n\n if(isSafari)\n getDevices().then(device_info => gotDevices(device_info))\n\n updateMediaSetting();\n\n var screen_video = document.createElement(\"video\");\n screen_video.srcObject = screenStream;\n screen_video.muted = true;\n screen_video.play();\n\n if(cameraStream) {\n camera_video.srcObject = cameraStream;\n camera_video.setAttribute(\"id\", \"cameraStreamPip\")\n camera_video.play();\n }\n\n if (document.pictureInPictureEnabled && cameraStream) {\n // Browser supports picture in picture api\n\n // show camera preview in PiP\n camera_video.onloadedmetadata = (e) => {\n if(isSafari) {\n preRecordPipBtnTarget.addEventListener(\"click\", (e) => {\n if(document.pictureInPictureElement) {\n document.exitPictureInPicture().then(() => {\n updatePreRecordPipText();\n updateDuringRecordPipText();\n });\n } else {\n camera_video.requestPictureInPicture().then(() => {\n camera_video.play();\n camera_video.width = 0;\n camera_video.height = 0;\n camera_video.classList.remove(\"hidden\");\n });\n }\n });\n addListenersForPipSafari();\n }\n else {\n addListenersForPip();\n }\n\n window.pipCamera = camera_video;\n preRecordPipBtnTarget.classList.remove(\"hidden\");\n };\n\n if (entireScreen) {\n // Recording entire screen and camera preview in PiP\n mergedStream = screenStream;\n } else {\n\n // when window is recorded draw camera preview in canvas\n let recordingArgs = getLayoutPosition(screenStream, cameraStream, canvas);\n currentTabVisibility = document.visibilityState;\n\n stopAnim = audioTimerLoop(draw.bind(event, screen_video, camera_video, canvas, context, recordingArgs), (1000 / frameRate));\n\n mergedStream = canvas.captureStream(frameRate);\n }\n } else {\n // Browser that doesn't supports Picture in Picture api will record only screen\n mergedStream = screenStream;\n }\n\n // Set currently active media device ids to local storage\n if(videoSelect.value !== null && videoSelect.value.length > 0) localStorage.setItem(\"zipmessage-camera\", JSON.stringify(videoSelect.value));\n if(audioSelect.value !== null && audioSelect.value.length > 0) localStorage.setItem(\"zipmessage-mic\", JSON.stringify(audioSelect.value));\n\n if(audioStream){\n audioSelect.selectedIndex = Array.from(audioSelect.options).\n findIndex(option => getIndexOfOption(option, audioStream.getAudioTracks()[0].label));\n }\n\n if(cameraStream) {\n videoSelect.selectedIndex = Array.from(videoSelect.options).\n findIndex(option => getIndexOfOption(option, cameraStream.getVideoTracks()[0].label));\n }\n\n window.stream = mergedStream;\n if(audioStream) {\n window.stream.addTrack(audioStream.getAudioTracks()[0])\n }\n previewElement.querySelector(\"video\").srcObject = mergedStream;\n loadingIcon.classList.add(\"hidden\"); // Hide the loading spinner icon\n startMicRecordBtn.classList.add(\"hidden\"); // hide the \"start recording mic\" button\n startCameraRecordBtn.classList.add(\"hidden\"); // hide the \"start recording camera\" button\n startScreenRecordBtn.classList.remove(\"hidden\"); // show the \"start recording screen\" button\n }\n\n // ---MAIN FUNCTION ENDS---\n\n\n // ---HELPER FUNCTION STARTS---\n\n function restartCanvas() {\n if(stopAnim) {\n stopAnim(); // stop canvas\n stopAnim = undefined;\n }\n\n gotStream(window.screenStream)\n }\n\n function showHideActiveMediaElements() {\n // Get media elements that are active\n for(const activeMediaElement of activeMediaElements) {\n if(activeMediaElement.classList.contains(\"active\"))\n activeMedia.push(activeMediaElement.dataset.device);\n }\n\n // Hide `mic` icon in start recording button\n if (!activeMedia.includes(\"mic\")) {\n var micLabels = this.element.querySelectorAll(\".plusMicLabel\");\n for (let micLabel of micLabels) {\n micLabel.classList.add(\"hidden\");\n }\n }\n\n // Show/Hide `camera` icon in start recording button\n if(activeMedia.includes(\"camera\")) {\n // canvas\n canvas = document.querySelector(\"#recordingCanvas\");\n context = canvas.getContext(\"2d\", {\n alpha: false,\n antialias: false\n })\n } else {\n this.element.querySelector(\".plusCameraLabel\").classList.add(\"hidden\");\n }\n\n }\n\n function startPip() {\n return new Promise((resolve, reject) => {\n if (activeMedia.includes(\"camera\")) {\n context.fillStyle = \"black\";\n context.fillRect(0, 0, 352, 240);\n camera_video.srcObject = canvas.captureStream(1);\n\n camera_video.onloadedmetadata = (e) => {\n camera_video.requestPictureInPicture()\n }\n }\n\n return resolve('dummy video');\n })\n }\n\n function choosePreviousCameraLayout() {\n cameraLayoutSelect\n .querySelectorAll('input[name=\"camera-layout\"]')\n .forEach((input) => {\n if(JSON.stringify(input.value) === localStorage.getItem(\"zipmessage-camera-layout\")) {\n input.setAttribute(\"checked\", \"checked\");\n\n resetCameraLayout();\n\n var label = input.closest(\"label\");\n if(label) label.classList.add(\"active\");\n } else {\n input.removeAttribute(\"checked\");\n }\n }\n )\n }\n\n function listenStopEvent() {\n if(!(this.hasStopBtnTarget === true)) return false;\n\n this.stopBtnTarget.addEventListener(\"click\", (e) => {\n if(stopAnim) {\n stopAnim();\n stopAnim = undefined;\n }\n recordingStopped = true;\n\n if(timeoutReference){\n clearTimeout(timeoutReference);\n }\n })\n }\n\n // This function is used inside `getStream` function\n function stopStreamsAndAnimation() {\n // stop existing streams and canvas animation\n if (window.stream) {\n window.stream.getTracks().forEach(track => {\n track.stop();\n });\n }\n\n if(window.streamArr) {\n window.streamArr.forEach(stream => {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n });\n }\n\n window.streamArr = [];\n\n if(stopAnim) {\n stopAnim();\n }\n\n if(document.pictureInPictureElement) {\n document.exitPictureInPicture();\n }\n\n canDrawInCanvas = false;\n }\n\n // This function is used inside `drawVideo` function\n function updateMediaSetting() {\n if (screenStream && cameraStream && audioStream) {\n resetButton.classList.remove(\"hidden\");\n audioSource.classList.remove(\"hidden\");\n\n if (selectCameraLayout && !entireScreen) {\n // show camera select layout\n selectCameraLayout.classList.remove(\"hidden\");\n videoSource.classList.remove(\"hidden\");\n } else {\n selectCameraLayout.classList.add(\"hidden\");\n videoSource.classList.remove(\"hidden\");\n }\n } else if (screenStream && cameraStream) {\n resetButton.classList.remove(\"hidden\");\n audioSource.classList.add(\"hidden\");\n\n if (selectCameraLayout && !entireScreen) {\n // show camera select layout\n selectCameraLayout.classList.remove(\"hidden\");\n videoSource.classList.remove(\"hidden\");\n } else {\n selectCameraLayout.classList.add(\"hidden\");\n videoSource.classList.remove(\"hidden\");\n }\n } else if (screenStream && audioStream) {\n resetButton.classList.remove(\"hidden\");\n videoSource.classList.add(\"hidden\");\n selectCameraLayout.classList.add(\"hidden\");\n audioSource.classList.remove(\"hidden\");\n } else {\n }\n }\n\n // This function is used inside `drawVideo` function\n function addListenersForPip() {\n if (camera_video.getAttribute('leaveListener') !== 'true') {\n camera_video.addEventListener('leavepictureinpicture', () => {\n camera_video.setAttribute('leaveListener', 'true');\n if(duringRecordPipBtnTarget.getAttribute('recordingStarted') !== 'true') {\n updatePreRecordPipText();\n updateDuringRecordPipText();\n }\n });\n }\n\n if (camera_video.getAttribute('enterListener') !== 'true') {\n camera_video.addEventListener('enterpictureinpicture', () => {\n camera_video.setAttribute('enterListener', 'true');\n if(duringRecordPipBtnTarget.getAttribute('recordingStarted') !== 'true') {\n updatePreRecordPipText();\n updateDuringRecordPipText();\n }\n });\n }\n\n if(preRecordPipBtnTarget.getAttribute('clickListener') !== 'true') {\n preRecordPipBtnTarget.addEventListener(\"click\", (e) => {\n preRecordPipBtnTarget.setAttribute('clickListener', 'true');\n if (document.pictureInPictureElement) {\n pipOpen = false;\n document.exitPictureInPicture().then(() => resetCameraAndAudioStream()); // close PiP window\n } else {\n pipOpen = true;\n resetCameraAndAudioStream();\n }\n });\n }\n\n if(duringRecordPipBtnTarget.getAttribute('clickListener') !== 'true') {\n duringRecordPipBtnTarget.addEventListener(\"click\", (e) => {\n duringRecordPipBtnTarget.setAttribute('clickListener', 'true');\n if (document.pictureInPictureElement) {\n document.exitPictureInPicture().then(() => updateDuringRecordPipText()); // close PiP window\n } else {\n camera_video.requestPictureInPicture().then(() => updateDuringRecordPipText()); // open PiP window\n }\n });\n }\n }\n\n function addListenersForPipSafari() {\n if (camera_video.getAttribute('leaveListener') !== 'true') {\n camera_video.addEventListener('leavepictureinpicture', () => {\n camera_video.setAttribute('leaveListener', 'true');\n if(duringRecordPipBtnTarget.getAttribute('recordingStarted') !== 'true') {\n updatePreRecordPipText();\n updateDuringRecordPipText();\n }\n else {\n updateDuringRecordPipText();\n }\n });\n }\n\n if (camera_video.getAttribute('enterListener') !== 'true') {\n camera_video.addEventListener('enterpictureinpicture', () => {\n camera_video.setAttribute('enterListener', 'true');\n if(duringRecordPipBtnTarget.getAttribute('recordingStarted') !== 'true') {\n updatePreRecordPipText();\n updateDuringRecordPipText();\n }\n });\n }\n\n if(duringRecordPipBtnTarget.getAttribute('clickListener') !== 'true') {\n duringRecordPipBtnTarget.addEventListener(\"click\", (e) => {\n duringRecordPipBtnTarget.setAttribute('clickListener', 'true');\n if (document.pictureInPictureElement) {\n document.exitPictureInPicture().then(() => updateDuringRecordPipText()); // close PiP window\n } else {\n camera_video.requestPictureInPicture().then(() => {\n camera_video.play();\n camera_video.width=0;\n camera_video.height=0;\n camera_video.classList.remove(\"hidden\");\n updatePreRecordPipText();\n updateDuringRecordPipText();\n }); // open PiP window\n }\n });\n }\n }\n\n // This function is used inside `drawVideo` function\n function getLayoutPosition(screenStream, cameraStream, canvas) {\n let camera_height, camera_width, apply_aspect_ratio;\n let screen_height = screenStream.getVideoTracks()[0].getSettings().height;\n let screen_width = screenStream.getVideoTracks()[0].getSettings().width;\n\n let camera_source_height = cameraStream.getVideoTracks()[0].getSettings().height;\n let camera_source_width = cameraStream.getVideoTracks()[0].getSettings().width;\n\n apply_aspect_ratio = !((screen_width === screen.width) && (screen_height === screen.height))\n\n canvas.width = screen_width;\n if(apply_aspect_ratio === true) {\n canvas.height = screen_width * (10 / 16); // calculating height of the canvas to match 16:10 aspect ratio\n } else {\n canvas.height = screen_height;\n }\n\n camera_width = parseInt((30 / 100) * camera_source_width);\n camera_height = parseInt((30 / 100) * camera_source_height);\n\n let camera_top, camera_left, transform_x, transform_y;\n // x - axis position camera_left\n // y - axis position camera_top\n // x - axis transformation scale transform_x\n // y - axis transformation scale transform_y\n\n var selected_layout = cameraLayoutSelect.querySelector('input[name=\"camera-layout\"]:checked').value;\n\n if(selected_layout !== null && selected_layout.length > 0) localStorage.setItem(\"zipmessage-camera-layout\", JSON.stringify(selected_layout));\n\n if(selected_layout === \"bottom-right\") {\n camera_left = screen_width - camera_width; // x axis\n camera_top = screen_height - camera_height; // y axis\n } else if(selected_layout === \"bottom-left\") {\n camera_left = 0; // x axis\n camera_top = screen_height - camera_height; // y axis\n } else if(selected_layout === \"top-right\") {\n camera_left = screen_width - camera_width; // x axis\n camera_top = 0; // y axis\n } else if(selected_layout === \"top-left\") {\n camera_left = 0; // x axis\n camera_top = 0; // y axis\n }\n\n // Ensure that if thin dimensions then full height is in view or if wide dimensions then full width is in view.\n const scale = Math.min(canvas.width / screen_width, canvas.height / screen_height);\n\n // transformation for scaling video. These place the screen in the center of the canvas (makes black strips on the left/right or top/bottom).\n transform_x = (canvas.width - screen_width * scale) / 2;\n transform_y = (canvas.height - screen_height * scale) / 2;\n\n return {\n screenHeight: screen_height,\n screenWidth: screen_width,\n cameraWidth: camera_width,\n cameraHeight: camera_height,\n cameraTop: camera_top,\n cameraLeft: camera_left,\n selected_layout: selected_layout,\n transform_x: transform_x,\n transform_y: transform_y,\n scale: scale,\n apply_aspect_ratio: apply_aspect_ratio\n };\n }\n\n // This function is used inside `drawVideo` function\n function audioTimerLoop(callback, frequency) {\n // AudioContext time parameters are in seconds\n var freq = frequency / 1000;\n\n var aCtx = new AudioContext();\n // Chrome needs our oscillator node to be attached to the destination\n // So we create a silent Gain Node\n var silence = aCtx.createGain();\n silence.gain.value = 0;\n silence.connect(aCtx.destination);\n\n onOSCend();\n\n var stopped = false;\n function onOSCend() {\n var osc = aCtx.createOscillator();\n osc.onended = onOSCend;\n osc.connect(silence);\n osc.start(0);\n osc.stop(aCtx.currentTime + freq);\n callback(aCtx.currentTime);\n if (stopped) {\n osc.onended = function() {\n return;\n };\n }\n };\n // return a function to stop our loop\n return function() {\n stopped = true;\n };\n }\n\n // This function is used inside `drawVideo` function\n function draw(screen_stream, camera_stream, canvas, context, recordingArgs) {\n // This function will draw a frame with screen and camera in HTML canvas\n if(recordingStopped === true) {\n return;\n }\n\n context.clearRect(0, 0, recordingArgs.screenWidth, recordingArgs.screenHeight);\n\n if(recordingArgs.apply_aspect_ratio !== undefined && recordingArgs.apply_aspect_ratio === true) {\n // scale the image to fit in 16:10 aspect ratio\n context.setTransform(recordingArgs.scale, 0, 0, recordingArgs.scale, recordingArgs.transform_x, recordingArgs.transform_y);\n }\n\n // Draw screen frame\n context.drawImage(screen_stream, 0, 0, recordingArgs.screenWidth, recordingArgs.screenHeight);\n\n // Draw a Rectangle stoke\n context.lineWidth = 1;\n context.strokeStyle = \"#FFFFFF\";\n // context.shadowBlur = 5;\n // context.shadowColor = \"black\";\n context.strokeRect(recordingArgs.cameraLeft, recordingArgs.cameraTop, recordingArgs.cameraWidth + 1, recordingArgs.cameraHeight + 1);\n\n // Draw camera frame\n context.drawImage(camera_stream, recordingArgs.cameraLeft, recordingArgs.cameraTop, recordingArgs.cameraWidth, recordingArgs.cameraHeight);\n }\n\n // This function is used inside `drawVideo` function\n function getIndexOfOption(option, label) {\n return (option.text === label) ||\n (option.text.toLowerCase().indexOf('you') >= 0 && label.toLowerCase().indexOf('front') >= 0) ||\n (option.text.toLowerCase().indexOf('out') >= 0 && label.toLowerCase().indexOf('back') >= 0);\n }\n\n // ---HELPER FUNCTION ENDS---\n\n\n // ---Function that are used inside helper functions STARTS ---\n\n function resetCameraLayout() {\n cameraLayoutSelect.querySelectorAll(\"label\").forEach(label => {\n label.classList.remove(\"active\")\n })\n }\n\n function resetCameraAndAudioStream() {\n if(preRecordPipBtnTarget.dataset.cameraOn === \"true\") {\n preRecordPipBtnTarget.dataset.cameraOn = \"false\"\n } else {\n preRecordPipBtnTarget.dataset.cameraOn = \"true\"\n }\n\n if(stopAnim) {\n stopAnim(); // stop canvas\n stopAnim = undefined;\n }\n\n if (window.cameraStream && preRecordPipBtnTarget.dataset.cameraOn !== \"true\") {\n window.cameraStream.getTracks().forEach(track => {\n track.stop();\n }); // stop camera stream\n\n window.cameraStream = undefined;\n }\n\n if(activeMedia.includes(\"camera\") && preRecordPipBtnTarget.dataset.cameraOn === \"true\") {\n startPip().then( () => getCameraStream()); // start dummy pip and get camera stream\n } else if(activeMedia.includes(\"mic\")) {\n getAudioStream(); // get audio stream\n } else {\n drawVideo(context);\n }\n }\n\n function updatePreRecordPipText() {\n var cameraShownLabel = preRecordPipBtnTarget.querySelector(\".cameraShownLabel\");\n var cameraShownIcon = preRecordPipBtnTarget.querySelector(\".cameraShownIcon\");\n var cameraHiddenLabel = preRecordPipBtnTarget.querySelector(\".cameraHiddenLabel\");\n var cameraHiddenIcon = preRecordPipBtnTarget.querySelector(\".cameraHiddenIcon\");\n var plusCameraLabel = document.querySelector(\".plusCameraLabel\");\n\n\n if (document.pictureInPictureElement) {\n cameraShownLabel.classList.remove(\"hidden\");\n cameraShownIcon.classList.remove(\"hidden\");\n cameraHiddenLabel.classList.add(\"hidden\");\n cameraHiddenIcon.classList.add(\"hidden\");\n plusCameraLabel.classList.remove(\"hidden\");\n } else {\n cameraShownLabel.classList.add(\"hidden\");\n cameraShownIcon.classList.add(\"hidden\");\n cameraHiddenLabel.classList.remove(\"hidden\");\n cameraHiddenIcon.classList.remove(\"hidden\");\n plusCameraLabel.classList.add(\"hidden\");\n\n if (window.cameraStream && preRecordPipBtnTarget.dataset.cameraOn === \"true\" && pipOpen === true) {\n window.cameraStream.getTracks().forEach(track => {\n track.stop();\n }); // stop camera stream\n\n preRecordPipBtnTarget.dataset.cameraOn = \"false\";\n window.cameraStream = undefined;\n pipOpen = false;\n }\n }\n }\n\n function updateDuringRecordPipText() {\n var cameraShownLabel = duringRecordPipBtnTarget.querySelector(\".cameraShownLabel\");\n var cameraShownIcon = duringRecordPipBtnTarget.querySelector(\".cameraShownIcon\");\n var cameraHiddenLabel = duringRecordPipBtnTarget.querySelector(\".cameraHiddenLabel\");\n var cameraHiddenIcon = duringRecordPipBtnTarget.querySelector(\".cameraHiddenIcon\");\n\n if (document.pictureInPictureElement) {\n cameraShownLabel.classList.remove(\"hidden\");\n cameraShownIcon.classList.remove(\"hidden\");\n cameraHiddenLabel.classList.add(\"hidden\");\n cameraHiddenIcon.classList.add(\"hidden\");\n } else {\n cameraShownLabel.classList.add(\"hidden\");\n cameraShownIcon.classList.add(\"hidden\");\n cameraHiddenLabel.classList.remove(\"hidden\");\n cameraHiddenIcon.classList.remove(\"hidden\");\n }\n }\n\n // ---Function that are used inside helper functions ENDS ---\n\n function handleError(error) {\n console.error('Error: ', error);\n console.error('Error: ', error.name);\n\n this.mediaError(error)\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId })\n span.setTags({\n tag: \"Media error\"\n }).setError({name: \"Screen permission denied\", message: error});\n window.appsignal.send(span);};\n }\n}","import UploadError from \"./upload_error\";\n\nexport default class MultipartUpload {\n constructor(browserName) {\n this.upload_id;\n this.key;\n this.bucket;\n this.totalParts;\n this.partArray = [];\n this.partPromiseDict = [];\n this.partBasedProgress = false;\n this.totalPartsProgress = {};\n this.uploadDiscard = false;\n this.browserName = browserName;\n\n this.disableBtn = document.querySelector(\"#discardRecordingBtn\");\n\n // Flow of multipart upload\n // 1 - Need to get upload ID by sending a create multipart trigger\n // 2 - After getting upload ID when part is ready Get Presigned URL(We can't use one persigned URL for all the part)\n // 3 - After getting the persigned URL upload part\n // 4 - Once all the parts are uploaded send complete multipart trigger\n // 5 - If there is any interruption or multiple issue in upload discard upload\n }\n\n get_key_and_upload_id() {\n return { key: this.key, uploadId: this.upload_id }\n }\n\n async upload(part, index, mimeType) {\n if(this.connectionOnline() === false || this.uploadDiscard === true) return false; // return false only if connectionOnline function returns false\n\n var response;\n response = this.uploadPart(part, index, mimeType, this.upload_id, this.key, this.bucket)\n .then( data => {\n if(data === false) throw \"upload failed...\";\n\n // get etag and index from response\n this.partArray.push({\n etag: data.etag,\n part_number: data.index\n });\n\n return true;\n })\n .catch((error) => {\n console.error('Error:', error);\n if(this.uploadDiscard === false) this.assignAndSendError(error, \"InProgressPartUploadError\");\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId, bucket: this.bucket, key: this.key, upload_id: this.upload_id, parts: JSON.stringify(this.partArray)})\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"InProgressPartUploadError\", message: error});\n window.appsignal.send(span);}\n return false;\n });\n\n this.partPromiseDict[index] = response;\n\n return await response;\n }\n\n async createMultipartUpload(type) {\n var params = new URLSearchParams({\n type: type\n })\n\n console.log(\"Request backend to create multipart upload...\")\n var result = fetch(`/accounts/${accountId}/create_multipart_upload?${params}`, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(response => response.json())\n .then(data => {\n var response = data.response;\n console.log(\"Got create multipart upload response.....\")\n\n if(response !== false) {\n var jsonData = JSON.parse(data.response);\n\n // Assign needed valued to instance variables\n this.upload_id = jsonData.upload_id;\n this.key = jsonData.key;\n this.bucket = jsonData.bucket;\n }\n\n return response;\n });\n\n return result;\n }\n\n async uploadPart(part, index, mimeType, upload_id, key, bucket) {\n var params = new URLSearchParams({\n bucket: bucket,\n key: key,\n upload_id: upload_id,\n part_number: index\n })\n\n // For each upload we need a presigned url\n // Using fetch Api a request will be made to Backend with all the needed parameters\n\n return await fetch(`/accounts/${accountId}/generate_presigned_url?${params}`, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(response => response.json())\n .then(data => {\n // Response will have Signed URL and it will be used to upload part\n var jsonData = JSON.parse(data.response)\n\n var xhr = new XMLHttpRequest(); // XHR will be used to upload part to track the upload progress\n\n return new Promise((resolve, reject) => {\n\n xhr.onreadystatechange = (e) => {\n if (xhr.readyState !== 4) {\n return;\n }\n\n if (xhr.status === 200) {\n // If the upload is successful then get the etag of the uploaded part\n resolve({index: index, etag: xhr.getResponseHeader(\"ETag\")});\n } else {\n // If upload failed reject promise\n console.warn('Multipart upload failed');\n return reject(xhr.responseText || 'Multipart upload failed.....');\n }\n };\n\n xhr.upload.addEventListener('progress', event => {\n // Track progess of upload\n this.partUploadProgress(event, index)\n });\n\n // Abort request based on listening to button click event\n if(this.disableBtn) {\n this.disableBtn.addEventListener(\"click\", (event) => {\n setTimeout(() => {\n if(this.disableBtn.dataset.discardRecording === \"true\") {\n xhr.abort();\n }\n }, 1000);\n })\n }\n\n xhr.open('PUT', jsonData.url, true);\n xhr.send(part);\n })\n })\n }\n\n async completeUpload() {\n var etag;\n\n if(this.key === undefined || this.uploadDiscard === true || this.partPromiseDict.length === 0) {\n return\n }\n\n let resolvedArray = await Promise.all(Object.values(this.partPromiseDict)); // Get the response of all part promise\n\n return Promise.all(resolvedArray).then(async data => {\n // If all part promise are successful then send complete request\n // Params must have etag and part number of each part\n var params = new URLSearchParams({\n bucket: this.bucket,\n key: this.key,\n upload_id: this.upload_id,\n parts: JSON.stringify(this.partArray)\n })\n\n var result = fetch(`/accounts/${accountId}/complete_multipart_upload`,\n {\n method: \"POST\",\n body: params\n })\n .then(response => {\n // If completed request is successfully then get the etag from the response header\n etag = response.headers.get(\"ETag\");\n return response.json()\n })\n .then(data => {\n // Send back response and etag\n return {response: JSON.parse(data.response), etag: etag };\n }).catch(err => {\n console.log(err)\n if(this.uploadDiscard === false) this.assignAndSendError(err, \"CompletePartUploadError\");\n if(window.appsignal !== undefined){ var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId, bucket: this.bucket, key: this.key, upload_id: this.upload_id, parts: JSON.stringify(this.partArray)})\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"CompletePartUploadError\", message: err});\n window.appsignal.send(span);}\n return false;\n })\n return await result;\n }).catch(err => {\n console.log(err)\n if(this.uploadDiscard === false) this.assignAndSendError(err, \"InProgressPartUploadError\");\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId, bucket: this.bucket, key: this.key, upload_id: this.upload_id, parts: JSON.stringify(this.partArray)})\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"InProgressPartUploadError\", message: err});\n window.appsignal.send(span);};\n return false;\n })\n }\n\n discardUpload(skipReload) {\n if(this.uploadDiscard === true) return; // return if discard is already called\n\n this.uploadDiscard = true;\n var params = new URLSearchParams({\n bucket: this.bucket,\n key: this.key,\n upload_id: this.upload_id\n })\n\n return fetch(`/accounts/${accountId}/abort_multipart_upload?${params}`, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(response => response.json())\n .then(() => {\n if(skipReload === true) {\n let customProgressElements = document.querySelectorAll('.progressbar');\n\n Array.from(customProgressElements).forEach((customProgressElement) => {\n customProgressElement.style.width = \"0%\";\n })\n\n return ;\n }\n })\n .catch((error) => {\n console.error('Error:', error);\n this.assignAndSendError(error, \"AbortPartUploadError\");\n if(window.appsignal !== undefined){ var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId, bucket: this.bucket, key: this.key, upload_id: this.upload_id })\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"AbortPartUploadError\", message: error});\n window.appsignal.send(span);};\n });\n }\n\n updatePartProgress(totalParts) {\n this.totalParts = totalParts;\n this.partBasedProgress = true;\n }\n\n partUploadProgress(event, index) {\n let percent = ((event.loaded / event.total) * 100).toFixed(1);\n\n this.totalPartsProgress[index] = percent;\n\n if(this.partBasedProgress === true) {\n var completed_percentage = Object.values(this.totalPartsProgress).reduce((a, b) => parseInt(a) + parseInt(b), 0)\n percent = (completed_percentage / this.totalParts).toFixed(1);\n }\n\n let customProgressElements = document.querySelectorAll('.progressbar');\n\n if(customProgressElements){\n Array.from(customProgressElements).forEach((customProgressElement) => {\n if(percent === \"100.0\") {\n this.canShowSubmit = true;\n } else {\n if(!customProgressElement.classList.contains(\"hidden\")){\n customProgressElement.classList.remove(\"hidden\")\n }\n }\n\n // Update width of the progressbar based on the upload percentage\n customProgressElement.style.width = `${percent}%`;\n })\n }\n }\n\n connectionOnline() {\n if(navigator.onLine === false) return false; // return false if connection is offline\n\n return true; // return true if connection is online\n }\n\n assignAndSendError(error, errorName) {\n var additionalInfoHash = {\n browserName: this.browserName,\n errorName: errorName,\n uploadId: this.upload_id,\n key: this.key\n }\n\n window.uploadErrorInitializer.assignError(error, additionalInfoHash);\n window.uploadErrorInitializer.sendError();\n }\n\n get_account_id(){\n return { account_id: accountId }\n }\n\n}","import {DirectUpload} from \"@rails/activestorage\";\nimport UploadError from \"./upload_error\";\n\nexport default class RailsDirectUpload {\n constructor(file, url, mediaField, submitButtonBottom, recordingEndTime, browserName, saveButton, scheduleButton, editRecordingButton, messageForm) {\n console.log(\"inside DirectUploadController\")\n\n this.uploader = new DirectUpload(file, url, this);\n this.mediaField = mediaField;\n this.submitButtonBottom = submitButtonBottom;\n this.saveButton = saveButton;\n this.scheduleButton = scheduleButton;\n this.editRecordingButton = editRecordingButton;\n this.messageForm = messageForm\n this.submitButtonBottomContainer = this.messageForm.querySelector(\"#submitBtnBottomContainer\");\n this.recordingEndTime = recordingEndTime;\n this.browserName = browserName;\n\n window.addEventListener('beforeunload', this.preventPageRefresh);\n\n this.customProgressElements = document.querySelectorAll('.progressbar');\n this.customProgressWrapElements = document.querySelectorAll('.progressbar-wrap');\n this.disableBtn = document.querySelector(\"#discardRecordingBtn\");\n this.canShowSubmit = false;\n }\n\n upload(file) {\n this.uploader.create((error, blob) => {\n var additionalInfoHash = {\n browserName: this.browserName,\n errorName: \"DirectUploadError\"\n }\n\n if(error) {\n console.log(error)\n // Handle the error.\n this.showHideElementAfterUpload();\n let uploadErrors = this.messageForm.querySelector(\"#upload-errors\");\n let downloadBtn = this.messageForm.querySelector(\"#downloadBtn\");\n let submitBtnTop = this.messageForm.querySelector(\"#submitBtnTop\");\n\n if(uploadErrors){\n\n if(navigator.onLine === false) {\n let error_info = [];\n error_info.push(this.browserName, 'UserOffline');\n localStorage.setItem(\"error-info\", JSON.stringify(error_info));\n }\n\n // show upload error message\n uploadErrors.classList.remove(\"hidden\");\n uploadErrors.innerHTML = \"Oops, a network error prevented your recording from being fully uploaded. Our team has been alerted. Please use the 'Download recording' link to download your recording then try uploading manually or re-recording.\";\n }\n\n // Hide message creation buttons if we couldn't upload the recording\n if (submitBtnTop) {\n submitBtnTop.classList.add(\"hidden\");\n }\n if (this.submitButtonBottomContainer) {\n this.submitButtonBottomContainer.classList.add(\"hidden\");\n }\n\n if (this.messageForm.querySelector('.more-controls-buttons.new-msg-control-btn')) // Reveal the more menu where thr download link present\n this.messageForm.querySelector('.more-controls-buttons.new-msg-control-btn').classList.remove('hidden');\n\n if(downloadBtn) {\n downloadBtn.classList.remove(\"hidden\") // show the download button\n }\n\n if(this.disableBtn) {\n this.disableBtn.classList.remove(\"hidden\"); // show the disable button\n }\n\n this.shareIncompleteMultipartBlob();\n\n window.uploadErrorInitializer.assignError(error, additionalInfoHash);\n window.uploadErrorInitializer.sendError();\n\n if(window.appsignal !== undefined) {\n var span = window.appsignal.createSpan();\n\n span.setTags({ tag: \"Upload error\" }).setError(new Error(\"Direct upload failed while uploading file\"));\n window.appsignal.send(span);\n }\n }\n else {\n // Add the with the signature.\n var hiddenField = document.createElement('input')\n hiddenField.setAttribute('type', 'hidden');\n hiddenField.setAttribute(\"name\", \"message[media]\");\n hiddenField.setAttribute(\"id\", \"media-signed-id\");\n hiddenField.setAttribute('value', blob.signed_id);\n\n var hiddenContentType = document.createElement('input')\n hiddenContentType.setAttribute('type', 'hidden');\n hiddenContentType.setAttribute(\"name\", \"message[content_type]\");\n hiddenContentType.setAttribute(\"id\", \"media-content-type\");\n hiddenContentType.setAttribute('value', blob.content_type);\n\n var hiddenFieldType = document.createElement('input')\n hiddenFieldType.setAttribute('type', 'hidden');\n hiddenFieldType.setAttribute(\"name\", \"message[recorded_duration]\");\n hiddenFieldType.setAttribute(\"id\", \"media-recording-end-time\");\n hiddenFieldType.setAttribute('value', this.recordingEndTime);\n\n this.mediaField.insertAdjacentElement(\"afterend\", hiddenField);\n this.mediaField.insertAdjacentElement(\"afterend\", hiddenFieldType);\n this.mediaField.insertAdjacentElement(\"afterend\", hiddenContentType);\n\n // Show the submit button in the top controls\n if (this.messageForm !== null && this.messageForm.getAttribute('data-message--navigation-changed') === \"true\") {\n var submitBtnTop = this.messageForm.querySelector(\"#submitBtnTop\")\n if (submitBtnTop) submitBtnTop.classList.remove(\"hidden\");\n var tour_post_message = this.messageForm.querySelector(\"#tour-post-message\");\n if (tour_post_message) {\n tour_post_message.classList.remove(\"z-0\");\n tour_post_message.classList.add(\"translate-y-8\", \"opacity-100\", \"z-100\");\n }\n }\n\n // Enable submit button\n if(this.submitButtonBottom && blob.signed_id) {\n this.submitButtonBottom.disabled = false;\n this.submitButtonBottom.classList.remove(\"btn-disabled\");\n this.submitButtonBottom.classList.remove(\"hidden\");\n if (this.submitButtonBottomContainer) this.submitButtonBottomContainer.classList.remove(\"hidden\");\n if (this.saveButton)\n this.saveButton.classList.remove(\"hidden\");// Reveal the save draft button in the control bar\n if (this.scheduleButton)\n this.scheduleButton.classList.remove(\"hidden\");// Reveal the schedule button in the control bar\n\n if (this.messageForm.querySelector('.more-controls-buttons.new-msg-control-btn')) // Reveal the more menu where thr download link present\n this.messageForm.querySelector('.more-controls-buttons.new-msg-control-btn').classList.remove('hidden');\n\n if (this.editRecordingButton)\n this.editRecordingButton.classList.remove(\"hidden\"); // Reveal the edit recording button in the control bar\n } else {\n let uploadErrors = document.getElementById(\"upload-errors\");\n let downloadBtn = document.getElementById(\"downloadBtn\");\n\n if (this.messageForm.querySelector('.more-controls-buttons.new-msg-control-btn')) // Reveal the more menu where thr download link present\n this.messageForm.querySelector('.more-controls-buttons.new-msg-control-btn').classList.remove('hidden');\n\n if(downloadBtn) {\n downloadBtn.classList.remove(\"hidden\") // show the download button\n }\n\n // show upload error message\n uploadErrors.classList.remove(\"hidden\");\n uploadErrors.innerHTML = \"Oops, a network error prevented your recording from being fully uploaded. Our team has been alerted. Please use the 'Download recording' link to download your recording then try uploading manually or re-recording.\";\n\n window.uploadErrorInitializer.assignError(error, additionalInfoHash);\n window.uploadErrorInitializer.sendError();\n\n if(window.appsignal !== undefined) {\n var span = window.appsignal.createSpan();\n\n span.setTags({ tag: \"Upload error\" }).setError(new Error(\"Direct upload failed after uploading file\"));\n window.appsignal.send(span);\n }\n }\n\n\n\n if(this.canShowSubmit) {\n this.showHideElementAfterUpload();\n }\n\n this.removeMultipartElements();\n }\n });\n }\n\n directUploadWillStoreFileWithXHR(request) {\n this.xhrRequest = request;\n this.disableBtn.classList.remove(\"hidden\"); // show the download button\n\n // Update element based on the progress\n request.upload.addEventListener(\"progress\",\n event => this.directUploadDidProgress(event, this.submitButtonBottom))\n\n // Abort request based on listening to button click event\n if(this.disableBtn) {\n this.disableBtn.addEventListener(\"click\", (event) => {\n\n setTimeout(() => {\n if(this.disableBtn.dataset.discardRecording === \"true\") {\n this.xhrRequest.abort();\n // Reset element once request is aborted\n this.showHideElementAfterUpload();\n\n }\n }, 1000);\n })\n }\n }\n\n preventPageRefresh(event) {\n event.preventDefault();\n event.returnValue = '';\n return \"Video upload is in progress\";\n }\n\n directUploadDidProgress(event) {\n let percent = ((event.loaded / event.total) * 100).toFixed(1);\n\n if(this.customProgressElements){\n // // Show progress wrapper when upload is in progress\n // Array.from(this.customProgressWrapElements).forEach((customProgressWrapElement) => {\n // customProgressWrapElement.classList.remove(\"hidden\")\n // })\n\n Array.from(this.customProgressElements).forEach((customProgressElement) => {\n console.log('output percentage:');\n console.log(percent);\n if(percent === \"100.0\") {\n this.canShowSubmit = true;\n } else {\n if(!customProgressElement.classList.contains(\"hidden\")){\n customProgressElement.classList.remove(\"hidden\")\n }\n }\n\n // Update width of the progressbar based on the upload percentage\n customProgressElement.style.width = `${percent}%`;\n })\n }\n }\n\n showHideElementAfterUpload() {\n // Remove before unload event to allow users to close the browser window\n window.removeEventListener('beforeunload', this.preventPageRefresh)\n\n // Hide progress bar once request is completed\n // Array.from(this.customProgressElements).forEach((customProgressElement) => {\n // customProgressElement.classList.add(\"hidden\")\n // Array.from(this.customProgressWrapElements).forEach((customProgressWrapElement) => {\n // customProgressWrapElement.classList.add(\"hidden\")\n // })\n // })\n\n this.messageForm.querySelector(\"#progressBar\").classList.add(\"hidden\"); // Hide the progress bar in the top controls\n\n // Close modal only when it is open\n let uploadCloseModal = this.messageForm.querySelector(\"#video-upload-close-modal\");\n let modalBackground = this.messageForm.querySelector(\"#modal-background\");\n if(modalBackground) {\n uploadCloseModal.click()\n }\n }\n\n removeMultipartElements() {\n // Remove multipart related elements\n var mediaKey = this.messageForm.querySelector(\"#media-key\")\n var mediaFile = this.messageForm.querySelector(\"#media-filename\")\n\n if(mediaKey) {\n mediaKey.remove();\n }\n if(mediaFile) {\n mediaFile.remove();\n }\n }\n\n shareIncompleteMultipartBlob() {\n var incompleteMediaKey = this.messageForm.querySelector(\"#media-incomplete-multipart-key\");\n var sessionUserId = this.messageForm.querySelector(\"#session-user-id\");\n var sessionUserIdValue, incompleteMediaKeyValue;\n\n if(sessionUserId)\n sessionUserIdValue = sessionUserId.value\n\n if(incompleteMediaKey)\n incompleteMediaKeyValue = incompleteMediaKey.value\n\n if(incompleteMediaKey) {\n var params = new URLSearchParams({\n incomplete_media_key: incompleteMediaKeyValue,\n user_id: sessionUserIdValue\n })\n fetch(`/accounts/${accountId}/mail_incomplete_multipart_recording?${params}`, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then(response => response.json())\n .then(data => {\n console.log(data);\n })\n .catch(e => {\n console.log(e)\n\n if(window.appsignal !== undefined) window.appsignal.sendError(e);\n });\n }\n }\n}","import { Controller } from \"stimulus\";\nimport UploadError from \"./concerns/upload_error\";\nimport screen_media_stream from \"./media_streams/screen_media_stream\";\nimport audio_media_stream from \"./media_streams/audio_media_stream\";\nimport camera_media_stream from \"./media_streams/camera_media_stream\";\nimport media_recorder from \"./recorder/media_recorder\";\n\nvar limitRecordingInterval;\nwindow.multiPartUploadInitializer = window.createUploadPromise = undefined;\n\nexport default class extends Controller {\n static values = {\n pendingSeconds: String,\n freeAccount: String,\n nonAccountMember: String,\n maxMediaSize: Number,\n timeLeft: Number,\n recordingEnded: Boolean,\n recorderError: Object\n }\n\n static targets = [\"messageUI\",\n \"controls\",\n \"messageTypeField\",\n \"messageTypeMenu\",\n \"tallVideoField\",\n \"kickoffRecordingPanel\",\n \"preview\",\n \"recording\",\n \"backgroundImage\",\n \"initiateDeviceSelectionBtn\",\n \"camMicSelectors\",\n \"selectAudioSource\",\n \"selectVideoSource\",\n \"selectCameraLayout\",\n \"troubleshootModal\",\n \"prerecordOverlay\",\n \"loadingIcon\",\n \"startCameraRecordBtn\",\n \"startScreenRecordBtn\",\n \"startMicRecordBtn\",\n \"countdown\",\n \"previewStreamPlayer\",\n \"screenRecordingInProgress\",\n \"screenRecordingInProgressMessage\",\n \"micRecordingInProgress\",\n \"screenCameraRecordingInProgress\",\n \"micRecordingInProgressMessage\",\n \"screenCameraRecordingInProgressMessage\",\n \"timer\",\n \"recordingIndicator\",\n \"recordingIndicatorIcon\",\n \"resetBtn\",\n \"stopBtn\",\n \"pauseBtn\",\n \"resumeBtn\",\n \"discardBtn\",\n \"preRecordPipBtn\",\n \"duringRecordPipBtn\",\n \"downloadBtn\",\n \"saveBtn\",\n \"scheduleBtn\",\n \"cancelBtn\",\n \"scheduledBooleanInput\",\n \"editTextBtn\",\n \"editRecordBtn\",\n \"mediaField\",\n \"textEditor\",\n \"submitButtonBottomContainer\",\n \"submitButtonBottom\",\n \"submitButtonTop\",\n \"submitButtonUploader\",\n \"progressBar\",\n \"activeMedia\",\n \"uploadError\",\n \"reachedLimitMessage\",\n \"notYouLink\",\n \"embedIframeField\",\n \"embedPlayerLinkField\",\n \"fileAttachmentField\",\n \"conversationLinkField\",\n \"mediaDevice\"\n ]\n\n connect() {\n var screen_width = screen.width;\n var screen_height = screen.height;\n var screen_aspect_ratio = screen_width/screen_height;\n if (screen_aspect_ratio < 1) {\n this.tallVideoFieldTarget.value = true;\n }\n if (this.hasSubmitButtonBottomContainerTarget) {\n this.submitButtonBottomContainerTarget.classList.add(\"hidden\");\n }\n if (this.hasResumeBtnTarget && this.hasSubmitButtonTopTarget) {\n this.submitButtonTopTarget.classList.add(\"hidden\");\n }\n window.uploadErrorInitializer = new UploadError;\n window.uploadErrorInitializer.setItemInLocalStorage();\n\n if (this.hasMediaFieldTarget) {\n this.mediaFieldTarget.dataset.directUploadUrl = this.mediaFieldTarget.dataset.directUploadUrl + `?enable_hifi_recording=${this.mediaFieldTarget.dataset.enableHifiRecording}`\n }\n }\n\n initiateDeviceSelection() {\n this.camMicSelectorsTarget.classList.remove(\"hidden\");\n var message_type = this.messageTypeFieldTarget.value;\n this.initiateDeviceSelectionBtnTarget.classList.add('hidden', 'sm:hidden');\n if (message_type === \"screencamera\" || message_type === \"camera\") {\n this.selectVideoSourceTarget.classList.remove('hidden');\n }\n this.selectAudioSourceTarget.classList.remove('hidden');\n this.resetBtnTarget.classList.remove('hidden');\n this.previewStream();\n }\n\n previewStream(){\n // Method will be called when mic/camera device toggled to initiate stream in preview before user clicks share your screen btn\n var cameraButton = this.mediaDeviceTarget.querySelector('div[data-message--kickoff-recording-target=\"cameraButton\"]');\n var micButton = this.mediaDeviceTarget.querySelector('div[data-message--kickoff-recording-target=\"micButton\"]');\n\n // Turn off/stop all active stream either if its activated by base message or thread message\n this.stop();\n // checking initiateDeviceSelection() called before. below codes have to executed only if user see camera or mic in selection device\n if(!this.initiateDeviceSelectionBtnTarget.classList.contains('sm:hidden')) return\n\n if(cameraButton.classList.contains('active'))\n camera_media_stream.call(this);\n else if(micButton.classList.contains('active'))\n audio_media_stream.call(this);\n else\n this.stop();\n }\n\n start_camera_preview() {\n this.previewStartedUI(); // UI updates when preview (camera or screen) has started\n this.previewCameraStartedUI(); // UI updates when preview of camera has started\n\n camera_media_stream.call(this);\n }// END: start_camera_preview()\n\n start_mic_preview() {\n this.previewStartedUI(); // UI updates when preview (camera or screen or mic) has started\n this.previewMicStartedUI(); // UI updates when preview of mic has started\n\n audio_media_stream.call(this);\n }// END: start_mic_preview()\n\n start_screen_preview() {\n this.previewStartedUI(); // UI updates when preview (camera or screen) has started\n this.previewScreenStartedUI(); // UI updates when preview of screen has started\n\n screen_media_stream.call(this);\n }// END: start_camera_preview()\n\n start_countdown() {\n var countdown_container = this.countdownTarget;\n this.startScreenRecordBtnTarget.classList.add(\"hidden\"); // Hide \"start recording screen\" button\n this.startCameraRecordBtnTarget.classList.add(\"hidden\"); // Hide \"start recording camera\" button\n this.startMicRecordBtnTarget.classList.add(\"hidden\"); // Hide \"start recording camera\" button\n this.camMicSelectorsTarget.classList.add(\"hidden\"); // Hide camere and mic selection\n countdown_container.classList.remove(\"hidden\"); // Show countdown\n\n var countdownTimeleft = 2;\n var countdownTimer = setInterval(function(){\n if(countdownTimeleft <= 0){\n clearInterval(countdownTimer);\n countdown_container.querySelector(\"#start-record\").click();\n } else {\n countdown_container.querySelector(\"#countdown-numbers\").innerHTML = countdownTimeleft;\n }\n countdownTimeleft -= 1;\n }, 1000);\n }\n\n start_record() {\n this.recordingStartedUI();\n this.start_timer();\n this.limitRecording();\n\n media_recorder.call(this);\n }\n\n start_timer() {\n var timer_containers = this.timerTargets;\n timer_containers.forEach(target => target.classList.remove(\"hidden\"));\n if (this.hasMessageTypeMenuTarget) this.messageTypeMenuTarget.classList.add(\"hidden\"); // Hide message type menu when countdown starts\n\n var countFromDate = new Date();\n var minutes, seconds, prev_distance, distance, localRecordingLimit;\n localRecordingLimit = this.pendingSecondsValue;\n\n // Update the count down every 1 second\n window.timerInterval = setInterval(function() {\n \n // Get todays date and time\n var now = new Date().getTime();\n\n // Find the distance between now an the count down date\n distance = now - countFromDate.getTime();\n prev_distance = distance;\n\n // Time calculations for minutes and seconds\n minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n // Add preceding zeros to seconds, if present\n var seconds_value = seconds.toString().padStart(2, '0');\n\n // Output the result in an element with id=\"demo\"\n timer_containers.forEach((element) => {\n var timer_element = element.querySelector(\"#timer\");\n timer_element.innerHTML = minutes + \":\" + seconds_value;\n })\n }, 0);\n\n if(this.pauseBtnTargets) {\n this.pauseBtnTargets.forEach((element) => {\n element.addEventListener(\"click\", function () {\n prev_distance = distance;\n\n if (window.timerInterval) clearInterval(window.timerInterval);\n if (limitRecordingInterval) {\n clearTimeout(limitRecordingInterval)\n\n this.pendingSecondsValue = parseInt(localRecordingLimit) - ((minutes * 60) + seconds);\n }\n\n }.bind(this))\n })\n }\n if(this.resumeBtnTargets) {\n this.resumeBtnTargets.forEach((element) => {\n element.addEventListener(\"click\", function () {\n countFromDate = new Date();\n\n this.limitRecording();\n window.timerInterval = setInterval(function() {\n\n // Get todays date and time\n var now = new Date().getTime();\n\n // Find the distance between now an the count down date\n distance = now - countFromDate.getTime();\n\n distance = prev_distance + distance; if(prev_distance !== undefined)\n // Time calculations for minutes and seconds\n minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n seconds = Math.floor((distance % (1000 * 60)) / 1000);\n\n // Add preceding zeros to seconds, if present\n var seconds_value = seconds.toString().padStart(2, '0');\n\n // Output the result in an element with id=\"demo\"\n timer_containers.forEach((element) => {\n var timer_element = element.querySelector(\"#timer\");\n timer_element.innerHTML = minutes + \":\" + seconds_value;\n })\n }, 0);\n }.bind(this))\n })\n }\n\n\n\n\n }\n\n stop() {\n this.messageUITarget.querySelector(\"#lowAudioLevelAlert\").classList.add(\"hidden\");\n this.messageUITarget.querySelector(\"#recLowAudioLevelAlert\").classList.add(\"hidden\");\n\n // stop stream\n if (window.stream) {\n window.stream.getTracks().forEach(track => {\n track.stop();\n });\n }\n\n if(window.streamArr) {\n window.streamArr.forEach(stream => {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n })\n\n window.streamArr = [];\n }\n\n if(document.pictureInPictureElement) {\n document.exitPictureInPicture();\n }\n\n this.clearConversationLink()\n }\n\n async discard_and_re_record() {\n this.recordingTarget.src = '';\n this.recordingTarget.classList.add(\"hidden\"); // show the recording playback\n\n var newMessageForm = this.messageUITarget\n\n if(newMessageForm){\n newMessageForm.removeAttribute('data-message--navigation-changed')\n newMessageForm.setAttribute('data-message--navigation-changed', 'false')\n }\n\n if(this.hasDiscardBtnTarget){\n this.discardBtnTarget.setAttribute(\"data-discard-recording\", \"true\")\n this.discardBtnTarget.classList.add(\"hidden\");\n if (this.hasSubmitButtonBottomTarget) this.submitButtonBottomTarget.disable = true;\n if (this.hasSubmitButtonTopTarget) this.submitButtonTopTarget.disable = true;\n if (this.hasSubmitButtonBottomTarget) this.submitButtonBottomTarget.classList.add(\"hidden\");\n if (this.hasSubmitButtonTopTarget) this.submitButtonTopTarget.classList.add(\"hidden\");\n if (this.hasSaveBtnTarget) {\n this.saveBtnTarget.remove();\n }\n }\n\n let mediaSignedId = document.querySelector(\"#media-signed-id\")\n if(mediaSignedId) {\n let data = {\n signed_id: mediaSignedId.value\n };\n\n await fetch(\"/transcoded_medias/delete_message_blob\",{\n method: \"DELETE\",\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(data)\n })\n .then(response => response.json())\n .then(data => {\n mediaSignedId.value = '';\n console.log('Success:', data);\n window.location.reload(true);\n })\n .catch((error) => {\n console.error('Error:', error);\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId})\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"AbortPartUploadError\", message: error});\n window.appsignal.send(span);};\n });\n }\n\n if(window.multiPartUploadInitializer && window.createUploadPromise) {\n window.multiPartUploadInitializer.discardUpload();\n }\n }\n\n previewStartedUI() {\n // The preview (camera, screen, or mic) has started...\n this.controlsTarget.classList.remove(\"hidden\");\n this.camMicSelectorsTarget.classList.remove(\"hidden\"); // Show the camera and mic selectors overlay\n this.initiateDeviceSelectionBtnTarget.classList.add(\"hidden\", \"sm:hidden\"); // Hide the \"Select devices\" button since we don't need to re-initiate that now that the preview has started.\n this.element.classList.remove(\"mt-8\"); // Remove top margin from the form element because the controls bar will now provide that.\n this.kickoffRecordingPanelTarget.classList.add(\"hidden\"); // Hide the Kickoff panel\n this.resetBtnTarget.classList.remove(\"hidden\"); // show \"reset\" button\n if (this.hasCancelBtnTarget) {\n this.cancelBtnTarget.classList.add(\"hidden\"); // hide the \"cancel new message\" button (user can use the reset button at this stage)\n }\n if (this.hasEditTextBtnTarget) { this.editTextBtnTarget.classList.remove(\"hidden\"); }// show \"edit text\" button\n this.previewTarget.classList.remove(\"hidden\"); // show the preview container\n if (this.hasSaveBtnTarget) {\n this.saveBtnTarget.classList.add(\"hidden\");\n }\n if (this.hasScheduleBtnTarget) {\n this.scheduleBtnTarget.classList.add(\"hidden\");\n }\n\n if(document.querySelector('div[data-message--kickoff-recording-target=\"micButton\"]').classList.contains('active')) {\n this.selectAudioSourceTarget.classList.remove(\"hidden\"); // Show the mic selection + Audio meter\n }\n }\n\n previewCameraStartedUI() {\n this.prerecordOverlayTarget.classList.add(\"bg-white\", \"bg-opacity-60\"); // Make the overlay background transparent so user can see the preview of their camera\n this.selectVideoSourceTarget.classList.remove(\"hidden\"); // Show the camera selection dropdown\n this.previewStreamPlayerTarget.classList.remove(\"hidden\"); // show the camera preview stream player\n if (this.hasBackgroundImageTarget) {\n this.backgroundImageTarget.classList.remove(\"hidden\"); // show the background image button\n }\n var timeLimitInfo = this.previewTarget.querySelector(\".time-limit-info\");\n if (timeLimitInfo) {\n timeLimitInfo.classList.add(\"text-gray-700\");\n var timeLimitInfoLink = timeLimitInfo.querySelector(\"a\");\n if (timeLimitInfoLink) {\n timeLimitInfoLink.classList.add(\"text-white\");\n timeLimitInfoLink.classList.remove(\"text-primary-600\");\n }\n }\n }\n\n previewMicStartedUI() {\n this.selectAudioSourceTarget.classList.remove(\"hidden\"); // Show the mic selection + Audio meter\n this.selectVideoSourceTarget.classList.add(\"hidden\"); // hide the camera selection\n this.micRecordingInProgressTarget.classList.remove(\"hidden\"); // show \"screen recording in progress...\" container\n }\n\n previewScreenStartedUI() {\n if (this.messageTypeFieldTarget.value == \"screencamera\") {\n this.selectVideoSourceTarget.classList.remove(\"hidden\"); // Show the camera selection\n this.preRecordPipBtnTarget.classList.remove(\"hidden\"); // Show the PIP status button\n }\n this.screenRecordingInProgressTarget.classList.remove(\"hidden\"); // show \"screen recording in progress...\" container\n }\n\n screenRecordingStartedUI() {\n // show the \"screen recording in progress...\" content, but wait 3 seconds for the 3,2,1 timer to complete first.\n setTimeout(() => this.screenRecordingInProgressMessageTarget.classList.remove(\"opacity-0\"), 3000)\n }\n\n micRecordingStartedUI() {\n // show the \"screen recording in progress...\" content, but wait 3 seconds for the 3,2,1 timer to complete first.\n setTimeout(() => this.micRecordingInProgressMessageTarget.classList.remove(\"opacity-0\"), 3000)\n }\n\n recordingStartedUI() {\n const sUsrAg = navigator.userAgent.toLowerCase();\n let isSafari = false;\n if (sUsrAg.indexOf('safari') !== -1 && sUsrAg.indexOf('chrome') === -1) {\n isSafari = true;\n }\n\n this.element.classList.add(\"recording-in-progress\");\n\n this.camMicSelectorsTarget.classList.add(\"hidden\"); // Hide camere and mic selection\n this.prerecordOverlayTarget.classList.add(\"hidden\"); // hide pre-recording overlay\n this.stopBtnTargets.forEach(target => target.classList.remove(\"hidden\")); // show \"stop\" button\n this.stopBtnTarget.classList.add(\"recording\"); // Add .recording class to the Stop button so we can change its color\n this.recordingIndicatorTargets.forEach(target => target.classList.remove(\"hidden\")); // Show the recording indicator button\n this.resetBtnTarget.classList.add(\"hidden\"); // hide \"reset\" button\n this.pauseBtnTargets.forEach(target => target.classList.remove(\"hidden\")); // Show the pause button\n this.resumeBtnTargets.forEach(target => target.classList.add(\"hidden\")) // Show the pause button\n this.preRecordPipBtnTarget.classList.add(\"hidden\"); // Hide the camera button\n if (this.hasSaveBtnTarget) {\n this.saveBtnTarget.classList.add(\"hidden\"); // Hide the save draft button (if it is shown)\n }\n if (this.hasScheduleBtnTarget) {\n this.scheduleBtnTarget.classList.add(\"hidden\"); // Hide the schedule button (if it is shown)\n }\n if (this.hasNotYouLinkTarget) {\n this.notYouLinkTarget.classList.add(\"hidden\"); // Hide the \"Not you?\" link on user's avatar, if present\n }\n if (this.hasBackgroundImageTarget) {\n this.backgroundImageTarget.classList.add(\"hidden\"); // Hide the background image button\n }\n\n if (this.hasSubmitButtonBottomContainerTarget) {\n this.submitButtonBottomContainerTarget.classList.add(\"hidden\");\n }\n\n if (this.hasSubmitButtonTopTarget) {\n this.submitButtonTopTarget.classList.add(\"hidden\");\n }\n \n document.title = `Recording...`;\n }\n\n recordingFinishedUI() {\n // Now that the recording is finished...\n\n this.previewTarget.classList.add(\"hidden\"); // hide the preview stream\n this.recordingTarget.classList.remove(\"hidden\"); // show the recording playback\n\n // For some reason, recordings inside threads added this vjs-controls-disabled class, which prevents playback after finishing recording.\n // If that class is present, remove it so that user can playback their recording.\n var disabled_player = this.recordingTarget.querySelector(\".vjs-controls-disabled\");\n if (disabled_player) {\n disabled_player.classList.remove(\"vjs-controls-disabled\");\n }\n\n this.stopBtnTargets.forEach(target => target.classList.add(\"hidden\")); // hide the stop button\n this.timerTargets.forEach(target => target.classList.add(\"hidden\")); // hide the timer\n this.progressBarTarget.classList.remove(\"hidden\"); // show the progress bar\n this.stopBtnTarget.classList.remove(\"recording\"); // remove the .recording class from the stop button\n this.recordingIndicatorTargets.forEach(target => target.classList.add(\"hidden\")); // Hide the recording indicator button\n this.resumeBtnTargets.forEach(target => target.classList.add(\"hidden\")); // Hide the resume button\n this.pauseBtnTargets.forEach(target => target.classList.add(\"hidden\")); // Hide the pause button\n this.preRecordPipBtnTarget.classList.add(\"hidden\"); // Hide the pip button\n this.duringRecordPipBtnTarget.classList.add(\"hidden\"); // Hide the pip button\n this.downloadBtnTarget.classList.remove(\"hidden\"); // Reveal the download button\n this.duringRecordPipBtnTarget.classList.add(\"hidden\"); // Hide the pip button\n this.discardBtnTarget.classList.remove(\"hidden\"); // Reveal the 'discard & re-record' button\n this.messageUITarget.querySelector(\"#recLowAudioLevelAlert\").remove(); // removed the low audio level indicator\n this.messageUITarget.querySelector(\"#lowAudioLevelAlert\").remove(); // removed the low audio level indicator\n document.title = 'Almost finished...';\n\n var new_message = this.messageUITarget\n new_message.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n\n // From fixed message creation controls\n var fixedMessageControls = document.querySelector('#fixed-message-creation-controls');\n if (fixedMessageControls) fixedMessageControls.remove();\n }\n\n hideRecordingUI() {\n this.recordingTarget.classList.add(\"hidden\"); // show the recording playback\n }\n\n reveal_create_button() {\n this.changeBtnText()\n \n if (!this.element.classList.contains(\"recording-in-progress\")) {\n \n // Show the save draft button icon\n if (this.hasSaveBtnTarget) {\n this.saveBtnTarget.classList.remove(\"hidden\");\n }\n\n // Show the schedule button icon\n if (this.hasScheduleBtnTarget) {\n this.scheduleBtnTarget.classList.remove(\"hidden\");\n }\n\n if (this.hasSubmitButtonTopTarget) this.submitButtonTopTarget.classList.remove(\"hidden\"); // Unhide the top submit button\n if (this.hasSubmitButtonBottomContainerTarget) this.submitButtonBottomContainerTarget.classList.remove(\"hidden\"); // Unhide the bottom container\n if (this.hasSubmitButtonBottomTarget) this.submitButtonBottomTarget.classList.remove(\"hidden\"); // Unhide the bottom submit button\n\n if (this.hasMessageTypeMenuTarget) {\n this.messageTypeMenuTarget.classList.add(\"truncated\"); // Change the message type menu to truncated mode (shorter width)\n }\n }\n }\n\n hide_create_button() {\n this.submitButtonTopTarget.classList.add(\"hidden\");\n this.submitButtonBottomContainerTarget.classList.add(\"hidden\");\n this.submitButtonBottomTarget.classList.add(\"hidden\");\n }\n\n preventDiscardAndSaveDraftAndEditRecordButtonClick() {\n this.discardBtnTarget.disabled = true;\n this.discardBtnTarget.setAttribute(\"data-prevent-execution\", \"true\")\n if(this.hasEditRecordBtnTarget) {\n this.editRecordBtnTarget.dataset.preventFormSubmit = true; // setting data attribute to avoid multiple form submit when multiple request arrives\n }\n if (this.hasSaveBtnTarget) {\n this.saveBtnTarget.dataset.preventFormSubmit = true; // setting data attribute to avoid multiple form submit when multiple request arrives\n }\n }\n\n preventSubmitButtonClick(){\n if (this.hasSubmitButtonBottomTarget) this.submitButtonBottomTarget.disabled = true;\n if (this.hasSubmitButtonTopTarget) this.submitButtonTopTarget.disabled = true;\n }\n\n mediaError(error) {\n if(error.name === \"NotAllowedError\" || error.name === \"NotFoundError\") {\n console.log(\"Media permission denied...\")\n } else if (error.name === \"NotReadableError\" || error.name === \"TrackStartError\") {\n console.log(\"webcam or mic are already in use\")\n } else if (error.name === \"OverconstrainedError\" || error.name === \"ConstraintNotSatisfiedError\") {\n console.log(\"constraints can not be satisfied by avb. devices\")\n } else if (error.name === \"NotAllowedError\" || error.name === \"PermissionDeniedError\") {\n console.log(\"permission denied in browser\")\n } else if (error.name === \"TypeError\") {\n console.log(\"empty constraints object\")\n } else if (error.name === \"AbortError\") {\n console.log(\"User and browser both granted access to hardware device but some problem occurred which prevented the device from being used.\")\n } else if (error.name === \"OverconstrainedError\") {\n console.log(\"Constraint property string value not meet\")\n } else if (error.name === \"SecurityError\") {\n console.log(\"User media support is disabled\")\n }\n\n var troubleshootModal = this.troubleshootModalTarget;\n var jsError = this.messageUITarget.querySelector(\"#troubleshootJsError\");\n var browserNameElements = document.querySelectorAll(\".troubleshootModalBrowserName\");\n var osName = this.messageUITarget.querySelector(\"#troubleshootModalOsName\");\n var winControl = this.messageUITarget.querySelector(\"#winControl\");\n var macCommand = this.messageUITarget.querySelector(\"#macCommand\");\n var browserName = this.detectBrowser();\n\n var additionalInfoHash = {\n \"browserName\": browserName\n }\n\n // Assign error values and send error\n window.uploadErrorInitializer.assignError(error, additionalInfoHash);\n window.uploadErrorInitializer.sendError();\n\n if(troubleshootModal) {\n troubleshootModal.click(); // open modal\n\n for (let browserNameElement of browserNameElements) {\n browserNameElement.innerText = browserName;\n }\n\n var os_name = this.detectOs();\n if(osName) osName.innerText = os_name;\n if(jsError) jsError.innerText = error.name;\n\n if (os_name === \"Windows\") {\n document.querySelector(\"#windows-instructions\").classList.remove(\"hidden\");\n document.querySelector(\"#mac-instructions\").classList.add(\"hidden\");\n if (winControl) {\n winControl.classList.remove(\"hidden\");\n macCommand.classList.add(\"hidden\");\n }\n } else {\n document.querySelector(\"#windows-instructions\").classList.add(\"hidden\");\n document.querySelector(\"#mac-instructions\").classList.remove(\"hidden\");\n if (macCommand) {\n winControl.classList.add(\"hidden\");\n macCommand.classList.remove(\"hidden\");\n }\n }\n }\n }\n\n detectBrowser() {\n var nAgent = navigator.userAgent;\n var browserName;\n if (nAgent.indexOf(\"Firefox\")!== -1) browserName = \"Firefox\";\n if (nAgent.indexOf(\"Safari\")!== -1) browserName = \"Safari\";\n if (nAgent.indexOf(\"Chrome\")!== -1) browserName = \"Chrome\";\n if (nAgent.indexOf(\"MSIE\")!== -1) browserName = \"MSIE\";\n if (nAgent.indexOf(\"Opera\")!== -1) browserName = \"Opera\";\n\n return browserName;\n }\n\n detectOs() {\n var OSName;\n if (navigator.appVersion.indexOf(\"Win\")!== -1) OSName = \"Windows\";\n if (navigator.appVersion.indexOf(\"Mac\")!== -1) OSName = \"MacOS\";\n if (navigator.appVersion.indexOf(\"X11\")!== -1) OSName = \"UNIX\";\n if (navigator.appVersion.indexOf(\"Linux\")!== -1) OSName = \"Linux\";\n\n return OSName;\n }\n\n limitRecording() {\n var pendingSeconds;\n let recordingTimers = this.messageUITarget.querySelectorAll(\"#recordingIndicatorTimer\");\n let stopBtns = this.messageUITarget.querySelectorAll(\"#stopRecordingBtn\");\n\n\n if(Number.isInteger(this.timeLeftValue) && (this.timeLeftValue > 0 || this.recordingEndedValue === true)) {\n // check if record limit countdown is in progress(timeLeftValue will be 1>= value)\n // or recordingEndedValue is true when countdown time left is 1 or 0 second\n pendingSeconds = this.timeLeftValue\n } else {\n pendingSeconds = parseInt(this.pendingSecondsValue);\n }\n\n let non_account_member = this.nonAccountMemberValue\n\n if(non_account_member === \"true\") {\n // will execute only if current account is free account\n limitRecordingInterval = setTimeout(function () {\n // setTimeout will execute the code when 10 seconds left\n // execute the countdown when pending seconds is less than 10 secs\n this.endRecordingTimer(pendingSeconds)\n }.bind(this), (pendingSeconds - 10) * 1000)\n\n\n if(recordingTimers) {\n recordingTimers.forEach(element => {\n element.addEventListener(\"click\", (e) => {\n clearInterval(limitRecordingInterval);\n clearInterval(window.timerInterval);\n document.title = \"Recording stopped...\";\n });\n });\n }\n\n if(stopBtns) {\n stopBtns.forEach(element => {\n element.addEventListener(\"click\", (e) => {\n clearInterval(limitRecordingInterval);\n clearInterval(window.timerInterval);\n document.title = \"Recording stopped...\";\n });\n });\n }\n }\n }\n\n endRecordingTimer(pendingSeconds, maxMediaError = false) {\n var recordingIndicators = this.recordingIndicatorTargets;\n let timer_containers = this.timerTargets;\n\n recordingIndicators.forEach(element => {\n var timer_pulse = element.querySelector(\"#timer-pulse\");\n element.classList.add(\"border-primary-600\", \"bg-white\");\n timer_pulse.classList.remove(\"hidden\");\n })\n timer_containers.forEach(element => {\n var timer_element = element.querySelector(\"#timer\");\n timer_element.classList.add(\"nearing-limit\")\n })\n\n\n this.timeLeftValue = (pendingSeconds > 10) ? 10 : pendingSeconds;\n\n clearInterval(window.timerInterval); // clear normal start timer or resume timer\n\n window.timerInterval = setInterval(function () {\n if(this.timeLeftValue <= 0) {\n clearInterval(window.timerInterval); // clear window.timerInterval to stop countdown\n this.stopBtnTarget.click();\n document.title = \"Recording stopped...\";\n this.timeLeftValue = 0;\n\n if(this.hasReachedLimitMessageTarget) {\n // show limit reached message at the top of preview\n this.reachedLimitMessageTarget.classList.remove(\"hidden\");\n\n // Trigger a \"click\" of this invisible link to fire the customer.io event only for free account\n var hitRecordingLimit = this.reachedLimitMessageTarget.querySelector(\"#fire-hit-recording-limit-event\")\n\n if(hitRecordingLimit) {\n var attachPrefixUrl = hitRecordingLimit.href.includes('?') ? hitRecordingLimit.href + '&' : hitRecordingLimit.href + '?';\n this.reachedLimitMessageTarget.querySelector(\"#fire-hit-recording-limit-event\").href = attachPrefixUrl + 'triggered_from_creation_controller=true';\n hitRecordingLimit.click();\n }\n\n\n if(maxMediaError === true) {\n this.reachedLimitMessageTarget.innerHTML = \"Your recording automatically stopped because it reached the maximum file size\";\n }\n }\n\n\n } else {\n timer_containers.forEach(element => {\n var timer_element = element.querySelector(\"#timer\");\n timer_element.innerHTML = this.timeLeftValue; // show the countdown in timer html element\n })\n document.title = `${this.timeLeftValue} seconds until recording stops...`; // update the tab title\n }\n\n this.timeLeftValue -= 1;\n if(this.timeLeftValue === 0) {\n // set timeLeftValue when countdown reaches 0 secs\n this.recordingEndedValue = true;\n }\n }.bind(this), 1000);\n }\n\n // function will stop camera stream, screen stream and pipwindow\n resetDeviceSelection() {\n console.log(window.stream, window.streamArr)\n if (window.stream) {\n window.stream.getTracks().forEach(track => {\n track.stop();\n });\n\n if(window.streamArr) {\n window.streamArr.forEach(stream => {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n })\n }\n }\n\n if (document.pictureInPictureElement) {\n document.exitPictureInPicture(); // close PiP window\n }\n }\n\n validateMessage(event){\n event.preventDefault()\n\n // Text - Check if the text input has value\n if(this.textEditorTarget.querySelector('input').value){\n return this.dispatchMessageValidated(event)\n }\n\n if(this.hasMediaFieldTarget){\n // Record - Check if the media is recorded\n var recorded_media = this.mediaFieldTarget.parentElement.querySelector('#media-signed-id')\n if(recorded_media && recorded_media.value)\n return this.dispatchMessageValidated(event)\n\n var multi_part_upload = this.mediaFieldTarget.parentElement.querySelector('#media-key')\n if(multi_part_upload && multi_part_upload.value)\n return this.dispatchMessageValidated(event)\n\n // Upload - Check if the media is uploaded\n if(this.mediaFieldTarget.files.length)\n return this.dispatchMessageValidated(event)\n }\n\n // Embed - Check if the embedded URL if filled\n if(this.embedIframeFieldTarget.value || this.embedPlayerLinkFieldTarget.value)\n return this.dispatchMessageValidated(event)\n\n // Files - Check if the file is attached\n if(this.fileAttachmentFieldTarget.dataset.filesLength > 0)\n return this.dispatchMessageValidated(event)\n\n var error_message = \"Message doesn't have any content\";\n var bottom_error_container = this.messageUITarget.querySelector('.new-message-submit-block .error-message');\n var top_error_container = this.messageUITarget.querySelector('#upload-errors');\n\n bottom_error_container.classList.remove(\"hidden\");\n bottom_error_container.innerHTML = error_message;\n top_error_container.classList.remove(\"hidden\");\n top_error_container.innerHTML = error_message;\n }\n\n dispatchMessageValidated(event){\n event.target.dispatchEvent(new CustomEvent(\"message-validated\", { bubbles: true }));\n }\n\n clearConversationLink(event){\n if (this.hasConversationLinkFieldTarget) this.conversationLinkFieldTarget.value = null\n this.changeBtnText()\n }\n\n changeBtnText(event){\n var button_text;\n if (this.element.id === 'edit-message-template') {\n return;\n }\n if (this.hasSubmitButtonTopTarget) var submitting_text = this.submitButtonTopTarget.dataset.disableWith;\n\n if (this.hasScheduledBooleanInputTarget && this.scheduledBooleanInputTarget.value == \"true\" && this.hasSubmitButtonTopTarget) {\n button_text = this.submitButtonTopTarget.dataset.scheduleMessageBtnText;\n submitting_text = this.submitButtonTopTarget.dataset.scheduleMessageSubmittingText;\n } else if(this.conversationLinkFieldTarget.value && this.hasSubmitButtonTopTarget) {\n button_text = this.submitButtonTopTarget.dataset.conversationLinkBtnText\n } else {\n if (this.hasSubmitButtonTopTarget) button_text = this.submitButtonTopTarget.dataset.btnText\n }\n\n if (this.hasSubmitButtonTopTarget) this.submitButtonTopTarget.innerHTML = button_text;\n if (this.hasSubmitButtonBottomTarget) this.submitButtonBottomTarget.innerHTML = button_text;\n if (this.hasSubmitButtonTopTarget) this.submitButtonTopTarget.dataset.disableWith = submitting_text;\n if (this.hasSubmitButtonBottomTarget) this.submitButtonBottomTarget.dataset.disableWith = submitting_text;\n }\n\n insertFixedControls(event){\n\n Rails.ajax({\n type: \"get\",\n url: '/insert_fixed_controls?form_id=' + event.target.closest('form').id\n })\n }\n\n got_to_message_creator(event){\n var form = event.target.closest('form')\n if (form) {\n form.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n }\n }\n\n close_fixed_controls(){\n var fixed_controls = document.querySelector('#fixed-message-creation-controls')\n fixed_controls.remove()\n }\n\n reveal_select_dropdown(event){\n Rails.ajax({\n type: \"get\",\n url: '/reveal_select_dropdown?message_template_id=' + event.target.value\n })\n }\n}\n","// `media_recorder` function will record media stream and will start upload using either multipart or direct upload\n\nimport MultipartUpload from \"../concerns/multipart_upload\";\nimport videojs from \"video.js\";\nimport RailsDirectUpload from \"../concerns/rails_direct_upload\";\n\nexport default function media_recorder() {\n var blob;\n var recCompPromiseResolve;\n var timeout_status = 0;\n var dataAvailable;\n // Set `undefined` to window.multiPartUploadInitializer and window.createUploadPromise\n // to make multipart upload work after resetting recorder\n window.createUploadPromise = window.multiPartUploadInitializer = undefined;\n\n let preview, discard, recording, recordingVideoJs, submitButtonBottom,\n activeTab, recordedBlob, recordedType, browserStream;\n if(this.hasPreviewTarget) {\n preview = this.previewTarget.querySelector(\"video\");\n }\n\n if(this.hasRecordingTarget) {\n recordingVideoJs = this.recordingTarget.querySelector(\"video-js\");\n recording = this.recordingTarget.querySelector(\"video\");\n }\n let audioThumbnail = this.element.dataset.audioThumbnail;\n let mediaField = this.mediaFieldTarget;\n let downloadButton = this.downloadBtnTarget;\n let isSafari = false;\n let activeTabElement = this.element.querySelector(\".toggle-device.active\");\n let recordingStartTime = null;\n let recordingTimerSec = undefined;\n let recordingEndTime = null;\n let stopButton = this.stopBtnTarget;\n let resumeButton = this.resumeBtnTargets;\n let pauseButton = this.pauseBtnTargets;\n let recordingIndicator = this.recordingIndicatorTargets;\n let recordingIndicatorIcon = this.recordingIndicatorIconTargets;\n let timer = this.timerTargets;\n if (this.hasSubmitButtonBottomTarget) {\n let submitBtnBottom = this.submitButtonBottomTarget;\n }\n let saveButton;\n let scheduleButton;\n let editRecordingButton;\n if (this.hasSubmitButtonBottomContainer) {\n let submitBtnBottomContainer = this.submitButtonBottomContainerTarget;\n }\n let messageForm = this.messageUITarget\n let recCompPromise;\n\n // Related to multipart upload\n let usingMultipart = false;\n let canUploadNextParts = false;\n let videoStopped = false;\n let endRecordingTimerStarts = false;\n let chunkIndex = 0;\n let maxMediaSize = 0;\n let recordedMediaSize = 0;\n let partStatus = {};\n let newChunk = [];\n let error_info = [];\n var browserName = this.detectBrowser();\n window.multiPartUploadInitializer = new MultipartUpload(browserName);\n var multipartRetry = 0;\n var alreadyUpdated = false;\n var multipartFailed = false;\n var directUploadInUse = false;\n var discardUpload = false;\n\n if (this.hasSaveBtnTarget)\n saveButton = this.saveBtnTarget;\n\n if (this.hasScheduleBtnTarget)\n scheduleButton = this.scheduleBtnTarget;\n\n if (this.hasEditRecordBtnTarget)\n editRecordingButton = this.editRecordBtnTarget;\n\n // Listen to discard button click event\n listenDiscardEvent.call(this);\n\n // set active tab\n setActiveTab();\n\n // set max media value\n setMaxMedia.call(this);\n\n // set attribute to PiP element\n setAttributeToPiPElement.call(this);\n\n // Disable submit bottom button\n disableSubmitBottomBtn.call(this);\n\n // set browser stream based on media stream that is present\n setBrowserStream();\n\n setTallVideoValue.call(this);\n\n let recordingTimeMS = 40000; // 40 seconds\n\n // --- MEDIA RECORDER FUNCTIONS STARTS ----\n\n function startRecording(stream, lengthInMS) {\n var options = setMimeType();\n recordedType = options.mimeType;\n let data = [];\n\n // Initialize media recorder\n let recorder = new MediaRecorder(stream, options);\n window.media_recorder = recorder;\n\n if(isSafari) {\n timeout_status = setTimeout(function () {\n // In some select Mac devices, such as iMacs, Safari recording crashes.\n // This detection looks out for the likihood of a crash and immediately stops the recording and shows message to user to tell them to use a different browser.\n if (dataAvailable == null) {\n recorder.stop();\n\n if (window.stream) {\n window.stream.getTracks().forEach(track => {\n track.stop();\n });\n }\n if(window.streamArr) {\n window.streamArr.forEach(stream => {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n })\n\n window.streamArr = [];\n }\n\n preview.classList.add(\"hidden\"); // hide the preview stream\n stopButton.classList.add(\"hidden\"); // hide the stop button\n timer.classList.add(\"hidden\"); // hide the timer\n stopButton.classList.remove(\"recording\"); // remove the .recording class from the stop button\n recordingIndicator.classList.add(\"hidden\"); // Hide the recording indicator button\n resumeButton.classList.add(\"hidden\"); // Hide the resume button\n pauseButton.classList.add(\"hidden\"); // Hide the pause button\n document.querySelector(\".switch-to-browser-recorder\").classList.add(\"hidden\"); // Hide \"Switch to recorder\" link since that's not supported on this device.\n\n document.title = 'Recording stopped. Please switch browsers.';\n document.querySelector(\".recording-in-progress-panel\").classList.add('hidden');\n\n document.querySelector(\".message-bottom-tab\").addEventListener('click', () => {\n submitBtnBottom.disabled = false;\n submitBtnBottom.classList.remove(\"btn-disabled\");\n submitBtnBottom.classList.remove(\"hidden\");\n submitBtnBottomContainer.classList.remove(\"hidden\");\n });\n\n let uploadErrors = messageForm.querySelector(\"#upload-errors\");\n\n uploadErrors.classList.remove(\"hidden\");\n if (uploadErrors) {\n uploadErrors.innerHTML = \"Recording in Safari isn't supported on this computer. Try switching to Chrome or Firefox. Alternatively, you can upload media or post a text message below.\";\n }\n }\n }, 17000);\n }\n\n recorder.onstart = () => {\n // set get current time while starting recording as start time\n recordingTimerSec = recordingStartTime = new Date().getTime();\n }\n\n if(pauseButton) {\n // listen to pause button and pause recording\n listenPauseButton(recorder);\n }\n\n if(resumeButton) {\n // listen to resume button and resume recording\n listenResumeButton(recorder);\n }\n\n recCompPromise = new Promise((resolve, reject) => {\n recCompPromiseResolve = resolve;\n });\n\n recorder.ondataavailable = event => {\n dataAvailable = true;\n if(event.data.size > 0) {\n // Stop recording if media size limit is over 1 gigabyte\n stopRecordingBasedOnMediaSize.call(this, event, options);\n // Recorded chunk of data will be available here\n convertBlobToChunkAndUpload(event, options, data);\n if(videoStopped){\n recCompPromiseResolve();\n }\n }\n }\n\n recorder.start(15000); // Every 15 secs a chunk of recording will be available and we can use it in ondataavailable\n\n log(recorder.state + \" for \" + (lengthInMS/1000) + \" seconds...\");\n\n let clickStopped = new Promise((resolve, reject) => {\n // listen to stop button and stop recording\n listenStopButton(recorder, resolve, reject);\n })\n\n let stopped = new Promise((resolve, reject) => {\n recorder.onstop = resolve;\n recorder.onerror = event => {\n return reject(event.name);\n }\n });\n\n return Promise.all([\n clickStopped,\n stopped,\n recCompPromise\n ])\n .then(() => data);\n }\n\n startRecording.call(this, browserStream, recordingTimeMS).\n then(async recordedChunks => {\n let options;\n let mimeType;\n\n if(activeTab === \"mic\" || activeTab === \"audio\"){\n options = {type: \"audio/mp3\"};\n mimeType = \"mp3\";\n\n // Adjust the playback player for audio-only\n attachThumbnailToAudioMessage();\n } else {\n if(isSafari) {\n options = {type: \"video/mp4\"};\n mimeType = \"mp4\";\n }\n else {\n options = {type: \"video/webm\"};\n mimeType = \"webm\";\n }\n }\n\n recordedBlob = new Blob(recordedChunks, options);\n let recordedBlobUrl = URL.createObjectURL(recordedBlob);\n\n console.log(recordingTimerSec, 'recordingTimerSec value before conversion')\n recordingTimerSec = Math.abs(recordingTimerSec / 1000);\n let video = videojs(recordingVideoJs.id);\n\n console.log(recordingTimerSec, 'setting duration');\n video.duration = function() {\n return recordingTimerSec;\n }\n video.src({\n src: recordedBlobUrl,\n type: options.type\n });\n\n recording.src = recordedBlobUrl;\n downloadButton.href = recordedBlobUrl;\n downloadButton.download = \"RecordedVideo.\" + mimeType;\n\n log(\"Successfully recorded \" + recordedBlob.size + \" bytes of \" +\n recordedBlob.type + \" media.\");\n\n connectionOnline(); // Check if internet connection is present\n\n // Upload recorded media using either multipart upload or direct upload\n uploadMedia(options, mimeType);\n\n // Stop media stream\n this.stop();\n this.recordingFinishedUI();\n\n blob = recordedBlob;\n }).catch(error => log.call(this, error));\n\n // --- MEDIA RECORDER FUNCTIONS ENDS ----\n\n\n // ---HELPER FUNCTIONS STARTS---\n\n function listenDiscardEvent() {\n // Listen to discard button click event\n if(!(this.hasDiscardBtnTarget === true)) return true;\n\n discard = this.discardBtnTarget;\n\n discard.addEventListener(\"click\", () => {\n setTimeout(() => {\n if(discard.dataset.discardRecording === \"true\") {\n // set multipartFailed to avoid re-upload same part again after discard\n multipartFailed = true;\n discardUpload = true;\n }\n }, 1000);\n })\n }\n\n function setActiveTab() {\n // set active tab\n if(activeTabElement === undefined || activeTabElement === null) return true;\n\n activeTab = activeTabElement.getAttribute(\"data-device\");\n if (activeTab === 'mic' || activeTab === 'audio')\n activeTab = 'audio';\n }\n\n function setMaxMedia() {\n let mediaPercentSize;\n if(this.hasMaxMediaSizeValue && typeof(this.maxMediaSizeValue) === \"number\" && this.maxMediaSizeValue > 0) {\n // value must be greater than 1 GB\n maxMediaSize = this.maxMediaSizeValue;\n } else {\n // max value will be set as 1 GB\n maxMediaSize = 1073741824; // 1 GB in bytes\n }\n\n // reduce the max by 10 %(100 MB) this will be a buffer\n mediaPercentSize = maxMediaSize * 0.10;\n maxMediaSize -= mediaPercentSize;\n }\n\n function setAttributeToPiPElement() {\n // set attribute to PiP element\n if(this.duringRecordPipBtnTarget && window.cameraStream) {\n this.duringRecordPipBtnTarget.setAttribute('recordingStarted', 'true');\n this.duringRecordPipBtnTarget.classList.remove(\"hidden\");\n }\n }\n\n function disableSubmitBottomBtn() {\n // Disable submit bottom button\n if(this.hasSubmitButtonBottomTarget === undefined || this.hasSubmitButtonBottomTarget === null) return true\n\n if (this.hasSubmitButtonBottomTarget) {\n submitButtonBottom = this.submitButtonBottomTarget;\n submitButtonBottom.disabled = true;\n submitButtonBottom.classList.add(\"btn-disabled\");\n }\n }\n\n function setBrowserStream() {\n // set browser stream based on media stream that is present\n const sUsrAg = navigator.userAgent.toLowerCase();\n\n if (sUsrAg.indexOf('firefox') > -1) {\n if(window.stream.constructor && window.stream.constructor.name === \"CanvasCaptureMediaStream\") {\n browserStream = window.stream;\n } else {\n browserStream = preview.mozCaptureStream();\n }\n } else if (sUsrAg.indexOf('safari') !== -1 && sUsrAg.indexOf('chrome') === -1){\n browserStream = window.stream;\n isSafari = true;\n } else {\n if (window.stream) {\n browserStream = window.stream\n } else {\n browserStream = preview.captureStream();\n }\n }\n }\n\n function setTallVideoValue() {\n // This sets message[tall_video] to 'true' if the aspect ratio is tall when recording via browser (not uploading a file or recording via mobile device, which uses the upload file field)...\n // The code for setting message[tall_video] when uploading video via mobile devise happens in connect() at the top of creation_controller.js.\n if(activeTab !== 'audio') {\n var stream_aspect_ratio = browserStream.getVideoTracks()[0].getSettings().aspectRatio;\n if (stream_aspect_ratio < 1) {\n this.tallVideoFieldTarget.value = true;\n }\n }\n }\n\n function setMimeType() {\n // set mime type based on the user agent and media stream\n let options;\n isSafari = navigator.vendor.match(/apple/i) &&\n !navigator.userAgent.match(/crios/i) &&\n !navigator.userAgent.match(/fxios/i);\n var sUsrAg = navigator.userAgent.toLowerCase();\n\n if(isSafari) {\n options = {mimeType: \"video/mp4\"};\n } else {\n if (MediaRecorder.isTypeSupported(\"video/webm;codecs=vp8,opus\") && !(sUsrAg.indexOf('firefox') > -1)) {\n options = {mimeType: \"video/webm;codecs=vp8,opus\"};\n } else {\n options = {mimeType: \"video/webm\"};\n }\n }\n\n if((activeTab === \"mic\" || activeTab === \"audio\") && isSafari) {\n options = {mimeType: \"audio/mp4\"};\n } else if(activeTab === \"mic\" || activeTab === \"audio\") {\n options = { mimeType: 'audio/webm;codecs=\"opus\"' }\n }\n\n return options;\n }\n\n function listenPauseButton(recorder) {\n // When Pause button is clicked Pause recording and calculate timer\n\n function pauseButtonOnClick() {\n clearInterval(window.timerInterval);\n recorder.pause(); // Pause recording\n console.log(\"recording paused\");\n\n alreadyUpdated = true;\n // Hide/show the pause/resume buttons\n pauseButton.forEach(target => target.classList.add(\"hidden\"));\n if(resumeButton) resumeButton.forEach(target => target.classList.remove(\"hidden\"));\n\n // Re-color the recording indicator & timer:\n recordingIndicatorIcon.forEach(target => target.classList.remove(\"bg-primary-600\"));\n recordingIndicatorIcon.forEach(target => target.classList.add(\"bg-gray-500\"));\n\n recordingIndicator.forEach(target => target.querySelector(\"svg\").classList.remove(\"animate-pulse\"));\n timer.forEach(target => target.querySelector(\"#timer\").classList.remove(\"text-primary-600\"));\n timer.forEach(target => target.querySelector(\"#timer\").classList.add(\"text-gray-500\"));\n\n // calculate timer\n recordingEndTime = new Date().getTime() - recordingStartTime;\n if(recordingTimerSec === recordingStartTime) {\n recordingTimerSec = recordingEndTime;\n } else {\n recordingTimerSec = recordingTimerSec + recordingEndTime;\n }\n }\n\n pauseButton.forEach(target => target.onclick = pauseButtonOnClick)\n }\n\n function listenResumeButton(recorder) {\n // When Resume button is clicked Resume recording\n\n function resumeButtonOnClick() {\n recordingStartTime = new Date().getTime();\n\n alreadyUpdated = false\n recorder.resume(); // Resume recording\n console.log(\"recording resume\");\n\n // Hide/show the pause/resume buttons:\n resumeButton.forEach(target => target.classList.add(\"hidden\"));\n if(pauseButton) pauseButton.forEach(target => target.classList.remove(\"hidden\"));\n\n // Re-color the recording indicator & timer:\n recordingIndicatorIcon.forEach(target => target.classList.add(\"bg-primary-600\"));\n recordingIndicatorIcon.forEach(target => target.classList.remove(\"bg-gray-500\"));\n\n recordingIndicator.forEach(target => target.querySelector(\"svg\").classList.add(\"animate-pulse\"));\n timer.forEach(target => target.querySelector(\"#timer\").classList.add(\"text-primary-600\"));\n timer.forEach(target => target.querySelector(\"#timer\").classList.remove(\"text-gray-500\"));\n }\n resumeButton.forEach(target => target.onclick = resumeButtonOnClick)\n }\n\n function stopRecordingBasedOnMediaSize(event, options) {\n let tempChunk = [];\n tempChunk.push(event.data);\n const eventBlob = new Blob(tempChunk, {type: options.mimeType});\n\n recordedMediaSize += eventBlob.size;\n\n if((recordedMediaSize > maxMediaSize) && (endRecordingTimerStarts !== true)) {\n endRecordingTimerStarts = true;\n this.endRecordingTimer.call(this, 10, true);\n }\n }\n\n function convertBlobToChunkAndUpload(event, options, data) {\n // Convert blob to chunk of min 5 MB and upload it to S3\n\n newChunk.push(event.data); // Push current chunk blob to temp array\n data.push(event.data); // Push current chunk blob to actual recording array\n const newChunkBlob = new Blob(newChunk, {type: options.mimeType})\n\n const sizeInMb = newChunkBlob.size / Math.pow(1024,2) // Get the size of recorded temp blob\n\n console.log(`chunk size is ${sizeInMb}`)\n if(sizeInMb >= 5.0 && multipartFailed !== true && (chunkIndex === 0 || partStatus[chunkIndex] === true)) {\n // This condition will pass when recorded temp blob is greater than or equal to 5MB\n // or when multipart upload is still usable\n usingMultipart = true;\n\n console.log(\"Using multipart.....\")\n // After passing this condition this temp blob will considered as a part\n partStatus[++chunkIndex] = false; // Part upload status will be false\n\n console.log(`uploading part --- ${chunkIndex}.....`)\n // Upload the NewChunkBlob to S3\n uploadChunkToS3(newChunkBlob, chunkIndex, options.mimeType, videoStopped);\n\n // reset chunk only if upload is pushed\n newChunk = [];\n }\n }\n\n function log(msg) {\n console.log(msg);\n\n if(msg instanceof Error) {\n if(typeof window.createUploadPromise !== undefined) {\n var key_and_upload_id = window.multiPartUploadInitializer.get_key_and_upload_id()\n }\n\n var additionalInfoHash = {\n browserName: browserName,\n recordingTimerSec: recordingTimerSec,\n key: key_and_upload_id[\"key\"],\n uploadId: key_and_upload_id[\"uploadId\"]\n }\n\n window.uploadErrorInitializer.assignError(msg, additionalInfoHash);\n window.uploadErrorInitializer.sendError();\n\n if((window.appsignal !== undefined)) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId }).setError({message: msg});\n window.appsignal.send(span);};\n }\n }\n\n function listenStopButton(recorder, resolve, reject) {\n // listen to stop button and send resolve for promise\n var recording_indicator_timers = document.getElementsByClassName(\"recording-indicator-timer\")\n for (var timer = 0; timer < recording_indicator_timers.length; timer++) {\n recording_indicator_timers[timer].addEventListener(\"click\", () => {\n console.log('Called from recording-indicator-timer listener');\n updateRecordingTimerValue();\n\n videoStopped = true;\n recorder.stop();\n return resolve(\"Stop\");\n });\n }\n var stop_recording_buttons = document.getElementsByClassName(\"stop-recording-button\")\n for (var stop_btn = 0; stop_btn < stop_recording_buttons.length; stop_btn++) {\n stop_recording_buttons[stop_btn].addEventListener(\"click\", () => {\n console.log('Called from stop-recording-button listener');\n updateRecordingTimerValue();\n\n videoStopped = true;\n recorder.stop();\n return resolve(\"Stop\");\n });\n }\n }\n\n function updateRecordingTimerValue() {\n // calculate the new timer value\n if(alreadyUpdated) return\n alreadyUpdated = true;\n console.log('inside updateRecordingTimerValue method');\n var currentTime = new Date().getTime()\n recordingEndTime = currentTime - recordingStartTime;\n console.log(recordingTimerSec, 'start time', recordingStartTime, 'end time', recordingEndTime, 'currentTime', currentTime)\n console.log(recordingTimerSec === recordingStartTime, 'start and timer sec')\n if(recordingTimerSec === recordingStartTime) {\n recordingTimerSec = recordingEndTime\n } else {\n recordingTimerSec = recordingTimerSec + recordingEndTime;\n }\n }\n\n function attachThumbnailToAudioMessage() {\n // Add audio thumbnail to video.js player\n recordingVideoJs.classList.remove(\"vjs-fluid\");\n recordingVideoJs.classList.add(\"vjs-audio\");\n if(audioThumbnail) {\n recordingVideoJs.insertAdjacentHTML(\"beforeend\", \"
\");\n }\n recordingVideoJs.querySelector(\"button.vjs-big-play-button\").classList.add(\"z-100\");\n recordingVideoJs.querySelector(\".vjs-control-bar\").classList.add(\"z-100\");\n }\n\n function connectionOnline() {\n if(navigator.onLine === false) {\n // If internet connection is offline then show error message and download btn\n let uploadErrors = messageForm.querySelector(\"#upload-errors\");\n let downloadBtn = messageForm.querySelector(\"#downloadBtn\");\n\n uploadErrors.classList.remove(\"hidden\");\n if (uploadErrors) {\n uploadErrors.innerHTML = \"Your connection was interrupted and we couldn't complete the upload. Please download your recording, then manually upload to save your message.\";\n }\n\n if(downloadBtn) {\n downloadBtn.classList.remove(\"hidden\") // show the download button\n }\n\n // condition to check if internet connection offline\n window.addEventListener('online', () => {\n // Send discard multipart upload trigger with skip page reload when internet is back online\n console.log(\"connection back online...\");\n\n window.uploadErrorInitializer.setItemInLocalStorage();\n\n if(multipartFailed === true) {\n window.multiPartUploadInitializer.discardUpload(true);\n }\n })\n\n return false; // return false if connection is offline\n }\n\n return true; // return true if connection is online\n }\n\n function uploadMedia(options, mimeType) {\n if(usingMultipart === true && multipartFailed !== true) {\n discard.classList.remove(\"hidden\");\n\n if(newChunk.length > 0) {\n const newChunkBlob = new Blob(newChunk, {type: options.type});\n partStatus[++chunkIndex] = false;\n\n // Upload the NewChunkBlob to S3\n uploadChunkToS3(newChunkBlob, chunkIndex, options.type, videoStopped);\n } else {\n completeMultipartUpload(options.type);\n }\n\n const noOfParts = Object.keys(partStatus).length;\n window.multiPartUploadInitializer.updatePartProgress(noOfParts);\n } else if (directUploadInUse === false) {\n directUploadRecording(recordedBlob, mimeType, recordingTimerSec);\n }\n }\n\n // ---HELPER FUNCTIONS ENDS---\n\n\n // ---MULTI PART UPLOAD FUNCTIONS STARTS---\n\n function uploadChunkToS3(blob, index, mimeType, stopped) {\n if(index === 1 && window.createUploadPromise === undefined) {\n // For first part we need to create a create multipart upload trigger and get the upload id from backend\n // Pending Promise will be stored in 'window.createUploadPromise' variable\n window.createUploadPromise = window.multiPartUploadInitializer.createMultipartUpload(mimeType);\n canUploadNextParts = true;\n }\n\n let error_params = {\n blob: blob,\n index: index,\n mimeType: mimeType,\n stopped: stopped\n }\n\n if(typeof window.createUploadPromise !== undefined && window.createUploadPromise !== false) {\n // When promise is pending part will wait until promise is returned\n window.createUploadPromise.then(() => {\n // after success response part will be uploaded\n window.multiPartUploadInitializer.upload(blob, index, mimeType).then(data => {\n // If upload is successful then true will be returned in response\n partStatus[chunkIndex] = data; // update the part upload status based on response\n\n console.log(data, \"part:\", chunkIndex, \"part_status:\", partStatus);\n if(data === false) {\n // If the response is false then throw error\n throw \"Upload failed\";\n }\n\n if (stopped) {\n // If 'stopped' is true then send complete multipart upload request\n completeMultipartUpload(mimeType);\n }\n }).catch(err => {\n console.log(err);\n handleFailure(error_params, false);\n\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId, blob: blob, index: index, mimeType: mimeType, stopped: stopped})\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"CreatePartUploadError\", message: err});\n window.appsignal.send(span);};\n })\n }).catch(err => {\n console.log(err);\n\n var additionalInfoHash = {\n browserName: browserName,\n errorName: \"CreatePartUploadError\"\n }\n\n // Build error information and send it to backend\n window.uploadErrorInitializer.assignError(err, additionalInfoHash);\n window.uploadErrorInitializer.sendError();\n\n handleFailure(error_params, false);\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId, blob: blob, index: index, mimeType: mimeType, stopped: stopped})\n span.setTags({\n tag: \"Multipart Upload error\"\n }).setError({name: \"CreatePartUploadError\", message: err});\n window.appsignal.send(span);}\n })\n } else {\n multipartFailed = true;\n }\n }\n\n function completeMultipartUpload(mimeType, incompleteUpload = false) {\n window.multiPartUploadInitializer.completeUpload().then(status => {\n if(status !== false && status !== undefined) {\n if(incompleteUpload) {\n addIncompleteMultipartFields(status)\n } else {\n addMultipartDependentFields(status, mimeType);\n }\n } else {\n throw \"Upload complete failed\";\n }\n console.log(`response for upload completed`);\n }).catch(err => {\n console.log(err);\n let error_params = { mimeType: mimeType, multipartRetry: ++multipartRetry };\n\n handleFailure(error_params, true, true);\n })\n }\n\n function addIncompleteMultipartFields(status) {\n var hiddenFieldKey = document.createElement('input')\n hiddenFieldKey.setAttribute('type', 'hidden');\n hiddenFieldKey.setAttribute(\"name\", \"incomplete_multipart_key\");\n hiddenFieldKey.setAttribute(\"id\", \"media-incomplete-multipart-key\");\n hiddenFieldKey.setAttribute('value', status.response.key);\n\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldKey);\n }\n\n function addMultipartDependentFields(status, mimeType) {\n var hiddenFieldKey = document.createElement('input')\n hiddenFieldKey.setAttribute('type', 'hidden');\n hiddenFieldKey.setAttribute(\"name\", \"message[key]\");\n hiddenFieldKey.setAttribute(\"id\", \"media-key\");\n hiddenFieldKey.setAttribute('value', status.response.key);\n\n var hiddenFieldFileName = document.createElement('input')\n hiddenFieldFileName.setAttribute('type', 'hidden');\n hiddenFieldFileName.setAttribute(\"name\", \"message[filename]\");\n hiddenFieldFileName.setAttribute(\"id\", \"media-filename\");\n hiddenFieldFileName.setAttribute('value', `recording.${mimeType}`);\n\n var hiddenFieldChecksum = document.createElement('input')\n hiddenFieldChecksum.setAttribute('type', 'hidden');\n hiddenFieldChecksum.setAttribute(\"name\", \"message[checksum]\");\n hiddenFieldChecksum.setAttribute(\"id\", \"media-checksum\");\n hiddenFieldChecksum.setAttribute('value', status.etag);\n\n var hiddenFieldEndTime = document.createElement('input')\n hiddenFieldEndTime.setAttribute('type', 'hidden');\n hiddenFieldEndTime.setAttribute(\"name\", \"message[recorded_duration]\");\n hiddenFieldEndTime.setAttribute(\"id\", \"media-recording-end-time\");\n hiddenFieldEndTime.setAttribute('value', recordingTimerSec);\n\n var hiddenFieldContentType = document.createElement('input')\n hiddenFieldContentType.setAttribute('type', 'hidden');\n hiddenFieldContentType.setAttribute(\"name\", \"message[content_type]\");\n hiddenFieldContentType.setAttribute(\"id\", \"media-content-type\");\n hiddenFieldContentType.setAttribute('value', recordedType);\n\n if(recordedBlob) {\n var hiddenFieldMediaSize = document.createElement('input')\n hiddenFieldMediaSize.setAttribute('type', 'hidden');\n hiddenFieldMediaSize.setAttribute(\"name\", \"message[media_size]\");\n hiddenFieldMediaSize.setAttribute(\"id\", \"media-size\");\n hiddenFieldMediaSize.setAttribute('value', recordedBlob.size);\n\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldMediaSize);\n }\n\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldEndTime);\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldContentType);\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldKey);\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldFileName);\n mediaField.insertAdjacentElement(\"afterend\", hiddenFieldChecksum);\n\n // Remove before unload event to allow users to close the browser window\n // window.removeEventListener('beforeunload', this.preventPageRefresh)\n\n messageForm.querySelector(\"#progressBar\").classList.add(\"hidden\"); // Hide the progress bar in the top controls\n\n if (messageForm !== null && messageForm.getAttribute('data-message--navigation-changed') === \"true\") {\n if (messageForm.querySelector(\"#submitBtnTop\")) messageForm.querySelector(\"#submitBtnTop\").classList.remove(\"hidden\");\n }\n\n // Enable submit button\n if(submitButtonBottom) {\n submitButtonBottom.disabled = false;\n submitButtonBottom.classList.remove(\"btn-disabled\");\n submitButtonBottom.classList.remove(\"hidden\");\n submitBtnBottomContainer.classList.remove(\"hidden\");\n if(saveButton)\n saveButton.classList.remove(\"hidden\");// Reveal the save draft button in the control bar\n\n if(scheduleButton)\n scheduleButton.classList.remove(\"hidden\");// Reveal the schedule button in the control bar\n\n if(editRecordingButton)\n editRecordingButton.classList.remove(\"hidden\");// Reveal the edit record button in the control bar\n }\n\n if (messageForm.querySelector('.more-controls-buttons.new-msg-control-btn')) // Reveal the more menu where thr download link present\n messageForm.querySelector('.more-controls-buttons.new-msg-control-btn').classList.remove('hidden');\n\n\n // Close modal only when it is open\n let uploadCloseModal = messageForm.querySelector(\"#video-upload-close-modal\");\n let modalBackground = messageForm.querySelector(\"#modal-background\");\n if(modalBackground) {\n uploadCloseModal.click()\n }\n }\n\n function handleFailure(params, fromCompleteUpload = false, recurring_request = false) {\n console.log(\"inside handlingFailure....\");\n if(multipartRetry < 3) {\n // Retry multipart upload\n console.log(`multipart retry - ${multipartRetry}.....`)\n ++multipartRetry;\n\n if(fromCompleteUpload === true) {\n completeMultipartUpload(params.mimeType);\n } else {\n uploadChunkToS3(params.blob, params.index, params.mimeType, params.stopped)\n }\n\n } else if(videoStopped === true) {\n // This condition will pass when video recording is completed\n // complete the multipart upload that has been completed\n console.log(`recording will complete using rails direct upload.....`)\n\n usingMultipart = false;\n multipartFailed = true;\n\n if (directUploadInUse === false) {\n console.log(\"Called when video recording is ended and multipart upload failed\")\n // Use rails direct upload instead of multipart upload to upload recording\n directUploadRecording(recordedBlob, params.mimeType, recordingEndTime);\n }\n\n if(window.appsignal !== undefined) {\n var span = window.appsignal.createSpan();\n\n span.setTags({ tag: \"Upload error\" }).setError(new Error(`Called when video recording is ended and multipart upload failed - request from ${accountId}`));\n\n window.appsignal.send(span);\n }\n\n if(recurring_request === false)\n completeMultipartUpload(params.mimeType, true)\n } else {\n // After multiple failure mark Multipart upload as failed\n // complete the multipart upload that has been completed\n console.log(\"Fallback to rails direct upload logic\")\n\n usingMultipart = false;\n multipartFailed = true;\n\n if(navigator.onLine === false) {\n let error_info = [];\n error_info.push(browserName, 'UserOffline');\n localStorage.setItem(\"error-info\", JSON.stringify(error_info));\n }\n\n if(window.appsignal !== undefined) {\n var span = window.appsignal.createSpan();\n\n span.setTags({ tag: \"Upload error\" }).setError(new Error(`Fallback to rails direct upload logic - request from ${accountId}`));\n\n window.appsignal.send(span);\n }\n\n if(recurring_request === false)\n completeMultipartUpload(params.mimeType, true)\n }\n }\n\n // ---MULTI PART UPLOAD FUNCTIONS ENDS---\n\n\n // ---DIRECT UPLOAD FUNCTIONS STARTS---\n\n function directUploadRecording(recordedBlob, mimeType, recordingEndTime){\n if(videoStopped === true && discardUpload !== true) {\n directUploadInUse = true;\n new RailsDirectUpload(blobToFile(\n recordedBlob, \"recording\", mimeType),\n mediaField.dataset.directUploadUrl,\n mediaField,\n submitButtonBottom,\n recordingEndTime,\n browserName,\n saveButton,\n scheduleButton,\n editRecordingButton,\n messageForm).upload();\n }\n }\n\n function blobToFile(theBlob, fileName, mimeType){\n //A Blob() is almost a File() - it's just missing the two properties below which we will add\n theBlob.lastModifiedDate = new Date();\n theBlob.name = `${fileName}.${mimeType}`;\n return theBlob;\n }\n\n // ---DIRECT UPLOAD FUNCTIONS ENDS---\n\n}","// Manages the edit message UI\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\n \"clipsList\",\n \"editClipsTimeline\",\n \"clipListStorage\",\n \"mediaDuration\"\n ];\n\n connect() {\n\n // if user was logged-in and created this message via an intake page and entered edit mode, load the edit ui for this newly created draft message on page load\n var url_string = window.location.href; \n var url = new URL(url_string);\n var message_id_to_edit = url.searchParams.get(\"edit_message_id\");\n if (message_id_to_edit) {\n var message = document.querySelector(\"#message-\"+message_id_to_edit);\n if (message) {\n message.querySelector(\".enter-edit-mode-btn\").click();\n }\n }\n\n }\n\n isClipIntersected(editCut1, editCut2) {\n let arr = this.clipListStorageTarget.dataset.storage.split(',')\n let i;\n var currentDate = new Date().toISOString().slice(0, 10);\n\n for (i = 0; i < arr.length; i += 2) {\n\n var openTime = Date.parse(this.convertDateTimeFormat(arr[i], currentDate));\n var closeTime = Date.parse(this.convertDateTimeFormat(arr[i + 1], currentDate));\n var checkVal1 = Date.parse(this.convertDateTimeFormat(editCut1, currentDate));\n var checkVal2 = Date.parse(this.convertDateTimeFormat(editCut2, currentDate));\n if ((checkVal1 >= openTime && checkVal1 <= closeTime) || (checkVal2 >= openTime && checkVal2 <= closeTime) || (checkVal1 <= openTime && closeTime <= checkVal2)) {\n return true\n }\n }\n return false\n }\n\n convertDateTimeFormat(time, currentDate){\n return time.split(':').length === 2 ? currentDate + 'T00:' + time.padStart(5, '0') : currentDate + 'T' + time.padStart(8, '0')\n }\n\n addClipSection() {\n this.populatingInputCut();\n }\n\n // invoked when discard edits button clicked\n discardEditForm() {\n this.element.querySelector(\".edit-recording-container\").innerHTML = '';\n\n if (this.element.querySelector(\"a[data-message--creation-target='editRecordBtn']\") !== null) {\n this.element.querySelector(\"a[data-message--creation-target='editRecordBtn']\").classList.remove(\"hidden\");\n } else if (this.element.querySelector(\"button[data-message--creation-target='editRecordBtn']\") !== null) {\n this.element.querySelector(\"button[data-message--creation-target='editRecordBtn']\").classList.remove(\"hidden\");\n }\n\n if (this.element.querySelector(\"a.schedule-message-btn\") !== null) {\n this.element.querySelector(\"a.schedule-message-btn\").classList.remove(\"hidden\");\n }\n\n if (!this.element.classList.contains(\".threaded-message\")) {\n var message_thread_container = this.element.closest(\".message-thread-container\");\n if(message_thread_container) {\n var dummy_media_editor = message_thread_container.querySelector(\".dummy-media-editor\");\n message_thread_container.classList.remove(\"editing-media\");\n if (dummy_media_editor) {\n dummy_media_editor.classList.add(\"hidden\");\n }\n }\n }\n\n this.element.classList.remove(\"editing-media\");\n }\n\n // modify edits form submit text and its invoked when automatically publish message checkbox state is changed\n modifySubmitText(event) {\n var link_target = this.element.querySelector(\".initiate-edits-btn\");\n if (event.target.value === 'true') {\n link_target.innerHTML = \"Process edits, then publish message\"\n link_target.setAttribute('data-old-delete-text', 'Process edits, then publish message...')\n } else {\n link_target.innerHTML = \"Process edits...\"\n link_target.setAttribute('data-old-delete-text', \"Process edits...\")\n }\n }\n\n // invoked when checkbox in edit processing UI is clicked and will update the clip_specs publish key value\n updateClipSpec(event) {\n setTimeout(() => {\n var messageId = this.element.id.split('-')[1];\n fetch(`/${messageId}/update_clip_spec?publish=${(event.target.closest('.publish').classList.contains('active'))}`, {\n method: \"PATCH\",\n headers: {\n 'Content-Type': 'application/js'\n }\n }).then((result) => {\n result.text().then( (val) => eval(val) );\n })\n }, 100);\n }\n\n // invoked when x-cross button is clicked\n removeClip(event) {\n if (this.clipsListTarget.querySelectorAll(\"input[name='clip_parts[]']\").length === 1) {\n this.discardEditForm();\n } else {\n let elementId = event.target.closest('.clip-container').id\n this.clipsListTarget.querySelector(\"#\" + elementId).remove();\n this.editClipsTimelineTarget.querySelector(\"#\" + elementId).remove();\n\n if (this.hasClipsListTarget) {\n let mediaDurationInSecond = timeToSecond(this.mediaDurationTarget.value);\n\n let sectionBtn = this.element.querySelector('.add-clip-section-btn');\n let cutExist = this.checkCutFieldAndCreateDefaults(mediaDurationInSecond);\n\n if (cutExist[0] === undefined || cutExist[1] === undefined)\n sectionBtn.classList.add(\"hidden\");\n else\n sectionBtn.classList.remove(\"hidden\");\n }\n }\n }\n\n insertDataInStore(){\n let totalInSecond = 0;\n let tempArr = [];\n this.clipsListTarget.querySelectorAll(\"input.clip-parts-input\").forEach(i => {\n let a = i.value.split(' - ')[0].split('.')[0]\n let b = i.value.split(' - ')[1].split('.')[0]\n a = a.split(':').length === 2 ? ('00:' + a) : a\n b = b.split(':').length === 2 ? ('00:' + b) : b\n tempArr.push(a, b)\n tempArr.sort();\n totalInSecond += (timeToSecond(b) - timeToSecond(a) + 1);\n this.clipListStorageTarget.dataset.storage = tempArr;\n })\n\n return totalInSecond\n }\n\n checkCutFieldAndCreateDefaults(mediaDurationInSecond){\n let totalInSecond = this.insertDataInStore();\n let startCutInput, endCutInput, arr1=[], clipDuration = '00:00:05';\n const clipToStart = '00:00:00';\n const clipSpacing = '00:00:02';\n let arr = this.clipListStorageTarget.dataset.storage.split(',')\n\n calculateDifferenceBtwClips(arr, arr1, this.mediaDurationTarget.value);\n\n if (mediaDurationInSecond > 60 && arr1.length !== 0 && arr1.some(el => el > 60)) {\n clipDuration = '00:01:00'\n }\n\n /*\n - If no existing clip covers first 5 secs of the timeline, then insert this new clip at 0:00-0:05.\n - If a clip already covers 0:00, and no clip covers the final 5 secs of the timeline, then insert this new clip at the very end of the timeline, starting from 5 secs before the end.\n - If there are clips in the middle of the timeline, start the new clip in the first 5-second section that's available.\n */\n if (this.isClipIntersected(clipToStart, clipDuration) === false) {\n startCutInput = clipToStart;\n endCutInput = clipDuration;\n } else if (this.isClipIntersected(estimateTime([this.mediaDurationTarget.value, clipDuration], \"subtraction\"), this.mediaDurationTarget.value) === false) {\n startCutInput = estimateTime([this.mediaDurationTarget.value, clipDuration], \"subtraction\");\n endCutInput = this.mediaDurationTarget.value;\n } else {\n var index = arr1.indexOf(Math.max.apply(null, arr1))\n var startCut = estimateTime([arr[2 * index + 1], clipSpacing], \"addition\")\n\n if ((estimateTime([startCut, clipDuration], \"addition\") < arr[2 * index + 2]) && this.isClipIntersected(startCut, estimateTime([startCut, clipDuration], \"addition\")) === false) {\n startCutInput = startCut\n endCutInput = estimateTime([startCut, clipDuration], \"addition\")\n }\n }\n\n return [startCutInput, endCutInput]\n }\n\n populatingInputCut() {\n var arr= [], arr1 = [];\n let mediaDurationInSecond = timeToSecond(this.mediaDurationTarget.value);\n\n var cutFields = this.checkCutFieldAndCreateDefaults(mediaDurationInSecond);\n var startCutInput = cutFields[0];\n var endCutInput = cutFields[1];\n\n if(startCutInput !== undefined || endCutInput !== undefined) {\n let startCutInputValue, endCutInputValue\n var elementToClone = this.clipsListTarget.querySelector(\".clip-container\")\n var clonedNode = elementToClone.cloneNode(true);\n var noOfClips = parseInt(elementToClone.parentNode.lastElementChild.id.split(\"clip-part-\")[1]) + 1\n clonedNode.setAttribute(\"id\", `clip-part-${noOfClips}`);\n\n if (mediaDurationInSecond < 3600) {\n startCutInputValue = startCutInput.split(/:(.*)/s)[1];\n endCutInputValue = endCutInput.split(/:(.*)/s)[1];\n } else {\n startCutInputValue = startCutInput\n endCutInputValue = endCutInput\n }\n\n var input = clonedNode.querySelector(\".clip-parts-input\");\n input.value = `${startCutInputValue}.00 - ${endCutInputValue}.00`\n elementToClone.parentNode.appendChild(clonedNode);\n\n elementToClone = this.editClipsTimelineTarget.querySelector(\".clip-container\");\n clonedNode = elementToClone.cloneNode(true);\n\n var videoDuration = timeToSecond(this.mediaDurationTarget.value)\n var endCutInseconds = timeToSecond(endCutInput)\n var startCutInSeconds = timeToSecond(startCutInput)\n let totalTimelineWidth = document.querySelector(\".edit-clips-timeline\").clientWidth;\n\n var leftSideSpacing = Math.ceil((totalTimelineWidth * ((startCutInSeconds * 100) / videoDuration)) / 100);\n var widthSpacing = Math.ceil((totalTimelineWidth * ((endCutInseconds * 100) / videoDuration)) / 100) - leftSideSpacing;\n\n clonedNode.setAttribute(\"style\", `width: ${widthSpacing}px; left: ${leftSideSpacing}px`);\n clonedNode.setAttribute(\"id\", `clip-part-${noOfClips}`);\n clonedNode.querySelector('.clip-edge-left').title = startCutInputValue;\n clonedNode.querySelector('.clip-edge-right').title = endCutInputValue;\n elementToClone.parentNode.appendChild(clonedNode);\n }\n\n arr1 = [] // empty comparison data;\n this.insertDataInStore();\n arr = this.clipListStorageTarget.dataset.storage.split(',')\n\n arr1 = calculateDifferenceBtwClips(arr, arr1, this.mediaDurationTarget.value)\n\n // Hide the \"Add another section\" button when there is no clips with at least 7s spacing between each other.\n if (arr1.length !== 0 && arr1.every(el => el <= 7))\n this.element.querySelector('.add-clip-section-btn').classList.add('hidden');\n }\n}\n\nfunction calculateDifferenceBtwClips(arr, arr1, mediaDuration){\n for (let i = 1; i < arr.length - 1; i += 2) {\n arr1.push(estimateTime([arr[i + 1], arr[i]], \"subtraction\").split(':').reduce((acc, time) => (60 * acc) + +time))\n }\n\n if(arr[0] > '00:00:00')\n arr1.push(estimateTime([arr[0], '00:00:00'], \"subtraction\").split(':').reduce((acc, time) => (60 * acc) + +time))\n\n if(arr[arr.length - 1] < mediaDuration)\n arr1.push(estimateTime([mediaDuration, arr[arr.length - 1]], \"subtraction\").split(':').reduce((acc, time) => (60 * acc) + +time))\n\n return arr1;\n}\n\nfunction estimateTime(times, action) {\n let totalHours = 0\n let totalMinutes = 0\n let totalSeconds = 0\n let i = 0\n\n for (const time of times) {\n const splitTime = (time || '').split(':')\n if (action === 'addition') {\n totalHours += isNaN(parseInt(splitTime[0])) ? 0 : parseInt(splitTime[0])\n totalMinutes += isNaN(parseInt(splitTime[1])) ? 0 : parseInt(splitTime[1])\n totalSeconds += isNaN(parseInt(splitTime[2])) ? 0 : parseInt(splitTime[2])\n } else if (action === 'subtraction'){\n if(i === 0) {\n totalHours = isNaN(parseInt(splitTime[0])) ? 0 : parseInt(splitTime[0])\n totalMinutes = isNaN(parseInt(splitTime[1])) ? 0 : parseInt(splitTime[1])\n totalSeconds = isNaN(parseInt(splitTime[2])) ? 0 : parseInt(splitTime[2])\n i += 1\n }else{\n totalHours -= isNaN(parseInt(splitTime[0])) ? 0 : parseInt(splitTime[0])\n totalMinutes -= isNaN(parseInt(splitTime[1])) ? 0 : parseInt(splitTime[1])\n totalSeconds -= isNaN(parseInt(splitTime[2])) ? 0 : parseInt(splitTime[2])\n }\n }\n }\n\n if (totalSeconds >= 60) {\n const minutesFromSeconds = (totalSeconds / 60) << 0\n totalMinutes += minutesFromSeconds\n totalSeconds -= 60 * minutesFromSeconds\n }\n\n if (totalMinutes >= 60) {\n const hoursFromMinutes = (totalMinutes / 60) << 0\n totalHours += hoursFromMinutes\n totalMinutes -= 60 * hoursFromMinutes\n }\n\n const totalTimeInSeconds = totalSeconds + totalMinutes * 60 + totalHours * 60 * 60;\n return new Date(totalTimeInSeconds * 1000).toISOString().substr(11, 8)\n const timeToString = time => time.toString().padStart(2, '0')\n return `${timeToString(totalHours)}:${timeToString(totalMinutes)}:${timeToString(totalSeconds)}`\n}\n\nfunction timeToSecond(hms){\n var a = hms.split(':'); // split it at the colons\n return (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);\n}","// This controller (embed_controller.js) is for users obtaining an embed code to embed this ZM message in another website.\n// Not to be confused with embed_media_controller.js which controls the UI for embeding 3rd-party media within Clarityflow.\n\nimport { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n\n static targets = [\"embedCodeInput\"]\n\n connect() {\n }\n\n // When user obtains the message embed code, they can toggle ?show_author off/on the src URL using this action\n toggleShowAuthor(event) {\n var input = this.embedCodeInputTarget;\n var input_value = input.value;\n var copy_element = this.element.querySelector(\"div[data-copy-string-value]\");\n\n // If show_author is present, remove it.\n if (input_value.includes(\"show_author=true\")) {\n if (input_value.includes(\"?show_author=true\")) { // show_author is the only param\n input.value = input_value.replace(\"?show_author=true\", \"\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(\"?show_author=true\", \"\"); // replace the copy element data attr\n } else if (input_value.includes(\"&show_author=true\")) { // show_author is present along with token param\n input.value = input_value.replace(\"&show_author=true\", \"\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(\"&show_author=true\", \"\"); // replace the copy element data attr\n }\n } else { // show_author is not present, so add it.\n if (input_value.includes(\"?token\")) { // token is present\n var token_index = input_value.indexOf(\"token=\") + 6;\n var token_value = input_value.substring(token_index, input_value.indexOf(\"'\", token_index));\n input.value = input_value.replace(token_value, token_value+\"&show_author=true\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(token_value, token_value+\"&show_author=true\"); // replace the copy element data attr\n } else { // token isn't present\n var src_index = input_value.indexOf(\"src='\") + 5;\n var src_value = input_value.substring(src_index, input_value.indexOf(\"'\", src_index));\n input.value = input_value.replace(src_value, src_value+\"?show_author=true\"); // replace in the hidden input\n copy_element.dataset.copyStringValue = input_value.replace(src_value, src_value+\"?show_author=true\"); // replace the copy element data attr\n }\n }\n\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"selectedEmbedType\",\n \"embedTypeInput\",\n \"applyBtn\",\n \"embeddedType\",\n \"EmbedUrlError\",\n \"embedPlayerLinkField\",\n \"embedIframeField\",\n \"mobileValidateBtn\"]\n\n static values = {\n }\n\n toggleEmbedType(event) {\n var selected_type_id = event.target.closest(\".embed-type-selection-link\").dataset.embedTypeId;\n\n // Activate the selected type at the top of the dropdown\n for (let selected of this.selectedEmbedTypeTargets) {\n if (selected.dataset.id == selected_type_id) {\n selected.classList.remove(\"hidden\");\n } else {\n selected.classList.add(\"hidden\");\n }\n }\n\n // Activate the selected type's input field\n for (let inputContainer of this.embedTypeInputTargets) {\n if (inputContainer.dataset.embedTypeId == selected_type_id) {\n this.embeddedTypeTarget.value = selected_type_id\n inputContainer.classList.remove(\"hidden\");\n var input_field = inputContainer.querySelector(\".embed-input-field\")\n input_field.focus();\n\n if(selected_type_id === 'player_link')\n this.isValidUrl(input_field.value)\n else\n this.hideEmbedError()\n } else {\n inputContainer.classList.add(\"hidden\");\n }\n }\n\n // Close the dropdown\n this.element.querySelector(\".dropdown-menu-container\").classList.add(\"hidden\");\n }\n\n revealApplyBtn(event) {\n if (this.hasApplyBtnTarget) {\n if(event.target.value.length > 0){\n this.applyBtnTarget.classList.remove(\"hidden\");\n }\n else{\n this.applyBtnTarget.classList.add(\"hidden\");\n }\n }\n }\n\n validateAndRevealApplyBtn(event) {\n var embed_url_field = this.embedTypeInputTarget.querySelector(\"input\");\n if (this.hasApplyBtnTarget) {\n if(embed_url_field.value.length > 0 && this.isValidUrl(embed_url_field.value)){\n this.applyBtnTarget.classList.remove(\"hidden\");\n }\n else{\n this.applyBtnTarget.classList.add(\"hidden\");\n }\n }\n if (this.hasMobileValidateBtn) {\n this.mobileValidateBtn.classList.add(\"hidden\");\n }\n }\n\n isValidUrl(url) {\n var urlPattern = new RegExp('^(https?:\\\\/\\\\/)?'+ // validate protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|'+ // validate domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))'+ // validate OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*'+ // validate port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?'+ // validate query string\n '(\\\\#[-a-z\\\\d_]*)?$','i'); // validate fragment locator\n\n if(urlPattern.test(url)){\n this.hideEmbedError()\n return true\n }\n else{\n this.EmbedUrlErrorTarget.innerHTML = 'URL is invalid'\n this.EmbedUrlErrorTarget.classList.remove('hidden')\n return false\n }\n }\n\n hideEmbedError(){\n this.EmbedUrlErrorTarget.innerHTML = ''\n this.EmbedUrlErrorTarget.classList.add('hidden')\n }\n\n removeEmbedMediaLink(event) {\n event.preventDefault();\n this.embedIframeFieldTarget.value = \"\";\n this.embedPlayerLinkFieldTarget.value = \"\";\n }\n}\n","import { Controller } from \"stimulus\";\n\n\nexport default class extends Controller {\n\n connect() {\n var newMessageForm = document.getElementById(\"new_message\");\n var newConversationForm = document.getElementById(\"new-conversation\");\n var form;\n\n if(newConversationForm) {\n form = newConversationForm;\n } else if (newMessageForm) {\n form = newMessageForm;\n }\n\n var downloadBtn = form.querySelector(\"#downloadBtn\");\n\n if(form && downloadBtn && (downloadBtn.href !== undefined || downloadBtn.href !== null)) {\n var recordingError = document.getElementById(\"recording-error\");\n recordingError.classList.remove(\"hidden\");\n }\n }\n\n downloadBlob() {\n var downloadBtn = document.querySelector(\"#downloadBtn\");\n\n if(downloadBtn.href !== undefined) {\n downloadBtn.click();\n }\n }\n\n}","// This controller manages the buttons located in the \"kickoff\" panel in the message creator, which is the centered panel where the user decides which device(s) to use to record their message (screen, camera, audio, text)\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"screenOrCameraWrapper\", \n \"screenButton\", \n \"cameraButton\",\n \"micButton\", \n \"textButton\", \n \"startButton\"];\n\n static values = {\n screen: Boolean,\n camera: Boolean,\n mic: Boolean,\n text: Boolean, \n safari: Boolean,\n firefox: Boolean,\n isAccountMember: Boolean,\n messageType: String\n }\n\n connect() {\n \n // Browser detection\n const sUsrAg = navigator.userAgent.toLowerCase();\n let isSafari = false;\n let isFirefox = false;\n if (sUsrAg.indexOf('safari') !== -1 && sUsrAg.indexOf('chrome') === -1) {\n isSafari = true;\n this.safariValue = true;\n }\n if(sUsrAg.indexOf('firefox') > -1){\n isFirefox = true;\n this.firefoxValue = true;\n }\n\n // Check to see if we're currently on a mobile-sized screen (< 768px wide)\n function mobile_screen() {\n var mq = window.matchMedia( \"(max-width: 768px)\" );\n if (mq.matches) {\n return true;\n } else {\n return false\n }\n }\n\n // If browser doesn't support screen+camera mode...\n if (isFirefox || isSafari) {\n this.element.classList.add(\"no-screen-camera-support\");\n } else { \n this.element.classList.remove(\"no-screen-camera-support\");\n }\n\n // Set the default message type\n var form_element = this.element.closest(\"form\");\n var message_type_field = form_element.querySelector(\"input[data-message--creation-target='messageTypeField']\");\n\n function stringToBoolean(string) {\n if (string) {\n return JSON.parse(string)\n }\n // Return null for other string values\n return undefined;\n }\n\n var default_message_type = form_element.dataset.defaultMessageType;\n var enable_screen_messages = stringToBoolean(form_element.dataset.enableScreenMessages);\n var enable_camera_messages = stringToBoolean(form_element.dataset.enableCameraMessages);\n var enable_mic_messages = stringToBoolean(form_element.dataset.enableMicMessages);\n var enable_file_uploads = stringToBoolean(form_element.dataset.enableFileUploads);\n var enable_library = form_element.dataset.enableLibrary;\n var enable_embeds = stringToBoolean(form_element.dataset.enableEmbeds);\n var enable_file_attachments = stringToBoolean(form_element.dataset.enableFileAttachments);\n\n var text_message_types = ['cameratext', 'screentext', 'screencameratext', 'audiotext', 'uploadtext', 'embedtext'];\n if (default_message_type && text_message_types.some(type => default_message_type.includes(type))) {\n // Remove the last 4 characters from the value\n default_message_type = default_message_type.slice(0, -4);\n var enable_text_block = true\n }\n\n if (!default_message_type) {\n default_message_type = \"screencamera\";\n }\n if (isFirefox || isSafari) {\n if (default_message_type == \"screen\" || default_message_type == \"screencamera\") {\n this.cameraButtonTarget.classList.add(\"inactive\");\n } else if (default_message_type == \"camera\") {\n this.screenButtonTarget.classList.add(\"inactive\");\n }\n }\n\n if (mobile_screen()) {\n // We only temporarily set this value \"upload\".\n // Once user uploads a file, this value will be changed (via creation_controller#manual_upload) to either 'video' or 'audio'\n // If user switches to text, then this value will change to 'text'\n message_type_field.value = \"upload\"\n } else {\n message_type_field.value = default_message_type;\n if (default_message_type == \"screencamera\") {\n this.setScreenCamera();\n } else if (default_message_type == \"screen\") {\n this.setScreen();\n } else if (default_message_type == \"camera\") {\n this.setCamera();\n } else if (default_message_type == \"audio\") {\n this.setAudio();\n } else if (default_message_type === 'upload' || default_message_type === 'library' || default_message_type === 'embed') {\n this.setNewMessageCreationFrom(form_element, default_message_type);\n }\n if(enable_file_uploads === false){\n this.setTogglePanel('upload')\n }\n }\n if (enable_text_block){\n this.setTextOnly();\n }\n\n if (default_message_type == 'text') {\n this.setText();\n this.setNewMessageCreationFrom(form_element, default_message_type);\n }\n if (enable_screen_messages === false && enable_camera_messages === false && enable_mic_messages === false) {\n this.setTogglePanel('record')\n }\n if (enable_embeds === false) {\n this.setTogglePanel('embed')\n }\n if (enable_library === 'false') {\n this.setTogglePanel('library')\n }\n if (enable_file_attachments === false) {\n this.setTogglePanel('files')\n }\n\n // If the URL has `text_content` param, then force open the text panel and fill it's value with the value of `text_content`\n var url = new URL(window.location.href);\n var text_content = url.searchParams.get(\"text_content\");\n if (text_content) {\n var text_button = this.textButtonTarget;\n text_button.click();\n form_element.querySelector(\"trix-editor\").innerHTML = text_content;\n }\n \n }\n\n // Toggles 'screen' button when clicked\n toggleScreen(event) {\n var button = this.screenButtonTarget;\n\n if (this.screenValue == true) { // setting to false\n this.screenValue = false;\n if(this.micToggleForNonAccountMember() && this.cameraValue == false){\n this.micValue = false;\n }\n toggleOff(button);\n\n if (this.firefoxValue || this.safariValue) {\n this.screenOrCameraWrapperTarget.classList.remove(\"screen-selected\");\n this.screenOrCameraWrapperTarget.classList.add(\"none-selected\");\n }\n } else { // setting to true\n this.screenValue = true;\n if(this.micToggleForNonAccountMember()) {\n this.micValue = true;\n }\n toggleOn(button);\n\n if (this.firefoxValue || this.safariValue) {\n this.screenOrCameraWrapperTarget.classList.add(\"screen-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"camera-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"none-selected\");\n this.cameraButtonTarget.classList.add(\"inactive\");\n this.cameraValue = false;\n toggleOff(this.cameraButtonTarget);\n }\n }\n\n this.updateMessageType();\n }\n\n // Toggles 'camera' button when clicked\n toggleCamera(event) {\n var button = this.cameraButtonTarget;\n\n if (this.cameraValue == true) { // setting to false\n this.cameraValue = false;\n if(this.micToggleForNonAccountMember() && this.screenValue == false){\n this.micValue = false;\n }\n toggleOff(button);\n\n if (this.firefoxValue || this.safariValue) {\n this.screenOrCameraWrapperTarget.classList.remove(\"camera-selected\");\n this.screenOrCameraWrapperTarget.classList.add(\"none-selected\");\n }\n } else { // setting to true\n this.cameraValue = true;\n if(this.micToggleForNonAccountMember()){\n this.micValue = true;\n }\n toggleOn(button);\n\n if (this.firefoxValue || this.safariValue) {\n this.screenOrCameraWrapperTarget.classList.add(\"camera-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"screen-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"none-selected\");\n this.screenButtonTarget.classList.add(\"inactive\");\n this.screenValue = false;\n toggleOff(this.screenButtonTarget);\n }\n }\n\n this.updateMessageType();\n }\n\n // Toggles 'mic' button when clicked\n toggleMic(event) {\n var button = this.micButtonTarget;\n\n if (this.micValue == true) {\n this.micValue = false;\n toggleOff(button);\n } else {\n this.micValue = true;\n toggleOn(button);\n }\n\n this.updateMessageType();\n }\n\n // Toggles 'text' button when clicked\n toggleText(event) {\n var button = this.textButtonTarget;\n\n if (this.textValue == true) {\n this.textValue = false;\n toggleOff(button);\n } else {\n this.textValue = true;\n toggleOn(button);\n }\n }\n\n // Sets to \"screencamera\" mode on initial page load\n setScreenCamera() {\n this.screenValue = \"true\";\n this.cameraValue = \"true\";\n this.micValue = \"true\";\n this.textValue = \"false\";\n\n var screen_button = this.screenButtonTarget;\n var camera_button = this.cameraButtonTarget;\n var mic_button = this.micButtonTarget;\n var text_button = this.textButtonTarget;\n\n toggleOn(screen_button);\n toggleOn(camera_button);\n toggleOn(mic_button);\n toggleOff(text_button);\n\n if (this.firefoxValue || this.safariValue) {\n // turn off camera button since firefox/safari can't do screen+camera\n this.cameraValue = \"false\";\n toggleOff(camera_button);\n this.screenOrCameraWrapperTarget.classList.add(\"screen-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"camera-selected\");\n }\n\n this.updateMessageType();\n }\n\n // Sets to \"screen\" mode on initial page load\n setScreen() {\n this.screenValue = \"true\";\n this.cameraValue = \"false\";\n this.micValue = \"true\";\n this.textValue = \"false\";\n\n var screen_button = this.screenButtonTarget;\n var camera_button = this.cameraButtonTarget;\n var mic_button = this.micButtonTarget;\n var text_button = this.textButtonTarget;\n\n toggleOn(screen_button);\n toggleOff(camera_button);\n toggleOn(mic_button);\n toggleOff(text_button);\n\n if (this.firefoxValue || this.safariValue) {\n this.screenOrCameraWrapperTarget.classList.add(\"screen-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"camera-selected\");\n }\n\n this.updateMessageType();\n }\n\n // Sets to \"camera\" mode on initial page load\n setCamera() {\n this.screenValue = \"false\";\n this.cameraValue = \"true\";\n this.micValue = \"true\";\n this.textValue = \"false\";\n\n var screen_button = this.screenButtonTarget;\n var camera_button = this.cameraButtonTarget;\n var mic_button = this.micButtonTarget;\n var text_button = this.textButtonTarget;\n\n toggleOff(screen_button);\n toggleOn(camera_button);\n toggleOn(mic_button);\n toggleOff(text_button);\n\n if (this.firefoxValue || this.safariValue) {\n this.screenOrCameraWrapperTarget.classList.add(\"camera-selected\");\n this.screenOrCameraWrapperTarget.classList.remove(\"screen-selected\");\n }\n\n this.updateMessageType();\n }\n\n // Sets to \"audio\" mode on initial page load\n setAudio() {\n this.screenValue = \"false\";\n this.cameraValue = \"false\";\n this.micValue = \"true\";\n this.textValue = \"false\";\n\n var screen_button = this.screenButtonTarget;\n var camera_button = this.cameraButtonTarget;\n var mic_button = this.micButtonTarget;\n var text_button = this.textButtonTarget;\n\n toggleOff(screen_button);\n toggleOff(camera_button);\n toggleOn(mic_button);\n toggleOff(text_button);\n\n this.updateMessageType();\n }\n\n // Sets to \"text\" mode on initial page load\n setText() {\n this.screenValue = \"false\";\n this.cameraValue = \"false\";\n this.micValue = \"false\";\n this.textValue = \"true\";\n\n var screen_button = this.screenButtonTarget;\n var camera_button = this.cameraButtonTarget;\n var mic_button = this.micButtonTarget;\n var text_button = this.textButtonTarget;\n\n toggleOff(screen_button);\n toggleOff(camera_button);\n toggleOff(mic_button);\n\n this.updateMessageType();\n text_button.click();\n\n toggleOn(text_button);\n }\n\n // This function used to only enable text block without disabling any other toggle.\n setTextOnly() {\n this.textValue = \"true\";\n var text_button = this.textButtonTarget;\n text_button.click();\n\n toggleOn(text_button);\n }\n\n setNewMessageCreationFrom(form_element, default_message_type) {\n var media_panel = form_element.getElementsByClassName('media-panel')\n var media_panel_toggle = form_element.getElementsByClassName('media-panel-toggle')\n\n media_panel.forEach(panel => {\n if (!panel.classList.contains('hidden')) {\n panel.classList.add('hidden')\n }\n })\n media_panel_toggle.forEach(toggle => {\n if (toggle.dataset.messageTypeId === default_message_type && !toggle.classList.contains('active')) {\n toggle.click()\n } else if (toggle.classList.contains('active')) {\n toggle.classList.remove('active')\n }\n })\n var new_message_form = form_element.querySelector('.' + default_message_type + '-panel')\n if (new_message_form) {\n new_message_form.classList.remove('hidden')\n } else {\n this.element.querySelector(\".message-block-toggle[data-message-type-id='text']\").click();\n }\n }\n\n setTogglePanel(media) {\n var media_panel_toggle = media === \"files\" ?\n document.getElementsByClassName('message-block-toggle') :\n document.getElementsByClassName('media-panel-toggle')\n\n media_panel_toggle.forEach(element => {\n if (media === element.dataset.messageTypeId) {\n element.classList.add('hidden')\n }\n })\n }\n\n // Updates the hidden message type field & the kickoff button text\n updateMessageType() {\n var start_button = this.startButtonTarget;\n var start_button_text = start_button.querySelector(\"span\");\n var screen = this.screenValue;\n var camera = this.cameraValue;\n var mic = this.micValue;\n var message_type_field = this.element.closest(\"form\").querySelector(\"input[data-message--creation-target='messageTypeField']\");\n\n if (screen) {\n // screen\n start_button.dataset.action = \"click->message--creation#start_screen_preview\";\n start_button.classList.remove(\"hidden\");\n start_button_text.innerHTML = \"Share your screen...\"\n if (screen && camera) {\n message_type_field.value = \"screencamera\";\n start_button_text.innerHTML = \"Start screen & camera...\"\n } else {\n message_type_field.value = \"screen\";\n }\n } else if (!screen && camera) {\n // camera\n start_button.dataset.action = \"click->message--creation#start_camera_preview\";\n start_button.classList.remove(\"hidden\");\n start_button_text.innerHTML = \"Turn on camera...\"\n message_type_field.value = \"camera\";\n } else if (!screen && !camera && mic) {\n // mic only\n start_button.dataset.action = \"click->message--creation#start_mic_preview\";\n start_button.classList.remove(\"hidden\");\n start_button_text.innerHTML = \"Turn on mic...\"\n message_type_field.value = \"audio\";\n } else {\n start_button.classList.add(\"hidden\");\n message_type_field.value = \"text\";\n }\n this.messageTypeValue = message_type_field.value;\n }\n\n // Hides \"+ camera\" when camera will not be included in this message recording\n toggleCameraLabels(message_type) {\n var form = this.closest(\"form\");\n }\n\n micToggleForNonAccountMember(){\n // returns true when:\n // - User is logged-in\n // - User is not an account_member\n // - The mic button is hidden\n return !(this.isAccountMemberValue) && this.micButtonTarget.classList.contains('hidden')\n }\n\n}\n\n\nfunction toggleOn(button) {\n button.classList.add(\"active\");\n}\n\nfunction toggleOff(button) {\n button.classList.remove(\"active\");\n}\n","import {Controller} from \"stimulus\";\n\n\nexport default class extends Controller {\n static targets = [\"toggles\", \"messageTemplate\", \"threadTemplate\", \"searchFieldContainer\", \"librarySearch\", \"messageTemplateSelectField\", \"threadTemplateSelectField\", \"searchField\", 'clearSearchIcon', 'searchResult', \"selectedResult\", \"messageAuthorDropdown\"]\n\n static values = {}\n\n connect() {\n }\n\n toggleMessageTemplate() {\n this.togglesTarget.classList.add(\"hidden\");\n this.messageTemplateTarget.classList.remove(\"hidden\");\n if (this.hasThreadTemplateTarget)\n this.threadTemplateTarget.classList.add(\"hidden\");\n }\n\n toggleThreadTemplate() {\n this.togglesTarget.classList.add(\"hidden\");\n this.messageTemplateTarget.classList.add(\"hidden\");\n this.threadTemplateTarget.classList.remove(\"hidden\");\n }\n\n cancel() {\n this.togglesTarget.classList.remove(\"hidden\");\n this.messageTemplateTarget.classList.add(\"hidden\");\n this.threadTemplateTarget.classList.add(\"hidden\");\n }\n\n selectTemplates(event) {\n this.togglesTarget.classList.remove(\"hidden\");\n this.librarySearchTarget.classList.add(\"hidden\");\n }\n\n searchTemplates() {\n this.togglesTarget.classList.add(\"hidden\");\n this.messageTemplateTarget.classList.add(\"hidden\");\n this.threadTemplateTarget.classList.add(\"hidden\");\n this.librarySearchTarget.classList.remove(\"hidden\");\n }\n\n setThreadTemplate(event) {\n var thread_template_id = event.target.closest('.search-result').dataset.templateId\n this.threadTemplateSelectFieldTarget.value = thread_template_id;\n this.messageTemplateSelectFieldTarget.value = '';\n }\n\n setMessageTemplate(event) {\n var message_template_id = event.target.closest('.search-result').dataset.templateId\n this.messageTemplateSelectFieldTarget.value = message_template_id;\n if (this.hasThreadTemplateSelectFieldTarget) this.threadTemplateSelectFieldTarget.value = '';\n }\n\n setSearchField(event) {\n this.searchFieldTarget.value = event.target.closest('.search-result').dataset.templateName;\n }\n\n resetSearchField() {\n this.searchFieldContainerTarget.classList.remove(\"hidden\");\n this.searchFieldTarget.focus()\n if (this.hasSearchResultTarget) {\n this.selectedResultTarget.classList.add('hidden')\n var selected_template = this.selectedResultTarget.querySelector('.selected-template')\n if (selected_template) {\n selected_template.innerHTML = '';\n }\n }\n this.searchFieldTarget.value = ''\n this.searchResultTarget.innerHTML = ''\n this.clearSearchIconTarget.classList.add(\"hidden\");\n if (this.hasThreadTemplateSelectFieldTarget) this.threadTemplateSelectFieldTarget.value = '';\n if (this.hasMessageTemplateSelectFieldTarget) this.messageTemplateSelectFieldTarget.value = '';\n if (this.hasMessageAuthorDropdownTarget){\n this.messageAuthorDropdownTarget.innerHTML = '';\n }\n }\n\n display_library(event) {\n var template_type = event.target.closest('.search-result').dataset.templateType\n if (template_type === 'ThreadTemplate') {\n var params = new URLSearchParams({\n thread_template_id: event.target.closest('.search-result').dataset.templateId,\n });\n } else if (template_type === 'MessageTemplate') {\n var params = new URLSearchParams({\n message_template_id: event.target.closest('.search-result').dataset.templateId,\n });\n }\n\n\n var path = `/${accountId}/display_selected_template?${params}`;\n Rails.ajax({\n type: \"get\",\n url: path\n })\n\n }\n}","// `audio_media_stream` function will get the mic stream by requesting the users for access\n//\n// IMPORTANT FUNCTIONS\n// getDevices()\n// gotDevices()\n// getStream()\n// gotStream()\n// Above mentioned functions are the main functions used to get the audio stream\n\nimport DetectAudioLevel from \"../concerns/detect_audio_level\";\n\nexport default function audio_media_stream() {\n var previewElement = this.previewTarget;\n var audioSelect = this.selectAudioSourceTarget.querySelector(\"select\");\n var startMicRecordBtn = this.startMicRecordBtnTarget;\n var startCameraRecordBtn = this.startCameraRecordBtnTarget;\n var startScreenRecordBtn = this.startScreenRecordBtnTarget;\n var loadingIcon = this.loadingIconTarget;\n var camMicSelectorsTarget = this.camMicSelectorsTarget\n var messageUITarget = this.messageUITarget\n\n audioSelect.onchange = getStream;\n\n if(localStorage.getItem(\"zipmessage-mic\")) {\n getDevices().then(gotDevices).then(() => getStream.call(this)).then(getDevices).then(gotDevices);\n } else {\n getStream.call(this).then(getDevices).then(gotDevices);\n }\n\n // ---MAIN FUNCTION STARTS---\n\n function getDevices() {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n function gotDevices(deviceInfos) {\n audioSelect.innerHTML = \"\";\n window.deviceInfos = deviceInfos; // make available to console\n\n let layoutMic = localStorage.getItem(\"zipmessage-mic\");\n\n console.log('Available input and output devices:', deviceInfos);\n for (const deviceInfo of deviceInfos) {\n const option = document.createElement('option');\n option.value = deviceInfo.deviceId;\n if (deviceInfo.kind === 'audioinput') {\n option.text = deviceInfo.label || `Microphone ${audioSelect.length + 1}`;\n\n if(layoutMic === JSON.stringify(option.value)) {\n option.selected = true;\n }\n\n audioSelect.appendChild(option);\n }\n }\n }\n\n function getStream() {\n stopStreams();\n\n const audioSource = audioSelect.value;\n const constraints = {\n audio: {deviceId: audioSource ? {exact: audioSource} : undefined},\n echoCancellation: true,\n noiseSuppression: true,\n sampleRate: 44100\n };\n return navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(error => handleError.call(this, error));\n }\n\n function gotStream(stream) {\n window.stream = stream; // make stream available to console\n\n // Set currently active media device ids to local storage\n if(audioSelect.value !== null && audioSelect.value.length > 0) localStorage.setItem(\"zipmessage-mic\", JSON.stringify(audioSelect.value));\n\n audioSelect.selectedIndex = Array.from(audioSelect.options).\n findIndex(option => getIndexOfOption(option, stream.getAudioTracks()[0].label));\n\n previewElement.querySelector(\"video\").srcObject = stream;\n\n if(startMicRecordBtn || startCameraRecordBtn || startScreenRecordBtn) {\n loadingIcon.classList.add(\"hidden\"); // Hide the loading spinner icon\n startMicRecordBtn.classList.remove(\"hidden\"); // show the \"start recording mic\" button\n startCameraRecordBtn.classList.add(\"hidden\"); // hide the \"start recording camera\" button\n startScreenRecordBtn.classList.add(\"hidden\"); // hide the \"start recording screen\" button\n }\n\n // show audio level of mic\n var detectAudio = new DetectAudioLevel();\n detectAudio.detectAudioLevel(stream, 'audio-meter', camMicSelectorsTarget, messageUITarget);\n }\n\n // ---MAIN FUNCTION ENDS---\n\n\n // ---HELPER FUNCTION STARTS---\n\n function stopStreams() {\n // Stop already active media streams\n if (window.stream) {\n window.stream.getTracks().forEach(track => {\n track.stop();\n });\n }\n\n if(window.streamArr) {\n window.streamArr.forEach(stream => {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n })\n\n window.streamArr = [];\n }\n\n window.streamArr = [];\n }\n\n function getIndexOfOption(option, label) {\n return option.text === label;\n }\n\n // ---HELPER FUNCTION ENDS---\n\n\n function handleError(error) {\n console.error('Error: ', error);\n console.error('Error: ', error.name);\n\n this.mediaError(error)\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId })\n span.setTags({\n tag: \"Media error\"\n }).setError({name: \"Mic permission denied\", message: error});\n window.appsignal.send(span);};\n }\n}","// `camera_media_stream` function will get the camera + mic stream by requesting the users for access\n//\n// IMPORTANT FUNCTIONS\n// getDevices()\n// gotDevices()\n// getStream()\n// gotStream()\n// Above mentioned functions are the main functions used to get the camera + mic stream\nimport {SelfieSegmentation} from \"@mediapipe/selfie_segmentation\"\nimport DetectAudioLevel from \"../concerns/detect_audio_level\";\n\nexport default function camera_media_stream() {\n var previewElement = this.previewTarget;\n var audioSelect = this.selectAudioSourceTarget.querySelector(\"select\");\n var selectVideoSource = this.selectVideoSourceTarget;\n var selectAudioSource = this.selectAudioSourceTarget;\n var videoSelect = this.selectVideoSourceTarget.querySelector(\"select\");\n var startCameraRecordBtn = this.startCameraRecordBtnTarget;\n var startScreenRecordBtn = this.startScreenRecordBtnTarget;\n var startMicRecordBtn = this.startMicRecordBtnTarget;\n var loadingIcon = this.loadingIconTarget;\n var mediaField = this.mediaFieldTarget;\n var activeMediaElements = this.activeMediaTargets;\n var activeMedia = [];\n var audioStream, cameraStream, cameraStream1;\n var stopAnim = undefined;\n var streamStop = this.stopBtnTarget;\n var resetStream = this.resetBtnTarget;\n const canvasElement = document.querySelector('#recordingCanvas1');\n const noImage = document.querySelector(\"#nobackground\");\n var image = document.getElementById('bgimage');\n var new_video = document.querySelector(\"#new_video\");\n var imageCheck;\n const sUsrAg = navigator.userAgent.toLowerCase();\n let isChrome = false;\n var camMicSelectorsTarget = this.camMicSelectorsTarget\n var messageUITarget = this.messageUITarget\n\n const selfieSegmentation = new SelfieSegmentation({\n locateFile: (file) => {\n return `https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation@0.1.1632777926/${file}`;\n }\n });\n\n if(sUsrAg.indexOf('chrome') > -1) {\n isChrome = true;\n }\n\n if(resetStream) {\n resetStream.addEventListener(\"click\", (e) => {\n if (stopAnim) {\n cancelAnimationFrame(stopAnim);\n stopAnim = undefined;\n }\n });\n }\n\n if(document.getElementById('bgimage') !== null && isChrome) {\n var withoutQueryParam = document.getElementById('bgimage').src.indexOf(noImage.src.slice(noImage.src.length - 6)) > -1\n var withQueryParam = document.getElementById('bgimage').src.split('?')[0].indexOf(noImage.src.split('?')[0].slice(noImage.src.split('?')[0].length - 6)) > -1\n }\n\n if (image !== null && isChrome) {\n image.crossOrigin = \"Anonymous\";\n image.addEventListener('load', function () {\n withoutQueryParam = document.getElementById('bgimage').src.indexOf(noImage.src.slice(noImage.src.length - 6)) > -1\n withQueryParam = document.getElementById('bgimage').src.split('?')[0].indexOf(noImage.src.split('?')[0].slice(noImage.src.split('?')[0].length - 6)) > -1\n\n if (document.getElementById('bgimage').src.includes(\"?\")) {\n imageCheck = withQueryParam\n } else {\n imageCheck = withoutQueryParam\n }\n if (imageCheck) {\n image = null;\n } else {\n image = document.getElementById('bgimage');\n }\n\n callingCanvasFromMediapipe()\n \n stopStreams();\n getStream();\n });\n }\n\n if (document.getElementById('bgimage') && isChrome) {\n if (document.getElementById('bgimage').src.includes(\"?\")) {\n imageCheck = withQueryParam\n } else {\n imageCheck = withoutQueryParam\n }\n\n if (imageCheck) {\n image = null;\n } else {\n image = document.getElementById('bgimage');\n }\n }\n\n audioSelect.onchange = () => { callingCanvasFromMediapipe(); getStream(); };\n videoSelect.onchange = () => { callingCanvasFromMediapipe(); getStream(); };\n\n callingCanvasFromMediapipe();\n\n // Show and hide audio icon in `start recording` button\n showHideActiveMediaElements.call(this);\n\n // Listen for stop event and stop animation\n listenStopEvent.call(this);\n\n if (localStorage.getItem(\"zipmessage-camera\") || localStorage.getItem(\"zipmessage-mic\")) {\n getDevices().then(gotDevices).then(() => getStream.call(this)).then(getDevices).then(gotDevices);\n } else {\n getStream.call(this).then(getDevices).then(gotDevices);\n }\n\n // ---MAIN FUNCTION STARTS---\n\n function getDevices() {\n console.log(navigator.mediaDevices.enumerateDevices())\n return navigator.mediaDevices.enumerateDevices();\n }\n\n function gotDevices(deviceInfos) {\n videoSelect.innerHTML = \"\";\n audioSelect.innerHTML = \"\";\n window.deviceInfos = deviceInfos; // make available to console\n console.log('Available input and output devices:', deviceInfos);\n let layoutCamera = localStorage.getItem(\"zipmessage-camera\");\n let layoutMic = localStorage.getItem(\"zipmessage-mic\");\n\n for (const deviceInfo of deviceInfos) {\n const option = document.createElement('option');\n option.value = deviceInfo.deviceId;\n if (deviceInfo.kind === 'audioinput') {\n option.text = deviceInfo.label || `Microphone ${audioSelect.length + 1}`;\n\n if (layoutMic === JSON.stringify(option.value)) {\n option.selected = true;\n }\n\n audioSelect.appendChild(option);\n } else if (deviceInfo.kind === 'videoinput') {\n if (deviceInfo.label && deviceInfo.label.toLowerCase().indexOf('back') >= 0) {\n option.text = \"Back camera - facing out\"\n } else if (deviceInfo.label && deviceInfo.label.toLowerCase().indexOf('front') >= 0) {\n option.text = \"Front camera - facing you\"\n } else {\n option.text = deviceInfo.label || `Camera ${videoSelect.length + 1}`;\n }\n\n if (layoutCamera === JSON.stringify(option.value)) {\n option.selected = true;\n }\n\n videoSelect.appendChild(option);\n }\n }\n }\n\n function getStream() {\n stopStreams();\n\n const videoSource = videoSelect.value;\n\n var idealWidth = 1280;\n var idealHeight = 720;\n var minWidth = 320;\n var minHeight= 320;\n\n if(mediaField && mediaField.dataset.enableHdVideo) {\n idealWidth = 1920;\n idealHeight = 1080;\n minWidth = 500;\n minHeight = 500;\n }\n\n const constraints = {\n\n video: {\n deviceId: videoSource ? {exact: videoSource} : undefined,\n width: {\n min: minWidth,\n ideal: idealWidth\n },\n height: {\n min: minHeight,\n ideal: idealHeight\n },\n facingMode: \"user\"\n }\n };\n\n return navigator.mediaDevices.getUserMedia(constraints).then(stream => {\n if(image !== null){\n new_video.srcObject = stream;\n new_video.muted = true;\n new_video.play();\n }\n window.cameraStream1 = stream;\n cameraStream1 = stream;\n window.streamArr.push(stream);\n\n console.log(activeMedia, 'activeMedia')\n if(activeMedia.includes(\"mic\")) {\n return getAudioStream.call(this)\n } else {\n gotStream(stream);\n }\n }).catch(error => handleError.call(this, error));\n }\n\n function getAudioStream() {\n const audioSource = audioSelect.value;\n\n const audioConstraints = {\n audio: {deviceId: audioSource ? {exact: audioSource} : undefined},\n echoCancellation: true,\n noiseSuppression: true,\n sampleRate: 44100\n }\n\n return navigator.mediaDevices.getUserMedia(audioConstraints).then(stream => {\n audioStream = stream;\n\n gotStream(stream);\n\n // show audio level of mic\n var detectAudio = new DetectAudioLevel();\n detectAudio.detectAudioLevel(stream, 'audio-meter', camMicSelectorsTarget, messageUITarget);\n }).catch(error => handleError.call(this, error))\n }\n\n\n function gotStream(stream) {\n if(videoSelect.value !== null && videoSelect.value.length > 0) localStorage.setItem(\"zipmessage-camera\", JSON.stringify(videoSelect.value));\n if(audioSelect.value !== null && audioSelect.value.length > 0) localStorage.setItem(\"zipmessage-mic\", JSON.stringify(audioSelect.value));\n\n if(activeMedia.includes(\"mic\")){\n audioSelect.selectedIndex = Array.from(audioSelect.options).\n findIndex(option => getIndexOfOption(option, audioStream.getAudioTracks()[0].label));\n }\n if(activeMedia.includes(\"camera\")){\n videoSelect.selectedIndex = Array.from(videoSelect.options).\n findIndex(option => getIndexOfOption(option, cameraStream1.getVideoTracks()[0].label));\n }\n\n console.log(image !== null, isChrome)\n console.log(image)\n if (image !== null && isChrome ) {\n sendToMediaPipe();\n }else{\n cameraStream = cameraStream1\n }\n previewElement.querySelector(\"video\").srcObject = cameraStream;\n window.stream = cameraStream;\n if (audioStream) {\n window.stream.addTrack(audioStream.getAudioTracks()[0]);\n }\n\n if(startCameraRecordBtn || startScreenRecordBtn || startMicRecordBtn) {\n loadingIcon.classList.add(\"hidden\"); // Hide the loading spinner icon\n startCameraRecordBtn.classList.remove(\"hidden\"); // show the \"start recording camera\" button\n startScreenRecordBtn.classList.add(\"hidden\"); // hide the \"start recording screen\" button\n startMicRecordBtn.classList.add(\"hidden\"); // hide the \"start recording mic\" button\n }\n }\n\n const sendToMediaPipe = async () => {\n // If there video isn't ready yet, just loop again\n if (new_video.videoWidth) {\n await selfieSegmentation.send({ image: new_video });\n }\n stopAnim = requestAnimationFrame(sendToMediaPipe);\n };\n\n function callingCanvasFromMediapipe() {\n if(image === null) return\n\n if (isChrome) {\n selfieSegmentation.setOptions({\n modelSelection: 1,\n });\n\n cameraStream = canvasElement.captureStream();\n\n streamStop.addEventListener(\"click\", (e) => {\n stopStreams();\n });\n\n selfieSegmentation.onResults(onResults);\n }\n }\n\n function listenStopEvent() {\n if(!(this.hasStopBtnTarget === true)) return false;\n\n this.stopBtnTarget.addEventListener(\"click\", (e) => {\n if(stopAnim) {\n stopAnim();\n stopAnim = undefined;\n }\n })\n }\n\n\n function onResults(results) {\n const canvasCtx = canvasElement.getContext('2d');\n canvasCtx.save();\n canvasCtx.clearRect(0, 0, canvasElement.width, canvasElement.height);\n canvasCtx.drawImage(results.segmentationMask, 0, 0,\n canvasElement.width, canvasElement.height);\n\n // Only overwrite existing pixels.\n if(image !== null) {\n canvasCtx.globalCompositeOperation = 'source-out';\n canvasCtx.drawImage(image, 0, 0, canvasElement.width, canvasElement.height);\n }else{\n canvasCtx.globalCompositeOperation = 'source-out';\n canvasCtx.fillStyle = '#00FF00';\n }\n\n // Only overwrite missing pixels.\n canvasCtx.globalCompositeOperation = 'destination-atop';\n canvasCtx.drawImage(results.image, 0, 0, canvasElement.width, canvasElement.height);\n canvasCtx.restore();\n }\n\n // ---MAIN FUNCTION ENDS---\n\n // ---HELPER FUNCTION STARTS---\n\n function showHideActiveMediaElements() {\n if (activeMediaElements === undefined || activeMediaElements === null) return\n // Get media elements that are active\n for (const activeMediaElement of activeMediaElements) {\n if (activeMediaElement.classList.contains(\"active\"))\n activeMedia.push(activeMediaElement.dataset.device);\n }\n\n // Hide `mic` icon in start recording button\n if (!activeMedia.includes(\"mic\")) {\n selectAudioSource.classList.add(\"hidden\");\n var micLabels = this.element.querySelectorAll(\".plusMicLabel\");\n for (let micLabel of micLabels) {\n micLabel.classList.add(\"hidden\");\n }\n }\n }\n\n function stopStreams() {\n // Stop already active media streams\n\n if (window.stream) {\n window.stream.getTracks().forEach(track => {\n track.stop();\n });\n }\n\n if(window.streamArr) {\n window.streamArr.forEach(stream => {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n })\n\n window.streamArr = [];\n }\n window.streamArr = [];\n\n if (stopAnim) {\n cancelAnimationFrame(stopAnim);\n stopAnim = undefined;\n }\n }\n\n function getIndexOfOption(option, label) {\n // Get the index of options in select\n return (option.text === label) ||\n (option.text.toLowerCase().indexOf('you') >= 0 && label.toLowerCase().indexOf('front') >= 0) ||\n (option.text.toLowerCase().indexOf('out') >= 0 && label.toLowerCase().indexOf('back') >= 0);\n }\n\n // ---HELPER FUNCTION ENDS---\n\n function handleError(error) {\n console.error('Error: ', error);\n console.error('Error: ', error.name);\n\n this.mediaError(error)\n if(window.appsignal !== undefined) { var span = window.appsignal.createSpan();\n span.setParams({ account_id: accountId })\n span.setTags({\n tag: \"Media error\"\n }).setError({name: \"Camera permission denied\", message: error});\n window.appsignal.send(span);};\n }\n}","import {Controller} from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"blocksContainer\",\n \"mediaPanel\",\n \"mediaPanelToggle\",\n \"block\",\n \"blockToggle\",\n \"hiddenPills\",\n \"shownPills\",\n \"typePill\",\n \"messageTypeField\"\n ]\n\n static values = {}\n\n connect() {\n }\n\n openMenu() {\n this.blocksContainerTarget.classList.add(\"opacity-40\");\n\n // If tour was present, hide it while the message types menu is open\n var tour_element = document.querySelector(\".tour-element#tour-create-message\");\n if (tour_element) {\n tour_element.classList.add(\"sm:hidden\", \"lg:hidden\", \"xl:hidden\", \"2xl:hidden\");\n }\n }\n\n closeMenu() {\n this.blocksContainerTarget.classList.remove(\"opacity-40\");\n\n // If tour was present, reveal it again\n var tour_element = document.querySelector(\".tour-element#tour-create-message\");\n if (tour_element) {\n tour_element.classList.remove(\"sm:hidden\", \"lg:hidden\", \"xl:hidden\", \"2xl:hidden\");\n }\n }\n\n // Toggle the media panels\n togglePanel(event) {\n var panel_toggle = event.target.closest(\".media-panel-toggle\");\n var message_type_id = panel_toggle.dataset.messageTypeId;\n var menu_panel_toggle = this.element.querySelector(\".message-type-menu .media-panel-toggle[data-message-type-id='\" + message_type_id + \"']\"); // Might be different from the above .media-panel-toggle if the toggle link resides outside of the dropdown menu. This identifies the toggle in the dropdown menu so that we can activate it.\n var panel = this.element.querySelector(\".media-panel.\" + message_type_id + \"-panel\");\n if (panel_toggle.classList.contains(\"active\")) { // deactivating panel\n panel.classList.add(\"hidden\");\n panel_toggle.classList.remove(\"active\");\n this.deactivateAllMediaPanels(); // deactivates all panels\n this.activateDefaultBlock(); // In case all blocks have been deactivated, activate the default block\n } else { // activating panel\n if (panel) {\n panel.classList.remove(\"hidden\");\n menu_panel_toggle.classList.add(\"active\");\n var input = panel.querySelector(\"input\");\n if (input) {\n input.focus();\n }\n\n // If we're activating the conversation_link panel, then deactivate all blocks\n if (message_type_id == \"conversation_link\") {\n for (let block_toggle of this.blockToggleTargets) {\n block_toggle.classList.remove(\"active\");\n }\n for (let block of this.blockTargets) {\n block.classList.add(\"hidden\");\n }\n }\n\n // If we're activating the library panel, focus the search field\n if (message_type_id == \"library\") {\n var search_input = panel.querySelector(\"input#search\");\n search_input.focus();\n }\n }\n this.deactivateAllMediaPanels(message_type_id); // deactivates all panels except this one\n }\n\n if (panel_toggle.dataset.setMessageType) {\n var message_type_value_to_set = panel_toggle.dataset.setMessageType;\n this.messageTypeFieldTarget.value = message_type_value_to_set;\n }\n\n if (panel_toggle.dataset.messageTypeId === \"record\") {\n this.messageTypeFieldTarget.value = document.getElementsByClassName('kickoff-recording')[0].dataset['message-KickoffRecordingMessageTypeValue']\n }\n\n // If this panel change requires revealing the message template title field, process that\n this.toggleMessageTemplateTitleBlock();\n\n // Update the Pills in the message type selector\n this.updatePills();\n }\n\n deactivateAllMediaPanels(exclude_message_type_id) {\n for (let media_panel of this.mediaPanelTargets) {\n if (!media_panel.classList.contains(exclude_message_type_id + \"-panel\")) {\n media_panel.classList.add(\"hidden\");\n }\n }\n for (let media_panel_toggle of this.mediaPanelToggleTargets) {\n if (media_panel_toggle.getAttribute('data-message-type-id') != exclude_message_type_id) {\n media_panel_toggle.classList.remove(\"active\");\n }\n }\n }\n\n // Toggle message blocks (optional blocks displayed underneath the media panel)\n toggleBlock(event) {\n var block_toggle = event.target.closest(\".message-block-toggle\");\n var message_type_id = block_toggle.dataset.messageTypeId;\n var block = this.element.querySelector(\".message-block.\" + message_type_id + \"-block\");\n var block_toggles = this.element.querySelectorAll(\".message-block-toggle[data-message-type-id='\" + message_type_id + \"']\");\n if (block_toggle.classList.contains(\"active\")) { // deactivating block\n block.classList.add(\"hidden\");\n for (let toggle of block_toggles) {\n toggle.classList.remove(\"active\");\n }\n this.activateDefaultBlock(); // In case all blocks have been deactivated, activate the default block\n } else { // activating block\n if (block) {\n block.classList.remove(\"hidden\");\n block.scrollIntoView({behavior: \"smooth\", block: \"center\"}); // Scroll down to the block\n for (let toggle of block_toggles) {\n toggle.classList.add(\"active\");\n }\n }\n\n // Deactivate Conversation Link block\n var conversation_link_block_toggle = this.element.querySelector(\".panel-as-block-toggle[data-message-type-id='conversation_link']\");\n if (conversation_link_block_toggle) {\n conversation_link_block_toggle.classList.remove(\"active\");\n this.element.querySelector(\".media-panel.conversation_link-panel\").classList.add(\"hidden\");\n }\n\n }\n\n // If this panel change requires revealing the message template title field, process that\n this.toggleMessageTemplateTitleBlock();\n\n // Update the Pills in the message type selector\n this.updatePills();\n }\n\n updatePills() {\n // Get the currently active message type IDs\n var active_type_ids = []\n var type_elements = this.mediaPanelToggleTargets.concat(this.blockToggleTargets);\n for (let type_element of type_elements) {\n if (type_element.matches(\".message-type-menu .active\")) {\n active_type_ids.push(type_element.dataset.messageTypeId);\n }\n }\n\n // Move active pills out of the 'hidden-pills' container and into the 'shown-pills' container\n // Using this method to enable the use of 'divide-x' class in between the shown pills\n for (let pill of this.typePillTargets) {\n if (active_type_ids.includes(pill.dataset.messageTypeId)) {\n this.shownPillsTarget.appendChild(pill);\n } else {\n this.hiddenPillsTarget.appendChild(pill);\n }\n }\n }\n\n activateDefaultBlock() {\n var first_active_block = this.element.querySelector(\".message-block-toggle.active\");\n var first_active_panel = this.element.querySelector(\".media-panel-toggle.active\");\n var default_block_toggle = this.element.querySelector(\".message-block-toggle[data-message-type-id='text'\");\n if (!first_active_block && !first_active_panel) {\n default_block_toggle.click();\n }\n }\n\n toggleMessageTemplateTitleBlock() {\n var messageTemplateTitleBlock = this.element.querySelector(\".message-template-title-field-block\");\n\n if (messageTemplateTitleBlock) {\n var is_program_item = messageTemplateTitleBlock.classList.contains(\"via-program-item\"); // it's a program_item (can be a message_template in a program_item or a message_template in a thread_template in a program_item)\n var is_thread_template = messageTemplateTitleBlock.classList.contains(\"via-thread-template\"); // Adding to a thread_template and we're not in a program_item\n\n if (is_program_item || is_thread_template) {\n // Set library and message_template_input variables\n var libraryPanel = this.element.querySelector(\".media-panel.library-panel\");\n var activeBlock = this.element.querySelector(\".message-block:not(.hidden):not(.new-message-submit-block)\");\n var message_template_title_input = messageTemplateTitleBlock.querySelector(\"input\");\n\n // If the library panel is hidden OR there is at least one other block active (like the text block or files block etc.)...\n if (libraryPanel.classList.contains(\"hidden\") || activeBlock) {\n // show the Message Template Title Field\n messageTemplateTitleBlock.classList.remove(\"hidden\");\n message_template_title_input.required = true\n if (message_template_title_input.value == \"\") {\n message_template_title_input.focus();\n }\n } else if (!libraryPanel.classList.contains(\"hidden\")) {\n // Library Panel is shown, so don't show the Message Template Title Field\n messageTemplateTitleBlock.classList.add(\"hidden\");\n message_template_title_input.removeAttribute('required');\n }\n }\n }\n }\n\n\n revealProductOfferForm(event) {\n var product_select_field = event.target.closest('.product-offer-select-field');\n var form_id = product_select_field.closest('form').id\n var form_type = product_select_field.dataset.formType;\n var product_id = product_select_field.value;\n var message_id = product_select_field.dataset.messageId;\n var message_thread_id = product_select_field.dataset.messageThreadId;\n var threaded_message = product_select_field.dataset.threadedMessage;\n var message_template_id = product_select_field.dataset.messageTemplateId;\n var thread_template_id = product_select_field.dataset.threadTemplateId;\n var program_item_id = product_select_field.dataset.programItemId;\n\n var reveal_form_url = '/reveal_product_offer_form/?product_id=' + product_id + '&form_id=' + form_id + '&form_type=' + form_type + '&message_id=' + message_id + '&message_thread_id=' + message_thread_id + '&threaded_message=' + threaded_message + '&message_template_id=' + message_template_id + '&thread_template_id=' + thread_template_id + '&program_item_id=' + program_item_id;\n\n Rails.ajax({\n type: \"get\",\n url: reveal_form_url,\n })\n }\n\n cancelProductOffer(event) {\n var productOfferBlock = event.target.closest(\".product-offer-block\");\n var productOfferForm = productOfferBlock.querySelector(\".product-offer-form\");\n var productOfferSelectField = productOfferBlock.querySelector('.product-offer-select-field')\n var productOfferAction = event.target.closest('.product-offer-actions')\n var productOfferToggle = document.querySelector(\".message-block-toggle.active[data-message-type-id='product-offer']\")\n productOfferSelectField.value = 'unselected'\n productOfferAction.classList.add('hidden')\n productOfferForm.innerHTML = ''\n productOfferBlock.classList.add('hidden')\n if (productOfferToggle)\n productOfferToggle.classList.remove(\"active\");\n }\n}\n","// This controller manages misc elements in the message creation UI\n// This controller is set on the form element.\n// This does not manage the kickoff panel elements, as those are managed in the dedicated controller, kickoff_controller.js.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"messageTypeField\",\n \"moreMenu\",\n \"toggleThumbnailUploader\", \"thumbnailUploader\",\n \"selectCameraLayout\",\n \"preview\", \n \"backgroundImage\",\n \"cameraStatusBtn\", \n \"pipBtn\", \n \"internalBtnTop\",\n \"internalPopoverMsgMakeInternal\",\n \"internalPopoverMsgMakeVisible\",\n \"internalSetting\",\n \"initiateDeviceSelectionBtn\",\n \"camMicSelectors\",\n \"camMicSelectorsContainer\",\n \"selectVideoSource\", \n \"selectAudioSource\",\n \"micButton\",\n \"cameraButton\", \n \"messageTitle\", \n \"messageTimestamp\",\n \"mobileAppCta\"]\n\n connect() {\n\n // Browser detection\n const userAgent = navigator.userAgent.toLowerCase();\n\n\n let isSafari = false;\n let isFirefox = false;\n let isChrome = false;\n let safari_version;\n let isIos = false;\n let isAndroid = false;\n let isWindowsPhone = false;\n\n // Detect Windows Phone\n // Windows Phone must come first because its UA also contains \"Android\"\n if (/windows phone/i.test(userAgent)) {\n isWindowsPhone = true;\n }\n\n // Detect Android device (phones, tablets)\n if (/android/i.test(userAgent)) {\n isAndroid = true;\n }\n\n // Detect iOS devices (iphone, ipad, ipod)\n if (/ipad|iphone|ipod/.test(userAgent) && !window.MSStream) {\n isIos = true;\n }\n\n // Detect Safari browser and Safari version\n if (userAgent.indexOf('safari') !== -1 && userAgent.indexOf('chrome') === -1) {\n isSafari = true;\n safari_version = userAgent.substring(\n userAgent.indexOf('version')+8,\n userAgent.indexOf('version')+12\n );\n }\n\n // Detect Firefox browser\n if(userAgent.indexOf('firefox') > -1){\n isFirefox = true;\n }\n\n // Detect Chrome browser\n if(userAgent.indexOf('chrome') > -1){\n isChrome = true;\n }\n\n // Check to see if we're currently on a mobile-sized screen (< 640px wide)\n function mobile_screen() {\n var mq = window.matchMedia( \"(max-width: 640px)\" );\n if (mq.matches) {\n return true;\n } else {\n return false\n }\n }\n\n // If we're on an iOS or Android device, show the mobile app CTA link\n if (isIos || isAndroid) {\n // get localstorage value for dismissed\n var mobile_app_cta_dismissed = localStorage.getItem('dismissed_message_mobile_app_cta');\n\n if (!mobile_app_cta_dismissed && this.hasMobileAppCtaTarget) {\n var mobile_app_cta = document.querySelector('.mobile-app-cta')\n var mobile_app_link = mobile_app_cta.querySelector(\"a.mobile-app-link\");\n if (isAndroid) {\n mobile_app_link.href = mobile_app_cta.dataset.androidAppStoreUrl;\n } else { // assume iOS\n mobile_app_link.href = mobile_app_cta.dataset.iosAppStoreUrl;\n }\n mobile_app_cta.classList.remove(\"hidden\");\n }\n }\n\n // If we're on a mobile screen...\n if (mobile_screen()) {\n // Force the ui to the uploader panel and hide the button to switch to recorder:\n\n // Apply mobile layout (linear) to the media panel toggles, since we'll be removing one of them:\n this.element.querySelector(\".media-panel-toggles\").classList.add(\"linear-layout\");\n this.element.querySelector(\".media-panel-toggles\").classList.remove(\"grid-layout\");\n\n // Click the upload media panel toggle\n this.element.querySelector(\".media-panel-toggle[data-message-type-id='upload']\").click();\n\n // Hide the record panel toggle since that option shouldn't be available on mobile\n this.element.querySelector(\".media-panel-toggle[data-message-type-id='record']\").classList.add(\"hidden\");\n\n } else {\n if (isSafari && (safari_version < 14.1)) {\n this.element.querySelector(\".safari-uploader-message\").classList.remove(\"hidden\");\n this.element.querySelector(\".switch-to-browser-recorder\").classList.add(\"hidden\");\n } else {\n // Hide the text for safari <14.1 versions\n var safari_uploader_message = this.element.querySelector(\".safari-uploader-message\");\n if (safari_uploader_message) {\n safari_uploader_message.classList.add(\"hidden\");\n }\n }\n }\n\n if (isFirefox && this.element.querySelector(\".plusCameraLabel\") !== null) {\n // Don't show \"+ camera\" in the context of \"screen + camera\" since FF doesn't support screen+camera\n this.element.querySelector(\".plusCameraLabel\").classList.add(\"hidden\");\n }\n\n if (isSafari && (safari_version > 14.0)) {\n // Swap the state of pip buttons on Safari, to force user to have to click the button to turn on pip (Safari cannot launch pip automatically)\n if (this.hasCameraStatusBtnTarget) {\n this.cameraStatusBtnTarget.querySelector(\".cameraShownLabel\").classList.add(\"hidden\");\n this.cameraStatusBtnTarget.querySelector(\".cameraHiddenLabel\").classList.remove(\"hidden\");\n }\n if (this.hasPipBtnTarget) {\n this.pipBtnTarget.querySelector(\".pipShownLabel\").classList.add(\"hidden\");\n this.pipBtnTarget.querySelector(\".pipHiddenLabel\").classList.remove(\"hidden\");\n }\n }\n\n if (!isChrome && this.hasBackgroundImageTarget) {\n // Unless we're in Chrome, remove the background image button from DOM \n this.backgroundImageTarget.remove();\n }\n\n }\n\n toggleThumbnailUploader(event) {\n\n if (this.thumbnailUploaderTarget.classList.contains(\"hidden\")) {\n this.thumbnailUploaderTarget.classList.remove(\"hidden\");\n } else {\n this.thumbnailUploaderTarget.classList.add(\"hidden\");\n }\n\n // Scroll down to the thumbnail uploader\n this.thumbnailUploaderTarget.scrollIntoView({behavior: \"smooth\", block: \"center\"});\n }\n\n toggleCameraLayout(event) {\n // Activate the layout icon in the settings panel\n var label_element = event.target.closest(\"label\");\n for (let layout of this.selectCameraLayoutTarget.querySelectorAll(\"label\")) {\n layout.classList.remove(\"active\");\n }\n label_element.classList.add(\"active\");\n\n // Activate the layout icon in the 'recording in progress' panel\n var selected_layout = label_element.dataset.layout;\n for (let layout_icon of label_element.querySelectorAll(\".selected-camera-layout\")) {\n layout_icon.classList.add(\"hidden\");\n }\n label_element.querySelector(\".selected-camera-layout[data-layout='\"+selected_layout+\"'\");\n }\n\n toggledCamera() {\n var initiateDeviceSelect = this.initiateDeviceSelectionBtnTarget;\n var selectCamera = this.selectVideoSourceTarget;\n var message_type = this.messageTypeFieldTarget.value;\n\n if ((message_type == \"screencamera\" || message_type == \"camera\") && initiateDeviceSelect.classList.contains(\"sm:hidden\")) {\n selectCamera.classList.remove(\"hidden\"); // Show the camera selection dropdown\n } else {\n selectCamera.classList.add(\"hidden\");\n }\n\n this.toggleSelectDevice();\n }\n\n toggledMic() {\n var initiateDeviceSelect = this.initiateDeviceSelectionBtnTarget;\n var selectMic = this.selectAudioSourceTarget;\n var mic_button = this.micButtonTarget;\n\n if (mic_button.classList.contains(\"active\") && initiateDeviceSelect.classList.contains(\"sm:hidden\")) {\n selectMic.classList.remove(\"hidden\"); // Show the mic selection dropdown\n } else {\n selectMic.classList.add(\"hidden\");\n }\n\n this.toggleSelectDevice();\n }\n\n toggleSelectDevice() {\n var selectDeviceBtn = document.querySelector('div[data-message--creation-target=\"selectAudioSource\"]').closest('.new-msg-buttons')\n\n if (this.cameraButtonTarget.classList.contains(\"active\") && this.micButtonTarget.classList.contains(\"active\")) {\n this.camMicSelectorsContainerTarget.classList.add(\"space-x-3\");\n } else {\n this.camMicSelectorsContainerTarget.classList.remove(\"space-x-3\");\n }\n\n if (!this.cameraButtonTarget.classList.contains(\"active\") && !this.micButtonTarget.classList.contains(\"active\")) {\n this.camMicSelectorsTarget.classList.add(\"hidden\");\n } else {\n this.camMicSelectorsTarget.classList.remove(\"hidden\");\n }\n }\n\n toggleInternal() {\n var internal_setting = this.internalSettingTargets;\n if (this.element.classList.contains(\"internal-message\")) {\n this.element.classList.remove(\"internal-message\");\n this.internalBtnTopTarget.classList.remove(\"active\");\n internal_setting[internal_setting.length - 1].value = false\n } else {\n this.element.classList.add(\"internal-message\");\n this.internalBtnTopTarget.classList.add(\"active\");\n internal_setting[internal_setting.length - 1].value = true\n }\n }\n\n editTitle() {\n this.messageTitleTarget.querySelector(\".message-author\").classList.add(\"hidden\");\n if (this.hasMessageTimestampTarget) {\n this.messageTimestampTarget.querySelector(\".message-author\").classList.remove(\"hidden\");\n }\n this.messageTitleTarget.querySelector(\".toggle-edit-title\").classList.remove(\"group-hover:inline-flex\");\n this.messageTitleTarget.querySelector(\".message-title-field\").classList.remove(\"hidden\");\n this.messageTitleTarget.querySelector(\".message-title-value\").classList.add(\"hidden\");\n this.messageTitleTarget.querySelector(\".message-title-field\").querySelector(\"input[type='text']\").focus();\n }\n\n finishEditingTitle() {\n this.messageTitleTarget.querySelector(\".toggle-edit-title\").classList.add(\"group-hover:inline-flex\");\n this.messageTitleTarget.querySelector(\".message-title-field\").classList.add(\"hidden\");\n }\n\n saveTitle() {\n var title_value = this.messageTitleTarget.querySelector(\".message-title-field\").querySelector(\"input[type='text']\").value;\n if(title_value.trim().length > 0) {\n this.messageTitleTarget.querySelector(\".message-author\").classList.add('hidden');\n this.messageTitleTarget.querySelector(\".message-title-value\").innerHTML = title_value;\n if (this.hasMessageTimestampTarget) {\n this.messageTimestampTarget.querySelector(\".message-author\").classList.remove(\"hidden\");\n }\n } else {\n this.messageTitleTarget.querySelector(\".message-author\").classList.remove('hidden');\n this.messageTitleTarget.querySelector(\".message-title-value\").innerHTML = '';\n if (this.hasMessageTimestampTarget) {\n this.messageTimestampTarget.querySelector(\".message-author\").classList.add(\"hidden\");\n }\n }\n this.messageTitleTarget.querySelector(\".message-title-value\").classList.remove(\"hidden\");\n }\n\n clearTitle() {\n var titleInput = this.messageTitleTarget.querySelector(\".message-title-field\").querySelector(\"input#message_title\") ||\n this.messageTitleTarget.querySelector(\".message-title-field\").querySelector(\"input#message_template_message_title\")\n titleInput.value = \"\";\n this.messageTitleTarget.querySelector(\".message-author\").classList.remove(\"hidden\");\n if(this.hasMessageTimestampTarget)\n this.messageTimestampTarget.querySelector(\".message-author\").classList.add(\"hidden\");\n this.messageTitleTarget.querySelector(\".message-title-value\").innerHTML = \"\";\n this.messageTitleTarget.querySelector(\".message-title-value\").classList.add(\"hidden\");\n }\n\n dismissMobileAppCTA() {\n this.mobileAppCtaTarget.classList.add(\"hidden\");\n localStorage.setItem('dismissed_message_mobile_app_cta', true);\n }\n\n}","import { Controller } from \"stimulus\";\n\nconst LEAVING_PAGE_MESSAGE = \"Your message hasn't been saved yet! \\n\\nTo save your message, cancel this dialog then click the create button to post your message to the conversation. If you navigate away from this page without posting or saving the message, your recording will be discarded.\"\n\nexport default class extends Controller {\n\n formIsChanged(event) {\n this.setChanged(\"true\")\n var toggleEditTitle = document.querySelector(\"#conversation-title #toggle-edit-title\");\n var uneditableTitle = document.querySelector(\"#conversation-title #uneditable-title\");\n var conversationShare = document.querySelector(\"#conversation-share button\");\n var conversationPeople = document.querySelector(\"#conversation-people .open-share-modal\");\n var conversationSettingsDropdown = document.querySelector(\".conversation-settings\");\n var sidebar = document.querySelector(\".sidebar\");\n var topbar_links = document.querySelectorAll(\"#topbar a\");\n\n if(toggleEditTitle) {\n toggleEditTitle.classList.add(\"hidden\");\n uneditableTitle.classList.remove(\"hidden\");\n } \n if(conversationShare) {\n conversationShare.setAttribute(\"disabled\", true);\n conversationShare.classList.add(\"opacity-40\");\n } \n if (conversationPeople) {\n conversationPeople.dataset.action = \"\";\n }\n if (conversationSettingsDropdown) {\n // remove 'dropdown' from data-controller attribute\n conversationSettingsDropdown.setAttribute('data-controller', '');\n conversationSettingsDropdown.classList.add(\"opacity-40\");\n }\n\n var topbar = document.querySelector(\"#topbar\")\n if(topbar) topbar.classList.add(\"opacity-50\");\n if (topbar_links) {\n for (let topbar_link of topbar_links) {\n topbar_link.setAttribute(\"onclick\", \"event.preventDefault();\");\n }\n }\n\n if (sidebar) {\n // fade it out\n sidebar.querySelector(\".sidebar-inner-container\").classList.add(\"opacity-40\");\n \n // disable all sidebar links\n var sidebar_links = sidebar.querySelectorAll(\"a\");\n for (let sidebar_link of sidebar_links) {\n sidebar_link.setAttribute(\"onclick\", \"event.preventDefault();\");\n }\n\n // disable the 'new conversation' button in sidebar by removing the post method\n var sidebar_new_conv_link = sidebar.querySelector(\"a.sidebar-new-conversation-link\");\n\n if (sidebar_new_conv_link) {\n sidebar_new_conv_link.setAttribute(\"data-method\", \"\");\n }\n\n // disable the user-menu dropdown by removing 'dropdown' from data-controller \n var user_menu = sidebar.querySelector(\".dropdown.user-menu\");\n\n if (user_menu) {\n user_menu.setAttribute(\"data-controller\", \"\");\n }\n\n // disable the user-events-menu dropdown by removing 'dropdown' from data-controller \n var user_events_menu = sidebar.querySelector(\".user-events-menu.context-sidebar .dropdown\");\n\n if (user_events_menu) {\n user_events_menu.setAttribute(\"data-controller\", \"\");\n }\n }\n }\n\n leavingPage(event) {\n if (this.isFormChanged()) {\n if (event.type == \"turbolinks:before-visit\") {\n if (!window.confirm(LEAVING_PAGE_MESSAGE)) {\n event.preventDefault()\n }\n } else {\n event.returnValue = LEAVING_PAGE_MESSAGE;\n return event.returnValue;\n }\n }\n }\n\n allowFormSubmission(event) {\n this.setChanged(\"false\")\n var toggleEditTitle = document.querySelector(\"#conversation-title #toggle-edit-title\");\n var uneditableTitle = document.querySelector(\"#conversation-title #uneditable-title\");\n var conversationShare = document.querySelector(\"#conversation-share button\");\n var conversationPeople = document.querySelector(\"#conversation-people .open-share-modal\");\n var conversationSettingsDropdown = document.querySelector(\".conversation-settings\");\n var sidebar = document.querySelector(\".sidebar\");\n var topbar_links = document.querySelectorAll(\"#topbar a\");\n\n if(toggleEditTitle) {\n toggleEditTitle.classList.remove(\"hidden\");\n uneditableTitle.classList.add(\"hidden\");\n } \n if(conversationShare) {\n conversationShare.removeAttribute(\"disabled\");\n conversationShare.classList.remove(\"opacity-40\");\n } \n if (conversationPeople) {\n conversationPeople.dataset.action = \"click->conversation--share-modal#open\";\n }\n if (conversationSettingsDropdown) {\n // add 'dropdown' back to data-controller attribute\n conversationSettingsDropdown.setAttribute('data-controller', 'dropdown');\n conversationSettingsDropdown.classList.remove(\"opacity-40\");\n }\n\n document.querySelector(\"#topbar\").classList.remove(\"opacity-50\");\n if (topbar_links) {\n for (let topbar_link of topbar_links) {\n topbar_link.removeAttribute(\"onclick\");\n }\n }\n\n if (sidebar) {\n // fade it back in\n sidebar.querySelector(\".sidebar-inner-container\").classList.remove(\"opacity-40\");\n \n // enable all sidebar links\n var sidebar_links = sidebar.querySelectorAll(\"a\");\n for (let sidebar_link of sidebar_links) {\n sidebar_link.removeAttribute(\"onclick\"); \n }\n\n // disable the 'new conversation' button in sidebar by removing the post method\n var sidebar_new_conv_link = sidebar.querySelector(\"a.sidebar-new-conversation-link\");\n if (sidebar_new_conv_link) {\n sidebar_new_conv_link.setAttribute(\"data-method\", \"post\");\n }\n \n // enable the user-menu dropdown by add 'dropdown' to data-controller \n var user_menu = sidebar.querySelector(\".dropdown.user-menu\");\n if (user_menu) {\n user_menu.setAttribute(\"data-controller\", \"dropdown\");\n }\n\n // enable the user-events-menu dropdown by add 'dropdown' to data-controller \n var user_events_menu = sidebar.querySelector(\".user-events-menu.context-sidebar .dropdown\");\n if (user_events_menu) {\n user_events_menu.setAttribute(\"data-controller\", \"dropdown\");\n }\n }\n }\n\n setChanged(changed) {\n this.data.set(\"changed\", changed)\n }\n\n isFormChanged() {\n return this.data.get(\"changed\") == \"true\";\n }\n}","// Used for each individual resizeable clip on the edit message timeline\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [];\n\n connect() {\n makeResizableClip(this.element);\n }\n\n}\n\nfunction makeResizableClip(div) {\n let finalCheck = div.parentElement.clientWidth;\n let prevCheck = 0;\n var timelineElement;\n let element = div;\n const resizers = div.querySelectorAll('.clip-edge');\n const timeWidth = clipTimelineWidth * ((0.1 * 100)/recordedDuration)/100;\n const oneSecond = clipTimelineWidth * ((0.3 * 100)/recordedDuration)/100;\n const minimum_size = timeWidth;\n let original_width = 0;\n let original_left = 0;\n let original_height = 0;\n let original_x = 0;\n let original_y = 0;\n let original_mouse_x = 0;\n let original_mouse_y = 0;\n for (let i = 0;i < resizers.length; i++) {\n const currentResizer = resizers[i];\n currentResizer.addEventListener('mousedown', function(e) {\n if(prevCheck > 0) {\n prevCheck = 0;\n }\n finalCheck = div.parentElement.clientWidth;\n timelineElement = div.closest('.edit-clips-timeline').getBoundingClientRect();\n e.preventDefault()\n const currentParent = e.srcElement.offsetParent;\n let parent = e.target.closest('.edit-clips-timeline');\n if(parent) {\n let clips = parent.getElementsByClassName('timeline-clip');\n for(let i = 0; i currentParent.offsetLeft+currentParent.clientWidth && clips[i].offsetLeft < finalCheck) {\n finalCheck = clips[i].offsetLeft;\n }\n if(clips[i].offsetLeft+clips[i].clientWidth < currentParent.offsetLeft && clips[i].offsetLeft+clips[i].clientWidth > prevCheck) {\n prevCheck = clips[i].offsetLeft+clips[i].clientWidth;\n }\n }\n }\n }\n if(prevCheck != 0) {\n prevCheck = prevCheck+oneSecond;\n }\n if(finalCheck == div.parentElement.clientWidth) {\n finalCheck = finalCheck+2;\n }\n else {\n finalCheck = finalCheck-oneSecond;\n }\n original_width = parseFloat(getComputedStyle(element, null).getPropertyValue('width').replace('px', ''));\n original_left = parseFloat(getComputedStyle(element, null).getPropertyValue('left').replace('px', ''));\n original_height = parseFloat(getComputedStyle(element, null).getPropertyValue('height').replace('px', ''));\n original_x = element.getBoundingClientRect().left;\n original_y = element.getBoundingClientRect().top;\n original_mouse_x = e.pageX;\n original_mouse_y = e.pageY;\n window.addEventListener('mousemove', resize)\n window.addEventListener('mouseup', stopResize)\n })\n\n function resize(e) {\n if (currentResizer.classList.contains('clip-edge-right')) {\n let width = original_width + (e.pageX - original_mouse_x);\n const height = original_height + (e.pageY - original_mouse_y);\n if (width > minimum_size && width+element.offsetLeft < finalCheck) {\n element.style.width = width + 'px'\n }\n }\n else if (currentResizer.classList.contains('clip-edge-left')) {\n var leftOffset = e.clientX - timelineElement.left; //x position within the element.\n var width;\n if(leftOffset < original_left) {\n width = original_width + (original_left-leftOffset);\n } else {\n let tempOff = leftOffset-original_left;\n if(tempOff > original_width) {\n width = tempOff-original_width;\n }\n else {\n width = original_width-tempOff;\n }\n }\n if (width > minimum_size && leftOffset > prevCheck && leftOffset < original_width+original_left) {\n element.style.left = leftOffset + 'px'\n element.style.width = width + 'px'\n }\n }\n\n // Update cut field value when slider is dragged\n if (element !== undefined && element !== null && element.parentNode !== null && element.parentNode.parentNode.nextElementSibling !== null) {\n updateCutFields(element);\n }\n }\n\n function stopResize() {\n window.removeEventListener('mousemove', resize)\n\n\n // setting section hide/show after slider positions allocated\n if (element !== undefined && element !== null && element.parentNode !== null && element.parentNode.parentNode.nextElementSibling !== null) {\n setSectionVisibility(element);\n }\n }\n }\n}\n\nfunction updateCutFields(element) {\n var calVal1 = parseInt(element.style.width.split('px')[0])\n var calVal2 = parseInt(element.style.left.split('px')[0])\n var videoDuration = timeToSecond(element.parentNode.parentNode.nextElementSibling.querySelector(\"form #media_duration\").value)\n var totalTimelineWidth = element.closest(\".edit-clips-timeline\").clientWidth;\n\n\n let startCutValueWithoutHour, endCutValueWithoutHour;\n let startCutValue = secondsToTime((((100 * calVal2)/totalTimelineWidth) * videoDuration)/100)\n let endCutValue = secondsToTime(((((100 * calVal1)/totalTimelineWidth) * videoDuration)/100)\n + ((((100 * calVal2)/totalTimelineWidth) * videoDuration)/100))\n\n if(videoDuration < 3600) {\n startCutValueWithoutHour = startCutValue.split(/:(.*)/s)[1];\n endCutValueWithoutHour = endCutValue.split(/:(.*)/s)[1];\n } else {\n startCutValueWithoutHour = startCutValue;\n endCutValueWithoutHour = endCutValue;\n }\n\n element.querySelector('.clip-edge-left').title = startCutValueWithoutHour;\n element.querySelector('.clip-edge-right').title = endCutValueWithoutHour;\n\n var clipPart = element.parentNode.parentNode.nextElementSibling.querySelector(\"form .media-cut-parts\")\n let clipInput = clipPart.querySelector('#' + element.id + ' input.clip-parts-input');\n\n if(clipInput !== null)\n clipInput.value= `${startCutValueWithoutHour} - ${endCutValueWithoutHour}`;\n}\n\nfunction setSectionVisibility(element) {\n var arr = []\n let tempArr = [], spaceExist = false;\n element.parentNode.parentNode.nextElementSibling.querySelectorAll(\"form input.clip-parts-input\").forEach(input => {\n let a = input.value.split(' - ')[0].split('.')[0];\n let b = input.value.split(' - ')[1].split('.')[0];\n a = a.split(':').length === 2 ? ('00:' + a) : a\n b = b.split(':').length === 2 ? ('00:' + b) : b\n tempArr.push(a, b);\n tempArr.sort();\n });\n\n if(document.querySelector(`#message-${element.closest('.edit-clips-timeline').dataset.objectId}`)){\n var message_container = document.querySelector(`#message-${element.closest('.edit-clips-timeline').dataset.objectId}`)\n }\n else{\n var message_container = document.querySelector(`#message_template-${element.closest('.edit-clips-timeline').dataset.objectId}`)\n }\n\n message_container.querySelector(\"div[data-message--edit-target='clipListStorage']\").dataset.storage = tempArr;\n tempArr.every(time => arr.push(timeToSecond(time)));\n\n let sectionBtn = element.parentNode.parentNode.nextElementSibling.querySelector(\".add-clip-section-btn\")\n let mediaDurationInSecond = timeToSecond(element.parentNode.parentNode.nextElementSibling.querySelector(\"form #media_duration\").value);\n\n /*\n - If no existing clip covers first 5 secs of the timeline, then insert this new clip at 0:00-0:05.\n - If a clip already covers 0:00, and no clip covers the final 5 secs of the timeline, then insert this new clip at the very end of the timeline, starting from 5 secs before the end.\n - If there are clips in the middle of the timeline, start the new clip in the first 5-second section that's available.\n\n TODO: add comments\n */\n if (arr.includes(0) === false && arr[0] >= 7)\n spaceExist = true\n\n if (arr.includes(mediaDurationInSecond) === false && mediaDurationInSecond - arr[arr.length - 1] > 7)\n spaceExist = true\n\n for (let i = 1; i < arr.length - 1; i += 2) {\n if ((arr[i + 1] - arr[i]) > 7) {\n spaceExist = true;\n break;\n }\n }\n\n if (spaceExist === false)\n sectionBtn.classList.add(\"hidden\");\n else\n sectionBtn.classList.remove(\"hidden\");\n}\n\nfunction timeToSecond(hms){\n var a = hms.split(':'); // split it at the colons\n return (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);\n}\n\nfunction secondsToTime(seconds){\n return new Date(seconds * 1000).toISOString().substr(11, 11);\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"draftInput\",\n \"editRecordingInput\",\n \"messageForm\",\n \"confirmDraftOrInternal\"]\n\n static values = {\n formType: String\n }\n\n saveDraft(event) {\n // If user clicked the \"edit recording\" button, this should save as a draft AND enter editing mode\n var editBtn = event.target.closest(\".save-and-enter-edit-mode-btn\");\n let targetBtn;\n\n if(editBtn)\n targetBtn = editBtn;\n else\n targetBtn = event.target.closest(\".save-draft-btn\");\n\n if(targetBtn.dataset.preventFormSubmit !== undefined) // avoid multiple form submission\n return\n\n // Set to true so that when the form is submitted, the message will be created as a draft\n if(this.hasDraftInputTarget)\n this.draftInputTarget.value = true\n\n if (editBtn) {\n this.editRecordingInputTarget.value = true\n }\n\n this.submitForm();\n }\n\n setConfirmAndSubmit(){\n this.confirmDraftOrInternalTarget.value = true\n this.submitForm();\n }\n\n saveEmbedAsDraft(event) {\n if(event.target.dataset.preventFormSubmit !== undefined) // avoid multiple form submission\n return\n\n // Set to true so that when the form is submitted, the message will be created as a draft\n if (this.hasDraftInputTarget) this.draftInputTarget.value = true\n\n this.submitForm();\n }\n\n submitForm(event) {\n var form = this.messageFormTarget;\n if (form) {\n form.removeAttribute('data-message--navigation-changed')\n form.setAttribute('data-message--navigation-changed', 'false')\n Rails.fire(form, 'submit')\n }\n\n // Hide the modal when the form is being submitted\n if(document.querySelector(\"#create-message-modal\")){\n document.querySelector(\"#create-message-modal\").classList.add(\"hidden\")\n }\n }\n\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"scheduleNewMessageIconBtn\",\n \"scheduleNewMessageBlock\",\n \"editScheduleBlock\", \n \"updateScheduleButton\",\n \"scheduledBooleanInput\",\n \"draftBooleanInput\"]\n\n toggleScheduleNewMessageBlock() {\n if (this.scheduleNewMessageBlockTarget.classList.contains(\"hidden\")) {\n // toggle open the scheduling block\n this.scheduleNewMessageBlockTarget.classList.remove(\"hidden\");\n this.scheduleNewMessageBlockTarget.scrollIntoView({behavior: \"smooth\", block: \"center\"});\n this.scheduleNewMessageBlockTarget.querySelector(\"input#message_scheduled_published_at\").focus();\n this.scheduleNewMessageIconBtnTarget.classList.add(\"active\");\n\n // toggle the hidden scheduled and draft boolean fields to true\n this.toggleDraftAndScheduleBooleans(true);\n } else {\n // toggle closed the scheduling block\n this.scheduleNewMessageBlockTarget.classList.add(\"hidden\");\n this.scheduleNewMessageIconBtnTarget.classList.remove(\"active\");\n\n // toggle the hidden scheduled and draft boolean fields to false\n this.toggleDraftAndScheduleBooleans(false);\n }\n }\n\n cancelUpdateScheduleMessage(event) {\n var draft_message = event.target.closest(\".draft-message\");\n var edit_message_form = draft_message.querySelector(\"form#edit-message\");\n edit_message_form.remove();\n\n // If message was scheduled already, unhide the scheduled info block\n var scheduled_info_block = draft_message.querySelector(\".scheduled-info-block\");\n if (scheduled_info_block) {\n scheduled_info_block.classList.remove(\"hidden\");\n }\n }\n\n revealScheduleButton(event) {\n var draft_message = event.target.closest(\".draft-message\");\n if (draft_message) {\n this.updateScheduleButtonTarget.classList.remove(\"hidden\");\n }\n }\n\n toggleDraftAndScheduleBooleans(value) {\n var draft_boolean = this.draftBooleanInputTarget;\n var scheduled_boolean = this.scheduledBooleanInputTarget;\n if (value == true) {\n draft_boolean.value = true;\n scheduled_boolean.value = true;\n } else if (value == false) {\n draft_boolean.value = false;\n scheduled_boolean.value = false;\n }\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = []\n\n static values = {\n draft: Boolean,\n internal: Boolean,\n messageThreadId: Number\n }\n\n updateState() {\n var message_thread_container = document.querySelector(\"#message-thread-\" + this.messageThreadIdValue);\n if (this.draftValue == true) {\n message_thread_container.classList.add(\"draft-thread\");\n }\n if (this.internalValue == true) {\n message_thread_container.classList.add(\"internal-thread\");\n }\n }\n\n}","import { Controller } from \"stimulus\"\nimport { getCookieValue } from \"../../helpers\";\n\nexport default class extends Controller {\n\n static targets = ['messageThreadContainer',\n 'threadedMessages',\n 'replyInThreadBtn',\n 'ThreadLoadMoreLink',\n 'newThreadLink',\n 'newMessageLink']\n\n static values = { \n threadTemplate: Boolean \n }\n\n connect(){\n }\n\n newReplyInThread(event){\n var threadBottomOrTop = event.target.closest('.thread-bottom') || event.target.closest('.thread-top-reply-buttons')\n var replyButtonsTopOrBottom = threadBottomOrTop.querySelector('.reply-in-thread-button-top') || threadBottomOrTop.querySelector('.reply-in-thread-button-bottom')\n var threadedReplyBtn = replyButtonsTopOrBottom.querySelector('.reply-in-thread-button')\n var threadId = threadedReplyBtn.dataset.messageThreadId\n var threadedForm = document.querySelector(`#create-message-${threadId}`)\n\n if (getCookieValue('X-App-Identifier')) {\n return window.flutter_inappwebview.callHandler('messageHandler', JSON.stringify({'message_thread_id': threadId}))\n } else {\n if (replyButtonsTopOrBottom) replyButtonsTopOrBottom.classList.add('hidden')\n }\n\n if (threadedForm) {\n threadedForm.classList.remove(\"hidden\")\n } else{\n var params = new URLSearchParams({\n viewer: viewer,\n hide_message_creation_modal: threadedReplyBtn.dataset.hideModal\n });\n fetch(\"/message_threads/\" +`${threadId}/new_thread/?${params}`, {\n method: \"GET\",\n headers: {\n 'Content-Type': 'application/json'\n }\n }).then((result) => {\n result.text().then( (val) => eval(val) );\n })\n }\n }\n\n\n closeMessageThreadsList(event){\n var message_thread_container = this.messageThreadContainerTarget;\n var replyInThreadBtnTop = this.messageThreadContainerTarget.querySelector('.reply-in-thread-button-top')\n // update the message-thread-container classes so that the visible thread container styles are hidden\n message_thread_container.classList.remove('thread-open');\n message_thread_container.classList.add('thread-closed');\n\n // If the top message has no media, we need to add back the no-media class\n if (this.element.dataset.noMedia == \"true\") {\n message_thread_container.classList.add('no-media');\n }\n\n // Remove the message creation form inside the thread from the DOM (so that new message forms outside this thread will continue to work)\n var create_message_in_thread_form = message_thread_container.querySelector(\".create-message-in-thread\") || message_thread_container.querySelector(\".threaded-form form\");\n if (create_message_in_thread_form) {\n create_message_in_thread_form.remove();\n }\n\n // Unhide the load more messages or new thread link\n if (this.hasThreadLoadMoreLinkTarget) {\n this.ThreadLoadMoreLinkTarget.classList.remove('hidden');\n } else if (this.hasNewThreadLinkTarget) {\n this.newThreadLinkTarget.classList.remove('hidden');\n }\n if (this.hasNewMessageLinkTarget)\n this.newMessageLinkTarget.classList.remove('hidden');\n\n if (replyInThreadBtnTop) {\n replyInThreadBtnTop.classList.add('hidden')\n }\n\n // Show the main-level reply button(s)\n var main_level_reply_buttons = document.querySelectorAll(\".new-main-level-message-btn\");\n if (main_level_reply_buttons) {\n for (let reply_button of main_level_reply_buttons) {\n reply_button.classList.remove(\"hidden\");\n }\n }\n\n // If viewing a thread template (in a program_item), unhide the top message, since it was hidden when the thread was opened\n var top_message_container = message_thread_container.querySelector(\".thread-top-message-container\");\n top_message_container.classList.remove(\"hidden\");\n\n // Scroll back to the top of this thread\n message_thread_container.scrollIntoView({behavior: \"smooth\", block: \"center\"})\n }\n\n newThreadBtnInThread(event){\n var replyInThreadBtnTopOrBottom = event.target.closest('.reply-in-thread-button-top') || event.target.closest('.reply-in-thread-button-bottom')\n\n if (replyInThreadBtnTopOrBottom) replyInThreadBtnTopOrBottom.classList.add(\"hidden\");\n }\n}\n","import { Controller } from 'stimulus'\nimport { getCookieValue } from \"../../helpers\";\n\nexport default class extends Controller {\n\n static targets = ['messageForm', 'messageFormToggle', 'intakePageFormContainer', 'messageTemplateNameField']\n\n static values = { \n hideForm: Boolean\n }\n\n connect() {\n if (this.hideFormValue == true) {\n this.intakePageFormContainerTarget.classList.add(\"hidden\");\n }\n }\n\n open_top_level_message_form() {\n // This is used for opening message form to create a top-level message.\n // Opening form to create a threaded message is located in message/threads_controller.js#newReplyInThread\n\n if (this.hasIntakePageFormContainerTarget) { // This is an intake page\n var message_form = this.intakePageFormContainerTarget;\n } else { // this is a conversation page\n var message_form = this.messageFormTarget.closest('#create-message');\n }\n \n var message_form_toggles = this.messageFormToggleTargets;\n\n if(!(getCookieValue('X-App-Identifier'))) {\n message_form.classList.remove(\"hidden\");\n message_form.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n for (const message_form_toggle of message_form_toggles) {\n message_form_toggle.classList.add(\"hidden\");\n }\n }\n\n // If we're creating a message_template... \n if (this.hasMessageTemplateNameFieldTarget) {\n // focus the message template title field\n this.messageTemplateNameFieldTarget.focus();\n\n // Hide the .empty-thread-template if present\n var empty_thread_template = document.querySelector(\".empty-thread-template\");\n if (empty_thread_template) {\n empty_thread_template.classList.add(\"hidden\");\n }\n }\n }\n\n close_message_form(event) {\n // This is used for closing the message form\n // This is used on both top-level message forms and threaded message forms\n\n var message_form = event.target.closest(\".create-message-form\");\n var message_form_toggles = this.messageFormToggleTargets;\n\n message_form.classList.add(\"hidden\");\n\n // Show all the \"reply\" buttons\n for (const message_form_toggle of message_form_toggles) {\n message_form_toggle.classList.remove(\"hidden\");\n }\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"replyButton\",\n \"startCreation\",\n \"postMessage\"];\n\n static values = {\n newUser: Boolean,\n startCreationOnConnect: Boolean\n }\n\n connect() {\n // This controller is set in 2 places on the page: The conversation show view body tag, and the message creation form tag.\n // This is what enables us to control tours on both top-level messages and threaded messages, since threaded message creation forms are loaded into the page when user initiates them.\n\n\n // Check or set the user's show_tour localstorage variable and if there shouldn't be a tour for this user, hide all tour elements\n if (localStorage.getItem(\"show_tour\") === null) {\n if (this.newUserValue === true) {\n localStorage.setItem(\"show_tour\", \"true\");\n } else {\n localStorage.setItem(\"show_tour\", \"false\");\n this.hideTourElements();\n }\n } else {\n localStorage.getItem(\"show_tour\")\n if (localStorage.getItem(\"show_tour\") === \"false\") {\n this.hideTourElements();\n }\n }\n\n // startCreationOnConnectValue is true in these situations:\n // - This is the first message in the conversation, and this message creator is shown on page load (conversation show view's body tag connected this stimulus controller)\n // - This is a threaded message and this message creator was just loaded into the DOM (message's form tag connected this stimulus controller)\n if (this.startCreationOnConnectValue === true) {\n this.animateInStartCreation();\n }\n\n // If the reply button is shown on the page, animate it into view\n if (this.hasReplyButtonTarget) {\n this.animateInReplyButton();\n }\n\n }\n\n close(event) {\n var tour_element = event.target.closest(\".tour-element\");\n if (tour_element) {\n tour_element.remove();\n }\n localStorage.setItem(\"show_tour\", \"false\");\n }\n\n animateInStartCreation(event) {\n if (this.hasStartCreationTarget) {\n this.startCreationTarget.classList.add(\"translate-y-8\", \"opacity-100\");\n for (let reply_button of this.replyButtonTargets) {\n reply_button.remove();\n }\n }\n }\n\n animateInReplyButton() {\n if (this.hasReplyButtonTarget) {\n for (let reply_button of this.replyButtonTargets) {\n reply_button.classList.add(\"translate-x-8\", \"opacity-100\");\n }\n }\n }\n\n hideTourElements() {\n var tour_elements = this.element.querySelectorAll(\".tour-element\");\n for (let tour_element of tour_elements) {\n tour_element.remove();\n }\n }\n\n}","// Used when viewing a message or message template that has already been posted.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"transcript\", \"toggleTranscript\", \"oembedContainer\", \"messageThreadContainer\"];\n\n connect() {\n for (let oembed_container of this.oembedContainerTargets) {\n var message_template_id = oembed_container.dataset.messageTemplateId;\n if (message_template_id) {\n // we're viewing a message_template\n var account_id = oembed_container.dataset.accountId;\n var fetch_url = `/message_templates/${message_template_id}/get_iframe?account_id=${account_id}`;\n } else {\n // we're viewing a message\n var fetch_url = `/messages/${oembed_container.dataset.messageId}/get_iframe`;\n }\n\n fetch(fetch_url).then(response => response.json())\n .then(data => {\n if (data.status === 'success') {\n this.oembedContainerTarget.innerHTML = data.data\n }\n else if (data.status === 'error') {\n console.log(data.data)\n this.oembedContainerTarget.innerHTML = '
Embedded media failed to load
'\n }\n })\n }\n }\n\n toggleTranscript(event) {\n if (event.target.closest(\".message\")) {\n var message = event.target.closest(\".message\");\n } else if (event.target.closest(\".message-template\")) {\n var message = event.target.closest(\".message-template\");\n } else if (event.target.closest(\".message-template-container\")) {\n var message = event.target.closest(\".message-template-container\");\n }\n\n var transcript_block = message.querySelector(\".transcript-block\");\n if (transcript_block.classList.contains(\"hidden\")) {\n transcript_block.classList.remove(\"hidden\");\n transcript_block.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n if (message.classList.contains(\"top-message\") || message.classList.contains(\"top-message-template\")) {\n var message_thread_container = message.closest(\".message-thread-container\");\n message_thread_container.classList.add(\"showing-transcript\");\n } else {\n message.classList.add(\"showing-transcript\");\n }\n } else {\n transcript_block.classList.add(\"hidden\");\n if (message) {\n message.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n if (message.classList.contains(\"top-message\")) {\n this.messageThreadContainerTarget.classList.remove(\"showing-transcript\");\n } else {\n message.classList.remove(\"showing-transcript\");\n }\n }\n }\n\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['messageTemplatesFormContainer', 'overwriteMessageTemplatesField']\n\n open_message_template_form(event) {\n this.messageTemplatesFormContainerTarget.classList.remove(\"hidden\");\n }\n\n submit_thread_template_form(event){\n this.overwriteMessageTemplatesFieldTarget.value = event.target.dataset.overwriteMessageTemplates\n Rails.fire(this.messageTemplatesFormContainerTarget.querySelector(\"form\"), 'submit')\n }\n}\n"," import { Controller } from \"stimulus\"\nimport mixpanel from 'mixpanel-browser'\n\nexport default class extends Controller {\n\n static targets = []\n\n static values = {\n page: String,\n userId: Number\n }\n\n connect() {\n // To see the mixpanel event in JS console, uncommon this line and comment out the one below it.\n mixpanel.init('76d721eb45e7fcac6d16d683cfbb8314', {debug: true}); \n // mixpanel.init('76d721eb45e7fcac6d16d683cfbb8314'); \n\n // Identify this user if they're logged in\n if (this.userIdValue) {\n mixpanel.identify(this.userIdValue);\n }\n\n // Track user viewing any of our account signup views as the first step of our funnel.\n // All are tracked in the 'View Account Signup Page' event, with property \"page_name\" to distinguish which path they took.\n var account_creation_pages = [\"Public Account Signup\", \"Additional Account Signup\", \"Respondent Account Signup\"];\n if (account_creation_pages.includes(this.pageValue)) {\n mixpanel.track('Viewed Account Signup Page', {\"page_name\": this.pageValue});\n }\n \n }\n\n copy_conversation_email(event) {\n var copy_button = document.querySelector(\".copy-conversation-email-button\");\n var user_id = copy_button.dataset.mixpanelUserId;\n mixpanel.track('Share Conversation via Email', {\"$user_id\": user_id, \"copied_to_clipboard\": true});\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"continueBtn\", \"termsCheckbox\"];\n\n connect() {\n }\n\n toggleTerms() {\n if (this.termsCheckboxTarget.checked) {\n this.continueBtnTarget.classList.remove(\"btn-white\", \"text-gray-400\");\n this.continueBtnTarget.classList.add(\"btn-primary\");\n this.continueBtnTarget.removeAttribute(\"disabled\");\n } else {\n this.continueBtnTarget.classList.add(\"btn-white\", \"text-gray-400\");\n this.continueBtnTarget.classList.remove(\"btn-primary\");\n this.continueBtnTarget.setAttribute(\"disabled\", true);\n }\n }\n\n}","import { Controller } from 'stimulus'\nimport { getCookieValue } from \"../helpers\";\n\nexport default class extends Controller {\n static targets = ['replyBtn', 'messageForm']\n static values = {\n hasNoMessages: Boolean\n }\n\n connect() {\n \n }\n\n retrieveMessageCreatorDetailsForMobile(event) {\n if (getCookieValue('X-App-Identifier')) {\n const args = ['Reply Button clicked'];\n if (event.target.closest('button') === null) return window.flutter_inappwebview.callHandler('messageHandler', ...args);\n if (event.target.closest('button').dataset === null) return window.flutter_inappwebview.callHandler('messageHandler', ...args);\n\n if (event.target.closest('button').dataset.messageThreadId) {\n window.flutter_inappwebview.callHandler('messageHandler', JSON.stringify({'message_thread_id': event.target.closest('button').dataset.messageThreadId}))\n } else {\n window.flutter_inappwebview.callHandler('messageHandler', ...args);\n }\n }\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"autofocusField\", \"submitLink\"]\n\n open(event) {\n var modal_id_to_open = event.target.closest(\".modal-trigger\").dataset.modalIdToOpen;\n var modal = document.querySelector(\"#\"+modal_id_to_open);\n modal.classList.remove(\"hidden\");\n modal.classList.add(\"shown\");\n if (this.hasAutofocusFieldTarget) {\n this.autofocusFieldTarget.focus();\n }\n }\n\n close(event) {\n var modal = event.target.closest(\".modal\");\n modal.classList.add(\"hidden\");\n modal.classList.remove(\"shown\", \"modal-transition\", \"modal-transition-in\");\n }\n\n closeAndRemove(event) {\n var modal = event.target.closest(\".modal\");\n modal.remove();\n }\n\n clickOutsideHide(event) {\n var modal_container = event.target.closest(\".modal\");\n if (modal_container) {\n var modal_box = modal_container.querySelector(\".modal-box\");\n \n if (modal_box.contains(event.target) === false) {\n modal_container.classList.add(\"hidden\");\n modal_container.classList.remove(\"shown\", \"modal-transition-in\", \"modal-transition\");\n }\n\n if(event.target.id === \"troubleshoot-modal\") {\n this.reload_window()\n }\n }\n }\n\n clickOutsideHideAndRemove(event) {\n var modal_container = event.target.closest(\".modal\");\n var modal_box = modal_container.querySelector(\".modal-box\");\n\n if (modal_box.contains(event.target) === false) {\n modal_container.remove();\n }\n\n if(event.target.id === \"troubleshoot-modal\") {\n this.reload_window()\n }\n }\n\n escHide(event) {\n if (event.key == \"Escape\") {\n var shown_modal = document.querySelector(\".modal.shown\");\n if (shown_modal) {\n shown_modal.classList.add(\"hidden\");\n shown_modal.classList.remove(\"shown\", \"modal-transition-in\", \"modal-transition\");\n }\n }\n }\n\n escHideAndRemove(event) {\n if (event.key == \"Escape\") {\n var shown_modal = document.querySelector(\".modal.shown\");\n if (shown_modal) {\n shown_modal.remove();\n }\n }\n }\n\n submitForm(event) {\n var form = event.target.closest(\"form\");\n form.submit();\n }\n\n reload_window() {\n window.location.reload(true);\n }\n\n preventFutureClicksForLink(event) {\n event.preventDefault();\n\n this.submitLinkTarget.disabled = true\n }\n}","// Used for account onboarding flows \n// Not be confused with user onboarding flows, which use the stimulus controllers in /javascript/controllers/onboardings/\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['onboardingContentBox']\n\n connect() {\n this.onboardingContentBoxTarget.classList.remove(\"opacity-0\");\n this.onboardingContentBoxTarget.classList.add(\"opacity-100\");\n }\n\n nextStep() {\n this.onboardingContentBoxTarget.classList.add(\"opacity-0\");\n this.onboardingContentBoxTarget.classList.remove(\"opacity-100\");\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"button\", \"form\" ]\n\n connect() {\n braintree.client.create({\n authorization: this.data.get(\"clientToken\")\n }, this.clientCreated.bind(this))\n }\n\n disconnect() {\n // Remove the paypal button on disconnect\n this.buttonTarget.querySelector(\".paypal-button\").remove()\n }\n\n clientCreated(error, clientInstance) {\n if (error) {\n console.error(\"Error creating client\", error)\n return\n }\n\n braintree.paypalCheckout.create({\n client: clientInstance\n }, this.paypalCreated.bind(this))\n }\n\n paypalCreated(paypalCheckoutErr, paypalCheckoutInstance) {\n // Stop if there was a problem creating PayPal Checkout.\n // This could happen if there was a network error or if it's incorrectly\n // configured.\n if (paypalCheckoutErr) {\n console.error('Error creating PayPal Checkout:', paypalCheckoutErr);\n return;\n }\n\n // Set up PayPal with the checkout.js library\n paypal.Button.render({\n env: this.data.get(\"env\"), // or 'sandbox'\n\n // https://developer.paypal.com/docs/checkout/how-to/customize-button/#\n style: {\n color: 'gold', // gold blue silver black\n shape: 'rect', // shape: pill rect\n size: 'medium', // size: small medium large responsive\n label: 'pay', // label: checkout credit pay buynow paypal installment\n tagline: false, // tagline: true false\n },\n\n payment: () => {\n return paypalCheckoutInstance.createPayment({\n // Your PayPal options here. For available options, see\n // http://braintree.github.io/braintree-web/current/PayPalCheckout.html#createPayment\n flow: 'vault',\n })\n },\n\n onAuthorize: (data, actions) => {\n return paypalCheckoutInstance.tokenizePayment(data, this.paymentMethod.bind(this))\n },\n\n onCancel: (data) => {\n console.log('checkout.js payment cancelled', JSON.stringify(data, 0, 2));\n },\n\n onError: (err) => {\n console.error('checkout.js error', err);\n }\n }, this.buttonTarget).then(() => {\n // The PayPal button will be rendered in an html element with the id\n // `paypal-button`. This function will be called when the PayPal button\n // is set up and ready to be used.\n });\n }\n\n paymentMethod(error, payload) {\n if (error) {\n console.error(\"Error with payment method:\", error)\n return\n }\n\n this.addHiddenField(\"account[processor]\", \"braintree\")\n this.addHiddenField(\"account[card_token]\", payload.nonce)\n\n Rails.fire(this.formTarget, \"submit\")\n }\n\n addHiddenField(name, value) {\n let hiddenInput = document.createElement(\"input\")\n hiddenInput.setAttribute(\"type\", \"hidden\")\n hiddenInput.setAttribute(\"name\", name)\n hiddenInput.setAttribute(\"value\", value)\n this.formTarget.appendChild(hiddenInput)\n }\n}\n\n","// This manages custom events sent to Plausible Analytics\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n \n connect() {\n\n // New public account signup\n if (window.location.href.indexOf(\"new_account=true\") > -1) {\n plausible('Free Signup');\n }\n\n // New account signup by a respondent\n if (window.location.href.indexOf(\"new_account_via_resp=true\") > -1) {\n plausible('Free Signup by Respondent');\n }\n\n // New paying customer converted\n if (window.location.href.indexOf(\"subscription_success=true\") > -1) {\n plausible('New Paid Subscription');\n }\n\n }\n\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"content\"];\n\n connect() {}\n\n mouseOver() {\n this.contentTarget.classList.remove(\"hidden\");\n this.adjustPositionIfOutsideViewport(this.contentTarget);\n }\n\n mouseOut() {\n this.contentTarget.classList.add(\"hidden\");\n }\n\n adjustPositionIfOutsideViewport(element) {\n const rect = element.getBoundingClientRect();\n const triggerRect = this.element.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n\n let newTop;\n let newLeft;\n\n // Check if the element is outside the viewport\n if (rect.top < 0) {\n // Element is above the viewport, position it below the trigger\n element.style.bottom = \"auto\";\n element.style.top = \"25px\";\n } else if (rect.bottom > viewportHeight) {\n // Element is below the viewport, position it above the trigger\n element.style.top = \"auto\";\n element.style.bottom = \"25px\";\n } else {\n // Element is inside the viewport vertically, no change needed\n }\n\n if (rect.left < 0) {\n // Element is to the left of the viewport\n element.style.right = \"auto\";\n element.style.left = \"0\";\n } else if (rect.right > viewportWidth) {\n // Element is to the right of the viewport\n element.style.left = \"auto\";\n element.style.right = \"0\";\n } else {\n // Element is inside the viewport horizontally, no change needed\n }\n }\n}\n","// Set on the form for creating a program_item or message_template within a program_item's thread_template\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\n ];\n\n connect() {\n var libraryPanelToggle = this.element.querySelector(\".media-panel-toggle[data-message-type-id='library']\");\n libraryPanelToggle.click();\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\n 'toggleNewProgramItemForm',\n 'programItemForm',\n 'emptyProgramMessage'\n ];\n\n connect() {\n }\n\n toggleNewProgramItemForm() {\n var toggleProgramItemForm = this.toggleNewProgramItemFormTarget;\n var programItemForm = this.programItemFormTarget;\n if (this.hasEmptyProgramMessageTarget) {\n var emptyProgramMessage = this.emptyProgramMessageTarget;\n }\n var libraryPanelToggle = programItemForm.querySelector(\".media-panel-toggle[data-message-type-id='library']\");\n\n if (programItemForm.classList.contains(\"hidden\")) { // we're revealing the programItemForm\n\n toggleProgramItemForm.classList.add(\"hidden\");\n libraryPanelToggle.click(); // ensure the Library panel is active by default when we're adding a program item\n programItemForm.classList.remove(\"hidden\");\n if (emptyProgramMessage) {\n emptyProgramMessage.classList.add(\"hidden\")\n }\n programItemForm.scrollIntoView({behavior: \"smooth\", block: \"start\"});\n\n } \n \n }\n\n}","// This is a generic handler for a group of radio buttons (a single field, selectable via a .radios-group)\n// It uses \"fake\" radio elements to set the value of a hidden field.\n\nimport { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"hiddenField\"]\n\n connect() {\n // If the hidden field currently has a value, then find the radio-field by that value name and activate it.\n var current_value = this.hiddenFieldTarget.value;\n if (current_value) {\n var radio_to_activate = this.element.querySelector(\".radio-field[data-radio-option-name='\" + current_value + \"']\")\n if (radio_to_activate) {\n // First check to see if another radio field is currently active and deactivate it.\n var active_radio = this.element.querySelector(\".radio-field.active\");\n if (active_radio) {\n active_radio.classList.remove(\"active\");\n }\n // now activate the radio field that matches the hidden field value.\n radio_to_activate.classList.add(\"active\");\n }\n }\n }\n\n toggle(event) {\n var radio_field = event.target.closest(\".radio-field\");\n var radio_option_value = radio_field.dataset.radioOptionName;\n\n // First check to see if another radio field is currently active and deactivate it.\n var active_radio = this.element.querySelector(\".radio-field.active\");\n if (active_radio) {\n active_radio.classList.remove(\"active\");\n }\n\n // Now activate this radio_field\n radio_field.classList.add(\"active\");\n\n // Set the hidden value to this radio_option_value\n this.hiddenFieldTarget.value = radio_option_value;\n }\n}","import { Controller } from \"stimulus\"\nimport { Emojis } from \"src/emojis\"\n\nexport default class extends Controller {\n static targets = [ \"togglePicker\",\n \"emojisPicker\",\n \"emojisList\",\n \"input\",\n \"submitButton\",\n \"favoriteEmojis\" ]\n\n connect() {\n }\n\n openPicker(event) {\n this.emojisPickerTarget.classList.remove(\"hidden\");\n this.populatePicker();\n }\n\n closePicker(event) {\n this.emojisPickerTarget.classList.add(\"hidden\");\n this.emojisListTarget.innerHTML = \"\";\n }\n\n clickOutsideClosePicker(event) {\n var toggle_picker = event.target.closest(\".toggle-picker\");\n if ((this.emojisPickerTarget.contains(event.target) === false) && !toggle_picker) {\n this.emojisPickerTarget.classList.add(\"hidden\");\n this.emojisListTarget.innerHTML = \"\";\n }\n }\n\n escClosePicker(event) {\n if (event.key == \"Escape\") {\n this.emojisPickerTarget.classList.add(\"hidden\");\n this.emojisListTarget.innerHTML = \"\";\n }\n }\n\n create(event) {\n var emoji_element = event.target;\n var emoji = emoji_element.dataset.emoji;\n this.inputTarget.value = emoji;\n this.submitButtonTarget.click();\n\n // Update favorite emojis in localstorage\n var favs_array = [];\n var anonymous_emojis = []\n favs_array.push(`${emoji}`);\n var current_favs_array = JSON.parse(localStorage.getItem(\"favorite_emojis\"));\n if (current_favs_array) {\n if (current_favs_array.includes(`${emoji}`)) {\n var favs_array = current_favs_array;\n } else {\n var combined_array = current_favs_array.concat(favs_array);\n var favs_array = combined_array;\n }\n }\n favs_array.sort(function(x,y){ return x == emoji ? -1 : y == emoji ? 1 : 0; });\n var favs_string = JSON.stringify(favs_array);\n localStorage.setItem(\"favorite_emojis\", favs_string);\n }\n\n populatePicker() {\n this.emojisListTarget.innerHTML = ''\n var all_emojis_container = this.emojisListTarget;\n const emojis = Emojis.emojis;\n if (!emojis.find((emoji) => emoji.emoji === \"๐Ÿฆ„\")) {\n emojis.push({\n \"emoji\": \"๐Ÿฆ„\",\n \"description\": \"unicorn\",\n \"aliases\": [\"unicorn\"],\n \"tags\": [\"mythical\", \"animal\"],\n \"unicode_version\": \"11.0\",\n \"ios_version\": \"12.1\"\n });\n }\n\n // Populate elements for all emojis\n emojis.forEach((emoji) => {\n var el = document.createElement('div');\n el.classList.add(\"emoji\",\"flex\",\"flex-col\",\"items-center\",\"justify-center\",\"w-8\",\"h-8\",\"mx-0.5\",\"text-2xl\",\"cursor-pointer\",\"rounded-lg\",\"hover:bg-gray-100\");\n el.dataset.emoji = emoji.emoji;\n el.dataset.description = emoji.description;\n el.dataset.aliases = emoji.aliases;\n el.dataset.tags = emoji.tags;\n el.innerHTML = emoji.emoji;\n el.dataset.action = \"click->reactions#create\";\n all_emojis_container.appendChild(el);\n });\n\n this.favoriteEmojisTarget.innerHTML = this.favoriteEmojisTarget.querySelector('.clear-favorites-icon').outerHTML;\n\n // If favorites are present in localstorage, populate those\n var fav_emojis = localStorage.getItem(\"favorite_emojis\");\n if (fav_emojis) {\n var favorites_container = this.favoriteEmojisTarget;\n\n // show the favorites container\n favorites_container.classList.remove(\"hidden\");\n\n var fav_emojis_array = JSON.parse(fav_emojis);\n fav_emojis_array.forEach((emoji) => {\n var emoji_el = all_emojis_container.querySelector(\"div[data-emoji='\"+emoji+\"']\");\n if (emoji_el) {\n var cloned_emoji_el = emoji_el.cloneNode(true);\n favorites_container.insertAdjacentElement('afterbegin', cloned_emoji_el);\n } else {\n // remove the emoji (which we used to support but don't anymore) from the set of favorites in localstorage, since we've removed it from our main list of available emojis\n var fav_emojis_array = JSON.parse(fav_emojis);\n var index = fav_emojis_array.indexOf(emoji);\n if (index > -1) {\n fav_emojis_array.splice(index, 1);\n }\n localStorage.setItem(\"favorite_emojis\", JSON.stringify(fav_emojis_array));\n }\n });\n }\n }\n\n createReaction(event) {\n var emoji = event.target.dataset.emoji\n var messageId = event.target.dataset.messageId\n\n if (event.target.dataset.method === 'delete') {\n var emoji_array = JSON.parse(localStorage.getItem(messageId))\n if (emoji_array === null || emoji_array === undefined || !emoji_array.includes(`${emoji}`)) {\n event.preventDefault();\n\n console.log('hghj')\n var params = new URLSearchParams({\n user_id: null,\n emoji: emoji,\n from_js: true\n })\n\n fetch(\"/messages/\" + messageId + `/reactions?${params}`, {\n method: \"POST\",\n headers: {\n 'Content-Type': 'application/js'\n }\n }).then(function (result) {\n result.text().then(function (val) {\n return eval(val);\n });\n });\n }\n }\n }\n\n clearFavorites() {\n localStorage.removeItem(\"favorite_emojis\");\n this.favoriteEmojisTarget.classList.add(\"hidden\");\n }\n}\n","// This manages passing the rewardful cookie from clarityflow.com to the user registering on app.clarityflow.com\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n \n connect() {\n\n // If the current user has a rewardful cookie, add a hidden field on the registration form to pass the referral ID to user.rewardful_referral (a virtual attribute)\n rewardful('ready', function() {\n if(Rewardful.referral) {\n var form = document.querySelector(\"form[data-controller='rewardful']\");\n form.insertAdjacentHTML('beforeend', '');\n form.insertAdjacentHTML('beforeend', '');\n form.insertAdjacentHTML('beforeend', '');\n form.insertAdjacentHTML('beforeend', '');\n }\n });\n\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"viewContent\", \"editContent\", \"richtextInput\", \"saveBtn\"]\n\n static values = {\n }\n\n connect() {\n const observer = new MutationObserver((mutations) => {\n this.revealSaveBtn();\n });\n\n observer.observe(this.element, {childList: true, subtree: true});\n\n this.viewContentTargets.forEach((element) => {\n element.querySelectorAll('a').forEach(function(link) {\n if (link.host !== window.location.host || (link.host === window.location.host && link.pathname.includes('/p/'))) {\n link.target = \"_blank\"\n }\n })\n })\n }\n\n toggleEdit() {\n var viewContent = this.viewContentTarget;\n var editContent = this.editContentTarget;\n if (viewContent.classList.contains(\"hidden\")) {\n viewContent.classList.remove(\"hidden\");\n editContent.classList.add(\"hidden\");\n } else {\n viewContent.classList.add(\"hidden\");\n editContent.classList.remove(\"hidden\");\n editContent.querySelector(\"trix-editor\").focus();\n }\n }\n\n focusEdit() { \n // used when we're not toggling between view/edit containers and only showing the edit container (like when it's a new object form)\n // This ensures the container gets the active styles\n this.editContentTarget.classList.add(\"border-2\",\"border-primary-600\");\n }\n defocusEdit() { \n // used when we're not toggling between view/edit containers and only showing the edit container (like when it's a new object form)\n // This ensures the container gets the active styles\n this.editContentTarget.classList.remove(\"border-2\",\"border-primary-600\");\n }\n\n toggleEditorOff(event) {\n if (this.hasViewContentTarget && !this.element.contains(event.target)) {\n this.viewContentTarget.classList.remove(\"hidden\");\n this.editContentTarget.classList.add(\"hidden\");\n }\n }\n\n revealSaveBtn() {\n if (this.hasSaveBtnTarget) {\n this.saveBtnTarget.classList.remove(\"hidden\");\n }\n }\n}\n","// This controls the global search functionality, where user can click \"/\" to open a modal to search all conversations and messages (and probably more things in the future)\n\nimport search_methods from './lib/search_methods'\nimport {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['searchModal', 'searchInput', 'searchResultsContainer', 'searchResults', 'clearSearchIcon', 'librarySearchResults', 'librarySearchInput', 'selectedResult']\n\n connect() {\n window.globalSearchInitializer = new search_methods(this.searchInputTarget, this.searchResultsContainerTarget, this.searchResultsTarget);\n }\n\n open(event) {\n var other_modal = document.querySelector(\".modal.shown\");\n var creating_text_message = document.querySelector(\".message-block-toggle[data-message-type-id='text'].active\");\n var editing_text_message = document.querySelector(\".editing-message\");\n var disable_search = document.querySelector(\".disable-search\");\n // editing message title in new message form\n var new_message_title_field = document.querySelectorAll(\".message-title .message-title-field input\");\n if (new_message_title_field) var is_new_message_title_field_focused = Array.prototype.includes.call(new_message_title_field, document.activeElement);\n // editing message title in existing message both sidebar and messages list.\n var editing_message_title = document.querySelectorAll(\".edit-message-title-form #message_title\")\n if (editing_message_title) var is_editing_message_title_field_focused = Array.prototype.includes.call(editing_message_title, document.activeElement);\n // editing message template title in course builder area\n var edit_message_template_title = document.querySelectorAll(\".edit-message-template-title-form #message_template_message_title\")\n if (edit_message_template_title) var is_editing_message_template_title_field_focused = Array.prototype.includes.call(edit_message_template_title, document.activeElement);\n // editing thread title in new thread form or existing thread in both sidebar and messages list\n var editing_thread_title = document.querySelectorAll(\".edit-message-thread-title-form #message_thread_title\")\n if (editing_thread_title) var is_editing_thread_title_field_focused = Array.prototype.includes.call(editing_thread_title, document.activeElement);\n if ((event.key == \"/\" && !other_modal && !creating_text_message && !editing_text_message && !disable_search && !is_editing_thread_title_field_focused && !is_new_message_title_field_focused && !is_editing_message_title_field_focused && !is_editing_message_template_title_field_focused) || event.type == \"click\") { // forward slash keycode is 191\n var modal = this.searchModalTarget;\n modal.classList.remove(\"hidden\");\n modal.classList.add(\"shown\");\n this.searchInputTarget.value = \"\";\n this.searchResultsTarget.innerHTML = \"\";\n this.searchResultsTarget.classList.add(\"hidden\");\n this.searchInputTarget.focus();\n }\n }\n\n modifySetting(event) {\n var currentlyActive = this.searchModalTarget.querySelector('.search-type.active');\n var settingPicked = event.target;\n var search_type = settingPicked.dataset.searchType;\n var search_input = this.searchInputTarget;\n\n currentlyActive.classList.remove('active');\n currentlyActive.classList.add('inactive');\n settingPicked.classList.remove('inactive');\n settingPicked.classList.add('active');\n\n search_input.dataset.searchObjectType = search_type;\n\n if (search_type == \"conversations\") {\n search_input.placeholder = \"Search conversation titles\";\n } else if (search_type == \"messages\") {\n search_input.placeholder = \"Search message titles, text, and transcripts\";\n } else if (search_type == \"contacts\") {\n search_input.placeholder = \"Search contacts\";\n } else if (search_type == \"library\") {\n search_input.placeholder = \"Search Library templates\";\n }\n\n search_input.focus();\n var inputValue = this.searchInputTarget.value;\n if (typeof (inputValue) != 'undefined' && inputValue != null && inputValue.trim() !== '') {\n this.search(event);\n }\n }\n\n search(event) {\n var inputValue = this.searchInputTarget.value;\n var params = new URLSearchParams({\n q: inputValue,\n object_type: this.searchInputTarget.dataset.searchObjectType,\n inside_conversation: this.searchInputTarget.dataset.searchInsideConversation,\n url: location.href\n });\n var path = `/${accountId}/global_search?${params}`;\n\n if (this.searchInputTarget && event.keyCode != 40 && event.keyCode != 38) {\n if (typeof (inputValue) != 'undefined' && inputValue != null) {\n window.globalSearchInitializer.get_search_results(path).then(response => {\n if (response === undefined) {\n this.searchResultsContainerTarget.classList.add('hidden');\n } else {\n this.searchResultsContainerTarget.classList.remove('hidden');\n this.searchResultsTarget.classList.remove('hidden');\n this.searchResultsTarget.innerHTML = response\n }\n });\n }\n }\n }\n\n navigate(event) {\n if (this.searchModalTarget.classList.contains(\"shown\")) {\n var search_results = Array.from(this.searchResultsTarget.querySelectorAll(\".search-result\"));\n\n var focused_result = this.searchResultsTarget.querySelector(\".search-result:focus\");\n var i = 0;\n\n if (event.keyCode == 38) { // UP key is pressed\n event.preventDefault();\n if (focused_result) {\n i = search_results.indexOf(focused_result);\n if (i == 0) {\n this.searchInputTarget.focus();\n } else {\n i = i - 1;\n search_results[i].focus();\n }\n } else {\n search_results[i].focus();\n }\n }\n if (event.keyCode == 40) { // DOWN key is pressed\n event.preventDefault();\n if (focused_result) {\n i = search_results.indexOf(focused_result);\n if (i == search_results.length - 1) {\n this.searchInputTarget.focus();\n } else {\n i = i + 1;\n search_results[i].focus();\n }\n } else {\n search_results[i].focus();\n }\n }\n }\n }\n\n // this search_library action is used when searching for a template to post a message in a conversation\n search_library(event) {\n this.selectedResultTarget.classList.add('hidden')\n this.clearSearchIconTarget.classList.remove(\"hidden\");\n var params = new URLSearchParams({\n q: event.target.value,\n object_type: 'library',\n inside_conversation: true,\n url: location.href,\n inside_thread: event.target.dataset.insideThread\n });\n\n var path = `/${accountId}/global_search?${params}`;\n window.globalSearchInitializer.get_search_results(path).then(response => {\n if (response !== undefined) {\n if (this.hasLibrarySearchResultsTarget) {\n this.librarySearchResultsTarget.innerHTML = response;\n }\n }\n });\n }\n\n // this is used when keyboard navigating the search results when choosing a template to post as a message in a conversat.\n navigate_library(event) {\n var search_results_container = this.element.querySelector(\".search-library-in-message-creator .library-search-results-group .search-results-group\");\n if (search_results_container) {\n var search_results = Array.from(this.librarySearchResultsTarget.querySelectorAll(\".search-result\"));\n var focused_result = this.librarySearchResultsTarget.querySelector(\".search-result.focused\");\n\n var i = 0;\n\n if (event.keyCode == 38) { // UP key is pressed\n event.preventDefault();\n if (focused_result) {\n i = search_results.indexOf(focused_result);\n if (i == 0) {\n this.librarySearchInputTarget.focus();\n focused_result.classList.remove(\"focused\");\n } else {\n focused_result.classList.remove(\"focused\");\n i = i - 1;\n search_results[i].classList.add(\"focused\");\n }\n } else {\n search_results[i].classList.add(\"focused\");\n }\n }\n if (event.keyCode == 40) { // DOWN key is pressed\n event.preventDefault();\n if (focused_result) {\n i = search_results.indexOf(focused_result);\n if (i == search_results.length - 1) {\n this.librarySearchInputTarget.focus();\n focused_result.classList.remove(\"focused\");\n } else {\n focused_result.classList.remove(\"focused\");\n i = i + 1;\n search_results[i].classList.add(\"focused\");\n }\n } else {\n search_results[i].classList.add(\"focused\");\n }\n }\n\n if(event.keyCode == 13){\n event.preventDefault();\n if (focused_result) {\n focused_result.click();\n }\n }\n }\n }\n}","// This controls view-specific searching of specific objects. For example, searching objects in an index view, or searching contacts in the invitation flow, and other searchable areas of the app.\n\nimport search_methods from \"./lib/search_methods\";\nimport { Controller } from \"stimulus\";\nimport { debounce } from \"helpers\";\n\nexport default class extends Controller {\n static targets = [\n \"searchInput\",\n \"unfilteredList\",\n \"filteredList\",\n \"clearSearchIcon\",\n \"hideWhenFiltered\",\n \"noResults\",\n \"newObjectNameContainer\",\n ];\n\n static values = {\n searchPath: String,\n };\n\n connect() {\n window.objectsSearchInitializer = new search_methods(\n this.searchInputTarget,\n this.searchResultsContainerTarget,\n this.searchResultsTarget\n );\n this.search = debounce(this.search, 200);\n }\n\n toggleFocus(event) {\n if (event.key == \"/\") {\n this.searchInputTarget.focus();\n } else if (event.key == \"Escape\" || event.type == \"click\") {\n this.filteredListTarget.classList.add(\"hidden\");\n if (this.hasUnfilteredListTarget) {\n this.unfilteredListTarget.classList.remove(\"hidden\");\n }\n this.searchInputTarget.value = \"\";\n this.searchInputTarget.blur();\n this.clearSearchIconTarget.classList.add(\"hidden\");\n for (let element of this.hideWhenFilteredTargets) {\n element.classList.remove(\"hidden\");\n }\n }\n }\n\n search(event) {\n var inputValue = this.searchInputTarget.value;\n var params = new URLSearchParams({ q: inputValue });\n\n if (this.searchPathValue.indexOf(\"?\") > -1) {\n var searchPath = this.searchPathValue + \"&\" + params;\n } else {\n var searchPath = this.searchPathValue + \"?\" + params;\n }\n\n if (this.hasUnfilteredListTarget) {\n var unfilteredListContainer = this.unfilteredListTarget;\n }\n var filteredListContainer = this.filteredListTarget;\n var noResultsContainer = this.noResultsTarget;\n var hideElementsWhenFiltered = this.hideWhenFilteredTargets;\n if (this.hasNewObjectNameContainerTarget) {\n var newObjectNameContainer = this.newObjectNameContainerTarget;\n }\n\n if (unfilteredListContainer) {\n unfilteredListContainer.classList.add(\"hidden\");\n }\n\n if (\n this.searchInputTarget &&\n event.keyCode != 40 &&\n event.keyCode != 38 &&\n event.key != \"Escape\"\n ) {\n // 38 = arrow_up, 40 = arrow_down\n if (\n typeof inputValue != \"undefined\" &&\n inputValue != null &&\n inputValue.trim().length !== 0\n ) {\n window.objectsSearchInitializer\n .get_search_results(searchPath)\n .then((response) => {\n this.clearSearchIconTarget.classList.remove(\"hidden\");\n for (let element of hideElementsWhenFiltered) {\n element.classList.add(\"hidden\");\n }\n if (response === undefined) {\n this.noResultsTarget.classList.remove(\"hidden\");\n filteredListContainer.classList.add(\"hidden\");\n if (unfilteredListContainer) {\n unfilteredListContainer.classList.add(\"hidden\");\n }\n if (newObjectNameContainer) {\n newObjectNameContainer.innerHTML = inputValue;\n }\n } else {\n noResultsContainer.classList.add(\"hidden\");\n filteredListContainer.classList.remove(\"hidden\");\n filteredListContainer.innerHTML = response;\n }\n });\n }\n\n if (inputValue == \"\") {\n // user deleted contents of input field, making it blank\n this.noResultsTarget.classList.add(\"hidden\");\n this.clearSearchIconTarget.classList.add(\"hidden\");\n if (unfilteredListContainer) {\n unfilteredListContainer.classList.remove(\"hidden\");\n }\n filteredListContainer.classList.add(\"hidden\");\n for (let element of hideElementsWhenFiltered) {\n element.classList.remove(\"hidden\");\n }\n }\n }\n }\n\n navigate(event) {\n var filteredListContainer = this.filteredListTarget;\n if (\n !filteredListContainer.classList.contains(\"hidden\") &&\n (event.keyCode == 40 || event.keyCode == 38)\n ) {\n var search_results = Array.from(\n filteredListContainer.querySelectorAll(\"a.searchable-object\")\n );\n var focused_result = filteredListContainer.querySelector(\n \"a.searchable-object:focus\"\n );\n var i = 0;\n\n if (event.keyCode == 38) {\n // UP key is pressed\n event.preventDefault();\n if (focused_result) {\n i = search_results.indexOf(focused_result);\n if (i == 0) {\n this.searchInputTarget.focus();\n } else {\n i = i - 1;\n search_results[i].focus();\n }\n } else {\n search_results[i].focus();\n }\n }\n if (event.keyCode == 40) {\n // DOWN key is pressed\n event.preventDefault();\n if (focused_result) {\n i = search_results.indexOf(focused_result);\n if (i == search_results.length - 1) {\n this.searchInputTarget.focus();\n } else {\n i = i + 1;\n search_results[i].focus();\n }\n } else {\n search_results[i].focus();\n }\n }\n }\n }\n}\n","// Used when you want a specific selection option(s) to toggle show/hide of another div\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['toggleMe']\n static values = {\n focusInput: Boolean\n }\n\n connect() {\n }\n\n toggle(event) {\n this.revealOrHideInputs(event.target.value, document.querySelectorAll(\".dynamic-on-select\"), this.focusInputValue)\n }\n\n\n revealOrHideInputs(selected_option, toggleables, focus_input = true) {\n for (let toggleable of toggleables) {\n if (selected_option == toggleable.dataset.toggleWhenSelected) {\n toggleable.classList.remove(\"hidden\");\n var input = toggleable.querySelector(\"input\")\n if (input && focus_input) {\n input.focus();\n }\n } else {\n toggleable.classList.add(\"hidden\");\n }\n }\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = []\n\n static values = {\n }\n\n connect() {\n // If a sub-section has .open-on-load class, then click its section header link to trigger the opening and loading of this subnav content\n var subnav_to_open_on_load = this.element.querySelector(\".open-on-load\");\n if (subnav_to_open_on_load) {\n var trigger_link = subnav_to_open_on_load.querySelector(\".sub-section-header-link\");\n trigger_link.click();\n }\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"sidebar\",\n \"toggleSidebar\",\n \"sidebarSection\"]\n\n static values = {\n activeItem: String,\n activeSubSection: String,\n activeSubSectionLink: String\n }\n\n connect() {\n // Configure the sidebar opened/closed state on page load\n if (this.hasSidebarTarget) {\n var sidebar = this.sidebarTarget;\n // Sidebar defaults to closed state.\n // If the user left their sidebar in an open state, set it to open.\n // But if the user is on a medium-sized screen (768-1024), then set it to closed, since the opened state here is full-width.\n var sidebar_state = localStorage.getItem(\"sidebar_state\");\n\n if (sidebar.classList.contains(\"always-open\")) {\n sidebar.classList.remove(\"sidebar-closed\");\n sidebar.classList.add(\"sidebar-open\");\n } else if (sidebar_state == \"closed\" || medium_screen()) {\n sidebar.classList.add(\"sidebar-closed\");\n sidebar.classList.remove(\"sidebar-open\");\n }\n\n // If the viewport is a short height (defined in short_screen()), apply this class to sidebar, so that we can adjust elements accordingly.\n if (short_screen()) {\n sidebar.classList.add(\"short-screen\");\n }\n }\n\n // Activate the current sidebar item (if applicable)\n if (this.hasActiveItemValue) {\n var sidebar_link = document.querySelector(`#sidebar-link-${this.activeItemValue}`);\n if (sidebar_link) {\n sidebar_link.classList.add(\"active\");\n }\n }\n\n // Activate the current sidebar sub-section (if applicable)\n if (this.hasActiveSubSectionValue) {\n var sidebar_sub_section = document.querySelector(`#sidebar-sub-section-${this.activeSubSectionValue}`);\n if (sidebar_sub_section) {\n sidebar_sub_section.classList.add(\"active\");\n }\n }\n\n // Activate the current sidebar sub-section link (if applicable)\n if (this.hasActiveSubSectionLinkValue) {\n var sidebar_sub_section_link = document.querySelector(`#sidebar-sub-section-link-${this.activeSubSectionLinkValue}`);\n if (sidebar_sub_section_link) {\n sidebar_sub_section_link.classList.add(\"active\");\n }\n }\n\n }\n\n // On desktop: Toggle the sidebar to \"open\" (default) or \"closed\" (minimal thin bar) state\n toggleSidebar(event) {\n var sidebar = this.sidebarTarget;\n\n if (sidebar.classList.contains(\"sidebar-open\")) {\n sidebar.classList.remove(\"sidebar-open\");\n sidebar.classList.add(\"sidebar-closed\");\n localStorage.setItem(\"sidebar_state\", \"closed\");\n } else {\n sidebar.classList.remove(\"sidebar-closed\");\n sidebar.classList.add(\"sidebar-open\");\n localStorage.setItem(\"sidebar_state\", \"open\");\n }\n }\n\n // On mobile: Toggle the sidebar on and off\n toggleOnMobile(event) {\n var sidebar = this.sidebarTarget;\n\n if (medium_screen()) {\n\n // User is on a medium screen (768-1024), and they clicked the \"X\"\n // Instead of hiding the sidebar, we want to toggle it back to closed-state.\n sidebar.classList.remove(\"sidebar-open\");\n sidebar.classList.add(\"sidebar-closed\");\n\n } else { // User is on a small screen (<768) so we will show/hide the sidebar.\n\n if (sidebar.classList.contains(\"hidden\")) {\n sidebar.classList.remove(\"hidden\");\n\n // On mobile, we start with the 'sidebar-open' styles (in sidebar.scss), then tweak within that using media queries\n // So we must make sure the sidebar has the .sidebar-open class and not the .sidebar-closed class.\n sidebar.classList.remove(\"sidebar-closed\");\n sidebar.classList.add(\"sidebar-open\");\n\n } else {\n sidebar.classList.add(\"hidden\");\n }\n\n }\n\n }\n\n toggleSubSection(event) {\n var section_content = event.target.closest(\".section-content\");\n var section_subnavs = section_content.querySelectorAll(\".section-subnav\");\n var toggled_section_subnav = event.target.closest(\".section-subnav\");\n\n if (toggled_section_subnav.classList.contains(\"active\")) {\n toggled_section_subnav.classList.remove(\"active\");\n } else {\n for (let section_subnav of section_subnavs) {\n section_subnav.classList.remove(\"active\");\n }\n toggled_section_subnav.classList.add(\"active\");\n }\n }\n\n}\n\n// function to check if the screen is between min width 768px and max width 1024px\nfunction medium_screen() {\n var mq = window.matchMedia(\"(min-width: 768px) and (max-width: 1024px)\");\n if (mq.matches) {\n return true;\n } else {\n return false\n }\n}\n\nfunction short_screen() {\n return window.innerHeight < 700;\n}","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = ['conversationError']\n\n connect() {\n\n }\n\n updateConversationInSpace(event) {\n var conversation_id = event.target.value\n var space_container_slug = event.target.dataset.spaceContainerSlug\n var space_slug = event.target.dataset.spaceSlug\n\n var error = document.querySelector('.error-explanation')\n if (conversation_id === ''){\n if (error) error.innerHTML = ''\n this.conversationErrorTarget.classList.remove('hidden')\n }else {\n if (!this.conversationErrorTarget.classList.contains('hidden')) {\n this.conversationErrorTarget.classList.add('hidden');\n }\n Rails.ajax({\n type: \"patch\",\n url: '/manage_spaces/' + space_container_slug + '/' + space_slug + '/' + conversation_id + '/add_remove_conversation_in_space'\n })\n }\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n\n appendSpaceToSpaceContainer(event){\n var space_selection = event.target.closest('form').querySelector('.space_program_space_id');\n fetch(`/space_container/${event.target.value}`, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n credentials: \"same-origin\"\n }).then(function (result) {\n result.text().then(function (val) {\n return eval(val);\n });\n });\n }\n}","import { Controller } from \"stimulus\"\n\nvar timer = null;\nexport default class extends Controller {\n static targets = [\"card\", \"name\", \"error\", \"form\", \"couponField\", \"couponApplied\", \"couponCodeMessage\", \"couponSuccessIcon\", \"couponErrorIcon\", \"submitButton\", \"purchaseForm\", \"fromCheckout\"]\n\n connect(event) {\n if (this.hasPurchaseFormTarget || this.hasFromCheckoutTarget) {\n if (!metaTag) {\n var metaTag = document.createElement(\"meta\");\n }\n metaTag.name = \"stripe-key\";\n var card_form = document.querySelector('.stripe-card-form') || document.querySelector('.card-form')\n metaTag.content = card_form.getAttribute('data-stripe-key');\n document.head.appendChild(metaTag);\n }\n\n let stripeMeta = document.querySelector('meta[name=\"stripe-key\"]')\n if (stripeMeta === null) { return }\n\n let stripeKey = stripeMeta.getAttribute(\"content\")\n var form = document.querySelector('form[data-stripe-account]');\n if (form) {\n let connectedAccountId = form.getAttribute('data-stripe-account');\n this.stripe = Stripe(stripeKey, { stripeAccount: connectedAccountId })\n } else {\n this.stripe = Stripe(stripeKey)\n }\n let elements = this.stripe.elements()\n\n // Setup Intents are used for adding new cards to be charged in the future\n this.setup_intent = this.data.get(\"setup-intent\")\n\n // Payment intents are for processing payments that require action\n this.payment_intent = this.data.get(\"payment-intent\")\n\n // Setup regular payments\n this.card = elements.create(\"card\")\n this.card.mount(this.cardTarget)\n this.card.addEventListener(\"change\", this.changed.bind(this))\n\n // Reveal coupon field & pre-fill it if ?coupon parameter is present in the URL\n var url_string = window.location.href;\n var url = new URL(url_string);\n var coupon_value = url.searchParams.get(\"coupon\");\n if (coupon_value && this.hasCouponFieldTarget) {\n this.couponFieldTarget.classList.remove(\"hidden\");\n if (coupon_value != \"true\") {\n this.couponFieldTarget.querySelector('input').value = coupon_value;\n this.validateCouponCode();\n }\n }\n }\n\n changed(event) {\n if (event.error) {\n this.errorTarget.textContent = event.error.message\n } else {\n this.errorTarget.textContent = \"\"\n }\n }\n\n keydown(event) {\n if (event.keyCode == 13) {\n // Catch Enter key's form submission and process as submit\n event.preventDefault()\n this.submit(event)\n }\n }\n\n submit(event) {\n this.submitButtonTarget.disabled = true // To prevent multiple form submits\n if (this.submitButtonTarget.getAttribute('data-disable-with')) {\n this.submitButtonTarget.setAttribute('data-btn-text', this.submitButtonTarget.innerHTML)\n this.submitButtonTarget.innerHTML = this.submitButtonTarget.getAttribute('data-disable-with')\n }\n\n if (this.nameTarget.value == \"\") {\n this.errorTarget.textContent = \"Name on card is required.\"\n this.resetPurchaseButton()\n return\n }\n event.preventDefault()\n\n // One time payments\n if (this.payment_intent) {\n this.handleCardPayment()\n\n // Updating card with setup intent\n } else if (this.setup_intent) {\n this.setupNewCard()\n\n // Subscriptions simply tokenize the payment method and redirect to payment page if SCA required\n } else {\n this.stripe.createPaymentMethod({\n type: 'card',\n card: this.card,\n billing_details: {\n name: this.nameTarget.value\n },\n }).then((result) => {\n if (result.paymentMethod == null) {\n this.errorTarget.textContent = \"Card details are incomplete.\"\n this.resetSubscribeButton();\n return;\n }\n this.handlePaymentMethod(result.paymentMethod.id)\n })\n }\n }\n\n setupNewCard() {\n let data = {\n payment_method: {\n card: this.card,\n billing_details: {\n name: this.nameTarget.value\n }\n }\n }\n\n this.stripe.confirmCardSetup(this.setup_intent, data).then((result) => {\n if (result.error) {\n this.errorTarget.textContent = result.error.message\n this.resetPurchaseButton()\n } else {\n this.handlePaymentMethod(result.setupIntent.payment_method)\n }\n })\n }\n\n handlePaymentMethod(payment_method_id) {\n this.addHiddenField(\"account[processor]\", \"stripe\")\n this.addHiddenField(\"account[card_token]\", payment_method_id)\n\n Rails.fire(this.formTarget, \"submit\")\n\n this.changeSubscribeButton();\n }\n\n addHiddenField(name, value) {\n let hiddenInput = document.createElement(\"input\")\n hiddenInput.setAttribute(\"type\", \"hidden\")\n hiddenInput.setAttribute(\"name\", name)\n hiddenInput.setAttribute(\"value\", value)\n this.formTarget.appendChild(hiddenInput)\n }\n\n handleCardPayment() {\n // Handle an existing payment that needs confirmation\n this.stripe.confirmCardPayment(this.payment_intent).then((result) => {\n if (result.error) {\n this.errorTarget.textContent = result.error.message\n\n } else if (result.paymentIntent && result.paymentIntent.status === 'succeeded') {\n Turbolinks.clearCache()\n Turbolinks.visit(\"/\")\n }\n })\n }\n\n validateCouponCode() {\n var coupon_code = this.couponFieldTarget.querySelector('input').value\n if (coupon_code == null)\n return\n\n clearTimeout(timer);\n timer = setTimeout(function () {\n this.fetchResultAndUpdate(coupon_code);\n }.bind(this), 1000)\n\n }\n\n fetchResultAndUpdate(coupon_code) {\n var url = new URL(window.location.href);\n var plan_id = url.searchParams.get(\"plan\");\n\n fetch(`/validate_coupon_code?coupon_code=${coupon_code}&plan=${plan_id}`).then(response => response.json())\n .then(data => {\n this.couponAppliedTarget.classList.remove('hidden')\n if (data.status === 'success') {\n this.couponCodeMessageTarget.innerHTML = data.message\n this.couponAppliedTarget.classList.add('text-secondary-600', 'bg-secondary-200');\n this.couponAppliedTarget.classList.remove('text-red-600', 'bg-red-100');\n this.couponSuccessIconTarget.classList.remove(\"hidden\");\n this.couponErrorIconTarget.classList.add(\"hidden\");\n } else {\n this.couponCodeMessageTarget.innerHTML = \"Invalid coupon\";\n console.log('Coupon error:');\n console.log(data.message);\n this.couponAppliedTarget.classList.remove('text-secondary-600', 'bg-secondary-200');\n this.couponAppliedTarget.classList.add('text-red-600', 'bg-red-100');\n this.couponSuccessIconTarget.classList.add(\"hidden\");\n this.couponErrorIconTarget.classList.remove(\"hidden\");\n }\n })\n }\n\n resetPurchaseButton() {\n this.submitButtonTarget.disabled = false\n if (this.submitButtonTarget.getAttribute('data-btn-text')) {\n this.submitButtonTarget.innerHTML = this.submitButtonTarget.getAttribute('data-btn-text')\n }\n }\n\n changeSubscribeButton() {\n var processing_button = document.querySelector('.processing-button');\n if (processing_button) {\n processing_button.classList.remove('hidden');\n this.submitButtonTarget.classList.add('hidden');\n }\n }\n\n resetSubscribeButton() {\n this.submitButtonTarget.disabled = false\n var processing_button = document.querySelector('.processing-button');\n if (processing_button) {\n processing_button.classList.add('hidden');\n this.submitButtonTarget.classList.remove('hidden');\n this.submitButtonTarget.classList.remove('opacity-50');\n }\n }\n}\n","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"checkbox\", \"input\", \"cancelButton\"]\n\n connect() {}\n\n toggleSubscriptionSubmit() {\n let values = [];\n for (let v of this.checkboxTargets) {\n values.push(v.value);\n }\n if (values.every(value => value === \"true\") && this.inputTarget.value !== \"\" && this.inputTarget.value !== undefined && this.inputTarget.value !== null && this.inputTarget.value !== ' ') {\n this.cancelButtonTarget.classList.remove(\"btn-disabled\");\n this.cancelButtonTarget.removeAttribute('disabled');\n } else {\n this.cancelButtonTarget.classList.add(\"btn-disabled\");\n this.cancelButtonTarget.setAttribute('disabled', 'disabled');\n }\n }\n}\n","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"monthlyPlans\", \"monthlyToggle\", \"annualPlans\", \"annualToggle\"]\n\n connect() {\n console.log('connected!');\n }\n\n toggleMonthly() {\n this.toggleSwitcherOn(this.monthlyToggleTarget);\n this.toggleSwitcherOff(this.annualToggleTarget);\n this.togglePanelOn(this.monthlyPlansTarget);\n this.togglePanelOff(this.annualPlansTarget);\n }\n\n toggleAnnual() {\n this.toggleSwitcherOff(this.monthlyToggleTarget);\n this.toggleSwitcherOn(this.annualToggleTarget);\n this.togglePanelOff(this.monthlyPlansTarget);\n this.togglePanelOn(this.annualPlansTarget);\n }\n\n toggleSwitcherOn(selection) {\n selection.classList.add(\"bg-tan-200\", \"text-black\");\n }\n\n toggleSwitcherOff(selection) {\n selection.classList.remove(\"bg-tan-200\", \"text-black\");\n }\n\n togglePanelOn(panel) {\n // panel.classList.add(\"md:flex\");\n panel.classList.remove(\"hidden\", \"md:hidden\");\n }\n\n togglePanelOff(panel) {\n // panel.classList.remove(\"md:flex\");\n panel.classList.add(\"hidden\", \"md:hidden\");\n }\n}\n","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"openWidget\", \"closeWidget\", \"supportMenu\"]\n\n connect() {\n\n // Helpscout beacon code\n !function (e, t, n) {\n function a() {\n var e = t.getElementsByTagName(\"script\")[0], n = t.createElement(\"script\");\n n.type = \"text/javascript\", n.async = !0, n.src = \"https://beacon-v2.helpscout.net\", e.parentNode.insertBefore(n, e)\n }\n\n if (e.Beacon = n = function (t, n, a) {\n e.Beacon.readyQueue.push({method: t, options: n, data: a})\n }, n.readyQueue = [], \"complete\" === t.readyState) return a();\n e.attachEvent ? e.attachEvent(\"onload\", a) : e.addEventListener(\"load\", a, !1)\n }(window, document, window.Beacon || function () {\n });\n\n window.Beacon('init', '2add2b0f-7ef9-474f-859a-84e56ae7ffe4', {\n style: \"manual\"\n })\n\n Beacon('on', 'close', () => this.close_widget());\n\n }\n\n open_menu(event) {\n this.supportMenuTarget.classList.remove(\"hidden\");\n this.closeWidgetTarget.classList.remove(\"hidden\");\n this.openWidgetTarget.classList.add(\"hidden\");\n }\n\n close_menu(event) {\n this.supportMenuTarget.classList.add(\"hidden\");\n this.closeWidgetTarget.classList.add(\"hidden\");\n this.openWidgetTarget.classList.remove(\"hidden\");\n }\n\n clickOutsideClose(event) {\n var support_widget_container = document.querySelector(\".support-widget-container\");\n var trigger_link = event.target.closest(\".open-support-widget\");\n if (!trigger_link && support_widget_container.contains(event.target) === false) {\n this.close_menu();\n }\n }\n\n open_contact(event) {\n this.supportMenuTarget.classList.add(\"hidden\");\n // HelpScout\n window.Beacon('open');\n document.querySelector(\".BeaconContainer\").classList.add(\"mb-12\");\n this.openWidgetTarget.classList.add(\"hidden\");\n\n window.Beacon('prefill', {\n name: event.target.dataset.userName,\n email: event.target.dataset.userEmail\n })\n\n if (event.target.dataset.openContactForm == \"true\") {\n window.Beacon('navigate', '/ask/');\n }\n }\n\n close_widget(event) {\n this.closeWidgetTarget.classList.add(\"hidden\");\n this.openWidgetTarget.classList.remove(\"hidden\");\n\n // Helpscout\n window.Beacon('close');\n document.querySelector(\".BeaconContainer\").classList.add(\"mb-12\");\n if (this.hasOpenWidgetTarget) {\n this.openWidgetTarget.classList.remove(\"hidden\");\n }\n }\n\n report_message(event) {\n var report_message_link = event.target.closest(\".report-message-link\");\n var report_message_modal = report_message_link.closest(\".modal\");\n\n // Close and remove the modal\n report_message_modal.remove();\n\n // Open the HelpScout beacon\n window.Beacon('open');\n document.querySelector(\".BeaconContainer\").classList.add(\"mb-12\");\n\n // Prefill the contact form\n window.Beacon('prefill', {\n name: report_message_link.dataset.userName,\n email: report_message_link.dataset.userEmail,\n subject: \"Reporting inappropriate content on Message ID: \" + report_message_link.dataset.messageId,\n text: \"I'd like to report this message (reference ID: \" + report_message_link.dataset.messageId + \") as inappropriate.\"\n })\n\n // Navigate the beacon to the contact form\n window.Beacon('navigate', '/ask/message/');\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n\n static targets = [\"tab\", \"panel\"]\n\n connect() {\n }\n\n toggle(event) {\n var selected_tab = event.target.closest(\".tab\");\n var selected_tab_id = selected_tab.dataset.tabId;\n var selected_panel = this.element.querySelector(\".panel[data-panel-id='\" + selected_tab_id + \"']\");\n\n // Toggle tabs\n for (let tab of this.tabTargets) {\n tab.classList.remove(\"active\");\n }\n if (selected_tab.classList.contains(\"active\")) {\n selected_tab.classList.remove(\"active\");\n } else {\n selected_tab.classList.add(\"active\");\n }\n\n // Toggle panels\n for (let panel of this.panelTargets) {\n panel.classList.add(\"hidden\");\n }\n selected_panel.classList.remove(\"hidden\");\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"editTagForm\", \"tagLink\"];\n\n cancelEdit(event) {\n this.editTagFormTarget.parentNode.removeChild(this.editTagFormTarget);\n this.tagLinkTarget.classList.remove(\"hidden\");\n\n var edit_tag_button = this.element.querySelector(\".edit-tag-button\");\n if (edit_tag_button) {\n edit_tag_button.classList.remove(\"hidden\");\n }\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"newTagButton\", \"createTagForm\"];\n\n connect() {\n }\n\n cancelCreate(event) {\n this.createTagFormTarget.remove();\n this.newTagButtonTarget.classList.remove(\"hidden\");\n }\n\n}","import {Controller} from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"filterToggle\"]\n\n connect() {\n this.openTaskModal() //open task modal when url has task_id params\n }\n\n openTaskModal() {\n var currentPath = window.location.href\n if (currentPath.includes(\"?task_id=\")) {\n var taskId = currentPath.split(\"?task_id=\")[1]\n if (taskId) {\n var taskElement = this.element.querySelector(\".task-\" + taskId)\n if (taskElement) {\n taskElement.querySelector('.edit_task_modal')?.click();\n }\n }\n }\n }\n\n filterTasks(event) {\n const email = this.filterToggleTarget.dataset.currentUserEmail;\n const currentUrl = window.location.href;\n const params = new URLSearchParams(currentUrl.split('?')[1]);\n\n this.filterToggleTargets.forEach((target) => {\n const filterType = target.getAttribute('data-task-filter');\n const isChecked = target.querySelector('input').value === 'true';\n\n if (filterType === 'my_tasks') {\n if (isChecked) {\n params.set('email', email);\n } else {\n params.delete('email');\n }\n } else {\n if (isChecked || filterType === 'incomplete') {\n params.set(filterType, isChecked);\n } else {\n params.delete(filterType);\n }\n }\n });\n\n const filteredAppliedUrl = `${currentUrl.split('?')[0]}?${params.toString()}`;\n window.location.href = filteredAppliedUrl;\n }\n\n clearUserAssignment(event) {\n var clearButton = event.target.closest('.clear-user-assignment')\n document.querySelectorAll('.task-assign-user-field').forEach((field) => field.value = null );\n var user_id = clearButton.dataset.userId;\n document.querySelectorAll('#task_default_user_hidden_field').forEach((field) => field.value = user_id );\n }\n\n unassignTaskUser(event){\n var userElement = event.target.closest('.default-user-details')\n var userHiddenField = userElement.querySelector('#task_default_user_hidden_field')\n var userEmailField = this.element.querySelectorAll('.task-assign-user-field')\n userEmailField.forEach((field) => field.focus() );\n if (userHiddenField){\n userHiddenField.value = null\n }\n }\n}","import { Controller } from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\"newTaskButton\"];\n static values = {\n formType: String,\n fromEdit: Boolean\n };\n\n connect() {\n document.addEventListener(\"DOMContentLoaded\", function () {\n var forms = document.querySelectorAll(\n this.formTypeValue === \"task_template\" ? \".task-template-form\" : \".task-form\"\n );\n forms.forEach((form) => {\n const titleField = form.querySelector(\".task-title-field\");\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n titleField.focus();\n observer.disconnect();\n }\n });\n });\n\n observer.observe(titleField);\n });\n });\n }\n\n submitTaskOrTaskTemplate(event) {\n event.preventDefault();\n var form = event.target.closest(this.formTypeValue === \"task_template\" ? \".task-template-form\" : \".task-form\");\n var uniqueId = this.generateRandomCode();\n this.createTaskOrTaskTemplate(form, uniqueId);\n }\n\n createTaskOrTaskTemplate(form, uniqueId) {\n var errorContainer = form.querySelector(\".error-explanation\");\n var titleElement = document.createElement(\"div\");\n titleElement.classList.add(\"task-container\", `task-container-${uniqueId}`);\n titleElement.setAttribute(\"data-action\", \"click->tasks--task-creation#revealTaskOrTaskTemplateForm\");\n titleElement.setAttribute(\"data-task-id\", `${uniqueId}`);\n\n var title = form.querySelector(\".task-title-field\").value;\n form.id = `task-${uniqueId}`;\n var task_description = form.querySelector(\".task-description-field\").value;\n if (title) {\n errorContainer.innerHTML = \"\";\n\n const renderTasksPartial = (title, task_description) => {\n const tasksPartial = document.createElement(\"div\");\n tasksPartial.classList.add(\"flex\", \"items-start\", \"space-x-4\", \"py-6\");\n\n const checkboxDiv = document.createElement(\"div\");\n checkboxDiv.classList.add(\"relative\", \"top-3px\");\n\n const checkbox = document.createElement(\"i\");\n checkbox.classList.add(\"fa-regular\", \"text-4xl\", \"fa-square\", \"text-gray-400\");\n checkboxDiv.appendChild(checkbox);\n\n const taskContentDiv = document.createElement(\"div\");\n taskContentDiv.classList.add(\"flex-1\", \"space-y-1\");\n const taskTitle = document.createElement(\"div\");\n\n taskTitle.classList.add(\n \"text-xl\",\n \"font-medium\",\n `task-title-${uniqueId}`,\n \"relative\",\n \"top-2px\",\n \"lg:top-4px\"\n );\n taskTitle.textContent = title;\n\n const taskDescription = document.createElement(\"div\");\n taskDescription.classList.add(\"text-base\", \"text-gray-500\");\n if (task_description) {\n taskDescription.innerHTML = truncateText(task_description);\n }\n\n const unsavedChanges = document.createElement(\"div\");\n unsavedChanges.classList.add(\n \"italic\",\n \"text-sm\",\n \"bg-secondary-200\",\n \"px-2\",\n \"py-1\",\n \"rounded-md\",\n \"text-secondary-600\",\n \"font-medium\",\n \"inline-block\"\n );\n unsavedChanges.innerHTML = this.formTypeValue === \"task_template\" ? \"Update message template to save this task\" : \"Update message to save this task\";\n\n var removeButton = document.createElement(\"div\");\n removeButton.classList.add(\"task-remove-button\", \"flex\", \"items-end\", \"space-x-4\", \"relative\", \"top-2px\");\n removeButton.setAttribute(\"data-action\", \"click->tasks--task-creation#removeTaskOrTaskTemplate\");\n removeButton.setAttribute(\"data-task-id\", `${uniqueId}`);\n removeButton.innerHTML =\n '';\n\n taskContentDiv.appendChild(taskTitle);\n taskContentDiv.appendChild(taskDescription);\n if (this.fromEditValue === true) taskContentDiv.appendChild(unsavedChanges);\n\n tasksPartial.appendChild(checkboxDiv);\n tasksPartial.appendChild(taskContentDiv);\n\n tasksPartial.appendChild(removeButton);\n\n return tasksPartial;\n };\n\n function removeDivAndBr(description) {\n return description.replace(/<\\/?div>/g, \"\").replace(/<\\/?br>/g, \" \");\n }\n\n function truncateText(text, maxLength = 83) {\n const description = removeDivAndBr(text);\n if (description.length > maxLength) {\n return description.substring(0, maxLength) + \"...\";\n } else {\n return description;\n }\n }\n\n titleElement.innerHTML = renderTasksPartial(title, task_description).outerHTML;\n form.classList.add(\"hidden\");\n this.element.querySelector(\".tasks-display\").insertAdjacentHTML(\"beforeend\", titleElement.outerHTML);\n this.revealNewButton();\n } else {\n errorContainer.innerHTML = \"
Title can't be blank
\";\n }\n }\n\n cloneTaskOrTaskTemplateForm(event) {\n event.preventDefault();\n var originalElement =\n this.formTypeValue === \"task_template\"\n ? document.querySelector(\".task-form-clone .task-template-form\")\n : document.querySelector(\".task-form-clone .task-form\");\n\n var createTaskForm = this.element.querySelector(\".create-task-form\");\n var taskForm = document.querySelector(\".task-form-clone\");\n var cloneIndex = taskForm.dataset.nestedAttributeIndex;\n var messageTaskOrder = taskForm.dataset.messageTaskOrder;\n\n if (createTaskForm) {\n const clone = originalElement.cloneNode(true);\n\n clone.classList.remove(\"hidden\");\n clone.querySelectorAll(\"input, textarea, select\").forEach((input) => {\n input.id = input.id.replace(/0/g, `${cloneIndex}`);\n input.name = input.name.replace(/\\[0\\]/g, `[${cloneIndex}]`);\n });\n\n var field_name = this.formTypeValue === \"task_template\" ? \"_trix_input_task_template\" : \"_trix_input_task\";\n\n clone.querySelectorAll(\"trix-editor\").forEach((editor) => {\n editor.id = editor.id.replace(/0/g, `${cloneIndex}`);\n editor.setAttribute(\"input\", `${editor.id}${field_name}`);\n });\n\n if (messageTaskOrder) {\n var messageTaskOrderInput = clone.querySelector(`#message_tasks_attributes_${cloneIndex}_message_task_order`);\n if (messageTaskOrderInput) {\n messageTaskOrderInput.value = Number(messageTaskOrder) + 1;\n }\n taskForm.dataset.messageTaskOrder = Number(taskForm.dataset.messageTaskOrder) + 1;\n }\n createTaskForm.appendChild(clone);\n clone.querySelector(\".task-title-field\").focus();\n taskForm.dataset.nestedAttributeIndex = Number(taskForm.dataset.nestedAttributeIndex) + 1;\n }\n }\n\n revealTaskOrTaskTemplateForm(event) {\n var taskID = event.target.closest(\".task-container\").dataset.taskId;\n var titleElement = this.element.querySelector(\".task-container-\" + taskID);\n var taskTitle = this.element.querySelector(\".task-title-\" + taskID).innerText;\n if (taskTitle) {\n var taskForm = this.element.querySelector(\"#task-\" + taskID);\n taskForm.classList.remove(\"hidden\");\n titleElement.remove();\n }\n this.revealNewButton();\n this.hideAllForms(event);\n }\n\n removeTaskOrTaskTemplate(event) {\n var removeButton = event.target.closest(\".task-remove-button\");\n var taskID = removeButton.dataset.taskId;\n var taskTitle = this.element.querySelector(\".task-title-\" + taskID);\n var titleElement = this.element.querySelector(\".task-container-\" + taskID);\n if (titleElement) {\n var taskForm = this.element.querySelector(\"#task-\" + taskID);\n taskForm.remove();\n titleElement.remove();\n }\n }\n\n validateDueDays(event) {\n var dueDays = event.target.value;\n // remove all non-numeric characters if there are any\n if (dueDays) {\n var regex = /^[0-9]+$/;\n if (!regex.test(dueDays)) {\n dueDays = dueDays.replace(/[^0-9]/g, \"\");\n event.target.value = dueDays;\n }\n }\n }\n\n assignUser(event) {\n var userEmail = event.target.classList.contains(\".contact-result-display\")\n ? event.target.dataset.userEmail\n : event.target.closest(\".contact-result-display\").dataset.userEmail;\n\n var form = event.target.closest(\".task-form\") || event.target.closest(\"#task-index-new-task-form\");\n var field = form?.querySelector(\".task-assign-user-field\");\n if (field) field.value = userEmail;\n this.element.querySelector(\".contacts-search-results\").remove();\n this.element\n .querySelectorAll('[data-search-objects-target=\"filteredList\"]')\n .forEach((element) => element.classList.add(\"hidden\"));\n }\n\n revealNewButton(event) {\n setTimeout(() => {\n var forms = Array.from(\n this.element.querySelectorAll(this.formTypeValue === \"task_template\" ? \".task-template-form\" : \".task-form\")\n );\n var allFormsAreHidden = forms.every((form) => form.classList.contains(\"hidden\"));\n if (this.hasNewTaskButtonTarget && allFormsAreHidden) this.newTaskButtonTarget.classList.remove(\"hidden\");\n if (this.hasNewTaskButtonTarget && !allFormsAreHidden) this.newTaskButtonTarget.classList.add(\"hidden\");\n }, 0);\n }\n\n hideAllForms(event) {\n var taskUniqueId =\n event.target.querySelector(\".task-container\")?.dataset.taskId ||\n event.target.closest(\".task-container\")?.dataset.taskId;\n var currentForm =\n event.target.closest(\".task-template\")?.querySelector(\".task-template-form\") ||\n this.element.querySelector(`#task-${taskUniqueId}`);\n if (!currentForm) return;\n var taskTemplates = Array.from(this.element.querySelectorAll(\".task-template\"));\n taskTemplates.forEach((taskTemplate) => {\n var form = taskTemplate.querySelector(\".task-template-form\");\n var toggleable = taskTemplate.querySelector(\".task-template-toggleable-element\");\n if (form === currentForm) return false;\n form.classList.add(\"hidden\");\n toggleable.classList.remove(\"hidden\");\n });\n var forms = Array.from(\n this.element.querySelectorAll(this.formTypeValue === \"task_template\" ? \".task-template-form\" : \".task-form\")\n );\n forms.forEach((form) => {\n if (form === currentForm) return false;\n if (form.classList.contains(\"hidden\")) return false;\n form.classList.add(\"hidden\");\n if (form.id) var uniqueId = form.id.split(\"task-\")[1];\n if (uniqueId) {\n this.createTaskOrTaskTemplate(form, uniqueId);\n } else {\n form.remove();\n }\n });\n }\n\n generateRandomCode() {\n const crypto = window.crypto;\n if (crypto && crypto.getRandomValues) {\n return crypto.getRandomValues(new Uint32Array(1))[0].toString(36);\n }\n return Date.now().toString(36) + Math.random().toString(36).substring(2, 7);\n }\n}\n","import {Controller} from \"stimulus\";\n\nexport default class extends Controller {\n static targets = [\n \"modal\",\n \"modalBox\",\n \"titleContainer\",\n \"title\",\n \"titleForm\",\n \"taskDescription\",\n \"taskDescriptionForm\",\n ];\n\n connect() {\n this.open()\n this.taskDescriptionTargets.forEach((element) => {\n element.querySelectorAll('a').forEach(function (link) {\n link.target = \"_blank\"\n })\n })\n }\n\n open(event) {\n var modal = this.modalTarget;\n modal.classList.remove(\"hidden\");\n modal.classList.add(\"shown\");\n\n var focus_title_field = this.titleContainer;\n if (focus_title_field) {\n this.showTitleForm();\n }\n }\n\n close() {\n this.modalTarget.classList.add(\"hidden\");\n }\n\n // Title form field\n\n showTitleForm() {\n this.titleTarget.classList.add(\"hidden\", \"md:hidden\");\n this.titleFormTarget.classList.remove(\"hidden\", \"md:hidden\");\n this.titleFormTarget.querySelector(\"input[type=text]\").focus();\n }\n\n hideTitleForm(event) {\n if (event.key == \"Tab\" || this.titleContainerTarget.contains(event.target) === false) {\n this.titleTarget.classList.remove(\"hidden\", \"md:hidden\");\n this.titleFormTarget.classList.add(\"hidden\", \"md:hidden\");\n this.titleContainerTarget.querySelector(\".autosave-icon-container\").classList.add(\"hidden\");\n this.titleContainerTarget.querySelector(\".autosave-icon-container .error-icon\").classList.add(\"hidden\");\n }\n }\n\n displayEditDescription(event) {\n event.preventDefault();\n const taskDescription = event.target.closest('.edit-task-description-link')\n taskDescription.classList.add(\"hidden\");\n this.taskDescriptionTarget.classList.add(\"hidden\");\n this.taskDescriptionFormTarget.classList.remove(\"hidden\");\n this.taskDescriptionFormTarget.querySelector(\".form-control\").focus();\n }\n}\n","import {Controller} from \"stimulus\"\n\nexport default class extends Controller {\n\n\n connect() {\n this.updateDirectUploadUrl();\n }\n\n\n updateDirectUploadUrl() {\n const editor = document.getElementsByTagName('trix-editor');\n\n editor.forEach(element => {\n if (element.dataset.directUploadUrl)\n element.dataset.directUploadUrl = element.dataset.directUploadUrl + '?file_attachment=true';\n });\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"toggleable\"]\n\n static values = {\n }\n\n connect() {\n }\n \n toggle(event) {\n var toggleable_elements = this.toggleableTargets;\n\n for (let toggleable_element of toggleable_elements) {\n if (toggleable_element.classList.contains(\"hidden\")) {\n toggleable_element.classList.remove(\"hidden\");\n } else {\n toggleable_element.classList.add(\"hidden\");\n }\n }\n }\n}","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"toggleable\"]\n\n static values = {\n }\n\n connect() {\n }\n \n toggle(event) {\n var toggleable_elements = this.toggleableTargets;\n\n for (let toggleable_element of toggleable_elements) {\n if (toggleable_element.classList.contains(\"hidden\")) {\n toggleable_element.classList.remove(\"hidden\");\n } else {\n toggleable_element.classList.add(\"hidden\");\n }\n }\n }\n}","// This controls all toggle_switch elements (views/shared/components/_toggle_switch.html.erb)\n\n\n// Toggle Switches can be:\n// - A single toggle switch with a hidden field value (true or false)\n// - One of several checkboxes with a checked value of checked or not\n// - A toggle switch without any form field. It just does some other stuff (typically triggers some JS)\n// - It appears like a toggle switch, but it functions like a link. For example, a toggle switch that when clicked, points to upgrade view (using this toggle requires an upgrade)\n\n\n// In some cases a toggle can be \"linked\" to other toggles. For example, when changing one toggle should cause other toggle switches to change too.\n// How to link toggles:\n// - On the toggle that should control other toggles: Specify the ID(s) of other toggle_switch elements that should be linked to this toggle, in the linked_toggle_ids attribute, separated by a space. \n// - Optional: Set the link behavior:\n// - On the toggle that should control other toggles, specify the linked_behavior to be one of these strings:\n// - \"make_false\" (default, you don't need to set this but you can if you want) --> The linked toggles will turn false when this toggle turns false.\n// - \"match\" --> the linked toggles will turn false or true and match the current value of this toggle\n// - \"change\" --> the linked toggles will change to false or true, whatever the opposite of their current value was (but not necessarily match this toggle's value)\n// See an example of linked toggles in _message_views_preferences.html.erb\n\n\n\nimport { Controller } from 'stimulus'\n\nexport default class extends Controller {\n\n static targets = [\"fieldValue\", \n \"checkboxFieldValue\", \n \"toggleContainer\"]\n\n static values = {\n activeBgColor: String,\n inactiveBgColor: String,\n active: Boolean,\n linkedToggles: String,\n linkedBehavior: String,\n disableLinkedWhenFalse: Boolean\n }\n\n connect() {\n if (this.hasFieldValueTarget) { // a non-checkbox field is present\n // If 'active' wasn't explicitely set via the local_variables, then set it based on the value of the field\n this.activeValue = this.fieldValueTarget.value == \"true\";\n } else if (this.hasCheckboxFieldValueTarget) {\n // If a checkbox is present, set this controller's 'active' value to match the checkbox's checked value\n this.activeValue = this.checkboxFieldValueTarget.checked;\n }\n\n this.toggleStyles();\n\n // Listen to changes in linked toggles if any\n if (this.linkedTogglesValue) {\n this.linkedTogglesValue.split(' ').forEach(toggleId => {\n const toggle = document.getElementById(toggleId);\n if (toggle) {\n toggle.addEventListener('change', () => {\n this.updateLinkedToggle(toggle);\n });\n }\n });\n }\n }\n\n toggle(event) {\n if (event.target.getAttribute('type') != 'checkbox') {\n event.preventDefault();\n }\n this.activeValue = !this.activeValue;\n this.toggleStyles();\n this.triggerEvent();\n\n // If the toggle has linked toggles, update them\n if (this.linkedTogglesValue) {\n this.linkedTogglesValue.split(' ').forEach(toggleId => {\n const toggle = document.getElementById(toggleId);\n if (toggle) {\n this.updateLinkedToggle(toggle);\n \n // If we set disable_linked_when_false to true, then fade out the linked toggles and make then unclickable when we turned them to false\n if (this.disableLinkedWhenFalseValue) {\n if (this.activeValue == true) {\n this.enableToggle(toggle);\n } else {\n this.disableToggle(toggle);\n }\n }\n }\n });\n }\n }\n\n updateLinkedToggle(toggle) {\n let toggleSwitchControllerInstance = this.application.getControllerForElementAndIdentifier(toggle, 'toggle-switch');\n\n if (toggleSwitchControllerInstance) {\n let newValue;\n\n switch (this.linkedBehaviorValue) {\n case \"match\":\n newValue = this.activeValue;\n break;\n case \"change\":\n newValue = !toggleSwitchControllerInstance.activeValue;\n break;\n case \"make_false\":\n default:\n if (!this.activeValue) {\n newValue = false;\n } else {\n newValue = toggleSwitchControllerInstance.activeValue;\n }\n break;\n }\n\n toggleSwitchControllerInstance.setValue(newValue);\n }\n }\n\n disableToggle(element) {\n if (!element.classList.contains('active')) {\n element.classList.add('opacity-40', 'cursor-default');\n element.setAttribute('data-action', '');\n }\n }\n\n enableToggle(element) {\n element.classList.remove('opacity-40', 'cursor-default');\n element.setAttribute('data-action', 'click->toggle-switch#toggle touch->toggle-switch#toggle');\n }\n\n\n toggleStyles() {\n let toggle_element = this.element;\n let toggleContainer = this.toggleContainerTarget;\n let activeBgColor = this.activeBgColorValue.split(\" \");\n let inactiveBgColor = this.inactiveBgColorValue.split(\" \");\n\n let state = this.activeValue ? \"active\" : \"inactive\";\n\n if (state === \"active\") {\n if (toggle_element) {\n toggle_element.classList.add(\"active\");\n }\n if (toggleContainer) {\n toggleContainer.classList.add(...activeBgColor);\n toggleContainer.classList.remove(...inactiveBgColor);\n }\n } else {\n if (toggle_element) {\n toggle_element.classList.remove(\"active\");\n }\n if (toggleContainer) {\n toggleContainer.classList.add(...inactiveBgColor); \n toggleContainer.classList.remove(...activeBgColor);\n }\n }\n }\n\n triggerEvent() {\n if (this.hasFieldValueTarget) {\n this.fieldValueTarget.value = this.activeValue.toString();\n this.fieldValueTarget.dispatchEvent(new Event('change'));\n } else if (this.hasCheckboxFieldValueTarget) {\n this.checkboxFieldValueTarget.checked = this.activeValue;\n this.checkboxFieldValueTarget.dispatchEvent(new Event('change'));\n }\n }\n\n setValue(value) {\n this.activeValue = value;\n this.toggleStyles();\n this.triggerEvent();\n }\n}\n","import { Controller } from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['chromeInfo',\n 'firefoxInfo',\n 'safariInfo'\n ];\n\n connect() {\n\n // Browser detection\n const sUsrAg = navigator.userAgent.toLowerCase();\n let isChrome = false;\n let isFirefox = false;\n let isSafari = false;\n let safari_version;\n if(sUsrAg.indexOf('chrome') > -1){\n isChrome = true;\n }\n if(sUsrAg.indexOf('firefox') > -1){\n isFirefox = true;\n }\n if (sUsrAg.indexOf('safari') !== -1 && sUsrAg.indexOf('chrome') === -1) {\n isSafari = true;\n safari_version = sUsrAg.substring(\n sUsrAg.indexOf('version')+8,\n sUsrAg.indexOf('version')+12\n );\n }\n\n if (isChrome) {\n this.chromeInfoTarget.classList.remove(\"hidden\");\n this.firefoxInfoTarget.classList.add(\"hidden\");\n this.safariInfoTarget.classList.add(\"hidden\");\n } else if (isFirefox) {\n this.chromeInfoTarget.classList.add(\"hidden\");\n this.firefoxInfoTarget.classList.remove(\"hidden\");\n this.safariInfoTarget.classList.add(\"hidden\");\n } else if (isSafari) {\n this.chromeInfoTarget.classList.add(\"hidden\");\n this.firefoxInfoTarget.classList.add(\"hidden\");\n this.safariInfoTarget.classList.remove(\"hidden\");\n } else {\n // Assume Chrome\n this.chromeInfoTarget.classList.remove(\"hidden\");\n this.firefoxInfoTarget.classList.add(\"hidden\");\n this.safariInfoTarget.classList.add(\"hidden\");\n }\n\n }\n \n}","import { Controller } from \"stimulus\";\nimport videojs from \"video.js\";\n\nexport default class extends Controller {\n static targets = [\"player\"];\n\n static values = {\n messageID: Number,\n userID: Number,\n type: String,\n };\n\n connect() {\n window.onload = (event) => {\n sessionStorage.removeItem(\"background_image_id\");\n };\n if (this.typeValue == \"audio\") {\n var player = videojs(this.playerTarget, {\n fluid: false,\n fill: true,\n aspectRatio: \"20:3\",\n responsive: true,\n autoplay: false,\n liveui: true,\n featuresPlaybackRate: true,\n playbackRates: [0.5, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5],\n controlBar: {\n volumePanel: { inline: false },\n },\n });\n } else {\n var player = videojs(this.playerTarget, {\n fluid: true,\n responsive: true,\n autoplay: false,\n liveui: true,\n featuresPlaybackRate: true,\n playbackRates: [0.5, 1, 1.25, 1.5, 1.75, 2, 2.25, 2.5],\n controlBar: {\n volumePanel: { inline: false },\n },\n });\n }\n\n if (\n this.data.has(\"duration\") &&\n this.data.has(\"available\") &&\n this.data.get(\"available\") !== \"true\"\n ) {\n var duration = parseInt(this.data.get(\"duration\"));\n player.duration = function () {\n return duration; // the amount of seconds of video\n };\n }\n }\n\n play(event) {\n var registerMessagePlay = event.target.closest(\".message-body\").querySelector(\"#register-message-play\")\n if (registerMessagePlay) {\n registerMessagePlay.click();\n }\n }\n}\n","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [ \"eventToggle\", \"eventsInput\" ]\n\n static values = {\n currentEvents: Array\n }\n\n connect() {\n var event_toggles = this.eventToggleTargets;\n var current_events = this.currentEventsValue;\n\n if (current_events) {\n // This is an existing webhook. Set its current events values:\n for (let event_toggle of event_toggles) {\n var event_name = event_toggle.dataset.eventName;\n if (current_events.includes(event_name)) {\n event_toggle.classList.add(\"active\");\n this.selectOption(event_name);\n } else {\n event_toggle.classList.remove(\"active\");\n this.deSelectOption(event_name);\n }\n }\n } else {\n // This is a new webhook being creating. Set the default events value:\n for (let event_toggle of event_toggles) {\n if (event_toggle.classList.contains(\"active\")) {\n this.selectOption(event_toggle.dataset.eventName);\n }\n }\n }\n \n }\n\n toggleEvent(event) {\n var toggle_container = event.target.closest(\".toggle\");\n var event_name = toggle_container.dataset.eventName;\n if (toggle_container.classList.contains(\"active\")) {\n this.selectOption(event_name);\n } else {\n this.deSelectOption(event_name);\n }\n }\n\n selectOption(option) {\n var select = this.eventsInputTarget;\n select.querySelector(\"option[value='\"+option+\"']\").selected = true;\n }\n\n deSelectOption(option) {\n var select = this.eventsInputTarget;\n select.querySelector(\"option[value='\"+option+\"']\").selected = false;\n }\n\n}","// HOW TO USE:\n\n// TOGGLERS:\n// - Togglers (fields with target 'toggler' applied) are field elements (typically selections, sometimes checkboxes) that, when changed, can show/hide other elements.\n// - Togglers get the data-action=change->workflows--config#toggle\n// - Togglers get a unique data-field-id (it should typically match the field label)\n\n// TOGGLEABLES:\n// - Toggleables (elements with target 'toggleable' applied) are divs that can be shown/hidden as a result of a toggler's value changing. \n// - On the toggleable div, define data-toggle-by-field with value(s) that list all of the toggler field IDs that should control this toggleable's visibility. \n// - Multiple togglers can control one toggleable. List multiple toggler field IDs in the data-toggle-by-field value separated by a single space \" \".\n// - On the toggleable div, define data-show-when-selected-option with the value that must match the toggler's value in order for this toggleable to be shown.\n// - Multiple possible values can cause a toggleable to be shown. List multiple values in the data-show-when-selected-option value separated by a single space \" \".\n\n// TOGGLEABLE CONTENT:\n// - ToggleableContent are addtional pieces of content that use a simple show/hide but aren't triggered via the main toggler/toggleables system above\n\nimport {Controller} from 'stimulus'\n\nexport default class extends Controller {\n static targets = ['submitButton', \n 'toggler', \n 'toggleable',\n 'navItem',\n 'formPanel',\n 'toggleableContent'\n ]\n\n static values = {\n objectType: String\n }\n\n connect() {\n }\n\n navToggle(event) {\n var nav_tab = event.target.closest(\".workflow-form-nav-item\");\n var group_id = nav_tab.dataset.workflowFormGroupId;\n var selectedPanel = this.element.querySelector(\".workflow-form-panel[data-workflow-form-group-id=\"+group_id+\"]\");\n\n // Activate the nav tab\n for(let tab of this.navItemTargets) {\n tab.classList.remove(\"active\");\n }\n nav_tab.classList.add(\"active\");\n\n // Activate the group panel\n for(let panel of this.formPanelTargets) {\n panel.classList.add(\"hidden\");\n }\n selectedPanel.classList.remove(\"hidden\");\n }\n\n navAfterStepTypeSelection(event) {\n var value = event.target.value;\n\n // Make the current tab inactive\n for(let tab of this.navItemTargets) {\n tab.classList.remove(\"active\");\n }\n // Make the current panel inactive\n for(let panel of this.formPanelTargets) {\n panel.classList.add(\"hidden\");\n }\n\n // Activate the tab & panel based on the selected step_type\n if (value == \"email\") {\n \n var email_tab = this.element.querySelector(\".workflow-form-nav-item[data-workflow-form-group-id='compose_email']\");\n var email_panel = this.element.querySelector(\".workflow-form-panel[data-workflow-form-group-id='compose_email']\");\n var first_field = email_panel.querySelector(\"input#workflow_step_step_options_mailer_options_to\");\n email_tab.classList.add(\"active\");\n email_panel.classList.remove(\"hidden\");\n first_field.focus();\n\n } else if (value == \"create_message\") {\n \n var create_message_tab = this.element.querySelector(\".workflow-form-nav-item[data-workflow-form-group-id='message']\");\n var create_message_panel = this.element.querySelector(\".workflow-form-panel[data-workflow-form-group-id='message']\");\n var first_field = create_message_panel.querySelector(\"select#workflow_step_step_options_message_options_message_type\");\n create_message_tab.classList.add(\"active\");\n create_message_panel.classList.remove(\"hidden\");\n first_field.focus();\n\n } else {\n\n var create_message_tab = this.element.querySelector(\".workflow-form-nav-item[data-workflow-form-group-id='step_type']\");\n var create_message_panel = this.element.querySelector(\".workflow-form-panel[data-workflow-form-group-id='step_type']\");\n var first_field = create_message_panel.querySelector(\"select#workflow_step_step_type\");\n create_message_tab.classList.add(\"active\");\n create_message_panel.classList.remove(\"hidden\");\n first_field.focus();\n\n }\n }\n\n toggle(event) {\n var field_id = event.target.dataset.fieldId\n var selected_option = event.target.value\n var toggleables = this.toggleableTargets\n for (let toggleable of toggleables) {\n\n // If the toggled selection field is to determine this field's visibility...\n if (toggleable.dataset.toggleByField.includes(field_id)) {\n\n // If the selected option is the one that reveals this field, show it. Otherwise hide it.\n if (toggleable.dataset.showWhenSelectedOption.includes(selected_option)) {\n toggleable.classList.remove(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n } else {\n // Check to see if this toggleable can be toggled by multiple toggler fields, and if so, check to see if those other togglers have values that should keep this field visible.\n var toggler_field_ids = toggleable.dataset.toggleByField.split(\" \");\n\n if (toggler_field_ids.length > 1) { // If there are multiple toggler fields that control this toggleable...\n\n for (let toggler of this.togglerTargets) {\n\n // Loop through all of the togglers and for each...\n // Check to see if:\n // 1. This toggler isn't the same toggler that the user just changed\n // 2. This toggler's value isn't null nor empty (as might be the case when a selection option has no value)\n // 3. This toggler's field ID is one of the togglers that should control this toggleable's visibility\n // 4. This toggler's value does match the value that should keep this toggleable visible\n if ((toggler.dataset.fieldId !== field_id) && ((toggler.value !== null && toggler.value !== \"\") && toggler_field_ids.includes(toggler.dataset.fieldId) && toggleable.dataset.showWhenSelectedOption.includes(toggler.value))) {\n var keep_visible = true;\n }\n }\n }\n\n // Hide the field, unless it should be kept visible\n if (!keep_visible) {\n toggleable.classList.add(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n\n // If this input (likely a checkbox) needs to be turned to false when it is hidden, make it false\n if (toggleable.dataset.falsifyInputWhenHidden == \"true\") {\n // initiate the toggle_switch_controller.js for the toggleable element and then use setValue to set it to false (toggle-switch controller will handle several moving parts for that)\n let linkedToggleInstance = this.application.getControllerForElementAndIdentifier(toggleable, 'toggle-switch');\n linkedToggleInstance.setValue(false);\n }\n }\n\n }\n }\n }\n }\n\n changeTriggerToMessagePosted(event) {\n // When trigger_event is changed to message_posted, there are several fields we must hide, and these hidings must override toggles that happened via the toggle action.\n\n var selected_option = event.target.value;\n var cancel_event_by = this.element.querySelector(\".cancel-event-by\");\n var cancel_events_nav_item = this.element.querySelector(\".workflow-form-nav-item[data-workflow-form-group-id='cancel_events']\");\n var cancel_event_by_emails = this.element.querySelector(\".cancel-event-by-emails\");\n var toggle_messages_in_this_thread = this.element.querySelector(\".toggle-messages-in-this-thread\");\n\n // If we've changed trigger_event to message_posted...\n if (selected_option == \"message_posted\") {\n\n // Hide .toggle-messages-in-this-thread checkbox\n if (toggle_messages_in_this_thread && !toggle_messages_in_this_thread.classList.contains(\"hidden\")) {\n toggle_messages_in_this_thread.classList.add(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n }\n\n\n // Hide the cancel-events nav item\n if (this.objectTypeValue == \"conversation\") {\n // Hide the cancel-event-by and cancel-event-by-emails fields\n if (!cancel_event_by.classList.contains(\"hidden\")) {\n cancel_event_by.classList.add(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n cancel_event_by_emails.classList.add(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n }\n\n // Hide the cancel events nav item\n cancel_events_nav_item.classList.add(\"hidden\");\n }\n }\n }\n\n toggleContent(event) {\n var toggle_content_id = event.target.dataset.contentToToggle;\n var toggleable_content = this.element.querySelector(\"#\"+toggle_content_id);\n if (toggleable_content) {\n if (toggleable_content.classList.contains(\"hidden\")) {\n toggleable_content.classList.remove(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n } else {\n toggleable_content.classList.add(\"hidden\", \"sm:hidden\", \"md:hidden\", \"lg:hidden\");\n }\n }\n }\n\n toggleTriggerOnThreadedMessages(event) {\n // Used to toggle the checkboxes for \"Which message(s) should trigger this workflow?\". When \"Only messages within this message's thread could trigger this workflow\" is true, the other checkboxes must be false.\n \n var field_id = event.target.dataset.fieldId;\n var toggled_to_value = event.target.value;\n var trigger_on_this_message_thread = this.element.querySelector(\"#trigger_on_this_message_thread\");\n var trigger_on_top_messages = this.element.querySelector(\"#trigger_on_top_messages\");\n var trigger_on_threaded_messages = this.element.querySelector(\"#trigger_on_threaded_messages\");\n\n if (field_id == \"trigger_on_this_message_thread\" && toggled_to_value == \"true\") {\n // trigger_on_this_message_thread was changed to true, so turn the other 2 fields to false.\n trigger_on_top_messages.querySelector(\"input\").value = false;\n trigger_on_top_messages.dataset.toggleSwitchActiveValue = false;\n trigger_on_top_messages.classList.remove(\"active\");\n trigger_on_threaded_messages.querySelector(\"input\").value = false;\n trigger_on_threaded_messages.dataset.toggleSwitchActiveValue = false;\n trigger_on_threaded_messages.classList.remove(\"active\");\n trigger_on_top_messages.querySelector(\"button\").classList.remove('bg-primary-600')\n trigger_on_top_messages.querySelector(\"button\").classList.add('bg-gray-200')\n trigger_on_threaded_messages.querySelector(\"button\").classList.remove('bg-primary-600')\n trigger_on_threaded_messages.querySelector(\"button\").classList.add('bg-gray-200')\n } else if (field_id != \"trigger_on_this_message_thread\" && toggled_to_value == \"true\") {\n // Either of the other fields (not trigger_on_this_message_thread) were changed to true, so change trigger_on_this_message_thread to false.\n trigger_on_this_message_thread.querySelector(\"input\").value = false;\n trigger_on_this_message_thread.dataset.toggleSwitchActiveValue = false;\n trigger_on_this_message_thread.classList.remove(\"active\");\n trigger_on_this_message_thread.querySelector(\"button\").classList.remove('bg-primary-600')\n trigger_on_this_message_thread.querySelector(\"button\").classList.add('bg-gray-200')\n }\n\n }\n\n setTriggerEventValue(event) {\n this.triggerEventValue = event.target.value;\n }\n\n revealSubmitBtn(event) {\n var changed_field = event.target;\n if (changed_field.dataset.fieldId === \"trigger_event\" && changed_field.value === \"unselected\") {\n this.submitButtonTarget.classList.add(\"hidden\");\n this.submitButtonTarget.disabled = true;\n } else {\n this.submitButtonTarget.classList.remove(\"hidden\");\n this.submitButtonTarget.disabled = false;\n }\n }\n\n cancelWorkflowForm(event) {\n var workflow = event.target.closest(\".workflow-container\").querySelector(\".workflow\");\n var workflow_trigger = workflow.querySelector(\".workflow-trigger\");\n var add_step_button = workflow.querySelector(\".add-workflow-step-button\");\n var last_step_dashed_line = workflow_container.querySelector(\".last-workflow-step-dashed-line\");\n var main_workflow_line = workflow_container.querySelector(\".main-workflow-line\");\n\n // Show the workflow trigger info\n workflow_trigger.classList.remove(\"hidden\");\n \n // Remove the edit workflow form\n this.element.remove();\n\n // Show the add step button\n add_step_button.classList.remove(\"hidden\");\n\n // Show the main workflow line (it would be hidden if there are no steps yet)\n main_workflow_line.classList.remove(\"hidden\");\n\n if (last_step_dashed_line) {\n // Show the dashed line on the last step\n last_step_dashed_line.classList.remove(\"hidden\");\n }\n }\n\n cancelEditWorkflowStepForm(event) {\n var workflow_step_container = event.target.closest(\".workflow-step-container\");\n var workflow_container = workflow_step_container.closest(\".workflow\");\n var add_step_button = workflow_container.querySelector(\".add-workflow-step-button\");\n var last_step_dashed_line = workflow_container.querySelector(\".last-workflow-step-dashed-line\");\n var workflow_step_meta = workflow_step_container.querySelector(\".workflow-step-meta\");\n var workflow_step_content = workflow_step_container.querySelector(\".workflow-step-content\");\n\n // Show the workflow step content\n workflow_step_content.classList.remove(\"hidden\");\n\n // Show the workflow step meta (delay desc, settings, etc)\n workflow_step_meta.classList.remove(\"hidden\");\n\n // Show the add step button\n add_step_button.classList.remove(\"hidden\");\n\n // Show the dashed line on the last step\n last_step_dashed_line.classList.remove(\"hidden\");\n\n // Remove the form element from DOM\n this.element.remove();\n }\n\n cancelNewWorkflowStepForm(event) {\n var workflow_container = event.target.closest(\".workflow\");\n var new_step = workflow_container.querySelector(\".new-workflow-step\");\n var add_step_button = workflow_container.querySelector(\".add-workflow-step-button\");\n\n new_step.remove();\n add_step_button.classList.remove(\"hidden\");\n }\n\n}","import { Controller } from \"stimulus\"\n\nexport default class extends Controller {\n static targets = [\"\"];\n\n connect() {\n\n }\n\n toggleSteps(event) {\n var workflow_run = event.target.closest(\".workflow-run\");\n var step_jobs = workflow_run.querySelector(\".step-jobs\");\n\n if (step_jobs.classList.contains(\"hidden\")) {\n step_jobs.classList.remove(\"hidden\");\n } else {\n step_jobs.classList.add(\"hidden\");\n }\n }\n\n}","export function getMetaValue(name) {\n const element = findElement(document.head, `meta[name=\"${name}\"]`);\n if (element) {\n return element.getAttribute(\"content\");\n }\n}\n\nexport function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n return root.querySelector(selector);\n}\n\nexport function toArray(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n}\n\nexport function removeElement(el) {\n if (el && el.parentNode) {\n el.parentNode.removeChild(el);\n }\n}\n\nexport function insertAfter(el, referenceNode) {\n return referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);\n}\n\nexport function getCookieValue(key) {\n // Split the cookie string into individual cookie key-value pairs\n var cookies = document.cookie.split(';');\n\n // Iterate through the cookies to find the one with the specified key\n for (var i = 0; i < cookies.length; i++) {\n var cookie = cookies[i].trim();\n\n // Check if the cookie starts with the specified key\n if (cookie.indexOf(key + '=') === 0) {\n // Extract and return the cookie value\n return cookie.substring(key.length + 1);\n }\n }\n\n // Return null if the cookie key was not found\n return null;\n}\n\nexport function debounce(func, delay) {\n let timeoutId;\n return function(...args) {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => {\n func.apply(this, args);\n }, delay);\n };\n}","import Trix from \"trix\"\n\nlet lang = Trix.config.lang;\nTrix.config.toolbar = {\n getDefaultHTML: function() {\n return `\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n \n
\n
\n
\n `\n },\n\n getLinkToolHTML: function () {\n return ` \n
\n \n \n \n
\n
\n
\n \n
\n
`\n }\n}\n\nclass EmbedController {\n constructor(element) {\n this.patterns = undefined\n this.element = element\n this.editor = element.editor\n this.toolbar = element.toolbarElement\n this.hrefElement = this.toolbar.querySelector(\"[data-trix-input][name='href']\")\n this.embedContainerElement = this.toolbar.querySelector(\"[data-behavior='embed_container']\")\n this.embedElement = this.toolbar.querySelector(\"[data-behavior='embed_url']\")\n\n this.reset()\n this.installEventHandlers()\n }\n\n installEventHandlers() {\n this.hrefElement.addEventListener(\"input\", this.didInput.bind(this))\n this.hrefElement.addEventListener(\"focusin\", this.didInput.bind(this))\n if(this.embedElement) {\n this.embedElement.addEventListener(\"click\", this.embed.bind(this))\n }\n }\n\n didInput(event) {\n let value = event.target.value.trim()\n\n // Load patterns from server so we can dynamically update them\n if (this.patterns === undefined) {\n this.loadPatterns(value)\n\n // When patterns are loaded, we can just fetch the embed code\n } else if (this.match(value)) {\n this.fetch(value)\n\n // No embed code, just reset the form\n } else {\n this.reset()\n }\n }\n\n loadPatterns(value) {\n Rails.ajax({\n type: \"get\",\n url: \"/action_text/embeds/patterns.json\",\n success: (response) => {\n this.patterns = response.map(pattern => new RegExp(pattern.source, pattern.options))\n if (this.match(value)) {\n this.fetch(value)\n }\n }\n })\n }\n\n // Checks if a url matches an embed code format\n match(value) {\n return this.patterns.some(regex => regex.test(value))\n }\n\n fetch(value) {\n Rails.ajax({\n url: `/action_text/embeds?id=${encodeURIComponent(value)}`,\n type: 'post',\n error: this.reset.bind(this),\n success: this.showEmbed.bind(this)\n })\n }\n\n embed(event) {\n if (this.currentEmbed == null) { return }\n\n let attachment = new Trix.Attachment(this.currentEmbed)\n this.editor.insertAttachment(attachment)\n this.element.focus()\n }\n\n showEmbed(embed) {\n this.currentEmbed = embed\n if(this.embedContainerElement) {\n this.embedContainerElement.style.display = \"block\"\n }\n }\n\n reset() {\n if(this.embedContainerElement) {\n this.embedContainerElement.style.display = \"none\"\n }\n this.currentEmbed = null\n }\n}\ndocument.addEventListener(\"trix-initialize\", function(event) {\n new EmbedController(event.target)\n})\n","addEventListener(\"direct-upload:initialize\", event => {\n const { target, detail } = event\n const { id, file } = detail\n target.insertAdjacentHTML(\"beforebegin\", `\n
\n
\n ${file.name}\n
\n `)\n})\n\naddEventListener(\"direct-upload:start\", event => {\n const { id } = event.detail\n const element = document.getElementById(`direct-upload-${id}`)\n element.classList.remove(\"direct-upload--pending\")\n})\n\naddEventListener(\"direct-upload:progress\", event => {\n const { id, progress } = event.detail\n const progressElement = document.getElementById(`direct-upload-progress-${id}`)\n progressElement.style.width = `${progress}%`\n})\n\naddEventListener(\"direct-upload:error\", event => {\n event.preventDefault()\n const { id, error } = event.detail\n const element = document.getElementById(`direct-upload-${id}`)\n element.classList.add(\"direct-upload--error\")\n element.setAttribute(\"title\", error)\n})\n\naddEventListener(\"direct-upload:end\", event => {\n const { id } = event.detail\n const element = document.getElementById(`direct-upload-${id}`)\n element.classList.add(\"direct-upload--complete\")\n})\n","const Emojis = {\n \"emojis\": [\n {\n \"emoji\": \"๐Ÿ‘\",\n \"description\": \"thumbs up\",\n \"aliases\": [\"+1\", \"thumbsup\"],\n \"tags\": [\"approve\", \"ok\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ‘Ž\",\n \"description\": \"thumbs down\",\n \"aliases\": [\"-1\", \"thumbsdown\"],\n \"tags\": [\"disapprove\", \"bury\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ‘\",\n \"description\": \"clapping hands\",\n \"aliases\": [\"clap\"],\n \"tags\": [\"praise\", \"applause\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ‘‹\",\n \"description\": \"waving hand\",\n \"aliases\": [\"wave\"],\n \"tags\": [\"goodbye\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ™Œ\",\n \"description\": \"raising hands\",\n \"aliases\": [\"raised_hands\"],\n \"tags\": [\"hooray\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ™\",\n \"description\": \"folded hands\",\n \"aliases\": [\"pray\"],\n \"tags\": [\"please\", \"hope\", \"wish\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โ˜๏ธ\",\n \"description\": \"index pointing up\",\n \"aliases\": [\"point_up\"],\n \"tags\": [],\n \"unicode_version\": \"\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿค\",\n \"description\": \"handshake\",\n \"aliases\": [\"handshake\"],\n \"tags\": [\"deal\"],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n },\n {\n \"emoji\": \"โœŒ๏ธ\",\n \"description\": \"victory hand\",\n \"aliases\": [\"v\"],\n \"tags\": [\"victory\", \"peace\"],\n \"unicode_version\": \"\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ‘Œ\",\n \"description\": \"OK hand\",\n \"aliases\": [\"ok_hand\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿค˜\",\n \"description\": \"sign of the horns\",\n \"aliases\": [\"metal\"],\n \"tags\": [],\n \"unicode_version\": \"8.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿค™\",\n \"description\": \"call me hand\",\n \"aliases\": [\"call_me_hand\"],\n \"tags\": [],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n },\n {\n \"emoji\": \"๐Ÿ’ช\",\n \"description\": \"flexed biceps\",\n \"aliases\": [\"muscle\"],\n \"tags\": [\"flex\", \"bicep\", \"strong\", \"workout\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ––\",\n \"description\": \"vulcan salute\",\n \"aliases\": [\"vulcan_salute\"],\n \"tags\": [\"prosper\", \"spock\"],\n \"unicode_version\": \"7.0\",\n \"ios_version\": \"8.3\"\n },\n {\n \"emoji\": \"๐Ÿค\",\n \"description\": \"pinching hand\",\n \"aliases\": [\"pinching_hand\"],\n \"tags\": [],\n \"unicode_version\": \"12.0\",\n \"ios_version\": \"13.0\"\n },\n {\n \"emoji\": \"๐Ÿค›\",\n \"description\": \"left-facing fist\",\n \"aliases\": [\"fist_left\"],\n \"tags\": [],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n },\n {\n \"emoji\": \"๐Ÿซถ\",\n \"description\": \"heart hands\",\n \"aliases\": [\"heart_hands\"],\n \"tags\": [],\n \"unicode_version\": \"14.0\",\n \"ios_version\": \"14.0\"\n },\n {\n \"emoji\": \"๐Ÿ‘€\",\n \"description\": \"eyes\",\n \"aliases\": [\"eyes\"],\n \"tags\": [\"look\", \"see\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ™‚\",\n \"description\": \"slightly smiling face\",\n \"aliases\": [\"slightly_smiling_face\"],\n \"tags\": [],\n \"unicode_version\": \"7.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿ˜Š\",\n \"description\": \"smiling face with smiling eyes\",\n \"aliases\": [\"blush\"],\n \"tags\": [\"proud\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ƒ\",\n \"description\": \"grinning face with big eyes\",\n \"aliases\": [\"smiley\"],\n \"tags\": [\"happy\", \"joy\", \"haha\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿคฃ\",\n \"description\": \"rolling on the floor laughing\",\n \"aliases\": [\"rofl\"],\n \"tags\": [\"lol\", \"laughing\"],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n },\n {\n \"emoji\": \"๐Ÿ˜œ\",\n \"description\": \"winking face with tongue\",\n \"aliases\": [\"stuck_out_tongue_winking_eye\"],\n \"tags\": [\"prank\", \"silly\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ™ƒ\",\n \"description\": \"upside-down face\",\n \"aliases\": [\"upside_down_face\"],\n \"tags\": [],\n \"unicode_version\": \"8.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿค”\",\n \"description\": \"thinking face\",\n \"aliases\": [\"thinking\"],\n \"tags\": [],\n \"unicode_version\": \"8.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿ˜‡\",\n \"description\": \"smiling face with halo\",\n \"aliases\": [\"innocent\"],\n \"tags\": [\"angel\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿคฏ\",\n \"description\": \"exploding head\",\n \"aliases\": [\"exploding_head\"],\n \"tags\": [\"mind\", \"blown\"],\n \"unicode_version\": \"11.0\",\n \"ios_version\": \"12.1\"\n },\n {\n \"emoji\": \"๐Ÿ˜ฌ\",\n \"description\": \"grimacing face\",\n \"aliases\": [\"grimacing\"],\n \"tags\": [],\n \"unicode_version\": \"6.1\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜\",\n \"description\": \"neutral face\",\n \"aliases\": [\"neutral_face\"],\n \"tags\": [\"meh\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ข\",\n \"description\": \"crying face\",\n \"aliases\": [\"cry\"],\n \"tags\": [\"sad\", \"tear\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โ˜น๏ธ\",\n \"description\": \"frowning face\",\n \"aliases\": [\"frowning_face\"],\n \"tags\": [\"sad\", \"upset\"],\n \"unicode_version\": \"7.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿ˜ž\",\n \"description\": \"disappointed face\",\n \"aliases\": [\"disappointed\"],\n \"tags\": [\"sad\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ก\",\n \"description\": \"pouting face\",\n \"aliases\": [\"rage\", \"pout\"],\n \"tags\": [\"angry\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ณ\",\n \"description\": \"flushed face\",\n \"aliases\": [\"flushed\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ฒ\",\n \"description\": \"astonished face\",\n \"aliases\": [\"astonished\"],\n \"tags\": [\"amazed\", \"gasp\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜‰\",\n \"description\": \"winking face\",\n \"aliases\": [\"wink\"],\n \"tags\": [\"flirt\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜\",\n \"description\": \"smiling face with heart-eyes\",\n \"aliases\": [\"heart_eyes\"],\n \"tags\": [\"love\", \"crush\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿคฉ\",\n \"description\": \"star-struck\",\n \"aliases\": [\"star_struck\"],\n \"tags\": [\"eyes\"],\n \"unicode_version\": \"11.0\",\n \"ios_version\": \"12.1\"\n },\n {\n \"emoji\": \"๐Ÿค‘\",\n \"description\": \"money-mouth face\",\n \"aliases\": [\"money_mouth_face\"],\n \"tags\": [\"rich\"],\n \"unicode_version\": \"8.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿค“\",\n \"description\": \"nerd face\",\n \"aliases\": [\"nerd_face\"],\n \"tags\": [\"geek\", \"glasses\"],\n \"unicode_version\": \"8.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿ˜Ž\",\n \"description\": \"smiling face with sunglasses\",\n \"aliases\": [\"sunglasses\"],\n \"tags\": [\"cool\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿฅณ\",\n \"description\": \"partying face\",\n \"aliases\": [\"partying_face\"],\n \"tags\": [\"celebration\", \"birthday\"],\n \"unicode_version\": \"11.0\",\n \"ios_version\": \"12.1\"\n },\n {\n \"emoji\": \"โค๏ธ\",\n \"description\": \"red heart\",\n \"aliases\": [\"heart\"],\n \"tags\": [\"love\"],\n \"unicode_version\": \"\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ–ค\",\n \"description\": \"black heart\",\n \"aliases\": [\"black_heart\"],\n \"tags\": [],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n },\n {\n \"emoji\": \"๐Ÿ’œ\",\n \"description\": \"purple heart\",\n \"aliases\": [\"purple_heart\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ’š\",\n \"description\": \"green heart\",\n \"aliases\": [\"green_heart\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ’›\",\n \"description\": \"yellow heart\",\n \"aliases\": [\"yellow_heart\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿงก\",\n \"description\": \"orange heart\",\n \"aliases\": [\"orange_heart\"],\n \"tags\": [],\n \"unicode_version\": \"11.0\",\n \"ios_version\": \"12.1\"\n },\n {\n \"emoji\": \"๐Ÿ”ฅ\",\n \"description\": \"fire\",\n \"aliases\": [\"fire\"],\n \"tags\": [\"lit\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿš€\",\n \"description\": \"rocket\",\n \"aliases\": [\"rocket\"],\n \"tags\": [\"launch\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ’ฅ\",\n \"description\": \"collision\",\n \"aliases\": [\"boom\", \"collision\"],\n \"tags\": [\"explode\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŽ‰\",\n \"description\": \"party popper\",\n \"aliases\": [\"tada\"],\n \"tags\": [\"hooray\", \"party\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŽ‚\",\n \"description\": \"birthday cake\",\n \"aliases\": [\"birthday\"],\n \"tags\": [\"party\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŒป\",\n \"description\": \"sunflower\",\n \"aliases\": [\"sunflower\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ’ฐ\",\n \"description\": \"money bag\",\n \"aliases\": [\"moneybag\"],\n \"tags\": [\"dollar\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ“ˆ\",\n \"description\": \"chart increasing\",\n \"aliases\": [\"chart_with_upwards_trend\"],\n \"tags\": [\"graph\", \"metrics\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿค–\",\n \"description\": \"robot\",\n \"aliases\": [\"robot_face\"],\n \"tags\": [],\n \"unicode_version\": \"8.0\",\n \"ios_version\": \"9.1\"\n },\n {\n \"emoji\": \"๐Ÿ’ฏ\",\n \"description\": \"hundred points\",\n \"aliases\": [\"100\"],\n \"tags\": [\"score\", \"perfect\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿšจ\",\n \"description\": \"police car light\",\n \"aliases\": [\"rotating_light\"],\n \"tags\": [\"911\", \"emergency\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿšฉ\",\n \"description\": \"triangular flag\",\n \"aliases\": [\"triangular_flag_on_post\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โœ…\",\n \"description\": \"check mark button\",\n \"aliases\": [\"white_check_mark\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โœ”๏ธ\",\n \"description\": \"check mark\",\n \"aliases\": [\"heavy_check_mark\"],\n \"tags\": [],\n \"unicode_version\": \"\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โŽ\",\n \"description\": \"cross mark button\",\n \"aliases\": [\"negative_squared_cross_mark\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โœ–๏ธ\",\n \"description\": \"cross mark\",\n \"aliases\": [\"x\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โ“\",\n \"description\": \"red question mark\",\n \"aliases\": [\"question\"],\n \"tags\": [\"confused\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ“Œ\",\n \"description\": \"pushpin\",\n \"aliases\": [\"pushpin\"],\n \"tags\": [\"location\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿพ\",\n \"description\": \"paw prints\",\n \"aliases\": [\"feet\"],\n \"tags\": [\"pet\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿถ\",\n \"description\": \"dog face\",\n \"aliases\": [\"dog\"],\n \"tags\": [\"pet\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿฆฎ\",\n \"description\": \"guide dog\",\n \"aliases\": [\"guide_dog\"],\n \"tags\": [],\n \"unicode_version\": \"12.0\",\n \"ios_version\": \"13.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ธ\",\n \"description\": \"grinning cat with smiling eyes\",\n \"aliases\": [\"smile_cat\"],\n \"tags\": [],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿˆ\",\n \"description\": \"cat\",\n \"aliases\": [\"cat\"],\n \"tags\": [\"pet\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ˜ป\",\n \"description\": \"smiling cat with heart-eyes\",\n \"aliases\": [\"heart_eyes_cat\"],\n \"tags\": [\"love\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โšก๏ธ\",\n \"description\": \"high voltage\",\n \"aliases\": [\"zap\"],\n \"tags\": [\"electric\"],\n \"unicode_version\": \"5.2\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŒฟ\",\n \"description\": \"herb\",\n \"aliases\": [\"herb\"],\n \"tags\": [\"plant\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŒˆ\",\n \"description\": \"rainbow\",\n \"aliases\": [\"rainbow\"],\n \"tags\": [\"pride\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โ˜€๏ธ\",\n \"description\": \"sun\",\n \"aliases\": [\"sunny\"],\n \"tags\": [\"weather\"],\n \"unicode_version\": \"1.1\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"โ›ท๏ธ\",\n \"description\": \"skier\",\n \"aliases\": [\"skier\"],\n \"tags\": [\"sports\"],\n \"unicode_version\": \"5.2\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ‚\",\n \"description\": \"snowboarder\",\n \"aliases\": [\"snowboarder\"],\n \"tags\": [\"sports\"],\n \"unicode_version\": \"5.2\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŽถ\",\n \"description\": \"musical notes\",\n \"aliases\": [\"notes\"],\n \"tags\": [\"music\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿ•บ\",\n \"description\": \"man dancing\",\n \"aliases\": [\"man_dancing\"],\n \"tags\": [],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n },\n {\n \"emoji\": \"๐Ÿ’ƒ\",\n \"description\": \"woman dancing\",\n \"aliases\": [\"dancer\"],\n \"tags\": [\"party\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŽธ\",\n \"description\": \"guitar\",\n \"aliases\": [\"guitar\"],\n \"tags\": [\"rock\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐ŸŽน\",\n \"description\": \"musical keyboard\",\n \"aliases\": [\"musical_keyboard\"],\n \"tags\": [\"piano\"],\n \"unicode_version\": \"6.0\",\n \"ios_version\": \"6.0\"\n },\n {\n \"emoji\": \"๐Ÿฅ\",\n \"description\": \"drum\",\n \"aliases\": [\"drum\"],\n \"tags\": [],\n \"unicode_version\": \"9.0\",\n \"ios_version\": \"10.2\"\n }\n]\n\n};\nexport { Emojis };\n","document.addEventListener(\"turbolinks:load\", ()=> {\n\n const Forms = {\n init() {\n this.fileInputToggle();\n },\n\n fileInputToggle() {\n const inputs = document.querySelectorAll('.form-file');\n\n inputs.forEach(function(input) {\n const label = input.nextElementSibling,\n labelVal = label.innerHTML;\n\n input.addEventListener('change', function(e) {\n var fileName = '';\n\n if (this.files && this.files.length > 1) {\n fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );\n } else {\n fileName = e.target.value.split( '\\\\' ).pop();\n }\n\n if (fileName) {\n label.querySelector( 'span' ).innerHTML = fileName;\n } else {\n label.innerHTML = labelVal;\n }\n });\n });\n }\n };\n\n Forms.init();\n\n});\n","import Cookies from 'js-cookie'\nimport jstz from 'jstz'\n\n// Rails doesn't support every timezone that Intl supports\nexport function findTimeZone() {\n const oldIntl = window.Intl\n try {\n window.Intl = undefined\n const tz = jstz.determine().name()\n window.Intl = oldIntl\n return tz\n } catch (e) {\n // sometimes (on android) you can't override intl\n return jstz.determine().name()\n }\n}\n\ndocument.addEventListener(\"turbolinks:load\", () => {\n Cookies.set(\"browser_time_zone\", findTimeZone(), { expires: 365, path: \"/\" })\n})\n","import tippy from \"tippy.js\"\nimport ClipboardJS from \"clipboard\"\n\nfunction clipboardTooltip(element, message) {\n tippy(element, {\n content: message,\n showOnCreate: true,\n onHidden: (instance) => {\n instance.destroy()\n }\n });\n}\n\ndocument.addEventListener(\"turbolinks:load\", () => {\n tippy(document.querySelectorAll(\"[data-tippy-content]\"))\n\n // Clipboard buttons should show tooltip showing result\n let clipboard = new ClipboardJS(\"[data-clipboard-text]\")\n clipboard.on(\"success\", (e) => { clipboardTooltip(e.trigger, \"Copied!\") })\n clipboard.on(\"error\", (e) => { clipboardTooltip(e.trigger, \"Failed!\") })\n})\n"],"names":["webpackEmptyContext","req","e","Error","code","keys","resolve","id","module","exports","map","webpackContext","webpackContextResolve","__webpack_require__","o","Object","channels","require","forEach","timer","_default","_Controller","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","key","value","this","hassubmitButtonTarget","submitButtonTarget","classList","add","setAttribute","clearTimeout","setTimeout","getResultAndUpdate","bind","button","_this","accountSlug","inputTarget","params","URLSearchParams","slug","onboarding","onboardingValue","fetch","concat","accountId","method","headers","then","response","json","data","values","JSON","parse","slugResponseDiv","element","slugResponseTarget","remove","innerHTML","status","_step","_iterator","_createForOfIteratorHelper","errors","s","n","done","error","errorItem","document","createElement","appendChild","err","f","successMessage","success","responsePresentValue","removeAttribute","url","URL","window","location","href","payingSubscriptionValue","searchParams","get","console","log","onboardingSlugChangedTarget","onboardingSlugUnchangedTarget","onboardingSlugCanChangeTarget","onboardingSlugCanchangeTarget","Controller","targets","responsePresent","Boolean","payingSubscription","event","stopVideos","current_tab_position","target","closest","dataset","currentTabPosition","next_tab_position","parseInt","next_tab","querySelector","click","prev_tab_position","prev_tab","videos","querySelectorAll","Array","prototype","call","video","tagName","toLowerCase","pause","src","includes","Date","getTime","shown_modal","minimize","modal_container","contains","tip_relaunch_onboarding","hide_tip_relaunch_onboarding","localStorage","getItem","link","account_slug","accountSlugValue","body","setItem","autolaunch","String","createConsumer","consumer","connection","isActive","reopen","togglesTeamMembersCount","teamMembersAssignmentTarget","checkedCount","teamMembersToggleSwitchTargets","toggle","appointmentTypeRedirectTypeTarget","appointmentTypeConfirmationContentTarget","conversationContent","customUrlField","appointmentTypeLocationPreferenceTarget","appointmentTypeLocationTarget","appointmentTypeId","selectATimeButton","canBookAppointment","messageId","viewerEmail","appointmentOfferBlock","messageBookingContentPartial","spinner","className","outerHTML","Rails","ajax","type","hasAppointmentOfferSelectFieldTarget","appointmentTypeSelect","appointmentOfferSelectFieldTarget","hidden","selectable_time","availability_block_id","availabilityBlockId","date","start_time","startTime","end_time","endTime","timezone","actual_start_datetime","actualStartDatetime","actual_end_datetime","actualEndDatetime","message_id","selectedTimeInputTarget","selectedDateTarget","selectedStartTimeTarget","selectedEndTimeTarget","selectedTimezoneTarget","startDatetimeFieldTarget","endDatetimeFieldTarget","messageIdFieldTarget","selectTimeContainerTarget","bookingQuestionsTarget","bookingQuestion","firstInput","focus","updateAppointment","appointmentChangeReasonFieldTarget","selectedTimeContainerTarget","allRequiredFieldsValid","answerFieldTargets","filter","field","getAttribute","every","trim","disabled","preventDefault","update_appointment","bookingPageUiContainerTarget","scrollIntoView","behavior","block","timeout","duration","hasStatusOnLoadValue","hasStatusTarget","statusTarget","statusOnLoadValue","savedTarget","errorTarget","_this2","container","autosaveid","loading_icon","saved_icon","error_icon","fire","formTarget","loadingTarget","statusOnLoad","form","addTimeBlockButton","availabilityEditBlock","availabilityBlock","clearSelectionLinkTarget","currently_selected_image","clicked_image","controlsBtn","clearSelection","style","backgroundImage","slice","sessionStorage","backgroundImageId","imageId","background_image_id","stringify","credentials","text","user_id","account_id","userId","_this3","braintree","dropin","create","authorization","dropinTarget","paypal","flow","clientCreated","instance","requestPaymentMethod","paymentMethod","payload","addHiddenField","nonce","name","hiddenInput","hasTruncatedMenuTarget","_truncateMenu$classLi","_truncateMenuContent$","truncateMenu","truncatedMenuTarget","truncateMenuContent","truncatedMenuContentTarget","truncateMenuLinks","truncatedLinkTargets","truncateToggle","truncateToggleTarget","truncatedMenuClasses","split","nonTruncatedMenuClasses","truncatedMenuContentClasses","nonTruncatedMenuContentClasses","truncatedLinkClasses","nonTruncatedLinkClasses","_toConsumableArray","_link2$classList","truncateAtWidth","truncateAtSizeValue","innerWidth","_truncateMenu$classLi2","_truncateMenu$classLi3","_truncateMenuContent$2","_truncateMenuContent$3","truncateValue","_step2","_iterator2","_link$classList","_link$classList2","_truncateMenu$classLi4","_truncateMenu$classLi5","_truncateMenuContent$4","_truncateMenuContent$5","_step3","_iterator3","_link$classList3","_link$classList4","truncateAtSize","truncate","allCheckboxesSelected","unselectAll","selectAll","selectAllTarget","checked","indeterminate","unselected","selected","noCheckboxesSelected","checkboxTargets","selectedOption","googleCalendarIdFieldTarget","options","selectedIndex","calendarNameFieldTarget","clonedElement","elementToCloneTargets","cloneNode","input","clonesContainerTarget","insertAdjacentElement","pluralizeElement","pluralizeMeTarget","innerText","endsWith","autocloseValue","removeMeTarget","autoclose","storedColorsString","storedColorsVersion","defaultColors","accountIdValue","account_colors_version","accountColorsVersionValue","respondent","respondentValue","colors_json","setCss","fetchAndApplyAccountColors","getDefaultColors","setAccountLocalStorage","brand_id","search","lastViewedAccountColors","substring","length","undefined","ok","root","documentElement","color","color_id","rgb","setProperty","setStyle","head","style_tag","style_type","insertAdjacentHTML","colors_version","content","Number","accountColorsVersion","new_hex_value","new_rgb_value","rgb_field","rgbFieldTarget","hex_field","hexFieldTarget","colorpicker_field","colorPickerFieldTarget","inputGenerated","colorpicker_value","hexToRGB","hexValue","rgbValue","selected_style_list","selected_style","customized_selection","selected_theme_list","selected_theme","customized_theme_selection","hex","r","g","b","Math","max","min","default_colors_json","stored_colors_string","colors_field","colorsFieldTarget","colors_string","updateAllColors","_toggleSelectTheme$cl","_toggleSelectTheme$cl2","_toggleCustomColors$c","_toggleCustomColors$c2","_toggleSelectTheme$cl3","_toggleSelectTheme$cl4","_toggleCustomColors$c3","_toggleCustomColors$c4","toggleSelectTheme","toggleSelectThemeTarget","toggleCustomColors","toggleCustomColorsTarget","selectTheme","selectThemeTarget","customColors","customColorsTarget","activeToggleClassesArray","modeActiveClassesValue","inactiveToggleClassesArray","modeInactiveClassesValue","color_picker_container","colorId","find","c","colorFieldTargets","_loop","color_field","colorObject","dispatchEvent","Event","modeActiveClasses","modeInactiveClasses","option_element","style_name","styleName","selectedStyleListTarget","colorpickers","colorsGroupStr","colorsGroup","replace","colorsObject","colorpicker","selectedThemeListTarget","theme","themeName","theme_name","color_group","style_selection","_step4","_iterator4","styleSelectionTargets","theme_option","_step5","_iterator5","surfacesStyleSelectionTarget","surface_style","themesForSurfaceStyle","newActionFormTarget","hasActionsListTarget","newActionButtonTarget","noActionsTarget","selected_contact_attribute_id","action_id","actionId","actions_type","actionsType","param","subscriptionEndActionId","purchaseActionId","productSlugValue","fetch_action_field","dataType","productSlug","selected_redirect_type","fetch_redirect_rule_form","selected_space_type","formatTimeout","inputField","priceInputTarget","inputValue","parts","centpart1","centpart2","formattedValue","newPriceFormTarget","hasPriceListTarget","newPriceButtonTarget","noPricesTarget","toggleValue","toggleSwitchActiveValue","trialField","intervalCountField","intervalField","required","editor","toolbarElement","Trix","toolbar","getLinkToolHTML","purchase_flow_settings","getElementById","agreeToTermsCheckbox","purchaseButtonTarget","couponWithParam","hasCouponCodeFieldTarget","couponCodeFieldTarget","buttonTarget","couponCode","contactAttributeContainer","viewContactAttribute","newContactAttributeBtnTarget","hasModalTarget","new_respondent","indexOf","via_intake","modal","modalTarget","hasMessageCopyableContentTarget","hasMessageInputTarget","messageCopyableContentTarget","messageInputTarget","hasBottomMessageCopyableContentTarget","hasBottomMessageInputTarget","bottomMessageCopyableContentTarget","bottomMessageInputTarget","delay","invitationsHiddenFieldTarget","invitationsToggleTarget","fromNameHiddenFieldTarget","fromNameInputTarget","toEmailsHiddenFieldTarget","toEmailsInputTarget","_this4","replyToHiddenFieldTarget","replyToInputTarget","_this5","subjectHiddenFieldTarget","subjectInputTarget","_this6","messageHiddenFieldTarget","_this7","bottomMessageHiddenFieldTarget","thumbnailInEmailHiddenFieldTarget","hideThumbnailInEmailTarget","showThumbnailInEmailTarget","copyableContentTarget","thumbnailCopyableContentTarget","buttonRenderTarget","buttonEditorTarget","buttonTextInputTarget","renderedButtonTarget","renderedTextLinkTarget","renderedUrlLinkTarget","buttonTextHiddenFieldTarget","conversationUrlValue","buttonTypeHiddenFieldTarget","buttonTypeInputTarget","_this8","new_value","buttonTextCopyableContentTarget","toEmailErrorTargets","conversationInviteFormTarget","_this9","Promise","emailComposerTarget","emailSentTarget","conversationUrl","embedCodeInputTarget","input_value","copy_element","copyStringValue","token_index","token_value","src_index","src_value","oncontextmenu","allowDownloads","base_path","basePathValue","message_count","messageCountValue","hash","message_anchor","pop","new_message_thread","message_container","_element","request_link","updateConversationUrlMessageId","_link","singleMessageViewConversationShowLinks","hrefParts","join","basePath","messageCount","_window$location$href","conversation_ids","conversationItemTargets","conversationItem","push","queryParams","decodeURIComponent","_regeneratorRuntime","Op","hasOwn","hasOwnProperty","defineProperty","obj","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","context","Context","makeInvokeMethod","tryCatch","fn","arg","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","_invoke","AsyncIterator","PromiseImpl","invoke","reject","record","result","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","state","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","methodName","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","i","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","iter","val","object","reverse","skipTempReset","prev","charAt","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","asyncGeneratorStep","gen","_next","_throw","_defineProperties","props","descriptor","hint","prim","toPrimitive","res","_toPrimitive","_setPrototypeOf","p","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","valueOf","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","subClass","superClass","Constructor","protoProps","staticProps","_loadSidebar","hasMessagesNavTarget","loadSidebar","userSignedInValue","cta_banner","offsetTop","isFixed","pageYOffset","stickyNav","_callee","_context","display","loadUrlValue","triggerClickEvent","removeChild","overflowNav","args","addEventListener","once","navigate_link","message_thread_id","messageThreadId","message","scrollY","messagesNavTarget","conversation_nav_links_container","scrollHeight","clientHeight","sidebar_settings","sidebar_filter_unseen_toggle","sidebarFilterUnseenToggleTarget","status_widget","statusWidgetTarget","status_widget_unseen_toggle","statusWidgetUnseenFilterToggleTarget","messages","loadUrl","userSignedIn","scroll_zoom_setting","supports_intersectionOptions","IntersectionObserverEntry","initZoomEffect","mediaMessageTargets","body_tag","scrollZoomOnBtnTarget","scrollZoomOffBtnTarget","intersectionCallback","entries","isIntersecting","intersectionObserver","IntersectionObserver","rootMargin","threshold","observe","scrollMessagesSetting","selected_field","focusTitleField","showTitleForm","open_to","openTo","activateSubTab","activateTab","clickedTab","clickedSubTab","triggeredSubTab","tab_id_to_activate","tabId","panel_id_to_activate","panelToActivate","activatingParent","panelId","active_tab","tabNavTarget","tab_to_activate","activatePanel","subtab_to_activate","parentTabId","active_subtab","panelTargets","titleTarget","titleFormTarget","titleContainerTarget","refreshPageLinkTarget","reload","addSubscribersFormTarget","addSubscribersToggleTarget","thumbnailPresentationTarget","thumbnailEditorTarget","thumbnailTarget","thumbnailFormTarget","thumbnailButtonTarget","hasInputTarget","prepend_value","prependValue","success_value","successValue","string_value","stringValue","append_value","appendValue","copy_text","select","execCommand","copyButtonTarget","str","listener","clipboardData","setData","removeEventListener","copyRichContentToClipboard","richContentTarget","prepend","string","append","hasLinkTarget","linkTarget","linkDisabled","preventRemove","resetState","hasConfirmMessageContainerTarget","confirm_container","confirmMessageContainerTarget","oldMessage","custom_confirmation_message","confirmationMessage","deleteConfirmationMessage","stopImmediatePropagation","handleSuccess","handleError","messageTemplateId","parentNode","linkContainer","linkContainerTarget","linkElement","linkElementTarget","test","menu","menuTarget","hideOverlappedValue","overlappedDropdowns","siblingsGroupId","overlappedDropdown","hideOverlapped","multi_select_link","_createClass","controller","directUploadUrl","dropZone","Dropzone","maxFiles","maxFilesize","maxFileSize","acceptedFiles","addRemoveLinks","autoQueue","dictFileTooBig","dictDefaultMessage","disableFileInput","disable","hideFileInput","bindEvents","file","startsWith","on","customMessage","previewElement","textContent","show","files","message_form","submit_button_top","submit_button_bottom","save_draft_button","schedule_button","accepted","source","DirectUploadController","createDirectUploadController","start","removeElement","toggleSubmitButton","xhr","abort","getElementsByClassName","opacity","getMetaValue","fileInputFrom","acceptedFileType","directUpload","DirectUpload","createDirectUpload","createHiddenInput","attributes","emitDropzoneError","signed_id","emitDropzoneSuccess","insertAfter","bindProgressEvent","emitDropzoneUploading","upload","uploadRequestDidProgress","progress","loaded","total","findElement","previewTemplate","width","emit","userPresentValue","fbq","conversationPresentValue","userPresent","conversationPresent","hasOptionFieldTarget","optionFieldTargets","checkbox","dropAreaTarget","filesListTarget","dataTransfer","hasMobileLabelTarget","mobileLabelTarget","templateFileElement","templateFileElementTarget","oldFilesList","fileElementToRemove","fileNameToRemove","fileName","dT","DataTransfer","items","File","replaceInput","newInput","oldInput","attribute","nodeName","nodeValue","labelValue","labelTarget","fieldNameTarget","selected_option","toggleable","toggleWhenSelected","revealSelectOptionsField","resetSelectOptionsValue","label_field","optionSelectTypeTarget","selectOptionsContainer","multiSelectOptionsContainer","selectOptionFields","multiSelectOptionFields","updateSelectOptionOrderFields","moveSelectOption","direction","selectOptionFieldContainer","selectOptionField","allSelectOptionFields","from","currentIndex","newIndex","targetOption","insertBefore","index","orderField","toggleSwitch","hasMultiSelectHiddenFieldTarget","updateHiddenField","notifyAccountUsers","canDisplayField","accountUserEmailSubjectTarget","selectedOptions","selectedValues","option","multiSelectHiddenFieldTarget","refreshCloudflareToken","refreshGoogleRecaptchaToken","turnstileElements","turnstile","ready","render","sitekey","callback","token","grecaptcha","reveal_form_url","dataLayer","hasConversationPageTarget","hasUserIdValue","userIdValue","w","d","l","getElementsByTagName","j","output","outputTarget","reader","FileReader","onload","readAsDataURL","hasHiddenButtonTarget","hiddenButtonTarget","application","Application","load","definitionsFromContext","process","env","APPSIGNAL_FRONTEND_KEY","appsignal","Appsignal","use","plugin","onerror","onunhandledrejection","intakePageId","slack_channel_div","channel","slackChannelTarget","hasChannelOptionTarget","channelOptionTargets","invitationType","toggleLabel","invitationTypeValue","hasNameTarget","hasDescriptionTarget","namePlaceholders","nameTarget","placeholders","descPlaceholders","descriptionTarget","namePlaceholdersObj","descPlaceholdersObj","placeholder","search_contacts_input","searchContactsInputTarget","new_invite_link","newInviteLinkTarget","input_value_encoded","encodeURIComponent","new_invite_link_url","new_invite_link_url_no_query_string","new_invite_link_url_query_params_without_input_value","radios_group","guest_radio","team_member_radio","invitee_type","inviting_teammember_field","invitingTeammemberFieldTarget","canInviteTeamMembersValue","atTeamMemberLimitValue","keyCode","newInviteLinkContainerTarget","canInviteTeamMembers","atTeamMemberLimit","matchMedia","matches","mobileRedirectTo","hasEmailFieldTarget","email_field","emailFieldTarget","viewer","passwordFieldTarget","device","turnOnCameraBtnTarget","cameraInstructionTarget","selectVideoSourceTarget","previewStream","turnOnMicBtnTarget","selectAudioSourceTarget","micSelectorsContainerTarget","micInstructionTarget","camera_media_stream","previewTarget","camNotCheckedTarget","camCheckedTarget","micNotCheckedTarget","micCheckedTarget","audio_media_stream","stream","getTracks","track","streamArr","cameraCheckTarget","micCheckTarget","troubleshootModal","troubleshootModalTarget","jsError","onboardingStepContainer","toggleSubContent","radiosGroup","radioContainer","welcomeMessageTypeFieldTarget","genericWelcomeMessage","messageTemplateWelcomeMessage","customWelcomeMessage","ShowSpaceNote","conversation_id","invitation_id","invitationId","multi_use_invitation_id","multiUseInvitationId","eval","step_title","select_field","selected_text","updated_destination_text","validateEmail","email","search_methods","_get_search_results","path","results","search_results_found","search_results","errorMessage","_x","hasAccountsListTarget","accountsListTarget","account_links","focused_account","searchInputTarget","fieldTarget","initializeTribute","tribute","detach","searchScope","searchScopeValue","conversationId","conversationIdValue","currentUserContactId","currentUserContactIdValue","Tribute","lookup","menuItemTemplate","item","original","users","menuItemLimit","attach","replaced","range","pasteHtml","_pasteHtml","mention","detail","attachment","sgid","contentType","insertAttachment","insertString","html","startPos","endPos","position","getSelectedRange","setSelectedRange","deleteInDirection","new_message_form","downloadInstructionTarget","uploadInstructionTarget","counter","step","DetectAudioLevel","meterId","camMicSelectorsTarget","messageUITarget","audioContext","meter","mediaStreamSource","audioMeter","WIDTH","HEIGHT","height","canvasContext","getContext","maxWidth","preRecAudioThresholdReached","recStateAudioThresholdReached","recordingStateFlag","audioLevelSet","micCheckMessage","micButton","AudioContext","createMediaStreamSource","createAudioMeter","connect","preRecAudioAlert","recAudioAlert","onLevelChange","isMicActive","clearRect","fillStyle","actualWidth","volume","fillRect","requestAnimationFrame","clipLevel","averaging","clipLag","processor","createScriptProcessor","onaudioprocess","volumeAudioProcess","clipping","lastClip","destination","checkClipping","performance","now","shutdown","disconnect","x","buf","inputBuffer","getChannelData","bufLength","sum","abs","rms","sqrt","hasApplyBtnTarget","applyBtnTarget","isValidUrl","urlPattern","RegExp","hideEmbedError","dispatchLinkValidated","ErrorContainerTarget","dispatchLinkNotValid","CustomEvent","bubbles","UploadError","errorHash","errorSend","streams","camera","screen","mic","assignActiveMediasValues","mediaStream","kind","label","additionalInfoHash","error_category","browser","internet_connection","navigator","onLine","recording_timer_sec","upload_id","getValuesFromMediaStream","hiddenField","error_info","error_hash","browserName","errorName","uploadErrorInitializer","assignError","sendError","removeItem","screen_media_stream","stopAnim","displaySurface","entireScreen","pipOpen","canvas","audioStream","cameraStream","screenStream","audioSource","videoSource","resetButton","resetBtnTarget","audioSelect","videoSelect","selectCameraLayout","selectCameraLayoutTarget","cameraLayoutSelect","startCameraRecordBtn","startCameraRecordBtnTarget","startScreenRecordBtn","startScreenRecordBtnTarget","startMicRecordBtn","startMicRecordBtnTarget","loadingIcon","loadingIconTarget","mediaField","mediaFieldTarget","preRecordPipBtnTarget","duringRecordPipBtnTarget","recordingStopped","frameRate","activeMediaElements","activeMediaTargets","activeMedia","camera_video","sUsrAg","userAgent","isSafari","getDevices","mediaDevices","enumerateDevices","gotDevices","deviceInfos","deviceInfo","deviceId","layoutCamera","layoutMic","getStream","pictureInPictureElement","exitPictureInPicture","stopStreamsAndAnimation","getDisplayMedia","mediaSource","selfBrowserSurface","gotStream","getVideoTracks","getSettings","startStream","pictureInPictureEnabled","cameraOn","getCameraStream","getAudioStream","drawVideo","idealWidth","idealHeight","minWidth","minHeight","enableHdVideo","constraints","exact","ideal","facingMode","getUserMedia","audioConstraints","audio","echoCancellation","noiseSuppression","sampleRate","detectAudioLevel","mergedStream","device_info","screen_video","srcObject","muted","play","onloadedmetadata","updatePreRecordPipText","updateDuringRecordPipText","requestPictureInPicture","addListenersForPipSafari","resetCameraAndAudioStream","addListenersForPip","pipCamera","recordingArgs","camera_height","camera_width","apply_aspect_ratio","camera_top","camera_left","transform_x","transform_y","screen_height","screen_width","camera_source_height","camera_source_width","selected_layout","scale","screenHeight","screenWidth","cameraWidth","cameraHeight","cameraTop","cameraLeft","getLayoutPosition","visibilityState","frequency","freq","aCtx","silence","createGain","gain","onOSCend","stopped","osc","createOscillator","onended","currentTime","audioTimerLoop","draw","captureStream","findIndex","getIndexOfOption","getAudioTracks","addTrack","startPip","screen_stream","camera_stream","setTransform","drawImage","lineWidth","strokeStyle","strokeRect","cameraShownLabel","cameraShownIcon","cameraHiddenLabel","cameraHiddenIcon","plusCameraLabel","mediaError","span","createSpan","setParams","setTags","tag","setError","send","onchange","activeMediaElement","alpha","antialias","hasStopBtnTarget","stopBtnTarget","_asyncToGenerator","MultipartUpload","bucket","totalParts","partArray","partPromiseDict","partBasedProgress","totalPartsProgress","uploadDiscard","disableBtn","_completeUpload","_uploadPart","_createMultipartUpload","_upload","uploadId","part","mimeType","connectionOnline","uploadPart","etag","part_number","assignAndSendError","_x2","_x3","_callee2","_context2","jsonData","_x4","_callee3","_context3","XMLHttpRequest","onreadystatechange","readyState","warn","responseText","getResponseHeader","partUploadProgress","discardRecording","open","_x5","_x6","_x7","_x8","_x9","_x10","_callee5","resolvedArray","_context5","all","_ref","_callee4","_context4","_x11","skipReload","customProgressElements","customProgressElement","percent","toFixed","completed_percentage","reduce","a","canShowSubmit","limitRecordingInterval","RailsDirectUpload","submitButtonBottom","recordingEndTime","saveButton","scheduleButton","editRecordingButton","messageForm","uploader","submitButtonBottomContainer","preventPageRefresh","customProgressWrapElements","blob","showHideElementAfterUpload","uploadErrors","downloadBtn","submitBtnTop","shareIncompleteMultipartBlob","hiddenContentType","content_type","hiddenFieldType","tour_post_message","removeMultipartElements","request","xhrRequest","directUploadDidProgress","returnValue","uploadCloseModal","mediaKey","mediaFile","sessionUserIdValue","incompleteMediaKeyValue","incompleteMediaKey","sessionUserId","incomplete_media_key","media_recorder","recCompPromiseResolve","dataAvailable","preview","discard","recording","recordingVideoJs","activeTab","recordedBlob","recordedType","browserStream","createUploadPromise","multiPartUploadInitializer","hasPreviewTarget","hasRecordingTarget","recordingTarget","audioThumbnail","downloadButton","downloadBtnTarget","activeTabElement","recordingStartTime","recordingTimerSec","stopButton","resumeButton","resumeBtnTargets","pauseButton","pauseBtnTargets","recordingIndicator","recordingIndicatorTargets","recordingIndicatorIcon","recordingIndicatorIconTargets","timerTargets","hasSubmitButtonBottomTarget","submitButtonBottomTarget","hasSubmitButtonBottomContainer","submitButtonBottomContainerTarget","recCompPromise","usingMultipart","videoStopped","endRecordingTimerStarts","chunkIndex","maxMediaSize","recordedMediaSize","partStatus","newChunk","detectBrowser","multipartRetry","alreadyUpdated","multipartFailed","directUploadInUse","discardUpload","hasSaveBtnTarget","saveBtnTarget","hasScheduleBtnTarget","scheduleBtnTarget","hasEditRecordBtnTarget","editRecordBtnTarget","hasDiscardBtnTarget","discardBtnTarget","setActiveTab","hasMaxMediaSizeValue","maxMediaSizeValue","mozCaptureStream","aspectRatio","tallVideoFieldTarget","stopRecordingBasedOnMediaSize","tempChunk","eventBlob","Blob","size","endRecordingTimer","msg","key_and_upload_id","get_key_and_upload_id","updateRecordingTimerValue","attachThumbnailToAudioMessage","setItemInLocalStorage","uploadMedia","newChunkBlob","uploadChunkToS3","completeMultipartUpload","noOfParts","updatePartProgress","directUploadRecording","createMultipartUpload","error_params","handleFailure","incompleteUpload","completeUpload","hiddenFieldKey","addIncompleteMultipartFields","hiddenFieldFileName","hiddenFieldChecksum","hiddenFieldEndTime","hiddenFieldContentType","hiddenFieldMediaSize","submitBtnBottomContainer","addMultipartDependentFields","fromCompleteUpload","recurring_request","theBlob","lastModifiedDate","blobToFile","lengthInMS","vendor","match","MediaRecorder","isTypeSupported","setMimeType","recorder","title","submitBtnBottom","onstart","pauseButtonOnClick","clearInterval","timerInterval","onclick","listenPauseButton","resumeButtonOnClick","resume","listenResumeButton","ondataavailable","sizeInMb","pow","convertBlobToChunkAndUpload","clickStopped","recording_indicator_timers","stop_recording_buttons","stop_btn","listenStopButton","onstop","recordedChunks","recordedBlobUrl","createObjectURL","videojs","download","recordingFinishedUI","_discard_and_re_record","hasSubmitButtonBottomContainerTarget","hasResumeBtnTarget","hasSubmitButtonTopTarget","submitButtonTopTarget","hasMediaFieldTarget","enableHifiRecording","message_type","messageTypeFieldTarget","initiateDeviceSelectionBtnTarget","cameraButton","mediaDeviceTarget","previewStartedUI","previewCameraStartedUI","previewMicStartedUI","previewScreenStartedUI","countdown_container","countdownTarget","countdownTimeleft","countdownTimer","setInterval","recordingStartedUI","start_timer","limitRecording","timer_containers","hasMessageTypeMenuTarget","messageTypeMenuTarget","minutes","seconds","prev_distance","distance","localRecordingLimit","countFromDate","pendingSecondsValue","floor","seconds_value","toString","padStart","clearConversationLink","newMessageForm","mediaSignedId","controlsTarget","kickoffRecordingPanelTarget","hasCancelBtnTarget","cancelBtnTarget","hasEditTextBtnTarget","editTextBtnTarget","prerecordOverlayTarget","previewStreamPlayerTarget","hasBackgroundImageTarget","backgroundImageTarget","timeLimitInfo","timeLimitInfoLink","micRecordingInProgressTarget","screenRecordingInProgressTarget","screenRecordingInProgressMessageTarget","micRecordingInProgressMessageTarget","stopBtnTargets","hasNotYouLinkTarget","notYouLinkTarget","disabled_player","progressBarTarget","fixedMessageControls","changeBtnText","preventFormSubmit","browserNameElements","osName","winControl","macCommand","os_name","detectOs","nAgent","OSName","appVersion","pendingSeconds","recordingTimers","stopBtns","isInteger","timeLeftValue","recordingEndedValue","nonAccountMemberValue","maxMediaError","recordingIndicators","timer_pulse","hasReachedLimitMessageTarget","reachedLimitMessageTarget","hitRecordingLimit","attachPrefixUrl","textEditorTarget","dispatchMessageValidated","recorded_media","parentElement","multi_part_upload","embedIframeFieldTarget","embedPlayerLinkFieldTarget","fileAttachmentFieldTarget","filesLength","error_message","bottom_error_container","top_error_container","hasConversationLinkFieldTarget","conversationLinkFieldTarget","button_text","submitting_text","disableWith","hasScheduledBooleanInputTarget","scheduledBooleanInputTarget","scheduleMessageBtnText","scheduleMessageSubmittingText","conversationLinkBtnText","btnText","freeAccount","nonAccountMember","timeLeft","recordingEnded","recorderError","url_string","message_id_to_edit","editCut1","editCut2","arr","clipListStorageTarget","storage","currentDate","toISOString","openTime","convertDateTimeFormat","closeTime","checkVal1","checkVal2","time","populatingInputCut","message_thread_container","dummy_media_editor","link_target","updateClipSpec","clipsListTarget","discardEditForm","elementId","editClipsTimelineTarget","hasClipsListTarget","mediaDurationInSecond","timeToSecond","mediaDurationTarget","sectionBtn","cutExist","checkCutFieldAndCreateDefaults","totalInSecond","tempArr","sort","insertDataInStore","startCutInput","endCutInput","arr1","clipDuration","clipToStart","calculateDifferenceBtwClips","some","el","isClipIntersected","estimateTime","startCut","cutFields","startCutInputValue","endCutInputValue","elementToClone","clonedNode","noOfClips","lastElementChild","videoDuration","endCutInseconds","startCutInSeconds","totalTimelineWidth","clientWidth","leftSideSpacing","ceil","widthSpacing","mediaDuration","acc","times","action","totalHours","totalMinutes","totalSeconds","splitTime","minutesFromSeconds","hoursFromMinutes","substr","hms","selected_type_id","embedTypeId","selectedEmbedTypeTargets","embedTypeInputTargets","inputContainer","embeddedTypeTarget","input_field","embed_url_field","embedTypeInputTarget","hasMobileValidateBtn","mobileValidateBtn","EmbedUrlErrorTarget","newConversationForm","isFirefox","safariValue","firefoxValue","form_element","message_type_field","stringToBoolean","default_message_type","defaultMessageType","enable_screen_messages","enableScreenMessages","enable_camera_messages","enableCameraMessages","enable_mic_messages","enableMicMessages","enable_file_uploads","enableFileUploads","enable_library","enableLibrary","enable_embeds","enableEmbeds","enable_file_attachments","enableFileAttachments","enable_text_block","cameraButtonTarget","screenButtonTarget","setScreenCamera","setScreen","setCamera","setAudio","setNewMessageCreationFrom","setTogglePanel","setTextOnly","setText","text_content","textButtonTarget","screenValue","micToggleForNonAccountMember","cameraValue","micValue","toggleOff","screenOrCameraWrapperTarget","toggleOn","updateMessageType","micButtonTarget","textValue","screen_button","camera_button","mic_button","text_button","media_panel","media_panel_toggle","panel","messageTypeId","media","start_button","startButtonTarget","start_button_text","messageTypeValue","isAccountMemberValue","safari","firefox","isAccountMember","messageType","togglesTarget","messageTemplateTarget","hasThreadTemplateTarget","threadTemplateTarget","librarySearchTarget","thread_template_id","templateId","threadTemplateSelectFieldTarget","messageTemplateSelectFieldTarget","message_template_id","hasThreadTemplateSelectFieldTarget","searchFieldTarget","templateName","searchFieldContainerTarget","hasSearchResultTarget","selectedResultTarget","selected_template","searchResultTarget","clearSearchIconTarget","hasMessageTemplateSelectFieldTarget","hasMessageAuthorDropdownTarget","messageAuthorDropdownTarget","template_type","templateType","stopStreams","allowArrayLike","it","isArray","minLen","_arrayLikeToArray","_unsupportedIterableToArray","F","_e","normalCompletion","didErr","_e2","len","arr2","cameraStream1","imageCheck","selectAudioSource","streamStop","resetStream","canvasElement","noImage","image","new_video","isChrome","selfieSegmentation","SelfieSegmentation","locateFile","cancelAnimationFrame","withoutQueryParam","withQueryParam","sendToMediaPipe","crossOrigin","callingCanvasFromMediapipe","videoWidth","setOptions","modelSelection","onResults","canvasCtx","save","segmentationMask","globalCompositeOperation","restore","blocksContainerTarget","tour_element","panel_toggle","message_type_id","menu_panel_toggle","deactivateAllMediaPanels","activateDefaultBlock","blockToggleTargets","blockTargets","setMessageType","message_type_value_to_set","toggleMessageTemplateTitleBlock","updatePills","exclude_message_type_id","mediaPanelTargets","mediaPanelToggleTargets","block_toggle","block_toggles","_step6","_iterator6","conversation_link_block_toggle","_step7","active_type_ids","_iterator7","type_element","_step8","_iterator8","typePillTargets","pill","shownPillsTarget","hiddenPillsTarget","first_active_block","first_active_panel","default_block_toggle","messageTemplateTitleBlock","is_program_item","is_thread_template","libraryPanel","activeBlock","message_template_title_input","product_select_field","form_id","form_type","formType","threadedMessage","threadTemplateId","programItemId","productOfferBlock","productOfferForm","productOfferSelectField","productOfferAction","productOfferToggle","safari_version","isIos","isAndroid","MSStream","hasMobileAppCtaTarget","mobile_app_cta","mobile_app_link","androidAppStoreUrl","iosAppStoreUrl","safari_uploader_message","hasCameraStatusBtnTarget","cameraStatusBtnTarget","hasPipBtnTarget","pipBtnTarget","thumbnailUploaderTarget","label_element","layout","initiateDeviceSelect","selectCamera","toggleSelectDevice","selectMic","camMicSelectorsContainerTarget","internal_setting","internalSettingTargets","internalBtnTopTarget","messageTitleTarget","hasMessageTimestampTarget","messageTimestampTarget","title_value","mobileAppCtaTarget","LEAVING_PAGE_MESSAGE","setChanged","toggleEditTitle","uneditableTitle","conversationShare","conversationPeople","conversationSettingsDropdown","sidebar","topbar_links","topbar","sidebar_new_conv_link","user_menu","user_events_menu","isFormChanged","confirm","changed","set","div","timelineElement","finalCheck","prevCheck","resizers","timeWidth","clipTimelineWidth","recordedDuration","oneSecond","minimum_size","original_width","original_left","original_mouse_x","currentResizer","resize","pageX","pageY","offsetLeft","leftOffset","clientX","left","tempOff","nextElementSibling","startCutValueWithoutHour","endCutValueWithoutHour","calVal1","calVal2","startCutValue","secondsToTime","endCutValue","clipPart","clipInput","updateCutFields","stopResize","spaceExist","objectId","setSectionVisibility","getBoundingClientRect","currentParent","srcElement","offsetParent","parent","clips","parseFloat","getComputedStyle","getPropertyValue","top","makeResizableClip","editBtn","hasDraftInputTarget","draftInputTarget","editRecordingInputTarget","submitForm","confirmDraftOrInternalTarget","messageFormTarget","scheduleNewMessageBlockTarget","scheduleNewMessageIconBtnTarget","toggleDraftAndScheduleBooleans","draft_message","scheduled_info_block","updateScheduleButtonTarget","draft_boolean","draftBooleanInputTarget","scheduled_boolean","messageThreadIdValue","draftValue","internalValue","draft","internal","newReplyInThread","threadBottomOrTop","replyButtonsTopOrBottom","threadedReplyBtn","threadId","threadedForm","getCookieValue","flutter_inappwebview","callHandler","hide_message_creation_modal","hideModal","messageThreadContainerTarget","replyInThreadBtnTop","noMedia","create_message_in_thread_form","hasThreadLoadMoreLinkTarget","ThreadLoadMoreLinkTarget","hasNewThreadLinkTarget","newThreadLinkTarget","hasNewMessageLinkTarget","newMessageLinkTarget","main_level_reply_buttons","replyInThreadBtnTopOrBottom","threadTemplate","hideFormValue","intakePageFormContainerTarget","hasIntakePageFormContainerTarget","message_form_toggles","messageFormToggleTargets","hasMessageTemplateNameFieldTarget","messageTemplateNameFieldTarget","empty_thread_template","hideForm","newUserValue","hideTourElements","startCreationOnConnectValue","animateInStartCreation","hasReplyButtonTarget","animateInReplyButton","hasStartCreationTarget","startCreationTarget","replyButtonTargets","newUser","startCreationOnConnect","oembedContainerTargets","oembed_container","fetch_url","oembedContainerTarget","transcript_block","messageTemplatesFormContainerTarget","overwriteMessageTemplatesFieldTarget","overwriteMessageTemplates","mixpanel","debug","pageValue","mixpanelUserId","page","termsCheckboxTarget","continueBtnTarget","_window$flutter_inapp","_window$flutter_inapp2","_window$flutter_inapp3","hasNoMessages","modal_id_to_open","modalIdToOpen","hasAutofocusFieldTarget","autofocusFieldTarget","reload_window","submit","submitLinkTarget","onboardingContentBoxTarget","client","clientInstance","paypalCheckout","paypalCreated","paypalCheckoutErr","paypalCheckoutInstance","Button","shape","tagline","payment","createPayment","onAuthorize","actions","tokenizePayment","onCancel","onError","plausible","contentTarget","adjustPositionIfOutsideViewport","rect","viewportHeight","innerHeight","viewportWidth","bottom","right","toggleProgramItemForm","toggleNewProgramItemFormTarget","programItemForm","programItemFormTarget","hasEmptyProgramMessageTarget","emptyProgramMessage","emptyProgramMessageTarget","libraryPanelToggle","current_value","hiddenFieldTarget","radio_to_activate","active_radio","radio_field","radio_option_value","radioOptionName","emojisPickerTarget","populatePicker","emojisListTarget","toggle_picker","emoji","favs_array","current_favs_array","y","favs_string","all_emojis_container","emojis","Emojis","description","aliases","tags","favoriteEmojisTarget","fav_emojis","favorites_container","emoji_el","cloned_emoji_el","fav_emojis_array","splice","createReaction","emoji_array","from_js","rewardful","Rewardful","referral","affiliate","MutationObserver","mutations","revealSaveBtn","childList","subtree","viewContentTargets","host","pathname","viewContent","viewContentTarget","editContent","editContentTarget","hasViewContentTarget","globalSearchInitializer","searchResultsContainerTarget","searchResultsTarget","other_modal","creating_text_message","editing_text_message","disable_search","new_message_title_field","is_new_message_title_field_focused","activeElement","editing_message_title","is_editing_message_title_field_focused","edit_message_template_title","is_editing_message_template_title_field_focused","editing_thread_title","is_editing_thread_title_field_focused","searchModalTarget","currentlyActive","settingPicked","search_type","searchType","search_input","searchObjectType","q","object_type","inside_conversation","searchInsideConversation","get_search_results","focused_result","inside_thread","insideThread","hasLibrarySearchResultsTarget","librarySearchResultsTarget","librarySearchInputTarget","objectsSearchInitializer","debounce","filteredListTarget","hasUnfilteredListTarget","unfilteredListTarget","blur","hideWhenFilteredTargets","searchPathValue","searchPath","unfilteredListContainer","filteredListContainer","noResultsContainer","noResultsTarget","hideElementsWhenFiltered","hasNewObjectNameContainerTarget","newObjectNameContainer","newObjectNameContainerTarget","revealOrHideInputs","focusInputValue","toggleables","focus_input","focusInput","subnav_to_open_on_load","hasSidebarTarget","sidebarTarget","sidebar_state","medium_screen","hasActiveItemValue","sidebar_link","activeItemValue","hasActiveSubSectionValue","sidebar_sub_section","activeSubSectionValue","hasActiveSubSectionLinkValue","sidebar_sub_section_link","activeSubSectionLinkValue","section_subnavs","toggled_section_subnav","activeItem","activeSubSection","activeSubSectionLink","space_container_slug","spaceContainerSlug","space_slug","spaceSlug","conversationErrorTarget","appendSpaceToSpaceContainer","space_selection","hasPurchaseFormTarget","hasFromCheckoutTarget","metaTag","card_form","stripeMeta","stripeKey","connectedAccountId","stripe","Stripe","stripeAccount","elements","setup_intent","payment_intent","card","mount","cardTarget","coupon_value","hasCouponFieldTarget","couponFieldTarget","validateCouponCode","resetPurchaseButton","handleCardPayment","setupNewCard","createPaymentMethod","billing_details","resetSubscribeButton","handlePaymentMethod","payment_method","confirmCardSetup","setupIntent","payment_method_id","changeSubscribeButton","confirmCardPayment","paymentIntent","Turbolinks","clearCache","visit","coupon_code","fetchResultAndUpdate","plan_id","couponAppliedTarget","couponCodeMessageTarget","couponSuccessIconTarget","couponErrorIconTarget","processing_button","v","cancelButtonTarget","toggleSwitcherOn","monthlyToggleTarget","toggleSwitcherOff","annualToggleTarget","togglePanelOn","monthlyPlansTarget","togglePanelOff","annualPlansTarget","selection","t","Beacon","readyQueue","attachEvent","close_widget","supportMenuTarget","closeWidgetTarget","openWidgetTarget","support_widget_container","close_menu","userName","userEmail","openContactForm","hasOpenWidgetTarget","report_message_link","subject","selected_tab","selected_tab_id","selected_panel","tabTargets","editTagFormTarget","tagLinkTarget","edit_tag_button","createTagFormTarget","newTagButtonTarget","openTaskModal","currentPath","taskId","_taskElement$querySel","taskElement","filterToggleTarget","currentUserEmail","currentUrl","filterToggleTargets","filterType","isChecked","filteredAppliedUrl","clearButton","userHiddenField","formTypeValue","titleField","observer","uniqueId","generateRandomCode","createTaskOrTaskTemplate","errorContainer","titleElement","task_description","tasksPartial","checkboxDiv","taskContentDiv","taskTitle","taskDescription","maxLength","removeDivAndBr","truncateText","unsavedChanges","removeButton","fromEditValue","renderTasksPartial","revealNewButton","originalElement","createTaskForm","taskForm","cloneIndex","nestedAttributeIndex","messageTaskOrder","clone","field_name","messageTaskOrderInput","taskID","hideAllForms","dueDays","allFormsAreHidden","hasNewTaskButtonTarget","newTaskButtonTarget","_event$target$querySe","_event$target$closest","_event$target$closest2","taskUniqueId","currentForm","taskTemplate","crypto","getRandomValues","Uint32Array","random","fromEdit","taskDescriptionTargets","titleContainer","taskDescriptionTarget","taskDescriptionFormTarget","updateDirectUploadUrl","toggleableTargets","toggleable_element","hasFieldValueTarget","activeValue","fieldValueTarget","hasCheckboxFieldValueTarget","checkboxFieldValueTarget","toggleStyles","linkedTogglesValue","toggleId","updateLinkedToggle","triggerEvent","disableLinkedWhenFalseValue","enableToggle","disableToggle","toggleSwitchControllerInstance","getControllerForElementAndIdentifier","newValue","linkedBehaviorValue","setValue","_toggleContainer$clas","_toggleContainer$clas2","_toggleContainer$clas3","_toggleContainer$clas4","toggle_element","toggleContainer","toggleContainerTarget","activeBgColor","activeBgColorValue","inactiveBgColor","inactiveBgColorValue","active","linkedToggles","linkedBehavior","disableLinkedWhenFalse","chromeInfoTarget","firefoxInfoTarget","safariInfoTarget","typeValue","player","playerTarget","fluid","fill","responsive","autoplay","liveui","featuresPlaybackRate","playbackRates","controlBar","volumePanel","inline","has","registerMessagePlay","messageID","userID","event_toggles","eventToggleTargets","current_events","currentEventsValue","event_toggle","event_name","eventName","selectOption","deSelectOption","toggle_container","eventsInputTarget","currentEvents","nav_tab","group_id","workflowFormGroupId","selectedPanel","navItemTargets","formPanelTargets","email_tab","email_panel","first_field","create_message_tab","create_message_panel","field_id","fieldId","toggleByField","showWhenSelectedOption","toggler_field_ids","togglerTargets","toggler","keep_visible","falsifyInputWhenHidden","cancel_event_by","cancel_events_nav_item","cancel_event_by_emails","toggle_messages_in_this_thread","objectTypeValue","toggle_content_id","contentToToggle","toggleable_content","toggled_to_value","trigger_on_this_message_thread","trigger_on_top_messages","trigger_on_threaded_messages","triggerEventValue","changed_field","workflow","workflow_trigger","add_step_button","last_step_dashed_line","workflow_container","main_workflow_line","workflow_step_container","workflow_step_meta","new_step","objectType","step_jobs","selector","referenceNode","nextSibling","cookies","cookie","func","timeoutId","_len","_key","lang","getDefaultHTML","bold","italic","strike","heading1","quote","bullets","numbers","outdent","indent","attachFiles","undo","redo","urlPlaceholder","unlink","EmbedController","patterns","hrefElement","embedContainerElement","embedElement","installEventHandlers","didInput","embed","loadPatterns","pattern","regex","showEmbed","currentEmbed","_event$detail","_event$detail2","init","fileInputToggle","labelVal","Cookies","oldIntl","Intl","tz","jstz","findTimeZone","expires","clipboardTooltip","tippy","showOnCreate","onHidden","destroy","clipboard","ClipboardJS","trigger"],"sourceRoot":""}