var shadow;
var shadowUpdated = false;
$(document).bind('refresh', function () {
$('#shadow-inside, #shadow-image').off('click').on('click', function () {
closeShadow();
});
// When some update is done inside the shadow, make shadow aware.
var setShadowUpdated = function () {
shadowUpdated = true;
};
// If users have updated anything, make shadow aware, to prevent accidental
// window closing, and losing of the work.
$('#shadow-item').find('input,select,textarea').bind('change', setShadowUpdated);
// Froala html container.
$('#shadow-item').unbind('froalaChanged').bind('froalaChanged', setShadowUpdated);
$('.shadow-submit').on('click', function () {
if (!($(this).hasClass('shadow-submitted'))) {
$(this).addClass('shadow-submitted');
submitShadow();
}
})
});
// Close the shadow.
function closeShadow() {
// Prevent accidental closing of shadow when there are unsaved changes.
if (!shadowUpdated || confirm('You have unsaved changes. Are you sure you want to close the window?')) {
$('#shadow-outside, .shadow-element').hide();
}
};
/**
* Open a shadow (overlay form) with the specified parameters.
*
* @param stdClass shadowData
*/
function openShadow(shadowData) {
$(document).trigger('shadow', shadow);
shadow = shadowData;
shadowUpdated = false;
if (shadow.widget == undefined) {
shadow.widget = 'tabs';
}
var shadowPath = '/' + ((shadow.node != undefined) ? (shadow.node + '/') : '');
shadowPath += '?shadow=' + JSON.stringify(shadow);
if (shadow.language != undefined) {
shadowPath += '&lang=' + shadow.language;
}
$('#shadow-item').html('').attr('data-rel', shadow.context).load(shadowPath, function () {
if (shadow.callback != undefined) {
shadow.callback();
}
$(document).trigger('refresh');
// Include attached scripts if present.
if (shadow.attach != undefined) {
for (i = 0; i < shadow.attach.length; i++) {
$.getScript(shadow.attach[i]);
}
}
$('.shadow-title').find('a').on('click', function () {
if (!($(this).parent().hasClass('enabled'))) {
$('.enabled').removeClass('enabled');
$(this).parent().addClass('enabled');
$('#shadow-content-' + $(this).attr('data-rel')).addClass('enabled');
}
return false;
});
$(document).trigger('shadow_open');
$(document).trigger('shadow_' + shadow.context);
});
$('#shadow-outside').fadeIn('slow');
};
/**
* Submit a shadow form.
*/
function submitShadow() {
$(document).trigger('shadow_' + shadow.context + '_submit');
var form_items = {};
$('#shadow-outside').find('input, textarea, select').each(function () {
var item_name = $(this).attr('name');
if (form_items[item_name] == undefined) {
form_items[item_name] = [];
}
if ($(this).attr('type') == 'checkbox') {
form_items[item_name].push($(this).is(':checked') ? $(this).val() : '');
} else {
form_items[item_name].push($(this).val());
}
});
var formData = JSON.stringify(form_items);
$(document).trigger('shadow_submit');
action(formData);
};
|