@@ -1156,6 +1156,85 @@ function RemoteFunctions(config) {
11561156 return JSON . stringify ( config ) ;
11571157 }
11581158
1159+ // Function to handle direct editing of elements in the live preview
1160+ function startEditing ( element ) {
1161+ if ( ! element ) {
1162+ return ;
1163+ }
1164+
1165+ // Make the element editable
1166+ element . setAttribute ( "contenteditable" , "true" ) ;
1167+ element . focus ( ) ;
1168+
1169+ // Save the original content for potential cancellation
1170+ element . _originalContent = element . innerHTML ;
1171+
1172+ // Add event listeners for editing
1173+ function onBlur ( ) {
1174+ finishEditing ( element ) ;
1175+ }
1176+
1177+ function onKeyDown ( event ) {
1178+ if ( event . key === "Escape" ) {
1179+ // Cancel editing
1180+ element . innerHTML = element . _originalContent ;
1181+ finishEditing ( element ) ;
1182+ event . preventDefault ( ) ;
1183+ } else if ( event . key === "Enter" && ! event . shiftKey ) {
1184+ // Finish editing on Enter (unless Shift is held)
1185+ finishEditing ( element ) ;
1186+ event . preventDefault ( ) ;
1187+ }
1188+ }
1189+
1190+ element . addEventListener ( "blur" , onBlur ) ;
1191+ element . addEventListener ( "keydown" , onKeyDown ) ;
1192+
1193+ // Store the event listeners for later removal
1194+ element . _editListeners = {
1195+ blur : onBlur ,
1196+ keydown : onKeyDown
1197+ } ;
1198+ }
1199+
1200+ // Function to finish editing and apply changes
1201+ function finishEditing ( element ) {
1202+ if ( ! element || ! element . hasAttribute ( "contenteditable" ) ) {
1203+ return ;
1204+ }
1205+
1206+ // Remove contenteditable attribute
1207+ element . removeAttribute ( "contenteditable" ) ;
1208+
1209+ // Remove event listeners
1210+ if ( element . _editListeners ) {
1211+ element . removeEventListener ( "blur" , element . _editListeners . blur ) ;
1212+ element . removeEventListener ( "keydown" , element . _editListeners . keydown ) ;
1213+ delete element . _editListeners ;
1214+ }
1215+
1216+ // Get the new content
1217+ const newContent = element . innerHTML ;
1218+
1219+ // If content has changed, send the edit to the editor
1220+ if ( newContent !== element . _originalContent && element . hasAttribute ( "data-brackets-id" ) ) {
1221+ const tagId = element . getAttribute ( "data-brackets-id" ) ;
1222+
1223+ // Create a text edit operation
1224+ // const edit = {
1225+ // type: "textReplace",
1226+ // parentID: element.parentNode.getAttribute("data-brackets-id"),
1227+ // tagID: tagId,
1228+ // content: newContent
1229+ // };
1230+ //
1231+ // todo: send the edited text to phoenix to change in text editor
1232+ }
1233+
1234+ // Clean up
1235+ delete element . _originalContent ;
1236+ }
1237+
11591238 // init
11601239 _editHandler = new DOMEditHandler ( window . document ) ;
11611240
@@ -1182,6 +1261,8 @@ function RemoteFunctions(config) {
11821261 "redrawHighlights" : redrawHighlights ,
11831262 "applyDOMEdits" : applyDOMEdits ,
11841263 "getSimpleDOM" : getSimpleDOM ,
1185- "updateConfig" : updateConfig
1264+ "updateConfig" : updateConfig ,
1265+ "startEditing" : startEditing ,
1266+ "finishEditing" : finishEditing
11861267 } ;
11871268}
0 commit comments