123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- "use strict";
- define( [ "module", "logger", "vwf/api/kernel", "vwf/api/view" ], function( module, logger, kernel_api, view_api ) {
-
- var label = module.id.replace( /\//g, "." );
- logger.for( label ).debug( "loading" );
- var exports = {
- module: module,
- logger: logger.for( label ),
- load: function( module, initializer, viewGenerator, kernelGenerator ) {
- var instance = Object.create( this );
- instance.module = module;
- instance.logger = logger.for( instance.module.id.replace( /\//g, "." ), instance );
-
- instance.logger.debug( "loading" );
- if ( typeof initializer == "function" || initializer instanceof Function ) {
- initializer = initializer();
- }
- for ( var key in initializer ) {
- instance[key] = initializer[key];
- }
- viewGenerator && Object.keys( view_api ).forEach( function( viewFunctionName ) {
- if ( ! instance.hasOwnProperty( viewFunctionName ) ) {
- instance[viewFunctionName] = viewGenerator.call( instance, viewFunctionName );
- instance[viewFunctionName] || delete instance[viewFunctionName];
- }
- } );
- kernelGenerator && Object.keys( kernel_api ).forEach( function( kernelFunctionName ) {
- if ( ! instance.hasOwnProperty( kernelFunctionName ) ) {
- instance[kernelFunctionName] = kernelGenerator.call( instance, kernelFunctionName );
- instance[kernelFunctionName] || delete instance[kernelFunctionName];
- }
- } );
- return instance;
- },
- create: function( kernel, view, stages, state, parameters ) {
- this.logger.debug( "creating" );
-
- if ( view && view.length !== undefined ) {
- parameters = state;
- state = stages;
- stages = view;
- view = undefined;
- }
-
- if ( ! view ) {
- stages = Array.prototype.concat.apply( [], ( this.pipeline || [] ).map( function( stage ) {
- return ( stages || [] ).concat( stage );
- } ) ).concat( stages || [] );
- } else {
- stages = ( stages || [] ).concat( this.pipeline || [] );
- }
-
- var instance = Object.create( this );
-
- viewize.call( instance, view, view_api );
-
-
- kernelize.call( instance,
- stages.length ?
- stages.pop().create( kernel, instance, stages ) :
- kernel,
- kernel_api );
-
- instance.state = state || {};
-
- initialize.apply( instance, parameters );
-
- function viewize( view, view_api ) {
- Object.getPrototypeOf( this ) && viewize.call( Object.getPrototypeOf( this ), view, view_api );
- this.hasOwnProperty( "viewize" ) && this.viewize.call( instance, view, view_api );
- }
-
- function kernelize( kernel, kernel_api ) {
- Object.getPrototypeOf( this ) && kernelize.call( Object.getPrototypeOf( this ), kernel, kernel_api );
- this.hasOwnProperty( "kernelize" ) && this.kernelize.call( instance, kernel, kernel_api );
- }
-
- function initialize( /* parameters */ ) {
- Object.getPrototypeOf( this ) && initialize.apply( Object.getPrototypeOf( this ), arguments );
- this.hasOwnProperty( "initialize" ) && this.initialize.apply( instance, arguments );
- }
-
-
- if ( ! view ) {
- while ( instance.kernel !== kernel ) {
- instance = instance.kernel;
- }
- }
- return instance;
- },
- kernelize: function( kernel, kernel_api ) {
- this.kernel = kernel;
- },
-
- };
- return exports;
- } );
|