UNPKG

marko

Version:

UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.

61 lines (47 loc) 1.62 kB
"use strict"; var inherit = require("raptor-util/inherit"); var BaseComponent = require("./Component"); var BaseState = require("./State"); module.exports = function defineComponent(def, renderer) { if (def.___isComponent) { return def; } var ComponentClass = function () {}; var proto; var type = typeof def; if (type == "function") { proto = def.prototype; } else if (type == "object") { proto = def; } else { throw TypeError(); } ComponentClass.prototype = proto; // We don't use the constructor provided by the user // since we don't invoke their constructor until // we have had a chance to do our own initialization. // Instead, we store their constructor in the "initComponent" // property and that method gets called later inside // init-components-browser.js function Component(id) { BaseComponent.call(this, id); } if (!proto.___isComponent) { // Inherit from Component if they didn't already inherit(ComponentClass, BaseComponent); } // The same prototype will be used by our constructor after // we he have set up the prototype chain using the inherit function proto = Component.prototype = ComponentClass.prototype; // proto.constructor = def.constructor = Component; // Set a flag on the constructor function to make it clear this is // a component so that we can short-circuit this work later Component.___isComponent = true; function State(component) { BaseState.call(this, component); } inherit(State, BaseState); proto.___State = State; proto.___renderer = renderer; return Component; };