@@ -190,8 +190,46 @@ export default class AcademicSubquery extends Morph {
190190 // TODO: Why are we switching focus after editing
191191 // once we start observing?
192192 observer . observe ( this . get ( '#pane' ) , config ) ;
193+
194+ // TODO: falls ich das umbaue, sodass eine subquery einfach als
195+ // html Element in updateView erstellt wird, muss das hier auch da rein
196+ this . addEventListener ( 'dragstart' , ( evt ) => this . onDragStart ( evt ) )
197+ this . addEventListener ( 'dragend' , ( evt ) => this . onDragEnd ( evt ) )
198+ this . addEventListener ( 'dragover' , ( evt ) => this . onDragOver ( evt ) )
199+ this . addEventListener ( 'drop' , ( evt ) => this . onDrop ( evt ) )
200+
201+ this . style . draggable = 'true' ;
202+ // "drag",
203+ // "dragend",
204+ // "dragenter",
205+ // "dragleave",
206+ // "dragover",
207+ // "dragstart",
208+ // "drop",
209+ }
210+
211+ onDragStart ( event ) {
212+ event . dataTransfer . setData ( "element" , event . target . id ) ;
213+ }
214+
215+ onDragEnd ( event ) {
216+ event . dataTransfer . setData ( "element" , event . target . id ) ;
217+ }
218+
219+ onDragOver ( event ) {
220+ event . dataTransfer . setData ( "element" , event . target . id ) ;
221+ }
222+
223+ onDrop ( event ) {
224+ event . preventDefault ( ) ;
225+ var data = event . dataTransfer . getData ( "element" ) ;
226+ event . target . appendChild ( lively . query ( this , '#' + data ) )
193227 }
194228
229+
230+
231+
232+
195233 async setQuery ( q ) {
196234 this . textContent = q ;
197235
@@ -211,21 +249,25 @@ export default class AcademicSubquery extends Morph {
211249 this . ui = await this . queryToView ( o ) ;
212250
213251 this . updateView ( ) ;
214-
215- return this ;
216252 }
217253
218254 async updateView ( ) {
219255 var pane = this . get ( "#pane" )
220256 pane . innerHTML = ""
221257
222258 if ( this . ui ) {
259+ this . ui . style . draggable = 'true'
260+ this . ui . style . userSelect = 'none'
261+ this . ui . addEventListener ( 'dragstart' , ( evt ) => this . onDragStart ( evt ) )
262+ this . ui . addEventListener ( 'dragend' , ( evt ) => this . onDragEnd ( evt ) )
263+ this . ui . addEventListener ( 'dragover' , ( evt ) => this . onDragOver ( evt ) )
264+ this . ui . addEventListener ( 'drop' , ( evt ) => this . onDrop ( evt ) )
223265 pane . appendChild ( this . ui )
224266 }
225267 }
226268
227269 async viewToQuery ( ) {
228- var query = "... parsed from ui"
270+ var query = this . textContent ;
229271
230272 if ( this . isComplex ) {
231273 // TODO: Why is this neccessary?
@@ -242,12 +284,6 @@ export default class AcademicSubquery extends Morph {
242284 query = attr + comp + "'" + val + "'" ;
243285 }
244286
245- if ( query == "... parsed from ui" ) {
246- lively . notify ( "LEFT" , this . leftSubquery )
247- lively . notify ( "RIGHT" , this . rightSubquery )
248- lively . notify ( "COMPLEX" , this . isComplex )
249- }
250-
251287 return query
252288 }
253289
@@ -271,13 +307,14 @@ export default class AcademicSubquery extends Morph {
271307
272308 async queryToView ( object ) {
273309 var span = < span contenteditable = "false" id = "inner" > </ span > ;
310+ var subSpan ;
274311
275312 switch ( object . type ) {
276313 case "conjunction" :
277314 // Textselection in css vielleicht entfernen für Drag & Drop (bzw. erstmal Drag einschalten)
278315 // events.stoppropagation und preventdefault
279316 this . isComplex = true ;
280- var subSpan = < span id = "conjunction" contenteditable = "true " style = "font-size: 150%" > { object . conjunction } </ span > ;
317+ subSpan = < span id = "conjunction" contenteditable = "false " style = "font-size: 150%" > { object . conjunction } </ span > ;
281318 var left = await ( < academic-subquery style = "font-size: smaller;" > </ academic-subquery > ) ;
282319 await left . setQueryObject ( object . left ) ;
283320 this . leftSubquery = left ; // for viewToQuery
@@ -305,15 +342,20 @@ export default class AcademicSubquery extends Morph {
305342 // make span hoverable
306343 span =
307344 < span class = "hover" contenteditable = "false" id = "inner" >
308- < span class = "hovercontent" > < button class = "button" > AND</ button > < button class = "button" > OR</ button > </ span >
345+ < span class = "hovercontent" >
346+ < button class = "button" > AND</ button >
347+ < button class = "button" > OR</ button >
348+ </ span >
309349 </ span > ;
350+
351+ subSpan = < span name = "sub" draggable = 'true' > </ span > ;
310352 [ object . attribute , object . comparator , object . value ] . forEach ( value => {
311- var subSpan = < span name = "sub" > { value } </ span > ;
312- span . appendChild ( subSpan )
313- span . addEventListener ( 'mouseover' , ( evt ) => this . onMouseOver ( evt ) ) ;
314- span . addEventListener ( 'mouseout' , ( evt ) => this . onMouseOut ( evt ) ) ;
353+ subSpan . appendChild ( < span > { value } </ span > )
354+ subSpan . addEventListener ( 'mouseover' , ( evt ) => this . onMouseOver ( evt ) ) ;
355+ subSpan . addEventListener ( 'mouseout' , ( evt ) => this . onMouseOut ( evt ) ) ;
315356 subSpan . style . cursor = "grab" // on drag: grabbing
316357 } ) ;
358+ span . appendChild ( subSpan ) ;
317359 var edit = < span id = "edit" title = "edit query" click = { ( ) => this . enableEditing ( ) } > < i class = "fa fa-pencil" aria-hidden = "true" > </ i > </ span > ;
318360 edit . style . cursor = "pointer" ;
319361 span . appendChild ( edit ) ;
0 commit comments