📄 fn.js
字号:
/*
* JavaScript Integration Framework
* License LGPL(您可以在任何地方免费使用,但请不要吝啬您对框架本身的改进)
* http://www.xidea.org/project/jsi/
* @author jindw
* @version $Id: fn.js,v 1.4 2008/02/24 08:58:15 jindw Exp $
*/
function createPrototypeStack(superclass,constructor) {
function f(){};
f.prototype = superclass.prototype;
var npt = new f();
npt.constructor = constructor;
return npt;
}
function findSupperInfo(baseInfo,object){
var superList = [];
var availableObjectMap = baseInfo.fileInfo.getAvailableObjectMap();
for(var n in availableObjectMap){
var superObject = availableObjectMap[n];
if(superObject instanceof Function && object instanceof superObject){
var k = 0;
for(var n2 in superObject.prototype){
k++;
}
if(superList.length){
if(k>superList[0]){
superList = [k,n]
}else if(k==superList[0]){
superList.push(n)
}
}else{
superList = [k,n];
}
}
}
//alert(superList)
if(superList.length){
if(superList.length == 2){
//alert(superList[1])
return baseInfo.fileInfo.getAvailableObjectInfo(superList[1]);
}else{
superList[0] = superList.pop();
while((n = superList.pop())&&(n2 = superList.pop())){
var obj1 = availableObjectMap[n];
var obj2 = availableObjectMap[n2];
//保留子类
if(obj1.prototype instanceof obj2){
superList.push(obj1);
}else{
superList.push(obj2);
}
}
//alert(n)
return baseInfo.fileInfo.getAvailableObjectInfo(n);
}
}
}
/**
* @internal
*/
var accessOrder = "private,internal,protected,friend,public";
function scrollOut(ele){
if(ele.scrollIntoView){
ele.scrollIntoView(false);
}
}
/**
* @private
*/
function findPackages(sourcePackageNames,findDependence){
var packageMap = {};
var packageFlags = {};
for(var i = 0;i<sourcePackageNames.length;i++){
try{
var packageObject = $import(sourcePackageNames[i]+':');
packageFlags[sourcePackageNames[i]] = true;
}catch(e){
sourcePackageNames.splice(i,1);
}
}
var currentList = [].concat(sourcePackageNames);
do{
var newList = [];
for(var i = 0;i<currentList.length;i++){
try{
var packageObject = $import(currentList[i]+':');
}catch(e){
currentList.splice(i,1);
continue;
}
packageMap[currentList[i]] = packageObject;
if(packageObject.name!=currentList[i]){
if(!packageFlags[packageObject.name]){
packageFlags[packageObject.name] = packageObject;
newList.push(packageObject.name);
}
}else if(findDependence){
try{
if(packageObject.initialize){
packageObject.initialize();
}
var dependenceMap = packageObject.dependenceMap;
for(var scriptFile in dependenceMap){
var dependences = dependenceMap[scriptFile];
for(var j=0;j<dependences.length;j++){
var dependence = dependences[j];
var packageObject = dependence[0];
var packageName = packageObject.name;
if(!packageFlags[packageName]){
packageFlags[packageName] = packageObject;
newList.push(packageName);
}
}
}
}catch(e){
//依赖可能无效
}
}
}
currentList = newList;
}while(currentList.length>0);
var result = [];
for(var n in packageMap){
result.push(n);
}
return sortPackages(sourcePackageNames,result);
};
function sortPackages(sourcePackageNames,allPackageNames){
/** 升序 */
var short2longList = sourcePackageNames.concat([]).sort(function(a,b){return a.length-b.length});
var listMap = {};
var emptyMap = {};
var i = allPackageNames.length;
var extention = [];
var extentionPerfixMap = {};
var result = [];
list:
while(i--){
var item = allPackageNames[i];
var j = short2longList.length;
while(j--){
var key = short2longList[j]
if(item.indexOf(key) == 0){
if(listMap[key] == emptyMap[key]){
listMap[key]= [];
}
listMap[key].push(item);
continue list;
}
}
extention.push(item);
extentionPerfixMap[item] = item.replace(/(^|\.)[^.]+$/,'');
}
var count = extention.length;
while(count){
count = 0;
for(var i=0;i<extention.length;i++){
var item = extention[i];
var prefix = extentionPerfixMap[item];
if(prefix){
extentionPerfixMap[item] = prefix.replace(/(^|\.)[^.]+$/,'');
for(var j=0;j<sourcePackageNames.length;j++){
var previous = sourcePackageNames[j];
if(previous.indexOf(prefix) == 0){
var list = listMap[previous];
list.push(item);
extention.splice(i,1);
break;
}
}
count++;
}
}
}
for(var i=0;i<sourcePackageNames.length;i++){
var list = listMap[sourcePackageNames[i]];
result.push.apply(result,list.sort());
}
result.push.apply(result,extention.sort());
return result;
}
//compute scriptBase
var rootMatcher = /(^\w+:((\/\/\/\w\:)|(\/\/[^\/]*))?)/;
//var rootMatcher = /^\w+:(?:(?:\/\/\/\w\:)|(?:\/\/[^\/]*))?/;
var homeFormater = /(^\w+:\/\/[^\/#\?]*$)/;
//var homeFormater = /^\w+:\/\/[^\/#\?]*$/;
var urlTrimer = /[#\?].*$/;
var dirTrimer = /[^\/\\]*([#\?].*)?$/;
var forwardTrimer = /[^\/]+\/\.\.\//;
var base = document.location.href.
replace(homeFormater,"$1/").
replace(dirTrimer,"");
var baseTags = document.getElementsByTagName("base");
var scripts = document.getElementsByTagName("script");
/*
* 计算绝对地址
* @public
* @param <string>url 原url
* @return <string> 绝对URL
* @static
*/
function computeURL(url){
var purl = url.replace(urlTrimer,'').replace(/\\/g,'/');
var surl = url.substr(purl.length);
//prompt(rootMatcher.test(purl),[purl , surl])
if(rootMatcher.test(purl)){
return purl + surl;
}else if(purl.charAt(0) == '/'){
return rootMatcher.exec(base)[0]+purl + surl;
}
purl = base + purl;
while(purl.length >(purl = purl.replace(forwardTrimer,'')).length){
//alert(purl)
}
return purl + surl;
}
//处理HTML BASE 标记
if(baseTags){
for(var i=baseTags.length-1;i>=0;i--){
var href = baseTags[i].href;
if(href){
base = computeURL(href.replace(homeFormater,"$1/").replace(dirTrimer,""));
break;
}
}
}
/*
* Dependence = [0 , 1 , 2 , 3 ,4 ,5 ]
* Dependence = [targetPackage, targetFileName, ,thisObjectName, afterLoad,names]
* afterLoad,thisObject 有点冗余
*/
//var DEPENDENCE_TARGET_PACKAGE = 0;
//var DEPENDENCE_TARGET_FILE_NAME = 1;
//var DEPENDENCE_TARGET_OBJECT_NAME = 2;
//var DEPENDENCE_THIS_OBJECT_NAME = 3;
//var DEPENDENCE_AFTER_LOAD = 4;
//var DEPENDENCE_NAMES = 4;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -