spiderfw 0.6.24 → 0.6.25
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/apps/core/components/public/js/spider.js +14 -1
- data/apps/core/forms/widgets/form/form.rb +22 -34
- data/lib/spiderfw/app.rb +10 -0
- data/lib/spiderfw/cmd/commands/app.rb +3 -1
- data/lib/spiderfw/cmd/commands/console.rb +2 -2
- data/lib/spiderfw/controller/controller.rb +1 -1
- data/lib/spiderfw/model/storage/db/connectors/mysql.rb +16 -0
- data/lib/spiderfw/model/storage/db/connectors/mysql2.rb +9 -0
- data/lib/spiderfw/model/storage.rb +7 -3
- data/lib/spiderfw/setup/app_manager.rb +38 -10
- data/lib/spiderfw/setup/spider_setup_wizard.rb +1 -1
- data/lib/spiderfw/templates/layout.rb +12 -8
- data/lib/spiderfw/templates/template.rb +30 -5
- data/lib/spiderfw/templates/template_blocks.rb +2 -2
- data/lib/spiderfw/widget/widget.rb +1 -1
- metadata +156 -244
- data/apps/core/components/public/js/jquery/plugins/jquery.ui.nestedSortable.js +0 -356
- data/blueprints/.DS_Store +0 -0
- data/blueprints/home/.DS_Store +0 -0
- data/blueprints/install/.DS_Store +0 -0
@@ -1,356 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* jQuery UI Nested Sortable
|
3
|
-
* v 1.3.4 / 28 apr 2011
|
4
|
-
* http://mjsarfatti.com/sandbox/nestedSortable
|
5
|
-
*
|
6
|
-
* Depends:
|
7
|
-
* jquery.ui.sortable.js 1.8+
|
8
|
-
*
|
9
|
-
* License CC BY-SA 3.0
|
10
|
-
* Copyright 2010-2011, Manuele J Sarfatti
|
11
|
-
*/
|
12
|
-
|
13
|
-
(function($) {
|
14
|
-
|
15
|
-
$.widget("ui.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
|
16
|
-
|
17
|
-
options: {
|
18
|
-
tabSize: 20,
|
19
|
-
disableNesting: 'ui-nestedSortable-no-nesting',
|
20
|
-
errorClass: 'ui-nestedSortable-error',
|
21
|
-
listType: 'ol',
|
22
|
-
maxLevels: 0,
|
23
|
-
noJumpFix: 0
|
24
|
-
},
|
25
|
-
|
26
|
-
_create: function(){
|
27
|
-
if (this.noJumpFix == false)
|
28
|
-
this.element.height(this.element.height());
|
29
|
-
this.element.data('sortable', this.element.data('nestedSortable'));
|
30
|
-
return $.ui.sortable.prototype._create.apply(this, arguments);
|
31
|
-
},
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
_mouseDrag: function(event) {
|
36
|
-
|
37
|
-
//Compute the helpers position
|
38
|
-
this.position = this._generatePosition(event);
|
39
|
-
this.positionAbs = this._convertPositionTo("absolute");
|
40
|
-
|
41
|
-
if (!this.lastPositionAbs) {
|
42
|
-
this.lastPositionAbs = this.positionAbs;
|
43
|
-
}
|
44
|
-
|
45
|
-
//Do scrolling
|
46
|
-
if(this.options.scroll) {
|
47
|
-
var o = this.options, scrolled = false;
|
48
|
-
if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
|
49
|
-
|
50
|
-
if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
|
51
|
-
this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
|
52
|
-
else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
|
53
|
-
this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
|
54
|
-
|
55
|
-
if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
|
56
|
-
this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
|
57
|
-
else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
|
58
|
-
this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
|
59
|
-
|
60
|
-
} else {
|
61
|
-
|
62
|
-
if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
|
63
|
-
scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
|
64
|
-
else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
|
65
|
-
scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
|
66
|
-
|
67
|
-
if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
|
68
|
-
scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
|
69
|
-
else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
|
70
|
-
scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
|
71
|
-
|
72
|
-
}
|
73
|
-
|
74
|
-
if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
|
75
|
-
$.ui.ddmanager.prepareOffsets(this, event);
|
76
|
-
}
|
77
|
-
|
78
|
-
//Regenerate the absolute position used for position checks
|
79
|
-
this.positionAbs = this._convertPositionTo("absolute");
|
80
|
-
|
81
|
-
//Set the helper position
|
82
|
-
if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
|
83
|
-
if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
|
84
|
-
|
85
|
-
//Rearrange
|
86
|
-
for (var i = this.items.length - 1; i >= 0; i--) {
|
87
|
-
|
88
|
-
//Cache variables and intersection, continue if no intersection
|
89
|
-
var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
|
90
|
-
if (!intersection) continue;
|
91
|
-
|
92
|
-
if(itemElement != this.currentItem[0] //cannot intersect with itself
|
93
|
-
&& this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
|
94
|
-
&& !$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
|
95
|
-
&& (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
|
96
|
-
//&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
|
97
|
-
) {
|
98
|
-
|
99
|
-
this.direction = intersection == 1 ? "down" : "up";
|
100
|
-
|
101
|
-
if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
|
102
|
-
this._rearrange(event, item);
|
103
|
-
} else {
|
104
|
-
break;
|
105
|
-
}
|
106
|
-
|
107
|
-
// Clear emtpy ul's/ol's
|
108
|
-
this._clearEmpty(itemElement);
|
109
|
-
|
110
|
-
this._trigger("change", event, this._uiHash());
|
111
|
-
break;
|
112
|
-
}
|
113
|
-
}
|
114
|
-
|
115
|
-
var parentItem = (this.placeholder[0].parentNode.parentNode && $(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length) ? $(this.placeholder[0].parentNode.parentNode) : null;
|
116
|
-
var level = this._getLevel(this.placeholder);
|
117
|
-
var childLevels = this._getChildLevels(this.helper);
|
118
|
-
var previousItem = this.placeholder[0].previousSibling ? $(this.placeholder[0].previousSibling) : null;
|
119
|
-
if (previousItem != null) {
|
120
|
-
while (previousItem[0].nodeName.toLowerCase() != 'li' || previousItem[0] == this.currentItem[0]) {
|
121
|
-
if (previousItem[0].previousSibling) {
|
122
|
-
previousItem = $(previousItem[0].previousSibling);
|
123
|
-
} else {
|
124
|
-
previousItem = null;
|
125
|
-
break;
|
126
|
-
}
|
127
|
-
}
|
128
|
-
}
|
129
|
-
|
130
|
-
newList = document.createElement(o.listType);
|
131
|
-
|
132
|
-
this.beyondMaxLevels = 0;
|
133
|
-
|
134
|
-
// If the item is moved to the left, send it to its parent level
|
135
|
-
if (parentItem != null && this.positionAbs.left < parentItem.offset().left) {
|
136
|
-
parentItem.after(this.placeholder[0]);
|
137
|
-
this._clearEmpty(parentItem[0]);
|
138
|
-
this._trigger("change", event, this._uiHash());
|
139
|
-
}
|
140
|
-
// If the item is below another one and is moved to the right, make it a children of it
|
141
|
-
else if (previousItem != null && this.positionAbs.left > previousItem.offset().left + o.tabSize) {
|
142
|
-
this._isAllowed(previousItem, level+childLevels+1);
|
143
|
-
if (!previousItem.children(o.listType).length) {
|
144
|
-
previousItem[0].appendChild(newList);
|
145
|
-
}
|
146
|
-
previousItem.children(o.listType)[0].appendChild(this.placeholder[0]);
|
147
|
-
this._trigger("change", event, this._uiHash());
|
148
|
-
}
|
149
|
-
else {
|
150
|
-
this._isAllowed(parentItem, level+childLevels);
|
151
|
-
}
|
152
|
-
|
153
|
-
//Post events to containers
|
154
|
-
this._contactContainers(event);
|
155
|
-
|
156
|
-
//Interconnect with droppables
|
157
|
-
if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
|
158
|
-
|
159
|
-
//Call callbacks
|
160
|
-
this._trigger('sort', event, this._uiHash());
|
161
|
-
|
162
|
-
this.lastPositionAbs = this.positionAbs;
|
163
|
-
return false;
|
164
|
-
|
165
|
-
},
|
166
|
-
|
167
|
-
_mouseStop: function(event, noPropagation) {
|
168
|
-
|
169
|
-
// If the item is in a position not allowed, send it back
|
170
|
-
if (this.beyondMaxLevels) {
|
171
|
-
var parent = this.placeholder.parent().closest(this.options.items);
|
172
|
-
|
173
|
-
for (var i = this.beyondMaxLevels - 1; i > 0; i--) {
|
174
|
-
parent = parent.parent().closest(this.options.items);
|
175
|
-
}
|
176
|
-
|
177
|
-
this.placeholder.removeClass(this.options.errorClass);
|
178
|
-
parent.after(this.placeholder);
|
179
|
-
this._trigger("change", event, this._uiHash());
|
180
|
-
}
|
181
|
-
|
182
|
-
$.ui.sortable.prototype._mouseStop.apply(this, arguments);
|
183
|
-
|
184
|
-
},
|
185
|
-
|
186
|
-
serialize: function(o) {
|
187
|
-
|
188
|
-
var items = this._getItemsAsjQuery(o && o.connected);
|
189
|
-
var str = []; o = o || {};
|
190
|
-
|
191
|
-
$(items).each(function() {
|
192
|
-
var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
|
193
|
-
var pid = ($(o.item || this).parent(o.listType).parent('li').attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
|
194
|
-
if(res) str.push((o.key || res[1]+'['+(o.key && o.expression ? res[1] : res[2])+']')+'='+(pid ? (o.key && o.expression ? pid[1] : pid[2]) : 'root'));
|
195
|
-
});
|
196
|
-
|
197
|
-
if(!str.length && o.key) {
|
198
|
-
str.push(o.key + '=');
|
199
|
-
}
|
200
|
-
|
201
|
-
return str.join('&');
|
202
|
-
|
203
|
-
},
|
204
|
-
|
205
|
-
toHierarchy: function(o) {
|
206
|
-
|
207
|
-
o = o || {};
|
208
|
-
var sDepth = o.startDepthCount || 0;
|
209
|
-
var ret = [];
|
210
|
-
|
211
|
-
$(this.element).children('li').each(function() {
|
212
|
-
var level = _recursiveItems($(this));
|
213
|
-
ret.push(level);
|
214
|
-
});
|
215
|
-
|
216
|
-
return ret;
|
217
|
-
|
218
|
-
function _recursiveItems(li) {
|
219
|
-
var id = ($(li).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
|
220
|
-
if (id != null) {
|
221
|
-
var item = {"id" : id[2]};
|
222
|
-
if ($(li).children(o.listType).children('li').length > 0) {
|
223
|
-
item.children = [];
|
224
|
-
$(li).children(o.listType).children('li').each(function () {
|
225
|
-
var level = _recursiveItems($(this));
|
226
|
-
item.children.push(level);
|
227
|
-
});
|
228
|
-
}
|
229
|
-
return item;
|
230
|
-
}
|
231
|
-
}
|
232
|
-
},
|
233
|
-
|
234
|
-
toArray: function(o) {
|
235
|
-
|
236
|
-
o = o || {};
|
237
|
-
var sDepth = o.startDepthCount || 0;
|
238
|
-
var ret = [];
|
239
|
-
var left = 2;
|
240
|
-
|
241
|
-
ret.push({"item_id": 'root', "parent_id": 'none', "depth": sDepth, "left": '1', "right": ($('li', this.element).length + 1) * 2});
|
242
|
-
|
243
|
-
$(this.element).children('li').each(function () {
|
244
|
-
left = _recursiveArray(this, sDepth + 1, left);
|
245
|
-
});
|
246
|
-
|
247
|
-
function _sortByLeft(a,b) {
|
248
|
-
return a['left'] - b['left'];
|
249
|
-
}
|
250
|
-
ret = ret.sort(_sortByLeft);
|
251
|
-
|
252
|
-
return ret;
|
253
|
-
|
254
|
-
function _recursiveArray(item, depth, left) {
|
255
|
-
|
256
|
-
right = left + 1;
|
257
|
-
|
258
|
-
if ($(item).children(o.listType).children('li').length > 0) {
|
259
|
-
depth ++;
|
260
|
-
$(item).children(o.listType).children('li').each(function () {
|
261
|
-
right = _recursiveArray($(this), depth, right);
|
262
|
-
});
|
263
|
-
depth --;
|
264
|
-
}
|
265
|
-
|
266
|
-
id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));
|
267
|
-
|
268
|
-
if (depth === sDepth + 1) pid = 'root';
|
269
|
-
else {
|
270
|
-
parentItem = ($(item).parent(o.listType).parent('li').attr('id')).match(o.expression || (/(.+)[-=_](.+)/));
|
271
|
-
pid = parentItem[2];
|
272
|
-
}
|
273
|
-
|
274
|
-
if (id != null) {
|
275
|
-
ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
|
276
|
-
}
|
277
|
-
|
278
|
-
return left = right + 1;
|
279
|
-
}
|
280
|
-
|
281
|
-
},
|
282
|
-
|
283
|
-
_clear: function(event, noPropagation) {
|
284
|
-
|
285
|
-
$.ui.sortable.prototype._clear.apply(this, arguments);
|
286
|
-
|
287
|
-
// Clean last empty ul/ol
|
288
|
-
for (var i = this.items.length - 1; i >= 0; i--) {
|
289
|
-
var item = this.items[i].item[0];
|
290
|
-
this._clearEmpty(item);
|
291
|
-
}
|
292
|
-
return true;
|
293
|
-
|
294
|
-
},
|
295
|
-
|
296
|
-
_clearEmpty: function(item) {
|
297
|
-
|
298
|
-
if (item.children[1] && item.children[1].children.length == 0) {
|
299
|
-
item.removeChild(item.children[1]);
|
300
|
-
}
|
301
|
-
|
302
|
-
},
|
303
|
-
|
304
|
-
_getLevel: function(item) {
|
305
|
-
|
306
|
-
var level = 1;
|
307
|
-
|
308
|
-
if (this.options.listType) {
|
309
|
-
var list = item.closest(this.options.listType);
|
310
|
-
while (!list.is('.ui-sortable')/* && level < this.options.maxLevels*/) {
|
311
|
-
level++;
|
312
|
-
list = list.parent().closest(this.options.listType);
|
313
|
-
}
|
314
|
-
}
|
315
|
-
|
316
|
-
return level;
|
317
|
-
},
|
318
|
-
|
319
|
-
_getChildLevels: function(parent, depth) {
|
320
|
-
var self = this,
|
321
|
-
o = this.options,
|
322
|
-
result = 0;
|
323
|
-
depth = depth || 0;
|
324
|
-
|
325
|
-
$(parent).children(o.listType).children(o.items).each(function (index, child) {
|
326
|
-
result = Math.max(self._getChildLevels(child, depth + 1), result);
|
327
|
-
});
|
328
|
-
|
329
|
-
return depth ? result + 1 : result;
|
330
|
-
},
|
331
|
-
|
332
|
-
_isAllowed: function(parentItem, levels) {
|
333
|
-
var o = this.options
|
334
|
-
// Are we trying to nest under a no-nest or are we nesting too deep?
|
335
|
-
if (parentItem == null || !(parentItem.hasClass(o.disableNesting))) {
|
336
|
-
if (o.maxLevels < levels && o.maxLevels != 0) {
|
337
|
-
this.placeholder.addClass(o.errorClass);
|
338
|
-
this.beyondMaxLevels = levels - o.maxLevels;
|
339
|
-
} else {
|
340
|
-
this.placeholder.removeClass(o.errorClass);
|
341
|
-
this.beyondMaxLevels = 0;
|
342
|
-
}
|
343
|
-
} else {
|
344
|
-
this.placeholder.addClass(o.errorClass);
|
345
|
-
if (o.maxLevels < levels && o.maxLevels != 0) {
|
346
|
-
this.beyondMaxLevels = levels - o.maxLevels;
|
347
|
-
} else {
|
348
|
-
this.beyondMaxLevels = 1;
|
349
|
-
}
|
350
|
-
}
|
351
|
-
}
|
352
|
-
|
353
|
-
}));
|
354
|
-
|
355
|
-
$.ui.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.ui.nestedSortable.prototype.options);
|
356
|
-
})(jQuery);
|
data/blueprints/.DS_Store
DELETED
Binary file
|
data/blueprints/home/.DS_Store
DELETED
Binary file
|
Binary file
|