ngx-progress-indicator
Version:
A progress indicator library for [Angular](https://angular.io/) apps.
90 lines • 11.1 kB
JavaScript
import { Injectable, Optional } from '@angular/core';
import { interval, take } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "./ngx-progress-indicator-config.model";
const assign = Object.assign;
export class NgxProgressIndicatorService {
constructor(rendererFactory, config) {
this.rendererFactory = rendererFactory;
this.renderer = this.rendererFactory.createRenderer(null, null);
this.initialize(config);
}
initialize(config) {
const options = assign({
size: 2,
color: '#0083ff',
className: 'ngx-progress-indicator',
delay: 80,
}, config);
const initialStyle = {
position: 'fixed',
top: 0,
left: 0,
margin: 0,
padding: 0,
border: 'none',
borderRadius: 0,
backgroundColor: config.color,
zIndex: 10000,
height: typeof config.size === 'number' ? config.size + 'px' : config.size,
color: config.color,
opacity: 0,
width: '0%',
};
const startedStyle = {
opacity: 1,
width: '99%',
transition: 'width 10s cubic-bezier(0.1, 0.05, 0, 1)',
};
const finishedStyle = {
opacity: 0,
width: '100%',
transition: 'width 0.1s ease-out, opacity 0.5s ease 0.2s',
};
const glowStyle = {
opacity: 0.4,
boxShadow: '3px 0 8px',
height: '100%',
};
let parent;
this.start = () => {
if (parent && parent.parentNode) {
this.renderer.removeChild(parent.parentNode, parent);
}
parent = this.renderer.createElement('div');
parent.className = options.className + ' stopped';
this.renderer.appendChild(document.body, parent);
assign(parent.style, initialStyle);
let child = this.renderer.createElement('div');
child.className = 'glow';
this.renderer.appendChild(parent, child);
assign(child.style, glowStyle);
interval(options.delay)
.pipe(take(1))
.subscribe({
next: () => {
parent.className = options.className + ' started';
assign(parent.style, startedStyle);
},
});
parent.scrollTop = 0;
};
this.finish = () => {
if (parent) {
parent.className = options.className + ' finished';
assign(parent.style, finishedStyle);
}
};
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxProgressIndicatorService, deps: [{ token: i0.RendererFactory2 }, { token: i1.NgxProgressIndicatorConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxProgressIndicatorService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgxProgressIndicatorService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i1.NgxProgressIndicatorConfig, decorators: [{
type: Optional
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXByb2dyZXNzLWluZGljYXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXByb2dyZXNzLWluZGljYXRvci9zcmMvbGliL25neC1wcm9ncmVzcy1pbmRpY2F0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUl0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBSzdCLE1BQU0sT0FBTywyQkFBMkI7SUFTdEMsWUFDVSxlQUFpQyxFQUM3QixNQUFrQztRQUR0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFHekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQWtDO1FBQ25ELE1BQU0sT0FBTyxHQUErQixNQUFNLENBQ2hEO1lBQ0UsSUFBSSxFQUFFLENBQUM7WUFDUCxLQUFLLEVBQUUsU0FBUztZQUNoQixTQUFTLEVBQUUsd0JBQXdCO1lBQ25DLEtBQUssRUFBRSxFQUFFO1NBQ1YsRUFDRCxNQUFNLENBQ1AsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHO1lBQ25CLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEVBQUUsQ0FBQztZQUNULE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLE1BQU07WUFDZCxZQUFZLEVBQUUsQ0FBQztZQUNmLGVBQWUsRUFBRSxNQUFNLENB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ZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3hQcm9ncmVzc0luZGljYXRvckNvbmZpZyB9IGZyb20gJy4vbmd4LXByb2dyZXNzLWluZGljYXRvci1jb25maWcubW9kZWwnO1xuXG5jb25zdCBhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTmd4UHJvZ3Jlc3NJbmRpY2F0b3JTZXJ2aWNlIHtcbiAgLyoqIFNob3cgdGhlIHByb2dyZXNzIGJhciBhbmQgYmVnaW4gYW5pbWF0aW5nIGl0LiAqL1xuICBwdWJsaWMgc3RhcnQhOiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBFbmQgdGhlIHByb2dyZXNzIGJhciBhbmltYXRpb24uICovXG4gIHB1YmxpYyBmaW5pc2ghOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgcmVuZGVyZXIhOiBSZW5kZXJlcjI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnOiBOZ3hQcm9ncmVzc0luZGljYXRvckNvbmZpZ1xuICApIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG5cbiAgICB0aGlzLmluaXRpYWxpemUoY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZShjb25maWc6IE5neFByb2dyZXNzSW5kaWNhdG9yQ29uZmlnKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogTmd4UHJvZ3Jlc3NJbmRpY2F0b3JDb25maWcgPSBhc3NpZ24oXG4gICAgICB7XG4gICAgICAgIHNpemU6IDIsXG4gICAgICAgIGNvbG9yOiAnIzAwODNmZicsXG4gICAgICAgIGNsYXNzTmFtZTogJ25neC1wcm9ncmVzcy1pbmRpY2F0b3InLFxuICAgICAgICBkZWxheTogODAsXG4gICAgICB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIGNvbnN0IGluaXRpYWxTdHlsZSA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgdG9wOiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHBhZGRpbmc6IDAsXG4gICAgICBib3JkZXI6ICdub25lJyxcbiAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29uZmlnLmNvbG9yLFxuICAgICAgekluZGV4OiAxMDAwMCxcbiAgICAgIGhlaWdodDpcbiAgICAgICAgdHlwZW9mIGNvbmZpZy5zaXplID09PSAnbnVtYmVyJyA/IGNvbmZpZy5zaXplICsgJ3B4JyA6IGNvbmZpZy5zaXplLFxuICAgICAgY29sb3I6IGNvbmZpZy5jb2xvcixcbiAgICAgIG9wYWNpdHk6IDAsXG4gICAgICB3aWR0aDogJzAlJyxcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnRlZFN0eWxlID0ge1xuICAgICAgb3BhY2l0eTogMSxcbiAgICAgIHdpZHRoOiAnOTklJyxcbiAgICAgIHRyYW5zaXRpb246ICd3aWR0aCAxMHMgY3ViaWMtYmV6aWVyKDAuMSwgMC4wNSwgMCwgMSknLFxuICAgIH07XG5cbiAgICBjb25zdCBmaW5pc2hlZFN0eWxlID0ge1xuICAgICAgb3BhY2l0eTogMCxcbiAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB0cmFuc2l0aW9uOiAnd2lkdGggMC4xcyBlYXNlLW91dCwgb3BhY2l0eSAwLjVzIGVhc2UgMC4ycycsXG4gICAgfTtcblxuICAgIGNvbnN0IGdsb3dTdHlsZSA9IHtcbiAgICAgIG9wYWNpdHk6IDAuNCxcbiAgICAgIGJveFNoYWRvdzogJzNweCAwIDhweCcsXG4gICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICB9O1xuXG4gICAgbGV0IHBhcmVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgdGhpcy5zdGFydCA9ICgpID0+IHtcbiAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChwYXJlbnQucGFyZW50Tm9kZSwgcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSArICcgc3RvcHBlZCc7XG5cbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgcGFyZW50KTtcblxuICAgICAgYXNzaWduKHBhcmVudC5zdHlsZSwgaW5pdGlhbFN0eWxlKTtcblxuICAgICAgbGV0IGNoaWxkID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNoaWxkLmNsYXNzTmFtZSA9ICdnbG93JztcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQocGFyZW50LCBjaGlsZCk7XG4gICAgICBhc3NpZ24oY2hpbGQuc3R5bGUsIGdsb3dTdHlsZSk7XG5cbiAgICAgIGludGVydmFsKG9wdGlvbnMuZGVsYXkpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSArICcgc3RhcnRlZCc7XG4gICAgICAgICAgICBhc3NpZ24ocGFyZW50LnN0eWxlLCBzdGFydGVkU3R5bGUpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICBwYXJlbnQuc2Nyb2xsVG9wID0gMDtcbiAgICB9O1xuXG4gICAgdGhpcy5maW5pc2ggPSAoKSA9PiB7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzTmFtZSArICcgZmluaXNoZWQnO1xuICAgICAgICBhc3NpZ24ocGFyZW50LnN0eWxlLCBmaW5pc2hlZFN0eWxlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG4iXX0=