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
JavaScript
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==