@@ -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