Skip to content

Commit d0ceae7

Browse files
committed
[academic_query] make query element draggable and add event handlers, but beware, I might have broke something_ WIP
SQUASHED: AUTO-COMMIT-src-components-widgets-academic-query.js,AUTO-COMMIT-src-components-widgets-academic-subquery.html,AUTO-COMMIT-src-components-widgets-academic-subquery.js,AUTO-COMMIT-src-components-widgets-lively-bibtex-entry.js,
1 parent a15c28c commit d0ceae7

File tree

4 files changed

+62
-20
lines changed

4 files changed

+62
-20
lines changed

src/components/widgets/academic-query.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ export default class AcademicQuery extends Morph {
7676
}
7777

7878
async livelyExample() {
79-
this.setQuery("And(Or(Y='1985', Y='2008'), Ti='disordered electronic systems')")
79+
this.setQuery("And(Or(Y = '1985', Y = '2008'), Ti = 'disordered electronic systems')")
8080
//this.setQuery("And(O='abc', Y='1000')")
8181
//this.setQuery("Y='1000'")
8282
}

src/components/widgets/academic-subquery.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
position: absolute;
2828
bottom: 125%;
2929
left: 50%;
30-
margin-bottom: -4px;
30+
margin-bottom: -3px;
3131

3232
/* Fade in hover */
3333
opacity: 0;

src/components/widgets/academic-subquery.js

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

src/components/widgets/lively-bibtex-entry.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ export default class LivelyBibtexEntry extends Morph {
116116
this.pane.innerHTML = ""
117117

118118
try {
119-
var authoText = this.parseAuthors(latexconv.convertLaTeXToUnicode(this.author)).join(", ");
119+
var authorText = this.parseAuthors(latexconv.convertLaTeXToUnicode(this.author)).join(", ");
120120
} catch (e) {
121-
authoText = this.author;
121+
authorText = this.author;
122122
}
123123
try {
124124
var titleText = latexconv.convertLaTeXToUnicode(this.title);
@@ -134,7 +134,7 @@ export default class LivelyBibtexEntry extends Morph {
134134
}
135135
var entry = <div id="entry">
136136
<div id="draghandle" draggable="true"></div>
137-
[{key}] <span id="author">{authoText}</span>. <span id="year">{this.year}</span>.
137+
[{key}] <span id="author">{authorText}</span>. <span id="year">{this.year}</span>.
138138
<span id="title">{titleText}</span>
139139
{misc}
140140
<span id="edit" title="edit entry" click={() => this.enableEditing()}><i class="fa fa-pencil" aria-hidden="true"></i></span>

0 commit comments

Comments
 (0)