| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | /** * jQuery Server Plugin * * Server-side Ajax requests supporting jQuery manipulations * before sending content to the browser. *  * Example: * $.server({url: ${URL}) * 	.find('.my-class') * 	.client(${CALLBACK}); * * @version 0.5.1 * @author Tobiasz Cudnik <tobiasz.cudnik/gmail.com> * @link http://code.google.com/p/phpquery/wiki/jQueryServer * @link http://code.google.com/p/phpquery/ */jQuery.extend({	serverConfig: function() {		if (typeof jQueryServerConfig != 'undefined')			return jQueryServerConfig;		return {};	}(),	server: function(options){		// set default url		if (! jQuery.serverConfig.url)			jQuery.serverConfig.url = jQuery('script[src$=jquery.js]')				.attr('src').replace(/jquery\.js$/, '')				+'jQueryServer.php';		// this is cache object		var objectCache = {};		// dump all jQuery methods, but only once		// $.each doesn't work ?		for( var i in jQuery.fn) {			// closure to preserve loop iterator in scope			(function(){				var name = i;				// create dummy method				objectCache[name] = function(){					// create method data object					var data = {						method: name,						arguments: []					};					// collect arguments					$.each(arguments, function(k, v){						data.arguments.push(v);					});					// push data into stack					this.stack.push(data);					// preserve chain					return this;				}			})();		}		/**		 * Fetches results from phpQuery.		 * 		 * @param {Function} callback	Optional. Turns on async request.		 * First parameter for callback is usually an JSON array of mathed elements. Use $(result) to append it to DOM.		 * It can also be a boolean value or string, depending on last method called.		 */		objectCache.client = function(success, error){//			console.log(this.stack.toSource());//			success = success || function(){//				return $result;//			};			$.ajax({				type: 'POST',				data: {data: $.toJSON(this.stack)},				async: false,				// jQuery.server.config ???				url: jQuery.serverConfig.url,//				success: function(response){//					var $result = jQuery();//					$.each(response, function(v) {//						$result.add(v);//					})//					success.call(null, $result);//				},//				success: success,				success: function(response){					if (options['dataType'] == 'json')						response = $.parseJSON(response);					success(response);				},				error: error			})		}		// replace orginal method with generated method using cache (lazy-load)		jQuery.server = function(options){			// clone cache object			var myCache = jQuery.extend({}, objectCache);			myCache.stack = [options];			return myCache;		}		// returen result from new method (only done for first call)		return jQuery.server(options);	}});// toJSON by Mark Gibsonif (typeof $.toJSON == 'undefined') {	(function ($) {	    var m = {	            '\b': '\\b',	            '\t': '\\t',	            '\n': '\\n',	            '\f': '\\f',	            '\r': '\\r',	            '"' : '\\"',	            '\\': '\\\\'	        },	        s = {	            'array': function (x) {	                var a = ['['], b, f, i, l = x.length, v;	                for (i = 0; i < l; i += 1) {	                    v = x[i];	                    f = s[typeof v];	                    if (f) {	                        v = f(v);	                        if (typeof v == 'string') {	                            if (b) {	                                a[a.length] = ',';	                            }	                            a[a.length] = v;	                            b = true;	                        }	                    }	                }	                a[a.length] = ']';	                return a.join('');	            },	            'boolean': function (x) {	                return String(x);	            },	            'null': function (x) {	                return "null";	            },	            'number': function (x) {	                return isFinite(x) ? String(x) : 'null';	            },	            'object': function (x) {	                if (x) {	                    if (x instanceof Array) {	                        return s.array(x);	                    }	                    var a = ['{'], b, f, i, v;	                    for (i in x) {	                        v = x[i];	                        f = s[typeof v];	                        if (f) {	                            v = f(v);	                            if (typeof v == 'string') {	                                if (b) {	                                    a[a.length] = ',';	                                }	                                a.push(s.string(i), ':', v);	                                b = true;	                            }	                        }	                    }	                    a[a.length] = '}';	                    return a.join('');	                }	                return 'null';	            },	            'string': function (x) {	                if (/["\\\x00-\x1f]/.test(x)) {	                    x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {	                        var c = m[b];	                        if (c) {	                            return c;	                        }	                        c = b.charCodeAt();	                        return '\\u00' +	                            Math.floor(c / 16).toString(16) +	                            (c % 16).toString(16);	                    });	                }	                return '"' + x + '"';	            }	        };			$.toJSON = function(v) {			var f = isNaN(v) ? s[typeof v] : s['number'];			if (f) return f(v);		};				$.parseJSON = function(v, safe) {            if (JSON)                return JSON.parse(v);			if (safe === undefined)                safe = $.parseJSON.safe;			if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))				return undefined;			return eval('('+v+')');		};				$.parseJSON.safe = false;		})(jQuery);}
 |