📄 airintrospector.js
字号:
}
list.sort(function(node1, node2){
var isNode1Number = parseInt(node1[0])==node1[0];
var isNode2Number = parseInt(node2[0])==node2[0];
if(isNode1Number&&isNode2Number){
return parseInt(node1[0])-parseInt(node2[0]);
}
if(isNode1Number){
return -1;
}
if(isNode2Number){
return 1;
}
if(node1[0].toLowerCase()==node2[0].toLowerCase())
return 0;
if(node1[0].toLowerCase()<node2[0].toLowerCase())
return -1;
return 1;
});
if(list.length){
var prefix = '';
for(var i=level;i>0;i--) prefix+=' ';
var l = list.length;
var strList = [];
if(parseArray) strList.push(prefix+'[\n');
else strList.push(prefix+'{\n');
for(var i=0;i<l;i++){
try{
var zl = (list[i][0]+'').length+1;
var miniPrefix = '';
for(var j=0;j<zl;j++) miniPrefix+=' ';
if(typeof list[i][1]=='function'){
strList.push(prefix+' '+list[i][0]+'=[function],\n');
}else if(air.Introspector.isDateObject(list[i][1])){
strList.push(prefix+' '+list[i][0]+'='+(new Date(list[i][1])+'').replace(/\n/g, '\n'+prefix+miniPrefix)+',\n');
}else{
strList.push(prefix+' '+list[i][0]+'='+(list[i][1]+'').replace(/\n/g, '\n'+prefix+miniPrefix)+',\n');
}
}catch(e){
strList.push(prefix+' '+list[i][0]+'='+e+',\n');
}
if(level<levels){
strList.push(air.Introspector.dump(list[i][1], levels, level+1));
}
}
if(parseArray) strList.push(prefix+']\n');
else strList.push(prefix+'}\n');
if(level){
return strList.join('');
}else{
return (strList.join(''));
}
}
}catch(e){
air.Introspector.Console.error(e);
}
return '';
},
/**
* ---------------------------------------------------------------------------------------
* @extracted This is extracted from spry framework and removed support for other browsers.
* @description Finds the precise position of the dom element node
*/
/**
* @function camelize
* @description
*/
camelize : function(stringToCamelize)
{
if (stringToCamelize.indexOf('-') == -1){
return stringToCamelize;
}
var oStringList = stringToCamelize.split('-');
var isFirstEntry = true;
var camelizedString = '';
for(var i=0; i < oStringList.length; i++)
{
if(oStringList[i].length>0)
{
if(isFirstEntry)
{
camelizedString = oStringList[i];
isFirstEntry = false;
}
else
{
var s = oStringList[i];
camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
}
}
}
return camelizedString;
},
/**
* @function getStyleProp
* @description
*/
getStyleProp : function(element, prop)
{
var value;
try
{
if (element.style)
value = element.style[air.Introspector.camelize(prop)];
if (!value)
{
if (document.defaultView && document.defaultView.getComputedStyle)
{
var css = document.defaultView.getComputedStyle(element, null);
value = css ? css.getPropertyValue(prop) : null;
}
else if (element.currentStyle)
{
value = element.currentStyle[air.Introspector.camelize(prop)];
}
}
}
catch (e) {}
return value == 'auto' ? null : value;
},
/**
* @function getIntProp
* @description
*/
getIntProp : function(element, prop){
var a = parseInt(air.Introspector.getStyleProp(element, prop),10);
if (isNaN(a))
return 0;
return a;
},
/**
* @function getBorderBox
* @description
*/
getBorderBox : function (el, doc) {
doc = doc || document;
if (typeof(el) == 'string') {
el = doc.getElementById(el);
}
if (!el) {
return false;
}
if (el.parentNode === null || air.Introspector.getStyleProp(el, 'display') == 'none') {
//element must be visible to have a box
return false;
}
var ret = {x:0, y:0, width:0, height:0};
var parent = null;
var box;
var str = el.nodeName;
ret.x = el.offsetLeft;
ret.y = el.offsetTop;
ret.width = el.offsetWidth;
ret.height = el.offsetHeight;
parent = el.offsetParent;
if (parent != el) {
while (parent) {
ret.x += parent.offsetLeft;
ret.y += parent.offsetTop;
str+=':'+parent.nodeName;
parent = parent.offsetParent;
}
}
var blw = air.Introspector.getIntProp(el, "border-left-width");
var btw = air.Introspector.getIntProp(el, "border-top-width");
ret.x -= blw;
ret.y -= btw;
// opera & (safari absolute) incorrectly account for body offsetTop
switch (air.Introspector.getStyleProp(el, 'position')){
case 'absolute':
ret.y -= doc.body.offsetTop;
break;
case 'fixed':
ret.y += doc.body.scrollTop;
ret.x += doc.body.scrollLeft;
break;
};
if (el.parentNode)
parent = el.parentNode;
else
parent = null;
if (parent!=null&&parent.nodeName){
var cas = parent.nodeName.toUpperCase();
while (parent && cas != 'HTML') {
cas = parent.nodeName.toUpperCase();
ret.x -= parent.scrollLeft;
ret.y -= parent.scrollTop;
if (parent.parentNode)
parent = parent.parentNode;
else
parent = null;
}
}
/* ret.y -= el.ownerDocument.body.scrollTop;
ret.x -= el.ownerDocument.body.scrollLeft;
*/
// adjust the margin
var gi = air.Introspector.getIntProp;
var btw = gi(el, "margin-top");
var blw = gi(el, "margin-left");
var bbw = gi(el, "margin-bottom");
var brw = gi(el, "margin-right");
ret.x -= blw;
ret.y -= btw;
ret.height += btw + bbw;
ret.width += blw + brw;
// air.Introspector.Console.log(ret);
return ret;
},
/**
* ---------------------------------------------------------------------------------------
*/
/**
* @function writeConfigFile
* @description
*/
writeConfigFile: function(config, fromRemoteSandbox){
if(isAppSandbox){
var file = runtime.flash.filesystem.File.applicationStorageDirectory.resolvePath('AIRIntrospector'+(fromRemoteSandbox?'Remote':'')+'.cfg');
var fs = new runtime.flash.filesystem.FileStream();
fs.open(file, runtime.flash.filesystem.FileMode.WRITE);
fs.writeObject(config);
fs.close();
}else{
if(typeof activeWindow=='undefined'){
air.Introspector.noBridge(function(){
parentSandboxBridge.air_Introspector_writeConfigFile(config);
});
}else{
activeWindow.setTimeout(function(){
activeWindow.air.Introspector.writeConfigFile(config);
}, 0);
}
}
},
/**
* @function readConfigFile
* @description
*/
readConfigFile: function (fromRemoteSandbox, callback){
if(isAppSandbox){
var file = runtime.flash.filesystem.File.applicationStorageDirectory.resolvePath('AIRIntrospector'+(fromRemoteSandbox?'Remote':'')+'.cfg');
if(file.exists){
var fs = new runtime.flash.filesystem.FileStream();
fs.open(file, runtime.flash.filesystem.FileMode.READ);
var config = fs.readObject();
fs.close();
return config;
}
}else{
if(typeof activeWindow=='undefined'){
air.Introspector.noBridge(function(){
var config = parentSandboxBridge.air_Introspector_readConfigFile();
callback(config);
});
}else{
activeWindow.setTimeout(function(){
if(typeof activeWindow!='undefined'){
var config = activeWindow.air.Introspector.readConfigFile(true, function(config){
setTimeout(function(){ callback(config); });
});
}
});
}
}
return {};
},
/**
* @function writeConsoleToClipboard
* @description
*/
writeConsoleToClipboard: function(str){
if(isAppSandbox){
runtime.flash.desktop.Clipboard.generalClipboard.clear();
runtime.flash.desktop.Clipboard.generalClipboard.setData(runtime.flash.desktop.ClipboardFormats.TEXT_FORMAT,
str, false);
}else{
if(typeof activeWindow=='undefined'){
air.Introspector.noBridge(function(){
parentSandboxBridge.air_Introspector_writeConsoleToClipboard(str);
});
}else{
activeWindow.setTimeout(function(){
activeWindow.air.Introspector.writeConsoleToClipboard(str);
});
}
}
},
/**
* @function writeConsoleToFile
* @description
*/
writeConsoleToFile: function(str){
if(isAppSandbox){
var file = runtime.flash.filesystem.File.desktopDirectory;
var self = this;
file.addEventListener(runtime.flash.events.Event.SELECT, function(evt){
var newFile = evt.target;
var stream = new runtime.flash.filesystem.FileStream();
stream.open(newFile, runtime.flash.filesystem.FileMode.WRITE);
stream.writeUTFBytes(str);
stream.close();
});
file.browseForSave('Console dump file...');
}else{
if(typeof activeWindow=='undefined'){
air.Introspector.noBridge(function(){
parentSandboxBridge.air_Introspector_writeConsoleToFile(str);
});
}else{
activeWindow.setTimeout(function(){
activeWindow.air.Introspector.writeConsoleToFile(str);
});
}
}
},
/**
* @function noBridge
* @description Alerts the user that no parent sandbox bridge is installed
*/
noBridge: function(callback){
try{
callback();
return;
}catch(e){
air.Introspector.bridgeCallbacks.push(callback);
air.Introspector.registerChildSandboxBridge();
setTimeout(function(){
throw { air_Introspector_setParentSandboxBridge: true, air_Introspector_version: air.Introspector.version , toString: function(){ return 'You need to include AIRIntrospector.js in your application sandbox.'; } };
}, 0);
}
},
/**
* @function noChildBridge
* @description Alerts the user that no child sandbox bridge is installed
*/
noChildBridge: function(iframe){
if(!air.Introspector.secondBridgeTry){
var iframeStr = '';
if(typeof iframe!='undefined'){
iframe
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -