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

📄 get-debug.js

📁 这是YUI的源码及相关示例。里面有很多很炫的Javascript效果。
💻 JS
📖 第 1 页 / 共 2 页
字号:
/*Copyright (c) 2008, Yahoo! Inc. All rights reserved.Code licensed under the BSD License:http://developer.yahoo.net/yui/license.txtversion: 2.6.0*//** * Provides a mechanism to fetch remote resources and * insert them into a document * @module get * @requires yahoo *//** * Fetches and inserts one or more script or link nodes into the document  * @namespace YAHOO.util * @class YAHOO.util.Get */YAHOO.util.Get = function() {    /**     * hash of queues to manage multiple requests     * @property queues     * @private     */    var queues={},             /**     * queue index used to generate transaction ids     * @property qidx     * @type int     * @private     */        qidx=0,             /**     * node index used to generate unique node ids     * @property nidx     * @type int     * @private     */        nidx=0,         // ridx=0,        // sandboxFrame=null,    /**     * interal property used to prevent multiple simultaneous purge      * processes     * @property purging     * @type boolean     * @private     */        purging=false,        ua=YAHOO.env.ua,                 lang=YAHOO.lang;        /**      * Generates an HTML element, this is not appended to a document     * @method _node     * @param type {string} the type of element     * @param attr {string} the attributes     * @param win {Window} optional window to create the element in     * @return {HTMLElement} the generated node     * @private     */    var _node = function(type, attr, win) {        var w = win || window, d=w.document, n=d.createElement(type);        for (var i in attr) {            if (attr[i] && YAHOO.lang.hasOwnProperty(attr, i)) {                n.setAttribute(i, attr[i]);            }        }        return n;    };    /**     * Generates a link node     * @method _linkNode     * @param url {string} the url for the css file     * @param win {Window} optional window to create the node in     * @return {HTMLElement} the generated node     * @private     */    var _linkNode = function(url, win, charset) {        var c = charset || "utf-8";        return _node("link", {                "id":      "yui__dyn_" + (nidx++),                "type":    "text/css",                "charset": c,                "rel":     "stylesheet",                "href":    url            }, win);    };    /**     * Generates a script node     * @method _scriptNode     * @param url {string} the url for the script file     * @param win {Window} optional window to create the node in     * @return {HTMLElement} the generated node     * @private     */    var _scriptNode = function(url, win, charset) {        var c = charset || "utf-8";        return _node("script", {                "id":      "yui__dyn_" + (nidx++),                "type":    "text/javascript",                "charset": c,                "src":     url            }, win);    };    /**     * Returns the data payload for callback functions     * @method _returnData     * @private     */    var _returnData = function(q, msg) {        return {                tId: q.tId,                win: q.win,                data: q.data,                nodes: q.nodes,                msg: msg,                purge: function() {                    _purge(this.tId);                }            };    };    var _get = function(nId, tId) {        var q = queues[tId],            n = (lang.isString(nId)) ? q.win.document.getElementById(nId) : nId;        if (!n) {            _fail(tId, "target node not found: " + nId);        }        return n;    };    /*     * The request failed, execute fail handler with whatever     * was accomplished.  There isn't a failure case at the     * moment unless you count aborted transactions     * @method _fail     * @param id {string} the id of the request     * @private     */    var _fail = function(id, msg) {        YAHOO.log("get failure: " + msg, "warn", "Get");        var q = queues[id];        // execute failure callback        if (q.onFailure) {            var sc=q.scope || q.win;            q.onFailure.call(sc, _returnData(q, msg));        }    };    /**     * The request is complete, so executing the requester's callback     * @method _finish     * @param id {string} the id of the request     * @private     */    var _finish = function(id) {        YAHOO.log("Finishing transaction " + id);        var q = queues[id];        q.finished = true;        if (q.aborted) {            var msg = "transaction " + id + " was aborted";            _fail(id, msg);            return;        }        // execute success callback        if (q.onSuccess) {            var sc=q.scope || q.win;            q.onSuccess.call(sc, _returnData(q));        }    };    /**     * Timeout detected     * @method _timeout     * @param id {string} the id of the request     * @private     */    var _timeout = function(id) {        YAHOO.log("Timeout " + id, "info", "get");        var q = queues[id];        if (q.onTimeout) {            var sc=q.context || q;            q.onTimeout.call(sc, _returnData(q));        }    };    /**     * Loads the next item for a given request     * @method _next     * @param id {string} the id of the request     * @param loaded {string} the url that was just loaded, if any     * @private     */    var _next = function(id, loaded) {        YAHOO.log("_next: " + id + ", loaded: " + loaded, "info", "Get");        var q = queues[id];        if (q.timer) {            // Y.log('cancel timer');            q.timer.cancel();        }        if (q.aborted) {            var msg = "transaction " + id + " was aborted";            _fail(id, msg);            return;        }        if (loaded) {            q.url.shift();             if (q.varName) {                q.varName.shift();             }        } else {            // This is the first pass: make sure the url is an array            q.url = (lang.isString(q.url)) ? [q.url] : q.url;            if (q.varName) {                q.varName = (lang.isString(q.varName)) ? [q.varName] : q.varName;            }        }        var w=q.win, d=w.document, h=d.getElementsByTagName("head")[0], n;        if (q.url.length === 0) {            // Safari 2.x workaround - There is no way to know when             // a script is ready in versions of Safari prior to 3.x.            // Adding an extra node reduces the problem, but doesn't            // eliminate it completely because the browser executes            // them asynchronously.             if (q.type === "script" && ua.webkit && ua.webkit < 420 &&                     !q.finalpass && !q.varName) {                // Add another script node.  This does not guarantee that the                // scripts will execute in order, but it does appear to fix the                // problem on fast connections more effectively than using an                // arbitrary timeout.  It is possible that the browser does                // block subsequent script execution in this case for a limited                // time.                var extra = _scriptNode(null, q.win, q.charset);                extra.innerHTML='YAHOO.util.Get._finalize("' + id + '");';                q.nodes.push(extra); h.appendChild(extra);            } else {                _finish(id);            }            return;        }         var url = q.url[0];        // if the url is undefined, this is probably a trailing comma problem in IE        if (!url) {            q.url.shift();             YAHOO.log('skipping empty url');            return _next(id);        }        YAHOO.log("attempting to load " + url, "info", "Get");        if (q.timeout) {            // Y.log('create timer');            q.timer = lang.later(q.timeout, q, _timeout, id);        }        if (q.type === "script") {            n = _scriptNode(url, w, q.charset);        } else {            n = _linkNode(url, w, q.charset);        }        // track this node's load progress        _track(q.type, n, id, url, w, q.url.length);        // add the node to the queue so we can return it to the user supplied callback        q.nodes.push(n);        // add it to the head or insert it before 'insertBefore'        if (q.insertBefore) {            var s = _get(q.insertBefore, id);            if (s) {                s.parentNode.insertBefore(n, s);            }        } else {            h.appendChild(n);        }                YAHOO.log("Appending node: " + url, "info", "Get");        // FireFox does not support the onload event for link nodes, so there is        // no way to make the css requests synchronous. This means that the css         // rules in multiple files could be applied out of order in this browser        // if a later request returns before an earlier one.  Safari too.        if ((ua.webkit || ua.gecko) && q.type === "css") {            _next(id, url);        }    };    /**     * Removes processed queues and corresponding nodes     * @method _autoPurge     * @private     */    var _autoPurge = function() {        if (purging) {            return;        }        purging = true;        for (var i in queues) {            var q = queues[i];            if (q.autopurge && q.finished) {                _purge(q.tId);                delete queues[i];            }        }        purging = false;    };    /**     * Removes the nodes for the specified queue     * @method _purge     * @private     */    var _purge = function(tId) {        var q=queues[tId];        if (q) {            var n=q.nodes, l=n.length, d=q.win.document,                 h=d.getElementsByTagName("head")[0];            if (q.insertBefore) {                var s = _get(q.insertBefore, tId);                if (s) {                    h = s.parentNode;                }            }            for (var i=0; i<l; i=i+1) {                h.removeChild(n[i]);            }            q.nodes = [];        }    };    /**     * Saves the state for the request and begins loading     * the requested urls     * @method queue     * @param type {string} the type of node to insert     * @param url {string} the url to load     * @param opts the hash of options for this request     * @private

⌨️ 快捷键说明

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