magix-inspector
Version:
magix项目调试分析工具
260 lines • 8.69 kB
JavaScript
//#snippet;
//#exclude(loader)
let S = W.KISSY;
let KISSYEnv = {
'@{prepare}'() {
S.use('node');
},
'@{getRootId}'() {
let old = S.Env.mods['magix/magix'];
let magix;
if (old) {
magix = S.require('magix/magix');
} else {
magix = S.require('magix');
}
return magix.config('rootId');
},
'@{getVOM}'() {
let old = S.Env.mods['magix/magix'];
if (old) {
return S.require('magix/vom');
}
let magix = S.require('magix');
return magix.VOM || magix.Vframe;
},
'@{getMangerMods}'() {
let mods = S.Env.mods;
let result = [];
for (let p in mods) {
let v = mods[p].exports || mods[p].value;
if (v && ((v.$mMetas && v.$mCache) || (v.$mm && v.$mc) || (v.$m && v.$c))) {
result.push({
name: mods[p].name,
exports: v
});
}
}
return result;
},
'@{isReady}'() {
let magix = S.Env.mods['magix/magix'];
let node = S.Env.mods.node;
if (magix) {
let vom = S.Env.mods['magix/vom'];
return magix.status === S.Loader.Status.ATTACHED && vom && vom.status === S.Loader.Status.ATTACHED && node && node.status === S.Loader.Status.ATTACHED;
} else {
try {
magix = S.require('magix');
return magix && magix.toTry && node && node.status === S.Loader.Status.ATTACHED;
} catch (e) {
return false;
}
}
},
'@{updateDOMStyle}'(style, id) {
let node = S.require('node').one('#' + id);
if (!node) return;
let prev = node.prev();
if (node.css('position') == 'absolute' && prev && prev.nodeName() == 'input') {
node = prev;
}
let n = node;
let size = {
height: n.outerHeight ? n.outerHeight() : n.height(),
width: n.outerWidth ? n.outerWidth() : n.width()
};
let startZINode, offset;
if (!size.height) {
let max = 4;
do {
n = n.children();
size.height = n.height();
startZINode = n;
if (size.height) {
let pos = n.css('position');
if (pos == 'fixed') {
pos = n.css('left');
style.left = pos;
style.position = pos;
pos = n.css('top');
style.top = pos;
pos = n.css('right');
style.right = pos;
pos = n.css('bottom');
style.bottom = pos;
} else {
offset = n.offset();
style.left = offset.left + 'px';
style.top = offset.top + 'px';
style.position = 'absolute';
size.width = Math.max(size.width, n.children().width() || 0);
}
break;
}
max--;
} while (n.length && !size.height && max >= 0);
} else {
offset = n.offset();
style.left = offset.left + 'px';
style.top = offset.top + 'px';
style.position = 'absolute';
size.width = Math.max(size.width, n.children().width() || 0);
startZINode = n;
}
let zIndex = -1;
let hide;
do {
if (!hide) hide = node.css('display') == 'none';
let z = parseInt(node.css('z-index')) || 1;
if (z && z > zIndex) zIndex = z;
node = node.parent();
} while (node);
if (hide) {
size = {
width: 0,
height: 0
};
}
if (zIndex == 1) {
zIndex = 2147483640;
}
style.zIndex = zIndex + 1;
style.width = size.width + 'px';
style.height = size.height + 'px';
},
'@{getDOMOffset}'(id) {
let node = S.require('node');
return node.one('#' + id).offset();
},
'@{bind}'(id, type, fn) {
let node = S.require('node');
if (S.isString(id)) id = '#' + id;
return node.one(id).on(type, fn);
},
'@{unbind}'(id, type, fn) {
let node = S.require('node');
if (S.isString(id)) id = '#' + id;
return node.one(id).detach(type, fn);
},
'@{getMixinId}'(mixins) {
let mods = S.Env.mods;
let ids = [];
for (let i = 0; i < mixins.length; i++) {
let mixin = mixins[i];
if (mixin) {
if (mixin['\x1e']) {
ids.push('<span style="color:#C71585">State.clean("' + mixin['\x1e'] + '")</span>');
} else {
for (let p in mods) {
let mod = mods[p];
let v = mod.exports || mod.value;
if (v == mixin) {
ids.push(p);
break;
}
}
}
}
if (ids.length <= i) {
ids.push('unknown');
}
}
return ids;
},
'@{getResType}'(r) {
let type = '';
let e = r.res || r.e;
if (e) {
if (e.all && e.constructor && e.constructor.cached) {
type = 'Magix.Service';
} else if (e.fetchAll || (e.all && e.one && e.next && e.then)) {
type = 'Model Manager';
} else if (e.bricks) {
type = 'Pagelet';
} else if (e.__attrs && e.__attrVals && e.constructor) {
let mods = S.Env.mods,
found;
for (let p in mods) {
let info = mods[p];
let v = info.value || info.exports;
if (v && e.constructor == v) {
type = info.name;
found = true;
break;
}
}
if (!found) {
if (e.hasOwnProperty('pagelet')) {
type = 'Brick';
} else {
type = 'extend S Attribute';
}
}
} else if (!S.isFunction(e)) {
type = S.type(e);
} else {
type = '函数或构造器';
}
} else {
type = S.type(e);
}
return type;
},
'@{hookAttachMod}'(callback) {
let old = S.Loader.Utils.attachMod;
S.Loader.Utils.attachMod = () => {
old.apply(S.Loader.Utils, arguments);
callback();
};
},
'@{dragIt}'(node, handle) {
let root = S.one(node);
let dd = Drag['@{get}'](S.one, 'detach', S.isFunction);
S.one(handle).on('mousedown', e => {
if (e.target.id != handle.slice(1)) return;
let right = parseInt(root.css('right'), 10);
let top = parseInt(root.css('top'), 10);
let x = e.pageX;
let y = e.pageY;
dd['@{begin}'](e.target, e => {
dd['@{clear}']();
let fx = e.pageX - x,
fy = e.pageY - y;
if (top + fy < 0) fy = -top;
root.css({
right: right - fx,
top: top + fy
});
});
});
},
'@{drawIcons}'(flattened) {
for (let i = flattened.length - 1; i >= 0; i--) {
let f = flattened[i];
let root = S.one('#' + f.id);
if (root) {
root.removeClass('@ui.css:icon-bad').removeClass('@ui.css:icon-alter').addClass('@ui.css:icon');
}
if (f.cls && root) {
root.addClass(IconsMap[f.cls]);
}
}
},
'@{getNode}'(node) {
return S.one(node);
},
'@{hookViewShare}'(cb) {
let magix = S.Env.mods.magix;
if (magix) {
magix = S.require('magix');
if (magix && magix.View && magix.View.prototype.share) {
let old = magix.View.prototype.share;
magix.View.prototype.share = function () {
old.apply(this, arguments);
cb();
};
}
}
}
};