@@ -721,14 +721,14 @@ function registerStandardHints(successFunc) {
721
721
} ) ;
722
722
}
723
723
724
- function loadTreeNodesAtPath ( path , node , callback ) {
724
+ function loadTreeNodes ( atNode ) {
725
725
const data = new FormData ( ) ;
726
726
data . append ( 'mode' , window . projectEnv ) ;
727
- data . append ( 'path' , path ) ;
727
+ data . append ( 'path' , getNearestDirectory ( atNode ) ) ;
728
728
729
- showLoadingAnimation ( node ) ;
729
+ showLoadingAnimation ( atNode ) ;
730
730
731
- sendHttp ( 'POST' , 'listFolder ' , data , ( request ) => {
731
+ sendHttp ( 'POST' , 'listFolders ' , data , ( request ) => {
732
732
if ( request . status === 200 ) {
733
733
const treeNodes = JSON . parse ( request . responseText ) ;
734
734
@@ -741,58 +741,29 @@ function loadTreeNodesAtPath(path, node, callback) {
741
741
$ ( '#directoryTree' ) . tree (
742
742
'loadData' ,
743
743
treeNodes . sort ( ( a , b ) => a . index > b . index ) ,
744
- node
744
+ atNode
745
745
) ;
746
746
747
- if ( node ) {
748
- $ ( '#directoryTree' ) . tree ( 'openNode' , node ) ;
749
- }
750
-
751
- if ( callback ) {
752
- callback ( ) ;
753
- }
747
+ $ ( '#directoryTree' ) . tree ( 'openNode' , atNode ) ;
754
748
}
755
749
756
750
hideLoadingAnimation ( ) ;
757
751
} ) ;
758
752
}
759
753
760
- function loadSubTree ( node , callback ) {
761
- if ( Auth . signedIn ( ) ) {
762
- // Root node already loaded
763
- if ( node === $ ( '#directoryTree' ) . tree ( 'getTree' ) && callback ) {
764
- callback ( ) ;
765
- } else if ( DirTree . isDirectory ( node ) ) {
766
- loadTreeNodesAtPath ( getNearestDirectory ( node ) , node , callback ) ;
767
- }
768
- }
769
- }
770
-
771
- function discoverProjects ( path ) {
772
- if ( Auth . signedIn ( ) ) {
773
- loadTreeNodesAtPath ( path ) ;
774
- }
775
- }
776
-
777
- function moveDirTreeNode (
778
- moveFrom ,
779
- moveTo ,
780
- isFile ,
781
- name ,
782
- buildMode ,
783
- successFunc
784
- ) {
754
+ function moveDirTreeNode ( moveFrom , moveTo , node , successFunc ) {
785
755
if ( ! Auth . signedIn ( ) ) {
786
756
sweetAlert ( 'Oops!' , 'You must sign in before moving.' , 'error' ) ;
787
757
return ;
788
758
}
789
759
const data = new FormData ( ) ;
790
- data . append ( 'mode' , buildMode ) ;
760
+ data . append ( 'mode' , window . projectEnv ) ;
791
761
data . append ( 'moveTo' , moveTo ) ;
792
762
data . append ( 'moveFrom' , moveFrom ) ;
793
- if ( isFile ) {
763
+
764
+ if ( DirTree . isProject ( node ) ) {
794
765
data . append ( 'isFile' , 'true' ) ;
795
- data . append ( 'name' , name ) ;
766
+ data . append ( 'name' , node . name ) ;
796
767
} else {
797
768
data . append ( 'isFile' , 'false' ) ;
798
769
}
@@ -1541,7 +1512,7 @@ function initDirectoryTree(isEditorClean, loadProjectHandler, clearEditor) {
1541
1512
1542
1513
$ ( '#directoryTree' ) . tree ( {
1543
1514
data : [ ] ,
1544
- autoOpen : true ,
1515
+ autoOpen : false ,
1545
1516
saveState : treeStateStorageKey ,
1546
1517
dragAndDrop : true ,
1547
1518
keyboardSupport : false ,
@@ -1631,86 +1602,92 @@ function initDirectoryTree(isEditorClean, loadProjectHandler, clearEditor) {
1631
1602
updateChildrenIndexes ( toNode ) ;
1632
1603
return ;
1633
1604
}
1634
- // Load content of directory before move something inside
1635
- loadSubTree ( toNode , ( ) => {
1636
- let toPath = pathToRootDir ( toNode ) ;
1637
- if ( toPath ) {
1638
- toPath = `${ toPath } /${ toNode . name } ` ;
1605
+
1606
+ let toPath = pathToRootDir ( toNode ) ;
1607
+ if ( toPath ) {
1608
+ toPath = `${ toPath } /${ toNode . name } ` ;
1609
+ } else {
1610
+ toPath = toNode . name ;
1611
+ }
1612
+ if ( haveChildWithSameNameAndType ( movedNode , toNode ) ) {
1613
+ // Replacement of existing project
1614
+ let msg , confirmText ;
1615
+ if ( DirTree . isProject ( movedNode ) ) {
1616
+ msg = `${
1617
+ 'Are you sure you want to save over another project?\n\n' +
1618
+ 'The previous contents of '
1619
+ } ${ name } will be permanently destroyed!`;
1620
+ confirmText = 'Yes, overwrite it!' ;
1639
1621
} else {
1640
- toPath = toNode . name ;
1622
+ msg = 'Are you sure you want to merge content of these directories?' ;
1623
+ confirmText = 'Yes, merge them!' ;
1641
1624
}
1642
- if ( haveChildWithSameNameAndType ( movedNode , toNode ) ) {
1643
- // Replacement of existing project
1644
- let msg , confirmText ;
1645
- if ( DirTree . isProject ( movedNode ) ) {
1646
- msg = `${
1647
- 'Are you sure you want to save over another project?\n\n' +
1648
- 'The previous contents of '
1649
- } ${ name } will be permanently destroyed!`;
1650
- confirmText = 'Yes, overwrite it!' ;
1651
- } else {
1652
- msg =
1653
- 'Are you sure you want to merge content of these directories?' ;
1654
- confirmText = 'Yes, merge them!' ;
1655
- }
1656
1625
1657
- sweetAlert ( {
1658
- title : Alert . title ( 'Warning' ) ,
1659
- text : msg ,
1660
- type : 'warning' ,
1661
- showCancelButton : true ,
1662
- confirmButtonColor : '#DD6B55' ,
1663
- confirmButtonText : confirmText ,
1664
- } ) . then ( ( result ) => {
1665
- if ( result && result . value ) {
1666
- moveDirTreeNode (
1667
- fromPath ,
1668
- toPath ,
1669
- isFile ,
1670
- name ,
1671
- window . projectEnv ,
1672
- ( ) => {
1673
- toNode . children = toNode . children . filter ( ( n ) => {
1674
- return (
1675
- movedNode === n ||
1676
- n . name !== movedNode . name ||
1677
- n . type !== movedNode . type
1678
- ) ;
1679
- } ) ;
1680
- event . move_info . do_move ( ) ;
1681
- updateChildrenIndexes ( toNode ) ;
1682
- if ( DirTree . isDirectory ( movedNode ) ) {
1683
- loadSubTree ( movedNode ) ;
1684
- clearEditor ( ) ;
1685
- }
1686
- }
1687
- ) ;
1688
- }
1689
- } ) ;
1690
- } else {
1691
- // Regular moving
1692
- moveDirTreeNode (
1693
- fromPath ,
1694
- toPath ,
1695
- isFile ,
1696
- name ,
1697
- window . projectEnv ,
1698
- ( ) => {
1626
+ sweetAlert ( {
1627
+ title : Alert . title ( 'Warning' ) ,
1628
+ text : msg ,
1629
+ type : 'warning' ,
1630
+ showCancelButton : true ,
1631
+ confirmButtonColor : '#DD6B55' ,
1632
+ confirmButtonText : confirmText ,
1633
+ } ) . then ( ( result ) => {
1634
+ if ( result && result . value ) {
1635
+ moveDirTreeNode ( fromPath , toPath , movedNode , ( ) => {
1636
+ toNode . children = toNode . children . filter ( ( n ) => {
1637
+ return (
1638
+ movedNode === n ||
1639
+ n . name !== movedNode . name ||
1640
+ n . type !== movedNode . type
1641
+ ) ;
1642
+ } ) ;
1699
1643
event . move_info . do_move ( ) ;
1700
1644
updateChildrenIndexes ( toNode ) ;
1701
- }
1702
- ) ;
1703
- }
1704
- } ) ;
1645
+
1646
+ if ( DirTree . isDirectory ( movedNode ) ) {
1647
+ loadTreeNodes ( movedNode ) ;
1648
+ clearEditor ( ) ;
1649
+ }
1650
+ } ) ;
1651
+ }
1652
+ } ) ;
1653
+ } else {
1654
+ // Regular moving
1655
+ moveDirTreeNode ( fromPath , toPath , movedNode , ( ) => {
1656
+ event . move_info . do_move ( ) ;
1657
+ updateChildrenIndexes ( toNode ) ;
1658
+ } ) ;
1659
+ }
1705
1660
} ) ;
1706
1661
} ) ;
1707
1662
$ ( '#directoryTree' ) . on ( 'tree.open' , ( event ) => {
1708
- const folderIcon = event . node . element . getElementsByClassName (
1663
+ const { node : openedNode } = event ;
1664
+
1665
+ const folderIcon = openedNode . element . getElementsByClassName (
1709
1666
'mdi-folder'
1710
1667
) [ 0 ] ;
1711
1668
if ( folderIcon ) {
1712
1669
folderIcon . classList . replace ( 'mdi-folder' , 'mdi-folder-open' ) ;
1713
1670
}
1671
+
1672
+ loadTreeNodes ( openedNode ) ;
1673
+
1674
+ const selectedNode = DirTree . getSelectedNode ( ) ;
1675
+
1676
+ if ( selectedNode ) {
1677
+ for (
1678
+ let parent = selectedNode . parent ;
1679
+ parent !== null ;
1680
+ parent = parent . parent
1681
+ ) {
1682
+ if ( parent . id === openedNode . id ) {
1683
+ DirTree . clearSelectedNode ( ) ;
1684
+ updateDocumentTitle ( ) ;
1685
+ clearEditor ( ) ;
1686
+
1687
+ break ;
1688
+ }
1689
+ }
1690
+ }
1714
1691
} ) ;
1715
1692
$ ( '#directoryTree' ) . on ( 'tree.close' , ( event ) => {
1716
1693
const folderIcon = event . node . element . getElementsByClassName (
@@ -1737,17 +1714,12 @@ function initDirectoryTree(isEditorClean, loadProjectHandler, clearEditor) {
1737
1714
}
1738
1715
warnIfUnsaved ( isEditorClean , ( ) => {
1739
1716
if ( isProjectNode ) {
1740
- const path = pathToRootDir ( node ) ;
1741
-
1742
- loadProjectHandler ( node . name , path ) ;
1743
- $ ( '#directoryTree' ) . tree ( 'selectNode' , node ) ;
1744
- } else if ( DirTree . isDirectory ( node ) ) {
1745
- if ( node . children . length === 0 ) {
1746
- loadSubTree ( node ) ;
1747
- }
1717
+ loadProjectHandler ( node . name , pathToRootDir ( node ) ) ;
1718
+ } else {
1748
1719
clearEditor ( ) ;
1749
- $ ( '#directoryTree' ) . tree ( 'selectNode' , node ) ;
1750
1720
}
1721
+
1722
+ $ ( '#directoryTree' ) . tree ( 'selectNode' , node ) ;
1751
1723
} ) ;
1752
1724
} ) ;
1753
1725
$ ( '#directoryTree' ) . on ( 'tree.select' , ( event ) => {
@@ -2057,11 +2029,11 @@ export {
2057
2029
definePanelExtension ,
2058
2030
deleteFolder_ ,
2059
2031
deleteProject_ ,
2060
- discoverProjects ,
2061
2032
getNearestDirectory ,
2062
2033
initDirectoryTree ,
2063
2034
loadProject ,
2064
2035
loadSample ,
2036
+ loadTreeNodes ,
2065
2037
markFailed ,
2066
2038
onHover ,
2067
2039
parseCompileErrors ,
0 commit comments