Exemple #1
0
(function(){
	// TODO: refactor methods, use MaskNode Serialization instead Model Serialization
	custom_Tags['var'] = class_create(customTag_Base, {
		renderStart: function(model, ctx){
			set(this, this.attr, true, model, ctx);
		},
		onRenderStartClient: function(){
			set(this, this.model, false)
		}
	});

	function set(self, source, doEval, model?, ctx?) {
		// set data also to model, so that it will be serialized in NodeJS
		self.model = {};

		var parent = self.parent;
		var scope  = parent.scope;
		if (scope == null) {
			scope = parent.scope = {};
		}
		for(var key in source){
			self.model[key] = scope[key] = doEval === false
				? source[key]
				: expression_eval(source[key], model, ctx, parent);
		}
	}
}());
Exemple #2
0
export function m_registerModuleType(baseModuleType, newType, mix) {
    _typeMappings[newType] = baseModuleType;
    m_Types[newType] = class_create(
        m_Types[baseModuleType],
        mix
    );
}
Exemple #3
0
(function () {
    manager_get = function (ctx, el) {
        if (ctx == null || is_DOM) {
            return manager || (manager = new Manager(document.body));
        }
        var KEY = '__contentManager';
        return ctx[KEY] || (ctx[KEY] = new Manager(el));
    };
    var manager;
    var Manager = class_create({
        constructor: function (el) {
            this.container = el.ownerDocument.body;
            this.ids = {};
        },
        append: function (tagName, node) {
            var id = node.id;
            var el = this.ids[id];
            if (el !== void 0) {
                return el;
            }
            el = render(tagName
                , node.attr
                , node.body
                , node.id
                , this.container
            );
            this.ids[id] = el;
        }
    });
}());
Exemple #4
0
function _createHandlerForNodes(nodes, module) {
    return class_create({
        scope: module.scope,
        location: module.location,
        nodes: nodes,
        getHandler: _module_getHandlerDelegate(module)
    });
}
Exemple #5
0
function _createExports(nodes, model, module) {
    var exports = module.exports,
        items = module.importItems,
        getHandler = _module_getHandlerDelegate(module);

    var i = -1,
        imax = items.length;
    while (++i < imax) {
        var x = items[i];
        if (x.registerScope) {
            x.registerScope(module);
        }
    }

    var i = -1,
        imax = nodes.length;
    while (++i < imax) {
        var node = nodes[i];
        var name = node.tagName;
        if (name === 'define' || name === 'let') {
            var Base = {
                getHandler: _fn_wrap(customTag_Compo_getHandler, getHandler),
                getModule: _module_getModuleDelegate(module),
                location: module.location
            };
            var Ctor = Define.create(node, model, module, Base);
            var Proto = Ctor.prototype;
            if (Proto.scope != null || module.scope != null) {
                Proto.scope = obj_extend(Proto.scope, module.scope);
            }

            var compoName = node.name;
            if (name === 'define') {
                exports[compoName] = Ctor;
                customTag_register(compoName, Ctor);
            }
            if (name === 'let') {
                customTag_registerResolver(compoName);
            }
            exports.__handlers__[compoName] = Ctor;
        }
    }
    exports['*'] = class_create(customTag_Base, {
        getHandler: getHandler,
        location: module.location,
        nodes: exports.__nodes__,
        scope: module.scope
    });

    return exports;
}
Exemple #6
0
	(function(){
		SyncMapper = class_create({
			map: function(node, fn) {
				var mapper = getMapper(node);
				return mapper(node, fn);
			}
		});
		function getMapper (node) {
			/* not strict */
			if (node.compoName) {
				return mapCompo;
			}
			return mapNode;
		}
		function mapNode(node, fn, parent?, index?) {
			if (node == null)
				return null;

			var nextNode = isFragment(node) 
				? new Dom.Fragment 
				: fn(node);
			if (nextNode == null) {
				return null;
			}
			var nodes = safe_getNodes(node);
			if (nodes == null) {
				return nextNode;
			}
			nextNode.nodes = coll_map(nodes, function (x) { 
				return mapNode(x, fn, node) 
			});
			return nextNode;
		}
		function mapCompo(compo, fn, parent?) {
			if (compo == null)
				return null;

			var next = fn(compo);
			if (next == null || compo.components == null) {
				return next;
			}
			next.components = coll_map(compo.components, function (x) { 
				return mapCompo(x, fn, compo)
			});
			return next;
		}
	}());
