Skip to content

Commit 9af2dd8

Browse files
committed
[academic_query] refactoring, nothing broken up to this point
SQUASHED: AUTO-COMMIT-src-components-widgets-academic-subquery.js,
1 parent 4092fd3 commit 9af2dd8

File tree

1 file changed

+69
-64
lines changed

1 file changed

+69
-64
lines changed

src/components/widgets/academic-subquery.js

Lines changed: 69 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import Morph from 'src/components/widgets/lively-morph.js';
22
import ohm from "https://unpkg.com/[email protected]/dist/ohm.js";
3+
import MicrosoftAcademicEntities from "src/client/literature.js";
34

45
var g = ohm.grammar(
56
`Academic {
@@ -320,6 +321,7 @@ export default class AcademicSubquery extends Morph {
320321
var edit = this.get('#edit');
321322
edit.innerHTML = "";
322323

324+
// TODO: Hier this.editing = !this.editing und dann updateView()
323325
if (!this.editing) {
324326
this.editing = true;
325327
edit.appendChild(<i class="fa fa-hand-paper-o" aria-hidden="true"></i>);
@@ -344,76 +346,79 @@ export default class AcademicSubquery extends Morph {
344346
onMouseOut(event) {
345347
this.style.color = "black"
346348
}
349+
350+
async buildConjunctionQuery(object) {
351+
var inner = <span id="inner"></span>;
352+
var conjunction = <span id="conjunction" contenteditable="false" style="font-size: 150%">{object.conjunction}</span>;
353+
var left = await (<academic-subquery style="font-size: smaller;"></academic-subquery>);
354+
await left.setQueryObject(object.left);
355+
this.leftSubquery = left; // for viewToQuery
356+
var right = await (<academic-subquery style="font-size: smaller;"></academic-subquery>);
357+
await right.setQueryObject(object.right);
358+
this.rightSubquery = right; // for viewToQuery
359+
inner.appendChild(
360+
<table>
361+
<tr>
362+
<th>{conjunction}</th>
363+
<th>
364+
<table>
365+
<tr>{left}</tr>
366+
<tr>{right}</tr>
367+
</table>
368+
</th>
369+
</tr>
370+
</table>
371+
)
372+
return inner;
373+
}
374+
375+
buildSimpleQuery(object) {
376+
var inner =
377+
<span class="hover" contenteditable="false" id="inner">
378+
<span class="hovercontent">
379+
<button
380+
class="button"
381+
click={() => {
382+
this.setQuery(
383+
"And(" + this.textContent + ", " + this.textContent + ")")
384+
}}>AND</button>
385+
<button
386+
class="button"
387+
click={() => {
388+
this.setQuery(
389+
"Or(" + this.textContent + ", " + this.textContent + ")")
390+
}}>OR</button>
391+
</span>
392+
</span>;
393+
394+
var query = <span name="sub" draggable='true'></span>;
395+
[object.attribute, object.comparator, object.value].forEach(value => {
396+
query.appendChild(<span class="queryPart" name="queryPart">{value} </span>)
397+
query.addEventListener('mouseover', (evt) => this.onMouseOver(evt));
398+
query.addEventListener('mouseout', (evt) => this.onMouseOut(evt));
399+
query.style.cursor = "grab" // on drag: grabbing
400+
});
401+
inner.appendChild(query);
402+
var edit = <span id="edit" title="toggle edit mode" click={() => this.toggleEditing()}><i class="fa fa-pencil" aria-hidden="true"></i></span>;
403+
edit.style.cursor = "pointer";
404+
inner.appendChild(edit);
405+
return inner;
406+
}
347407

348408
async queryToView(object) {
349-
var span = <span contenteditable="false" id="inner"></span>;
350-
var subSpan;
351-
352-
switch(object.type) {
353-
case "conjunction":
354-
// Textselection in css vielleicht entfernen für Drag & Drop (bzw. erstmal Drag einschalten)
355-
// events.stoppropagation und preventdefault
356-
this.isComplex = true;
357-
subSpan = <span id="conjunction" contenteditable="false" style="font-size: 150%">{object.conjunction}</span>;
358-
var left = await (<academic-subquery style="font-size: smaller;"></academic-subquery>);
359-
await left.setQueryObject(object.left);
360-
this.leftSubquery = left; // for viewToQuery
361-
var right = await (<academic-subquery style="font-size: smaller;"></academic-subquery>);
362-
await right.setQueryObject(object.right);
363-
this.rightSubquery = right; // for viewToQuery
364-
span.appendChild(
365-
<table>
366-
<tr>
367-
<th>{subSpan}</th>
368-
<th>
369-
<table>
370-
<tr>{left}</tr>
371-
<tr>{right}</tr>
372-
</table>
373-
</th>
374-
</tr>
375-
</table>
376-
)
377-
break;
409+
var inner = <span id="inner"></span>;
378410

411+
if (object.type == "conjunction") {
412+
this.isComplex = true;
413+
inner = await this.buildConjunctionQuery(object);
414+
} else {
379415
// "composite" or "simple"
380-
default:
381-
this.isComplex = false;
382-
// make span hoverable
383-
span =
384-
<span class="hover" contenteditable="false" id="inner">
385-
<span class="hovercontent">
386-
<button
387-
class="button"
388-
click={() => {
389-
this.setQuery(
390-
"And(" + this.textContent + ", " + this.textContent + ")")
391-
}}>AND</button>
392-
<button
393-
class="button"
394-
click={() => {
395-
this.setQuery(
396-
"Or(" + this.textContent + ", " + this.textContent + ")")
397-
}}>OR</button>
398-
</span>
399-
</span>;
400-
401-
subSpan = <span name="sub" draggable='true'></span>;
402-
[object.attribute, object.comparator, object.value].forEach(value => {
403-
subSpan.appendChild(<span class="queryPart" name="queryPart">{value} </span>)
404-
subSpan.addEventListener('mouseover', (evt) => this.onMouseOver(evt));
405-
subSpan.addEventListener('mouseout', (evt) => this.onMouseOut(evt));
406-
subSpan.style.cursor = "grab" // on drag: grabbing
407-
});
408-
span.appendChild(subSpan);
409-
var edit = <span id="edit" title="toggle edit mode" click={() => this.toggleEditing()}><i class="fa fa-pencil" aria-hidden="true"></i></span>;
410-
edit.style.cursor = "pointer";
411-
span.appendChild(edit);
412-
break;
416+
this.isComplex = false;
417+
inner = this.buildSimpleQuery(object);
413418
}
414-
span.setAttribute("type", object.type);
419+
inner.setAttribute("type", object.type);
415420

416-
var queryElement = <div class="dropTarget"><b>{span}</b></div>;
421+
var queryElement = <div class="dropTarget"><b>{inner}</b></div>;
417422

418423
return queryElement;
419424
}

0 commit comments

Comments
 (0)