@@ -234,22 +234,21 @@ export default class AcademicSubquery extends Morph {
234234
235235
236236 async updateView ( ) {
237+ if ( ! this . ui ) { return }
237238 var pane = this . get ( "#pane" )
238239 pane . innerHTML = ""
239240
240- if ( this . ui ) {
241- this . ui . style . draggable = 'true'
242- this . ui . style . userSelect = 'none'
243- if ( ! this . isComplex ) {
244- this . ui . addEventListener ( 'dragstart' , this . onDragStart )
245- this . ui . addEventListener ( 'dragend' , this . onDragEnd )
246- this . ui . addEventListener ( 'dragover' , this . onDragOver )
247- this . ui . addEventListener ( 'dragenter' , this . onDragEnter )
248- this . ui . addEventListener ( 'dragleave' , this . onDragLeave )
249- this . ui . addEventListener ( 'drop' , this . onDrop )
250- }
251- pane . appendChild ( this . ui )
241+ this . ui . style . draggable = 'true'
242+ this . ui . style . userSelect = 'none'
243+ if ( ! this . isComplex ) {
244+ this . ui . addEventListener ( 'dragstart' , this . onDragStart )
245+ this . ui . addEventListener ( 'dragend' , this . onDragEnd )
246+ this . ui . addEventListener ( 'dragover' , this . onDragOver )
247+ this . ui . addEventListener ( 'dragenter' , this . onDragEnter )
248+ this . ui . addEventListener ( 'dragleave' , this . onDragLeave )
249+ this . ui . addEventListener ( 'drop' , this . onDrop )
252250 }
251+ pane . appendChild ( this . ui )
253252 }
254253
255254 async setQuery ( q ) {
@@ -263,13 +262,12 @@ export default class AcademicSubquery extends Morph {
263262 }
264263
265264 getQuery ( ) {
266- // dasselbe wie viewToQuery?
267265 return this . textContent ;
268266 }
269267
270268 async setQueryObject ( o ) {
271269 this . ast = o
272- this . ui = await this . queryToView ( o ) ;
270+ this . ui = await this . queryToView ( ) ;
273271
274272 this . updateView ( ) ;
275273
@@ -278,6 +276,7 @@ export default class AcademicSubquery extends Morph {
278276 }
279277
280278 async viewToQuery ( ) {
279+ // TODO!
281280 var query = this . textContent ;
282281
283282 if ( this . isComplex ) {
@@ -318,33 +317,22 @@ export default class AcademicSubquery extends Morph {
318317 }
319318
320319 async toggleEditing ( ) {
321- var queries = this . get ( "#inner" ) . querySelectorAll ( "[name='sub']" ) ;
322- var edit = this . get ( '#edit' ) ;
323- //edit.innerHTML = "";
324-
325- // TODO: Hier this.editing = !this.editing und dann updateView()
326320 this . editing = ! this . editing ;
327- this . ui = await this . queryToView ( this . ast ) ; // TODO: sollte das hier in updateView passieren?
321+ this . ui = await this . queryToView ( ) ;
328322 this . updateView ( ) ;
329- // TODO: Edit Zeichen in buildEditable ändern
330-
331- /*
332- edit.appendChild(<i class="fa fa-hand-paper-o" aria-hidden="true"></i>);
333- edit.appendChild(<i class="fa fa-pencil" aria-hidden="true"></i>);
334- */
335323 }
336324
337325 // builds the UI in edit mode
338- async buildEditable ( object ) {
326+ async buildEditable ( ast ) {
339327 var inner = < span id = "inner" > </ span > ;
340328 var query = < span name = "sub" draggable = 'false' > </ span > ;
341329 var schema = await MicrosoftAcademicEntities . generateSchema ( "paper" ) ; // TODO: in der Klasse speichern?
342330
343331 // attribute
344332 var attribute = < select name = 'attribute' id = 'attribute' > </ select > ;
345- var selectedAttribute ;
333+ var selectedAttribute ; // TODO: Klassenvariable?
346334 schema . filter ( attr => attr . operations != "None" ) . forEach ( option => {
347- var selected = ( option . name == object . attribute ) ;
335+ var selected = ( option . name == ast . attribute ) ;
348336 if ( selected ) { selectedAttribute = option ; }
349337 attribute . options . add ( new Option ( option . name , option . name , selected , selected ) )
350338 } )
@@ -365,34 +353,36 @@ export default class AcademicSubquery extends Morph {
365353 var comparator = < select name = 'comparator' id = 'comparator' > </ select > ;
366354 selectedAttribute . operations . split ( ", " )
367355 . map ( operation => mapOperationToSymbol ( operation ) ) // map words to arrays of symbols
368- . flat ( ) // flatten array of arrays
356+ . flat ( )
369357 . filter ( ( item , pos , self ) => self . indexOf ( item ) == pos ) // deduplicate
370358 . forEach ( option => {
371- var selected = ( option == object . comparator ) ;
359+ var selected = ( option == ast . comparator ) ;
372360 comparator . options . add ( new Option ( option , option , selected , selected ) )
373361 } ) ;
374362 query . appendChild ( comparator ) ;
375363
376364 // value
377- var value = < input id = "value" name = "value" value = { object . value } > </ input > ;
365+ var value = < input id = "value" name = "value" value = { ast . value } > </ input > ;
378366 // TODO: fit input type to attribute type
379367 query . appendChild ( value ) ;
380368
381369 inner . appendChild ( query ) ;
382- var edit = < span id = "edit" title = "toggle edit mode" click = { ( ) => this . toggleEditing ( ) } > < i class = "fa fa-pencil" aria-hidden = "true" > </ i > </ span > ;
370+
371+ var edit = < span id = "edit" title = "toggle edit mode" click = { ( ) => this . toggleEditing ( ) } > < i class = "fa fa-hand-paper-o" aria-hidden = "true" > </ i > </ span > ;
383372 edit . style . cursor = "pointer" ;
384373 inner . appendChild ( edit ) ;
374+
385375 return inner ;
386376 }
387377
388- async buildConjunctionQuery ( object ) {
378+ async buildConjunctionQuery ( ast ) {
389379 var inner = < span id = "inner" > </ span > ;
390- var conjunction = < span id = "conjunction" contenteditable = "false" style = "font-size: 150%" > { object . conjunction } </ span > ;
380+ var conjunction = < span id = "conjunction" contenteditable = "false" style = "font-size: 150%" > { ast . conjunction } </ span > ;
391381 var left = await ( < academic-subquery style = "font-size: smaller;" > </ academic-subquery > ) ;
392- await left . setQueryObject ( object . left ) ;
382+ await left . setQueryObject ( ast . left ) ;
393383 this . leftSubquery = left ; // for viewToQuery
394384 var right = await ( < academic-subquery style = "font-size: smaller;" > </ academic-subquery > ) ;
395- await right . setQueryObject ( object . right ) ;
385+ await right . setQueryObject ( ast . right ) ;
396386 this . rightSubquery = right ; // for viewToQuery
397387 inner . appendChild (
398388 < table >
@@ -418,7 +408,7 @@ export default class AcademicSubquery extends Morph {
418408 this . style . color = "black"
419409 }
420410
421- buildSimpleQuery ( object ) {
411+ buildSimpleQuery ( ast ) {
422412 var inner =
423413 < span class = "hover" contenteditable = "false" id = "inner" >
424414 < span class = "hovercontent" >
@@ -437,11 +427,11 @@ export default class AcademicSubquery extends Morph {
437427 </ span >
438428 </ span > ;
439429 var query = < span name = "sub" draggable = 'true' > </ span > ;
440- [ object . attribute , object . comparator , object . value ] . forEach ( value => {
430+ [ ast . attribute , ast . comparator , ast . value ] . forEach ( value => {
441431 query . appendChild ( < span class = "queryPart" name = "queryPart" > { value } </ span > )
442432 query . addEventListener ( 'mouseover' , ( evt ) => this . onMouseOver ( evt ) ) ;
443433 query . addEventListener ( 'mouseout' , ( evt ) => this . onMouseOut ( evt ) ) ;
444- query . style . cursor = "grab" // on drag: grabbing
434+ query . style . cursor = "grab"
445435 } ) ;
446436 inner . appendChild ( query ) ;
447437 var edit = < span id = "edit" title = "toggle edit mode" click = { ( ) => this . toggleEditing ( ) } > < i class = "fa fa-pencil" aria-hidden = "true" > </ i > </ span > ;
@@ -450,20 +440,21 @@ export default class AcademicSubquery extends Morph {
450440 return inner ;
451441 }
452442
453- async queryToView ( object ) {
443+ async queryToView ( ) {
444+ const ast = this . ast ;
454445 var inner = < span id = "inner" > </ span > ;
455- if ( object . type == "conjunction" ) {
446+ if ( ast . type == "conjunction" ) {
456447 this . isComplex = true ;
457- inner = await this . buildConjunctionQuery ( object ) ;
448+ inner = await this . buildConjunctionQuery ( ast ) ;
458449 } else { // "composite" or "simple"
459450 this . isComplex = false ;
460451 if ( this . editing ) { // edit mode
461- inner = await this . buildEditable ( object ) ;
462- } else { // drag&drop / read mode
463- inner = this . buildSimpleQuery ( object ) ;
452+ inner = await this . buildEditable ( ast ) ;
453+ } else { // read mode
454+ inner = this . buildSimpleQuery ( ast ) ;
464455 }
465456 }
466- inner . setAttribute ( "type" , object . type ) ;
457+ inner . setAttribute ( "type" , ast . type ) ;
467458
468459 var queryElement = < div class = "dropTarget" > < b > { inner } </ b > </ div > ;
469460
0 commit comments