| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-ux-ajax-Simlet'>/**</span> * @author Don Griffin * * This is a base class for more advanced "simlets" (simulated servers). A simlet is asked * to provide a response given a {@link Ext.ux.ajax.SimXhr} instance. */Ext.define('Ext.ux.ajax.Simlet', function () {    var urlRegex = /([^?#]*)(#.*)?$/,        dateRegex = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/,        intRegex = /^[+-]?\d+$/,        floatRegex = /^[+-]?\d+\.\d+$/;    function parseParamValue (value) {        var m;        if (Ext.isDefined(value)) {            value = decodeURIComponent(value);            if (intRegex.test(value)) {                value = parseInt(value, 10);            } else if (floatRegex.test(value)) {                value = parseFloat(value);            } else if (!!(m = dateRegex.test(value))) {                value = new Date(Date.UTC(+m[1], +m[2]-1, +m[3], +m[4], +m[5], +m[6]));            }        }        return value;    }    return {        alias: 'simlet.basic',        isSimlet: true,        responseProps: ['responseText', 'responseXML', 'status', 'statusText'],<span id='Ext-ux-ajax-Simlet-cfg-responseText'>        /**</span>         * @cfg {Number} responseText         */<span id='Ext-ux-ajax-Simlet-cfg-responseXML'>        /**</span>         * @cfg {Number} responseXML         */<span id='Ext-ux-ajax-Simlet-cfg-responseHeaders'>        /**</span>         * @cfg {Object} responseHeaders         */<span id='Ext-ux-ajax-Simlet-cfg-status'>        /**</span>         * @cfg {Number} status         */        status: 200,<span id='Ext-ux-ajax-Simlet-cfg-statusText'>        /**</span>         * @cfg {String} statusText         */        statusText: 'OK',        constructor: function (config) {            Ext.apply(this, config);        },        doGet: function (ctx) {            var me = this,                ret = {};            Ext.each(me.responseProps, function (prop) {                if (prop in me) {                    ret[prop] = me[prop];                }            });            return ret;        },        doRedirect: function (ctx) {            return false;        },<span id='Ext-ux-ajax-Simlet-method-exec'>        /**</span>         * Performs the action requested by the given XHR and returns an object to be applied         * on to the XHR (containing `status`, `responseText`, etc.). For the most part,         * this is delegated to `doMethod` methods on this class, such as `doGet`.         *         * @param {Ext.ux.ajax.SimXhr} xhr The simulated XMLHttpRequest instance.         * @returns {Object} The response properties to add to the XMLHttpRequest.         */        exec: function (xhr) {            var me = this,                ret = {},                method = 'do' + Ext.String.capitalize(xhr.method.toLowerCase()), // doGet                fn = me[method];            if (fn) {                ret = fn.call(me, me.getCtx(xhr.method, xhr.url, xhr));            } else {                ret = { status: 405, statusText: 'Method Not Allowed' };            }            return ret;        },        getCtx: function (method, url, xhr) {            return {                method: method,                params: this.parseQueryString(url),                url: url,                xhr: xhr            };        },        openRequest: function (method, url, options, async) {            var ctx = this.getCtx(method, url),                redirect = this.doRedirect(ctx),                xhr;            if (redirect) {                xhr = redirect;            } else {                xhr = new Ext.ux.ajax.SimXhr({                    mgr: this.manager,                    simlet: this,                    options: options                });                xhr.open(method, url, async);            }            return xhr;        },        parseQueryString : function (str) {            var m = urlRegex.exec(str),                ret = {},                key,                value,                i, n;            if (m && m[1]) {                var pair, parts = m[1].split('&');                for (i = 0, n = parts.length; i < n; ++i) {                    if ((pair = parts[i].split('='))[0]) {                        key = decodeURIComponent(pair.shift());                        value = parseParamValue((pair.length > 1) ? pair.join('=') : pair[0]);                        if (!(key in ret)) {                            ret[key] = value;                        } else if (Ext.isArray(ret[key])) {                            ret[key].push(value);                        } else {                            ret[key] = [ret[key], value];                        }                    }                }            }            return ret;        },        redirect: function (method, url, params) {            switch (arguments.length) {                case 2:                    if (typeof url == 'string') {                        break;                    }                    params = url;                    // fall...                case 1:                    url = method;                    method = 'GET';                    break;            }            if (params) {                url = Ext.urlAppend(url, Ext.Object.toQueryString(params));            }            return this.manager.openRequest(method, url);        }    };}());</pre></body></html>
 |