magix-components
Version:
58 lines • 1.29 kB
JavaScript
/*
ver:1.3.1
*/
/*
author:xinglie.lkf@taobao.com
*/
let $ = require('$');
let ICounter = 0;
let Instances = [];
let Doc = $(document);
let Win = $(window);
let Watcher = (e) => {
for (let i = Instances.length; i--;) {
let info = Instances[i];
if (info['@{destroyed}']) {
Instances.splice(i, 1);
} else {
let view = info['@{view}'];
if (e.type != 'mousedown' || !view['@{inside}'](e.target)) {
view['@{hide}']();
}
}
}
};
let Remove = view => {
let info = Instances[view.id];
if (info) {
info['@{destroyed}'] = true;
}
delete Instances[view.id];
};
module.exports = {
'@{add}'(view) {
Remove(view);
let info = {
'@{view}': view
};
Instances.push(info);
Instances[view.id] = info;
},
'@{remove}': Remove,
'@{setup}'() {
if (!ICounter) {
Doc.on('mousedown', Watcher);
Win.on('resize', Watcher);
}
ICounter++;
},
'@{teardown}'() {
if (ICounter > 0) {
ICounter--;
if (!ICounter) {
Doc.off('mousedown', Watcher);
Win.off('resize', Watcher);
}
}
}
};