var tplURL;
CRM.url = function (path, query, mode) {
if (typeof path === 'object') {
- return tplURL = path;
+ tplURL = path;
+ return path;
}
if (!tplURL) {
CRM.console('error', 'Error: CRM.url called before initialization');
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);
_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();
});
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;
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
}
});
}
- 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);
height: '75%'
};
}
- options && $.extend(true, settings, options);
+ if (options) $.extend(true, settings, options);
settings.url = url;
// Create new dialog
if (settings.dialog) {
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) + '%';
+ }
+ }
$('<div id="'+ settings.target.substring(1) +'"><div class="crm-loading-element">' + ts('Loading') + '...</div></div>').dialog(settings.dialog);
$(settings.target)
.on('dialogclose', function() {
}
};
// 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;
}
}
}
- 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();
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) {
}
}
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') {
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) {
},
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 (!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')};
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