Skip to content

Commit f103cfd

Browse files
committed
Add mindmap sample (work in progress)
1 parent f2d39c9 commit f103cfd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+2400
-0
lines changed

mindmap/.gitignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
logs
2+
project/project
3+
project/target
4+
target
5+
tmp
6+
.history
7+
dist

mindmap/README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# MindMap
2+
3+
This sample demonstrates the following features:
4+
5+
* Sharing HTML templates between server and client ;
6+
* Sharing SVG rendering process between server and client ;
7+
* Sharing the domain model between server and client ;
8+
* Generation of variants of the application (without modifying its code):
9+
* Performing incremental UI updates on server side (requires less CPU but more memory) ;
10+
* Rendering the whole UI on server side (requires more CPU but less memory) ;
11+
* Targetting different browsers ;
12+
* Pre-rendering on the server (good for SEO) or on the client (requires a more powerful client) ;
13+
14+
# Run the application
15+
16+
* Setup [js-scala](http://github.com/js-scala/js-scala), [build-play20](http://github.com/js-scala/build-play20), [forest](http://github.com/js-scala/forest) ;
17+
* Run Play! virtualized ;
Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
package generated {
2+
/*****************************************
3+
Emitting Generated Code
4+
*******************************************/
5+
class ListMaps extends ((scala.collection.immutable.List[RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint])=>(scala.xml.Node)) {
6+
def apply(x0:scala.collection.immutable.List[RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint]): scala.xml.Node = {
7+
val x13 = x0.flatMap { x1 =>
8+
val x4 = x1.content
9+
val x5 = x4.name
10+
val x6 = {xml.Text(x5)}
11+
val x2 = x1.id
12+
val x3 = "/"+x2
13+
val x8 = <a href={x3}>{x6}</a>
14+
val x10 = <li>{x8}</li>
15+
val x11 = List(x10)
16+
x11
17+
}
18+
val x14 = List()
19+
val x15 = x13 ::: x14
20+
val x16 = <ul>{x15}</ul>
21+
val x17 = {xml.Text("Create a ")}
22+
val x18 = {xml.Text("new mind map")}
23+
val x20 = <strong>{x18}</strong>
24+
val x21 = {xml.Text(": ")}
25+
val x22 = <input type={"text"} placeholder={"Name"} />
26+
val x24 = <p>{List(x17, x20, x21, x22)}</p>
27+
val x26 = <div>{List(x16, x24)}</div>
28+
x26
29+
}
30+
}
31+
/*****************************************
32+
End of Generated Code
33+
*******************************************/
34+
/*****************************************
35+
Emitting Generated Code
36+
*******************************************/
37+
class ShowMap extends ((RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint)=>(scala.collection.immutable.List[scala.xml.Node])) {
38+
def apply(x28:RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint): scala.collection.immutable.List[scala.xml.Node] = {
39+
val x29 = <defs />
40+
val x30 = x28.vertices
41+
val x49 = (0).toString()
42+
val x55 = x30.map{
43+
x31 =>
44+
val x38 = x31.width
45+
val x40 = (x38).toString()
46+
val x39 = x31.height
47+
val x41 = (x39).toString()
48+
val x42 = <rect width={x40} height={x41} />
49+
val x45 = x31.content
50+
val x46 = {xml.Text(x45)}
51+
val x43 = "height: "+x39
52+
val x44 = x43+"px;"
53+
val x48 = <p style={x44}>{x46}</p>
54+
val x51 = <foreignObject x={x49} y={x49} width={x40} height={x41}>{x48}</foreignObject>
55+
val x32 = x31.posx
56+
val x33 = "translate("+x32
57+
val x34 = x33+","
58+
val x35 = x31.posy
59+
val x36 = x34+x35
60+
val x37 = x36+")"
61+
val x53 = <g class={"vertex"} transform={x37}>{List(x42, x51)}</g>
62+
x53
63+
}
64+
val x56 = x28.edges
65+
val x84 = x56.map{
66+
x57 =>
67+
val x58 = x57.orig
68+
val x59 = x58.posx
69+
val x60 = x58.width
70+
val x61 = x60 / 2
71+
val x62 = x59 + x61
72+
val x76 = (x62).toString()
73+
val x63 = x58.posy
74+
val x64 = x58.height
75+
val x65 = x64 / 2
76+
val x66 = x63 + x65
77+
val x77 = (x66).toString()
78+
val x67 = x57.end
79+
val x68 = x67.posx
80+
val x69 = x67.width
81+
val x70 = x69 / 2
82+
val x71 = x68 + x70
83+
val x78 = (x71).toString()
84+
val x72 = x67.posy
85+
val x73 = x67.height
86+
val x74 = x73 / 2
87+
val x75 = x72 + x74
88+
val x79 = (x75).toString()
89+
val x80 = <line x1={x76} y1={x77} x2={x78} y2={x79} />
90+
val x82 = <g class={"edge"}>{x80}</g>
91+
x82
92+
}
93+
val x85 = x84 ::: x55
94+
x85
95+
}
96+
}
97+
/*****************************************
98+
End of Generated Code
99+
*******************************************/
100+
/*****************************************
101+
Emitting Generated Code
102+
*******************************************/
103+
class MindMap extends ((java.lang.String, scala.collection.immutable.List[RecordStringintintintint], scala.collection.immutable.List[RecordRecordStringintintintintRecordStringintintintint])=>(RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint)) {
104+
def apply(x87:java.lang.String, x88:scala.collection.immutable.List[RecordStringintintintint], x89:scala.collection.immutable.List[RecordRecordStringintintintintRecordStringintintintint]): RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint = {
105+
val x90 = RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint(name = x87, vertices = x88, edges = x89)
106+
x90
107+
}
108+
}
109+
/*****************************************
110+
End of Generated Code
111+
*******************************************/
112+
/*****************************************
113+
Emitting Generated Code
114+
*******************************************/
115+
class MindMapR extends ((java.lang.String, RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint)=>(RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint)) {
116+
def apply(x91:java.lang.String, x92:RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint): RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint = {
117+
val x93 = RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint(id = x91, content = x92)
118+
x93
119+
}
120+
}
121+
/*****************************************
122+
End of Generated Code
123+
*******************************************/
124+
/*****************************************
125+
Emitting Generated Code
126+
*******************************************/
127+
class Vertex extends ((java.lang.String, Int, Int, Int, Int)=>(RecordStringintintintint)) {
128+
def apply(x94:java.lang.String, x95:Int, x96:Int, x97:Int, x98:Int): RecordStringintintintint = {
129+
val x99 = RecordStringintintintint(height = x98, posy = x96, content = x94, posx = x95, width = x97)
130+
x99
131+
}
132+
}
133+
/*****************************************
134+
End of Generated Code
135+
*******************************************/
136+
/*****************************************
137+
Emitting Generated Code
138+
*******************************************/
139+
class Edge extends ((RecordStringintintintint, RecordStringintintintint)=>(RecordRecordStringintintintintRecordStringintintintint)) {
140+
def apply(x100:RecordStringintintintint, x101:RecordStringintintintint): RecordRecordStringintintintintRecordStringintintintint = {
141+
val x102 = RecordRecordStringintintintintRecordStringintintintint(orig = x100, end = x101)
142+
x102
143+
}
144+
}
145+
/*****************************************
146+
End of Generated Code
147+
*******************************************/
148+
case class RecordRecordStringintintintintRecordStringintintintint(orig: RecordStringintintintint, end: RecordStringintintintint)
149+
case class RecordStringintintintint(height: Int, posy: Int, content: java.lang.String, posx: Int, width: Int)
150+
case class RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint(name: java.lang.String, vertices: scala.collection.immutable.List[RecordStringintintintint], edges: scala.collection.immutable.List[RecordRecordStringintintintintRecordStringintintintint])
151+
case class RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint(id: java.lang.String, content: RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint)
152+
}
153+
package object models {
154+
object MindMap extends generated.MindMap
155+
type MindMap = generated.RecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint
156+
object MindMapR extends generated.MindMapR
157+
type MindMapR = generated.RecordStringRecordStringListRecordStringintintintintListRecordRecordStringintintintintRecordStringintintintint
158+
object Vertex extends generated.Vertex
159+
type Vertex = generated.RecordStringintintintint
160+
object Edge extends generated.Edge
161+
type Edge = generated.RecordRecordStringintintintintRecordStringintintintint
162+
}
163+
package object views {
164+
object listMaps extends generated.ListMaps
165+
object showMap extends generated.ShowMap
166+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
window.Ajax = window.Ajax || (function () {
2+
var Ajax = {
3+
call: function (settings) {
4+
5+
var contentTypes = {
6+
'xml': 'text/xml',
7+
'html': 'text/html',
8+
'json': 'application/json',
9+
'text': 'text/plain'
10+
};
11+
var textParser = function (xhr) { return xhr.responseText };
12+
var dataParsers = {
13+
'xml': function (xhr) { return xhr.responseXML; },
14+
'html': textParser,
15+
'json': function (xhr) { return JSON.parse(xhr.responseText); },
16+
'text': textParser
17+
};
18+
19+
var parseResponse = function (type, xhr) {
20+
return (dataParsers[type] || textParser)(xhr)
21+
};
22+
23+
var xhr = new XMLHttpRequest();
24+
xhr.open(settings.method || (settings.action && settings.action.method) || 'GET', settings.url || (settings.action && settings.action.url), true);
25+
xhr.onreadystatechange = function () {
26+
if (xhr.readyState === XMLHttpRequest.DONE) {
27+
var status = Math.floor(xhr.status / 100);
28+
settings.complete && settings.complete(xhr);
29+
if (status === 2 || status === 3) {
30+
settings.success && settings.success(parseResponse(settings.type, xhr), xhr);
31+
} else {
32+
settings.error && settings.error(parseResponse(settings.type, xhr), xhr);
33+
}
34+
}
35+
};
36+
var data = new FormData();
37+
if (settings.data) {
38+
for (var p in settings.data) {
39+
data.append(p, settings.data[p])
40+
}
41+
}
42+
settings.progress && (xhr.onprogress = settings.progress);
43+
contentTypes[settings.type] && xhr.setRequestHeader('Accept', contentTypes[settings.type]);
44+
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
45+
xhr.send(data);
46+
return xhr;
47+
},
48+
49+
getJSON: function (url, callback) {
50+
return Ajax.call({
51+
url: url,
52+
method: 'GET',
53+
type: 'json',
54+
success: callback
55+
})
56+
}
57+
};
58+
59+
return Ajax;
60+
})();
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
;window.MindMap = (function (m) {
2+
m['showMap'] = function(x103) {
3+
var x104 = document.createElementNS('http://www.w3.org/1999/xhtml', 'defs');
4+
var x105 = x103.vertices;
5+
var x49 = (0).toString();
6+
var x129=x105.map(function(x106){
7+
var x113 = x106.width;
8+
var x115 = (x113).toString();
9+
var x114 = x106.height;
10+
var x116 = (x114).toString();
11+
var x117 = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
12+
x117.setAttribute('width', x115);
13+
x117.setAttribute('height', x116);
14+
var x120 = x106.content;
15+
var x121 = document.createTextNode(x120);
16+
var x118 = "height: "+x114;
17+
var x119 = x118+"px;";
18+
var x123 = document.createElementNS('http://www.w3.org/1999/xhtml', 'p');
19+
x123.setAttribute('style', x119);
20+
x123.appendChild(x121);
21+
var x125 = document.createElementNS('http://www.w3.org/2000/svg', 'foreignObject');
22+
x125.setAttribute('x', x49);
23+
x125.setAttribute('y', x49);
24+
x125.setAttribute('width', x115);
25+
x125.setAttribute('height', x116);
26+
x125.appendChild(x123);
27+
var x107 = x106.posx;
28+
var x108 = "translate("+x107;
29+
var x109 = x108+",";
30+
var x110 = x106.posy;
31+
var x111 = x109+x110;
32+
var x112 = x111+")";
33+
var x127 = document.createElementNS('http://www.w3.org/2000/svg', 'g');
34+
x127.setAttribute('class', "vertex");
35+
x127.setAttribute('transform', x112);
36+
x127.appendChild(x117);
37+
x127.appendChild(x125);
38+
return x127
39+
});
40+
var x130 = x103.edges;
41+
var x158=x130.map(function(x131){
42+
var x132 = x131.orig;
43+
var x133 = x132.posx;
44+
var x134 = x132.width;
45+
var x135 = x134 / 2;
46+
var x136 = x133 + x135;
47+
var x150 = (x136).toString();
48+
var x137 = x132.posy;
49+
var x138 = x132.height;
50+
var x139 = x138 / 2;
51+
var x140 = x137 + x139;
52+
var x151 = (x140).toString();
53+
var x141 = x131.end;
54+
var x142 = x141.posx;
55+
var x143 = x141.width;
56+
var x144 = x143 / 2;
57+
var x145 = x142 + x144;
58+
var x152 = (x145).toString();
59+
var x146 = x141.posy;
60+
var x147 = x141.height;
61+
var x148 = x147 / 2;
62+
var x149 = x146 + x148;
63+
var x153 = (x149).toString();
64+
var x154 = document.createElementNS('http://www.w3.org/2000/svg', 'line');
65+
x154.setAttribute('x1', x150);
66+
x154.setAttribute('y1', x151);
67+
x154.setAttribute('x2', x152);
68+
x154.setAttribute('y2', x153);
69+
var x156 = document.createElementNS('http://www.w3.org/2000/svg', 'g');
70+
x156.setAttribute('class', "edge");
71+
x156.appendChild(x154);
72+
return x156
73+
});
74+
var x159 = x158.concat(x129);
75+
return x159
76+
}
77+
;
78+
m['buildMap'] = function(x0) {
79+
var x2 = x0.edges;
80+
var x1 = x0.vertices;
81+
var x9=x2.map(function(x3){
82+
var x4 = x3.origIdx;
83+
var x5 = x1[x4];
84+
var x6 = x3.endIdx;
85+
var x7 = x1[x6];
86+
var x8 = {'orig' : x5,'end' : x7};
87+
return x8
88+
});
89+
var x10 = x0.name;
90+
var x11 = x1.splice(0);
91+
var x12 = {'name' : x10,'vertices' : x11,'edges' : x9};
92+
return x12
93+
}
94+
;
95+
return m
96+
})(window.MindMap || {});

0 commit comments

Comments
 (0)