@@ -788,6 +788,16 @@ Vvveb.WysiwygEditor = {
788
788
e . preventDefault ( ) ;
789
789
return false ;
790
790
} ) ;
791
+
792
+ doc . addEventListener ( 'keydown' , event => {
793
+ if ( event . key === 'Enter' ) {
794
+ let target = event . target . closest ( "[contenteditable]" ) ;
795
+ if ( target ) {
796
+ doc . execCommand ( 'insertLineBreak' ) ;
797
+ event . preventDefault ( ) ;
798
+ }
799
+ }
800
+ } )
791
801
} ,
792
802
793
803
undo : function ( element ) {
@@ -949,7 +959,7 @@ Vvveb.Builder = {
949
959
section = Vvveb . Sections . get ( sectionType ) ;
950
960
951
961
if ( section ) {
952
- item = generateElements ( `<li data-section="${ group } " data-type="${ sectionType } " data-search="${ section . name . toLowerCase ( ) } ">
962
+ item = generateElements ( `<li data-section="${ group } " data-drag-type="section" data- type="${ sectionType } " data-search="${ section . name . toLowerCase ( ) } ">
953
963
<span class="name">${ section . name } </span>
954
964
<div class="add-section-btn" title="Add section"><i class="la la-plus"></i></div>
955
965
<img class="preview" src="" loading="lazy">
@@ -1215,9 +1225,14 @@ Vvveb.Builder = {
1215
1225
1216
1226
Vvveb . component = Vvveb . Components . get ( component ) ;
1217
1227
Vvveb . Components . render ( component ) ;
1228
+ this . selectedComponent = component ;
1218
1229
1219
1230
} ,
1220
1231
1232
+ reloadComponent : function ( ) {
1233
+ Vvveb . Components . render ( this . selectedComponent ) ;
1234
+ } ,
1235
+
1221
1236
moveNodeUp : function ( node ) {
1222
1237
if ( ! node ) {
1223
1238
node = Vvveb . Builder . selectedEl ;
@@ -1440,9 +1455,6 @@ Vvveb.Builder = {
1440
1455
SelectBox . style . display = "block" ;
1441
1456
1442
1457
} else if ( self . isDragging ) {
1443
- let parent = self . highlightEl ;
1444
- let parentTagName = parent . tagName . toLowerCase ( ) ;
1445
-
1446
1458
let noChildren = {
1447
1459
input : true ,
1448
1460
textarea : true ,
@@ -1457,6 +1469,16 @@ Vvveb.Builder = {
1457
1469
wbr : true
1458
1470
} ;
1459
1471
1472
+ let parent = self . highlightEl ;
1473
+
1474
+ if ( self . dragType == "section" ) {
1475
+ parent = parent . closest ( "section, header, footer" ) ;
1476
+ noChildren . section = true ;
1477
+ }
1478
+
1479
+ let parentTagName = parent . tagName . toLowerCase ( ) ;
1480
+
1481
+
1460
1482
try {
1461
1483
if ( ( pos . top < ( y - halfHeight ) ) || ( pos . left < ( x - halfWidth ) ) ) {
1462
1484
if ( noChildren [ parentTagName ] ) {
@@ -1568,6 +1590,10 @@ Vvveb.Builder = {
1568
1590
bsTab . show ( ) ;
1569
1591
}
1570
1592
1593
+ if ( self . dragType == "section" ) {
1594
+ node . scrollIntoView ( { behavior : "smooth" , block : "center" , inline : "center" } ) ;
1595
+ }
1596
+
1571
1597
if ( self . dragMoveMutation === false ) {
1572
1598
Vvveb . Undo . addMutation ( { type : 'childList' ,
1573
1599
target : node . parentNode ,
@@ -1937,15 +1963,16 @@ Vvveb.Builder = {
1937
1963
1938
1964
if ( element && event . which == 1 ) { //left click
1939
1965
document . getElementById ( "component-clone" ) ?. remove ( ) ;
1940
- document . querySelector ( "#section-actions, #highlight-name, #select-box" ) . style . display = "none" ;
1966
+ document . querySelectorAll ( "#section-actions, #highlight-name, #select-box" ) . forEach ( e => e . style . display = "none" ) ;
1941
1967
1942
- if ( element . dataset . dragType == "component" ) {
1968
+ self . dragType = element . dataset . dragType ;
1969
+ if ( self . dragType == "component" ) {
1943
1970
self . component = Vvveb . Components . get ( element . dataset . type ) ;
1944
1971
}
1945
- else if ( element . dataset . dragType == "section" ) {
1972
+ else if ( self . dragType == "section" ) {
1946
1973
self . component = Vvveb . Sections . get ( element . dataset . type ) ;
1947
1974
}
1948
- else if ( element . dataset . dragType == "block" ) {
1975
+ else if ( self . dragType == "block" ) {
1949
1976
self . component = Vvveb . Blocks . get ( element . dataset . type ) ;
1950
1977
}
1951
1978
@@ -2670,6 +2697,11 @@ Vvveb.Gui = {
2670
2697
}
2671
2698
wrapper . style . transform = scale ;
2672
2699
wrapper . style . height = height ;
2700
+ } ,
2701
+
2702
+ setState : function ( ) {
2703
+ Vvveb . StyleManager . setState ( this . value ) ;
2704
+ Vvveb . Builder . reloadComponent ( ) ;
2673
2705
}
2674
2706
}
2675
2707
@@ -2681,6 +2713,9 @@ Vvveb.StyleManager = {
2681
2713
tabletWidth : '768px' ,
2682
2714
doc :false ,
2683
2715
inlineCSS :false ,
2716
+ currentElement :null ,
2717
+ currentSelector :null ,
2718
+ state :"" , //hover, active etc
2684
2719
2685
2720
init : function ( doc ) {
2686
2721
if ( doc ) {
@@ -2788,6 +2823,14 @@ Vvveb.StyleManager = {
2788
2823
return selector . reverse ( ) . join ( " > " ) ;
2789
2824
} ,
2790
2825
2826
+ setState : function ( state ) {
2827
+ this . state = state ;
2828
+ } ,
2829
+
2830
+ addSelectorState : function ( selector ) {
2831
+ return selector + ( this . state ? ":" + this . state : "" ) ;
2832
+ } ,
2833
+
2791
2834
setStyle : function ( element , styleProp , value ) {
2792
2835
if ( typeof ( element ) == "string" ) {
2793
2836
selector = element ;
@@ -2809,6 +2852,8 @@ Vvveb.StyleManager = {
2809
2852
return element ;
2810
2853
}
2811
2854
2855
+ selector = this . addSelectorState ( selector ) ;
2856
+
2812
2857
media = document . getElementById ( "canvas" ) . classList . contains ( "tablet" ) ? "tablet" : document . getElementById ( "canvas" ) . classList . contains ( "mobile" ) ? "mobile" : "desktop" ;
2813
2858
2814
2859
//styles[media][selector][styleProp] = value
@@ -2884,7 +2929,14 @@ Vvveb.StyleManager = {
2884
2929
let el ;
2885
2930
2886
2931
el = element ;
2932
+ if ( el != this . currentElement ) {
2887
2933
selector = this . getSelectorForElement ( el ) ;
2934
+ this . currentElement = el ;
2935
+ this . currentSelector = selector
2936
+ } else {
2937
+ selector = this . currentSelector ;
2938
+ }
2939
+ selector = this . addSelectorState ( selector ) ;
2888
2940
2889
2941
media = document . getElementById ( "canvas" ) . classList . contains ( "tablet" ) ? "tablet" : document . getElementById ( "canvas" ) . classList . contains ( "mobile" ) ? "mobile" : "desktop" ;
2890
2942
@@ -3999,6 +4051,38 @@ Vvveb.FontsManager = {
3999
4051
activeFonts :[ ] ,
4000
4052
providers : { } , //{"google":GoogleFontsManager};
4001
4053
4054
+ addFontList : function ( provider , groupName , fontList ) {
4055
+ let fonts = { } ;
4056
+ let fontNames = [ ] ;
4057
+
4058
+ let fontSelect = generateElements ( "<optgroup label='" + groupName + "'></optgroup>" ) [ 0 ] ;
4059
+ for ( font in fontList ) {
4060
+ fontNames . push ( { "text" :font , "value" :font , "data-provider" : provider } ) ;
4061
+ let option = new Option ( font , font ) ;
4062
+ option . dataset . provider = provider ;
4063
+ //option.style.setProperty("font-family", font);//font preview if the fonts are loaded in editor
4064
+ fontSelect . append ( option ) ;
4065
+ }
4066
+ document . getElementById ( "font-family" ) . append ( fontSelect ) ;
4067
+
4068
+ let list = Vvveb . Components . getProperty ( "_base" , "font-family" ) ;
4069
+ if ( list ) {
4070
+ list . onChange = function ( node , value , input , component ) {
4071
+ let option = input . options [ input . selectedIndex ] ;
4072
+ Vvveb . FontsManager . addFont ( option . dataset . provider , value , node ) ;
4073
+ return node ;
4074
+ } ;
4075
+
4076
+ list . data . options . push ( { optgroup :groupName } ) ;
4077
+ list . data . options = list . data . options . concat ( fontNames ) ;
4078
+
4079
+ Vvveb . Components . updateProperty ( "_base" , "font-family" , { data :list . data } ) ;
4080
+
4081
+ //update default font list
4082
+ fontList = list . data . options ;
4083
+ }
4084
+ } ,
4085
+
4002
4086
addProvider : function ( provider , Obj ) {
4003
4087
this . providers [ provider ] = Obj ;
4004
4088
} ,
@@ -4015,6 +4099,8 @@ Vvveb.FontsManager = {
4015
4099
} ,
4016
4100
4017
4101
removeFont : function ( provider , fontFamily ) {
4102
+ if ( ! provider ) return ;
4103
+
4018
4104
let providerObj = this . providers [ provider ] ;
4019
4105
if ( provider != "default" && providerObj ) {
4020
4106
providerObj . removeFont ( fontFamily ) ;
0 commit comments