77<template >
88 <!-- the background Canvas grid -->
99 <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"
3342 z-layer =" 0"
3443 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" />
41226 <!-- start of right click function-->
42227 <q-menu context-menu >
43228 <q-list color =" black" class =" menu" >
113298 </div >
114299 </q-dialog >
115300
116-
117301 <!-- color selector-->
118302 <q-dialog v-model =" colorModal" @update:model-value =" handleEditColor" >
119303 <!-- may need to change starting to be current state?-->
@@ -231,6 +415,9 @@ export default {
231415 " activeComponentObj" ,
232416 " exportAsTypescript" ,
233417 " noteModalOpen" ,
418+ " activeRouteDisplay" ,
419+ ' selectedElementList' ,
420+ ' activeLayer' ,
234421 " colorModalOpen" ,
235422 " activeRouteDisplay"
236423 ]),
@@ -258,7 +445,6 @@ export default {
258445 );
259446 const relatives = [... val]
260447 // also need to filter out any parents
261-
262448 let parentalLineage = [];
263449 findLineage (relatives)
264450 function findLineage (children ) {
@@ -339,7 +525,8 @@ export default {
339525 if (this .activeComponent !== e .target .id ) {
340526 if (e .target .parentElement ? .classList .contains (' draggable' )) {
341527 this .setActiveComponent (e .target .parentElement .id )
342- } else {
528+ }
529+ else if (typeof ` ${ e .target .id } ` !== ' number' ) {
343530 this .setActiveComponent (e .target .id );
344531 }
345532 }
@@ -818,6 +1005,62 @@ li:hover {
8181005 margin- bottom: 10px ;
8191006}
8201007
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+
8211064.sr - only {
8221065 position: absolute;
8231066 overflow: hidden;
@@ -830,7 +1073,6 @@ li:hover {
8301073 white- space: nowrap;
8311074}
8321075
833-
8341076.colorPicker {
8351077 color: black;
8361078 background: rgba (177 , 171 , 171 , 0.562 );
0 commit comments