summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2011-01-04 22:00:30 -0800
committerBharat Mediratta <bharat@menalto.com>2011-01-04 22:00:30 -0800
commit31652eae44bdd93b45d965a8288a3069e37d1934 (patch)
tree2dedad8a058af870d079774a0a026d4fd89e6d83 /modules
parentb692d55ad47842371c38c61f3c16af36d06dca3a (diff)
Drag/drop improvements:
- Restrict drag and drop to albums where the user has edit permissions. - Use the existing TreeDropZone instead of making a new DropZone to take advantage of TreeDropZone features. - Properly use dropConfig in TreePanel.
Diffstat (limited to 'modules')
-rw-r--r--modules/organize/views/organize_dialog.html.php85
1 files changed, 42 insertions, 43 deletions
diff --git a/modules/organize/views/organize_dialog.html.php b/modules/organize/views/organize_dialog.html.php
index a3b1a1c5..4d4bf990 100644
--- a/modules/organize/views/organize_dialog.html.php
+++ b/modules/organize/views/organize_dialog.html.php
@@ -93,6 +93,7 @@
listeners: {
"render": function(v) {
v.dragZone = new Ext.dd.DragZone(v.getEl(), {
+ ddGroup: "organizeDD",
containerScroll: true,
getDragData: function(e) {
var target = e.getTarget(v.itemSelector, 10);
@@ -283,55 +284,52 @@
border: false,
containerScroll: true,
enableDD: true,
- ddGroup: "organizeDD",
+ dropConfig: {
+ appendOnly: true,
+ ddGroup: "organizeDD",
+ },
listeners: {
"click": function(node) {
load_album_data(node.id);
},
- "render": function(v) {
- v.dropZone = new Ext.dd.DropZone(v.getEl(), {
- getTargetFromEvent: function(e) {
- return e.getTarget("div.x-tree-node-el", 10);
- },
- onNodeDrop: function(target, dd, e, data) {
- var nodes = data.nodes;
- source_ids = [];
- for (var i = 0; i != nodes.length; i++) {
- var node = Ext.fly(nodes[i]);
- source_ids.push(node.getAttribute("rel"));
- }
- var target_id = target.getAttribute("ext:tree-node-id");
- start_busy(<?= t("Moving...")->for_js() ?>);
- Ext.Ajax.request({
- url: '<?= url::site("organize/reparent") ?>',
- method: "post",
- success: function() {
- stop_busy();
- reload_album_data();
- v.getNodeById(target_id).reload();
+ "afterrender": function(v) {
+ v.dropZone.onNodeDrop = function(target, dd, e, data) {
+ var nodes = data.nodes;
+ source_ids = [];
+ for (var i = 0; i != nodes.length; i++) {
+ var node = Ext.fly(nodes[i]);
+ source_ids.push(node.getAttribute("rel"));
+ }
+ start_busy(<?= t("Moving...")->for_js() ?>);
+ Ext.Ajax.request({
+ url: '<?= url::site("organize/reparent") ?>',
+ method: "post",
+ success: function() {
+ stop_busy();
+ reload_album_data();
+ target.node.reload();
- // If the target node contains the selected node, then the selected
- // node just got strafed by the target's reload and no longer exists,
- // so we can't reload it.
- var selected_node = v.getNodeById(current_album_id);
- if (selected_node) {
- selected_node.reload();
- }
- },
- failure: function() {
- stop_busy();
- Ext.Msg.alert(
- <?= t("An error occurred. Consult your system administrator.")->for_js() ?>);
- },
- params: {
- source_ids: source_ids.join(","),
- target_id: target_id,
- csrf: '<?= access::csrf_token() ?>'
+ // If the target node contains the selected node, then the selected
+ // node just got strafed by the target's reload and no longer exists,
+ // so we can't reload it.
+ var selected_node = v.getNodeById(current_album_id);
+ if (selected_node) {
+ selected_node.reload();
}
- });
- return true;
- }
- })
+ },
+ failure: function() {
+ stop_busy();
+ Ext.Msg.alert(
+ <?= t("An error occurred. Consult your system administrator.")->for_js() ?>);
+ },
+ params: {
+ source_ids: source_ids.join(","),
+ target_id: target.node.id,
+ csrf: '<?= access::csrf_token() ?>'
+ }
+ });
+ return true;
+ }
}
},
loader: tree_loader,
@@ -343,6 +341,7 @@
width: 200,
root: {
+ allowDrop: Boolean(<?= access::can("edit", item::root()) ?>),
nodeType: "async",
text: "<?= item::root()->title ?>",
draggable: false,