????JFIF??x?x????'
Server IP : 104.21.32.1 / Your IP : 216.73.216.145 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/self/cwd/wp-content/plugins/motopress-content-editor/jquery/dom/fixture/ |
Upload File : |
steal('jquery/dom', 'jquery/lang/object', 'jquery/lang/string',function( $ ) { //used to check urls // the pre-filter needs to re-route the url $.ajaxPrefilter( function( settings, originalOptions, jqXHR ) { // if fixtures are on if(! $.fixture.on) { return; } // add the fixture option if programmed in var data = overwrite(settings); // if we don't have a fixture, do nothing if(!settings.fixture){ if(window.location.protocol === "file:"){ steal.dev.log("ajax request to " + settings.url+", no fixture found"); } return; } //if referencing something else, update the fixture option if ( typeof settings.fixture === "string" && $.fixture[settings.fixture] ) { settings.fixture = $.fixture[settings.fixture]; } // if a string, we just point to the right url if ( typeof settings.fixture == "string" ) { var url = settings.fixture; if (/^\/\//.test(url) ) { url = steal.root.mapJoin(settings.fixture.substr(2))+''; } //!steal-remove-start steal.dev.log("looking for fixture in " + url); //!steal-remove-end settings.url = url; settings.data = null; settings.type = "GET"; if (!settings.error ) { settings.error = function( xhr, error, message ) { throw "fixtures.js Error " + error + " " + message; }; } }else { //!steal-remove-start steal.dev.log("using a dynamic fixture for " +settings.type+" "+ settings.url); //!steal-remove-end //it's a function ... add the fixture datatype so our fixture transport handles it // TODO: make everything go here for timing and other fun stuff settings.dataTypes.splice(0,0,"fixture"); if(data){ $.extend(originalOptions.data, data) } // add to settings data from fixture ... } }); $.ajaxTransport( "fixture", function( s, original ) { // remove the fixture from the datatype s.dataTypes.shift(); //we'll return the result of the next data type var next = s.dataTypes[0], timeout; return { send: function( headers , callback ) { // callback after a timeout timeout = setTimeout(function() { // get the callback data from the fixture function var response = s.fixture(original, s, headers); // normalize the fixture data into a response if(!$.isArray(response)){ var tmp = [{}]; tmp[0][next] = response response = tmp; } if(typeof response[0] != 'number'){ response.unshift(200,"success") } // make sure we provide a response type that matches the first datatype (typically json) if(!response[2] || !response[2][next]){ var tmp = {} tmp[next] = response[2]; response[2] = tmp; } // pass the fixture data back to $.ajax callback.apply(null, response ); }, $.fixture.delay); }, abort: function() { clearTimeout(timeout) } }; }); var typeTest = /^(script|json|test|jsonp)$/, // a list of 'overwrite' settings object overwrites = [], // returns the index of an overwrite function find = function(settings, exact){ for(var i =0; i < overwrites.length; i++){ if($fixture._similar(settings, overwrites[i], exact)){ return i; } } return -1; }, // overwrites the settings fixture if an overwrite matches overwrite = function(settings){ var index = find(settings); if(index > -1){ settings.fixture = overwrites[index].fixture; return $fixture._getData(overwrites[index].url, settings.url) } }, /** * Makes an attempt to guess where the id is at in the url and returns it. * @param {Object} settings */ getId = function(settings){ var id = settings.data.id; if(id === undefined && typeof settings.data === "number") { id = settings.data; } /* Check for id in params(if query string) If this is just a string representation of an id, parse if(id === undefined && typeof settings.data === "string") { id = settings.data; } //*/ if(id === undefined){ settings.url.replace(/\/(\d+)(\/|$|\.)/g, function(all, num){ id = num; }); } if(id === undefined){ id = settings.url.replace(/\/(\w+)(\/|$|\.)/g, function(all, num){ if(num != 'update'){ id = num; } }) } if(id === undefined){ // if still not set, guess a random number id = Math.round(Math.random()*1000) } return id; }; /** * @function jQuery.fixture * @plugin jquery/dom/fixture * @download http://jmvcsite.heroku.com/pluginify?plugins[]=jquery/dom/fixture/fixture.js * @test jquery/dom/fixture/qunit.html * @parent dom * * <code>$.fixture</code> intercepts a AJAX request and simulates * the response with a file or function. They are a great technique * when you want to develop JavaScript * independently of the backend. * * ## Types of Fixtures * * There are two common ways of using fixtures. The first is to * map Ajax requests to another file. The following * intercepts requests to <code>/tasks.json</code> and directs them * to <code>fixtures/tasks.json</code>: * * $.fixture("/tasks.json","fixtures/tasks.json"); * * The other common option is to generate the Ajax response with * a function. The following intercepts updating tasks at * <code>/tasks/ID.json</code> and responds with updated data: * * $.fixture("PUT /tasks/{id}.json", function(original, settings, headers){ * return { updatedAt : new Date().getTime() } * }) * * We categorize fixtures into the following types: * * - __Static__ - the response is in a file. * - __Dynamic__ - the response is generated by a function. * * There are different ways to lookup static and dynamic fixtures. * * ## Static Fixtures * * Static fixtures use an alternate url as the response of the Ajax request. * * // looks in fixtures/tasks1.json relative to page * $.fixture("tasks/1", "fixtures/task1.json"); * * $.fixture("tasks/1", "//fixtures/task1.json"); * * ## Dynamic Fixtures * * Dynamic Fixtures are functions that get the details of * the Ajax request and return the result of the mocked service * request from your server. * * For example, the following returns a successful response * with JSON data from the server: * * $.fixture("/foobar.json", function(orig, settings, headers){ * return [200, "success", {json: {foo: "bar" } }, {} ] * }) * * The fixture function has the following signature: * * function( originalOptions, options, headers ) { * return [ status, statusText, responses, responseHeaders ] * } * * where the fixture function is called with: * * - originalOptions - are the options provided to the ajax method, unmodified, * and thus, without defaults from ajaxSettings * - options - are the request options * - headers - a map of key/value request headers * * and the fixture function returns an array as arguments for ajaxTransport's <code>completeCallback</code> with: * * - status - is the HTTP status code of the response. * - statusText - the status text of the response * - responses - a map of dataType/value that contains the responses for each data format supported * - headers - response headers * * However, $.fixture handles the * common case where you want a successful response with JSON data. The * previous can be written like: * * $.fixture("/foobar.json", function(orig, settings, headers){ * return {foo: "bar" }; * }) * * If you want to return an array of data, wrap your array in another array: * * $.fixture("/tasks.json", function(orig, settings, headers){ * return [ [ "first","second","third"] ]; * }) * * $.fixture works closesly with jQuery's * ajaxTransport system. Understanding it is the key to creating advanced * fixtures. * * ### Templated Urls * * Often, you want a dynamic fixture to handle urls * for multiple resources (for example a REST url scheme). $.fixture's * templated urls allow you to match urls with a wildcard. * * The following example simulates services that get and update 100 todos. * * // create todos * var todos = {}; * for(var i = 0; i < 100; i++) { * todos[i] = { * id: i, * name: "Todo "+i * } * } * $.fixture("GET /todos/{id}", function(orig){ * // return the JSON data * // notice that id is pulled from the url and added to data * return todos[orig.data.id] * }) * $.fixture("PUT /todos/{id}", function(orig){ * // update the todo's data * $.extend( todos[orig.data.id], orig.data ); * * // return data * return {}; * }) * * Notice that data found in templated urls (ex: <code>{id}</code>) is added to the original * data object. * * ## Simulating Errors * * The following simulates an unauthorized request * to <code>/foo</code>. * * $.fixture("/foo", function(){ * return [401,"{type: 'unauthorized'}"] * }); * * This could be received by the following Ajax request: * * $.ajax({ * url: '/foo', * error : function(jqXhr, status, statusText){ * // status === 'error' * // statusText === "{type: 'unauthorized'}" * } * }) * * ## Turning off Fixtures * * You can remove a fixture by passing <code>null</code> for the fixture option: * * // add a fixture * $.fixture("GET todos.json","//fixtures/todos.json"); * * // remove the fixture * $.fixture("GET todos.json", null) * * You can also set [jQuery.fixture.on $.fixture.on] to false: * * $.fixture.on = false; * * ## Make * * [jQuery.fixture.make $.fixture.make] makes a CRUD service layer that handles sorting, grouping, * filtering and more. * * ## Testing Performance * * Dynamic fixtures are awesome for performance testing. Want to see what * 10000 files does to your app's performance? Make a fixture that returns 10000 items. * * What to see what the app feels like when a request takes 5 seconds to return? Set * [jQuery.fixture.delay] to 5000. * * @demo jquery/dom/fixture/fixture.html * * @param {Object|String} settings Configures the AJAX requests the fixture should * intercept. If an __object__ is passed, the object's properties and values * are matched against the settings passed to $.ajax. * * If a __string__ is passed, it can be used to match the url and type. Urls * can be templated, using <code>{NAME}</code> as wildcards. * * @param {Function|String} fixture The response to use for the AJAX * request. If a __string__ url is passed, the ajax request is redirected * to the url. If a __function__ is provided, it looks like: * * fixture( originalSettings, settings, headers ) * * where: * * - originalSettings - the orignal settings passed to $.ajax * - settings - the settings after all filters have run * - headers - request headers * * If __null__ is passed, and there is a fixture at settings, that fixture will be removed, * allowing the AJAX request to behave normally. */ var $fixture = $.fixture = function( settings , fixture ){ // if we provide a fixture ... if(fixture !== undefined){ if(typeof settings == 'string'){ // handle url strings var matches = settings.match(/(GET|POST|PUT|DELETE) (.+)/i); if(!matches){ settings = { url : settings }; } else { settings = { url : matches[2], type: matches[1] }; } } //handle removing. An exact match if fixture was provided, otherwise, anything similar var index = find(settings, !!fixture); if(index > -1){ overwrites.splice(index,1) } if(fixture == null){ return } settings.fixture = fixture; overwrites.push(settings) } }; var replacer = $.String._regs.replacer; $.extend($.fixture, { // given ajax settings, find an overwrite _similar : function(settings, overwrite, exact){ if(exact){ return $.Object.same(settings , overwrite, {fixture : null}) } else { return $.Object.subset(settings, overwrite, $.fixture._compare) } }, _compare : { url : function(a, b){ return !! $fixture._getData(b, a) }, fixture : null, type : "i" }, // gets data from a url like "/todo/{id}" given "todo/5" _getData : function(fixtureUrl, url){ var order = [], fixtureUrlAdjusted = fixtureUrl.replace('.', '\\.').replace('?', '\\?'), res = new RegExp(fixtureUrlAdjusted.replace(replacer, function(whole, part){ order.push(part) return "([^\/]+)" })+"$").exec(url), data = {}; if(!res){ return null; } res.shift(); $.each(order, function(i, name){ data[name] = res.shift() }) return data; }, /** * @hide * Provides a rest update fixture function */ "-restUpdate": function( settings ) { return [200,"succes",{ id: getId(settings) },{ location: settings.url+"/"+getId(settings) }]; }, /** * @hide * Provides a rest destroy fixture function */ "-restDestroy": function( settings, cbType ) { return {}; }, /** * @hide * Provides a rest create fixture function */ "-restCreate": function( settings, cbType, nul, id ) { var id = id || parseInt(Math.random() * 100000, 10); return [200,"succes",{ id: id },{ location: settings.url+"/"+id }]; }, /** * @function jQuery.fixture.make * @parent jQuery.fixture * Used to make fixtures for findAll / findOne style requests. * * //makes a nested list of messages * $.fixture.make(["messages","message"],1000, function(i, messages){ * return { * subject: "This is message "+i, * body: "Here is some text for this message", * date: Math.floor( new Date().getTime() ), * parentId : i < 100 ? null : Math.floor(Math.random()*i) * } * }) * //uses the message fixture to return messages limited by offset, limit, order, etc. * $.ajax({ * url: "messages", * data:{ * offset: 100, * limit: 50, * order: ["date ASC"], * parentId: 5}, * }, * fixture: "-messages", * success: function( messages ) { ... } * }); * * @param {Array|String} types An array of the fixture names or the singular fixture name. * If an array, the first item is the plural fixture name (prefixed with -) and the second * item is the singular name. If a string, it's assumed to be the singular fixture name. Make * will simply add s to the end of it for the plural name. * @param {Number} count the number of items to create * @param {Function} make a function that will return json data representing the object. The * make function is called back with the id and the current array of items. * @param {Function} filter (optional) a function used to further filter results. Used for to simulate * server params like searchText or startDate. The function should return true if the item passes the filter, * false otherwise. For example: * * * function(item, settings){ * if(settings.data.searchText){ * var regex = new RegExp("^"+settings.data.searchText) * return regex.test(item.name); * } * } * */ make: function( types, count, make, filter ) { if(typeof types === "string"){ types = [types+"s",types ] } // make all items var items = ($.fixture["~" + types[0]] = []), // TODO: change this to a hash findOne = function(id){ for ( var i = 0; i < items.length; i++ ) { if ( id == items[i].id ) { return items[i]; } } }; for ( var i = 0; i < (count); i++ ) { //call back provided make var item = make(i, items); if (!item.id ) { item.id = i; } items.push(item); } //set plural fixture for findAll $.fixture["-" + types[0]] = function( settings ) { //copy array of items var retArr = items.slice(0); settings.data = settings.data || {}; //sort using order //order looks like ["age ASC","gender DESC"] $.each((settings.data.order || []).slice(0).reverse(), function( i, name ) { var split = name.split(" "); retArr = retArr.sort(function( a, b ) { if ( split[1].toUpperCase() !== "ASC" ) { if( a[split[0]] < b[split[0]] ) { return 1; } else if(a[split[0]] == b[split[0]]){ return 0 } else { return -1; } } else { if( a[split[0]] < b[split[0]] ) { return -1; } else if(a[split[0]] == b[split[0]]){ return 0 } else { return 1; } } }); }); //group is just like a sort $.each((settings.data.group || []).slice(0).reverse(), function( i, name ) { var split = name.split(" "); retArr = retArr.sort(function( a, b ) { return a[split[0]] > b[split[0]]; }); }); var offset = parseInt(settings.data.offset, 10) || 0, limit = parseInt(settings.data.limit, 10) || (items.length - offset), i = 0; //filter results if someone added an attr like parentId for ( var param in settings.data ) { i=0; if ( settings.data[param] !== undefined && // don't do this if the value of the param is null (ignore it) (param.indexOf("Id") != -1 || param.indexOf("_id") != -1) ) { while ( i < retArr.length ) { if ( settings.data[param] != retArr[i][param] ) { retArr.splice(i, 1); } else { i++; } } } } if( filter ) { i = 0; while (i < retArr.length) { if (!filter(retArr[i], settings)) { retArr.splice(i, 1); } else { i++; } } } //return data spliced with limit and offset return [{ "count": retArr.length, "limit": settings.data.limit, "offset": settings.data.offset, "data": retArr.slice(offset, offset + limit) }]; }; // findOne $.fixture["-" + types[1]] = function( settings ) { var item = findOne(getId(settings)); return item ? [item] : []; }; // update $.fixture["-" + types[1]+"Update"] = function( settings, cbType ) { var id = getId(settings); // TODO: make it work with non-linear ids .. $.extend(findOne(id), settings.data); return $.fixture["-restUpdate"](settings, cbType) }; $.fixture["-" + types[1]+"Destroy"] = function( settings, cbType ) { var id = getId(settings); for(var i = 0; i < items.length; i ++ ){ if(items[i].id == id){ items.splice(i, 1); break; } } // TODO: make it work with non-linear ids .. $.extend(findOne(id), settings.data); return $.fixture["-restDestroy"](settings, cbType) }; $.fixture["-" + types[1]+"Create"] = function( settings, cbType ) { var item = make(items.length, items); $.extend(item, settings.data); if(!item.id){ item.id = items.length; } items.push(item); return $.fixture["-restCreate"](settings, cbType, undefined, item.id ); }; return { getId: getId, findOne : findOne, find : function(settings){ return findOne( getId(settings) ); } } }, /** * @function jQuery.fixture.rand * @parent jQuery.fixture * * Creates random integers or random arrays of * other arrays. * * ## Examples * * var rand = $.fixture.rand; * * // get a random integer between 0 and 10 (inclusive) * rand(11); * * // get a random number between -5 and 5 (inclusive) * rand(-5, 6); * * // pick a random item from an array * rand(["j","m","v","c"],1)[0] * * // pick a random number of items from an array * rand(["j","m","v","c"]) * * // pick 2 items from an array * rand(["j","m","v","c"],2) * * // pick between 2 and 3 items at random * rand(["j","m","v","c"],2,3) * * * @param {Array|Number} arr An array of items to select from. * If a number is provided, a random number is returned. * If min and max are not provided, a random number of items are selected * from this array. * @param {Number} [min] If only min is provided, min items * are selected. * @param {Number} [max] If min and max are provided, a random number of * items between min and max (inclusive) is selected. */ rand : function(arr, min, max){ if(typeof arr == 'number'){ if(typeof min == 'number'){ return arr+ Math.floor(Math.random() * (min - arr) ); } else { return Math.floor(Math.random() * arr); } } var rand = arguments.callee; // get a random set if(min === undefined){ return rand(arr, rand(arr.length+1)) } // get a random selection of arr var res = []; arr = arr.slice(0); // set max if(!max){ max = min; } //random max max = min + Math.round( rand(max - min) ) for(var i=0; i < max; i++){ res.push(arr.splice( rand(arr.length), 1 )[0]) } return res; }, /** * @hide * Use $.fixture.xhr to create an object that looks like an xhr object. * * ## Example * * The following example shows how the -restCreate fixture uses xhr to return * a simulated xhr object: * @codestart * "-restCreate" : function( settings, cbType ) { * switch(cbType){ * case "success": * return [ * {id: parseInt(Math.random()*1000)}, * "success", * $.fixture.xhr()]; * case "complete": * return [ * $.fixture.xhr({ * getResponseHeader: function() { * return settings.url+"/"+parseInt(Math.random()*1000); * } * }), * "success"]; * } * } * @codeend * @param {Object} [xhr] properties that you want to overwrite * @return {Object} an object that looks like a successful XHR object. */ xhr: function( xhr ) { return $.extend({}, { abort: $.noop, getAllResponseHeaders: function() { return ""; }, getResponseHeader: function() { return ""; }, open: $.noop, overrideMimeType: $.noop, readyState: 4, responseText: "", responseXML: null, send: $.noop, setRequestHeader: $.noop, status: 200, statusText: "OK" }, xhr); }, /** * @attribute on * On lets you programatically turn off fixtures. This is mostly used for testing. * * $.fixture.on = false * Task.findAll({}, function(){ * $.fixture.on = true; * }) */ on : true }); /** * @attribute $.fixture.delay * @parent $.fixture * Sets the delay in milliseconds between an ajax request is made and * the success and complete handlers are called. This only sets * functional fixtures. By default, the delay is 200ms. * @codestart * steal('jquery/dom/fixtures').then(function(){ * $.fixture.delay = 1000; * }) * @codeend */ $.fixture.delay = 200; $.fixture["-handleFunction"] = function( settings ) { if ( typeof settings.fixture === "string" && $.fixture[settings.fixture] ) { settings.fixture = $.fixture[settings.fixture]; } if ( typeof settings.fixture == "function" ) { setTimeout(function() { if ( settings.success ) { settings.success.apply(null, settings.fixture(settings, "success")); } if ( settings.complete ) { settings.complete.apply(null, settings.fixture(settings, "complete")); } }, $.fixture.delay); return true; } return false; }; /** * @page jquery.fixture.0organizing Organizing Fixtures * @parent jQuery.fixture * * The __best__ way of organizing fixtures is to have a 'fixtures.js' file that steals * <code>jquery/dom/fixture</code> and defines all your fixtures. For example, * if you have a 'todo' application, you might * have <code>todo/fixtures/fixtures.js</code> look like: * * steal({ * path: '//jquery/dom/fixture.js', * ignore: true * }) * .then(function(){ * * $.fixture({ * type: 'get', * url: '/services/todos.json' * }, * '//todo/fixtures/todos.json'); * * $.fixture({ * type: 'post', * url: '/services/todos.json' * }, * function(settings){ * return {id: Math.random(), * name: settings.data.name} * }); * * }) * * __Notice__: We used steal's ignore option to prevent * loading the fixture plugin in production. * * Finally, we steal <code>todo/fixtures/fixtures.js</code> in the * app file (<code>todo/todo.js</code>) like: * * * steal({path: '//todo/fixtures/fixtures.js',ignore: true}); * * //start of your app's steals * steal( ... ) * * We typically keep it a one liner so it's easy to comment out. * * ## Switching Between Sets of Fixtures * * If you are using fixtures for testing, you often want to use different * sets of fixtures. You can add something like the following to your fixtures.js file: * * if( /fixtureSet1/.test( window.location.search) ){ * $.fixture("/foo","//foo/fixtures/foo1.json'); * } else if(/fixtureSet2/.test( window.location.search)){ * $.fixture("/foo","//foo/fixtures/foo1.json'); * } else { * // default fixtures (maybe no fixtures) * } * */ //Expose this for fixture debugging $.fixture.overwrites = overwrites; });