Code coverage report for src/parts/notifyFader.js

# All files / src/parts notifyFader.js

0% Statements 0/28
0% Branches 0/24
0% Functions 0/9
0% Lines 0/28

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94

    /**
     * A method to use the implemented notifier, via ajax or javascript
     *
     * @param text string  | The text to be displayed
     * @param classes string | The classes that will be put onto the inner container
     * @param styles object | An object of css-attributes that will be put onto the inner container
     * @param customOptions | possible options are:
     *                         useHtml (boolean) -> use the @text as html
     *                         timeout (int) -> the timeout in milliseconds until the notifier will fade/slide out
     *                         inAnimation (string) -> The jQuery animation to call for the notifier [fadeIn||slideDown]
     *                         outAnimation (string) -> The jQuery animation to remove the notifier [fadeOut||slideUp]
     *                         animationTime (int) -> The time in milliseconds the animation will last
     */

    window.LS = window.LS || {};

    class NotifyFader {
        constructor(){
            this.count = 0;
        }

        increment(){this.count = this.count+1;}
        decrement(){this.count = this.count-1;}
        getCount(){return this.count;};

        create(text, classes, styles, customOptions){

            this.increment();
            customOptions = customOptions || {};
            styles = styles || {};
            classes = classes || "well well-lg";

            const options = {
                useHtml : customOptions.useHtml || true,
                timeout : customOptions.timeout || 3500,
                inAnimation : customOptions.inAnimation || "slideDown",
                outAnimation : customOptions.outAnimation || "slideUp",
                animationTime : customOptions.animationTime || 450
            };

            const container = $("<div> </div>");
            const newID = "notif-container_"+this.getCount();

            container.addClass(classes);
            container.css(styles);

            if(options.useHtml){
                container.html(text);
            } else {
                container.text(text);
            }

            $('#notif-container').clone()
                .attr('id', newID)
                .css({
                    display: 'none',
                    top : (8*((this.getCount())))+"%",
                    position: 'fixed',
                    left : "15%",
                    width : "70%",
                    'z-index':3500
                })
                .appendTo($('#notif-container').parent())
                .html(container);

            // using the option inAnimation as funtion of jquery
            $('#'+newID)[options.inAnimation](
                options.animationTime,
                () => {
                    const remove = () => {
                        $('#'+newID)[options.outAnimation](
                            options.animationTime,
                            () => {
                                $('#'+newID).remove();
                                this.decrement();
                            }
                        );
                    }
                    $(this).on('click', remove);
                    if(options.timeout) {
                        setTimeout(remove, options.timeout);
                    }
                }
            );
        };
    };

    window.LS.LsGlobalNotifier = window.LS.LsGlobalNotifier || new NotifyFader();

    export default function (text, classes, styles, customOptions) {
        window.LS.LsGlobalNotifier.create(text, classes, styles, customOptions);
    };