UNPKG

@drizm/ng-whiteboard

Version:

A Canvas component for Angular which supports free drawing.

60 lines 10.3 kB
import { Injectable } from '@angular/core'; import { CircleShape } from '../_classes/shape/circle-shape'; import { RectangleShape } from '../_classes/shape/rectangle-shape'; import { FreeHandShape } from '../_classes/shape/free-hand-shape'; import { SmileyShape } from '../_classes/shape/smiley-shape'; import { StarShape } from '../_classes/shape/star-shape'; import { LineShape } from '../_classes/shape/line-shape'; import { BehaviorSubject } from 'rxjs'; export class CanvasWhiteboardShapeService { constructor() { this.registeredShapesSubject = new BehaviorSubject([ FreeHandShape, LineShape, RectangleShape, CircleShape, StarShape, SmileyShape ]); this.registeredShapes$ = this.registeredShapesSubject.asObservable(); } getShapeConstructorFromShapeName(shapeName) { return this.getCurrentRegisteredShapes().find((shape) => (new shape()).getShapeName() === shapeName); } getCurrentRegisteredShapes() { return this.registeredShapesSubject.getValue(); } isRegisteredShape(shape) { return this.getCurrentRegisteredShapes().indexOf(shape) !== -1; } registerShape(shape) { if (this.isRegisteredShape(shape)) { console.warn(`You tried to register a shape:${shape}, but is has already been registered.`); return; } const registeredShapes = this.getCurrentRegisteredShapes(); registeredShapes.push(shape); this.registeredShapesSubject.next(registeredShapes); } registerShapes(shapes) { this.registeredShapesSubject.next(this.getCurrentRegisteredShapes() .concat(shapes.filter((shape) => { if (this.isRegisteredShape(shape)) { console.warn(`You tried to register a shape:${shape}, but is has already been registered.`); return false; } return true; }))); } unregisterShape(shape) { this.registeredShapesSubject.next(this.getCurrentRegisteredShapes().filter(registeredShape => registeredShape !== shape)); } unregisterShapes(shapes) { this.registeredShapesSubject.next(this.getCurrentRegisteredShapes().filter(shape => shapes.indexOf(shape) === -1)); } } CanvasWhiteboardShapeService.decorators = [ { type: Injectable } ]; CanvasWhiteboardShapeService.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLXdoaXRlYm9hcmQtc2hhcGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXdoaXRlYm9hcmQvc3JjL2xpYi9fc2VydmljZXMvY2FudmFzLXdoaXRlYm9hcmQtc2hhcGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFNbkQsTUFBTSxPQUFPLDRCQUE0QjtJQUl2QztRQUNFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLGVBQWUsQ0FBMEQ7WUFDMUcsYUFBYTtZQUNiLFNBQVM7WUFDVCxjQUFjO1lBQ2QsV0FBVztZQUNYLFNBQVM7WUFDVCxXQUFXO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsU0FBa0I7UUFDakQsT0FBTyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUN0RCxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUF1RDtRQUN2RSxPQUFPLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQXVEO1FBQ25FLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEtBQUssdUNBQXVDLENBQUMsQ0FBQztZQUM1RixPQUFPO1NBQ1I7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQzNELGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUErRDtRQUM1RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUMvQixJQUFJLENBQUMsMEJBQTBCLEVBQUU7YUFDOUIsTUFBTSxDQUNMLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsS0FBSyx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUM1RixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FDSCxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXVEO1FBQ3JFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQy9CLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FDdkYsQ0FBQztJQUNKLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUErRDtRQUM5RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUMvQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ2hGLENBQUM7SUFDSixDQUFDOzs7WUFuRUYsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2FudmFzV2hpdGVib2FyZFNoYXBlIH0gZnJvbSAnLi4vX2NsYXNzZXMvc2hhcGUvY2FudmFzLXdoaXRlYm9hcmQtc2hhcGUnO1xyXG5pbXBvcnQgeyBDaXJjbGVTaGFwZSB9IGZyb20gJy4uL19jbGFzc2VzL3NoYXBlL2NpcmNsZS1zaGFwZSc7XHJcbmltcG9ydCB7IFJlY3RhbmdsZVNoYXBlIH0gZnJvbSAnLi4vX2NsYXNzZXMvc2hhcGUvcmVjdGFuZ2xlLXNoYXBlJztcclxuaW1wb3J0IHsgRnJlZUhhbmRTaGFwZSB9IGZyb20gJy4uL19jbGFzc2VzL3NoYXBlL2ZyZWUtaGFuZC1zaGFwZSc7XHJcbmltcG9ydCB7IENhbnZhc1doaXRlYm9hcmRTaGFwZU9wdGlvbnMgfSBmcm9tICcuLi9fY2xhc3Nlcy9zaGFwZS9jYW52YXMtd2hpdGVib2FyZC1zaGFwZS1vcHRpb25zJztcclxuaW1wb3J0IHsgQ2FudmFzV2hpdGVib2FyZFBvaW50IH0gZnJvbSAnLi4vX2NsYXNzZXMvY2FudmFzLXdoaXRlYm9hcmQtcG9pbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTbWlsZXlTaGFwZSB9IGZyb20gJy4uL19jbGFzc2VzL3NoYXBlL3NtaWxleS1zaGFwZSc7XHJcbmltcG9ydCB7IFN0YXJTaGFwZSB9IGZyb20gJy4uL19jbGFzc2VzL3NoYXBlL3N0YXItc2hhcGUnO1xyXG5pbXBvcnQgeyBMaW5lU2hhcGUgfSBmcm9tICcuLi9fY2xhc3Nlcy9zaGFwZS9saW5lLXNoYXBlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5leHBvcnQgdHlwZSBJTmV3Q2FudmFzV2hpdGVib2FyZFNoYXBlPFQgZXh0ZW5kcyBDYW52YXNXaGl0ZWJvYXJkU2hhcGU+ID1cclxuICBuZXcocG9zaXRpb25Qb2ludD86IENhbnZhc1doaXRlYm9hcmRQb2ludCwgb3B0aW9ucz86IENhbnZhc1doaXRlYm9hcmRTaGFwZU9wdGlvbnMsIC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2FudmFzV2hpdGVib2FyZFNoYXBlU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWdpc3RlcmVkU2hhcGVzU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PElOZXdDYW52YXNXaGl0ZWJvYXJkU2hhcGU8Q2FudmFzV2hpdGVib2FyZFNoYXBlPj4+O1xyXG4gIHB1YmxpYyByZWdpc3RlcmVkU2hhcGVzJDogT2JzZXJ2YWJsZTxBcnJheTxJTmV3Q2FudmFzV2hpdGVib2FyZFNoYXBlPENhbnZhc1doaXRlYm9hcmRTaGFwZT4+PjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnJlZ2lzdGVyZWRTaGFwZXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJTmV3Q2FudmFzV2hpdGVib2FyZFNoYXBlPENhbnZhc1doaXRlYm9hcmRTaGFwZT4+PihbXHJcbiAgICAgIEZyZWVIYW5kU2hhcGUsXHJcbiAgICAgIExpbmVTaGFwZSxcclxuICAgICAgUmVjdGFuZ2xlU2hhcGUsXHJcbiAgICAgIENpcmNsZVNoYXBlLFxyXG4gICAgICBTdGFyU2hhcGUsXHJcbiAgICAgIFNtaWxleVNoYXBlXHJcbiAgICBdKTtcclxuICAgIHRoaXMucmVnaXN0ZXJlZFNoYXBlcyQgPSB0aGlzLnJlZ2lzdGVyZWRTaGFwZXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2hhcGVDb25zdHJ1Y3RvckZyb21TaGFwZU5hbWUoc2hhcGVOYW1lPzogc3RyaW5nKTogSU5ld0NhbnZhc1doaXRlYm9hcmRTaGFwZTxDYW52YXNXaGl0ZWJvYXJkU2hhcGU+IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRSZWdpc3RlcmVkU2hhcGVzKCkuZmluZCgoc2hhcGUpID0+XHJcbiAgICAgIChuZXcgc2hhcGUoKSkuZ2V0U2hhcGVOYW1lKCkgPT09IHNoYXBlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50UmVnaXN0ZXJlZFNoYXBlcygpOiBBcnJheTxJTmV3Q2FudmFzV2hpdGVib2FyZFNoYXBlPENhbnZhc1doaXRlYm9hcmRTaGFwZT4+IHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyZWRTaGFwZXNTdWJqZWN0LmdldFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBpc1JlZ2lzdGVyZWRTaGFwZShzaGFwZTogSU5ld0NhbnZhc1doaXRlYm9hcmRTaGFwZTxDYW52YXNXaGl0ZWJvYXJkU2hhcGU+KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50UmVnaXN0ZXJlZFNoYXBlcygpLmluZGV4T2Yoc2hhcGUpICE9PSAtMTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyU2hhcGUoc2hhcGU6IElOZXdDYW52YXNXaGl0ZWJvYXJkU2hhcGU8Q2FudmFzV2hpdGVib2FyZFNoYXBlPik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNSZWdpc3RlcmVkU2hhcGUoc2hhcGUpKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihgWW91IHRyaWVkIHRvIHJlZ2lzdGVyIGEgc2hhcGU6JHtzaGFwZX0sIGJ1dCBpcyBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQuYCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWdpc3RlcmVkU2hhcGVzID0gdGhpcy5nZXRDdXJyZW50UmVnaXN0ZXJlZFNoYXBlcygpO1xyXG4gICAgcmVnaXN0ZXJlZFNoYXBlcy5wdXNoKHNoYXBlKTtcclxuICAgIHRoaXMucmVnaXN0ZXJlZFNoYXBlc1N1YmplY3QubmV4dChyZWdpc3RlcmVkU2hhcGVzKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyU2hhcGVzKHNoYXBlczogQXJyYXk8SU5ld0NhbnZhc1doaXRlYm9hcmRTaGFwZTxDYW52YXNXaGl0ZWJvYXJkU2hhcGU+Pik6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdpc3RlcmVkU2hhcGVzU3ViamVjdC5uZXh0KFxyXG4gICAgICB0aGlzLmdldEN1cnJlbnRSZWdpc3RlcmVkU2hhcGVzKClcclxuICAgICAgICAuY29uY2F0KFxyXG4gICAgICAgICAgc2hhcGVzLmZpbHRlcigoc2hhcGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNSZWdpc3RlcmVkU2hhcGUoc2hhcGUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBZb3UgdHJpZWQgdG8gcmVnaXN0ZXIgYSBzaGFwZToke3NoYXBlfSwgYnV0IGlzIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZC5gKTtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclNoYXBlKHNoYXBlOiBJTmV3Q2FudmFzV2hpdGVib2FyZFNoYXBlPENhbnZhc1doaXRlYm9hcmRTaGFwZT4pOiB2b2lkIHtcclxuICAgIHRoaXMucmVnaXN0ZXJlZFNoYXBlc1N1YmplY3QubmV4dChcclxuICAgICAgdGhpcy5nZXRDdXJyZW50UmVnaXN0ZXJlZFNoYXBlcygpLmZpbHRlcihyZWdpc3RlcmVkU2hhcGUgPT4gcmVnaXN0ZXJlZFNoYXBlICE9PSBzaGFwZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyU2hhcGVzKHNoYXBlczogQXJyYXk8SU5ld0NhbnZhc1doaXRlYm9hcmRTaGFwZTxDYW52YXNXaGl0ZWJvYXJkU2hhcGU+Pik6IHZvaWQge1xyXG4gICAgdGhpcy5yZWdpc3RlcmVkU2hhcGVzU3ViamVjdC5uZXh0KFxyXG4gICAgICB0aGlzLmdldEN1cnJlbnRSZWdpc3RlcmVkU2hhcGVzKCkuZmlsdGVyKHNoYXBlID0+IHNoYXBlcy5pbmRleE9mKHNoYXBlKSA9PT0gLTEpXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXX0=