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

📄 datasource-debug.js

📁 这是YUI的源码及相关示例。里面有很多很炫的Javascript效果。
💻 JS
📖 第 1 页 / 共 5 页
字号:
},/** * Overridable method parses plain text data into a response object. * * @method parseTextData * @param oRequest {Object} Request object. * @param oFullResponse {Object} The full text response from the live database. * @return {Object} Parsed response object with the following properties:<br> *     - results (Array) Array of parsed data results<br> *     - error (Boolean) True if there was an error */parseTextData : function(oRequest, oFullResponse) {    if(lang.isString(oFullResponse)) {        if(lang.isString(this.responseSchema.recordDelim) &&                lang.isString(this.responseSchema.fieldDelim)) {            var oParsedResponse = {results:[]};            var recDelim = this.responseSchema.recordDelim;            var fieldDelim = this.responseSchema.fieldDelim;            if(oFullResponse.length > 0) {                // Delete the last line delimiter at the end of the data if it exists                var newLength = oFullResponse.length-recDelim.length;                if(oFullResponse.substr(newLength) == recDelim) {                    oFullResponse = oFullResponse.substr(0, newLength);                }                if(oFullResponse.length > 0) {                    // Split along record delimiter to get an array of strings                    var recordsarray = oFullResponse.split(recDelim);                    // Cycle through each record                    for(var i = 0, len = recordsarray.length, recIdx = 0; i < len; ++i) {                        var bError = false,                            sRecord = recordsarray[i];                        if (lang.isString(sRecord) && (sRecord.length > 0)) {                            // Split each record along field delimiter to get data                            var fielddataarray = recordsarray[i].split(fieldDelim);                            var oResult = {};                                                        // Filter for fields data                            if(lang.isArray(this.responseSchema.fields)) {                                var fields = this.responseSchema.fields;                                for(var j=fields.length-1; j>-1; j--) {                                    try {                                        // Remove quotation marks from edges, if applicable                                        var data = fielddataarray[j];                                        if (lang.isString(data)) {                                            if(data.charAt(0) == "\"") {                                                data = data.substr(1);                                            }                                            if(data.charAt(data.length-1) == "\"") {                                                data = data.substr(0,data.length-1);                                            }                                            var field = fields[j];                                            var key = (lang.isValue(field.key)) ? field.key : field;                                            // Backward compatibility                                            if(!field.parser && field.converter) {                                                field.parser = field.converter;                                                YAHOO.log("The field property converter has been deprecated" +                                                        " in favor of parser", "warn", this.toString());                                            }                                            var parser = (typeof field.parser === 'function') ?                                                field.parser :                                                DS.Parser[field.parser+''];                                            if(parser) {                                                data = parser.call(this, data);                                            }                                            // Safety measure                                            if(data === undefined) {                                                data = null;                                            }                                            oResult[key] = data;                                        }                                        else {                                            bError = true;                                        }                                    }                                    catch(e) {                                        bError = true;                                    }                                }                            }                                        // No fields defined so pass along all data as an array                            else {                                oResult = fielddataarray;                            }                            if(!bError) {                                oParsedResponse.results[recIdx++] = oResult;                            }                        }                    }                }            }            YAHOO.log("Parsed text data is " +                    lang.dump(oParsedResponse), "info", this.toString());            return oParsedResponse;        }    }    YAHOO.log("Text data could not be parsed: " + lang.dump(oFullResponse),             "error", this.toString());    return null;            },/** * Overridable method parses XML data for one result into an object literal. * * @method parseXMLResult * @param result {XML} XML for one result. * @return {Object} Object literal of data for one result. */parseXMLResult : function(result) {    var oResult = {},        schema = this.responseSchema;            try {        // Loop through each data field in each result using the schema        for(var m = schema.fields.length-1; m >= 0 ; m--) {            var field = schema.fields[m];            var key = (lang.isValue(field.key)) ? field.key : field;            var data = null;            // Values may be held in an attribute...            var xmlAttr = result.attributes.getNamedItem(key);            if(xmlAttr) {                data = xmlAttr.value;            }            // ...or in a node            else {                var xmlNode = result.getElementsByTagName(key);                if(xmlNode && xmlNode.item(0) && xmlNode.item(0)) {                    data = xmlNode.item(0).firstChild.nodeValue;                    var item = xmlNode.item(0);                    // For IE, then DOM...                    data = (item.text) ? item.text : (item.textContent) ? item.textContent : null;                    // ...then fallback, but check for multiple child nodes                    if(!data) {                        var datapieces = [];                        for(var j=0, len=item.childNodes.length; j<len; j++) {                            if(item.childNodes[j].nodeValue) {                                datapieces[datapieces.length] = item.childNodes[j].nodeValue;                            }                        }                        if(datapieces.length > 0) {                            data = datapieces.join("");                        }                    }                }            }            // Safety net            if(data === null) {                   data = "";            }            // Backward compatibility            if(!field.parser && field.converter) {                field.parser = field.converter;                YAHOO.log("The field property converter has been deprecated" +                        " in favor of parser", "warn", this.toString());            }            var parser = (typeof field.parser === 'function') ?                field.parser :                DS.Parser[field.parser+''];            if(parser) {                data = parser.call(this, data);            }            // Safety measure            if(data === undefined) {                data = null;            }            oResult[key] = data;        }    }    catch(e) {        YAHOO.log("Error while parsing XML result: " + e.message);    }    return oResult;},/** * Overridable method parses XML data into a response object. * * @method parseXMLData * @param oRequest {Object} Request object. * @param oFullResponse {Object} The full XML response from the live database. * @return {Object} Parsed response object with the following properties<br> *     - results (Array) Array of parsed data results<br> *     - error (Boolean) True if there was an error */parseXMLData : function(oRequest, oFullResponse) {    var bError = false,        schema = this.responseSchema,        oParsedResponse = {meta:{}},        xmlList = null,        metaNode      = schema.metaNode,        metaLocators  = schema.metaFields || {},        i,k,loc,v;    // In case oFullResponse is something funky    try {        xmlList = (schema.resultNode) ?            oFullResponse.getElementsByTagName(schema.resultNode) :            null;        // Pull any meta identified        metaNode = metaNode ? oFullResponse.getElementsByTagName(metaNode)[0] :                   oFullResponse;        if (metaNode) {            for (k in metaLocators) {                if (lang.hasOwnProperty(metaLocators, k)) {                    loc = metaLocators[k];                    // Look for a node                    v = metaNode.getElementsByTagName(loc)[0];                    if (v) {                        v = v.firstChild.nodeValue;                    } else {                        // Look for an attribute                        v = metaNode.attributes.getNamedItem(loc);                        if (v) {                            v = v.value;                        }                    }                    if (lang.isValue(v)) {                        oParsedResponse.meta[k] = v;                    }                }                            }        }    }    catch(e) {        YAHOO.log("Error while parsing XML data: " + e.message);    }    if(!xmlList || !lang.isArray(schema.fields)) {        bError = true;    }    // Loop through each result    else {        oParsedResponse.results = [];        for(i = xmlList.length-1; i >= 0 ; --i) {            var oResult = this.parseXMLResult(xmlList.item(i));            // Capture each array of values into an array of results            oParsedResponse.results[i] = oResult;        }    }    if(bError) {        YAHOO.log("XML data could not be parsed: " +                lang.dump(oFullResponse), "error", this.toString());        oParsedResponse.error = true;    }    else {        YAHOO.log("Parsed XML data is " +                lang.dump(oParsedResponse), "info", this.toString());    }    return oParsedResponse;},/** * Overridable method parses JSON data into a response object. * * @method parseJSONData * @param oRequest {Object} Request object. * @param oFullResponse {Object} The full JSON from the live database. * @return {Object} Parsed response object with the following properties<br> *     - results (Array) Array of parsed data results<br> *     - error (Boolean) True if there was an error */parseJSONData : function(oRequest, oFullResponse) {    var oParsedResponse = {results:[],meta:{}};        if(lang.isObject(oFullResponse) && this.responseSchema.resultsList) {        var schema = this.responseSchema,            fields          = schema.fields,            resultsList     = oFullResponse,            results         = [],            metaFields      = schema.metaFields || {},            fieldParsers    = [],            fieldPaths      = [],            simpleFields    = [],            bError          = false,            i,len,j,v,key,parser,path;        // Function to convert the schema's fields into walk paths        var buildPath = function (needle) {            var path = null, keys = [], i = 0;            if (needle) {                // Strip the ["string keys"] and [1] array indexes                needle = needle.                    replace(/\[(['"])(.*?)\1\]/g,                    function (x,$1,$2) {keys[i]=$2;return '.@'+(i++);}).                    replace(/\[(\d+)\]/g,                    function (x,$1) {keys[i]=parseInt($1,10)|0;return '.@'+(i++);}).                    replace(/^\./,''); // remove leading dot                // If the cleaned needle contains invalid characters, the                // path is invalid                if (!/[^\w\.\$@]/.test(needle)) {                    path = needle.split('.');                    for (i=path.length-1; i >= 0; --i) {                        if (path[i].charAt(0) === '@') {                            path[i] = keys[parseInt(path[i].substr(1),10)];                        }                    }                }                else {                    YAHOO.log("Invalid locator: " + needle, "error", this.toString());                }            }            return path;        };        // Function to walk a path and return the pot of gold        var walkPath = function (path, origin) {            var v=origin,i=0,len=path.length;            for (;i<len && v;++i) {                v = v[path[i]];            }            return v;        };        // Parse the response        // Step 1. Pull the resultsList from oFullResponse (default assumes        // oFullResponse IS the resultsList)        path = buildPath(schema.resultsList);        if (path) {            resultsList = walkPath(path, oFullResponse);            if (resultsList === undefined) {                bError = true;            }        } else {            bError = true;        }                if (!resultsList) {            resultsList = [];        }        if (!lang.isArray(resultsList)) {            resultsList = [resultsList];        }        if (!bError) {            // Step 2. Parse out field data if identified            if(schema.fields) {                var field;                // Build the field parser map and location paths                for (i=0, len=fields.length; i<len; i++) {                    field = fields[i];                    key    = field.key || field;                    parser = ((typeof field.parser === 'function') ?                        field.parser :                        DS.Parser[field.parser+'']) || field.converter;                    path   = buildPath(key);                        if (parser) {                        fieldParsers[fieldParsers.length] = {key:key,parser:parser};                    }                        if (path) {                        if (path.length > 1) {                            fieldPaths[fieldPaths.length] = {key:key,path:path};                        } else {                            simpleFields[simpleFields.length] = {key:key,path:path[0]};                        }                    } else {                        YAHOO.log("Invalid key syntax: " + key,"warn",this.toString());                    }                }                // Process the results, flattening the records and/or applying parsers if needed                //if (fieldParsers.length || fieldPaths.length) {                    for (i = resultsList.length - 1; i >= 0; --i) {                        var r = resultsList[i], rec = {};                        for (j = simpleFields.length - 1; j >= 0; --j) {                            // Bug 1777850: data might be held in an array                            rec[simpleFields[j].key] =                                    (r[simpleFields[j].path] !== undefined) ?                                    r[simpleFields[j].path] : r[j];                        }                        for (j = fieldPaths.length - 1; j >= 0; --j) {                            rec[fieldPaths[j].key] = walkPath(fieldPaths[j].path,r);                        }

⌨️ 快捷键说明

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