7
7
<template >
8
8
<!-- the background Canvas grid -->
9
9
<div class =" component-display grid-bg" :style =" mockBg" v-on:click =" handleClick" v-on:click.right =" handleRight" >
10
-
11
- <div class =" cssContainer" >
12
- <!-- This is the actual component box -->
13
- <!-- https://www.npmjs.com/package/vue-draggable-resizable -->
14
- <p class =" cssContainerText" >
15
- CSS Container</p >
16
-
17
-
18
- <vue-draggable-resizable class-name =" component-box" v-for =" componentData in activeRouteArray" ref =" boxes"
19
- :key =" componentData.componentName" :id =" componentData.componentName" :x =" componentData.x" :y =" componentData.y"
20
- :z =" componentData.z" :w =" componentData.w" :h =" componentData.h" :preventDeactivation =" true"
21
- @activated =" onActivated(componentData)" @deactivated =" onDeactivated(componentData)" @dragstop =" finishedDrag"
22
- @resizestop =" finishedResize" :onDragStart =" recordInitialPosition" :onResizeStart =" recordInitialSize"
23
- :style =" { 'background-color': componentData.color }" :parent =" true" >
24
-
25
- <div class =" component-title" >
26
- <p >{{ componentData.componentName }}</p >
27
- </div >
28
- <q-icon v-if =" componentData.componentName === this.activeComponent" size =" 25px" z-layer =" 0" name =" edit_note"
29
- class =" compNoteLogo" @click =" handleAddNotes" />
30
-
31
- <!-- <q-icon "
32
- size="30px"
10
+ <div class =" cssContainer" >
11
+ <!-- This is the actual component box -->
12
+ <!-- https://www.npmjs.com/package/vue-draggable-resizable -->
13
+ <p class =" cssContainerText" >
14
+ CSS Container</p >
15
+ <vue-draggable-resizable
16
+ class-name =" component-box"
17
+ v-for =" componentData in activeRouteArray"
18
+ ref =" boxes"
19
+ :key =" componentData.componentName"
20
+ :id =" componentData.componentName"
21
+ :x =" componentData.x"
22
+ :y =" componentData.y"
23
+ :z =" componentData.z"
24
+ :w =" componentData.w"
25
+ :h =" componentData.h"
26
+ :preventDeactivation =" true"
27
+ @activated =" onActivated(componentData)"
28
+ @deactivated =" onDeactivated(componentData)"
29
+ @dragstop =" finishedDrag"
30
+ @resizestop =" finishedResize"
31
+ :onDragStart =" recordInitialPosition"
32
+ :onResizeStart =" recordInitialSize"
33
+ :style =" {'background-color': componentData.color}"
34
+ :parent =" true"
35
+ >
36
+
37
+ <div class =" component-title" >
38
+ <p >{{ componentData.componentName }}</p >
39
+ </div >
40
+ <q-icon v-if =" componentData.componentName === this.activeComponent"
41
+ size =" 25px"
33
42
z-layer =" 0"
34
43
name =" edit_note"
35
- class="compNoteLogoEmpty"
36
- @click="handleAddNotes" /> -->
37
-
38
- <q-icon v-if =" componentData.componentName === this.activeComponent" size =" 25px" z-layer =" 0" name =" palette"
39
- class =" colorLogo" @click =" handleEditColor" />
40
-
44
+ class =" compNoteLogo"
45
+ @click =" handleAddNotes"
46
+ />
47
+ <!-- Rendering HTML Elements for each Component -->
48
+ <div v-for =" element in this.componentMap[componentData.componentName].htmlList" :key =" element.id+ new Date()" >
49
+ <div v-if =" element.text === 'button'"
50
+ class =" htmlButton"
51
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '70%'},
52
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '60%'},
53
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '25%'},
54
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '10%'},
55
+ element.z !== 0 ? {'z-index' : element.z + '%'} : {'z-index' : '0'},
56
+ {'background-color': componentData.color}]"
57
+ >
58
+ <p class =" innerHtmlText" >{{element.note !== '' ? element.note : element.text}}</p >
59
+ </div >
60
+ <div v-if =" element.text === 'div'"
61
+ class =" htmlDiv"
62
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '10%'},
63
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '10%'},
64
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '80%'},
65
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '75%'},
66
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
67
+ {'background-color': componentData.color}]"
68
+ >
69
+ <p class =" innerHtmlText" style =" font-size : 3em " >{{element.note !== '' ? element.note : element.text}}</p >
70
+ </div >
71
+ <div v-if =" element.text === 'footer'" class =" htmlFooter" ></div >
72
+ <div v-if =" element.text === 'form'"
73
+ class =" htmlGeneral"
74
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '50%'},
75
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '10%'},
76
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '80%'},
77
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '40%'},
78
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
79
+ {'background-color': componentData.color}]"
80
+ >
81
+ <p class =" innerHtmlText" style =" font-size : 3em " >{{element.note !== '' ? element.note : element.text}}</p >
82
+ </div >
83
+ <div v-if =" element.text === 'h1'"
84
+ class =" htmlHead"
85
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '10%'},
86
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '5%'},
87
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '90%'},
88
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '20%'},
89
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
90
+ {'background-color': componentData.color}]"
91
+ >
92
+ <p class =" innerHtmlText" style =" font-size : 4em " >{{element.note !== '' ? element.note :element.text}}</p >
93
+ </div >
94
+ <div v-if =" element.text === 'h2'"
95
+ class =" htmlHead"
96
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '15%'},
97
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '10%'},
98
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '80%'},
99
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '15%'},
100
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
101
+ {'background-color': componentData.color}]"
102
+ >
103
+ <p class =" innerHtmlText" style =" font-size : 3em " >{{element.note !== '' ? element.note : element.text}}</p >
104
+ </div >
105
+ <div v-if =" element.text === 'h3'"
106
+ class =" htmlHead"
107
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '18%'},
108
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '15%'},
109
+ element.w !== 0 ? {'width': element.w} + '%' : {'width': '70%'},
110
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '12%'},
111
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
112
+ {'background-color': componentData.color}]"
113
+ >
114
+ <p class =" innerHtmlText" style =" font-size : 2.5em " >{{element.note !== '' ? element.note : element.text }}</p >
115
+ </div >
116
+ <div v-if =" element.text === 'h4'"
117
+ class =" htmlHead"
118
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '20%'},
119
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '20%'},
120
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '60%'},
121
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '10%'},
122
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
123
+ {'background-color': componentData.color}]"
124
+ >
125
+ <p class =" innerHtmlText" style =" font-size : 2em " >{{element.note !== '' ? element.note : element.text}}</p >
126
+ </div >
127
+ <div v-if =" element.text === 'h5'"
128
+ class =" htmlHead"
129
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '20%'},
130
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '25%'},
131
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '50%'},
132
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '8%'},
133
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
134
+ {'background-color': componentData.color}]"
135
+ >
136
+ <p class =" innerHtmlText" style =" font-size : 1.5em " >{{element.note !== '' ? element.note : element.text}}</p >
137
+ </div >
138
+ <div v-if =" element.text === 'h6'"
139
+ class =" htmlHead"
140
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '20%'},
141
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '30%'},
142
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '40%'},
143
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '5%'},
144
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
145
+ {'background-color': componentData.color}]"
146
+ >
147
+ <p class =" innerHtmlText" style =" font-size : 1em " >{{element.note !== '' ? element.note : element.text}}</p >
148
+ </div >
149
+ <div v-if =" element.text === 'header'" class =" htmlHeader" ></div >
150
+ <div v-if =" element.text === 'img'"
151
+ class =" htmlGeneral"
152
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '20%'},
153
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '20%'},
154
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '40%'},
155
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '40%'},
156
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
157
+ {'background-color': componentData.color}]"
158
+ >
159
+ <p class =" innerHtmlText" style =" font-size : 3em " >{{element.note !== '' ? element.note : element.text}}</p >
160
+ </div >
161
+ <input v-if =" element.text === 'input'" class =" htmlInput" />
162
+ <div v-if =" element.text === 'list'"
163
+ class =" htmlList"
164
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '30%'},
165
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '30%'},
166
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '60%'},
167
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '10%'},
168
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
169
+ {'background-color': componentData.color}]"
170
+ >
171
+ <p class =" innerHtmlText" style =" font-size : 2em " >{{element.note !== '' ? element.note : element.text}}</p >
172
+ </div >
173
+ <div v-if =" element.text === 'list-ol'"
174
+ class =" htmlGeneral"
175
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '20%'},
176
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '10%'},
177
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '80%'},
178
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '40%'},
179
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
180
+ {'background-color': componentData.color}]"
181
+ >
182
+ <p class =" innerHtmlText" style =" font-size : 1.2em " >{{element.note !== '' ? element.note : element.text}}
183
+ <ol >
184
+ <li >1</li >
185
+ <li >2</li >
186
+ <li >3</li >
187
+ </ol >
188
+ </p >
189
+ </div >
190
+ <div v-if =" element.text === 'list-ul'"
191
+ class =" htmlGeneral"
192
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '20%'},
193
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '10%'},
194
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '80%'},
195
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '40%'},
196
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
197
+ {'background-color': componentData.color}]"
198
+ >
199
+ <p class =" innerHtmlText" style =" font-size : 1.5em " >{{element.note !== '' ? element.note : element.text}}
200
+ <ol >
201
+ <li >-</li >
202
+ <li >-</li >
203
+ <li >-</li >
204
+ </ol >
205
+ </p >
206
+ </div >
207
+ <div v-if =" element.text === 'paragraph'"
208
+ class =" htmlGeneral"
209
+ :style =" [element.x !== 0 ? {'top': element.x + '%'} : {'top': '50%'},
210
+ element.y !== 0 ? {'left': element.y + '%'} : {'left': '10%'},
211
+ element.w !== 0 ? {'width': element.w + '%'} : {'width': '80%'},
212
+ element.h !== 0 ? {'height' : element.h + '%'} : {'height' : '40%'},
213
+ element.z !== 0 ? {'z-index' : element.z} : {'z-index' : '0'},
214
+ {'background-color': componentData.color}]"
215
+ >
216
+ <p >{{element.note !== '' ? element.note : element.text }}</p >
217
+ </div >
218
+ <div v-if =" element.text === 'navbar'" class =" htmlNavbar" ></div >
219
+ </div >
220
+ <q-icon v-if =" componentData.componentName === this.activeComponent"
221
+ size =" 25px"
222
+ z-layer =" 0"
223
+ name =" palette"
224
+ class =" colorLogo"
225
+ @click =" handleEditColor" />
41
226
<!-- start of right click function-->
42
227
<q-menu context-menu >
43
228
<q-list color =" black" class =" menu" >
113
298
</div >
114
299
</q-dialog >
115
300
116
-
117
301
<!-- color selector-->
118
302
<q-dialog v-model =" colorModal" @update:model-value =" handleEditColor" >
119
303
<!-- may need to change starting to be current state?-->
@@ -231,6 +415,9 @@ export default {
231
415
" activeComponentObj" ,
232
416
" exportAsTypescript" ,
233
417
" noteModalOpen" ,
418
+ " activeRouteDisplay" ,
419
+ ' selectedElementList' ,
420
+ ' activeLayer' ,
234
421
" colorModalOpen" ,
235
422
" activeRouteDisplay"
236
423
]),
@@ -258,7 +445,6 @@ export default {
258
445
);
259
446
const relatives = [... val]
260
447
// also need to filter out any parents
261
-
262
448
let parentalLineage = [];
263
449
findLineage (relatives)
264
450
function findLineage (children ) {
@@ -339,7 +525,8 @@ export default {
339
525
if (this .activeComponent !== e .target .id ) {
340
526
if (e .target .parentElement ? .classList .contains (' draggable' )) {
341
527
this .setActiveComponent (e .target .parentElement .id )
342
- } else {
528
+ }
529
+ else if (typeof ` ${ e .target .id } ` !== ' number' ) {
343
530
this .setActiveComponent (e .target .id );
344
531
}
345
532
}
@@ -818,6 +1005,62 @@ li:hover {
818
1005
margin- bottom: 10px ;
819
1006
}
820
1007
1008
+ .htmlButton {
1009
+ position: absolute;
1010
+ margin: .5em ;
1011
+ border- style: solid;
1012
+ border: 2em ;
1013
+ border- radius: 1.5 % ;
1014
+ }
1015
+
1016
+ .htmlDiv {
1017
+ position: absolute;
1018
+ margin: .5em ;
1019
+ border- radius: 1.5 % ;
1020
+ border- style: solid;
1021
+ }
1022
+
1023
+ .htmlFooter {
1024
+ position: absolute;
1025
+ width: 100 % ;
1026
+ height: 10 % ;
1027
+ top: 90 % ;
1028
+ z- index: - 1 ;
1029
+ border- radius: 1.5 % ;
1030
+ background- color: $primary;
1031
+ }
1032
+
1033
+ .htmlGeneral {
1034
+ position: absolute;
1035
+ color: $menutext;
1036
+ border- radius: 1.5 % ;
1037
+ border- style: solid;
1038
+ }
1039
+
1040
+ .htmlHead {
1041
+ position: absolute;
1042
+ color: $menutext;
1043
+ font- weight: bolder ! important;
1044
+ text- overflow: clip;
1045
+ }
1046
+
1047
+ .innerHtmlText {
1048
+ position: absolute;
1049
+ text- align: center;
1050
+ opacity: 0.5 ;
1051
+ overflow: hidden;
1052
+ text- overflow: clip;
1053
+ }
1054
+
1055
+ .htmlNavbar {
1056
+ position: absolute;
1057
+ width: 100 % ;
1058
+ background- color: $primary;
1059
+ height: 10 % ;
1060
+ top: 0 % ;
1061
+ z- index: - 1 ;
1062
+ }
1063
+
821
1064
.sr - only {
822
1065
position: absolute;
823
1066
overflow: hidden;
@@ -830,7 +1073,6 @@ li:hover {
830
1073
white- space: nowrap;
831
1074
}
832
1075
833
-
834
1076
.colorPicker {
835
1077
color: black;
836
1078
background: rgba (177 , 171 , 171 , 0.562 );
0 commit comments