X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=js%2Fcrm.ajax.js;h=3ee5394097030ed6f75b0043d9036826edd986bb;hb=da8f0cf5b79bdf01e67fb96e5aa9120594ac5fc0;hp=29b011530e10963382a8b369a5c14b270fe4304d;hpb=ebda93be0f6455153d39b373426d997021401927;p=civicrm-core.git diff --git a/js/crm.ajax.js b/js/crm.ajax.js index 29b011530e..3ee5394097 100644 --- a/js/crm.ajax.js +++ b/js/crm.ajax.js @@ -12,10 +12,11 @@ var tplURL; CRM.url = function (path, query, mode) { if (typeof path === 'object') { - return tplURL = path; + tplURL = path; + return path; } if (!tplURL) { - console && console.log && console.log('Warning: CRM.url called before initialization'); + CRM.console('error', 'Error: CRM.url called before initialization'); } if (!mode) { mode = CRM.config && CRM.config.isFrontend ? 'front' : 'back'; @@ -36,10 +37,10 @@ return url; }; - // Backwards compatible with jQuery fn + // @deprecated $.extend ({'crmURL': function (p, params) { - console && console.log && console.log('Calling crmURL from jQuery is deprecated. Please use CRM.url() instead.'); + CRM.console('warn', 'Calling crmURL from jQuery is deprecated. Please use CRM.url() instead.'); return CRM.url(p, params); } }); @@ -156,7 +157,7 @@ * @deprecated */ $.fn.crmAPI = function(entity, action, params, options) { - console && console.log && console.log('Calling crmAPI from jQuery is deprecated. Please use CRM.api() instead.'); + CRM.console('warn', 'Calling crmAPI from jQuery is deprecated. Please use CRM.api3() instead.'); return CRM.api.call(this, entity, action, params, options); }; @@ -204,10 +205,19 @@ this.options.url = this.options.url || document.location.href; this._originalUrl = this.options.url; }, - _onFailure: function(data) { - this.options.block && this.element.unblock(); + _onFailure: function(data, status) { + var msg, title = ts('Network Error'); + if (this.options.block) this.element.unblock(); this.element.trigger('crmAjaxFail', data); - CRM.alert(ts('Unable to reach the server. Please refresh this page in your browser and try again.'), ts('Network Error'), 'error'); + switch (status) { + case 'Forbidden': + title = ts('Access Denied'); + msg = ts('Ensure you are still logged in and have permission to access this feature.'); + break; + default: + msg = ts('Unable to reach the server. Please refresh this page in your browser and try again.'); + } + CRM.alert(msg, title, 'error'); }, _onError: function(data) { this.element.attr('data-unsaved-changes', 'false').trigger('crmAjaxError', data); @@ -230,7 +240,7 @@ _handleOrderLinks: function() { var that = this; $('a.crm-weight-arrow', that.element).click(function(e) { - that.options.block && that.element.block(); + if (that.options.block) that.element.block(); $.getJSON(that._formatUrl(this.href)).done(function() { that.refresh(); }); @@ -241,13 +251,13 @@ refresh: function() { var that = this; var url = this._formatUrl(this.options.url); - this.options.crmForm && $('form', this.element).ajaxFormUnbind(); + if (this.options.crmForm) $('form', this.element).ajaxFormUnbind(); if (this._originalContent === null) { this._originalContent = this.element.contents().detach(); } - this.options.block && this.element.block(); + if (this.options.block) this.element.block(); $.getJSON(url, function(data) { - that.options.block && that.element.unblock(); + if (that.options.block) that.element.unblock(); if (!$.isPlainObject(data)) { that._onFailure(data); return; @@ -257,14 +267,14 @@ return; } data.url = url; - that.element.trigger('crmBeforeLoad', data); + that.element.trigger('crmUnload').trigger('crmBeforeLoad', data); that._beforeRemovingContent(); that.element.html(data.content); that._handleOrderLinks(); that.element.trigger('crmLoad', data); - that.options.crmForm && that.element.trigger('crmFormLoad', data); - }).fail(function() { - that._onFailure(); + if (that.options.crmForm) that.element.trigger('crmFormLoad', data); + }).fail(function(data, msg, status) { + that._onFailure(data, status); }); }, // Perform any cleanup needed before removing/replacing content @@ -277,10 +287,10 @@ } }); } - this.options.crmForm && $('form', this.element).ajaxFormUnbind(); + if (this.options.crmForm) $('form', this.element).ajaxFormUnbind(); }, _destroy: function() { - this.element.removeClass('crm-ajax-container'); + this.element.removeClass('crm-ajax-container').trigger('crmUnload'); this._beforeRemovingContent(); if (this._originalContent !== null) { this.element.empty().append(this._originalContent); @@ -303,7 +313,7 @@ height: '75%' }; } - options && $.extend(true, settings, options); + if (options) $.extend(true, settings, options); settings.url = url; // Create new dialog if (settings.dialog) { @@ -311,6 +321,18 @@ if (typeof settings.dialog.height === 'string' && settings.dialog.height.indexOf('%') > 0) { settings.dialog.height = parseInt($(window).height() * (parseFloat(settings.dialog.height)/100), 10); } + // Increase percent width on small screens + if (typeof settings.dialog.width === 'string' && settings.dialog.width.indexOf('%') > 0) { + var screenWidth = $(window).width(), + percentage = parseInt(settings.dialog.width.replace('%', ''), 10), + gap = 100-percentage; + if (screenWidth < 701) { + settings.dialog.width = '100%'; + } + else if (screenWidth < 1400) { + settings.dialog.width = '' + parseInt(percentage+gap-((screenWidth - 700)/7*(gap)/100), 10) + '%'; + } + } $('
' + ts('Loading') + '...
').dialog(settings.dialog); $(settings.target) .on('dialogclose', function() { @@ -351,12 +373,12 @@ validate: true, refreshAction: ['next_new', 'submit_savenext', 'upload_new'], cancelButton: '.cancel', - openInline: 'a.open-inline, a.button, a.action-item', + openInline: 'a.open-inline, a.button, a.action-item, a.open-inline-noreturn', onCancel: function(event) {} } }; // Move options that belong to crmForm. Others will be passed through to crmSnippet - options && $.each(options, function(key, value) { + if (options) $.each(options, function(key, value) { if (typeof(settings.crmForm[key]) !== 'undefined') { settings.crmForm[key] = value; } @@ -382,7 +404,7 @@ } } - widget.data('uiDialog') && widget.on('dialogbeforeclose', function(e) { + if (widget.data('uiDialog')) widget.on('dialogbeforeclose', function(e) { // CRM-14353 - Warn unsaved changes if user clicks close button or presses "esc" if (e.originalEvent) { cancelAction(); @@ -392,7 +414,7 @@ widget.on('crmFormLoad.crmForm', function(event, data) { var $el = $(this).attr('data-unsaved-changes', 'false'), settings = $el.crmSnippet('option', 'crmForm'); - settings.cancelButton && $(settings.cancelButton, this).click(function(e) { + if (settings.cancelButton) $(settings.cancelButton, this).click(function(e) { e.preventDefault(); var returnVal = settings.onCancel.call($el, e); if (returnVal !== false) { @@ -430,7 +452,7 @@ } } else { - $el.crmSnippet('option', 'block') && $el.unblock(); + if ($el.crmSnippet('option', 'block')) $el.unblock(); response.url = data.url; $el.html(response.content).trigger('crmLoad', response).trigger('crmFormLoad', response); if (response.status === 'form_error') { @@ -445,7 +467,7 @@ beforeSerialize: function(form, options) { if (window.CKEDITOR && window.CKEDITOR.instances) { $.each(CKEDITOR.instances, function() { - this.updateElement && this.updateElement(); + if (this.updateElement) this.updateElement(); }); } if (window.tinyMCE && tinyMCE.editors) { @@ -456,15 +478,19 @@ }, beforeSubmit: function(submission) { $.each(formErrors, function() { - this && this.close && this.close(); + if (this && this.close) this.close(); }); - $el.crmSnippet('option', 'block') && $el.block(); + if ($el.crmSnippet('option', 'block')) $el.block(); $el.trigger('crmFormSubmit', submission); } }, settings.ajaxForm)); if (settings.openInline) { settings.autoClose = $el.crmSnippet('isOriginalUrl'); $(settings.openInline, this).not(exclude + ', .crm-popup').click(function(event) { + if ($(this).hasClass('open-inline-noreturn')) { + // Force reset of original url + $el.data('civiCrmSnippet')._originalUrl = $(this).attr('href'); + } $el.crmSnippet('option', 'url', $(this).attr('href')).crmSnippet('refresh'); return false; }); @@ -481,19 +507,19 @@ if (!identifier || identifier === '#' || $.inArray(identifier, added) < 0) { var $icon = $el.find('.icon'), button = {'data-identifier': identifier, text: label, click: function() { - $el.click(); + $el[0].click(); }}; if ($icon.length) { button.icons = {primary: $icon.attr('class')}; } else { - var action = $el.hasClass('cancel') ? 'close' : (identifier.substr(identifier.length-4) === '_new' ? 'plus' : 'check'); + var action = $el.attr('crm-icon') || ($el.hasClass('cancel') ? 'close' : 'check'); button.icons = {primary: 'ui-icon-' + action}; } buttons.push(button); added.push(identifier); } // display:none causes the form to not submit when pressing "enter" - $el.parents(buttonContainers).css({height: 0, padding: 0, margin: 0, overflow: 'hidden'}); + $el.parents(buttonContainers).css({height: 0, padding: 0, margin: 0, overflow: 'hidden'}).find('.crm-button-icon').hide(); }); $el.dialog('option', 'buttons', buttons); } @@ -554,7 +580,7 @@ if ($table.length && $.fn.DataTable.fnIsDataTable($table[0]) && $table.dataTable().fnSettings().sAjaxSource) { // Refresh ALL datatables - needed for contact relationship tab $.each($.fn.dataTable.fnTables(), function() { - $(this).dataTable().fnSettings().sAjaxSource && $(this).unblock().dataTable().fnDraw(); + if ($(this).dataTable().fnSettings().sAjaxSource) $(this).unblock().dataTable().fnDraw(); }); } // Otherwise refresh the nearest crmSnippet