mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
f4037fe319
* Swap out .Actions class for bootstrap .btn-toolbar * Converted all south toolbars to use new toolbar component styles, content and preview styles for scrollbars adjusted where required
299 lines
8.2 KiB
JavaScript
299 lines
8.2 KiB
JavaScript
(function (global, factory) {
|
|
if (typeof define === "function" && define.amd) {
|
|
define('ss.LeftAndMain.EditForm', ['jQuery', 'i18n'], factory);
|
|
} else if (typeof exports !== "undefined") {
|
|
factory(require('jQuery'), require('i18n'));
|
|
} else {
|
|
var mod = {
|
|
exports: {}
|
|
};
|
|
factory(global.jQuery, global.i18n);
|
|
global.ssLeftAndMainEditForm = mod.exports;
|
|
}
|
|
})(this, function (_jQuery, _i18n) {
|
|
'use strict';
|
|
|
|
var _jQuery2 = _interopRequireDefault(_jQuery);
|
|
|
|
var _i18n2 = _interopRequireDefault(_i18n);
|
|
|
|
function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
|
|
window.onbeforeunload = function (e) {
|
|
var form = (0, _jQuery2.default)('.cms-edit-form');
|
|
form.trigger('beforesubmitform');
|
|
if (form.is('.changed') && !form.is('.discardchanges')) {
|
|
return _i18n2.default._t('LeftAndMain.CONFIRMUNSAVEDSHORT');
|
|
}
|
|
};
|
|
|
|
_jQuery2.default.entwine('ss', function ($) {
|
|
$('.cms-edit-form').entwine({
|
|
PlaceholderHtml: '',
|
|
|
|
ChangeTrackerOptions: {
|
|
ignoreFieldSelector: '.no-change-track, .ss-upload :input, .cms-navigator :input'
|
|
},
|
|
|
|
ValidationErrorShown: false,
|
|
|
|
onadd: function onadd() {
|
|
var self = this;
|
|
|
|
this.attr("autocomplete", "off");
|
|
|
|
this._setupChangeTracker();
|
|
|
|
for (var overrideAttr in { 'action': true, 'method': true, 'enctype': true, 'name': true }) {
|
|
var el = this.find(':input[name=' + '_form_' + overrideAttr + ']');
|
|
if (el) {
|
|
this.attr(overrideAttr, el.val());
|
|
el.remove();
|
|
}
|
|
}
|
|
|
|
this.setValidationErrorShown(false);
|
|
|
|
this._super();
|
|
},
|
|
'from .cms-tabset': {
|
|
onafterredrawtabs: function onafterredrawtabs() {
|
|
if (this.hasClass('validationerror')) {
|
|
var tabError = this.find('.message.validation, .message.required').first().closest('.tab');
|
|
$('.cms-container').clearCurrentTabState();
|
|
var $tabSet = tabError.closest('.ss-tabset');
|
|
|
|
if (!$tabSet.length) {
|
|
$tabSet = tabError.closest('.cms-tabset');
|
|
}
|
|
|
|
if ($tabSet.length) {
|
|
$tabSet.tabs('option', 'active', tabError.index('.tab'));
|
|
} else if (!this.getValidationErrorShown()) {
|
|
this.setValidationErrorShown(true);
|
|
errorMessage(ss.i18n._t('ModelAdmin.VALIDATIONERROR', 'Validation Error'));
|
|
}
|
|
}
|
|
}
|
|
},
|
|
onremove: function onremove() {
|
|
this.changetracker('destroy');
|
|
this._super();
|
|
},
|
|
onmatch: function onmatch() {
|
|
this._super();
|
|
},
|
|
onunmatch: function onunmatch() {
|
|
this._super();
|
|
},
|
|
redraw: function redraw() {
|
|
if (window.debug) console.log('redraw', this.attr('class'), this.get(0));
|
|
|
|
this.add(this.find('.cms-tabset')).redrawTabs();
|
|
this.find('.cms-content-header').redraw();
|
|
},
|
|
|
|
_setupChangeTracker: function _setupChangeTracker() {
|
|
this.changetracker(this.getChangeTrackerOptions());
|
|
},
|
|
|
|
confirmUnsavedChanges: function confirmUnsavedChanges() {
|
|
this.trigger('beforesubmitform');
|
|
if (!this.is('.changed') || this.is('.discardchanges')) {
|
|
return true;
|
|
}
|
|
var confirmed = confirm(_i18n2.default._t('LeftAndMain.CONFIRMUNSAVED'));
|
|
if (confirmed) {
|
|
this.addClass('discardchanges');
|
|
}
|
|
return confirmed;
|
|
},
|
|
|
|
onsubmit: function onsubmit(e, button) {
|
|
if (this.prop("target") != "_blank") {
|
|
if (button) this.closest('.cms-container').submitForm(this, button);
|
|
return false;
|
|
}
|
|
},
|
|
|
|
validate: function validate() {
|
|
var isValid = true;
|
|
this.trigger('validate', { isValid: isValid });
|
|
|
|
return isValid;
|
|
},
|
|
|
|
'from .htmleditor': {
|
|
oneditorinit: function oneditorinit(e) {
|
|
var self = this,
|
|
field = $(e.target).closest('.field.htmleditor'),
|
|
editor = field.find('textarea.htmleditor').getEditor().getInstance();
|
|
|
|
editor.onClick.add(function (e) {
|
|
self.saveFieldFocus(field.attr('id'));
|
|
});
|
|
}
|
|
},
|
|
|
|
'from .cms-edit-form :input:not(:submit)': {
|
|
onclick: function onclick(e) {
|
|
this.saveFieldFocus($(e.target).attr('id'));
|
|
},
|
|
onfocus: function onfocus(e) {
|
|
this.saveFieldFocus($(e.target).attr('id'));
|
|
}
|
|
},
|
|
|
|
'from .cms-edit-form .treedropdown *': {
|
|
onfocusin: function onfocusin(e) {
|
|
var field = $(e.target).closest('.field.treedropdown');
|
|
this.saveFieldFocus(field.attr('id'));
|
|
}
|
|
},
|
|
|
|
'from .cms-edit-form .dropdown .chosen-container a': {
|
|
onfocusin: function onfocusin(e) {
|
|
var field = $(e.target).closest('.field.dropdown');
|
|
this.saveFieldFocus(field.attr('id'));
|
|
}
|
|
},
|
|
|
|
'from .cms-container': {
|
|
ontabstaterestored: function ontabstaterestored(e) {
|
|
this.restoreFieldFocus();
|
|
}
|
|
},
|
|
|
|
saveFieldFocus: function saveFieldFocus(selected) {
|
|
if (typeof window.sessionStorage == "undefined" || window.sessionStorage === null) return;
|
|
|
|
var id = $(this).attr('id'),
|
|
focusElements = [];
|
|
|
|
focusElements.push({
|
|
id: id,
|
|
selected: selected
|
|
});
|
|
|
|
if (focusElements) {
|
|
try {
|
|
window.sessionStorage.setItem(id, JSON.stringify(focusElements));
|
|
} catch (err) {
|
|
if (err.code === DOMException.QUOTA_EXCEEDED_ERR && window.sessionStorage.length === 0) {
|
|
return;
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
restoreFieldFocus: function restoreFieldFocus() {
|
|
if (typeof window.sessionStorage == "undefined" || window.sessionStorage === null) return;
|
|
|
|
var self = this,
|
|
hasSessionStorage = typeof window.sessionStorage !== "undefined" && window.sessionStorage,
|
|
sessionData = hasSessionStorage ? window.sessionStorage.getItem(this.attr('id')) : null,
|
|
sessionStates = sessionData ? JSON.parse(sessionData) : false,
|
|
elementID,
|
|
tabbed = this.find('.ss-tabset').length !== 0,
|
|
activeTab,
|
|
elementTab,
|
|
toggleComposite,
|
|
scrollY;
|
|
|
|
if (hasSessionStorage && sessionStates.length > 0) {
|
|
$.each(sessionStates, function (i, sessionState) {
|
|
if (self.is('#' + sessionState.id)) {
|
|
elementID = $('#' + sessionState.selected);
|
|
}
|
|
});
|
|
|
|
if ($(elementID).length < 1) {
|
|
this.focusFirstInput();
|
|
return;
|
|
}
|
|
|
|
activeTab = $(elementID).closest('.ss-tabset').find('.ui-tabs-nav .ui-tabs-active .ui-tabs-anchor').attr('id');
|
|
elementTab = 'tab-' + $(elementID).closest('.ss-tabset .ui-tabs-panel').attr('id');
|
|
|
|
if (tabbed && elementTab !== activeTab) {
|
|
return;
|
|
}
|
|
|
|
toggleComposite = $(elementID).closest('.togglecomposite');
|
|
|
|
if (toggleComposite.length > 0) {
|
|
toggleComposite.accordion('activate', toggleComposite.find('.ui-accordion-header'));
|
|
}
|
|
|
|
scrollY = $(elementID).position().top;
|
|
|
|
if (!$(elementID).is(':visible')) {
|
|
elementID = '#' + $(elementID).closest('.field').attr('id');
|
|
scrollY = $(elementID).position().top;
|
|
}
|
|
|
|
$(elementID).focus();
|
|
|
|
if (scrollY > $(window).height() / 2) {
|
|
self.find('.cms-content-fields').scrollTop(scrollY);
|
|
}
|
|
} else {
|
|
this.focusFirstInput();
|
|
}
|
|
},
|
|
|
|
focusFirstInput: function focusFirstInput() {
|
|
this.find(':input:not(:submit)[data-skip-autofocus!="true"]').filter(':visible:first').focus();
|
|
}
|
|
});
|
|
|
|
$('.cms-edit-form .btn-toolbar input.action[type=submit], .cms-edit-form .btn-toolbar button.action').entwine({
|
|
onclick: function onclick(e) {
|
|
if (this.hasClass('gridfield-button-delete') && !confirm(_i18n2.default._t('TABLEFIELD.DELETECONFIRMMESSAGE'))) {
|
|
e.preventDefault();
|
|
return false;
|
|
}
|
|
|
|
if (!this.is(':disabled')) {
|
|
this.parents('form').trigger('submit', [this]);
|
|
}
|
|
e.preventDefault();
|
|
return false;
|
|
}
|
|
});
|
|
|
|
$('.cms-edit-form .btn-toolbar input.action[type=submit].ss-ui-action-cancel, .cms-edit-form .btn-toolbar button.action.ss-ui-action-cancel').entwine({
|
|
onclick: function onclick(e) {
|
|
if (window.history.length > 1) {
|
|
window.history.back();
|
|
} else {
|
|
this.parents('form').trigger('submit', [this]);
|
|
}
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
|
|
$('.cms-edit-form .ss-tabset').entwine({
|
|
onmatch: function onmatch() {
|
|
if (!this.hasClass('ss-ui-action-tabset')) {
|
|
var tabs = this.find("> ul:first");
|
|
|
|
if (tabs.children("li").length == 1) {
|
|
tabs.hide().parent().addClass("ss-tabset-tabshidden");
|
|
}
|
|
}
|
|
|
|
this._super();
|
|
},
|
|
onunmatch: function onunmatch() {
|
|
this._super();
|
|
}
|
|
});
|
|
});
|
|
}); |