Exemple #7
0
(function () {
    function parse (def) {
        var rgx    = /^\s*([\w]+)[:\$]+([\w]+)\s*$/,
            parts  = rgx.exec(def),
            name   = parts && parts[1],
            signal = parts && parts[2];
        if (parts == null || name == null || signal == null) {
            log_error('PipeCompo. Invalid name.', def, 'Expect', rgx.toString());
            return null;
        }
        return [name, signal];
    }
    function attach(node, ctr) {
        var pipes = ctr.pipes;
        if (pipes == null) {
            pipes = ctr.pipes = {};
        }
        var signal = parse(node.name);
        if (signal == null) {
            return;
        }
        var name = signal[0],
            type = signal[1],
            pipe = ctr.pipes[name];
        if (pipe == null) {
            pipe = pipes[name] = {};
        }
        pipe[type] = node.fn;
    }
    custom_Tags['pipe'] = class_create(Method, {
        renderEnd: function(){
            attach(this, this.parent);
        }
    });
    custom_Tags.pipe.attach = attach;
}());
Exemple #8
0
import { class_create } from '@utils/class'
import { _appendChild } from './utils';
import { dom_TEXTNODE } from './NodeType';

/**
 * @name TextNode
 * @type {class}
 * @property {type} [type=2]
 * @property {(string|function)} content
 * @property {IMaskNode} parent
 * @memberOf mask.Dom
 */
export const TextNode = class_create({
	constructor: function(text, parent) {
		this.content = text;
		this.parent = parent;
	},
	type: dom_TEXTNODE,
	content: null,
	parent: null,
	sourceIndex: -1
});
Exemple #9
0
import { class_create } from '@utils/class';
import { obj_extend } from '@utils/obj';
import { class_Dfr } from '@utils/class/Dfr';


	export const builder_Ctx = class_create(class_Dfr as any, {
		constructor: function(data){
			obj_extend(this, data);
		},
		// Is true, if some of the components in a ctx is async
		async: false,
		// List of busy components
		defers: null /*Array*/,

		// NodeJS
		// Track components ID
		_id: null,
		// ModelsBuilder for HTML serialization
		_models: null,

		// ModulesBuilder fot HTML serialization
		_modules: null,

		_redirect: null,
		_rewrite: null
	});

	(builder_Ctx as any).clone = function(ctx){
		var data = {};
		for(var key in ctx) {
			if (builder_Ctx.prototype[key] === void 0) {
Exemple #10
0
import { class_create } from '@utils/class';
import { log_error } from '@core/util/reporters';
import { IBinder } from './IBinder';
import { expression_evalStatements } from '@project/expression/src/exports';

/*
 *	"expression, ...args"
 *	expression: to get the IEventEmitter
 */
export const EventEmitterBinder = class_create(IBinder, {
		on: function(exp, model, ctx, ctr, cb){
			call('on', exp, model, ctr, cb);
		},
		off: function(exp, model, ctr, cb){
			call('off', exp, model, ctr, cb);
		},
	});

	function call (method, expr, model, ctr, cb) {
		var arr = expression_evalStatements(expr, model, null, ctr);
		var observable = arr.shift();
		if (observable == null || observable[method] == null) {
			log_error('Method is undefined on observable: ' + method);
			return;
		}
		arr.push(cb);
		observable[method].apply(observable, arr);
	}