//= require jquery //= require jquery_ujs //= require scrivito_sdk //= require scrivito_editors /* obj.js, patch create & upload */ (function() { var format_date = function(date) { return date.getUTCFullYear().toString() + format_date_number(date.getUTCMonth() + 1) + // Month numbers are starting at 0. format_date_number(date.getUTCDate()) + format_date_number(date.getUTCHours()) + format_date_number(date.getUTCMinutes()) + format_date_number(date.getUTCSeconds()); }; var format_date_number = function(number) { var string = number.toString(); return string.length === 1 ? '0' + string : string; }; var convert_attributes = function(data) { var collected_promises = _.map(data, function(value, field_name) { if (value instanceof Date) { return $.Deferred().resolve([field_name, format_date(value)]); } else if (value instanceof window.File) { return $.Deferred().resolve([field_name, value]); return scrivito.blob.create(value).then(function(value) { return [field_name, value]; }); } else { return $.Deferred().resolve([field_name, value]); } }); return $.when.apply(this, collected_promises).then(function() { return _.object(arguments); }); }; var convert_widget_pool = function(widget_pool) { if(widget_pool) { var conversion_promises = _.map(widget_pool, function(attributes, widget_id) { return convert_attributes(attributes).then(function(attributes) { return [widget_id, attributes]; }); }); return $.when.apply(this, conversion_promises).then(function() { return _.object(arguments); }); } else { return $.Deferred().resolve(widget_pool); } }; var prepare_attributes = function(data) { return convert_widget_pool(data._widget_pool).then(function(widget_pool) { return convert_attributes(data).then(function(attributes) { attributes._widget_pool = widget_pool; return attributes; }); }); }; scrivito.obj.create_original = scrivito.obj.create; scrivito.obj.create = function (data) { var blob; if (data['blob']) { blob = data['blob']; delete data['blob']; } return prepare_attributes(data).then(function(attributes) { var fd, defer, url, base_url = window.location.protocol + '//' + window.location.host + '/__scrivito/'; url = base_url + 'objs'; fd = new FormData(); $.each(attributes, function (key, value) { if (typeof value !== 'undefined') { fd.append('obj[' + key + ']', value); } }); if (typeof blob !== 'undefined') { fd.append('obj[blob]', blob); } defer = $.Deferred(); $.ajax({ url: url, type: 'POST', data: fd, processData: false, contentType: false }) .error(function (xhr, text, error) { scrivito.alert(text); defer.reject(text); }) .success(function (new_data) { defer.resolve(scrivito.obj.create_instance_from_server_data(new_data)); }); return defer.promise(); }); }; }()); (function() { }()); (function() { var original_create_instance = scrivito.child_list_element.create_instance; /* patch the create page command to not create incomprehensible paths */ scrivito.child_list_element.create_instance = function(cms_element) { var ret = original_create_instance.call(this, cms_element); if (typeof ret === "object") { ret.create_child = function(obj_class) { var path = (cms_element.path() + '/' + obj_class).replace(/\/\//g, "/"); return scrivito.obj.create({ _path: path, _obj_class: obj_class }); }; } return ret; }; /* patch the revert command to allow reverts on rtc workspace*/ scrivito.revert_obj_command = function(obj, translations_namespace) { if (!translations_namespace) { translations_namespace = 'commands.revert_obj'; } return scrivito.command.create_instance({ id: 'revert_obj', title: scrivito.t(translations_namespace + '.title'), icon: '', present: function() { return scrivito.editing_context.selected_workspace.is_editable() && obj && !obj.is_deleted(); }, disabled: function() { /* here patched: */ /* if (scrivito.editing_context.selected_workspace.is_rtc()) { return scrivito.t(translations_namespace + '.rtc_workspace'); } */ if (!obj.modification()) { return scrivito.t(translations_namespace + '.not_modified_obj'); } if (obj.is_new()) { return scrivito.t(translations_namespace + '.new_obj'); } }, update: function() { return obj.update_modification(); }, execute: function() { return scrivito.confirmation_dialog({ title: scrivito.t(translations_namespace + '.dialog.title'), description: scrivito.t('commands.revert_obj.dialog.description'), icon: '', color: 'red', confirm_button_text: scrivito.t('commands.revert_obj.dialog.confirm'), confirm_button_color: 'red' }).then(function() { return scrivito.with_saving_overlay(obj.revert().then(function() { scrivito.reload(); })); }); } }); }; $.i18n().load({ 'commands.release_obj.title': 'Seite freigeben', 'commands.release_obj.not_modified_obj': 'Diese Seite wurde nicht geändert. Daher gibt es nichts zu freigeben.', 'commands.release_obj.dialog.title': 'Wirklich Änderungen an dieser Seite veröffentlichen?', 'commands.release_obj.dialog.description': 'Eine Arbeitsversion zu veröffentlichen ist endgültig. Dieser Vorgang kann nicht rückgängig gemacht werden.', 'commands.release_obj.dialog.confirm': 'Freigeben', 'commands.release_obj.failed': 'Freigabe fehlgeschlagen' }, 'de'); $.i18n().load({ 'commands.release_obj.title': 'Release page', 'commands.release_obj.not_modified_obj': 'This resource has not been modified. Therefore, nothing can be released.', 'commands.release_obj.dialog.title': 'Really release this page?', 'commands.release_obj.dialog.description': 'Releasing an edited page is final. This operation cannot be reverted.', 'commands.release_obj.dialog.confirm': 'Release', 'commands.release_obj.failed': 'Release failed' }, 'en'); var open_confirmation_dialog = function() { return scrivito.confirmation_dialog({ title: scrivito.t('commands.release_obj.dialog.title'), description: scrivito.t('commands.release_obj.dialog.description'), icon: '', color: 'green', confirm_button_text: scrivito.t('commands.release_obj.dialog.confirm'), confirm_button_color: 'green' }); }; /* implement release command */ scrivito.release_obj_command = function(obj, translations_namespace) { if (!translations_namespace) { translations_namespace = 'commands.release_obj'; } return scrivito.command.create_instance({ id: 'release_obj', title: scrivito.t(translations_namespace + '.title'), icon: '', present: function() { return scrivito.editing_context.selected_workspace.is_editable() && obj && !obj.is_deleted(); }, disabled: function() { if (!obj.modification()) { return scrivito.t(translations_namespace + '.not_modified_obj'); } }, execute: function() { /* TODO: implement permission check */ open_confirmation_dialog().done(function() { scrivito.with_saving_overlay(scrivito.ajax('PUT', 'objs/' + obj.id() + '/release').then(function() { scrivito.reload(); }).fail(function(error) { scrivito.alert_dialog(scrivito.t(translations_namespace + '.failed')); })); }); } }); }; /* patch the obj menu */ scrivito.current_page_menu.init = function() { if (scrivito.obj.current_page) { scrivito.menu_bar.register_item_renderer(function(menu_bar) { var current_page = scrivito.obj.current_page; scrivito.obj_menu.create(menu_bar.find('#scrivito_current_page_menu'), current_page, [ scrivito.obj_details_command(current_page), scrivito.save_obj_to_clipboard_command(current_page), scrivito.release_obj_command(current_page), scrivito.delete_obj_command(current_page), scrivito.revert_obj_command(current_page), //scrivito.restore_obj_command(current_page), //scrivito.mark_resolved_obj_command(current_page), scrivito.duplicate_obj_command(current_page) ]); }); } }; /* enforce permissions */ var originalGuiStart = scrivito.gui.start; scrivito.gui.start = function () { originalGuiStart.call(this, arguments); if (scrivito.in_editable_view()) { if (!scrivito.user_permissions.can('write_obj')) { $('.switch_to_view_mode').click(); } } else { if (!scrivito.user_permissions.can('write_obj')) { $('.scrivito_viewmode_editing').remove(); } } }; }());