/
AssetAdmin.DragDrop.js
99 lines (93 loc) · 2.18 KB
/
AssetAdmin.DragDrop.js
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
/**
* File: AssetAdmin.DragDrop.js
*/
(function($) {
$.entwine('ss', function($){
/**
* Class: .AssetTableField.dragdrop
*/
$('.AssetTableField.dragdrop').entwine({
onmatch: function() {
var self = this;
$('.cms-tree li').each(function() {
$(this).droppable({
greedy: true,
hoverClass: 'over', // same hover effect as normal tree
drop: function(e, ui) {self.drop(e, ui);}
});
});
this._super();
},
onunmatch: function() {
this._super();
},
/**
* Function: drop
*
* Take selected files and move them to a folder target in the tree.
*/
drop: function(e, ui) {
var self = this;
if(e.target.id.match(/-([^-]+)$/)) {
var folderId = RegExp.$1;
$.post(
this.attr('href') + '/movemarked',
this.parents('form').serialize() + '&DestFolderID=' + folderId,
function(data, status) {
self.refresh();
}
)
}
},
/**
* Function: getSelected
*
* Get the IDs of all selected files in the table.
* Used for drag'n'drop.
*
* Returns:
* Array
*/
getSelected: function() {
return this.find(':input[name=Files\[\]]:checked').map(function() {
return $(this).val();
});
}
});
$('.AssetTableField .dragfile').entwine({
// Constructor: onmatch
onmatch: function() {
var self = this;
var container = this.parents('.AssetTableField');
this.draggable({
zIndex: 4000,
appendTo: 'body',
helper: function() {
return $(
'<div class="NumFilesIndicator">' +
ss.i18n.sprintf(ss.i18n._t('AssetTableField.MOVING'),container.getSelected().length) +
'</div>'
);
}
});
this._super();
},
onunmatch: function() {
this._super();
},
/**
* Function: onmousedown
*
* Parameters:
* (Event) e
*
* Automatically select the checkbox in the same table row
* to signify that this element is moved, and hint that
* all checkboxed elements will be moved along with it.
*/
onmousedown: function(e) {
this.siblings('.markingcheckbox').find(':input').attr('checked', 'checked');
}
});
});
}(jQuery));