/*========================================================================================= File Name: app-email.js Description: Email Page js ---------------------------------------------------------------------------------------- Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template Author: PIXINVENT Author URL: http://www.themeforest.net/user/pixinvent ==========================================================================================*/ 'use strict'; $(function () { // Register Quill Fonts var Font = Quill.import('formats/font'); Font.whitelist = ['sofia', 'slabo', 'roboto', 'inconsolata', 'ubuntu']; Quill.register(Font, true); var compose = $('.compose-email'), composeMailModal = $('#compose-mail'), menuToggle = $('.menu-toggle'), sidebarToggle = $('.sidebar-toggle'), sidebarLeft = $('.sidebar-left'), sidebarMenuList = $('.sidebar-menu-list'), emailAppList = $('.email-app-list'), emailUserList = $('.email-user-list'), emailUserListInput = $('.email-user-list .form-check'), emailScrollArea = $('.email-scroll-area'), emailTo = $('#email-to'), emailCC = $('#emailCC'), emailBCC = $('#emailBCC'), toggleCC = $('.toggle-cc'), toggleBCC = $('.toggle-bcc'), wrapperCC = $('.cc-wrapper'), wrapperBCC = $('.bcc-wrapper'), emailDetails = $('.email-app-details'), listGroupMsg = $('.list-group-messages'), goBack = $('.go-back'), favoriteStar = $('.email-application .email-favorite'), userActions = $('.user-action'), mailDelete = $('.mail-delete'), mailUnread = $('.mail-unread'), emailSearch = $('#email-search'), composeModal = $('.modal'), modalDialog = $('.modal-dialog'), editorEl = $('#message-editor .editor'), overlay = $('.body-content-overlay'), composeMaximize = $('.compose-maximize'), isRtl = $('html').attr('data-textdirection') === 'rtl'; var assetPath = '../../../app-assets/'; if ($('body').attr('data-framework') === 'laravel') { assetPath = $('body').attr('data-asset-path'); } // Toggle BCC on mount if (wrapperBCC.length) { wrapperBCC.toggle(); } // Toggle CC on mount if (wrapperCC) { wrapperCC.toggle(); } // Toggle BCC input if (toggleBCC.length) { toggleBCC.on('click', function () { wrapperBCC.toggle(); }); } // Toggle CC input if (toggleCC.length) { toggleCC.on('click', function () { wrapperCC.toggle(); }); } // if it is not touch device if (!$.app.menu.is_touch_device()) { // Email left Sidebar if ($(sidebarMenuList).length > 0) { var sidebar_menu_list = new PerfectScrollbar(sidebarMenuList[0]); } // User list scroll if ($(emailUserList).length > 0) { var users_list = new PerfectScrollbar(emailUserList[0]); } // Email detail section if ($(emailScrollArea).length > 0) { var users_list = new PerfectScrollbar(emailScrollArea[0]); } } // if it is a touch device else { $(sidebarMenuList).css('overflow', 'scroll'); $(emailUserList).css('overflow', 'scroll'); $(emailScrollArea).css('overflow', 'scroll'); } $(document).keyup(function (e) { if (e.key === 'Escape') { if (composeMailModal.find('.modal-dialog').hasClass('modal-fullscreen')) { composeMaximize.click(); } } }); // Email to user select function renderGuestAvatar(option) { if (!option.id) { return option.text; } var avatarImg = feather.icons['user'].toSvg({ class: 'me-0' }); if ($(option.element).data('avatar')) { avatarImg = "<img src='" + assetPath + 'images/avatars/' + $(option.element).data('avatar') + "' alt='avatar' />"; } var $avatar = "<div class='d-flex flex-wrap align-items-center'>" + "<div class='avatar avatar-sm my-0 me-50'>" + "<span class='avatar-content'>" + avatarImg + '</span>' + '</div>' + option.text + '</div>'; return $avatar; } if (emailTo.length) { emailTo.wrap('<div class="position-relative"></div>').select2({ dropdownParent: emailTo.parent(), closeOnSelect: false, templateResult: renderGuestAvatar, templateSelection: renderGuestAvatar, tags: true, tokenSeparators: [',', ' '], escapeMarkup: function (es) { return es; } }); } if (emailCC.length) { emailCC.wrap('<div class="position-relative"></div>').select2({ dropdownParent: emailCC.parent(), closeOnSelect: false, templateResult: renderGuestAvatar, templateSelection: renderGuestAvatar, tags: true, tokenSeparators: [',', ' '], escapeMarkup: function (es) { return es; } }); } if (emailBCC.length) { emailBCC.wrap('<div class="position-relative"></div>').select2({ dropdownParent: emailBCC.parent(), closeOnSelect: false, templateResult: renderGuestAvatar, templateSelection: renderGuestAvatar, tags: true, tokenSeparators: [',', ' '], escapeMarkup: function (es) { return es; } }); } // compose email if (compose.length) { compose.on('click', function () { // showing rightSideBar overlay.removeClass('show'); // hiding left sidebar sidebarLeft.removeClass('show'); // all input forms $('.compose-form input').val(''); emailTo.val([]).trigger('change'); emailCC.val([]).trigger('change'); emailBCC.val([]).trigger('change'); wrapperCC.hide(); wrapperBCC.hide(); // quill editor content var quill_editor = $('.compose-form .ql-editor'); quill_editor[0].innerHTML = ''; }); } // Main menu toggle should hide app menu if (menuToggle.length) { menuToggle.on('click', function (e) { sidebarLeft.removeClass('show'); overlay.removeClass('show'); }); } // Email sidebar toggle if (sidebarToggle.length) { sidebarToggle.on('click', function (e) { e.stopPropagation(); sidebarLeft.toggleClass('show'); overlay.addClass('show'); }); } if (composeMaximize) composeMaximize.on('click', function () { composeModal.toggleClass('modal-sticky'); modalDialog.toggleClass('modal-fullscreen'); if (modalDialog.hasClass('modal-fullscreen')) { $(this).html(feather.icons['minimize-2'].toSvg()); } else { $(this).html(feather.icons['maximize-2'].toSvg()); } }); // Overlay Click if (overlay.length) { overlay.on('click', function (e) { sidebarLeft.removeClass('show'); overlay.removeClass('show'); }); } // Email Right sidebar toggle if (emailUserList.find('li').length) { emailUserList.find('li').on('click', function (e) { emailDetails.toggleClass('show'); }); } // Add class active on click of sidebar list if (listGroupMsg.find('a').length) { listGroupMsg.find('a').on('click', function () { if (listGroupMsg.find('a').hasClass('active')) { listGroupMsg.find('a').removeClass('active'); } $(this).addClass('active'); }); } // Email detail view back button click if (goBack.length) { goBack.on('click', function (e) { e.stopPropagation(); emailDetails.removeClass('show'); }); } // Favorite star click if (favoriteStar.length) { favoriteStar.on('click', function (e) { $(this).find('svg').toggleClass('favorite'); e.stopPropagation(); // show toast only have favorite class if ($(this).find('svg').hasClass('favorite')) { toastr['success']('Updated mail to favorite', 'Favorite Mail ⭐️', { closeButton: true, tapToDismiss: false, rtl: isRtl }); } }); } // For app sidebar on small screen if ($(window).width() > 768) { if (overlay.hasClass('show')) { overlay.removeClass('show'); } } // single checkbox select if (emailUserListInput.length) { emailUserListInput.on('click', function (e) { e.stopPropagation(); }); emailUserListInput.find('input').on('change', function (e) { e.stopPropagation(); var $this = $(this); if ($this.is(':checked')) { $this.closest('.user-mail').addClass('selected-row-bg'); } else { $this.closest('.user-mail').removeClass('selected-row-bg'); } }); } // select all $(document).on('click', '.email-app-list .selectAll input', function () { if ($(this).is(':checked')) { userActions .find('.form-check .form-check-input') .prop('checked', this.checked) .closest('.user-mail') .addClass('selected-row-bg'); } else { userActions .find('.form-check .form-check-input') .prop('checked', '') .closest('.user-mail') .removeClass('selected-row-bg'); } }); // Delete selected Mail from list if (mailDelete.length) { mailDelete.on('click', function () { if (userActions.find('.form-check .form-check-input:checked').length) { userActions.find('.form-check .form-check-input:checked').closest('.user-mail').remove(); emailAppList.find('.selectAll input').prop('checked', false); toastr['error']('You have removed email.', 'Mail Deleted!', { closeButton: true, tapToDismiss: false, rtl: isRtl }); userActions.find('.form-check .form-check-input').prop('checked', ''); } }); } // Mark mail unread if (mailUnread.length) { mailUnread.on('click', function () { userActions.find('.form-check .form-check-input:checked').closest('.user-mail').removeClass('mail-read'); }); } // Filter if (emailSearch.length) { emailSearch.on('keyup', function () { var value = $(this).val().toLowerCase(); if (value !== '') { emailUserList.find('.email-media-list li').filter(function () { $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1); }); var tbl_row = emailUserList.find('.email-media-list li:visible').length; //Check if table has row or not if (tbl_row == 0) { emailUserList.find('.no-results').addClass('show'); emailUserList.animate({ scrollTop: '0' }, 500); } else { if (emailUserList.find('.no-results').hasClass('show')) { emailUserList.find('.no-results').removeClass('show'); } } } else { // If filter box is empty emailUserList.find('.email-media-list li').show(); if (emailUserList.find('.no-results').hasClass('show')) { emailUserList.find('.no-results').removeClass('show'); } } }); } // Email compose Editor if (editorEl.length) { var emailEditor = new Quill(editorEl[0], { bounds: '#message-editor .editor', modules: { formula: true, syntax: true, toolbar: '.compose-editor-toolbar' }, placeholder: 'Message', theme: 'snow' }); } // On navbar search and bookmark Icon click, hide compose mail $('.nav-link-search, .bookmark-star').on('click', function () { composeModal.modal('hide'); }); }); $(window).on('resize', function () { var sidebarLeft = $('.sidebar-left'); // remove show classes from sidebar and overlay if size is > 992 if ($(window).width() > 768) { if ($('.app-content .body-content-overlay').hasClass('show')) { sidebarLeft.removeClass('show'); $('.app-content .body-content-overlay').removeClass('show'); } } });