var that = this;
var url = this._formatUrl(this.options.url);
if (this.options.crmForm) $('form', this.element).ajaxFormUnbind();
- if (this._originalContent === null) {
- this._originalContent = this.element.contents().detach();
- }
if (this.options.block) this.element.block();
$.getJSON(url, function(data) {
if (that.options.block) that.element.unblock();
// Perform any cleanup needed before removing/replacing content
_beforeRemovingContent: function() {
var that = this;
+ // Save original content to be restored if widget is destroyed
+ if (this._originalContent === null) {
+ $('.blockUI', this.element).remove();
+ this._originalContent = this.element.contents().detach();
+ }
if (window.tinyMCE && tinyMCE.editors) {
$.each(tinyMCE.editors, function(k) {
if ($.contains(that.element[0], this.getElement())) {
CRM.loadPage = function(url, options) {
var settings = {
target: '#crm-ajax-dialog-' + (dialogCount++),
- dialog: false
+ dialog: (options && options.target) ? false : {}
};
- if (!options || !options.target) {
- settings.dialog = {
- modal: true,
- width: '65%',
- height: '75%'
- };
- }
if (options) $.extend(true, settings, options);
settings.url = url;
// Create new dialog
if (settings.dialog) {
- // HACK: jQuery UI doesn't support relative height
- 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.dialog = CRM.utils.adjustDialogDefaults(settings.dialog);
+ $('<div id="' + settings.target.substring(1) + '"></div>').dialog(settings.dialog);
+ }
+ if ($(settings.target).data('uiDialog')) {
$(settings.target)
.on('dialogclose', function() {
- if ($(this).attr('data-unsaved-changes') !== 'true') {
+ if (settings.dialog && $(this).attr('data-unsaved-changes') !== 'true') {
$(this).crmSnippet('destroy').dialog('destroy').remove();
}
})
if (e.target === $(settings.target)[0] && data && !settings.dialog.title && data.title) {
$(this).dialog('option', 'title', data.title);
}
- // Adjust height to fit content (small delay to allow elements to render)
- window.setTimeout(function() {
- var currentHeight = $(settings.target).parent().outerHeight(),
- padding = currentHeight - $(settings.target).height(),
- newHeight = $(settings.target).prop('scrollHeight') + padding,
- menuHeight = $('#civicrm-menu').outerHeight(),
- maxHeight = $(window).height() - menuHeight;
- newHeight = newHeight > maxHeight ? maxHeight : newHeight;
- if (newHeight > (currentHeight + 15)) {
- $(settings.target).dialog('option', {
- position: {my: 'center', at: 'center center+' + (menuHeight / 2), of: window},
- height: newHeight
- });
- }
- }, 500);
});
}
$(settings.target).crmSnippet(settings).crmSnippet('refresh');
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) {}
}
};
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;
});
// Destroy old unsaved dialog
.on('dialogcreate', function(e) {
$('.ui-dialog-content.crm-ajax-container:hidden[data-unsaved-changes=true]').crmSnippet('destroy').dialog('destroy').remove();
+ })
+ // Auto-resize dialogs when loading content
+ .on('crmLoad dialogopen', 'div.ui-dialog.ui-resizable.crm-container', function(e) {
+ var
+ $wrapper = $(this),
+ $dialog = $wrapper.children('.ui-dialog-content');
+ // small delay to allow contents to render
+ window.setTimeout(function() {
+ var currentHeight = $wrapper.outerHeight(),
+ padding = currentHeight - $dialog.height(),
+ newHeight = $dialog.prop('scrollHeight') + padding,
+ menuHeight = $('#civicrm-menu').outerHeight(),
+ maxHeight = $(window).height() - menuHeight;
+ newHeight = newHeight > maxHeight ? maxHeight : newHeight;
+ if (newHeight > (currentHeight + 15)) {
+ $dialog.dialog('option', {
+ position: {my: 'center', at: 'center center+' + (menuHeight / 2), of: window},
+ height: newHeight
+ });
+ }
+ }, 500);
});
});