Skip to content

Commit 662d523

Browse files
committed
Merge branch 'gh-pages' of https://github.com/LivelyKernel/lively4-core into gh-pages
2 parents aeff1bd + 74682d4 commit 662d523

File tree

5 files changed

+565
-490
lines changed

5 files changed

+565
-490
lines changed
Lines changed: 5 additions & 242 deletions
Original file line numberDiff line numberDiff line change
@@ -1,248 +1,11 @@
1-
import ohm from "https://unpkg.com/[email protected]/dist/ohm.js";
2-
3-
const exampleQueries = [
4-
"Composite(AA.AuN='mike smith')",
5-
"Ti='indexing by latent seman'",
6-
"Ti=='indexing by latent semantic analysis'",
7-
"Composite(AA.AuN=='susan t dumais')",
8-
"Y=[2010, 2012)",
9-
"Y=[2010, 2012]",
10-
"Y<=2010",
11-
"Y>=2005",
12-
"Y<2010",
13-
"D>'2010-02-03'",
14-
"D=['2010-02-03','2010-02-05']",
15-
"D='2010-02-03'",
16-
"And(Y=1985, Ti='disordered electronic systems')",
17-
"Or(Ti='disordered electronic systems', Ti='fault tolerance principles and practice')",
18-
"And(Or(Y=1985,Y=2008), Ti='disordered electronic systems')",
19-
"Composite(And(AA.AuN='mike smith',AA.AfN='harvard university'))",
20-
"And(Composite(AA.AuN='mike smith'),Composite(AA.AfN='harvard university'))"
21-
]
22-
23-
24-
/*function createUILayer(object, key) {
25-
var subDiv = <div id="innerDiv" style="margin: 5px; border: 1px solid gray;">{key}</div>;
26-
var valueOrObject = object[key];
27-
if (typeof(valueOrObject) == "object") {
28-
Object.keys(valueOrObject).map(k => {
29-
subDiv.appendChild(createUILayer(valueOrObject, k));
30-
});
31-
} else {
32-
var input = <input value={valueOrObject}></input>;
33-
subDiv.appendChild(input);
34-
}
35-
return subDiv;
36-
}*/
37-
38-
function parseQuery(object) {
39-
var subDiv = <div id="innerDiv" style="margin: 5px; border: 1px solid gray;"></div>;
40-
41-
switch(object.type) {
42-
case "simple":
43-
[object.attribute, object.comparator, object.value].forEach(value => {
44-
var input = <input value={value}></input>;
45-
subDiv.appendChild(input)
46-
});
47-
break;
48-
case "conjunction":
49-
var input = <input value={object.conjunction}></input>;
50-
var left = parseQuery(object.left);
51-
var right = parseQuery(object.right);
52-
[input, left, right].forEach(element => {
53-
subDiv.appendChild(element);
54-
});
55-
break;
56-
case "composite":
57-
[object.attribute, object.comparator, object.value].forEach(value => {
58-
var input = <input value={value}></input>;
59-
subDiv.appendChild(input)
60-
});
61-
}
62-
return subDiv;
63-
}
64-
1+
import AcademicQuery from 'src/components/widgets/academic-query.js';
652

