Skip to content

Commit d80cdd4

Browse files
committed
[academic_query] refactor
SQUASHED: AUTO-COMMIT-src-components-widgets-academic-subquery.js,
1 parent adeb3aa commit d80cdd4

File tree

1 file changed

+38
-47
lines changed

1 file changed

+38
-47
lines changed

src/components/widgets/academic-subquery.js

Lines changed: 38 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)