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
function onTemplateLoadedCallback() {
}
function revert($e) {
var elmt = $e.css("left","auto").css("top", "auto").removeClass("inBox").get(0);
if(elmt)
elmt.className = elmt.className.replace(/(d(\d+))/, "");
}
function reloadApp(app) {
var operator = app.parameters.value("operator");
var range = parseInt(app.parameters.value("range"));
var count = parseInt(app.parameters.value("count"));
$scene = $("#scene");
$scene.empty();
$labels = $("<div id='labels'></div>");
$scene.append($labels);
$drops = $("<div id='drops'></div>");
$scene.append($drops);
var meeted = [];
for (var i = 0; i < count; i++) {
var n = Math.floor(Math.random()*range);
while($.inArray(n, meeted) != -1) {
if(range > 1)
n = Math.floor(Math.random()*range);
else
n = Math.round(Math.random()*range*100)/100;
}
meeted.push(n);
$label = $("<div id='l"+i+"' class='label'>"+n+"</div>");
$labels.append($label);
$label.wrap("<div/>");
$label.draggable({
containment: "#scene",
scroll: false,
snap: ".drop",
snapMode: "inner"
});
$drop = $("<div id='d"+i+"' class='drop'></div>");
$drops.append($drop);
$drop.droppable({
hoverClass: "ui-state-hover",
activeClass: "ui-state-active",
greedy: true,
drop: function(event, ui) {
var id = $(this).attr("id");
var $current = $(".inBox."+id);
if($current.size() > 0 && $current.attr("id") != ui.draggable.attr("id"))
revert($current);
ui.draggable.get(0).className = ui.draggable.get(0).className.replace(/(d(\d+))/, "");
ui.draggable.addClass("inBox").addClass(id);
}
});
if(i != count-1) {
$("<div class='operator'>"+operator+"</div>").appendTo($drops);
}
};
$scene.droppable({
drop: function(event, ui) {
revert(ui.draggable);
}
});
}
function reloadCallback(parameter) {
if(parameter === undefined)
reloadApp(this);
}
$(document).ready(function(){
var callbacks = {
onTemplatesLoaded: onTemplateLoadedCallback,
onEdit: reloadApp,
onView: reloadApp
};
init(reloadCallback, {toolbar: toolbarTemplate, parameters: parametersTemplate}, callbacks);
});