/jssource/src_files/include/javascript/ajaxUI.js
https://github.com/BarnetikKoop/SuiteCRM · JavaScript · 392 lines · 294 code · 31 blank · 67 comment · 89 complexity · e086c97c6e3f8a59d31bceb9c92f1b9e MD5 · raw file
- /*********************************************************************************
- * SugarCRM Community Edition is a customer relationship management program developed by
- * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
- * SuiteCRM is an extension to SugarCRM Community Edition developed by Salesagility Ltd.
- * Copyright (C) 2011 - 2014 Salesagility Ltd.
- *
- * This program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU Affero General Public License version 3 as published by the
- * Free Software Foundation with the addition of the following permission added
- * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
- * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
- * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Affero General Public License along with
- * this program; if not, see http://www.gnu.org/licenses or write to the Free
- * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- *
- * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
- * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
- *
- * The interactive user interfaces in modified source and object code versions
- * of this program must display Appropriate Legal Notices, as required under
- * Section 5 of the GNU Affero General Public License version 3.
- *
- * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
- * these Appropriate Legal Notices must retain the display of the "Powered by
- * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
- * reasonably feasible for technical reasons, the Appropriate Legal Notices must
- * display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM".
- ********************************************************************************/
- SUGAR.ajaxUI = {
- loadingWindow : false,
- callback : function(o)
- {
- var cont;
- if (typeof window.onbeforeunload == "function")
- window.onbeforeunload = null;
- scroll(0,0);
- try{
- var r = YAHOO.lang.JSON.parse(o.responseText);
- cont = r.content;
- if (r.title)
- {
- document.title = html_entity_decode(r.title);
- }
- if (r.action)
- {
- action_sugar_grp1 = r.action;
- }
- if (r.favicon)
- {
- SUGAR.ajaxUI.setFavicon(r.favicon);
- }
- var c = document.getElementById("content");
- // Bug #49205 : Subpanels fail to load when selecting subpanel tab
- // hide content of placeholder before apply new one
- // @see SUGAR.util.evalScript
- c.style.visibility = 'hidden';
- c.innerHTML = cont;
- SUGAR.util.evalScript(cont);
- // all javascripts have been processed - show content of placeholder
- c.style.visibility = 'visible';
- if ( r.moduleList)
- {
- SUGAR.themes.setModuleTabs(r.moduleList);
- }
- // set response time from ajax response
- if(typeof(r.responseTime) != 'undefined'){
- var rt = $("#responseTime");
- if(rt.length > 0){
- rt.html(rt.html().replace(/[\d]+\.[\d]+/, r.responseTime));
- }
- else if(typeof(logoStats) != "undefined"){
- $("#logo").attr("title", logoStats.replace(/[\d]+\.[\d]+/, r.responseTime)).tipTip({maxWidth: "auto", edgeOffset: 10});
- }
- }
- // Bug #49205 : Subpanels fail to load when selecting subpanel tab
- // hide ajax loading message after all scripts are processed
- SUGAR.ajaxUI.hideLoadingPanel();
- } catch (e){
- // Bug #49205 : Subpanels fail to load when selecting subpanel tab
- // hide ajax loading message after all scripts are processed
- SUGAR.ajaxUI.hideLoadingPanel();
- SUGAR.ajaxUI.showErrorMessage(o.responseText);
- }
- SUGAR_callsInProgress--;
- },
- showErrorMessage : function(errorMessage)
- {
- if (!SUGAR.ajaxUI.errorPanel) {
- SUGAR.ajaxUI.errorPanel = new YAHOO.widget.Panel("ajaxUIErrorPanel", {
- modal: false,
- visible: true,
- constraintoviewport: true,
- width : "800px",
- height : "600px",
- close: true
- });
- }
- var panel = SUGAR.ajaxUI.errorPanel;
- panel.setHeader(SUGAR.language.get('app_strings','ERR_AJAX_LOAD')) ;
- panel.setBody('<iframe id="ajaxErrorFrame" style="width:780px;height:550px;border:none;marginheight="0" marginwidth="0" frameborder="0""></iframe>');
- panel.setFooter(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FOOTER')) ;
- panel.render(document.body);
- SUGAR.util.doWhen(
- function(){
- var f = document.getElementById("ajaxErrorFrame");
- return f != null && f.contentWindow != null && f.contentWindow.document != null;
- }, function(){
- document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML = errorMessage;
- window.setTimeout('throw "AjaxUI error parsing response"', 300);
- });
- //fire off a delayed check to make sure error message was rendered.
- SUGAR.ajaxUI.errorMessage = errorMessage;
- window.setTimeout('if((typeof(document.getElementById("ajaxErrorFrame")) == "undefined" || typeof(document.getElementById("ajaxErrorFrame")) == null || document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML == "")){document.getElementById("ajaxErrorFrame").contentWindow.document.body.innerHTML=SUGAR.ajaxUI.errorMessage;}',3000);
- panel.show();
- panel.center();
- throw "AjaxUI error parsing response";
- },
- canAjaxLoadModule : function(module)
- {
- var checkLS = /&LicState=check/.exec(window.location.search);
- // Return false if ajax ui is completely disabled, or if license state is set to check
- if( checkLS || (typeof(SUGAR.config.disableAjaxUI) != 'undefined' && SUGAR.config.disableAjaxUI == true)){
- return false;
- }
-
- var bannedModules = SUGAR.config.stockAjaxBannedModules;
- //If banned modules isn't there, we are probably on a page that isn't ajaxUI compatible
- if (typeof(bannedModules) == 'undefined')
- return false;
- // Mechanism to allow for overriding or adding to this list
- if(typeof(SUGAR.config.addAjaxBannedModules) != 'undefined'){
- bannedModules.concat(SUGAR.config.addAjaxBannedModules);
- }
- if(typeof(SUGAR.config.overrideAjaxBannedModules) != 'undefined'){
- bannedModules = SUGAR.config.overrideAjaxBannedModules;
- }
-
- return SUGAR.util.arrayIndexOf(bannedModules, module) == -1;
- },
- loadContent : function(url, params)
- {
- if(YAHOO.lang.trim(url) != "")
- {
- //Don't ajax load certain modules
- var mRegex = /module=([^&]*)/.exec(url);
- var module = mRegex ? mRegex[1] : false;
- if (module && SUGAR.ajaxUI.canAjaxLoadModule(module))
- {
- YAHOO.util.History.navigate('ajaxUILoc', url);
- } else {
- window.location = url;
- }
- }
- },
- go : function(url)
- {
- if(YAHOO.lang.trim(url) != "")
- {
- var con = YAHOO.util.Connect, ui = SUGAR.ajaxUI;
- if (ui.lastURL == url)
- return;
- var inAjaxUI = /action=ajaxui/.exec(window.location);
- if (typeof (window.onbeforeunload) == "function" && window.onbeforeunload())
- {
- //If there is an unload function, we need to check it ourselves
- if (!confirm(window.onbeforeunload()))
- {
- if (!inAjaxUI)
- {
- //User doesn't want to navigate
- window.location.hash = "";
- }
- else
- {
- YAHOO.util.History.navigate('ajaxUILoc', ui.lastURL);
- }
- return;
- }
- window.onbeforeunload = null;
- }
- if (ui.lastCall && con.isCallInProgress(ui.lastCall)) {
- con.abort(ui.lastCall);
- }
- var mRegex = /module=([^&]*)/.exec(url);
- var module = mRegex ? mRegex[1] : false;
- //If we can't ajax load the module (blacklisted), set the URL directly.
- if (!ui.canAjaxLoadModule(module)) {
- window.location = url;
- return;
- }
- ui.lastURL = url;
- ui.cleanGlobals();
- var loadLanguageJS = '';
- if(module && typeof(SUGAR.language.languages[module]) == 'undefined'){
- loadLanguageJS = '&loadLanguageJS=1';
- }
- if (!inAjaxUI) {
- //If we aren't in the ajaxUI yet, we need to reload the page to get setup properly
- if (!SUGAR.isIE)
- window.location.replace("index.php?action=ajaxui#ajaxUILoc=" + encodeURIComponent(url));
- else {
- //if we use replace under IE, it will cache the page as the replaced version and thus no longer load the previous page.
- window.location.hash = "#";
- window.location.assign("index.php?action=ajaxui#ajaxUILoc=" + encodeURIComponent(url));
- }
- }
- else {
- SUGAR_callsInProgress++;
- SUGAR.ajaxUI.showLoadingPanel();
- ui.lastCall = YAHOO.util.Connect.asyncRequest('GET', url + '&ajax_load=1' + loadLanguageJS, {
- success: SUGAR.ajaxUI.callback,
- failure: function(){
- SUGAR_callsInProgress--;
- SUGAR.ajaxUI.hideLoadingPanel();
- SUGAR.ajaxUI.showErrorMessage(SUGAR.language.get('app_strings','ERR_AJAX_LOAD_FAILURE'));
- }
- });
- }
- }
- },
- submitForm : function(formname, params)
- {
- var con = YAHOO.util.Connect, SA = SUGAR.ajaxUI;
- if (SA.lastCall && con.isCallInProgress(SA.lastCall)) {
- con.abort(SA.lastCall);
- }
- //Reset the EmailAddressWidget before loading a new page
- SA.cleanGlobals();
- //Don't ajax load certain modules
- var form = YAHOO.util.Dom.get(formname) || document.forms[formname];
- if (SA.canAjaxLoadModule(form.module.value)
- //Do not try to submit a form that contains a file input via ajax.
- && typeof(YAHOO.util.Selector.query("input[type=file]", form)[0]) == "undefined"
- //Do not try to ajax submit a form if the ajaxUI is not initialized
- && /action=ajaxui/.exec(window.location))
- {
- var string = con.setForm(form);
- var baseUrl = "index.php?action=ajaxui#ajaxUILoc=";
- SA.lastURL = "";
- //Use POST for long forms and GET for short forms (GET allow resubmit via reload)
- if(string.length > 200)
- {
- SUGAR.ajaxUI.showLoadingPanel();
- form.onsubmit = function(){ return true; };
- form.submit();
- } else {
- con.resetFormState();
- window.location = baseUrl + encodeURIComponent("index.php?" + string);
- }
- return true;
- } else {
- if( typeof(YAHOO.util.Selector.query("input[type=submit]", form)[0]) != "undefined"
- && YAHOO.util.Selector.query("input[type=submit]", form)[0].value == "Save")
- {
- ajaxStatus.showStatus(SUGAR.language.get('app_strings', 'LBL_SAVING'));
- }
- form.submit();
- return false;
- }
- },
- cleanGlobals : function()
- {
- sqs_objects = {};
- QSProcessedFieldsArray = {};
- collection = {};
- //Reset the EmailAddressWidget before loading a new page
- if (SUGAR.EmailAddressWidget){
- SUGAR.EmailAddressWidget.instances = {};
- SUGAR.EmailAddressWidget.count = {};
- }
- YAHOO.util.Event.removeListener(window, 'resize');
- //Hide any connector dialogs
- if(typeof(dialog) != 'undefined' && typeof(dialog.destroy) == 'function'){
- dialog.destroy();
- delete dialog;
- }
- },
- firstLoad : function()
- {
- //Setup Browser History
- var url = YAHOO.util.History.getBookmarkedState('ajaxUILoc');
- var aRegex = /action=([^&#]*)/.exec(window.location);
- var action = aRegex ? aRegex[1] : false;
- var mRegex = /module=([^&#]*)/.exec(window.location);
- var module = mRegex ? mRegex[1] : false;
- if (module != "ModuleBuilder")
- {
- var go = url != null || action == "ajaxui";
- url = url ? url : 'index.php?module=Home&action=index';
- YAHOO.util.History.register('ajaxUILoc', url, SUGAR.ajaxUI.go);
- YAHOO.util.History.initialize("ajaxUI-history-field", "ajaxUI-history-iframe");
- SUGAR.ajaxUI.hist_loaded = true;
- if (go)
- SUGAR.ajaxUI.go(url);
- }
- SUGAR_callsInProgress--;
- },
- print: function()
- {
- var url = YAHOO.util.History.getBookmarkedState('ajaxUILoc');
- SUGAR.util.openWindow(
- url + '&print=true',
- 'printwin',
- 'menubar=1,status=0,resizable=1,scrollbars=1,toolbar=0,location=1'
- );
- },
- showLoadingPanel: function()
- {
- if (!SUGAR.ajaxUI.loadingPanel)
- {
- SUGAR.ajaxUI.loadingPanel = new YAHOO.widget.Panel("ajaxloading",
- {
- width:"240px",
- fixedcenter:true,
- close:false,
- draggable:false,
- constraintoviewport:false,
- modal:true,
- visible:false
- });
- SUGAR.ajaxUI.loadingPanel.setBody('<div id="loadingPage" align="center" style="vertical-align:middle;"><img src="' + SUGAR.themes.loading_image + '" align="absmiddle" /> <b>' + SUGAR.language.get('app_strings', 'LBL_LOADING_PAGE') +'</b></div>');
- SUGAR.ajaxUI.loadingPanel.render(document.body);
- }
- if (document.getElementById('ajaxloading_c'))
- document.getElementById('ajaxloading_c').style.display = '';
-
- SUGAR.ajaxUI.loadingPanel.show();
- },
- hideLoadingPanel: function()
- {
- SUGAR.ajaxUI.loadingPanel.hide();
-
- if (document.getElementById('ajaxloading_c'))
- document.getElementById('ajaxloading_c').style.display = 'none';
- },
- setFavicon: function(data)
- {
- var head = document.getElementsByTagName("head")[0];
- // first remove all rel="icon" links as long as updating an existing one
- // could take no effect
- var links = head.getElementsByTagName("link");
- var re = /\bicon\b/i;
- for (var i = 0; i < links.length; i++) {
- if (re.test(links[i].rel))
- {
- head.removeChild(links[i]);
- }
- }
- var link = document.createElement("link");
- link.href = data.url;
- // type attribute is important for Google Chrome browser
- link.type = data.type;
- link.rel = "icon";
- head.appendChild(link);
- }
- };