🚧 Toying with decorators
This commit is contained in:
parent
2160980ed4
commit
24e7d413f5
4 changed files with 70 additions and 6 deletions
31
lib/decorators/point.ts
Normal file
31
lib/decorators/point.ts
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import { Point } from '../point'
|
||||||
|
|
||||||
|
export function pointDecorator(target: any, key: string) {
|
||||||
|
|
||||||
|
// property value
|
||||||
|
var _val: Point = this[key];
|
||||||
|
|
||||||
|
// property getter
|
||||||
|
var getter = function (): Point {
|
||||||
|
console.log(`Get: ${key} => ${_val}`);
|
||||||
|
return _val;
|
||||||
|
};
|
||||||
|
|
||||||
|
// property setter
|
||||||
|
var setter = function (newVal: Point): void {
|
||||||
|
console.log(`Set: ${key} => ${newVal}`);
|
||||||
|
_val = newVal;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Delete property.
|
||||||
|
if (delete this[key]) {
|
||||||
|
|
||||||
|
// Create new property with getter and setter
|
||||||
|
Object.defineProperty(target, key, {
|
||||||
|
get: getter,
|
||||||
|
set: setter,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,13 +2,12 @@ import { Point } from './point'
|
||||||
import { Path } from './path'
|
import { Path } from './path'
|
||||||
import { Snippet } from './snippet'
|
import { Snippet } from './snippet'
|
||||||
import { Attributes } from './attributes'
|
import { Attributes } from './attributes'
|
||||||
|
import { PointList } from './pointlist'
|
||||||
|
|
||||||
export class Part {
|
export class Part {
|
||||||
id: string;
|
id: string;
|
||||||
render: boolean;
|
render: boolean;
|
||||||
points: {
|
points: PointList = new PointList();
|
||||||
[index: string]: Point | boolean;
|
|
||||||
}
|
|
||||||
paths: { [index: string]: Path; } = {};
|
paths: { [index: string]: Path; } = {};
|
||||||
snippets: { [index: string]: Snippet; } = {};
|
snippets: { [index: string]: Snippet; } = {};
|
||||||
attributes = new Attributes();
|
attributes = new Attributes();
|
||||||
|
@ -17,11 +16,10 @@ export class Part {
|
||||||
constructor(id: string) {
|
constructor(id: string) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.render = (id.substr(0,1) === '_') ? false : true;
|
this.render = (id.substr(0,1) === '_') ? false : true;
|
||||||
this.points = {'origin': new Point(0,0)};
|
this.points.origin = new Point(0,0);
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// purge = {
|
// purge = {
|
||||||
// points = function(prefix: string): void {}
|
// points = function(prefix: string): void {}
|
||||||
// paths = function(prefix: string): void {}
|
// paths = function(prefix: string): void {}
|
||||||
|
|
35
lib/pointlist.ts
Normal file
35
lib/pointlist.ts
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
import { Point } from './point'
|
||||||
|
function pointDecorator(target: any, key: string) {
|
||||||
|
|
||||||
|
// property value
|
||||||
|
var _val: Point = this[key];
|
||||||
|
|
||||||
|
// property getter
|
||||||
|
var getter = function (): Point {
|
||||||
|
console.log(`Get: ${key} => ${_val}`);
|
||||||
|
return _val;
|
||||||
|
};
|
||||||
|
|
||||||
|
// property setter
|
||||||
|
var setter = function (newVal: Point): void {
|
||||||
|
console.log(`Set: ${key} => ${newVal}`);
|
||||||
|
_val = newVal;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Delete property.
|
||||||
|
if (delete this[key]) {
|
||||||
|
|
||||||
|
// Create new property with getter and setter
|
||||||
|
Object.defineProperty(target, key, {
|
||||||
|
get: getter,
|
||||||
|
set: setter,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class PointList {
|
||||||
|
@pointDecorator
|
||||||
|
[index: string]: Point;
|
||||||
|
}
|
|
@ -190,6 +190,6 @@ export class Svg {
|
||||||
getUid() {
|
getUid() {
|
||||||
this.freeId += 1;
|
this.freeId += 1;
|
||||||
|
|
||||||
return this.freeId;
|
return ''+this.freeId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue