// // $Id: ajax.js 7200 2009-04-07 06:59:18Z zeke $ // jQuery.extend({ ajaxRequest: function(url, params) { params = params || {}; params.method = params.method || 'get'; params.callback = params.callback || {}; params.data = params.data || {}; params.message = params.message || lang.loading; params.caching = params.caching || false; params.hidden = params.hidden || false; params.low_priority = params.low_priority || false; params.force_exec = params.force_exec || false; var QUERIES_LIMIT = 1; if (jQuery.active_queries >= QUERIES_LIMIT) { // if we have queries in the queue, push request to it if (params.low_priority == true) { jQuery.queries_stack.push(function() { jQuery.ajaxRequest(url, params); }); } else { jQuery.queries_stack.unshift(function() { jQuery.ajaxRequest(url, params); }); } return true; } if (params.preload_obj && params.caching) { if (params.preload_obj.data('is_loaded')) { return true; } } // If query is not hidden, display loading box if (params.hidden == false) { var loading_box = $('#ajax_loading_box'); loading_box.html(params.message); loading_box.show(); } if (jQuery.ajax_cache[jQuery.last_hash]) { for (var id in jQuery.ajax_cache[jQuery.last_hash].data.html) { jQuery.ajax_cache[jQuery.last_hash].data.html[id] = $('#' + id).html(); } } var hash = ''; if (params.caching == true) { hash = jQuery.crc32(url + jQuery.param(params.data)); jQuery.last_hash = hash; } if (!hash || !jQuery.ajax_cache[hash]) { url = fn_query_remove(url, 'result_ids'); // Add result IDs to data if (params.result_ids) { params.data.result_ids = params.result_ids; } if (params.caching && params.store_init_content && !jQuery.ajax_cache.init_content) { jQuery.ajax_cache.init_content = {}; if (params.result_ids) { jQuery.ajax_cache.init_content.data = {}; jQuery.ajax_cache.init_content.data.html = {}; var ids = params.result_ids.split(','); for (var k = 0; k < ids.length; k++) { elm = $('#' + ids[k]); if (elm.length) { jQuery.ajax_cache.init_content.data.html[ids[k]] = elm.html(); } } } } if (url) { jQuery.active_queries++; jQuery.ajax({ type: params.method, url: url, dataType: 'json', cache: true, data: params.data, success: function(data, textStatus) { if (params.preload_obj) { if (params.preload_obj.data('is_loaded') && params.caching) { return false; } params.preload_obj.data('is_loaded', true); } if (hash) { // cache response jQuery.ajax_cache[hash] = data; } jQuery.ajaxResponse(data, params); jQuery.active_queries--; if (jQuery.queries_stack.length) { var f = jQuery.queries_stack.shift(); f(); } } }); } } else if (hash && jQuery.ajax_cache[hash]) { jQuery.ajaxResponse(jQuery.ajax_cache[hash], params); } }, ajaxSubmit: function(form, elm) { var callback = 'fn_form_post_' + form.attr('name'); var f_callback = window[callback] || null; if (form.attr('enctype') == 'multipart/form-data' && form.hasClass('cm-ajax')) { if (!$('iframe[name=upload_iframe]').length) { $('').appendTo('body'); $('iframe[name=upload_iframe]').load(function() { eval('var response = ' + $(this).contents().find('body').html()); jQuery.ajaxResponse(response, {callback: f_callback}); }); } if (!$('input[name=is_ajax]', form).length) { form.append(''); } form.attr('target', 'upload_iframe'); jQuery.ajaxRequest('', null); return true; } else { var hash = $(':input', form).serializeArray(); // Send name/value of clicked button hash.push({name: elm.attr('name'), value: elm.val()}); jQuery.ajaxRequest(form.attr('action'), { method: form.attr('method'), data: hash, callback: f_callback }); return false; } }, ajaxResponse: function(response, params) { params = params || {}; params.force_exec = params.force_exec || false; params.callback = params.callback || {}; var regex_all = new RegExp('', 'img'); var regex_one = new RegExp('', 'im'); var matches = []; var match = ''; var elm; var data = response.data || {}; var _hash = ''; if (!jQuery.loaded_scripts) { jQuery.loaded_scripts = []; $('script').each(function() { var _src = $(this).attr('src'); if (_src) { jQuery.loaded_scripts.push(jQuery.getBaseName(_src)); } }) } // Ajax request forces browser to redirect if (data.force_redirection) { jQuery.redirect(data.force_redirection); } // Data returned that should be inserted to DOM if (data.html) { for (var k in data.html) { elm = $('#' + k); if (elm.length != 1) { continue; } matches = data.html[k].match(regex_all); elm.html(matches ? data.html[k].replace(regex_all, '') : data.html[k]); // Display/hide hidden block wrappers if (jQuery.trim(elm.html())) { elm.parents('.hidden.cm-hidden-wrapper').removeClass('hidden'); } else { elm.parents('.cm-hidden-wrapper').addClass('hidden'); } // If returned data contains scripts, execute them if (matches) { for (var i = 0; i < matches.length; i++ ) { // External script if (matches[i].indexOf('src="') != -1) { _src = matches[i].match(/src=\"([\w/.]+)/g); if (_src) { _src = jQuery.getBaseName(_src.toString()); if (jQuery.inArray(_src, jQuery.loaded_scripts) == -1) { jQuery.loaded_scripts.push(jQuery.getBaseName(_src)); $(matches[i]).appendTo('body'); } } } if (matches[i].match(regex_one)[1]) { _hash = jQuery.crc32(matches[i].match(regex_one)[1]); if (!this.eval_cache[_hash] || params.force_exec) { this.eval_cache[_hash] = true; if (window.execScript) { window.execScript(matches[i].match(regex_one)[1]); } else { window.eval(matches[i].match(regex_one)[1]); } } } } } $(".cm-j-tabs", elm).each(function(){ $(this).idTabs(); }); // if returned data contains forms, process them if (data.html[k].indexOf('