slider-carousel
Version: 
Angular component of the carousel, using the slider as a transition. This is a simple, clean and light alternative. It also does not need dependencies.
106 lines • 13.5 kB
JavaScript
import { Injectable, ComponentFactoryResolver, ApplicationRef, Injector, EmbeddedViewRef, ComponentRef } from '@angular/core';
import { Observable } from 'rxjs';
import { SliderCarouselPreviewComponent } from './slider-carousel-preview/slider-carousel-preview.component';
export class Helper {
    constructor(componentFactoryResolver, appRef, injector) {
        this.componentFactoryResolver = componentFactoryResolver;
        this.appRef = appRef;
        this.injector = injector;
    }
    openPreview(data = {}) {
        let onCloseSubscribe;
        let object;
        object = {
            onClose: new Observable((subscribe) => onCloseSubscribe = subscribe),
            instance: null
        };
        let componenRef = this.createComponent(SliderCarouselPreviewComponent, data, (data) => {
            onCloseSubscribe.next(data);
        });
        object.instance = componenRef.instance;
        return object;
    }
    createComponent(component, data, onClose) {
        const componentRef = this.componentFactoryResolver
            .resolveComponentFactory(component)
            .create(this.injector);
        if (!data)
            data = {};
        data.close = (data) => {
            this.appRef.detachView(componentRef.hostView);
            componentRef.destroy();
            if (onClose)
                onClose(data);
        };
        Object.assign(componentRef.instance, { modalRef: data });
        this.appRef.attachView(componentRef.hostView);
        const domElem = componentRef.hostView.rootNodes[0];
        document.body.appendChild(domElem);
        return componentRef;
    }
    smoothScroll(element, scroll, duration = 400, direction = 'top') {
        let start = direction === 'top' ? element.scrollTop : element.scrollLeft;
        if (scroll < 0)
            scroll = 0;
        let distance = (scroll - start) - 77;
        let startTime = new Date().getTime();
        if (!duration)
            duration = 400;
        let easeInOutQuart = (time, from, distance, duration) => {
            if ((time /= duration / 2) < 1)
                return distance / 2 * time * time * time * time + from;
            return -distance / 2 * ((time -= 2) * time * time * time - 2) + from;
        };
        let timer = setInterval(() => {
            const time = new Date().getTime() - startTime, newScroll = easeInOutQuart(time, start, distance, duration);
            if (time >= duration) {
                clearInterval(timer);
                timer = null;
            }
            if (element.scrollTo) {
                if (direction === 'top')
                    element.scrollTo(element.scrollLeft, newScroll);
                else
                    element.scrollTo(newScroll, element.scrollTop);
            }
            else {
                if (direction === 'top')
                    element.scrollTop = newScroll;
                else
                    element.scrollLeft = newScroll;
            }
        }, 1000 / 60);
        return timer;
    }
    elementIsChild(element, parentElment) {
        try {
            while (element && element.tagName.toUpperCase() !== 'BODY') {
                if (element === parentElment) {
                    return true;
                }
                element = element.parentNode;
            }
            return false;
        }
        catch (_a) {
            return false;
        }
    }
    isMobileDevice() {
        return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1);
    }
}
Helper.ctorParameters = () => [
    { type: ComponentFactoryResolver },
    { type: ApplicationRef },
    { type: Injector }
];
Helper.decorators = [
    { type: Injectable }
];
Helper.ctorParameters = () => [
    { type: ComponentFactoryResolver },
    { type: ApplicationRef },
    { type: Injector }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6Im5nOi8vc2xpZGVyLWNhcm91c2VsLyIsInNvdXJjZXMiOlsiaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlILE9BQU8sRUFBRSxVQUFVLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFHN0csTUFBTSxPQUFPLE1BQU07SUFFZixZQUNZLHdCQUFrRCxFQUNsRCxNQUFzQixFQUN0QixRQUFrQjtRQUZsQiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELFdBQU0sR0FBTixNQUFNLENBQWdCO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFHOUIsQ0FBQztJQUVHLFdBQVcsQ0FBQyxPQUErQixFQUFFO1FBQzdDLElBQUksZ0JBQWlDLENBQUM7UUFDNUMsSUFBSSxNQUdHLENBQUM7UUFFRixNQUFNLEdBQUc7WUFDTCxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztZQUNwRSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDO1FBRUYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNsRixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsUUFBUSxHQUFJLFdBQTRELENBQUMsUUFBUSxDQUFDO1FBRXpGLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxlQUFlLENBQUMsU0FBYyxFQUFFLElBQUks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U0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoRDtpQkFDSTtnQkFDSixJQUFJLFNBQVMsS0FBSyxLQUFLO29CQUN0QixPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQzs7b0JBRTlCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2FBQ2hDO1FBQ0YsQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUVkLE9BQU8sS0FBSyxDQUFDO0lBQ1gsQ0FBQztJQUVHLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWTtRQUMxQyxJQUFJO1lBQ0gsT0FBTyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLEVBQUU7Z0JBQzNELElBQUksT0FBTyxLQUFLLFlBQVksRUFBRTtvQkFDN0IsT0FBTyxJQUFJLENBQUM7aUJBQ1o7Z0JBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDN0I7WUFDRCxPQUFPLEtBQUssQ0FBQztTQUNiO1FBQ0QsV0FBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRVMsY0FBYztRQUNqQixPQUFPLENBQUMsT0FBTyxNQUFNLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRyxDQUFDOzs7WUEvR3FDLHdCQUF3QjtZQUMxQyxjQUFjO1lBQ1osUUFBUTs7O1lBTmpDLFVBQVU7OztZQUpVLHdCQUF3QjtZQUFFLGNBQWM7WUFBRSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIEVtYmVkZGVkVmlld1JlZiwgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTbGlkZXJDYXJvdXNlbFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL3NsaWRlci1jYXJvdXNlbC1wcmV2aWV3L3NsaWRlci1jYXJvdXNlbC1wcmV2aWV3LmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBIZWxwZXIge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcblxuICAgIH1cblx0XG5cdHB1YmxpYyBvcGVuUHJldmlldyhkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgbGV0IG9uQ2xvc2VTdWJzY3JpYmU6IFN1YnNjcmliZXI8YW55Pjtcblx0XHRsZXQgb2JqZWN0OiB7XG4gICAgICAgICAgICBvbkNsb3NlOiBPYnNlcnZhYmxlPGFueT4sXG4gICAgICAgICAgICBpbnN0YW5jZTogU2xpZGVyQ2Fyb3VzZWxQcmV2aWV3Q29tcG9uZW50XG4gICAgICAgIH07XG5cbiAgICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAgICAgb25DbG9zZTogbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZSkgPT4gb25DbG9zZVN1YnNjcmliZSA9IHN1YnNjcmliZSksXG4gICAgICAgICAgICBpbnN0YW5jZTogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBjb21wb25lblJlZiA9IHRoaXMuY3JlYXRlQ29tcG9uZW50KFNsaWRlckNhcm91c2VsUHJldmlld0NvbXBvbmVudCwgZGF0YSwgKGRhdGEpID0+IHtcbiAgICAgICAgICAgIG9uQ2xvc2VTdWJzY3JpYmUubmV4dChkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9iamVjdC5pbnN0YW5jZSA9IChjb21wb25lblJlZiBhcyBDb21wb25lbnRSZWY8U2xpZGVyQ2Fyb3VzZWxQcmV2aWV3Q29tcG9uZW50PikuaW5zdGFuY2U7XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gICAgXG4gICAgcHVibGljIGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQ6IGFueSwgZGF0YSwgb25DbG9zZTogKGRhdGEpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpXG4gICAgICAgICAgICAuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuXG4gICAgICAgIGlmICghZGF0YSkgZGF0YSA9IHt9O1xuXG4gICAgICAgIGRhdGEuY2xvc2UgPSAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIGlmIChvbkNsb3NlKSBvbkNsb3NlKGRhdGEpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb21wb25lbnRSZWYuaW5zdGFuY2UsIHsgbW9kYWxSZWY6IGRhdGEgfSk7XG5cbiAgICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZG9tRWxlbSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pLnJvb3ROb2Rlc1swXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9tRWxlbSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc21vb3RoU2Nyb2xsKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBzY3JvbGw6IG51bWJlciwgZHVyYXRpb246IG51bWJlciA9IDQwMCwgZGlyZWN0aW9uOiBzdHJpbmcgPSAndG9wJykge1xuXHRcdGxldCBzdGFydCA9IGRpcmVjdGlvbiA9PT0gJ3RvcCcgPyBlbGVtZW50LnNjcm9sbFRvcCA6IGVsZW1lbnQuc2Nyb2xsTGVmdDtcblxuXHRcdGlmIChzY3JvbGwgPCAwKSBzY3JvbGwgPSAwO1xuXG5cdFx0bGV0IGRpc3RhbmNlID0gKHNjcm9sbCAtIHN0YXJ0KSAtIDc3O1xuXG5cdFx0bGV0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0aWYgKCFkdXJhdGlvbikgZHVyYXRpb24gPSA0MDA7XG5cblx0XHRsZXQgZWFzZUluT3V0UXVhcnQgPSAodGltZSwgZnJvbSwgZGlzdGFuY2UsIGR1cmF0aW9uKSA9PiB7XG5cdFx0XHRpZiAoKHRpbWUgLz0gZHVyYXRpb24gLyAyKSA8IDEpXG5cdFx0XHRcdHJldHVybiBkaXN0YW5jZSAvIDIgKiB0aW1lICogdGltZSAqIHRpbWUgKiB0aW1lICsgZnJvbTtcblx0XHRcdHJldHVybiAtZGlzdGFuY2UgLyAyICogKCh0aW1lIC09IDIpICogdGltZSAqIHRpbWUgKiB0aW1lIC0gMikgKyBmcm9tO1xuXHRcdH07XG5cblx0XHRsZXQgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG5cdFx0XHRjb25zdCB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUsXG5cdFx0XHRuZXdTY3JvbGwgPSBlYXNlSW5PdXRRdWFydCh0aW1lLCBzdGFydCwgZGlzdGFuY2UsIGR1cmF0aW9uKTtcblxuXHRcdFx0aWYgKHRpbWUgPj0gZHVyYXRpb24pIHtcblx0XHRcdFx0Y2xlYXJJbnRlcnZhbCh0aW1lcik7XG5cdFx0XHRcdHRpbWVyID0gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVsZW1lbnQuc2Nyb2xsVG8pIHtcblx0XHRcdFx0aWYgKGRpcmVjdGlvbiA9PT0gJ3RvcCcpXG5cdFx0XHRcdFx0ZWxlbWVudC5zY3JvbGxUbyhlbGVtZW50LnNjcm9sbExlZnQsIG5ld1Njcm9sbCk7XG5cdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRlbGVtZW50LnNjcm9sbFRvKG5ld1Njcm9sbCwgZWxlbWVudC5zY3JvbGxUb3ApO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdGlmIChkaXJlY3Rpb24gPT09ICd0b3AnKVxuXHRcdFx0XHRcdGVsZW1lbnQuc2Nyb2xsVG9wID0gbmV3U2Nyb2xsO1xuXHRcdFx0XHRlbHNlXG5cdFx0XHRcdFx0ZWxlbWVudC5zY3JvbGxMZWZ0ID0gbmV3U2Nyb2xsO1xuXHRcdFx0fVxuXHRcdH0sIDEwMDAgLyA2MCk7XG5cblx0XHRyZXR1cm4gdGltZXI7XG4gICAgfVxuICAgIFxuXHRwdWJsaWMgZWxlbWVudElzQ2hpbGQoZWxlbWVudCwgcGFyZW50RWxtZW50KTogYm9vbGVhbntcblx0XHR0cnkge1xuXHRcdFx0d2hpbGUgKGVsZW1lbnQgJiYgZWxlbWVudC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJykge1xuXHRcdFx0XHRpZiAoZWxlbWVudCA9PT0gcGFyZW50RWxtZW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y2F0Y2gge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG4gICAgcHVibGljIGlzTW9iaWxlRGV2aWNlKCkge1xuICAgICAgICByZXR1cm4gKHR5cGVvZiB3aW5kb3cub3JpZW50YXRpb24gIT09IFwidW5kZWZpbmVkXCIpIHx8IChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0lFTW9iaWxlJykgIT09IC0xKTtcbiAgICB9XG59Il19