Skip to content

Commit c98c0b0

Browse files
committed
Migrate DOM ready code from util.js to init.js
util.js is not supposed to contain event listeners.
1 parent 0458ccc commit c98c0b0

File tree

2 files changed

+216
-218
lines changed

2 files changed

+216
-218
lines changed

share/static/js/init.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,3 +1093,100 @@ jQuery(document).on('change', 'form[name=BuildQuery] select[name^=SelectCustomFi
10931093
}
10941094
initializeSelectElements(row.get(0));
10951095
});
1096+
1097+
// Inline edit listeners
1098+
jQuery(document).on('click', 'table.inline-edit div.editable .edit-icon', function (e) {
1099+
var cell = jQuery(this).closest('div.editable');
1100+
if ( jQuery('div.editable.editing form').length ) {
1101+
cancelInlineEdit(jQuery('div.editable.editing form'));
1102+
}
1103+
const modal_info = cell.get(0).querySelector('.inline-edit-modal[data-link]');
1104+
if ( modal_info ) {
1105+
htmx.ajax('GET', modal_info.getAttribute('data-link'), '#dynamic-modal').then(() => {
1106+
bootstrap.Modal.getOrCreateInstance('#dynamic-modal').show();
1107+
jQuery(document).off('change', '#dynamic-modal form :input').on('change', '#dynamic-modal form :input', function () {
1108+
jQuery(this).closest('form').data('changed', true);
1109+
});
1110+
jQuery(document).off('click', '#dynamic-modal form .submit').on('click', '#dynamic-modal form .submit', function (evt) {
1111+
evt.preventDefault();
1112+
document.querySelectorAll('#dynamic-modal form textarea.richtext').forEach((textarea) => {
1113+
const name = textarea.name;
1114+
if ( RT.CKEditor.instances[name] ) {
1115+
if ( RT.CKEditor.instances[name].getData() !== textarea.value ) {
1116+
RT.CKEditor.instances[name].updateSourceElement();
1117+
jQuery(textarea.closest('form')).data('changed', true);
1118+
}
1119+
}
1120+
});
1121+
if ( jQuery('#dynamic-modal form').data('changed') ) {
1122+
cell.addClass('editing');
1123+
submitInlineEdit(jQuery('#dynamic-modal form'), cell);
1124+
}
1125+
else {
1126+
bootstrap.Modal.getInstance('#dynamic-modal')?.hide();
1127+
}
1128+
});
1129+
});
1130+
}
1131+
else {
1132+
beginInlineEdit(cell);
1133+
}
1134+
});
1135+
1136+
jQuery(document).on('mouseenter', 'table.inline-edit div.editable .edit-icon', function (e) {
1137+
const owner_dropdown_delay = jQuery(this).closest('.editable').find('div.select-owner-dropdown-delay:not(.loaded)');
1138+
loadOwnerDropdownDelay(owner_dropdown_delay);
1139+
});
1140+
1141+
jQuery(document).on('change', 'div.editable.editing form :input', function () {
1142+
jQuery(this).closest('form').data('changed', true);
1143+
});
1144+
1145+
jQuery(document).on('click', 'div.editable .cancel', function (e) {
1146+
cancelInlineEdit(jQuery(this).closest('form'));
1147+
});
1148+
1149+
jQuery(document).on('click', 'div.editable .submit', function (e) {
1150+
submitInlineEdit(jQuery(this).closest('form'));
1151+
});
1152+
1153+
// We want to call submitInlineEdit to do some pre-checks and massage
1154+
// css classes before making htmx requests. Can't bind it to form.submit
1155+
// event as preventDefault() there can't stop htmx actions.
1156+
jQuery(document).on('keydown', 'div.editable.editing form input[type=text], div.editable.editing form input:not([type])', function (e) {
1157+
if (e.key === 'Enter') {
1158+
e.preventDefault();
1159+
submitInlineEdit(jQuery(this).closest('form'));
1160+
}
1161+
});
1162+
1163+
jQuery(document).on('change', 'div.editable.editing form select:not([multiple])', function () {
1164+
submitInlineEdit(jQuery(this).closest('form'));
1165+
});
1166+
1167+
jQuery(function () {
1168+
1169+
// Make actions dropdown scrollable in case screen is too short
1170+
jQuery(window).resize(function() {
1171+
jQuery('#li-page-actions > ul').css('max-height', jQuery(window).height() - jQuery('#rt-header-container').height());
1172+
}).resize();
1173+
1174+
let expandCalendarResizeTimeout;
1175+
window.addEventListener('resize', () => {
1176+
clearTimeout(expandCalendarResizeTimeout);
1177+
expandCalendarResizeTimeout = setTimeout(() => {
1178+
expandCalendar(document);
1179+
}, 150);
1180+
});
1181+
1182+
const html = document.querySelector('html');
1183+
if ( html.getAttribute('data-bs-theme') === 'auto' ) {
1184+
if ( window.matchMedia("(prefers-color-scheme:dark)").matches ) {
1185+
html.setAttribute('data-bs-theme', 'dark');
1186+
}
1187+
else {
1188+
html.setAttribute('data-bs-theme', 'light');
1189+
}
1190+
}
1191+
1192+
});

0 commit comments

Comments
 (0)