/**
* src: @definejs/masker/modules/Masker/Meta.js
* pkg: @definejs/masker@1.0.0
*/
define('Masker/Meta', function (require, module, exports) { 
    const $String = require('String');
    
    const prefix = 'definejs-masker-';    //用于生成组件 id 的前缀部分。
    const suffix = 4;                     //用于生成组件 id 的随机部分的长度。
    
    
    module.exports = {
    
        create(config, others) {
            let id = $String.randomId(prefix, suffix);
            let eventName = config.eventName;
            let volatile = config.volatile;
    
            let meta = {
                'id': id,
                'sample': '',
                'eventName': eventName,         //兼容 PC 端和移动端。 PC 端的为 `click`，移动端的为 `touch`。
                'volatile': volatile,           //是否易消失的。 即点击后自动隐藏。
                'container': config.container,  //组件要装入的容器 DOM 节点。
                'duration': config.duration,    //要持续显示的时间，单位是毫秒。
                'fadeIn': config.fadeIn,        //显示时要使用淡入动画的时间。 如果不指定或指定为 0，则禁用淡入动画。
                'fadeOut': config.fadeOut,      //隐藏时要使用淡出动画的时间。 如果不指定或指定为 0，则禁用淡出动画。
                'opacity': config.opacity,      //不透明度。 在淡入淡出时要到进行计算。
    
                'emitter': null,    //事件驱动器。
                'style': null,      //样式对象。
                'this': null,       //当前实例，方便内部使用。
                '$': null,          //组件最外层的 DOM 节点的 jQuery 实例。
    
                bindVolatile(fn) {
                    if (!volatile) {
                        return;
                    }
    
                    if (eventName == 'touch') {
                        meta.$.touch(fn);
                    }
                    else {
                        meta.$.on(eventName, fn);
                    }
                },
            };
    
    
    
            Object.assign(meta, others);
    
            return meta;
    
    
        },
    };
});