# HG changeset patch # User clebeaupin # Date 1271410520 -7200 # Node ID 2d663efe5d81204ec6594e39b768bb778331f319 # Parent 71f4ec652fd85f2f351b336568aeacd0358b8747 Update data dump diff -r 71f4ec652fd8 -r 2d663efe5d81 web/thdProject/web/js/uc.utils.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/thdProject/web/js/uc.utils.js Fri Apr 16 11:35:20 2010 +0200 @@ -0,0 +1,173 @@ +var uc = uc || {}; +uc.utils = uc.utils || {}; + +uc.utils.centeredContainer = function(html_container) { + this.html_container = html_container; +} + +uc.utils.centeredContainer.currentContainer = null; + +uc.utils.centeredContainer.centerCurrent = function() { + // Center popup in the browser window + if (uc.utils.centeredContainer.currentContainer == null) return; + var jq_container = uc.utils.centeredContainer.currentContainer; + var jq_window = jQuery(window); + var popup_x = jq_window.scrollLeft() + ((jq_window.width() - jq_container.width()) / 2); + var popup_y = jq_window.scrollTop() + ((jq_window.height() - jq_container.height()) / 2); + jq_container.css('top', popup_y); + jq_container.css('left', popup_x); +} + +uc.utils.centeredContainer.showCurrent = function() { + if (uc.utils.centeredContainer.currentContainer == null) return; + var jq_container = uc.utils.centeredContainer.currentContainer; + var jq_window = jQuery(window); + jq_window.bind("resize", uc.utils.centeredContainer.centerCurrent); + jq_window.bind("scroll", uc.utils.centeredContainer.centerCurrent); + uc.utils.centeredContainer.centerCurrent(); + jq_container.show(); +} + +uc.utils.centeredContainer.hideCurrent = function() { + if (uc.utils.centeredContainer.currentContainer == null) return; + var jq_container = uc.utils.centeredContainer.currentContainer; + var jq_window = jQuery(window); + jq_container.hide(); + jq_container.remove(); + jq_window.unbind("resize", uc.utils.centeredContainer.centerCurrent); + jq_window.unbind("scroll", uc.utils.centeredContainer.centerCurrent); +} + +uc.utils.centeredContainer.prototype = { + show: function() { + this.hide(); + var jq_body = jQuery("body"); + var jq_container = jQuery(this.html_container); + jq_container.hide(); + jq_container.css('position', 'absolute'); + jq_container.css('display', 'block'); + jq_body.append(jq_container); + uc.utils.centeredContainer.currentContainer = jq_container; + uc.utils.centeredContainer.showCurrent(); + }, + hide: function() { + uc.utils.centeredContainer.hideCurrent(); + } +} + +uc.utils.showModalWrapper = function() { + if (jQuery('#modal-wrapper').length > 0) return false; + var jq_body = jQuery("body"); + var jq_modal_wrapper = jQuery(''); + jq_modal_wrapper.height(jq_body.height()); + jq_body.append(jq_modal_wrapper); +} + +uc.utils.hideModalWrapper = function() { + jQuery('#modal-wrapper').remove(); +} + +uc.utils.showLoader = function() { + var loader = new uc.utils.centeredContainer('') + loader.show(); +} + +uc.utils.hideLoader = function() { + jQuery('#loader').remove(); +} + +uc.utils.executeServerJS = function(http_url, http_data, http_method, complete_callback, history) { + if (http_method == null) http_method = 'GET'; + if (history == null) history = false; + + var ajax_callback = function() { + if (complete_callback != null) complete_callback(); + + if (history) { + var base_url = document.location.href.split('#')[0]; + var path_url = document.location.pathname; + + if (http_url.indexOf(path_url) == 0) { + document.location.href = base_url + '#ajax/' + http_url.slice(path_url.length+1); + } + } + + if (http_method == 'GET') { + try { + pageTracker._trackPageview(http_url); + } catch(e) {} + } + } + + if (http_method == 'POST') uc.utils.showModalWrapper(); + uc.utils.showLoader(); + + jQuery.ajax({ + url: http_url, + type: http_method, + data: http_data, + beforeSend: function(xhr) {xhr.setRequestHeader("Accept", "application/javascript");}, + complete: function (XMLHttpRequest, textStatus) {uc.utils.hideLoader(); ajax_callback();}, + success: function (data, textStatus) {}, + dataType: "script" + }); +} + +uc.utils.ajaxifyLink = function(jq_selector, http_method, complete_callback, history) { + jq_selector.removeClass('ajax').removeClass('ajax-post'); + jq_selector.parents('.ajax').removeClass('ajax').removeClass('ajax-post'); + jq_selector.each(function () { + var jq_this = jQuery(this); + var ajax_url = jq_this.attr('href'); + if (ajax_url.indexOf('javascript:') == 0) return false; + jq_this.attr('href', 'javascript:void(0);'); + jq_this.removeClass('ajax'); + jq_this.click(function() { + uc.common.ajaxHistoryUpdate = true; + uc.utils.executeServerJS(ajax_url, {}, http_method, complete_callback, history); + return false; + }); + }); +} + +uc.utils.ajaxifyForm = function(jq_selector, complete_callback) { + jq_selector.removeClass('ajax'); + + jq_selector.submit(function() { + var jq_this = jQuery(this); + var ajax_url = jq_this.attr('action'); + var ajax_data = {}; + + // Extract data of form + jQuery('textarea, input:text, input:password, input:hidden, select, input:checked, input:selected', jq_this).each(function () { + var jq_input = jQuery(this); + ajax_data[jq_input.attr('name')] = jq_input.val(); + }); + + uc.utils.executeServerJS(ajax_url, ajax_data, 'POST', complete_callback); + + // Do not process normal http request + return false; + }); +} + +uc.utils.buildSelectList = function(jq_selector) { + // Wait 1 second to make sure css is loaded + window.setTimeout(function() { + jq_selector.each(function() { + var jq_select = jQuery(this); + + // Check for an existing selectedItem + var jq_selected_item = jQuery('li.selected', jq_select); + if (jq_selected_item.length == 1) { + // Scroll to this item + var top = jq_selected_item.position().top; + if (top > 200) jq_select.scrollTop(top-200); + } + + jQuery('li a', jq_select).click(function() { + jQuery('li.selected', jq_select).toggleClass('selected'); + jQuery(this).parents('li').toggleClass('selected'); + }); + });}, 1000); +} \ No newline at end of file