UNPKG

controlled-rising-skyline

Version:

This library provides a rising skyline chart with an horizontal control panel control. This widget is linked to a dynamic history of buildings. An animation displays the rising of the skyline.

44 lines 6.67 kB
import { Injectable } from '@angular/core'; import { Building, RisingSkylineService } from 'rising-skyline'; import * as i0 from "@angular/core"; import * as i1 from "rising-skyline"; export class ControlledRisingSkylineService { constructor(skylineService) { this.skylineService = skylineService; } /** * Generate a random Skyline history with 100 buildings for testing purpose. * @param skyline$ the observable whch will emit the array of buildings */ randomSkylineHistory(skyline$) { const upperYear = 2020; const upperWeek = 45; function randomInteger(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function addDays(theDate, days) { return new Date(theDate.getTime() + days * 24 * 60 * 60 * 1000); } const buildings = []; for (let id = 0; id < 100; id++) { // The building starts to rise on this date const startDate = new Date(randomInteger(2017, 2018), randomInteger(1, 12), randomInteger(1, 27)); // The building ends its rising on this date const endDate = new Date(randomInteger(2019, 2020), randomInteger(1, 12), randomInteger(1, 27)); for (let d = startDate.clone(), stepHeight = 1; d <= endDate; d.addDays(7), stepHeight++) { buildings.push(new Building(id, this.skylineService.toYearWeek(d).year, this.skylineService.toYearWeek(d).week, 40, stepHeight * 2, randomInteger(0, 100), 'Building ' + id)); } } skyline$.next(buildings); } } ControlledRisingSkylineService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ControlledRisingSkylineService_Factory() { return new ControlledRisingSkylineService(i0.ɵɵinject(i1.RisingSkylineService)); }, token: ControlledRisingSkylineService, providedIn: "root" }); ControlledRisingSkylineService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; ControlledRisingSkylineService.ctorParameters = () => [ { type: RisingSkylineService } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlZC1yaXNpbmctc2t5bGluZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29udHJvbGxlZC1yaXNpbmctc2t5bGluZS9zcmMvbGliL2NvbnRyb2xsZWQtcmlzaW5nLXNreWxpbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBTWhFLE1BQU0sT0FBTyw4QkFBOEI7SUFFekMsWUFBbUIsY0FBb0M7UUFBcEMsbUJBQWMsR0FBZCxjQUFjLENBQXNCO0lBQUksQ0FBQztJQUU1RDs7O09BR0c7SUFDSSxvQkFBb0IsQ0FBQyxRQUFxQztRQUUvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXJCLFNBQVMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHO1lBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzNELENBQUM7UUFFRCxTQUFTLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSTtZQUM1QixPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztRQUdqQyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBRS9CLDJDQUEyQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWxHLDRDQUE0QztZQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWhHLEtBQUssSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFO2dCQUN4RixTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsRUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFdBQVcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25KO1NBQ0Y7UUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTNCLENBQUM7Ozs7WUEzQ0YsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7WUFMa0Isb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVpbGRpbmcsIFJpc2luZ1NreWxpbmVTZXJ2aWNlIH0gZnJvbSAncmlzaW5nLXNreWxpbmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZWRSaXNpbmdTa3lsaW5lU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHNreWxpbmVTZXJ2aWNlOiBSaXNpbmdTa3lsaW5lU2VydmljZSkgeyB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgcmFuZG9tIFNreWxpbmUgaGlzdG9yeSB3aXRoIDEwMCBidWlsZGluZ3MgZm9yIHRlc3RpbmcgcHVycG9zZS5cbiAgICogQHBhcmFtIHNreWxpbmUkIHRoZSBvYnNlcnZhYmxlIHdoY2ggd2lsbCBlbWl0IHRoZSBhcnJheSBvZiBidWlsZGluZ3NcbiAgICovXG4gIHB1YmxpYyByYW5kb21Ta3lsaW5lSGlzdG9yeShza3lsaW5lJDogQmVoYXZpb3JTdWJqZWN0PEJ1aWxkaW5nW10+KTogdm9pZCB7XG5cbiAgICBjb25zdCB1cHBlclllYXIgPSAyMDIwO1xuICAgIGNvbnN0IHVwcGVyV2VlayA9IDQ1O1xuXG4gICAgZnVuY3Rpb24gcmFuZG9tSW50ZWdlcihtaW4sIG1heCk6IG51bWJlciB7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGREYXlzKHRoZURhdGUsIGRheXMpOiBEYXRlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGVEYXRlLmdldFRpbWUoKSArIGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZGluZ3M6IEJ1aWxkaW5nW10gPSBbXTtcblxuXG4gICAgZm9yIChsZXQgaWQgPSAwOyBpZCA8IDEwMDsgaWQrKykge1xuXG4gICAgICAvLyBUaGUgYnVpbGRpbmcgc3RhcnRzIHRvIHJpc2Ugb24gdGhpcyBkYXRlXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShyYW5kb21JbnRlZ2VyKDIwMTcsIDIwMTgpLCByYW5kb21JbnRlZ2VyKDEsIDEyKSwgcmFuZG9tSW50ZWdlcigxLCAyNykpO1xuXG4gICAgICAvLyBUaGUgYnVpbGRpbmcgZW5kcyBpdHMgcmlzaW5nIG9uIHRoaXMgZGF0ZVxuICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKHJhbmRvbUludGVnZXIoMjAxOSwgMjAyMCksIHJhbmRvbUludGVnZXIoMSwgMTIpLCByYW5kb21JbnRlZ2VyKDEsIDI3KSk7XG5cbiAgICAgIGZvciAobGV0IGQgPSBzdGFydERhdGUuY2xvbmUoKSwgc3RlcEhlaWdodCA9IDE7IGQgPD0gZW5kRGF0ZTsgZC5hZGREYXlzKDcpLCBzdGVwSGVpZ2h0KyspIHtcbiAgICAgICAgYnVpbGRpbmdzLnB1c2gobmV3IEJ1aWxkaW5nKGlkLFxuICAgICAgICAgICAgdGhpcy5za3lsaW5lU2VydmljZS50b1llYXJXZWVrKGQpLnllYXIsIHRoaXMuc2t5bGluZVNlcnZpY2UudG9ZZWFyV2VlayhkKS53ZWVrLCA0MCwgc3RlcEhlaWdodCAqIDIsIHJhbmRvbUludGVnZXIoMCwgMTAwKSwgJ0J1aWxkaW5nICcgKyBpZCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNreWxpbmUkLm5leHQoYnVpbGRpbmdzKTtcblxuICB9XG5cbn1cbiJdfQ==