Skip to content

Commit 1a565d1

Browse files
committed
Folder view: fix moving items to the top level.
The 'parent' parameter needs to be omitted when moving to the top level.
1 parent 0ae9674 commit 1a565d1

2 files changed

Lines changed: 67 additions & 44 deletions

File tree

editor/static/js/project/browse.js

Lines changed: 66 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,19 @@ function get_selection() {
2525

2626
function move_to(target_pk,selection) {
2727
selection.folders = selection.folders.filter(function(pk) { return pk!=target_pk; });
28-
var data = {
29-
csrfmiddlewaretoken: getCSRFtoken(),
30-
project: project_pk,
31-
parent: target_pk,
32-
folders: selection.folders,
33-
items: selection.items
28+
var fd = new FormData();
29+
fd.set('csrfmiddlewaretoken',getCSRFtoken());
30+
fd.set('project', project_pk);
31+
if(target_pk > 0) {
32+
fd.set('parent', target_pk);
3433
}
34+
for(let folder of selection.folders) {
35+
fd.append('folders', folder);
36+
}
37+
for(let item of selection.items) {
38+
fd.append('items', item);
39+
}
40+
3541
var folder_rows = selection.folders.map(function(folder_pk) {
3642
return document.querySelector('#contents .folder[data-folder="'+folder_pk+'"]');
3743
});
@@ -42,45 +48,62 @@ function move_to(target_pk,selection) {
4248
all_rows.forEach(function(row) {
4349
row.classList.add('moving');
4450
})
45-
$.post({
46-
url: Editor.url_prefix + 'folder/move',
47-
data: data,
48-
traditional: true
51+
fetch(
52+
Editor.url_prefix + 'folder/move',
53+
{
54+
method: 'POST',
55+
body: fd,
56+
headers: {
57+
'Accept': 'application/json'
58+
},
59+
}
60+
)
61+
.then(r => {
62+
if(!r.ok) {
63+
throw(new Error(r.statusText));
64+
}
65+
return r;
4966
})
50-
.then(function(r) {
51-
var moving_rows = document.querySelectorAll('#contents .moving');
52-
for(var i=0;i<moving_rows.length;i++) {
53-
moving_rows[i].classList.remove('moving');
54-
}
55-
var folder_rows = r.folders_moved.map(function(folder_pk) {
56-
return document.querySelector('#contents .folder[data-folder="'+folder_pk+'"]');
57-
});
58-
var item_rows = r.items_moved.map(function(item_pk) {
59-
return document.querySelector('#contents .item[data-item="'+item_pk+'"]');
60-
});
61-
var all_rows = folder_rows.concat(item_rows).filter(function(row) { return row });
62-
all_rows.forEach(function(row) {
63-
if(row.parentElement) {
64-
row.parentElement.removeChild(row)
65-
}
66-
});
67-
noty({
68-
text: r.message,
69-
layout: 'topCenter',
70-
});
71-
num_items -= r.items_moved.length;
72-
document.getElementById('num-items').textContent = num_items+' item'+(num_items==1 ? '' : 's');
73-
if(num_items<=0) {
74-
document.getElementById('contents-container').classList.add('empty');
67+
.then(r => r.json())
68+
.then(function(r) {
69+
var moving_rows = document.querySelectorAll('#contents .moving');
70+
for(var i=0;i<moving_rows.length;i++) {
71+
moving_rows[i].classList.remove('moving');
72+
}
73+
var folder_rows = r.folders_moved.map(function(folder_pk) {
74+
return document.querySelector('#contents .folder[data-folder="'+folder_pk+'"]');
75+
});
76+
var item_rows = r.items_moved.map(function(item_pk) {
77+
return document.querySelector('#contents .item[data-item="'+item_pk+'"]');
78+
});
79+
var all_rows = folder_rows.concat(item_rows).filter(function(row) { return row });
80+
all_rows.forEach(function(row) {
81+
if(row.parentElement) {
82+
row.parentElement.removeChild(row)
7583
}
76-
update_selection();
77-
})
78-
.fail(function(r) {
79-
all_rows.forEach(function(row) {
80-
row.classList.remove('moving');
81-
});
82-
})
83-
;
84+
});
85+
noty({
86+
text: r.message,
87+
layout: 'topCenter',
88+
});
89+
num_items -= r.items_moved.length;
90+
document.getElementById('num-items').textContent = num_items+' item'+(num_items==1 ? '' : 's');
91+
if(num_items<=0) {
92+
document.getElementById('contents-container').classList.add('empty');
93+
}
94+
update_selection();
95+
})
96+
.catch(function(err) {
97+
console.log(arguments);
98+
noty({
99+
text: err,
100+
layout: 'topCenter',
101+
type: 'error'
102+
});
103+
all_rows.forEach(function(row) {
104+
row.classList.remove('moving');
105+
});
106+
});
84107
}
85108

86109
function make_dragger(row) {

editor/views/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import re
1616

1717
def request_is_ajax(request):
18-
return request.headers.get('x-requested-with') == 'XMLHttpRequest'
18+
return request.headers.get('x-requested-with') == 'XMLHttpRequest' or 'application/json' in request.headers.get('accept','')
1919

2020
class HomeView(TemplateView):
2121
template_name = 'index.html'

0 commit comments

Comments
 (0)