bluelinecombo
10/2/2018 - 7:04 PM

timed CTA/Modal

var pathArray = window.location.pathname.split( '/' ),
            blogSegment = 'blog',
            currentTimestamp = Date.now(),
            modalOmissionDuration = 172800000, // 2 weeks
            modalTimestamp = Number(localStorage.getItem("time-modal-last-shown")),
            ctaTimestamp = Number(localStorage.getItem("time-cta-last-shown")),
            ctaScrollPoint = getMax() * .25,
            slideCTA = $(".slide-in-cta"),
            slideCTAClose = $(".slide-in-cta .close");

        /*
            Slide in CTA
            Show at 25% progress on blog post
            Using 25% of reading progress to start
        */
        if ( $('body').hasClass('layout-blog') && $('body').hasClass('single-post') ) {
            if ((currentTimestamp - ctaTimestamp) >= modalOmissionDuration) {
                $(window).scroll(function() {
                    if( ($(window).scrollTop() > (ctaScrollPoint) ) ) {
                        slideCTA.fadeIn();
                    }
                    else{
                        slideCTA.fadeOut();
                    }
                });
            }
        }

        // close slide modal and set timestamp for 'time-cta-last-shown'
        slideCTAClose.on('click', function (e) {
            slideCTA.css('visibility', 'hidden');
            slideCTA.find('.hs-cta-node').css('visibility', 'hidden');

             
            /*
                Set visibility hidden because the timestamp check only works on page load
                This prevents the cta from showing after it's closed (and re-showing on scroll) 
                The local storage timestamp check will then prevent the cta from showing on subsequent pages.
            */
            localStorage.setItem("time-cta-last-shown", currentTimestamp);
        });


        /*

            Timed modal that loads the blog subscription form if a localStorage
            operation passes.

            Note: this modal is also loaded via data attributes (and clicking) in three
            other places on the site. Click-loading the modal has no bearing on this
            timed load.
        */
            /*
            function which checks the timestamp and localStorage parameters and if the operation passes,
            adds the timed-modal class to the body, sets localStorage and displays the modal.
            */

            
            function nl_signup_modal() {
                if ((currentTimestamp - modalTimestamp) >= modalOmissionDuration) {
                    setTimeout(function() {
                        $('body').addClass('timed-modal');
                        localStorage.setItem("time-modal-last-shown", currentTimestamp);
                        $("#subscribeModal").modal("show");
                    }, 6000);
                }
            }
            

        /*
        If the url segment includes /blog/ at all, run the function
        */
       
        if (jQuery.inArray(blogSegment, pathArray) != '-1') {
            nl_signup_modal();
        }
        

        /*
            Use the .timed-modal class to namespace the hide.bs.modal event
            which is fired immediately when the hide instance method has been called. This will prevent the 
            function from taking any action when the modal is opened by click.
        */

        $('.timed-modal #subscribeModal').on('hidden.bs.modal', function (e) {
          $('body').removeClass('timed-modal');
          localStorage.setItem("time-modal-last-shown", currentTimestamp);
        });