+var ElementsRegister = function() {
+ this._register = {
+ '': ElementsRegister.createCanvasElementType(genericElement, documentElement.DocumentNodeElement)
+ };
+
+}
+_.extend(ElementsRegister, {
+ createCanvasElementType: function(elementPrototype, inheritFrom) {
+ var Constructor = function() {
+ if(!this.super) {
+ this.super = inheritFrom.prototype;
+ }
+ inheritFrom.apply(this, Array.prototype.slice.call(arguments, 0));
+
+ };
+ Constructor.prototype = Object.create(inheritFrom.prototype);
+ _.extend(Constructor.prototype, elementPrototype);
+ return Constructor;
+ }
+});
+_.extend(ElementsRegister.prototype, {
+ register: function(klass, elementPrototype) {
+ this._register[klass] = ElementsRegister.createCanvasElementType(elementPrototype, this.getFactoryFor(''));
+ },
+ getFactoryFor: function(klass) {
+ var Factory;
+ wlxml.getClassHierarchy(klass).reverse().some(function(klass) {
+ Factory = this._register[klass];
+ if(Factory) {
+ return true;
+ }
+ }.bind(this));
+ return Factory;
+ }
+});
+