@@ -1518,9 +1518,7 @@ function RemoteFunctions(config) {
15181518 element . setAttribute ( "contenteditable" , "true" ) ;
15191519 element . focus ( ) ;
15201520
1521- // Save the original content for potential cancellation
15221521 element . _originalContent = element . innerHTML ;
1523- element . _originalTextContent = element . textContent ;
15241522
15251523 // Add event listeners for editing
15261524 function onBlur ( ) {
@@ -1550,51 +1548,29 @@ function RemoteFunctions(config) {
15501548 } ;
15511549 }
15521550
1553- // this function is to remove the properties from elements before getting the innerHTML
1551+ // this function is to remove the internal properties from elements before getting the innerHTML
15541552 // then add all the properties back to the elements
1553+ // internal properties such as 'data-brackets-id', 'data-ld-highlight' etc
15551554 function cleanupElementProperties ( element ) {
1556- // a temporary container to hold a clean copy
1557- const tempContainer = document . createElement ( 'div' ) ;
1558- tempContainer . innerHTML = element . innerHTML ;
1559-
1560- // get all elements in the temporary container
1561- const allElements = tempContainer . querySelectorAll ( '*' ) ;
1562-
1563- // Store original attributes for later restoration
1564- const originalAttributes = new Map ( ) ;
1565- const elementsInOriginal = element . querySelectorAll ( '*' ) ;
1566-
1567- // Save original attributes
1568- elementsInOriginal . forEach ( ( el , index ) => {
1569- const attrs = { } ;
1570- for ( let i = 0 ; i < el . attributes . length ; i ++ ) {
1571- const attr = el . attributes [ i ] ;
1572- attrs [ attr . name ] = attr . value ;
1573- }
1574- originalAttributes . set ( index , attrs ) ;
1575- } ) ;
1555+ const clone = element . cloneNode ( true ) ;
1556+ const allElements = [ clone , ...clone . querySelectorAll ( '*' ) ] ;
15761557
1577- // Remove all attributes from elements in the temp container
15781558 allElements . forEach ( el => {
1579- while ( el . attributes . length > 0 ) {
1580- el . removeAttribute ( el . attributes [ 0 ] . name ) ;
1559+ // Remove Phoenix internal attributes
1560+ if ( el . hasAttribute ( 'data-brackets-id' ) ) {
1561+ el . removeAttribute ( 'data-brackets-id' ) ;
1562+ }
1563+ if ( el . hasAttribute ( 'data-ld-highlight' ) ) {
1564+ el . removeAttribute ( 'data-ld-highlight' ) ;
15811565 }
1582- } ) ;
1583-
1584- // Get the clean HTML content
1585- const cleanContent = tempContainer . innerHTML ;
15861566
1587- // Restore original attributes to the actual elements
1588- elementsInOriginal . forEach ( ( el , index ) => {
1589- if ( originalAttributes . has ( index ) ) {
1590- const attrs = originalAttributes . get ( index ) ;
1591- for ( const [ name , value ] of Object . entries ( attrs ) ) {
1592- el . setAttribute ( name , value ) ;
1593- }
1567+ // Remove empty style attribute
1568+ if ( el . hasAttribute ( 'style' ) && el . getAttribute ( 'style' ) . trim ( ) === '' ) {
1569+ el . removeAttribute ( 'style' ) ;
15941570 }
15951571 } ) ;
15961572
1597- return cleanContent ;
1573+ return clone . innerHTML ;
15981574 }
15991575
16001576 // Function to finish editing and apply changes
@@ -1622,8 +1598,6 @@ function RemoteFunctions(config) {
16221598 window . _Brackets_MessageBroker . send ( {
16231599 livePreviewEditEnabled : true ,
16241600 element : element ,
1625- oldContent : element . _originalContent ,
1626- oldTextContent : element . _originalTextContent ,
16271601 newContent : newContent ,
16281602 tagId : Number ( tagId ) ,
16291603 livePreviewTextEdit : true
@@ -1632,7 +1606,6 @@ function RemoteFunctions(config) {
16321606
16331607 // Clean up
16341608 delete element . _originalContent ;
1635- delete element . _originalTextContent ;
16361609 }
16371610
16381611 // init
0 commit comments