forked from akoprow/Opa-jquery-ui
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjquery-ui-demo.opa
112 lines (97 loc) · 2.66 KB
/
jquery-ui-demo.opa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import jQueryUI
//type demo_page = { string name, ( -> xhtml) show }
//type demo = { string name, list(demo_page) pages }
module Draggable {
demo =
{ name: "Draggable"
, pages:
[ {name: "drag" , show: on_update_demo }
]
}
client function on_update_demo(){
function mk_draggable(_) {
jQueryUI.Draggable.mk_draggable(#draggable)
//return js_void;
}
<div id=draggable style="background:#cccccc" onready={mk_draggable}>bla</div>
}
}
module Sortable {
demo =
{ name: "Sortable"
, pages:
[ {name: "Default functionality", show: default_functionality }
,{name: "on_update" , show: on_update_demo }
]
}
client function default_functionality() {
function mk_entry(i) {
<li><div class="alert alert-info">Item #{i}</></>
}
function mk_sortable(_) {
jQueryUI.Sortable.mk_sortable(#sortable)
jQueryUI.Sortable.disable_selection(#sortable)
}
<div>
<ul id=sortable onready={mk_sortable}>
{List.init(mk_entry, 7)}
</ul>
</div>
}
client function on_update_demo() {
function mk_entry(i) {
<li id={i}><div class="alert alert-info">Item #{i}</></>
}
function on_update() {
children = Dom.split(Dom.select_children(#sortable))
l = List.map( function(d) { Dom.get_id(d) }, children)
#sorting = "sorting is: " ^ String.concat(", ", l)
}
function mk_sortable(_) {
jQueryUI.Sortable.mk_sortable(#sortable)
jQueryUI.Sortable.disable_selection(#sortable)
jQueryUI.Sortable.on_update(#sortable, on_update)
}
<div>
<span id=sorting/>
<ul id=sortable onready={mk_sortable}>
{List.init(mk_entry, 7)}
</ul>
</div>
}
}
demos = [Sortable.demo, Draggable.demo]
function mk_demo(demo) {
function show_demo(gen)(_event) {
#demo = gen()
}
function mk_page(page) {
<li><a onclick={show_demo(page.show)} data-toggle=tab>{page.name}</></>
}
function show(_) {
#submenu =
<ul class="nav nav-tabs nav-stacked">
{List.map(mk_page, demo.pages)}
</>
}
<li><a onclick={show} data-toggle=tab>{demo.name}</></>
}
function page() {
<div class=container>
<div class=row>
<div class=span2>
<ul id=menu class="nav nav-tabs nav-stacked">
{List.map(mk_demo, demos)}
</>
</>
<div class=span2 id=submenu />
<div class=span8 id=demo />
</>
</>
}
Server.start(Server.http,
[ {resources: @static_resource_directory("resources")}
, {register:{css: ["resources/bootstrap.css", "resources/style.css", "resources/bootstrap.js"]}}
, {title: "JQuery-UI in Opa", ~page}
]
)