663
export default class LeoUIExample{
674
static async create () {
5+
var queryWidget = await (<academic-query></academic-query>);
6+
queryWidget.setQuery("And(Or(Y='1985', Y='2008'), Ti='disordered electronic systems')");
7+
//queryWidget.setQuery("Y='1985'");
688

69-
// var hello = <div id="helloDiv" draggable="true" click={() => lively.notify('hi')}>
70-
// Hi
71-
// </div>
72-
73-
// var world = <div id="worldDiv">
74-
// World
75-
// </div>
76-
77-
// let description = <p id="description"></p>
78-
79-
// hello.addEventListener('dragstart', dragStart);
80-
// hello.addEventListener('dragend', dragEnd);
81-
82-
// world.addEventListener('drop', drop);
83-
84-
var g = ohm.grammar(
85-
`Academic {
86-
Exp =
87-
AcademicQuery
88-
89-
AcademicQuery = Attribute Comparator Value -- simple
90-
| ("And" | "Or") "(" AcademicQuery "," AcademicQuery ")" -- complex
91-
| "Composite(" CompositeQuery ")" -- composite
92-
CompositeQuery = Attribute "." Attribute Comparator Value -- simple
93-
| ("And" | "Or") "(" CompositeQuery "," CompositeQuery ")" -- complex
94-
95-
Comparator =
96-
PartialComparator "="?
97-
PartialComparator =
98-
"=" | "<" | ">"
99-
100-
Attribute (an attribute) =
101-
letter letter? letter?
102-
103-
Value (a value) =
104-
"\'" alnum* "\'" -- string
105-
| Number
106-
| Date
107-
| ( "[" | "(" ) Number "," Number ( "]" | ")" ) -- numberRange
108-
| ( "[" | "(" ) Date "," Date ( "]" | ")" ) -- dateRange
109-
110-
Number =
111-
digit+
112-
Date =
113-
"\'" Number "-" Number "-" Number "\'"
114-
}`
115-
);
116-
117-
var s = g.createSemantics();
118-
119-
s.addOperation(
120-
'interpret', {
121-
Exp: function(e) {
122-
return e.interpret();
123-
},
124-
125-
AcademicQuery_simple: function(attribute, comparator, value) {
126-
return {
127-
"attribute" : attribute.interpret(),
128-
"comparator" : comparator.interpret(),
129-
"value" : value.interpret(),
130-
"type" : "simple"
131-
}
132-
},
133-
AcademicQuery_complex: function(conjunction, _1, left, _2, right, _3) {
134-
return {
135-
"conjunction" : conjunction.sourceString,
136-
"left" : left.interpret(),
137-
"right" : right.interpret(),
138-
"type" : "conjunction"
139-
}
140-
},
141-
AcademicQuery_composite: function(_1, query, _2) {
142-
return query.interpret();
143-
},
144-
145-
CompositeQuery_simple: function(mainAttribute, _, secondaryAttribute, comparator, value) {
146-
// would it make sense to split main and secondary attribute?
147-
var main = mainAttribute.interpret();
148-
var secondary = secondaryAttribute.interpret();
149-
return {
150-
"attribute" : main + "." + secondary,
151-
"comparator" : comparator.interpret(),
152-
"value" : value.interpret(),
153-
"type" : "composite"
154-
}
155-
},
156-
CompositeQuery_complex: function(conjunction, _1, left, _2, right, _3) {
157-
return {
158-
"conjunction" : conjunction.sourceString,
159-
"left" : left.interpret(),
160-
"right" : right.interpret(),
161-
"type" : "conjunction"
162-
}
163-
},
164-
165-
Comparator: function(main, secondary) {
166-
return [main.interpret(), secondary.sourceString].join('');
167-
},
168-
PartialComparator: function(comparator) {
169-
return comparator.sourceString;
170-
},
171-
172-
Attribute: function(a, b, c) {
173-
return [a.interpret(), b.interpret(), c.interpret()].join('');
174-
},
175-
176-
Value: function(value) {
177-
return value.interpret();
178-
},
179-
Value_string: function(_1, string, _2) {
180-
return string.sourceString;
181-
},
182-
Value_numberRange: function(leftBracket, nLeft, _, nRight, rightBracket) {
183-
return "TODO";//arguments.map(a => {a.sourceString}).join('');
184-
},
185-
Value_dateRange: function(leftBracket, dLeft, _, dRight, rightBracket) {
186-
return "TODO";//arguments.map(a => {a.sourceString}).join('');
187-
},
188-
189-
Number: function(n) {
190-
return parseFloat(n.sourceString);
191-
},
192-
Date: function(_1, year, _2, month, _3, day, _4) {
193-
return new Date(year.interpret(),
194-
month.interpret(),
195-
day.interpret())
196-
},
197-
198-
letter: function(a) {
199-
return a.sourceString;
200-
}
201-
}
202-
)
203-
204-
// "Test"
205-
exampleQueries.forEach(q => {
206-
var m = g.match(q);
207-
if (m.failed()) {
208-
lively.notify("Failed query: ", q)
209-
} else {
210-
lively.notify(q, s(m).interpret());
211-
}
212-
})
213-
214-
215-
// function dragStart(event) {
216-
// description.innerHTML = "dragging";
217-
// event.dataTransfer.setData("element", event.target.id);
218-
// }
219-
220-
// function dragEnd(event) {
221-
// description.innerHTML = "";
222-
// }
223-
224-
// function drop(event) {
225-
// event.preventDefault();
226-
// var data = event.dataTransfer.getData("element");
227-
// console.log("Datatransfer Types" + event.dataTransfer.types);
228-
// event.target.appendChild(lively.query(this, '#'+data))
229-
// }
230-
231-
var query = "And(Or(Y='1985', Y='2008'), Ti='disordered electronic systems')";
232-
var match = g.match(query);
233-
var queryObject = s(match).interpret();
234-
235-
var input = <input id="queryInput" value={query} style="width: 100%"></input>
236-
var div = <div id="outerDiv" style="padding-right : 20px">
237-
{input}
238-
</div>
239-
240-
/*Object.keys(queryObject).forEach(key => {
241-
div.appendChild(createUILayer(queryObject, key));
242-
});*/
243-
244-
div.appendChild(parseQuery(queryObject));
245-
246-
return div;
9+
return <div>{queryWidget}</div>;
24710
}
24811
}

0 commit comments

Comments
 (0)