diff --git a/physionet-django/project/static/project/js/dynamic-files-panel.js b/physionet-django/project/static/project/js/dynamic-files-panel.js new file mode 100644 index 0000000000..902f750f48 --- /dev/null +++ b/physionet-django/project/static/project/js/dynamic-files-panel.js @@ -0,0 +1,38 @@ +(function() { + 'use strict'; + + var panel = $('#files-panel'); + var cur_dir = panel.find('[data-dfp-cur-dir]').data('dfp-cur-dir'); + var panel_url = panel.find('[data-dfp-panel-url]').data('dfp-panel-url'); + + function navigateDir(subdir, page_url, push_history) { + $.ajax({ + type: 'GET', + url: panel_url, + data: {'subdir': subdir, 'v': '2'}, + success: function(result) { + if (push_history) + history.pushState(subdir, '', page_url); + else + history.replaceState(subdir, '', page_url); + panel.html(result); + setClickHandlers(); + }, + }); + } + + function setClickHandlers() { + panel.find('a[data-dfp-dir]').click(function(event) { + navigateDir($(this).data('dfp-dir'), this.href, true); + event.preventDefault(); + }); + } + setClickHandlers(); + + window.onpopstate = function(event) { + if (event.state !== null) { + navigateDir(event.state, window.location, false); + } + }; + history.replaceState(cur_dir, ''); +})(); diff --git a/physionet-django/project/templates/project/files_panel.html b/physionet-django/project/templates/project/files_panel.html index f4875a9f29..5caff7f0dd 100644 --- a/physionet-django/project/templates/project/files_panel.html +++ b/physionet-django/project/templates/project/files_panel.html @@ -1,3 +1,4 @@ +{# Note: This template is obsolescent. Use files_panel_v2 instead. #}
Folder Navigation: {% spaceless %} diff --git a/physionet-django/project/templates/project/files_panel_v2.html b/physionet-django/project/templates/project/files_panel_v2.html new file mode 100644 index 0000000000..be59e07d75 --- /dev/null +++ b/physionet-django/project/templates/project/files_panel_v2.html @@ -0,0 +1,75 @@ +{# Note: This template is used together with dynamic-files-panel.js. #} +
+ Folder Navigation: + {% spaceless %} + + {% for breadcrumb in dir_breadcrumbs %} + {% if forloop.counter == dir_breadcrumbs|length %} + {{ breadcrumb.name }} + {% else %} + {{ breadcrumb.name }} + / + {% endif %} + {% endfor %} + + {% endspaceless %} +
+{% if file_error %} +
+ +
+{% else %} + {% if file_warning %} +
+ +
+ {% endif %} + + + + + + + + + + + + + {% if subdir %} + + + + + + {% endif %} + {% for dir in display_dirs %} + + + + + + {% endfor %} + {% for file in display_files %} + + + + + + {% endfor %} + +
NameSizeModified
Parent Directory
{{ dir.name }}
{{ file.name }} + + (download) + + {{ file.size }}{{ file.last_modified }}
+{% endif %} diff --git a/physionet-django/project/templates/project/project_preview.html b/physionet-django/project/templates/project/project_preview.html index ee5a711345..7a65407beb 100644 --- a/physionet-django/project/templates/project/project_preview.html +++ b/physionet-django/project/templates/project/project_preview.html @@ -236,7 +236,7 @@

Files

{% endif %} {% endif %}
- {% include "project/files_panel.html" %} + {% include "project/files_panel_v2.html" %}

@@ -244,6 +244,7 @@

Files

{% endblock %} {% block local_js_bottom %} + {% endblock %} diff --git a/physionet-django/project/templates/project/published_project.html b/physionet-django/project/templates/project/published_project.html index cba490d00e..3ec8ddccd7 100644 --- a/physionet-django/project/templates/project/published_project.html +++ b/physionet-django/project/templates/project/published_project.html @@ -442,7 +442,7 @@
Access the files
{% endif %}
- {% include "project/files_panel.html" %} + {% include "project/files_panel_v2.html" %}
{% else %} {% include "project/published_project_denied_downloads.html" %} @@ -472,6 +472,7 @@
Access the files
{% endblock %} {% block local_js_bottom %} + {% endblock %} diff --git a/physionet-django/project/views.py b/physionet-django/project/views.py index 2d4688464a..a680ab43f5 100644 --- a/physionet-django/project/views.py +++ b/physionet-django/project/views.py @@ -1151,7 +1151,12 @@ def preview_files_panel(request, project_slug, **kwargs): file_warning = get_project_file_warning(display_files, display_dirs, subdir) - return render(request, 'project/files_panel.html', + if request.GET.get('v', '1') == '1': + template = 'project/files_panel.html' + else: + template = 'project/files_panel_v2.html' + + return render(request, template, {'project':project, 'subdir':subdir, 'file_error':file_error, 'dir_breadcrumbs':dir_breadcrumbs, 'parent_dir':parent_dir, 'display_files':display_files, 'display_dirs':display_dirs, @@ -1574,7 +1579,12 @@ def published_files_panel(request, project_slug, version): files_panel_url = reverse('published_files_panel', args=(project.slug, project.version)) - return render(request, 'project/files_panel.html', + if request.GET.get('v', '1') == '1': + template = 'project/files_panel.html' + else: + template = 'project/files_panel_v2.html' + + return render(request, template, {'project':project, 'subdir':subdir, 'dir_breadcrumbs':dir_breadcrumbs, 'parent_dir':parent_dir, 'display_files':display_files, 'display_dirs':display_dirs,