@iladiro/angular-counter
Version:
Angular Counter plugin with countdown and progress bar, flexible and easily customizable
1 lines • 18.4 kB
Source Map (JSON)
{"version":3,"file":"iladiro-angular-counter.mjs","sources":["../../../projects/counter/src/lib/components/counter.component.ts","../../../projects/counter/src/lib/components/counter.component.html","../../../projects/counter/src/lib/counter.module.ts","../../../projects/counter/src/public-api.ts","../../../projects/counter/src/iladiro-angular-counter.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { CurrentDate } from '../interfaces/currentDate';\nimport { ProgressbarLabel } from '../interfaces/progressbarlabel';\nimport { CountDownLabel } from '../interfaces/countdownlabel';\n\n@Component({\n selector: 'iladiro-counter',\n templateUrl: './counter.component.html',\n styleUrls: ['./counter.component.scss']\n})\nexport class CounterComponent implements OnChanges, OnDestroy, AfterViewInit { \n\n @Input() customClass!: string;\n @Input() title!: string;\n @Input() expiredAlertText: string = 'Time is expired';\n @Input() startDate!: string;\n @Input() endDate!: string;\n @Input() progressbarSize!: string;\n @Input() progressbarColor!: string;\n @Input() daysLabel = 'Days';\n @Input() hoursLabel = 'Hours';\n @Input() minutesLabel = 'Minutes';\n @Input() secondsLabel = 'Seconds';\n\n @Output() expiredEvent = new EventEmitter();\n\n @ViewChild('missing') missing!: ElementRef;\n @ViewChild('past') past!: ElementRef;\n\n days = 0;\n hours = 0;\n minutes = 0;\n seconds = 0;\n\n missingPercentage = 100;\n pastPercentage = 0;\n\n expired = false;\n\n private distance!: number;\n private totalDays!: number;\n private totalTime!: number; \n\n private progressbarRun!: any;\n private countdownRun!: any;\n\n constructor(public cdRef:ChangeDetectorRef) {}\n\n private convertToTimeStamp(value: string): number {\n return new Date(value).getTime();\n }\n\n private getCurrentDate(): CurrentDate {\n const today = new Date();\n const date = `${today.getFullYear()}/${today.getMonth()+1}/${today.getDate()}`;\n const time = `${today.getHours()}:${today.getMinutes()}:${today.getSeconds()}`;\n\n return {\n \"date\": date,\n \"time\": time,\n \"dateTime\": `${date} ${time}`\n }\n }\n\n private calculateTotalTime(start: string, end: string): number {\n return this.convertToTimeStamp(end) - this.convertToTimeStamp(start);\n }\n\n private calculatePastTime(): number {\n return this.convertToTimeStamp(this.getCurrentDate().dateTime) - this.convertToTimeStamp(this.startDate);\n }\n\n private calculateMissingTime(): number { \n return this.totalTime - this.calculatePastTime();\n }\n\n private calculateTotalDays(start: string, end: string): number {\n return (\n this.convertToTimeStamp(end) -\n this.convertToTimeStamp(start)\n ) / (1000 * 3600 * 24);\n }\n\n private dateValidation(value: string): boolean {\n const rejex = /[0-9]{4}[\\/\\-](0[1-9]|1[0-2])[\\/\\-](0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]/;\n const res = value.match(rejex);\n return (res) ? true : false;\n }\n\n private percentage(partialValue: number, totalValue: number): number {\n return (100 * partialValue) / totalValue;\n }\n\n private calculatePercentageInTime(): ProgressbarLabel {\n return {\n \"missing\": this.percentage(\n this.calculateMissingTime(), this.totalTime\n ),\n \"past\": this.percentage(\n this.calculatePastTime(), this.totalTime\n )\n }\n }\n\n private isExpired(): boolean {\n return this.calculateMissingTime() < 0;\n }\n \n private countdown(isExpired: boolean): CountDownLabel {\n this.distance = this.calculateMissingTime();\n\n // Time calculations for days, hours, minutes and seconds\n const days = Math.floor(this.distance / (1000 * 3600 * 24));\n const hours = Math.floor((this.distance % (1000 * 3600 * 24)) / (1000 * 3600));\n const minutes = Math.floor((this.distance % (1000 * 3600)) / (1000 * 60));\n const seconds = Math.floor((this.distance % (1000 * 60)) / 1000);\n\n //const isExpired = this.isExpired();\n\n return {\n days: isExpired ? 0 : days,\n hours: isExpired ? 0 : hours,\n minutes: isExpired ? 0 : minutes,\n seconds: isExpired ? 0 : seconds\n }\n }\n\n private progressCounterBar(): ProgressbarLabel {\n this.distance = this.calculateMissingTime();\n\n const missingPerc = this.calculatePercentageInTime().missing;\n const pastPerc = this.calculatePercentageInTime().past;\n\n const condition = this.distance < 0; \n\n return {\n missing: condition ? 0 : missingPerc,\n past: condition ? 100 : pastPerc\n }\n }\n\n private resizeProgressCounterBar(obj: ProgressbarLabel): void { \n this.missing.nativeElement.attributes['style'].value = `width: ${obj.missing}%;`;\n this.past.nativeElement.attributes['style'].value = `width: ${obj.past}%`;\n\n this.missingPercentage = Math.round(obj.missing);\n this.pastPercentage = Math.round(obj.past);\n }\n\n private settingDate(count: CountDownLabel): void {\n this.days = count.days;\n this.hours = count.hours;\n this.minutes = count.minutes;\n this.seconds = count.seconds;\n }\n\n private clearAllaSetInterval(): void {\n if(this.countdownRun) {\n clearInterval(this.countdownRun);\n }\n\n if(this.progressbarRun) {\n clearInterval(this.progressbarRun);\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if(changes['startDate'] && changes['endDate']) {\n if((this.dateValidation(changes['startDate'].currentValue) === false) || (this.dateValidation(changes['endDate'].currentValue) === false)) { \n console.log(\"Incorrect startDate or endDate values\");\n } else {\n if(this.convertToTimeStamp(changes['endDate'].currentValue) > this.convertToTimeStamp(changes['startDate'].currentValue)) {\n this.totalDays = this.calculateTotalDays(changes['startDate'].currentValue, changes['endDate'].currentValue);\n this.totalTime = this.calculateTotalTime(changes['startDate'].currentValue, changes['endDate'].currentValue);\n } else {\n console.log(\"la data di fine deve essere maggiore della data di inizio\");\n } \n }\n } \n }\n\n ngAfterViewInit(): void { \n if(this.isExpired()) {\n this.resizeProgressCounterBar(this.progressCounterBar());\n this.settingDate(this.countdown(true)); \n } else {\n this.resizeProgressCounterBar(this.progressCounterBar());\n\n this.countdownRun = setInterval(() => { \n if(this.isExpired()){ \n clearInterval(this.countdownRun);\n this.expired = true;\n this.expiredEvent.emit(true);\n } else {\n this.settingDate(this.countdown(false));\n } \n }, 1000);\n\n this.progressbarRun = setInterval(() => {\n if(this.isExpired()){\n clearInterval(this.progressbarRun);\n } else {\n this.resizeProgressCounterBar(this.progressCounterBar());\n } \n }, 6000);\n } \n\n this.cdRef.detectChanges();\n }\n\n ngOnDestroy(): void {\n this.clearAllaSetInterval();\n }\n\n}\n","<div class=\"i-counter {{customClass}}\" id=\"counter\" [class.expired]=\"expired\">\r\n\t<h3 class=\"i-counter__title\" data-counter=\"title\" *ngIf=\"title\">\r\n\t\t{{title}}\r\n\t</h3>\r\n \t<div class=\"i-counter__progressbar\" data-counter=\"progressbar\">\r\n\t\t<div class=\"i-counter__progressbar-line\" [class]=\"'i-counter__progressbar-line--' + (progressbarSize ? progressbarSize : 'default')\">\t\t\t\r\n\t\t\t<div class=\"i-counter__progressbar-line-missing\" #missing data-counter=\"missing\" [style.width]=\"'100%'\">\r\n\t\t\t\t<span [style.backgroundColor]=\"progressbarColor\"></span>\r\n\t\t\t</div>\t\t\t\r\n\t\t\t<span class=\"i-counter__progressbar-line-past\" #past data-counter=\"past\" style=\"width: 0%;\"></span>\t\t\t\r\n\t\t</div>\r\n\t\t<div class=\"i-counter__progressbar-percentage\" [class]=\"'i-counter__progressbar-percentage--' + (progressbarSize ? progressbarSize : 'default')\" data-counter=\"progressbar_percentage\">\r\n\t\t\t<span class=\"i-counter__progressbar-percentage-missing\" data-counter=\"missing_percentage\">{{missingPercentage}}%</span>\t\t\t\r\n\t\t\t<span class=\"i-counter__progressbar-percentage-past\" data-counter=\"past_percentage\">{{pastPercentage}}%</span>\t\t\t\r\n\t\t</div>\r\n\t</div>\r\n \t<div class=\"i-counter__countdown\" [class]=\"'i-counter__countdown--' + (progressbarSize ? progressbarSize : 'default')\">\r\n\t\t<div class=\"i-counter__countdown-time\" data-counter=\"countdown\">\r\n\t\t\t<div>\r\n\t\t\t\t<p class=\"i-counter__countdown-value\" data-counter=\"days\">{{days}}</p>\r\n\t\t\t\t<label class=\"i-counter__countdown-label\" data-counter=\"days_label\">{{daysLabel}}</label>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<p class=\"i-counter__countdown-value\" data-counter=\"hours\">{{hours}}</p>\r\n\t\t\t\t<label class=\"i-counter__countdown-label\" data-counter=\"hours_label\">{{hoursLabel}}</label>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<p class=\"i-counter__countdown-value\" data-counter=\"minutes\">{{minutes}}</p>\r\n\t\t\t\t<label class=\"i-counter__countdown-label\" data-counter=\"minutes_label\">{{minutesLabel}}</label>\r\n\t\t\t</div>\r\n\t\t\t<div>\r\n\t\t\t\t<p class=\"i-counter__countdown-value\" data-counter=\"seconds\">{{seconds}}</p>\r\n\t\t\t\t<label class=\"i-counter__countdown-label\" data-counter=\"seconds_label\">{{secondsLabel}}</label>\r\n\t\t\t</div>\r\n\t\t</div>\t\t\r\n \t</div>\r\n\t<p class=\"i-counter__expired-alert\" data-counter=\"expired_alert\" *ngIf=\"expired\">{{expiredAlertText}}</p>\r\n</div>","import { NgModule } from '@angular/core';\nimport { CounterComponent } from './components/counter.component';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [\n CounterComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n CounterComponent\n ]\n})\nexport class IladiroCounterModule { }\n","/*\n * Public API Surface of counter\n */\n\n/* export * from './lib/counter.service'; */\nexport * from './lib/components/counter.component';\nexport * from './lib/counter.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}