⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dependence-info.js

📁 JS编译工具
💻 JS
字号:
/*
 * JavaScript Integration Framework
 * License LGPL(您可以在任何地方免费使用,但请不要吝啬您对框架本身的改进)
 * http://www.xidea.org/project/jsi/
 * @author jindw
 * @version $Id: dependence-info.js,v 1.5 2008/03/02 08:01:09 jindw Exp $
 */


var dependenceInfoMap = {};


/**
 * @param path 文件路径或者类的全名(不能是*匹配)。
 * 该路径将解析为:
 *  packageName : 包名,不可为空
 *  fileName : 文件名
 *  objectName : 对象名,为空表示文件依赖
 * 
 */ 
function DependenceInfo(path){
    if(dependenceInfoMap[path]){
        return dependenceInfoMap[path];
    }else{
        dependenceInfoMap[path] = this;
    }
    var packageFileObject = parsePath(path);
    var packageName = packageFileObject[0];
    var fileName = packageFileObject[1];
    var objectName = packageFileObject[2];
    var packageObject = this.packageObject = $import(packageName+':');
    if(packageObject.initialize){
        packageObject.initialize();
    }
    this.path = path;
    this.filePath = packageName.replace(/\.|$/g,'/')+fileName;
    this.fileName = fileName;
    this.objectName = objectName;
    this.subInfos = [];
    if(objectName){
        this.objectNames = [objectName];
    }else{
        this.objectNames = [];
        var map = this.packageObject.objectScriptMap;
        for(var n in map){
            if(map[n] == fileName){
                this.objectNames.push(n);
            }
        }
    }
}
DependenceInfo.prototype = {
    /**
     * 获取装载前依赖对应的变量(直接依赖)
     * @public
     * @owner DependenceInfo.prototype
     */
    getBeforeVars : function(){
        
    },
    /**
     * 获取装载后依赖对应的变量(直接依赖)
     * @public
     * @owner DependenceInfo.prototype
     */
    getAfterVars : function(){
        
    },
    /**
     * 获取全部(直接和间接)装载后依赖
     * @public
     * @owner DependenceInfo.prototype
     */
    getBeforeInfos : function(){
        return findDependence(this,0)
    },
    /**
     * 获取全部(直接和间接)装载前依赖
     * @public
     * @owner DependenceInfo.prototype
     */
    getAfterInfos : function(){
        return findDependence(this,1)
    },
    /**
     * 本依赖包含指定依赖
     * @public
     * @owner DependenceInfo.prototype
     */
    implicit : function(dest){
        if(this.packageObject == dest.packageObject && this.fileName == dest.fileName){
            if(this.objectName == null || this.objectName == dest.objectName){
                return true;
            }else{
                //this.objectName != null
                //dest.objectName == null || not null
                //return ! dest.getAfterInfos().length;
                return afterInfosIsEmpty(dest);
            }
        }
    }
};
if(":debug"){
    DependenceInfo.prototype.toString = function(){
        return [this.packageObject.name,this.fileName,this.objectName].join('/');
    }
}
function parsePath(path){
    var pos = path.lastIndexOf('/');
    if(pos>0){
        //file
        var packageName = path.substr(0,pos).replace(/\//g,'.');
        var fileName = path.substr(pos+1);
    }else{
        pos = path.lastIndexOf(':');
        if(pos == -1){
            pos = path.lastIndexOf('.');
        }
        var packageName = path.substr(0,pos);
        var objectName = path.substr(pos+1);
        var fileName = $import(packageName+':').objectScriptMap[objectName];
    }
    return [packageName,fileName,objectName]
}

function afterInfosIsEmpty(dependenceInfo){
    if(dependenceInfo.subInfos[1]){
        return !dependenceInfo.subInfos[1].length;
    }
    var dependences = dependenceInfo.packageObject.dependenceMap[dependenceInfo.fileName];
    var i = dependences && dependences.length;
    while(i--){
        var dependence = dependences[i];
        if(dependence[4]){//afterload
            var thisObject = dependence[3];
            if(!thisObject || !dependenceInfo.objectName || dependenceInfo.objectName == thisObject){
                return false;
            }
        }
    }
    return true;
}
function findDependence(dependenceInfo,index){
    if(!dependenceInfo.subInfos[index]){
        var dependences = dependenceInfo.packageObject.dependenceMap[dependenceInfo.fileName];
        var result = [];
        var i = dependences && dependences.length;
        dependenceLoop:
        while(i--){
            var dependence = dependences[i];
            if(!index == !dependence[4]){
                var thisObject = dependence[3];
                if(!index || !thisObject || !dependenceInfo.objectName || dependenceInfo.objectName == thisObject){
                    if(dependence[2]){//object
                        var path = dependence[0].name + ':' + dependence[2];
                    }else{
                        var path = dependence[0].name.replace(/\.|$/g,'/') + dependence[1];
                    }
                    var itemInfo = new DependenceInfo(path);
                    var j = result.length;
                    while(j--){
                        if(result[j].implicit(itemInfo)){
                            continue dependenceLoop;
                        }
                    }
                    result.push(itemInfo);
                }
            }
        }
        dependenceInfo.subInfos[index] = result;
    }
    return dependenceInfo.subInfos[index];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -