0001-manager-remove-toggle-pages-feature-56791.patch
combo/manager/static/css/combo.manager.css | ||
---|---|---|
25 | 25 |
align-items: center; |
26 | 26 |
} |
27 | 27 | |
28 |
div#pages-list span.togglable { |
|
29 |
padding: 1em 2ex; |
|
30 |
cursor: pointer; |
|
31 |
} |
|
32 | ||
33 |
div#pages-list div.page.untoggled span.togglable:after { |
|
34 |
font-family: FontAwesome; |
|
35 |
content: "\f107"; /* angle-down */ |
|
36 |
cursor: pointer; |
|
37 |
} |
|
38 | ||
39 |
div#pages-list div.page.toggled span.togglable:after { |
|
40 |
font-family: FontAwesome; |
|
41 |
content: "\f106"; /* angle-up */ |
|
42 |
cursor: pointer; |
|
43 |
} |
|
44 | ||
45 | 28 |
div.cell-list > div { |
46 | 29 |
background: white; |
47 | 30 |
border: 1px solid #eee; |
combo/manager/static/js/combo.manager.js | ||
---|---|---|
79 | 79 |
}); |
80 | 80 |
} |
81 | 81 | |
82 |
function get_page_children($page) { |
|
83 |
var children = []; |
|
84 |
$page.nextAll().each(function() { |
|
85 |
var level = parseInt($(this).data('level'), 10); |
|
86 |
if (level <= parseInt($page.data('level'), 10)) { |
|
87 |
return false; |
|
88 |
} |
|
89 |
children.push($(this)); |
|
90 |
}); |
|
91 |
return children; |
|
92 |
} |
|
93 | ||
94 |
function show_page_children($page) { |
|
95 |
$.each(get_page_children($page), function() { |
|
96 |
$child = $(this); |
|
97 |
var level = parseInt($child.data('level'), 10); |
|
98 |
if (level == parseInt($page.data('level'), 10) + 1) { |
|
99 |
$child.show(); |
|
100 |
if ($child.hasClass('toggled')) { |
|
101 |
show_page_children($child); |
|
102 |
} |
|
103 |
} |
|
104 |
}); |
|
105 |
} |
|
106 | ||
107 |
function hide_page_children($page) { |
|
108 |
$.each(get_page_children($page), function() { |
|
109 |
$(this).hide(); |
|
110 |
}); |
|
111 |
} |
|
112 | ||
113 |
function init_pages_toggle() { |
|
114 |
$('.page').each(function() { |
|
115 |
if (!get_page_children($(this)).length) { |
|
116 |
$(this).removeClass('toggled').removeClass('untoggled').find('.togglable').remove(); |
|
117 |
} |
|
118 |
}); |
|
119 |
$('div.page.untoggled').each(function() { |
|
120 |
hide_page_children($(this)); |
|
121 |
}); |
|
122 |
$('div.page.toggled[level=1]').each(function() { |
|
123 |
show_page_children($(this)); |
|
124 |
}); |
|
125 |
} |
|
126 | ||
127 |
function init_pages_list(toggle_state) |
|
82 |
function init_pages_list() |
|
128 | 83 |
{ |
129 | 84 |
if ($('#pages-list').length == 0) |
130 | 85 |
return; |
131 |
init_pages_toggle(); |
|
132 |
// if toggle_state is defined, restore toggled pages |
|
133 |
if (toggle_state) { |
|
134 |
$('div.page').each(function() { |
|
135 |
if (toggle_state.includes($(this).data('page-id'))) { |
|
136 |
$('span.togglable', $(this)).trigger('click'); |
|
137 |
} |
|
138 |
}); |
|
139 |
} |
|
140 | 86 |
var list_offset = $('#pages-list').offset().left; |
141 | 87 |
$('#pages-list').sortable({ |
142 | 88 |
handle: '.handle', |
... | ... | |
166 | 112 |
$(ui.item).data('level', new_level).attr('data-level', new_level); |
167 | 113 | |
168 | 114 |
var new_order = $('#pages-list div').map(function() { return $(this).data('page-id'); }).get().join(); |
169 |
// keep actuel toggled pages + new parent to restore display on init_pages_list |
|
170 |
var old_toggle_state = []; |
|
171 |
$('div.page.toggled').each(function() { |
|
172 |
old_toggle_state.push($(this).data('page-id')); |
|
173 |
}); |
|
174 |
if (!old_toggle_state.includes(new_parent)) { |
|
175 |
old_toggle_state.push(new_parent); |
|
176 |
} |
|
177 | 115 | |
178 | 116 |
$.ajax({ |
179 | 117 |
url: $('#pages-list').data('page-order-url'), |
... | ... | |
183 | 121 |
}, |
184 | 122 |
success: function(data, status) { |
185 | 123 |
$('#pages-list').replaceWith($(data).find('#pages-list')); |
186 |
init_pages_list(old_toggle_state);
|
|
124 |
init_pages_list(); |
|
187 | 125 |
} |
188 | 126 |
}); |
189 | 127 |
} |
... | ... | |
209 | 147 |
return false; |
210 | 148 |
}); |
211 | 149 |
init_pages_list(); |
212 |
$(document).on('click', 'div.page.untoggled span.togglable', function() { |
|
213 |
$(this).parent().toggleClass('toggled').toggleClass('untoggled'); |
|
214 |
show_page_children($(this).parent()); |
|
215 |
}); |
|
216 |
$(document).on('click', 'div.page.toggled span.togglable', function() { |
|
217 |
$(this).parent().toggleClass('toggled').toggleClass('untoggled'); |
|
218 |
hide_page_children($(this).parent()); |
|
219 |
}); |
|
220 | 150 | |
221 | 151 |
function init_cells_lists() { |
222 | 152 |
$('.cell-list').each(function() { |
combo/manager/templates/combo/manager_home.html | ||
---|---|---|
36 | 36 | |
37 | 37 |
<div class="objects-list" id="pages-list" data-page-order-url="{% url 'combo-manager-page-order' %}"> |
38 | 38 |
{% for page in object_list %} |
39 |
<div class="page level-{{page.level}}{% if collapse_pages %} untoggled{% endif %}" data-page-id="{{page.id}}" data-level="{{page.level}}">
|
|
39 |
<div class="page level-{{page.level}}" data-page-id="{{page.id}}" data-level="{{page.level}}"> |
|
40 | 40 |
{% if user.is_superuser %}<span class="handle">⣿</span>{% endif %} |
41 | 41 |
<span class="group1"> |
42 | 42 |
<a href="{% url 'combo-manager-page-view' pk=page.id %}"> |
... | ... | |
54 | 54 |
{% endwith %} |
55 | 55 |
</span> |
56 | 56 |
{% endif %} |
57 |
{% if collapse_pages %}<span class="togglable"></span>{% endif %} |
|
58 | 57 |
</div> |
59 | 58 |
{% endfor %} |
60 | 59 |
</div> |
combo/manager/views.py | ||
---|---|---|
97 | 97 |
) |
98 | 98 |
context = super().get_context_data(**kwargs) |
99 | 99 |
context['extra_actions'] = plugins.get_extra_manager_actions() |
100 |
context['collapse_pages'] = settings.COMBO_MANAGE_HOME_COLLAPSE_PAGES |
|
101 | 100 |
context['can_add_page'] = can_add_page(self.request.user) |
102 | 101 |
return context |
103 | 102 |
combo/settings.py | ||
---|---|---|
273 | 273 | |
274 | 274 |
COMBO_DASHBOARD_NEW_TILE_POSITION = 'last' |
275 | 275 | |
276 |
# collapse pages on combo home |
|
277 |
COMBO_MANAGE_HOME_COLLAPSE_PAGES = False |
|
278 | ||
279 | 276 |
# default position on maps |
280 | 277 |
COMBO_MAP_DEFAULT_POSITION = {'lat': '48.83369263315934', 'lng': '2.3233688436448574'} |
281 | 278 |
tests/test_manager.py | ||
---|---|---|
73 | 73 |
assert "This site doesn't have any page yet." in resp.text |
74 | 74 | |
75 | 75 | |
76 |
@pytest.mark.parametrize('collapse', [True, False]) |
|
77 |
def test_pages_collapse(settings, app, admin_user, collapse): |
|
78 |
Page.objects.create(title='One', slug='one') |
|
79 |
settings.COMBO_MANAGE_HOME_COLLAPSE_PAGES = collapse |
|
80 | ||
81 |
app = login(app) |
|
82 |
resp = app.get('/manage/', status=200) |
|
83 |
assert resp.context['collapse_pages'] is collapse |
|
84 |
assert ('class="page level-0 untoggled"' in resp.text) is collapse |
|
85 |
assert ('class="page level-0"' in resp.text) is not collapse |
|
86 | ||
87 | ||
88 | 76 |
def test_pages_redirection(app, admin_user): |
89 | 77 |
page = Page.objects.create(title='One', slug='one') |
90 | 78 | |
91 |
- |