@drizm/ng-whiteboard
Version:
A Canvas component for Angular which supports free drawing.
60 lines • 10.3 kB
JavaScript
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=