499 lines
15 KiB
JavaScript
499 lines
15 KiB
JavaScript
|
|
const sleep = (milliseconds) => {
|
|
return new Promise(resolve => setTimeout(resolve, milliseconds))
|
|
}
|
|
|
|
function js_Load() {
|
|
document.body.style.visibility = 'visible';
|
|
}
|
|
|
|
function init_datepicker() {
|
|
$('.datepicker').datepicker({
|
|
container: 'body',
|
|
format: 'mm/dd/yy'
|
|
});
|
|
}
|
|
function init_timepicker() {
|
|
$('.timepicker').timepicker({
|
|
container: 'body'
|
|
});
|
|
}
|
|
// toggle/init tooltips
|
|
function init_tooltips(){
|
|
let tooltips_enabled = localStorage.getItem('tooltips_enabled');
|
|
if (tooltips_enabled === 'false'){
|
|
} else {
|
|
$('.tooltipped').tooltip();
|
|
}
|
|
}
|
|
|
|
function updateTabIndicator(){
|
|
sleep(250).then(() => {
|
|
$(".tabs").tabs('updateTabIndicator');
|
|
});
|
|
}
|
|
|
|
function init_select(){
|
|
$('select').formSelect({
|
|
dropdownOptions:{
|
|
container: document.body,
|
|
constrainWidth: true,
|
|
}
|
|
});
|
|
$('input').each(function(index, el) {
|
|
if ($(this).attr('data-autocomplete-options')){
|
|
let options_list = $(this).attr('data-autocomplete-options').split(',');
|
|
let options_dict = options_list.map(x => ({'key': x, 'val': null}));
|
|
options_dict = options_dict.reduce(function(map, obj) {
|
|
map[obj.key] = obj.val;
|
|
return map;
|
|
}, {});
|
|
$(this).autocomplete({
|
|
data: options_dict,
|
|
dropdownOptions:{
|
|
container: document.body,
|
|
}
|
|
});
|
|
if ($(this).attr('data-auto-only') === 'true') {
|
|
$(this).on('blur', function(e) {
|
|
if (options_list.includes($(this).val()) === false) {
|
|
$(this).val('');
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
function loadContactForm(){
|
|
let url = $("#load-contact-form-url").attr('data-url');
|
|
$.ajax({
|
|
url: url,
|
|
type: 'GET',
|
|
success: function(data){
|
|
$('body').append(data);
|
|
init_select();
|
|
}
|
|
});
|
|
}
|
|
|
|
function autocomplete_chips_add_function(el_id, el){
|
|
let instance = M.Chips.getInstance(el);
|
|
let val_list = []
|
|
$.each(instance.chipsData, function(index, el) {
|
|
val_list.push(el.tag);
|
|
});
|
|
let hidden_inp = `#${el_id.split('-')[1]}`
|
|
$(hidden_inp).val(val_list.toString());
|
|
// console.log($(hidden_inp).val());
|
|
$(`#${el_id} input`).trigger('focus');
|
|
}
|
|
|
|
function init_autocomplete_chips(){
|
|
$(".chips").each(function(index, el) {
|
|
let el_id = $(this).attr('id');
|
|
let el_this = $(this);
|
|
$(this).chips({
|
|
placeholder: $(this).attr('data-placeholder'),
|
|
secondaryPlaceholder: $(this).attr('data-second-placeholder'),
|
|
limit: $(this).attr('data-limit'),
|
|
autocompleteOptions: {
|
|
data: null,
|
|
},
|
|
onChipAdd: function (){
|
|
autocomplete_chips_add_function(el_id, el);
|
|
$("#deal-form-default-fields").trigger('change');
|
|
},
|
|
onChipDelete: function () {
|
|
autocomplete_chips_add_function(el_id, el);
|
|
$("#deal-form-default-fields").trigger('change');
|
|
},
|
|
});
|
|
|
|
let hidden_inp = `#${el_id.split('-')[1]}`
|
|
if ($(hidden_inp).val() !== "None") {
|
|
let instance = M.Chips.getInstance($(this));
|
|
let contacts = $(hidden_inp).val();
|
|
contacts = contacts.split(',');
|
|
$.each(contacts, function(index, el) {
|
|
instance.addChip({
|
|
tag: el,
|
|
});
|
|
});
|
|
}
|
|
$(`#${el_id} input`).on('keydown', function(e) {
|
|
let instance = M.Chips.getInstance(el_this);
|
|
let keyCode = e.keyCode || e.which;
|
|
if (keyCode == 9) {
|
|
let option = $(el_this).find('.autocomplete-content li').first()
|
|
if (option.length > 0) {
|
|
instance.autocomplete.selectOption(option);
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
});
|
|
|
|
$(`#${el_id} input`).on('keyup', function(e) {
|
|
let instance = M.Chips.getInstance(el_this);
|
|
let keyCode = e.keyCode || e.which;
|
|
let ign_codes = [40, 38, 37, 39, 16, 9, 20, 17, 18, 32]
|
|
if (ign_codes.includes(keyCode)) {}
|
|
else {
|
|
$.ajax({
|
|
url: $("#load-autocomplete-contacts-url").attr('data-url'),
|
|
type: 'GET',
|
|
data: {
|
|
contact_group: $(`#${el_id}`).attr('data-contact_group'),
|
|
inp_val: $(this).val(),
|
|
},
|
|
success: function(data){
|
|
instance.autocomplete.updateData(data);
|
|
sleep(100).then(() => {
|
|
instance.autocomplete.open();
|
|
});
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
$(`#${el_id} input`).on('blur', function() {
|
|
let instance = M.Chips.getInstance(el_this);
|
|
sleep(250).then(() => {
|
|
if (instance.chipsData.length < 1 && $(this).val().length > 0){
|
|
$(this).val('');
|
|
M.toast({html: "Press enter to add a contact"})
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
}
|
|
|
|
|
|
function toggleDarkMode(){
|
|
let mode = localStorage.getItem('mode');
|
|
if (mode === 'dark') {
|
|
document.documentElement.setAttribute('data-theme', 'light');
|
|
localStorage.setItem('mode', null);
|
|
} else {
|
|
document.documentElement.setAttribute('data-theme', 'dark');
|
|
localStorage.setItem('mode', 'dark');
|
|
}
|
|
// location.reload(true);
|
|
}
|
|
|
|
function toggleTooltips(){
|
|
let tooltips_enabled = localStorage.getItem('tooltips_enabled');
|
|
if (tooltips_enabled === 'false'){
|
|
localStorage.setItem('tooltips_enabled', null);
|
|
$('.tooltipped').tooltip();
|
|
} else {
|
|
localStorage.setItem('tooltips_enabled', 'false');
|
|
try {
|
|
$(".tooltipped").tooltip('destroy');
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
|
|
function init_copy_btn(parent_class){
|
|
$(".copy-btn").on('click', function(e) {
|
|
let target_text = $(this).closest(parent_class).find('.copy-target').text();
|
|
console.log(target_text)
|
|
let copy_input = $("#copy-input");
|
|
copy_input.val(target_text);
|
|
copy_input.removeClass("hide");
|
|
copy_input.select();
|
|
document.execCommand("copy");
|
|
copy_input.addClass("hide");
|
|
copy_input.val('');
|
|
M.toast({html: "Copied to Clipboard"})
|
|
});
|
|
}
|
|
|
|
function isEmail(email) {
|
|
let regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
|
|
return regex.test(email);
|
|
}
|
|
|
|
// Cleave
|
|
function initCleave(){
|
|
// prevent database from filling inputs with "None"
|
|
$("input").each(function(e) {
|
|
if($(this).val() === "None"){
|
|
$(this).val('');
|
|
}
|
|
});
|
|
M.updateTextFields();
|
|
document.querySelectorAll('.input-phone').forEach(function (el) {
|
|
new Cleave(el, {
|
|
phone: true,
|
|
phoneRegionCode: 'US',
|
|
delimiter: '-',
|
|
});
|
|
});
|
|
document.querySelectorAll('.money').forEach(function (el) {
|
|
new Cleave(el, {
|
|
numeral: true,
|
|
numeralThousandsGroupStyle: 'thousand',
|
|
prefix: '$',
|
|
noImmediatePrefix: true,
|
|
numeralPositiveOnly: true
|
|
});
|
|
});
|
|
document.querySelectorAll('.days').forEach(function (el) {
|
|
new Cleave(el, {
|
|
blocks: [2],
|
|
numericOnly: true,
|
|
});
|
|
});
|
|
document.querySelectorAll('.datepicker').forEach(function (el) {
|
|
new Cleave(el, {
|
|
date: true,
|
|
delimiter: '/',
|
|
datePattern: ['m', 'd', 'y']
|
|
});
|
|
});
|
|
document.querySelectorAll('.zip_code').forEach(function (el) {
|
|
new Cleave(el, {
|
|
blocks: [5],
|
|
numericOnly: true,
|
|
});
|
|
});
|
|
document.querySelectorAll('.initial').forEach(function (el) {
|
|
new Cleave(el, {
|
|
blocks: [1],
|
|
});
|
|
});
|
|
document.querySelectorAll('.state').forEach(function (el) {
|
|
new Cleave(el, {
|
|
blocks: [2],
|
|
uppercase: true
|
|
});
|
|
});
|
|
document.querySelectorAll('.number').forEach(function (el) {
|
|
new Cleave(el, {
|
|
numeral: true
|
|
});
|
|
});
|
|
}
|
|
|
|
function hide_sidenav() {
|
|
$("#main-sidenav").addClass('hide');
|
|
$("#main.main-full").css('padding-left', 0);
|
|
$("#show-sidenav").removeClass('hide');
|
|
localStorage.setItem('sidenav_hidden', 'true');
|
|
}
|
|
|
|
function show_sidenav(){
|
|
$("#main-sidenav").removeClass('hide');
|
|
$("#main.main-full").css('padding-left', 64);
|
|
$("#show-sidenav").addClass('hide');
|
|
localStorage.setItem('sidenav_hidden', null);
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// Document ready function
|
|
//--------------------------------------------------------------------------------------
|
|
$(document).ready(function () {
|
|
"use strict";
|
|
|
|
// INITS
|
|
init_datepicker();
|
|
init_timepicker();
|
|
initCleave();
|
|
init_tooltips();
|
|
init_select();
|
|
|
|
if (localStorage.getItem('sidenav_hidden') === 'true'){
|
|
hide_sidenav();
|
|
}
|
|
|
|
$("#hide-sidenav").on('click', function(e) {
|
|
hide_sidenav();
|
|
});
|
|
|
|
$("#show-sidenav .material-icons-outlined").on('click', function(e) {
|
|
show_sidenav();
|
|
});
|
|
|
|
$( "#show-sidenav" ).draggable({ axis: "y" });
|
|
|
|
$(".dropdown-trigger").dropdown({
|
|
coverTrigger: false,
|
|
constrainWidth: false
|
|
});
|
|
$(".tabs").tabs();
|
|
$(".scrollspy").scrollSpy();
|
|
|
|
// Fab
|
|
$(".fixed-action-btn").floatingActionButton();
|
|
$(".fixed-action-btn.horizontal").floatingActionButton({
|
|
direction: "left"
|
|
});
|
|
$(".fixed-action-btn.click-to-toggle").floatingActionButton({
|
|
hoverEnabled: false
|
|
});
|
|
$(".fixed-action-btn.toolbar").floatingActionButton({
|
|
toolbarEnabled: true
|
|
});
|
|
$('.tap-target').tapTarget();
|
|
$('.tap-target').tapTarget('open');
|
|
|
|
// Detect touch screen and enable scrollbar if necessary
|
|
function is_touch_device() {
|
|
try {
|
|
document.createEvent("TouchEvent");
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
if (is_touch_device()) {
|
|
$("#nav-mobile").css({
|
|
overflow: "auto"
|
|
});
|
|
}
|
|
|
|
// mobile sidenav for top-nav layout
|
|
$('.top-nav-mobile-sidenav').sidenav({
|
|
edge: 'right'
|
|
});
|
|
|
|
// Init collapsible
|
|
$(".collapsible").collapsible({
|
|
accordion: true,
|
|
onOpenStart: function() {
|
|
// Removed open class first and add open at collapsible active
|
|
$(".collapsible > li.open").removeClass("open");
|
|
setTimeout(function() {
|
|
$("#slide-out > li.active > a")
|
|
.parent()
|
|
.addClass("open");
|
|
}, 10);
|
|
}
|
|
});
|
|
|
|
// Add open class on init
|
|
$("#slide-out > li.active > a")
|
|
.parent()
|
|
.addClass("open");
|
|
|
|
// Open active menu for multi level
|
|
if ($("li.active .collapsible-sub .collapsible").find("a.active").length > 0) {
|
|
$("li.active .collapsible-sub .collapsible")
|
|
.find("a.active")
|
|
.closest("div.collapsible-body")
|
|
.show();
|
|
$("li.active .collapsible-sub .collapsible")
|
|
.find("a.active")
|
|
.closest("div.collapsible-body")
|
|
.closest("li")
|
|
.addClass("active");
|
|
}
|
|
|
|
// Auto Scroll menu to the active item
|
|
var position;
|
|
if (
|
|
$(".sidenav-main li a.active")
|
|
.parent("li.active")
|
|
.parent("ul.collapsible-sub").length > 0
|
|
) {
|
|
position = $(".sidenav-main li a.active")
|
|
.parent("li.active")
|
|
.parent("ul.collapsible-sub")
|
|
.position();
|
|
} else {
|
|
position = $(".sidenav-main li a.active")
|
|
.parent("li.active")
|
|
.position();
|
|
}
|
|
setTimeout(function() {
|
|
if (position !== undefined) {
|
|
$(".sidenav-main ul")
|
|
.stop()
|
|
.animate({ scrollTop: position.top - 300 }, 300);
|
|
}
|
|
}, 300);
|
|
|
|
|
|
// Collapsible navigation menu
|
|
$(".nav-collapsible .navbar-toggler").click(function() {
|
|
// Toggle navigation expan and collapse on radio click
|
|
if ($(".sidenav-main").hasClass("nav-expanded") && !$(".sidenav-main").hasClass("nav-lock")) {
|
|
$(".sidenav-main").toggleClass("nav-expanded");
|
|
$("#main").toggleClass("main-full");
|
|
} else {
|
|
$("#main").toggleClass("main-full");
|
|
}
|
|
// Set navigation lock / unlock with radio icon
|
|
if (
|
|
$(this)
|
|
.children()
|
|
.text() == "radio_button_unchecked"
|
|
) {
|
|
$(this)
|
|
.children()
|
|
.text("radio_button_checked");
|
|
$(".sidenav-main").addClass("nav-lock");
|
|
$(".navbar .nav-collapsible").addClass("sideNav-lock");
|
|
} else {
|
|
$(this)
|
|
.children()
|
|
.text("radio_button_unchecked");
|
|
$(".sidenav-main").removeClass("nav-lock");
|
|
$(".navbar .nav-collapsible").removeClass("sideNav-lock");
|
|
}
|
|
});
|
|
|
|
// Expand navigation on mouseenter event
|
|
$(".sidenav-main.nav-collapsible, .navbar .brand-sidebar").mouseenter(function() {
|
|
if (!$(".sidenav-main.nav-collapsible").hasClass("nav-lock")) {
|
|
$(".sidenav-main.nav-collapsible, .navbar .nav-collapsible")
|
|
.addClass("nav-expanded")
|
|
.removeClass("nav-collapsed");
|
|
$("#slide-out > li.close > a")
|
|
.parent()
|
|
.addClass("open")
|
|
.removeClass("close");
|
|
|
|
setTimeout(function() {
|
|
// Open only if collapsible have the children
|
|
if ($(".collapsible .open").children().length > 1) {
|
|
$(".collapsible").collapsible("open", $(".collapsible .open").index());
|
|
}
|
|
}, 100);
|
|
}
|
|
});
|
|
|
|
// Collapse navigation on mouseleave event
|
|
$(".sidenav-main.nav-collapsible, .navbar .brand-sidebar").mouseleave(function() {
|
|
if (!$(".sidenav-main.nav-collapsible").hasClass("nav-lock")) {
|
|
var openLength = $(".collapsible .open").children().length;
|
|
$(".sidenav-main.nav-collapsible, .navbar .nav-collapsible")
|
|
.addClass("nav-collapsed")
|
|
.removeClass("nav-expanded");
|
|
$("#slide-out > li.open > a")
|
|
.parent()
|
|
.addClass("close")
|
|
.removeClass("open");
|
|
setTimeout(function() {
|
|
// Open only if collapsible have the children
|
|
if (openLength > 1) {
|
|
$(".collapsible").collapsible("close", $(".collapsible .close").index());
|
|
}
|
|
}, 100);
|
|
}
|
|
});
|
|
|
|
// make jquery contains selector case unaware
|
|
jQuery.expr[':'].contains = function(a, i, m) {
|
|
return jQuery(a).text().toUpperCase()
|
|
.indexOf(m[3].toUpperCase()) >= 0;
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|