From 065df7d1b2ae84f6cef3c3329a1423dc32e07f75 Mon Sep 17 00:00:00 2001 From: John Tordoff Date: Wed, 28 Mar 2018 14:22:55 -0400 Subject: [PATCH 01/12] Add hierarchical zip renderer and adjust tests --- mfr/extensions/zip/render.py | 57 ++++++++++++++++++--- mfr/extensions/zip/templates/viewer.mako | 64 ++++++++++++++---------- tests/extensions/zip/test_renderer.py | 37 +++++--------- 3 files changed, 101 insertions(+), 57 deletions(-) diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index a6370530c..d406ae590 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -1,7 +1,6 @@ import os import zipfile -import markupsafe from mako.lookup import TemplateLookup from mfr.core import extension @@ -17,15 +16,55 @@ class ZipRenderer(extension.BaseRenderer): def render(self): zip_file = zipfile.ZipFile(self.file_path, 'r') + files = [file for file in zip_file.filelist if not file.filename.startswith('__MACOSX')] - filelist = [{'name': markupsafe.escape(file.filename), - 'size': sizeof_fmt(int(file.file_size)), - 'date': "%d-%02d-%02d %02d:%02d:%02d" % file.date_time[:6]} for file in zip_file.filelist - if not file.filename.startswith('__MACOSX')] + data = self.filelist_to_tree(files) - message = '' if filelist else 'This zip file is empty.' + return self.TEMPLATE.render(data=data, base=self.assets_url) - return self.TEMPLATE.render(zipped_filenames=filelist, message=message) + def filelist_to_tree(self, files): + + self.icons_url = self.assets_url + '/img' + + tree_data = [{ + 'text': self.metadata.name + self.metadata.ext, + 'icon': self.icons_url + '/file_extension_zip.png', + 'children': [] + }] + + for file in files: + node_path = tree_data[0] + paths = [path for path in file.filename.split('/') if path] + for path in paths: + if not len(node_path['children']) or node_path['children'][-1]['text'] != path: + # Add a child + new_node = {'text': path, 'children': []} + + if new_node['text']: # If not a placeholder/"root" directory. + date = '%d-%02d-%02d %02d:%02d:%02d' % file.date_time[:6] + size = sizeof_fmt(int(file.file_size)) if file.file_size else '' + + # create new node + new_node['data'] = {'date': date, 'size': size} + + if file.filename[-1] == '/': + new_node['icon'] = self.icons_url + '/folder.png' + else: + ext = os.path.splitext(file.filename)[1].lstrip('.') + if check_icon_ext(ext): + new_node['icon'] = \ + self.icons_url + '/file_extension_{}.png'.format(ext) + else: + new_node['icon'] = self.icons_url + '/generic-file.png' + + node_path['children'].append(new_node) + + node_path = new_node + else: + # "go deeper" to get children of children. + node_path = node_path['children'][-1] + + return tree_data @property def file_required(self): @@ -34,3 +73,7 @@ def file_required(self): @property def cache_result(self): return True + +def check_icon_ext(ext): + return os.path.isfile(os.path.join(os.path.dirname(__file__), 'static', 'img', 'icons', + 'file_extension_{}.png'.format(ext))) diff --git a/mfr/extensions/zip/templates/viewer.mako b/mfr/extensions/zip/templates/viewer.mako index f8b8b5438..0c96eb6cb 100644 --- a/mfr/extensions/zip/templates/viewer.mako +++ b/mfr/extensions/zip/templates/viewer.mako @@ -1,31 +1,43 @@ - - -
-

- Zip File: -

-

- Download the .zip file to view the contents. -

- ${message} - - - - - - - - % for file in zipped_filenames: - - - - - % endfor - -
File NameModifiedSize
${file['name']}${file['date']}${file['size']} -
+ + + + + + + + +
+ +
+ + diff --git a/tests/extensions/zip/test_renderer.py b/tests/extensions/zip/test_renderer.py index 162e27349..ce413b4a5 100644 --- a/tests/extensions/zip/test_renderer.py +++ b/tests/extensions/zip/test_renderer.py @@ -1,9 +1,9 @@ import os import re +import json from zipfile import ZipFile import pytest -from bs4 import BeautifulSoup from mfr.core.provider import ProviderMetadata from mfr.extensions.zip import ZipRenderer @@ -24,6 +24,10 @@ def metadata(): def zip_file(): return ZipFile(os.path.join(BASE, 'files', 'test.zip'), 'r') +@pytest.fixture +def zip_file_tree(): + return ZipFile(os.path.join(BASE, 'files', 'test-tree.zip'), 'r') + @pytest.fixture def zip_empty_file(): @@ -55,36 +59,21 @@ def renderer(metadata, test_file_path, url, assets_url, export_url): return ZipRenderer(metadata, test_file_path, url, assets_url, export_url) - -def remove_whitespace(str): - str = re.sub('\n*', '', str) - return re.sub(r'\ {2,}', '', str) +@pytest.fixture +def file_tree(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/fixtures.json'), 'r') as fp: + return json.load(fp)['file_tree'] class TestZipRenderer: def test_render(self, renderer): body = renderer.render() - parsed_html = BeautifulSoup(body) - rows = parsed_html.findChildren('table')[0].findChildren(['tr']) - - name = rows[2].findChildren('td')[0].get_text().strip() - assert 'test/test 1' == name - - date_modified = rows[2].findChildren('td')[1].get_text().strip() - assert '2017-03-02 16:22:14' == date_modified - - size = rows[2].findChildren('td')[2].get_text().strip() - assert '15B' == size - # non-expanded zip file should have no children - name = rows[4].findChildren('td')[0].get_text().strip() - assert 'test/zip file which is not expanded.zip' == name - assert body.count('zip file which is not expanded.zip') == 1 + def test_filelist_to_tree(self, renderer, zip_file_tree, file_tree): - size = rows[4].findChildren('td')[2].get_text().strip() - assert '1.8KB' == size # formatting of larger byte sizes + files = [file for file in zip_file_tree.filelist if not file.filename.startswith('__MACOSX')] - # hidden files should be hidden - assert body.count('__MACOSX') == 0 + actual = renderer.filelist_to_tree(files) + assert actual == file_tree From 8fd575a0ac2b3808eb3856ec5bacbdeb420b3816 Mon Sep 17 00:00:00 2001 From: John Tordoff Date: Wed, 28 Mar 2018 14:28:18 -0400 Subject: [PATCH 02/12] Add static assets for hierarchical zip rendering --- mfr/extensions/zip/static/__init__.py | 0 .../zip/static/css/jstree-style.min.css | 1 + mfr/extensions/zip/static/img/delete.png | Bin 0 -> 695 bytes .../zip/static/img/file_extension_3gp.png | Bin 0 -> 576 bytes .../zip/static/img/file_extension_7z.png | Bin 0 -> 654 bytes .../zip/static/img/file_extension_ace.png | Bin 0 -> 671 bytes .../zip/static/img/file_extension_ai.png | Bin 0 -> 641 bytes .../zip/static/img/file_extension_aif.png | Bin 0 -> 622 bytes .../zip/static/img/file_extension_aiff.png | Bin 0 -> 643 bytes .../zip/static/img/file_extension_amr.png | Bin 0 -> 570 bytes .../zip/static/img/file_extension_asf.png | Bin 0 -> 676 bytes .../zip/static/img/file_extension_asx.png | Bin 0 -> 647 bytes .../zip/static/img/file_extension_bat.png | Bin 0 -> 663 bytes .../zip/static/img/file_extension_bin.png | Bin 0 -> 557 bytes .../zip/static/img/file_extension_bmp.png | Bin 0 -> 665 bytes .../zip/static/img/file_extension_bup.png | Bin 0 -> 662 bytes .../zip/static/img/file_extension_cab.png | Bin 0 -> 663 bytes .../zip/static/img/file_extension_cbr.png | Bin 0 -> 617 bytes .../zip/static/img/file_extension_cda.png | Bin 0 -> 677 bytes .../zip/static/img/file_extension_cdl.png | Bin 0 -> 729 bytes .../zip/static/img/file_extension_cdr.png | Bin 0 -> 632 bytes .../zip/static/img/file_extension_chm.png | Bin 0 -> 662 bytes .../zip/static/img/file_extension_dat.png | Bin 0 -> 668 bytes .../zip/static/img/file_extension_divx.png | Bin 0 -> 678 bytes .../zip/static/img/file_extension_dll.png | Bin 0 -> 598 bytes .../zip/static/img/file_extension_dmg.png | Bin 0 -> 669 bytes .../zip/static/img/file_extension_doc.png | Bin 0 -> 624 bytes .../zip/static/img/file_extension_docx.png | Bin 0 -> 624 bytes .../zip/static/img/file_extension_dss.png | Bin 0 -> 609 bytes .../zip/static/img/file_extension_dvf.png | Bin 0 -> 688 bytes .../zip/static/img/file_extension_dwg.png | Bin 0 -> 643 bytes .../zip/static/img/file_extension_eml.png | Bin 0 -> 639 bytes .../zip/static/img/file_extension_eps.png | Bin 0 -> 614 bytes .../zip/static/img/file_extension_exe.png | Bin 0 -> 613 bytes .../zip/static/img/file_extension_fla.png | Bin 0 -> 665 bytes .../zip/static/img/file_extension_flv.png | Bin 0 -> 633 bytes .../zip/static/img/file_extension_gif.png | Bin 0 -> 611 bytes .../zip/static/img/file_extension_gz.png | Bin 0 -> 649 bytes .../zip/static/img/file_extension_hqx.png | Bin 0 -> 643 bytes .../zip/static/img/file_extension_htm.png | Bin 0 -> 673 bytes .../zip/static/img/file_extension_html.png | Bin 0 -> 711 bytes .../zip/static/img/file_extension_ifo.png | Bin 0 -> 691 bytes .../zip/static/img/file_extension_indd.png | Bin 0 -> 702 bytes .../zip/static/img/file_extension_iso.png | Bin 0 -> 643 bytes .../zip/static/img/file_extension_jar.png | Bin 0 -> 649 bytes .../zip/static/img/file_extension_jpeg.png | Bin 0 -> 678 bytes .../zip/static/img/file_extension_jpg.png | Bin 0 -> 670 bytes .../zip/static/img/file_extension_lnk.png | Bin 0 -> 629 bytes .../zip/static/img/file_extension_log.png | Bin 0 -> 664 bytes .../zip/static/img/file_extension_m4a.png | Bin 0 -> 600 bytes .../zip/static/img/file_extension_m4b.png | Bin 0 -> 653 bytes .../zip/static/img/file_extension_m4p.png | Bin 0 -> 645 bytes .../zip/static/img/file_extension_m4v.png | Bin 0 -> 651 bytes .../zip/static/img/file_extension_mcd.png | Bin 0 -> 699 bytes .../zip/static/img/file_extension_mdb.png | Bin 0 -> 645 bytes .../zip/static/img/file_extension_mid.png | Bin 0 -> 637 bytes .../zip/static/img/file_extension_mov.png | Bin 0 -> 697 bytes .../zip/static/img/file_extension_mp2.png | Bin 0 -> 656 bytes .../zip/static/img/file_extension_mp3.png | Bin 0 -> 637 bytes .../zip/static/img/file_extension_mp4.png | Bin 0 -> 603 bytes .../zip/static/img/file_extension_mpeg.png | Bin 0 -> 670 bytes .../zip/static/img/file_extension_mpg.png | Bin 0 -> 645 bytes .../zip/static/img/file_extension_msi.png | Bin 0 -> 697 bytes .../zip/static/img/file_extension_mswmm.png | Bin 0 -> 791 bytes .../zip/static/img/file_extension_ogg.png | Bin 0 -> 690 bytes .../zip/static/img/file_extension_pdf.png | Bin 0 -> 657 bytes .../zip/static/img/file_extension_png.png | Bin 0 -> 702 bytes .../zip/static/img/file_extension_pps.png | Bin 0 -> 596 bytes .../zip/static/img/file_extension_ps.png | Bin 0 -> 624 bytes .../zip/static/img/file_extension_psd.png | Bin 0 -> 689 bytes .../zip/static/img/file_extension_pst.png | Bin 0 -> 624 bytes .../zip/static/img/file_extension_ptb.png | Bin 0 -> 664 bytes .../zip/static/img/file_extension_pub.png | Bin 0 -> 650 bytes .../zip/static/img/file_extension_py.png | Bin 0 -> 1282 bytes .../zip/static/img/file_extension_qbb.png | Bin 0 -> 612 bytes .../zip/static/img/file_extension_qbw.png | Bin 0 -> 595 bytes .../zip/static/img/file_extension_qxd.png | Bin 0 -> 714 bytes .../zip/static/img/file_extension_ram.png | Bin 0 -> 666 bytes .../zip/static/img/file_extension_rar.png | Bin 0 -> 740 bytes .../zip/static/img/file_extension_rm.png | Bin 0 -> 674 bytes .../zip/static/img/file_extension_rmvb.png | Bin 0 -> 660 bytes .../zip/static/img/file_extension_rtf.png | Bin 0 -> 664 bytes .../zip/static/img/file_extension_sea.png | Bin 0 -> 649 bytes .../zip/static/img/file_extension_ses.png | Bin 0 -> 668 bytes .../zip/static/img/file_extension_sit.png | Bin 0 -> 680 bytes .../zip/static/img/file_extension_sitx.png | Bin 0 -> 667 bytes .../zip/static/img/file_extension_ss.png | Bin 0 -> 695 bytes .../zip/static/img/file_extension_swf.png | Bin 0 -> 685 bytes .../zip/static/img/file_extension_tgz.png | Bin 0 -> 621 bytes .../zip/static/img/file_extension_thm.png | Bin 0 -> 635 bytes .../zip/static/img/file_extension_tif.png | Bin 0 -> 646 bytes .../zip/static/img/file_extension_tmp.png | Bin 0 -> 569 bytes .../zip/static/img/file_extension_torrent.png | Bin 0 -> 618 bytes .../zip/static/img/file_extension_ttf.png | Bin 0 -> 668 bytes .../zip/static/img/file_extension_txt.png | Bin 0 -> 639 bytes .../zip/static/img/file_extension_vcd.png | Bin 0 -> 673 bytes .../zip/static/img/file_extension_vob.png | Bin 0 -> 632 bytes .../zip/static/img/file_extension_wav.png | Bin 0 -> 648 bytes .../zip/static/img/file_extension_wma.png | Bin 0 -> 694 bytes .../zip/static/img/file_extension_wmv.png | Bin 0 -> 688 bytes .../zip/static/img/file_extension_wps.png | Bin 0 -> 651 bytes .../zip/static/img/file_extension_xls.png | Bin 0 -> 617 bytes .../zip/static/img/file_extension_xlsx.png | Bin 0 -> 617 bytes .../zip/static/img/file_extension_xpi.png | Bin 0 -> 612 bytes .../zip/static/img/file_extension_zip.png | Bin 0 -> 644 bytes mfr/extensions/zip/static/img/folder.png | Bin 0 -> 632 bytes .../zip/static/img/folder_delete.png | Bin 0 -> 767 bytes .../static/img/folder_horizontal_closed.png | Bin 0 -> 542 bytes .../zip/static/img/generic-file.png | Bin 0 -> 251 bytes mfr/extensions/zip/static/js/jstree.min.js | 4 + mfr/extensions/zip/static/js/jstreetable.js | 1060 ++++++++++++++++ .../zip/static/jstree-theme/32px.png | Bin 0 -> 3121 bytes .../zip/static/jstree-theme/40px.png | Bin 0 -> 1880 bytes .../zip/static/jstree-theme/style.css | 1108 +++++++++++++++++ .../zip/static/jstree-theme/style.min.css | 1 + .../zip/static/jstree-theme/throbber.gif | Bin 0 -> 1720 bytes 116 files changed, 2174 insertions(+) create mode 100644 mfr/extensions/zip/static/__init__.py create mode 100644 mfr/extensions/zip/static/css/jstree-style.min.css create mode 100644 mfr/extensions/zip/static/img/delete.png create mode 100644 mfr/extensions/zip/static/img/file_extension_3gp.png create mode 100644 mfr/extensions/zip/static/img/file_extension_7z.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ace.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ai.png create mode 100644 mfr/extensions/zip/static/img/file_extension_aif.png create mode 100644 mfr/extensions/zip/static/img/file_extension_aiff.png create mode 100644 mfr/extensions/zip/static/img/file_extension_amr.png create mode 100644 mfr/extensions/zip/static/img/file_extension_asf.png create mode 100644 mfr/extensions/zip/static/img/file_extension_asx.png create mode 100644 mfr/extensions/zip/static/img/file_extension_bat.png create mode 100644 mfr/extensions/zip/static/img/file_extension_bin.png create mode 100644 mfr/extensions/zip/static/img/file_extension_bmp.png create mode 100644 mfr/extensions/zip/static/img/file_extension_bup.png create mode 100644 mfr/extensions/zip/static/img/file_extension_cab.png create mode 100644 mfr/extensions/zip/static/img/file_extension_cbr.png create mode 100644 mfr/extensions/zip/static/img/file_extension_cda.png create mode 100644 mfr/extensions/zip/static/img/file_extension_cdl.png create mode 100644 mfr/extensions/zip/static/img/file_extension_cdr.png create mode 100644 mfr/extensions/zip/static/img/file_extension_chm.png create mode 100644 mfr/extensions/zip/static/img/file_extension_dat.png create mode 100644 mfr/extensions/zip/static/img/file_extension_divx.png create mode 100644 mfr/extensions/zip/static/img/file_extension_dll.png create mode 100644 mfr/extensions/zip/static/img/file_extension_dmg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_doc.png create mode 100644 mfr/extensions/zip/static/img/file_extension_docx.png create mode 100644 mfr/extensions/zip/static/img/file_extension_dss.png create mode 100644 mfr/extensions/zip/static/img/file_extension_dvf.png create mode 100644 mfr/extensions/zip/static/img/file_extension_dwg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_eml.png create mode 100644 mfr/extensions/zip/static/img/file_extension_eps.png create mode 100644 mfr/extensions/zip/static/img/file_extension_exe.png create mode 100644 mfr/extensions/zip/static/img/file_extension_fla.png create mode 100644 mfr/extensions/zip/static/img/file_extension_flv.png create mode 100644 mfr/extensions/zip/static/img/file_extension_gif.png create mode 100644 mfr/extensions/zip/static/img/file_extension_gz.png create mode 100644 mfr/extensions/zip/static/img/file_extension_hqx.png create mode 100644 mfr/extensions/zip/static/img/file_extension_htm.png create mode 100644 mfr/extensions/zip/static/img/file_extension_html.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ifo.png create mode 100644 mfr/extensions/zip/static/img/file_extension_indd.png create mode 100644 mfr/extensions/zip/static/img/file_extension_iso.png create mode 100644 mfr/extensions/zip/static/img/file_extension_jar.png create mode 100644 mfr/extensions/zip/static/img/file_extension_jpeg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_jpg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_lnk.png create mode 100644 mfr/extensions/zip/static/img/file_extension_log.png create mode 100644 mfr/extensions/zip/static/img/file_extension_m4a.png create mode 100644 mfr/extensions/zip/static/img/file_extension_m4b.png create mode 100644 mfr/extensions/zip/static/img/file_extension_m4p.png create mode 100644 mfr/extensions/zip/static/img/file_extension_m4v.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mcd.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mdb.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mid.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mov.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mp2.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mp3.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mp4.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mpeg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mpg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_msi.png create mode 100644 mfr/extensions/zip/static/img/file_extension_mswmm.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ogg.png create mode 100644 mfr/extensions/zip/static/img/file_extension_pdf.png create mode 100644 mfr/extensions/zip/static/img/file_extension_png.png create mode 100644 mfr/extensions/zip/static/img/file_extension_pps.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ps.png create mode 100644 mfr/extensions/zip/static/img/file_extension_psd.png create mode 100644 mfr/extensions/zip/static/img/file_extension_pst.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ptb.png create mode 100644 mfr/extensions/zip/static/img/file_extension_pub.png create mode 100644 mfr/extensions/zip/static/img/file_extension_py.png create mode 100644 mfr/extensions/zip/static/img/file_extension_qbb.png create mode 100644 mfr/extensions/zip/static/img/file_extension_qbw.png create mode 100644 mfr/extensions/zip/static/img/file_extension_qxd.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ram.png create mode 100644 mfr/extensions/zip/static/img/file_extension_rar.png create mode 100644 mfr/extensions/zip/static/img/file_extension_rm.png create mode 100644 mfr/extensions/zip/static/img/file_extension_rmvb.png create mode 100644 mfr/extensions/zip/static/img/file_extension_rtf.png create mode 100644 mfr/extensions/zip/static/img/file_extension_sea.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ses.png create mode 100644 mfr/extensions/zip/static/img/file_extension_sit.png create mode 100644 mfr/extensions/zip/static/img/file_extension_sitx.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ss.png create mode 100644 mfr/extensions/zip/static/img/file_extension_swf.png create mode 100644 mfr/extensions/zip/static/img/file_extension_tgz.png create mode 100644 mfr/extensions/zip/static/img/file_extension_thm.png create mode 100644 mfr/extensions/zip/static/img/file_extension_tif.png create mode 100644 mfr/extensions/zip/static/img/file_extension_tmp.png create mode 100644 mfr/extensions/zip/static/img/file_extension_torrent.png create mode 100644 mfr/extensions/zip/static/img/file_extension_ttf.png create mode 100644 mfr/extensions/zip/static/img/file_extension_txt.png create mode 100644 mfr/extensions/zip/static/img/file_extension_vcd.png create mode 100644 mfr/extensions/zip/static/img/file_extension_vob.png create mode 100644 mfr/extensions/zip/static/img/file_extension_wav.png create mode 100644 mfr/extensions/zip/static/img/file_extension_wma.png create mode 100644 mfr/extensions/zip/static/img/file_extension_wmv.png create mode 100644 mfr/extensions/zip/static/img/file_extension_wps.png create mode 100644 mfr/extensions/zip/static/img/file_extension_xls.png create mode 100644 mfr/extensions/zip/static/img/file_extension_xlsx.png create mode 100644 mfr/extensions/zip/static/img/file_extension_xpi.png create mode 100644 mfr/extensions/zip/static/img/file_extension_zip.png create mode 100644 mfr/extensions/zip/static/img/folder.png create mode 100644 mfr/extensions/zip/static/img/folder_delete.png create mode 100644 mfr/extensions/zip/static/img/folder_horizontal_closed.png create mode 100644 mfr/extensions/zip/static/img/generic-file.png create mode 100644 mfr/extensions/zip/static/js/jstree.min.js create mode 100755 mfr/extensions/zip/static/js/jstreetable.js create mode 100755 mfr/extensions/zip/static/jstree-theme/32px.png create mode 100755 mfr/extensions/zip/static/jstree-theme/40px.png create mode 100755 mfr/extensions/zip/static/jstree-theme/style.css create mode 100755 mfr/extensions/zip/static/jstree-theme/style.min.css create mode 100755 mfr/extensions/zip/static/jstree-theme/throbber.gif diff --git a/mfr/extensions/zip/static/__init__.py b/mfr/extensions/zip/static/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/mfr/extensions/zip/static/css/jstree-style.min.css b/mfr/extensions/zip/static/css/jstree-style.min.css new file mode 100644 index 000000000..a24ff3013 --- /dev/null +++ b/mfr/extensions/zip/static/css/jstree-style.min.css @@ -0,0 +1 @@ +.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none;display:inline}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}} \ No newline at end of file diff --git a/mfr/extensions/zip/static/img/delete.png b/mfr/extensions/zip/static/img/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..ace289edd9f926ac7efbb4fdec05a31bebff5c50 GIT binary patch literal 695 zcmV;o0!aOdP)QxDlb83q-g)V>(Fk^6xXjEs=gr)Cm*Fo<^mL4I$34wC5BNF8n89S}#-XQ~^YvJP z0rP`oZ*;)1tns$P{b=pl2d$+AUX=r8v50)?1wKtaf~=~8v8iq7@iUs@V!3vC9|bnoZDKlrp!MjH|$pBKJ@cq?f{ zCVHcD`}cGp5YXv%Ya$H|FfqRb!>HoL)()ikK8 z3Pm`bUM%udCmi94x3Wgy;_K{9I_=cV)$Lo`5e|pMWd*@_tw+Z&FrWK^cOU1F`1W(y z$NMAr)+~I-tpmF*Y*Lkz;vzI~AHmE;%f37G?9C++ycJ$*c#U-y5x&t|@v6DP3x3=6 d&-s@C0{~E>2o(vq?o0px002ovPDHLkV1inyM1%kU literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_3gp.png b/mfr/extensions/zip/static/img/file_extension_3gp.png new file mode 100644 index 0000000000000000000000000000000000000000..4065bdfd90c5ca8ac2a69d0f3a6a0f0572a43522 GIT binary patch literal 576 zcmV-G0>Axk7RCwBqQ$0%^K@>fAXZHDB2r*SY z)E{7H6CWZLqJn=r5kl~zOPv(zi=FV0fS{FyXb>TVAt8!guuxJM#k3Y82#G#t zCijlJdAqnzGBE7iz4xAb&KZWBbCA{c{=+Y8?8BR=!V2i*VB$q{97?Z_18MFa%tHVu z(Ic_57KRAz$ET0qO&6CAr(O=nd7T_!jK$}*Z3HSn0vKHb9oSge!u*>t{5ID^bJIn{ zASnRLlyX%ehykvQK~5>2&K!uT1`K-j2V=e6s8M=oc6LFgJP%R;OjU&nB|h)J8o_y~ zgi98&_x&fD9^FT4VG%8F=dt~uQKmh+&48x`T8kDRAH5z;dDvE5Ml~}DxQ?IVq!?4tj`T?rc7rkhkjtefJhD_v-XRuNseQLvyC zP3FDv+?jlgM!^R+b2IPUlXLF9QBf4(_J!J4=X{^!?GyQKuC#(y>htv6#O}_03v1;= zii?wDeCY)a&*HG*`1H_5!!X`&eB3n^Rv*kPmM4)qxLtEc*BMBZ41q6WDgrqyl9u zlu|M6sZt(Ks%v<&_637S@{B=vS`EFU<*o(W5`bpY!DvGQHjMOu z#Gr^xJ$h^;Dfm-CNDIp9Sb-wLXfcOpwGEhzfei@b`^b5jSh~L5L={^w+H&5sK_$xz zZ*j7Ch&P5!WM62{Fa(#DkXTTO1u3LTssTpNA54@v{&J*co2X1BIQ5q?iUn;9!3vkJ zk8}W6mX`!Hgxr4{WM!{mx1&32S&L3Vf=e^R1V0+zS3a%3I+0$Ge;$?KJ748* o$=M%Z-iQA`o2+{$$u9v00A9P@Gf!DhVE_OC07*qoM6N<$g0h_^tN;K2 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ace.png b/mfr/extensions/zip/static/img/file_extension_ace.png new file mode 100644 index 0000000000000000000000000000000000000000..912abbd9bebbb206cefe7f620b7a9db266d6ffbe GIT binary patch literal 671 zcmV;Q0$}}#P)hvq+H;>wMyg9J(dHjdGbEUb;8m4u?Tu=u?}F_4pf|h&*_r^$}|G7APs{ zmfv{TID`=?&(8<<1A?7ntV}CK)}m0<-PL^d8Q1FvVMxwEbvycoX3%@)HmW+2paXJSpg?b@X1`)= zZ~!xNkMZ>Nr>?ofC-!#`Sq6d&SkHh9COw8Sbt>w!Z+ z1+-F7T49>NBPXlAD_oe*0-|QD!j zl14>zPfg5wvwQ-1P~KF4mI-mr%bM6JAZZRHO63xGM#?0lGb=th9jIi;q|eXKLip$H z`!^pB$1YEAy^wqv<)_br$C7%ygZ33{Jbn>wi8ucQ7y$li;s_NgjCcS5002ovPDHLk FV1n}~A+7)b literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ai.png b/mfr/extensions/zip/static/img/file_extension_ai.png new file mode 100644 index 0000000000000000000000000000000000000000..762346076e985bfafca8b4402cf886eacfcd5b3c GIT binary patch literal 641 zcmV-{0)G98P)gn@$z0%V-k`I zn&`qJwacchTLl;HtshOg5ClQcmHrM3EiR=}M0YMM?y{;NxTv`3LZJxK1Q(6gfK+Mn zX2v@+X+9MkxXjFb_ndp~o%@(E24C;6A4VYqgVAMu%vq!O6eqfF-m)$IJjQaB@V4@FC*y7Dw*j-!4nU@Cn<>_)ApBRyp z2MIbdWRk#A5&?4(4UvLrFb>o-aQeYVBWrZO2a%e9TA2b*ru~SrAp$$PR=-Fc2O3)h z&i3ZH@g9h%wkYR)6vu`M_FLFQwR#bq|EHUwzgw*1WvA-Y@4|3AE2GvKbNdK!~50t2cVKj-qeE zKMp=IJPhv~`32_~%pYOQvhwYFciGHTt~|YUu{B51$mFcWa-F(6W(1Lp=Lw<=6w)+DV2uGRD-ft*4QK9;;>D!8@Ic?y6mdRBz*1$BL;{lR zjDHq)$ literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_aiff.png b/mfr/extensions/zip/static/img/file_extension_aiff.png new file mode 100644 index 0000000000000000000000000000000000000000..6bd4ab7a60c7b65fdc7b445ef9708c31cb117f07 GIT binary patch literal 643 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 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_bin.png b/mfr/extensions/zip/static/img/file_extension_bin.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5411efb8d38e7a8c7c918558fafa33b5589b0c GIT binary patch literal 557 zcmV+|0@D47P))EotNyTyOGuh5_}Nnq zhgJk^K@$MVVry|AegA&>mm@(OG~-$m5VKSQ9$oLKsZupgYT!#)>Sq;FL^!mzKp;;- z5YQ5GbFMGloBnhHNh;hwk@?$lpE0zN=^A~7x)ms{9J{@MNCRIv1x&!W)*%wLCD6vl z7rEq1>t*OT16FTLTMO2uT>5;PCe2g5czPDsOh5n@<^>vF?l3e~bS@ARrUaF{o87-< vjN^gDcsDmW&Xjx)-8%5_`bWK&_W}$6>e0di4uzT=00000NkvXXu0mjfI@k2U literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_bmp.png b/mfr/extensions/zip/static/img/file_extension_bmp.png new file mode 100644 index 0000000000000000000000000000000000000000..42aa0026f2368e52c89e3add362fade3191bba37 GIT binary patch literal 665 zcmV;K0%rY*P)0%5w~XBW40LKYSMVC=L?zmG zgEFk01QuMQfmR|7$Bd&L9YXqG4$WA!+Y1jv1da)1rYMT{6C6rj!m~;qjYx@pnh3;5 z9Zo{Q=5d97d1bmNRPGS|1D$Myr(n_iM?Zp=zlNTQC(!`p8x{@zKi{qq$t^l00000NkvXXu0mjf0yip| literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_bup.png b/mfr/extensions/zip/static/img/file_extension_bup.png new file mode 100644 index 0000000000000000000000000000000000000000..ce04201323d409d21ce477edb933c0cb204f556b GIT binary patch literal 662 zcmV;H0%`q;P)$mjd=JZNL1^;cy?qlN z-XB5navrWXHgI*QfCxmjC5Q$^Qc6Kes|nz14L{IJz^mfez8sSF_`ntGIU60a+F3Rz znot&mY)wgy#pxMjva7N2%o}VNe2UR!TPbCIFqQ%5;QAVMEdt`qo0-^_g|9y<(2z)E z(p))szTd1V-M`82zNhG9zLm|7?bS+W?uAR~7NJ!Ku!06Gn zfqqZ6qZwew?au@fwl+eDQK->@kdh)weS;Ujvd^8M(%VBc0DMgbE!jjLNwbQ1QLJMpfNu;V!xiqmreA9 w@XuGt&TJn@(Q_6;WNBG}{~xpDTly`)02%z)E2)QztpET307*qoM6N<$f`0Wg?f?J) literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_cab.png b/mfr/extensions/zip/static/img/file_extension_cab.png new file mode 100644 index 0000000000000000000000000000000000000000..74aef831b7e5ae7c5e456d876d49d9f73e258a64 GIT binary patch literal 663 zcmV;I0%-k-P)J_s#dd_oA$|I5t)OVNBc;bMF>E;+K;W(+XPYjSqKoy=X4m zjP>P5lE<&+5XVV^;axrCmuFwoJmBre@4Fjg#fP8g^P||b{1#fJ0o+@B3D480g%;yy z4`N~@i`!-3{^E0ddoY4Rc(kC#ifVN}U)Ta5uT~8Zq*L&;MjbJ3FnQ+LCscMGf~F7Q z1|D76gUcG1QWK?sDHkPIw~%T=U$_Qh8goluaO?a4{RT&}`?2r(8|=OI0+~!N8OIko z7}TQ30f=A%J2{-e?9v)uzpvob$-_87lTzzZhz<>)6siOueJEWg6j za3vT6O9rv0 zU}&?Ybxh{^5b@ITob*#WO;kq-bcqHcp7g%TIhfA%C*tzChyW>;rfi}WHbJx*v@~e& z^mufz9q^~#x_sx@m3IFpw8~3zm1E%I)L(6kYQM_<%Gw#< xV%rs~B))Z4GF?Q>a^HjhUq6|*Dx2Q|3;+V2-RVF|`PY9zA}74?FMC z>3qb~xy4zNgCMg5fS!d>1kdw~Tq`k263cQ}s%m4siKS;N4=9O8!`RIA^-3k-mrA%m zULuHfQX_>#^~yEet=CZ}zg(%9eVHyOFtu`8q$y=`b_S}~`rhs?ZcR?&`i-05oI@*} z*8DfX1T)4_t6jyy!aStlA&RvXN9EFgg2w)jtDDbI9buK`NgpM_VA_eR`1*Tb|Xc((& z&++5*v;cVV@)dkPFinR-BN?P22VsDp-7Z#E*K7}rkBwn!>NaNLX)G@UbfFnZo1y*$n>JxZG!bD*EUat=8;g>PG-xL20t;y*7U;xCs|3+$ zn;PTYAI`ncdu9xY^YUKKJ@-53e&>7VGOaZV=N~R8salQyFJp{Th%ogQ>TLzqQ;QJR`Eo5<;7eM&Kf-ok#AU(5_NFfb;G0dqJMoi3!NL`5-;m(NS+ z?8zd#vkQ)4rj%{3xd0^)SJZ^Y$k8p>yDbqMZ{9B9+^uQLbjP0Ukw(9a|7IW|XgQqU zYLj=J9JBG+cU7z`P|^NwXcE|HRc}20X<;ZK$=lc6W;fD-ivy>|ky-6wQ|Bt|?paU! z+_uKh#DG}_M!?uS@&nI7-{?5jt&KYE*pRlk`W_Mu6ba^eE^5mP@8_#fB-Xc3%}>%%by}flgOgk^#dP*2I%6wGD4cb_LdYrF4mBu`Dn?c?Hm|fgs&^`qq5P)Xpd^YehPjdt^-^vS)k{JV(Q8yBBtb?*p$`UKUQ0=&KrHMb3X?WX zda$w$FX_(C{D0?+m)%u@&RqCs<~!f{&UgM%q?A~5{7%d?Ew2y~{|Z%AfAl>#>6?A# zJPwU-rYXFaPalM!mnszS3HmOifMt^^c=LWBKVjZ#iMF1qO(nJoxN5^7mgya8)5Iu1ZtDVVKfR zP^ks(-x2~-RJ|w**s--7ySGPi00000 LNkvXXu0mjfBpXa; literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_cdr.png b/mfr/extensions/zip/static/img/file_extension_cdr.png new file mode 100644 index 0000000000000000000000000000000000000000..277b23d0e5a17d9576aa4a247ac99ea433e5ba4e GIT binary patch literal 632 zcmV-;0*C#HP)mdUt0&Pp!K^YZ5$r*MyV;`~)}aQLRj1<@FmpzyB2v zS1WV%MF=99>mlH<&RfKhgjNzlh(Kzr3(+O74}g2~+i0v`sq01@ky9-rVAakih#~0C7fZGYatlg-_dNCfY5MQS|Bv6~_l1A{2rvM*u;sXM Sayae)0000_a{+`50q4SUaeFnN*x7+v1Wm=Cqii21yo|ONd76*EaVom}JY>pA z$<c37_`EhKqK zPo4v3+qV6b|17`>s!g~y*z=rK@16Ng-hb{qLY(L~LbrH(CR5lJ4s z_a0Ra$+m*=c1Au>(65*?X2v_ wIZwysR1=@wRSQ()xex!p)|s~=hra?008r=c;u%{t9smFU07*qoM6N<$g5lpS+W-In literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_dat.png b/mfr/extensions/zip/static/img/file_extension_dat.png new file mode 100644 index 0000000000000000000000000000000000000000..758a0e1c1a4d0fb5403361422682d30fce19af72 GIT binary patch literal 668 zcmV;N0%QG&P)W0v`}nfVS%npzpKP%>QQ}sZ3sDY1lC$K;~38$Pl7zf6vWw6 zSYy#Ya2D4mZsX(K6wT!HAmIhQ9$yG+lDylaL(KSME6iLMcg$kr=&Dm0J)31@mPbN@~F{#JbX zv5tX6*PW*g^Aa(b9>eK1t<8nsl13@(B>m9#>3C` zhTDlUV(|+uuffJM${YltJMZl}0F!e6?jh4k8=0gHpJzb)f+O`8fo;&U~G_u2zt@f zgLb8b`fQBJ?u`G;wyAAa@ZTL~=6`(ieLpiy2mzLv_yWPh-~#@}01fjPIucv<$U13; zx8vdSsY5ggmCK|{B>}GB;N;1Fnvdp&$H#CbJ@7a55&%$k9Nd|DMJH)1QJ3RvR|iHP zzl6vfL)%@q|LyQNBar^(lxnssk26gAO_+7w4ATH-k`-|(E#S?WcI=Pu=)?7g_iF$u zMBgwpn7SOg8it`034v(SX0U6|!7e|*uGl8Y_{3@nWR5GS$be1~R`C}El8#4e0ICv71Tb-Y z59Ue^+D7vzRs@>s1ISF|3uJ6G>M!@t)?JxF-7YTTWC8`W)Vnj3L+9B4WwFSEru4YqD7$CCQ@h-BH}`7 ze%$*y-_bWS+KhA_k8{88ocrB#&U@F3q6oC%d%0EXYzMYsee=APXOkl*W5~Th46L;s z{TI`qp66Bf5WC26H%gnUC#;>AnaPb_kK;k@0nRzhy_rW~s&v_warr_T&u3p?Zu&k- zC7S^z5R2>*h~!B&ClLg-0v4VR7-QhdMO^9YMi>SeV;P7jGUE{}(9o05bGiiTs1?-by9gj)mW;jB#EH=0*hfEBR+>|hU0cedlv*d68RiODnWqJ|Yj91tGAdawBF zw;#Hur*X|V^BPnjEd(KQcW)}5efLTF-&9W{&-nI#QLh3CBoZOUAHGza={*Z8r_s~M zGafY*;AfN`hx*PbK9g$4`0al6H1dq^JH+OuCcMsn!OG7yOg(+8JUuaa#%qTdRPTug zU)}@Bq<-ZOpO?|rdKgdUKdL7_)N)XN4d!_}7p5Xm_`S8Tkk5DRcNr^(?d0n^zRsf9 kDeegV-!^3L_rC%R0Hs#q^WSK6qyPW_07*qoM6N<$f_wcDiU0rr literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_dmg.png b/mfr/extensions/zip/static/img/file_extension_dmg.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d6a81c161be2a5e728b3f5eae5037d999998a1 GIT binary patch literal 669 zcmV;O0%HA%P)L3u@gj(L@*sGz9uz@E#X>AzdZ^a; z14}8c(Z*zV-+RvNHcOV~;K18A``*kq^Ucf?#uyyD`QfM1I>)*JAZYR4FP0F??=F=$ z_x{K8&sFz8o5)!RHi#CVvFZHRR^FRz+@Bk-oaqOaJv1)>?#?t|TY{sJqak2} z`mqXbKbpnD#D1LhN9tm-A>NNy>Tzb#Cg5qnNl9#QQgGImloCFjTLg;s58OMo5tUur zYX_$09wY!bZ3eKUO-qJ5Y#Y9?(CPvsg-s|;e@E&1EQ*C3j5ene6j(e(K(+;8Ss`cN zXj~pEpjHMhsBPG{yBG%Yl@9kLfM5W+pr|I~Plj|@D-YvUa~01T-;j|}We@M&fqn!T zQwTIPG3pYPjI^*NEphbDBATv`tYdQ@VUuAH49b9{OBwhS`Px_>CwC5oXD^y<94cl* z{o>3L-h63Ot#ooedKq+-!q#CYc4p~0pMSiBr=R~)VXZLGzzjTP&}=CTl4@xPiei0o zy%1ns1`HW!MKd7r(GAuCoEXjGRyB_mkGr4}MT{u~RQfa(>*`B4zI?LSiS-+ATX1MT zJhB_mMnP=@(&-eK>hXswAV&B_ExGdgH#YzdwIH2IA>b(yA_<^Y-RH~mIAYcwPMcq4 zpB-1GLq9Z>_#-0w9)RG7B!n0xJ%|4nm;4r3`6s{ti2m!0eaO2500000NkvXXu0mjf D{6!@= literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_doc.png b/mfr/extensions/zip/static/img/file_extension_doc.png new file mode 100644 index 0000000000000000000000000000000000000000..dfd46f9ce9cf109823545d5976c72af51b3a740c GIT binary patch literal 624 zcmV-$0+0QPP)L_(hUzO(Z#I{0<+Ym z+O2(WX8LBH``%ktqLN0kqOwV*B|OiIe55oK5&Kv)_=Ul~9I~mm1LI=WM!C`;;4|1T*?4gV z5QNgoD%#rj;rPuW6d&i+k5;H?j>^Sh9z32{6Sa*p0w(Ho##Ro>1T0`0 zYhVjk@dJFkecG+pe%5gB`4>F6)Q!u9_n5qPgi{YQyZCfHDzr#uKxA-uwCL;`&sK1^ z??4!Zi5dQ1m&)iEnYSs%Crk=(1yI$YJ#wK7QiM?o{fF@Tufot&348ZQhucxWHwv_! z=Fzq+9?pMrc8e6a&g8&$Bkeg{lK}6zE_kW1g^%BT$BR#8XFpl`frYP?aF07=aYRiQ ziQCM|nHGtI<4X=8cL_(hUzO(Z#I{0<+Ym z+O2(WX8LBH``%ktqLN0kqOwV*B|OiIe55oK5&Kv)_=Ul~9I~mm1LI=WM!C`;;4|1T*?4gV z5QNgoD%#rj;rPuW6d&i+k5;H?j>^Sh9z32{6Sa*p0w(Ho##Ro>1T0`0 zYhVjk@dJFkecG+pe%5gB`4>F6)Q!u9_n5qPgi{YQyZCfHDzr#uKxA-uwCL;`&sK1^ z??4!Zi5dQ1m&)iEnYSs%Crk=(1yI$YJ#wK7QiM?o{fF@Tufot&348ZQhucxWHwv_! z=Fzq+9?pMrc8e6a&g8&$Bkeg{lK}6zE_kW1g^%BT$BR#8XFpl`frYP?aF07=aYRiQ ziQCM|nHGtI<4X=8cgn*tIM>QW~fb z0)-DC;R7gu)__352?+}lHAr+sk!TRFZve$fFv2bQ0zLo*QP2dWn3e)ME4w>8+%sc? z;{}OXuV?1obI+W)_pb8ZBg?WM&bfK6YlAkWLt)vcQ#) zEFU3IK}Cf|qk$wzC?Y5?ib7OW&{_u-8|x48?D>nXwKkFMb;fFp8RQxgoPs`UO-cmDzMyufHQlE!+8?DkzW#h#`~@Dn#ZbQGXsBMG2AHz#j91aola zo_6|)Q<$xS+?AzcC$e;Gp!JPM0c?y$tJMzk1c%u&=6U}9^QXP@u|Irhl=!vzs4skt v6Ri?z2%dV9f}mgv1;K;hSp-1}>Paddqr} zf*>f=8r*F5z1?-@ZKIp0;DqeH8D_qjZ@#x8O;a4X@?gcrNi|7Q{L7S-U!LEX+|=>8 zj?Lo-7tfwQ3I-4o5S&1N_8lk%-Yk6@G}H6#+TCaHl!Oq%#Y~*w z^4Y_fx%~uhZ(Tquv=f+~7X&iV1;Ey}3H*YF)`}Vu0R4=KVQk9d1JNqxCin7$r}d?K zno7pGPV$2bB5R?jSSbbRNl2Q6-yGlFsAKfvLySz_!Om@)dAhMbCWxq;Aow_??v6XC zJFxibJ@)Ns;Na+XM~(Bc4dnr7Nv$Zs`ceVo`*#r)g)Ox*N=1#~jTIEhKQ_BS(+P|n z8limA4ZvzQOt?R?*l>k9#F+5mtVBcFNOQ!pfsnAP7 zu#5=`o<^}x!;*~k{xVhrgNm=QW2lN#*PkLurMp-;5!O_oh@oZqegO-wKOp9NK)(B4 zQtk}YHk9DWEKl^xXj{z}@0OMiaD}V+%SXvIVyzkH|B7cai3Xjk_<#FGb<2GCDZl{J WU;;fAe}v=!0000U|29Qj^ANb&8}-OF3rH!ZB@mvydk z>csKvP>4{-OWtP>u=M5YW>Xt`GI#&#nY9u+XKPx6nddJ^Ny0hW8%w$#14R7z=?vaa z-N40(<{)Zgf=C8)0+|^k7gP`>31WJ@)Oh#c8qEsET1X;={e^o&{YcaFbpNICX9WTt z#yLbjrU)o7p|VS*v9Pd+zTGKy z^`-FCnj^w>83Y1jptKCR=ME$}`d+VNe*Qx%Oo#pZ_Wpywu>%!avCg;70vi#lkQ0+w zUv$t4QBa5mj!?@DgSqiqxO_wN&y@y#Hw_wWowFpIfaq`_xCKiJ5-;ym!_l7V1U^0- z!t2osZScw4(*d`pezgToJ4qrOyZH#S!)HS=kHgoeP>MALDp5+}fcr}eS%?V%yUQgU zy)_*!dEV5s0X-W_D0jt(=-z}D);SP?Sw|5iPic$n^XM*jkt&_Z)!!m>(2)Uu{*Drk ziGXohM>sz^8wivX1x3b*&J3C>%WoGyeLm!K8J`IX6vXoXGT_^L9~i|>T37J@;|J9( d@#2pF0{~d&@>LNZ1(g5*002ovPDHLkV1oBr7-awe literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_eml.png b/mfr/extensions/zip/static/img/file_extension_eml.png new file mode 100644 index 0000000000000000000000000000000000000000..e6f3174fb09bda2e19bbf47d716a606659f937ab GIT binary patch literal 639 zcmV-_0)YLAP)q(kDD+Z6aitX$M9{M*FCG*@4;2bRMRdikwz?uq zzre$mLep+O-gD+9+a~P_J~GK<-u!*nyx@#oH(1o+gG13 zF>nm$DyrvbE-whu69WWYC?qTsM#3OK0F}OklH9%l*mHP&A%(6N>Qdd%7mFm_tTPaF z4UdvRVm4(Yp!iDWP`qi!R-}h!kRJSqhNdKUcQO75WR54XECrau5soRkFMOZH&V4Ct zCo_rfdH(8TqkzSV#G|fVIJJK>{p20v%p(`n?h zdtti@)c(_k_qE-hoOt{st z1&5wYX}|TsPd%XBx5shs{GM1|Y>3<)y>*PuI_OSs)K+Va&AB?y5NiPZ=~|{h9}Uo@ z3e|rCk!IQBp>C?Tbbbur+wwB1i;Nq)_}ph?VIBSJ?+rSR_Gg^so{0LlC{4 z*&W}^T<&(g2pJe|=9~Av_q})DGOaa^=h!bDqZ1mf%V5mzlkx`o8nAZ3p1n|VX?EVA z?v*ijHam$4NKo6~>#eFU+vN|KN%MP+DoUaHaScqQ@+r6c>;(?jw{Z89M$g-!=_uarU7$UKV zkP`Cu?Tr^oc3{p7sTC)#V4A=x5RzbWs)9IgZy008o~vIVnJ!~g&Q07*qoM6N<$f`0cI Ax&QzG literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_exe.png b/mfr/extensions/zip/static/img/file_extension_exe.png new file mode 100644 index 0000000000000000000000000000000000000000..09bbde7eafa980714adc697f206884e8897c207b GIT binary patch literal 613 zcmV-r0-F7aP)_mS*7lE*q-wa%nr?{*e34&!&qoK^`zf}d z9}Rx@XcX1}o@hWCnDC8F8t`@NXaC!|=KKAZV>6uz9D!zzVqpCB26w!+m(h*KH*xRH zD(vC}4x{1ek8@2S$@CclwL~+OLzDs!9s~v!t;mp^Re2Wt#~q5LBw)<3O-bth-tO=I1wyu z?qGKK8XnvjLg+J5oDgG?Blt(f=*Nf2I__NV%T1&C;{XpEJ6O7V-Bo;Ir;2eB?9cBS ztTuMF$`%Wpj6rS+$`?_^a**=XmcLU2aU)d`TNG&b>5$V%agrr)8gP_-#q@WeH$a5~ z^6)UD#owbetNNqNVQUkxg-V$Ih8&wGo~ytzUwGW8`W4reAf|{HiYfBjlPg_yP`~2x z1k9B1=v*v?m}%^~zO$y)s9$lNA~*t{(7XEMQsKDe3t-aF^Kd(V4OM1;?Y)VgasagYlT00sRG4Hb#3rLEPZKNp@1 zQ+|Y;p1r||tI58C%hBz6dHvn{ME>ck?7qgvg+66b%ExvP-I<}>V4Mn^e;Q4AUzyXb zoAl9x5!KF}rToz7oX?Xm0;P_FErSES7~qIT0o!JffgcPRe)b%@PoJDB#FI~aT2G+S zL`1;#I#jg^qgI2_Yyy=k#xmn5D}^PF;qf$E<(~IxW?%@Dc4hBl=*+2p_r5J7#X_m$ zhqW)9Q`li4=eCUzU77a!B-SfA}Y$x9XGf--Gyndw; z-JC+{(lngncTBFX0gl6K+;OwjcgI?Qdqbz|`QQOe6YiI<*m(KEyU?X%0u$?&77(1i z>yU{uxA}xdg8^I#KdAEEdl)%z2>ZFBiJvQgW$Asv_4s}ZN^i87>~v9ikVWbCEcVVn z0!mD7w>3;2mf%7PW>5hW;V|%b8O7_@uyg7nqL~bPQqiw55&^cF8uwQP(i^YR>jkJI z2Qit?>t`(|%N5H$n@VrqGD>aYLjp<`lmRvW7;6~-^BYSR}qV8d{}_(Stu+n z9wRyRA4AB359ab1lu~;*kK_M`#k^%n{s=Gt%K0Xpdqdhh00000NkvXXu0mjfjw3Nr literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_flv.png b/mfr/extensions/zip/static/img/file_extension_flv.png new file mode 100644 index 0000000000000000000000000000000000000000..043623c4d8cd71828548c30b971f2c17e5957d52 GIT binary patch literal 633 zcmV-<0*3vGP)YS z;1BQzcw!U8-bz9W8?n%sH2wt^5tOJH1Utbr+L%~rEoh~^3RVWhPL@ zx9;=J?CoBTJH!WXcW38)-+c4U8$m?SvATQjmo!QCBTX?l1T0H@t~S3O$p2`p$O%@$ z5juK*9)`fOx;Q=l!zl!oHh;puGW)ptt2vz$n1{~g;ax{rfS!3YMB?T?R!Kkf^=O- z$0<_zKE6MBitxm7tP2P4rH8St7E+=~jk31m5l0!&?xeCIg+!Yz2p1pV7{#dU*#{); ztiFdp$5u{YXUS%kCdM)P{2Ao%4s71I1?hRFE|0DU?6RIvOdyof4uPT=;k~;^>L2m# z>&<6=8+pY;{0i{@(PV7nuK)u8Ifv4P T6f>qU00000NkvXXu0mjfKnot6 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_gif.png b/mfr/extensions/zip/static/img/file_extension_gif.png new file mode 100644 index 0000000000000000000000000000000000000000..efa8206090a47478e16f459fab099b683bb8a945 GIT binary patch literal 611 zcmV-p0-XJcP)@8Mdt7nO;og%oKdrNEzpjqqR>aZd`-5BW4wrZNW$Zux@zt3N z;ekj=V0mBz&|vNB#-ZN4UV1q9;bzrIJY+LQWBKK4M9MRGjCf*{vw#IYcX z)WE+$3`3y&@lFT5#qkj0wV88x|7G*~E&^jS%6Cv=2LxW9!^gFCbdQhWG%a^jPjpFO zQpTghOXn=SZ$E$g@f#bPt4wZ$ShaBe)XC8VI!iGzUk-W#WD3RD?FmNyKgD;ki8;d`L)Mzkev zL{`T8BdAE?7WWO#`$>`%;AY$i{jy7e zcm_UvySh-TKw&;CR-u*b3kqbX0`XZTaBnjqxKd|Vd~!F$iSJC=p;JS_fAHVqSvtRrZU;u^}^fUzT3a|hG002ovPDHLkV1gi$8kqn9 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_gz.png b/mfr/extensions/zip/static/img/file_extension_gz.png new file mode 100644 index 0000000000000000000000000000000000000000..f391025d7e7f26a08ec00fc2ed10fa6b60d37b7a GIT binary patch literal 649 zcmV;40(Sk0P)+#Q@d+c{F`omfl}I2CkimeNUAxH3Hq zNryUbs5*>GdmuOkZz6<2ThFNk(B5+zO8B%y6<6;;V;NNd*{rZ~bC#;&bLC$-(;T`{ zRB>q!h+5Km7>52LH8uH*RF%gk`%49f6GAi+ln)Pz>)YS*wz0%VHr~tlFsf_A%Ye_h9ga0I@8`+6vfqNj~Uqk>#HT{f)~Jg(Q#h-1VnE5xi( zyD^RJ-`jZm<~1HHE@0^RaCth4p7jy1N)}Wo6cC0Xf*=6xhI&1Q(b}rgH2-jU3Bw~N zCTC}7*7p!t6^ViJeJG{uSY2&mZf=GMfWe_-s8%Ydl*>4BbdVKa>8_LACNT*u^x-%T zJgUc!l?yn;B;O z;)Pw)`w0>aj}|(@L8sHf3R@EULrmGpg0CQb38_4+t-VC4bQP|2 z?R%ew3Vb^99=)T^Wn!mt3>bu(Na zfv}nc27&>5C;3L^O9+uWI}HetgG9`qnyJgEpR-YVWiZyrRjB2jWLIfzItM5W-x zBCSx8O?GG2H@n$1X*~GgB{TEh``-J$nI+%%F?74METys)uRDzQ`hEXX4eVYc`w<0KKQiods}0&_~P4C{z7{XGeWC2fa&M&VH!rzQJ;BI zVxn*o51+loubD9v+ye!gEK+4EU+4hP9cvPZB`n0uH30G?>O6rV1mG^=<)t((3Y@oY zeT;F*IbACvBu9_0i`Tg$eGFu`qxX6lz2mdUWKs;S&UQ`UcwSK88-n>0b60Q~zc@FK zT&^F3!~L)f;yf2!8ffKe3;sc6_L#)BSggJfX>rWN=fFi53M`+!KUV<+qA&y#5}zwmT>Kg1Dn(TmOgx zLJE>O9^A316`Ve`r?rl8j4TmMfPYeOJ-8(BU@Q{^D$8{YKlzOPsW^`A+>Ar%9$1zc zirqbd*1!t{%x+EK@XQyKuMJ}L-bgd1aQDN{5J1ZAThO8e+$;lI;s#1r_TkmS3a-9c zI)OM-FyjoMybckY0E9X}{GN>#c0K(H))6KrCG7+Zjz!;x{;zQ!(K-!0=TFHj z|2UrD=NoVPAVqttrYQ>Zqdf(0o+!&}8~<-BTvySHzXA*Z=LqCDH(x+`00000NkvXX Hu0mjfZT2lj literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_html.png b/mfr/extensions/zip/static/img/file_extension_html.png new file mode 100644 index 0000000000000000000000000000000000000000..a78b68e37b9f47046d92c66fa9f25a947950f57a GIT binary patch literal 711 zcmV;&0yzDNP)NkIz`wwYAjGSnC#i_wK@f#dN<4Xq(w-6}MGHY= zkt9}=Y_hZKd%I1WHXa<9-I;mseeZkUyb+G$;K1Ee>nKo)d|=(JJVzbp0rmq9XeS2^mAupW^Q&VIeDo)hisu$8^FV-DM+8s&B$k# zQn;Qtf%}i&;K!p=NHq5+#LS$?Cnpn|061e!0eZj>U2XsfOTi=tK1~CfD|mKg7cOhK z=)XO$Q^LCaFXChSTxCqFi4F}|xf%f|qH0p$h4C1Uj6~2Mlz5eE;^XHc7M7NYoWSX$ zaY`uG0kjr_KTQiJ$(@`U#=VmRkfcH3mxZw3!P$5}j*kwxWz|SnA+|8!eU%I*Q9O6B z$2Gjp|3;}QusdYn=3xzy?kG~ZuO2{K32Pz>)SG+_zIDT5(L|Y)-Lu_08>JRf%z$nN z|0(IF!D0U2~dqKn&)#`811cwcDX$wCcw z#zsJ{B0zTb!`2d56w^`glf#Wv0WWf8*Ek;Yqc^CdVy)t3{yY2u>H2kw$k#}jWtWbi z0o-|4#Ps|(4DT?oTxr0d{xG@?H<0~A8-fd9)hlV4`EpFB7sM4CYp<|GpO9!hFfYg! to_`BKxIHh#5Us=b|52v6JTLwVFaZ1{{No>;vrYg2002ovPDHLkV1gf(K;r-a literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ifo.png b/mfr/extensions/zip/static/img/file_extension_ifo.png new file mode 100644 index 0000000000000000000000000000000000000000..541c14efc014fd88c34873291ad4362b914dcc01 GIT binary patch literal 691 zcmV;k0!;mhP);nd*n<^3NH3nW(n>BKL@yo`#giuy1bgrYZ^c8X1*wP?DOOC8 zw2^B4NljKuwP|){eY4rdZ1mt;c6auh_rCYNH*cA3+lVB_^Gd3aURRq&7+qj2`~GTo zQyF)Cg?{MZ-o9>Vj8z5`pp*?sXl8a{V{tHfcj0=^@yY~Z%~4tsqYuZxxk1U`kVz$R z@JJl@N0Rt{^APqIRX+xkj7a)D1Uj#!6ny>~7=jZ4E0ZdEGsb~p783(4=(>$#{^2nn z1@-Aj?#4S(4Pkh0;S&zNbz3tUPQOCv)MIREY0~6Js}xWIDZver&s|O;<&^o|+YH)w zwW6)F)oH1cR;jZd0s;!F7JiXj+p-exi~ZMwWUai$aV=Bl%9 zyFBH*Eoy9K4IJ*ENL2#AUW{RM#>9=MUl83K#H|F*23MgJ}~6*G&Z?;Z2@ta~0^pQ8>IKgw(kXydLVnx*CBKyBqOl zXeZ9bn-L5Mq!Ur+v?`71fe8;kvBR-;*qt}?zW2TFy_q4cHLg7R@Iy+KRc!Z+_L2y~q18Ku+)&50j&;pX zN}atpm4lXyjqxykh4>=}SpK{=7|kv|ynA-fneH5xKxu_20*Y?{&(W5|@V6A9xDS}V zy@1lyBfQ>L!0aM1Nuh@zCIL1inn+Nb(yUvWpvi?00^zUkI6gWAL8DXd+&hm^c@yWf z2_g2@UTmpV_W~ZNbxfbpNR0Tm=A|XTD8~PVP%akBOxT3+CQ;dpYq~=+t5V#F^ z6k1&OaN-`2Wezwv?Nso3@H&&QqguA}i;cICrn2?N3aD3s5M;Au6E(g#607|=%ng*- z7My{l>pHT!!gk%_EWVrI?fY*ydJMR^G;VL+$N>HGWWOscgkie0{YMr`s|k?nY?mbp_?8Hx6Yw1Vpqe kKJ@<{lH-<)@mqia00gDvwpb81V*mgE07*qoM6N<$f`Y38~z)RPDQiJl6@)>9RF5Ct!SoTSi8o6WAnpTvH0vRPTkVT zRC8m6sb$JdV65RIVsFkQ6(cGMJ7tG|qccoMYU3Bsb)kU6$4`$gPvc=SfURJ2l(ZPY zVgQTj1U2*=?8Vm^!r~;MyZ;2&kCE0ABEk?-a{0uidl7#wt@!CF29KS?;E<~4(^1KP z0R&Z8hO1ve|Cu>B*-No$d-XonUtTkrk0 zwMT64ih4i^P1JmCrE*X$zeY`_o4O0^Y&?eh;Wi{UM7KSdFbVe#WC^H_ZbqshcsB|+ z*aq#%K>z;2X;Mfz1MDP2KcY5(as@9|-aZ+Q!Q&)_wkH`SGyd_hp+rPkmectEwZ(Ct djqpc+0RSUF$%DYA6PN%1002ovPDHLkV1i-cBcK2P literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_jar.png b/mfr/extensions/zip/static/img/file_extension_jar.png new file mode 100644 index 0000000000000000000000000000000000000000..f77a21c38f5b447045fb337ee2701435a9eeaa71 GIT binary patch literal 649 zcmV;40(Sk0P)K@>gnd2iXo4V%qJ zF{?!&5w%-zy1^-qkA_@AzAwmF7BDQ z;iBPGh_H9d8V*>LKP`2Y(zkQP8C9x=j?WW1ADkR7 z;iF)X@kW3u4c)@US~Gy~6p29r10jKL7C1Kf0i6#|Un=Rvhz~|xnXCa=$S8t}Vt&U^ zI)YSutg>kB%L5k$mPZ9Ly#tQ%g=PjOg^amaRYNx6m_>4Q7=<&xP#BDZHq+>I4Zx=U zR-u$Pj*<#;V^c6|zfrDqqp~muVl5qKM-BjR65=T6Ps(V!vj{40fVS4L^=y)r9Af6u z=N-Tx2@Kdw;(4r7I)9PsM4*D1W)R3pmsp>l0LPwWNwSHWw%czF&~`=6TrOi{g9hWwtLu$y`AeIM`h j`2S~>>%O?nwg3YF;||a>0mqZ900000NkvXXu0mjfn+79N literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_jpeg.png b/mfr/extensions/zip/static/img/file_extension_jpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..a69dff9948f223eae48c0250e8836577374a77f8 GIT binary patch literal 678 zcmV;X0$KfuP)fV;Vh^FtX3 zV`SR8_a?&Yb2?Up@0HqfcZa2HVA+_0O_w;~lH};nK}^nn#;Mycaioxjlya)A0-Z;Y z;7-2GhA|^=9O{zRrFG!+$pR(`;RS^I4Gal%1&W5G2udOcBw1Wq#~;K{H*E%2@vOLq z6TN771V@B|9$~@^5GSH6|5)id;=TPyWOGCx#!ENg8sTs|2z_cRxu;E~A_5eJ$ zhW@b}2DU16SZl8URvLCz$28xkC9Pj8>Lx30EE`~@=)c{uiGm#y7E;;nmiDyus%2_>Zb3E<=0B4rrtkfyjQUCw| M07*qoM6N<$f*AEd?EnA( literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_jpg.png b/mfr/extensions/zip/static/img/file_extension_jpg.png new file mode 100644 index 0000000000000000000000000000000000000000..6ec08d7d4938998fe8db84e78b2f1846326a35d7 GIT binary patch literal 670 zcmV;P0%84$P)!m#p;L#TaF@l3q3YMk6Js3Qa#hRGV zQH*o9Uz#}@UtD9RsRe40I#Z+aJIl8xKTaLdDXz{GlJD&y`FfMR+-9A6jU!7>5`z2t|j6j4)vZ8kaArS3X}s$w{H?BvGy=Q7T+TJv>4nso4Z>5hd7W{R>}5P~j9R zHG^^uSS*g9hJR+D;j*kaK{mnhSU{B7egUQ5zfh{I_}^BZW#o~#VH2BS2xzhqt|7+- z9XK@|RWZ)W$7yJ8K9 zv5>?cg*1v_qOq|!X(SgDJrnUyurL-%&;)2CkRYI#*xQg`EUvf~6B2=hA8N06+FNLg zw=?5=Gq>k1T;a>k?#_E}zW2@dW;|mIs@3W*tyE-S;LM|8lE-;G?`N%6>u*oN>(~Up zv{uor+jm`}?#Zn1UN~UWmwpuNV<$I3Ri-mbSeKvKEib$GP+1KH#v_d`% zXoQ);OirIUhtbg+D3{APH88-s+&RL4_bP)BLWqANQTgqyZH!zV!G%l1)~DHT47vgY z1i1NzC~<8|Sxr?TcbBO|e))fi&3v^cg$5d+>8P0*EN?+cg|F z?feV?^?c*Y{?2tiASQLw95}B{adziqqci1XLOe_V5&qwP)4B%#{1spT6*k)wUW9;% P00000NkvXXu0mjf^@|_e literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_log.png b/mfr/extensions/zip/static/img/file_extension_log.png new file mode 100644 index 0000000000000000000000000000000000000000..ae294cfaa0ce6ea136f97ac0787046a4185d46b8 GIT binary patch literal 664 zcmV;J0%!e+P)4=UnGsEUI0AcR7(O`)g+sXbJUkVaeTU!~DR6n}E4f~_PV2%;WD(1XX~Rs2D! z2l3=VPgZwlX8mTCE$*fTXLpv_;eGFW@9iuLf&fP_C$XfrI<^ z;^DLBczpW;E;jsuLg_MV*3S$?1je!?A>mjCToZ7KHf1uH%mC*C24e{PB}|U=V@r4E zq2Y4%QG$R`Hwnuy@o~>MKI|UX5+2kl`0aVvxIT-%6EnzBwg-C7F z=vrv#En%loI6Z?knG81PHle#S2ir0s$W~hhYH&^jwu8pgV>+~A?;SL2V=?gIN)5Yq zY!5?D5(p`fBHd&8yDC*UzK7v*9iGp1q$$gSnFJ3S0+LWx!aw1z%E??V{Qm)C8se zdCXoa#uS{Ko&}e|${|WRNGS+R4z)7lsjMf|}7#m+*5 z+}+NMZ{}|AZqJkWmSuO|eDB-ueQ%aYDWT%c@MKCzQHR{}R!F)S*vZ1j!TLguYOP?Q zil4PM(;LB9Ng)vmAvCxu<~;IwVrBW$NKdeDm3#tRNc>z|hiMhl-1qUK^ErP1*~GWm zF=R5?ZXkhx#0tqIl4vvvtCWCqz+f;erCTwecs8vi!*~75%B|&-WnaC9`;3)GzYNn;x51|pdu7j2F@p*9- z!RW&Zv|&<9FAvvsG5z&BTAH4K8HUE)9%EjC0+)v(ecRWC?cD=JB9Y1pSl)Hdiz5Dh z1_PtXA^}aNxv>HBKYr1eBO1plwxAR^4jvFmO?5Tm?`Cv9M(dIBIaGNb9BtxVEs)L1 zWtKn77L9Z)IS()9(OF`JHWjV{0fQur>hXUe8472iK#;z^+Softwd1beF%(SW^;_U5 m$$m_a8r(lFsP^bafB^tiBFdlsz&YRm0000!ln{b$v_4OttNqRU+JJuy zf$xr=%92#f1zC}`bW{9kxwR*mn44`jM#ujZ2y&Gu(Rlj&EtC?eB7==~xOx2~W}Yo# z|vM%!%d3Xng|#pSH1(eF0P;(jHO*Wf4)H`$y*oUfep0F)40@_uqsB8DpG8 z+B6Yp4MAW85|+B?QrISvR@6mpe+89$?@_z+8v71ZxaDgbI$(j=7&szuQlLYsBS&`P z%%LhSpV)<=OMBDe`pa)=9bCbKbOdd@IO-l{tK>LIF<_Lr#C`O1eVl| z;P!pR$M3)KaN#S?KU&J<6gt{M6t}>pMLdE6t&G+teUHZ*i%=wyXxpofjLsHa7$Hgw z63RzZylytE_u)c z^C?NJ#ySmubu@xL^1yE4fq#(o9HLSI2n00000NkvXXu0mjf^PVE| literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_m4p.png b/mfr/extensions/zip/static/img/file_extension_m4p.png new file mode 100644 index 0000000000000000000000000000000000000000..a7d89042a3efb2cfbbcbd44855af677833e98c17 GIT binary patch literal 645 zcmV;00($+4P)RCwBqQ!!|hK@|S({y+H>EhKGe zaj~UT1h){H3RWyA;^v~Fb#V|J6x4Pohyf8g6a^6n3*zFU4lYjOP$7y{T3QeaE>%Qu zs$g(wO>%dB@BSnvHc}7nzkB!IeeZqWyI(oypstmEz}PIf|L0I@9k&nnH%wQL4gHsw zZ=K!`D_}}NNdTwV#yaj57Cx`{y_lMRj5|lpw&I3$I8>}b@#!KED9Pr}U>t6o8o|v+ z@8RZ-;m|KL@n&jX5oDqPpzHO)F%wb&qI8H9r>tW8N;Ls1-|_m~FplO2&tUr1v%dg< znz2YH0?x2)tr>&eL%mRwD^M3-qA=J^ZaC3S!2=jXp+-XMn7=Sr8qYs`#mW2t!jXaa zoQbw-AOOxF>G@NSnni{DH>w7!mvT_W5;CMC?(+xtb^xHG#!F$KvB|Yu9BT`5GvnAb z`;HZgR@TRFsh~;OLV2hcye;LoIr^7S$F(auBxLW(I=J5sPj?utU}ySIeybb=jp zKGB}Li|C;(jfer-HPEdZ>_}35PRX%$bre+x|FA4Cf4p3PCP3BJI#r-xSXzoIZ8G!P zm4ZM0GCA4|%-vr`S5h<1qE&<@1#w6P2?|+wu!5xvdF1An>#bGj-I?&Kv7Oqe<*_+r z(*fi`X3`qRpR8i2Ct~XqeagRX$r~{45Ag=T#?R8jw-|@T_Cv?<&7ai8f8a3pS^WPf f^WG=f{1#vUVb##Ji%}+D00000NkvXXu0mjf07olT literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_m4v.png b/mfr/extensions/zip/static/img/file_extension_m4v.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0f2cfed9e0a0014a1c34bd0a78d279e21a05b8 GIT binary patch literal 651 zcmV;60(AX}P)1i?cTAzoo4+9-zzUZVsAwJ?RG4x-rDh=qj+1}hO1 z3`pYL?(CfJ&Hiw^SomOe=jXleeeat$qTlah=k?3KbYdEY=4H#*0*(+rKHYsVR-9zM zia#9OI(is6fDpnu@JNiYd+(ROjz-Pdr_1fm@xc@-N9$^h+Y5_O(jfreW8ehWrY6yP zwt%0Vd7O#c(`e2L0-4SMWX2GNG6kNGp&E}G0{YiHuV8>kqx8BKNzGMa3d{VX(6oDi-yXBQ$Ur9h^hvHuaS_6LLSUk zr@r{z{bT2=y)FXZCk;$V#DQxx6yRZvZXj^!AN4R2hB(o=XFJuQ4jr!7$*=rgEC62} z+qy8oxkvYH_px}R!y%nXn^9Pz!alIvzW^}Z-s`0gANQN=0p-RT2q8)tMdn|uIe?rt l)4YNIw-t)}!jr!O3;-4i;8MVr(6#^o002ovPDHLkV1h(wExiB$ literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_mcd.png b/mfr/extensions/zip/static/img/file_extension_mcd.png new file mode 100644 index 0000000000000000000000000000000000000000..403ecad8befa46cc034c7020eb59e1d734af02a7 GIT binary patch literal 699 zcmV;s0!00ZP)+^M3aAKu--l1TPwzjhb-liPF+Xr}CA}t4g`Sjncy}1w5MYey z4!-B%P&R`Hw{v*&=nl>}ZibkM4FpuLJJ~I97-E?~x}JVAPO<_A_phGDg+b$l z5d9{>jw>v$GbsXLnvHkNBy~R0TRO1q*cEI&atW#QCPmuYpg8HYP$CAMU#oONx(1#I1dT5 z`vh|6DM_97g6gV{tLF0$1vCj!Gf>jnC8?bqDO^6f9~;_}5n%AigsyEO@MvTKbyqXD zY!f%Khp~P0Mtu2R#_U`PsrBu;&SXXuqU9XW-f#s$`s%|*yl?2jVDilWxJ<44@F6zKl7gmQO3Xgi{yVXLSfYktLS|{=U h*H6NIREs|X3;^NC5MVDxx>o=I002ovPDHLkV1il0JHG$` literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_mdb.png b/mfr/extensions/zip/static/img/file_extension_mdb.png new file mode 100644 index 0000000000000000000000000000000000000000..a74b16d60b0ab0f62615db23c8e1c3c5b271c648 GIT binary patch literal 645 zcmV;00($+4P)RCwBqQ%h)5K@>gnd7o6RL7P;& z5-Wm`g%n$hQ5pp4LR^$CY`YT_RFo`S34TDOc3De7go?Te2rdLy;=fpEKv&xx=*9c-EEQ(3LQ)wL)@H$S%gnI4_?o2ibZo z4odq$#mDbog;vUDn*tkGntYMne+iZ|GcPNp^P3A}$wOiQI$2dB%wL}ZcOf*Z>qBk7MtNBR0M^8({9@E#xi?H2@?eCrKpLyXA0{5*`{y42s_B%dIwRwV#vu5EtJWrl|4y_@!F{Qvq! fb*pCcM}PqUF=o`fmvckE00000NkvXXu0mjfo=F^- literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_mid.png b/mfr/extensions/zip/static/img/file_extension_mid.png new file mode 100644 index 0000000000000000000000000000000000000000..07887a064bccf145a215c945033ccf062b5ffbcc GIT binary patch literal 637 zcmV-@0)qXCP)f<4A-6%Ir9k`vEP4tk;`r}M@P{A#sYbK@;Ij^XhmO;vp3 z=56cfIGGRGQz)g(`)8+fK1q^ByWL*KF?f~@=lM zI82gibPo?Pci|!`l?s-Y7IEqF73RA&rGRslegKbB7>!1_zOaD#`D>_Ft5{!qV0>Qe z?3#K&Yn)2p6M;iT91Moo-rmAVeERSacb4n6Mq@Y=1c4+K60YYOTc^`Ov-uvYR7ge` zg;v4IF60CO~X{cu_nkg@PBWh^3&1B8xU)D_ZfO zr4(uti_#X`idN0;jDL5{c5QR;!|crb`Tza*{>(BdCD=vdD=ZO(#0IN67@%MQS38@$ z6X~9D=PN|?Qdb)+@+oXRT?k1&2|IRtb}44$NAICsoJWdxF|0w`WJDZq3UL7hXdb7w|FLJ%GSRu(aSsuc&)i4(Z+ zY-kgJt*I`cKo3wdSD|qQnyL^9fp|*;Sl?@~Gf&ah9JPb9|4JY;r3Fn954rC&i8TF{j^|v0b!|;{R=# f@@DMC9{~mcL4)HvwSIez00000NkvXXu0mjf=iDWf literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_mp2.png b/mfr/extensions/zip/static/img/file_extension_mp2.png new file mode 100644 index 0000000000000000000000000000000000000000..704a347e04508b477164bc434e3f630d9f4cf310 GIT binary patch literal 656 zcmV;B0&o3^P)1RCwBqQ$1)DK@|RGX7~0kS@8k%OZg}B z{{ntl0v{fkAfsj15^l-KT8oTKA3wa^oL)G6dwF(YtTjYXuxb4V5ANN9l8OQfHo{ng zgNMe@Y+lEk%ZoUYCJiw&C0@^5YqSw~5`(Bxg$e?Pw~jQ0A$!J#)f9JzPhmnW9t|#@ z2?;X7IGL9SZ8ZV{^COj_>IF2Bd|&&CO+DMtH+=&A=Z;}(Z!bq1?#MvE7!4Up2qlmj zgMsZkG0?XIL%VjPXU_rWHTB{?>7~)CbXfuuaCDN}=`lY#iO%)%`4bEc?)MtyOBNeV z1YExgI16un_vI6AEXDmwhpjyLkuO#S#y4LJKVR8z^o?ER+d)wairpw<#({nxnN@d q^2h*k>Zg4j|G&Nw?mch*3NQdpXXL*ypc@SU0000f<4A-6%Ir9k`vEP4tk;`r}M@P{A#sYbK@;Ij^XhmO;vp3 z=56cfIGGRGQz)g(`)8+fK1q^ByWL*KF?f~@=lM zI82gibPo?Pci|!`l?s-Y7IEqF73RA&rGRslegKbB7>!1_zOaD#`D>_Ft5{!qV0>Qe z?3#K&Yn)2p6M;iT91Moo-rmAVeERSacb4n6Mq@Y=1c4+K60YYOTc^`Ov-uvYR7ge` zg;v4IF60CfAX5Q)+aYgz5%=xe znepD)eVbXcMeZ^zbLXCO&pk7by!Vheb8qFFwQdCH?EeoB0!V#bt4)sfa*Q>_M!+-I zryzVp5s>%J@#0){BR%=RF4aFjo|-StP23~1z>DV%7_EERwzar6a|QKhi}?O@8qGYN zdx9ktBqo;G=1xiZ2#nb$ASSRc+$BfYFReM7|rEs@V)uN5*+u%w`q z1n*bZacbfO#_y&WyVJnC;R`I-%?hSRK>TZ22TC-W3|_l`31`PD$d$s6%^hs*?qTTo zv9KJQQrOh5z*#0R@ZAyWH&5gIXa$z#Q^^E!SyG2V1UWM+22$0ViI3YYs1h6ORH(xsf-r*2 z8NJ5Zn@zm>^ao9mD>uY1D<4E4k}}&Fp-@muxAAhF!HS@?={-%U8!!SP_bwQClt;bQ z*ud&mhK#RK$Cii!@478x0^YY+x+<4~v*~Xeu1*s`{rFHx?&%!~Or!(jGkYBsEBC4~-sd4}wRj_y^jf2c_V_Rw$^5iYTRspr@8XL~=1uV$|A# zf{oQSkW!P)?u_s4nz%77IIzo`?|tu^Z{ExZtu?x@yxeqM9pN}QbnP!7g;>wt9f;O) zf4C<9T%{wI5`9nv3c+;0Oe;+oyf3$sZ?i||9xl(sF9a7ct7;`j;r{F*3`3HDAOQ{6 zRY;!g#nj_@i}ZL8 z&Kw2y*c*72%6dG{a?k8BhyQW9SkGU6GeYl3noX}G5hW(@pQ2M zuRxj3%GMHJZ}nlf(Y&vTc&ZMoZJ|U7W%$$d>K59rrI7u$jn=Ug-mVlqykOHpy52!e zpu*NHzo+p#?{Q#%7=zO}v^0ltZYt;D2K9(}*l`QgUBfc`Yid%r2~>0;6kjRRUz799 zYv_S@3e*EDWO?!0#Hk&7z}U>~aca+LA4Oeiakidx7Ez#S#4fC{W!p2fqav06-x1XD-1ZS^xk507*qoM6N<$ Eg3IkIYXATM literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_mpg.png b/mfr/extensions/zip/static/img/file_extension_mpg.png new file mode 100644 index 0000000000000000000000000000000000000000..d01440fe284a5bf3fb79bf9472578d58bafe448c GIT binary patch literal 645 zcmV;00($+4P)RCwBqQ{78cK@|VZ+1jDlrAWN-7IWr zw+|n}duKXl?!C6FD|BF(nKNg8=Xbt@)*7AH@0YaFDMjbCL`d=N)rG#z@m)u@wz<&f zuAbds03ie_jaaAX?0MhQOGCqVCI*k4ssy%ULqAY>IyMa{CAniI5GaMt?lwHiO=9Zu zN%Sqf9N0HBEC^&E29V3%l!lYAX<6Z(w2`2l^@i2&GDdn2VB5~7{{7cR?p85i3CK_r z+#e#$;aT)a(A_5%ndTJQZ{!WF?!)cyW)@CV1CWD&Lf}|mpE(M*_ygl}Uy*Y^Vfw>7 zTDGUrvZD#MB+x*c@K!Nksa%yqHgCe&j$LN4^{DHi@VSU5AHSeu&(<(UD*+Ty zb!>?TGal}_bGVeBKxRV&dRsF%xFwA%hxTIZ<~;lrrTzy%)OWxPZonBrfLPqH$dv z&gTn8?>LsR6SYFnR0YeHQQJxcR7Opf3c}o3_?_)m=Rkzrm~=u0&-;67=78VL4AiOu z`N8`71dcy^VfsIgG~T5M-$hjb5kRo`bKIRmmx|`1)=+Xcb4$y}ep#=>32dcv3jZ%< f`ZvpmzXA*Z@oeVUjAU7h00000NkvXXu0mjfj)gKi literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_msi.png b/mfr/extensions/zip/static/img/file_extension_msi.png new file mode 100644 index 0000000000000000000000000000000000000000..3f53d37854b034acd10d941f95f6fbd5ac124be2 GIT binary patch literal 697 zcmV;q0!ICbP)n?VLL^GWH0%kNfVq_k8zz-}!mM7=!kqJ72Xn5o0v|IfTs3_n(WFw|tL> z!!N$P@7Q4!2?RX^D59Wwl9|n9Yu&+-`)>!5y_LL9i4My1F#R|MDJ6685tLGh#Sb9$ zXabq57qQ=UdoVa6h@_`XAj^i<8cr~XK!_%-Iw0|zm6@(-0bP2!Wx_Eb`56k&Hs_Ua@ym1#>t_`E6u7>4xtqnmGDpDW-zXDAmNEv`6Z{O%M#2Yqa`EmlCEnAVKJpPjRD6#|O z3sQentq)TeMVzQ8qa{$kex|;>`EZCEq}(H>w9$n1N7mYGD+6R4)a$KJuvsjK&IT{u#8fN4O z$geug)<;pIJ2SCwv7v2rGOjsjXn9H1+EUgnE!ZzfZvR7o{B!T%PqO_kO0xnq9ePY8 zzXT;9zuBB9s!Dw1JJsvU*sy%zzBAVzw#+1uHRfjf3A$Vq20UyXYDF!r!0ymc-aTbW zaSruOFFDq5k43rJn3h$OCeYGBO2Hhri;^t(RDGJ*hc|5Nc!>ALakgLXplVeKhA~bu zX^=L18iANl@OB_f`_Y4psj_yv2bWe$dF%(RyXvIV3D9F$ubQV@@JB&kcm$u##>%=Y zTx-n7`y-65I1vHCyfbC!-EsUkE9nVGrDftT6D1aed^k0Q47)<(?z?n(3mJ~-L`@gb zF^#zDz~OX}7xK=oAmxEu(+D~3tp5CfWZ^R0v9Bb)Mfq~_HJMV0XZ|+2!?D>2CcEHq z*qP@QwC_F7aNARsxiisCg`B}Q#6Ty0hf03PlOEBT3VNghzm)i_p`I~0Ji6w=&{klg zf~Oo?;W)uWL@J2Rra+LF>O%hjnlif#c?-RN(J7D{23;u zcA)>;2t@%OoAZ2hEUsZR9G3$lyEg=b&F@LH_EMbTqi-lSk)MW0?ZL@Qcb>a_fl5_X zFh83*})MC7~9RPalH0RW}i V0xOx&W&r>I002ovPDHLkV1kX*Y)t?F literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ogg.png b/mfr/extensions/zip/static/img/file_extension_ogg.png new file mode 100644 index 0000000000000000000000000000000000000000..874915f710eb05de81e89f7210542e4ad95b47f5 GIT binary patch literal 690 zcmV;j0!{siP)`(BneXsi%7!Tgzh6M z?tU!#8F(TJrMFERZ?D9m^AEu42zc};!aWbM_4N@BjCG__JdLI;fn2$t^5y z?*SV7fb27<^_QS(I;7=KU>iSyy>SdptcwG8?@3TZib%BZ;L92sGz|&67uxI$+LG5X zbn-WDw1jY$^74l5?#aNaPXXLP!LX1sWMq&6R~Vj8*^u};?yt}R(z;6h*6&k%<&_RZ zV-7S`_8tn#N^{@q@Yp)M1_gU_Dk`oWBAL Y09`2TD3C;CI{*Lx07*qoM6N<$f~mtf0ssI2 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_pdf.png b/mfr/extensions/zip/static/img/file_extension_pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..ef52e6a4d8c007d2e730b5fe68c2c081e3315364 GIT binary patch literal 657 zcmV;C0&e|@P)|7~{y-Exc@RNS(4(HLfoc{ke5TQ`5A$jrAgVBx3sYoDvn6cyxXnpIpUP|@rQZ^rsqLb%! zR_pnBy$GcZ-d~;5rBwEQB%oq0n;xum8p2M5J5weD?KJ`42dMED} z#^y=UeMYzqNZW=?Bp{?jZsr1E-){};%y7}-LZL(z{ zj7A4gxg4sWS3vxI>(B_aZyYt-^)Ug1`lf(VF#KS36|Lnm6uSb8hM7{kE<%?B3V$dT zAS1vQ?6EP>f&K8`Er5&wnO2In0JSZMn1hCKz!@kDQb@?*Ap|RBBq#Pla4RL-k|bH6 z-ot@86o;cM8^j&3rY7M(e+j>^h|HtA@SZ+{uC7BH2d`ft3PHp|G#N;?*_VWU;uz$> zc38W2qIT#gn)e=d0ya*2hgjQyb>uMY>2vUAE+bedaD{?0yRQF)fAdZlE(V=mM_{-v z5=?Ggy8-%8giNJ7Va4Eif9Zmmj-TcL338j$vH9nvg1gqK?+E+=UKHQFJ&4WA^-nO_ r)Q7LpZ6u-*p0fCVRG7Q`OMn3YukhRVY_OIH00000NkvXXu0mjf3jigk literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_png.png b/mfr/extensions/zip/static/img/file_extension_png.png new file mode 100644 index 0000000000000000000000000000000000000000..812e3c012b9ffbc4b8d11527145d0382a035932b GIT binary patch literal 702 zcmV;v0zv(WP)*qt}?zW2TFy_q4cHLg7R@Iy+KRc!Z+_L2y~q18Ku+)&50j&;pX zN}atpm4lXyjqxykh4>=}SpK{=7|kv|ynA-fneH5xKxu_20*Y?{&(W5|@V6A9xDS}V zy@1lyBfQ>L!0aM1Nuh@zCIL1inn+Nb(yUvWpvi?00^zUkI6gWAL8DXd+&hm^c@yWf z2_g2@UTmpV_W~ZNbxfbpNR0Tm=A|XTD8~PVP%akBOxT3+CQ;dpYq~=+t5V#F^ z6k1&OaN-`2Wezwv?Nso3@H&&QqguA}i;cICrn2?N3aD3s5M;Au6E(g#607|=%ng*- z7My{l>pHT!!gk%_EWVrI?fY*ydJMR^G;VL+$N>HGWWOscgkie0{YMr`s|k?nY?mbp_?8Hx6Yw1Vpqe kKJ@<{lH-<)@mqia00gDvwpb81V*mgE07*qoM6N<$f`Y3eK@`WoZ)RuC+~ts< zg`%etwGgopazzx>LJJWU#X^(9|3Fj(5l*lO1O&m}G$M$dU?B(r3v@dh_eQB> zjjbIycb=mK-PSU}V7Xi0-88qKOh4?*rm1y+^PM(Ed+`N?kR!bYhfbWqhnG(=b^j4s z@$Z=??jeOlnU%~RC^2AwSr0j4u;ZAF@M{3nFI>a2D$g`!LvZ>^77+I^d9w}4n+1s^ zCNzFLK8~%mefZkgjFq^Lsgq~1gp#zqpXZ20h3q z1}VjG%GBinEEb5MO2ffqbqBT_yTgDAdhLZ_T^_)67l)ncvK|5|+fc1v5C5yJyUb7O zP^bZui631lqq{hpNqJwhHWU^rn!p2D90!Z2#3!%w4&7(F{DzZtqz-YPCoduuY2cH5 z3dc{kf)+XBv+qLO<|hcFMFRBvD2gw{NZr_Y@*M^I?AupMZ@!HE> z?*fK*M45<#<8x{})aTWD-_r8y#}mNy&Rf{=rKo#%+#>5&e~Fyk%x(9~yE*r1Y}73Q zPg-#zDo09FM64pMaUcl1j{NhCclyFoTV2D@g>zHOz|&S(8(=R%z(GM6WD;oTl7i#^ zN00QQ&a_^z)J_iz{*t>+6EygGqX0%paOcBG&U&`3}U zHRn&k?)}Et<_5643oz*W!6B%wE?sn|wL(IiPR zfMsW?_nG+zus?qxotyQvNCy~s^bo2NWBt|)T$1hwz%Nkzg5GY}fOX6@uog}+r7!|j zE8Z@C`%p-rqY!kg2KuoBefDzhWY!iy2dmyLe#J@TJ_sunY){^V<>U>#d&@a!_#}R~ zGVPNncJV8wAZ3ipKskb|#`t(?(w7sQyy$Qrh&6;xTJQqtCgQd%$8md%e5+<-(fnkC z)zQ99fF0mXeR1XdztdQ>sOg`dWgv*?IPZJ#|LZ%)ZOi7500RIDjNS1Gh;iNk0000< KMNUMnLSTZdsUvFu literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_psd.png b/mfr/extensions/zip/static/img/file_extension_psd.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f6ec562b774d60b3536be5e38d640ad38c21ba GIT binary patch literal 689 zcmV;i0#5yjP)XqucEXMD79^U&NV zuC*P7`ADTx?JZkj0T{CzbeNlpg>G*}i6jl zQz+|#1Q!9`^S&W$TffN8pPg;R{8>pmPoKUQ08A{w0J^jwgkyun+nshimw$!hnN8?< zSwPprJ`9ci#LDFKsWc!4q@bZ{Y-z_8)KJ|%UBNe>#?YBwhn_RL(R3njyET~s3jh-F zm<`UXO&}fzk1)l8*I|l2J^^Rm}FEp|2kwD#VNl8z)TX|x@9y^;s32j`#zY-KLG{+ XA4~%b)|^RR00000NkvXXu0mjfP2M!` literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_pst.png b/mfr/extensions/zip/static/img/file_extension_pst.png new file mode 100644 index 0000000000000000000000000000000000000000..5da647e5d01b0161fb2a8fb17a3175c7995eb286 GIT binary patch literal 624 zcmV-$0+0QPP)mZ<mvQ}WzMm!kn1|Q%Y>BKXJe}k*K5vW)A_^6 z?XgjsP*5m1Lm0(B)$;FNrhYwcCZ2!zHCRlndu+6`W#aeZETq&Sgit#;j)jis2-X(j zcrm_(W^;64Jq|%610@8Mp>{GJR6%ML1p?btDo8#K&w)p8X3-?a`u|KD6_nM-sWQ+) zyJ?iHX*#LU$ZKj2JCBErZP=e_#oEMEgu+jV)QOcU;Cfh>bW{t1clApkNYz2+3nFbD zY6v2RnGXtBAYin4j&ScJY8pH5yos~j71ZXw<5m%wz%egW^1tn69Is44>XjrxBefP> z`x15C?@`;@3n%;8m+VtOuQw(?E9pOdp%?Ojdtq@9zm$<9gY$`s^UlU zQP0zwQ^dwoO-h}6n%pt|L?8s&`tGmh~$I#H?)yhzV^#Voq#!fO%)(_vKAD0~UQ z*?%Xs`SaT=YJUF_m3xl!m3G0000< KMNUMnLSTaHrXfB6 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ptb.png b/mfr/extensions/zip/static/img/file_extension_ptb.png new file mode 100644 index 0000000000000000000000000000000000000000..8250def1cf11eabacb57b712f7e1d5aae70047cc GIT binary patch literal 664 zcmV;J0%!e+P)u6xco2H@DBeBAiiaLN^dM9Od(cA>Jg6u&L1+qM zz^2wF+s*EdZ)a_qZF=zS&di&6Z@&57n>VDj#`otFn>z4wS_g=WHa+nN5{>a2)k4>z zBbzc4-aIySFI0^CzVJK<4A4&F!)UeQJ}cc?zutR91YjIHsI5K(5ib#iNAT}qeDW^V z-aWvn+gm95H|MIA6=IONJpi%KHh{F!P{|CG6*ZX{FhE2C^(`Ph^AyG77q8V8N{jsf zfe$5;+$<^$tzDd5L)j6qKlI~;;QV&n{38?WJZ9Jt;toZU8p{3P7>_d(WBBxIuDms~BeNg74)ui-7)~AK z1b&0Ev(e^02H|3>ZnT}3mzc~ppDww26*P~+8U$_EAZ5xhIwXmv))6#6A$@r{=8y?H zx5GXfCGSD~f@b yxcOc382XRxS+uEjDzTo!|4WniRYT>k00RJEBFiL$$4BM>0000vZYzBliC->mZ9W5?*tug>`%?;TbT&rmYa`tz#`r^@Yp@59^3 zLy`~d9e^W&61d7U1>_{STzL1Pw=ptyXZGTmqn!ts7Ta=`Vd~j5bfjDPaMog9{~kPe z^aSrOpT*$4#t=rv6iJ3!1UfvKVVy%18$`xHo0wss7!Aww6#+{>@c7Umwp1!dwpGXP z7Zk{e4V%G{uI?-{DiT$mq~Ggxl*_&7t4=@@xPM?b7Ut&<76=dsn8^3s`IBpmoY+*x z!^MwCSe|n(H?>d#w|G7bCHGaw!_N9E*Rk>H4P1Kq9LKkA#*11FFK1?8gQcoSAWO>< zVtP70Ne9>|63tRXK!Jm7zj zb|u((cQTL}dQoC0BCXqS5tn%z@C5?<>*w^B*|+`Pul!{qbg7B#tT|kJ;@e9}P)b!e k@4^3%Z_JyM$sYj*013<96hNqh-2eap07*qoM6N<$g8VEk8~^|S literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_py.png b/mfr/extensions/zip/static/img/file_extension_py.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc745b68221ca9a9567379c928c4f8ec9b3aa15 GIT binary patch literal 1282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2~Ij105p zNH8!kMrMXYltlRYSS9D@>LsS+C#C9DVstT4fPE4;bsH1+JHo@{EISEfi{E8 zw==W>t3(ll+GC>+vK+}V5TAlYfnK%aveAbJn;nNwB&=u>^m`0o1M@#TT*Wd%Pj*?#?d=+$slhK|lo&hng`HwlXa zg%f9dxO|S|u)wcpuU_u*n6%{1V~b@oXU_ck^5x4TkL;x+B`u9?Z2l;m-E=BCf45}^ zOH0Fh-U9|cD{RuWAE`UqoYgshtFkw#O?j zHCn9EW#b#n>v}Tjb0epVj%v>2Ba^rK{@ZByB6Pzg_H}kYr0dsg`LR~1L-E!&m(M}R zguhfh5Sft1wf(*RgUIMd7o!x)cr8i}h+1sCE*?Gm^p?Hb)838Q^vyq5bRF zEWYn*kC9kmsn*9UB;>kdle~rH6~z_F1(#S|URGLMJ*Lg1+u`T^`j?65jz4-2U-yeY zj1oMaIw|{`<@IR|Zzg7H=&f!1-zmZJcT-6Ey_?O?y$#RtpL;c<{JGmcsJ`yDmz%EYdy`8?Ugsru$5t z@U%%&?ZVyrgIr=8n>b_c*;`a{{C+iO&mP~hjV`ACht}`!-*H2isnF@>y7v2W|BBu| zI_ll+a^&P5nHt5Z;&&Rmf?gXWeYSp5GUaxJ<1^D&C;r~duGXoptNVAYm3w~8;SEVO zH8soSmn~c7$Lcs?U&huISF0QYMS^ckzH&F~a@mcAW$E4jD)%{V-n`jdGUBS8`z+ts zgL65SOu4hj%WB$G&zYwbUZ{9p@qOf?TA6sX)hqMi#l!F2-QDfe1J<8>P<>X7`{yR% z=g*#n`CR@p;k5FqtCtSer#@nKDl@RO+sQx36y~H`)GY6{w`~boFyt I=akR{05AFw$^ZZW literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_qbb.png b/mfr/extensions/zip/static/img/file_extension_qbb.png new file mode 100644 index 0000000000000000000000000000000000000000..5e4d56b8637056ca51d15e642058d8742ba89b32 GIT binary patch literal 612 zcmV-q0-ODbP)o9K^%C$3J1O)2bv zysX(1yj)+ud^lzo-#vb_gd0`jq-1k8$IItyh$EwNx(V`(@yTm=y1tIL4;Zs6Cuc4# zel|ifQxZhMo?M=Dq-lh-k)k2D&bnqUV6-X+R%W+xx;c9N@>0B7BM5e#MG_mtl{-m< zfE-Q?AH~JH1{dZHhK7!-xv5$UYMEStNI+54?jZOQ>8+3N(L8e&qfJs^AT<0(23qW0 zCSX;rC689?JAUqbgOfb;uXE?eN`-n0&KD9O+75JAWW4dPAQWJ1%q@dt-%$|+>mkZo zTL{GB)3boc;l|(fS=uZC?pEB;6q|{NR<8UAhbZa zm?b>9xs2Q&Dh40|P(hlH4=wz|fwx8IUq`BGMKO9CGRFyyggHe|(th1l2S!if#Jye~ zIn{@~{XGejLMY|2?i_EK6Cv&I>&NESJ~kFI(|L{U^Ph=gRPCzE$ZFq9Ah5sq^`~tb y=ZdwiU!~-v^|cm+aYUX6@c*MFxJ`XH5MTfSlI{K6e#Qp?0000fAX7{1kU?Idr zLmpTVN`a72K%vGTfCV2hp`fxhYNZLCCPo^5fCY5gQ9ct1(L{_fQem{PqA&!6w-0f5 z_ImHUVR@Se36q_jnVoyiJ#*$RF*Cj_R(9E?T{0~-4lg3#e-A%Icd-|OBfk*v(Cm^- za#@joJX+VelQm=i$NH6x7jIWa9$}_6Ns~Z>(*t~3egYGrAaEHlI<Qa_Sc7nCR1LY)(?aftGhwh?!(>2eP zHPGgPM`U$G0yZ{yATJ}@>pS1EwYDWjHzNne#X~v~ZcYe}6^IX(VU2^O6jriomVpQC z_cT!``J7}I!0ddG!X&+g<^0(IJ0Usjn0CwIGDxG1x zR33F-`oA)X9GV1^_TBy3y0Qz|{Z%002ovPDHLkV1kYf|04hZ literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_qxd.png b/mfr/extensions/zip/static/img/file_extension_qxd.png new file mode 100644 index 0000000000000000000000000000000000000000..577f6efd0d2bcdc689d57dd7d06bb10645b28a8d GIT binary patch literal 714 zcmV;*0yX`KP) zwJO9&iidcpO%8hKp%hvWQ!o-Gc(7FvK@h}?=+T=O4HQun6N9LiUg}Mh8t@RU^-xU} zN)<)0+E$vpzjfZG2}z^i!oD}V`^~pA-^?=3IgZ~7EZUCkckO=-#@P4Vsb9g`x`tKU zk3-If2NGhFRpBl~tR3!<<>1r8hb<$SH`#|{tH&CNl`0!xTLzvyeGFNWYyP09Fw{Sc z2NO9=oa4A`?MseiN{mR7O#~teZa~u%D6-;)D{i-J`oo0e5-tN*4o%~#6g{ere^hBF z;rdB60?RR>DhvuyN;0Qui)mVA?C9K%;oA&D*BQDxIzd?-Sr-ALaOozQu3|Qkm0{Xt z>(tLuTp(ba?{~MB{5B zuZzI6DzI4vqj7TXPGNqri2U?Lv}v1gx-SQrv>7j?Nta3!L0tpep#x?J=Q2fcX)=nz z@C6Kn&*SFH1p2y3c*!7~(V7AiDHxE|>gMF^HJpv#M`UZiSf}=9@OkMiLcti}R+|W< zwKjue8&rkrvcne=V!EUB<2iiVW^D6CFuz=zGTtcl|pXj4CNm{ zVc`xbZ(+&!29N3$xW80^8iu;gqkEBkmxf!-WX}z85(y6C_18SIGim60o4~bHK}5t% zcs&|4?#H9j81nB=iZ>uJi3oMHZ)_)96}W~BsszSw{%pFqa?tI6E}j8xbGh*;(wz=X ww^9{>uOEpQ$k=YO{rLa!ll!CvRqE^r%wl(|bytmn9lPEaw_Psar&Aj<$W|`-CV8?ELhwCOm=YI-g3%EPDHn@5f ztSZ0ceA?Uzhm@SL(8qN>IJ5+I=Hr)^=lv6RkUMcS8dt4^lg{I}rvQbE*QAcTF_ztd zbGb=)`4M!Vat5aQCm0182m zQy4wuAzJLP24&ktQ(VL7p-v3#%g9m$^4kWk=4WyK{#zXB&Qvvr2l=m*Z4}P*V%YSZ zUzLjJ+PVcD?VE@WaPnX~o>2`}EXU_tTLa7SuyK7;Xn0b1iv8vRyqkR=>M~@v9q%t0 zpi=0FJbL&5Jw3bY=BXCPgC6P{$KZu&%zs^ys+nR5eSLdF;J3vxj+0&Bz-kAHL?hx0 zix!417G;{tmW#{7+t8It;@*o-xRRekBBr3l;HaNO3dt$AWzW&&avv8>K@EuMl);+DxNNZ~lXz|H#v3__ZL1S<7egs<(L(qEtY4Gkh3Q@J z+^QDU|B+&Gi4RrscV;Y2=Oq4LevsdsIQ$V{06e9}Fkm|zC;$Ke07*qoM6N<$f?pLj A2><{9 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_rar.png b/mfr/extensions/zip/static/img/file_extension_rar.png new file mode 100644 index 0000000000000000000000000000000000000000..6a94dd89cdd37df9279645ff4b827529a1e39ec9 GIT binary patch literal 740 zcmVeR^Ij#Bx8B*6_DVgy(E2S6nxrY=leNQ}`R;MRo1MK`)|W2h^LZg2qP^3rab?YRx0?;%)_nV4bafq2j|Eo zcelDwTPBy)3FeMP_2u*hGn6=e{@hU-Z9`y4)n-VaQmUwfFZRK_z8Q>c?15LEl7w%7A8y@J~JP3x5H2N$ui zOJ`zg5(_Qi@l5IgfiTAFxe>2IZ8+dRv$R)%{3@iDkdg>I7u`c~EK-3C?TbA-XswiP z1~uy%u&K0uHavozvXP8#L)!JvcHmr3D?WcIV{WX7Fc0)Z#0KuYNkcy!VT~(zWrQiX zvAz!%t$3ao1*WeVH8BW9`#L7)Un7JvPIN^Ae3J&$9f}1H4#BXo3CL0-C`u?4BwFC1 ztGn^@Ap%|_aN(Kx7rz0jgIcD(8I6G#vAyNMR&IbZ_#*_z?XMus@b{Mh6A~BRu3_45 z$N7_CeEeO(jJ1adwh1EwoWUOj84J+Ss5aa_tBygG%75PBYxsuz2<OI>mq7jA(jyr=_=$$HuEa=&n2)U%AFL8Td2;B9ne;~nY zLLM?w@^R-1ggT?u!BC)W3yP53Bza`$T8xw5N*8(V)5W1B2qlr9ukWPYJ2EW1dFF?Kt)d$e-2fP_)Cc=saU~71%p-(9@2|8 zBBcj^4i<_vB-wq=d)sWcO$7&rH#<8s@B8N4WkLwB-h02`x(QJHPh;#So}5V5AH`BF zQv?x&AEpKK-c7LDo5QI%$*>V1A8bYblvqnzRVXexCW|6%@K-!jdJ53zT)tXHt_Zo zbfPEZRe@#uJE%~#9X4>bryc!=wl#<_GVvLg#)|0fT=|aI@s}$#Oyttox;~EEFK2N5 z*(WUgsjA(?BPLEC*^bv&4&v%q$>Y0v2UUVCo2BI*O;aO7iycC9Jfw0%4~p2>998s! z<`2-8<;R6%9f(IwIG&QQ34zRc-xJoLKuOckaPrzaobTdi^bJqJwnCof zt5q;)!$0OLI5qqpwVFV=>fq+UZtU8Uz|+DUZjH|%Z0cy*5Lp8Ojns%kQ_NH{x}=Ip zl5S2$apulPeEGJBWFiEvd38YuyuJXF5VY7~C9zyn)Y36HT2xiv}Z8yQPcoWTFvJoS}i@K=BV0Lu-`Je}?pX8-^I07*qo IM6N<$g6DQJk^lez literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_rmvb.png b/mfr/extensions/zip/static/img/file_extension_rmvb.png new file mode 100644 index 0000000000000000000000000000000000000000..9c533a050507f9d0143e7bb15baed35900b10c02 GIT binary patch literal 660 zcmV;F0&D$=P)OcHVog`;?V3 zMKGwv1=))r^al?e45GaRDYO;^2^9*_#X>qoLUbq!qB<-U5k}BL5FrcIK`2@DP=}yH zSX2i~qmpRZ_WkQO^Y%UVsYwI#X6E;AzVG+VW1i=M9lHAiuA2ny|2Y_2!h_*W!O^S5 z3iYMrbJ?A6$jBKBb6nShLsQ1ie)`(_d@z3>g<}Wn>xx=Al{_&y1H`zzP1z_L7sZpa2gM($o_MOw&M<>96vv5OL}Kg_jq0qd$|%A$Pm5s(@tF zs0qZi7#c(jhVWNOp>uN^SoR*x>)1wnLN^elp!m{3a8NufTT*giJ02d-eL%K*3q&Rb zO)$F1Lw&Qu9#m}?&2bH5`!hJPw=2@j@*f-d;yYY^^cDyD(h+fZfWK0;Q9R#|k!)He zAHFn;r>_>2yU`FhwXYk`s0S6x@%gUofkkk;I+{br!uJY}Tq&XF1aKhGN>PkkJRMAP&t?dbn-Fl7pU&?52 zX@KBkS;|4 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_rtf.png b/mfr/extensions/zip/static/img/file_extension_rtf.png new file mode 100644 index 0000000000000000000000000000000000000000..a7efed7e318a76bf34b37cdeeae0caf4fd51ecc1 GIT binary patch literal 664 zcmV;J0%!e+P)gne*Neo7GtYb z2^I;6S{F^lg-Fpw7j+?ZVciR^v2SzYDCrC2VOu*$an(5duOml-i4B;`lAxP-2AbX(;ryt96&XpH7U(afYfoeQg z5-bd?1qwxa>0h5`pZBTMPVByvL-)ljI=ee{{==IT2)IFjGF5z^IbIjAXZ$5TFXoXx zlE(htG#w=Z=@YG*YoHaBDHl=x4Mk)+KZ~mWu9 z%Ye=OC)5!HEN+JZJQg;amx0o?3~V|UCNeym6by!Ad(v+K?Ww2@Hbgh0Fto(v#KP#ilPn}e=6=U{2u> zL(F;X@A$plyCtiqIPmtpnR)Nq?|qL^#uyyF^Zt7nMWu-G-GSA!kYs<%R|xo4tRkjCy%XM!;!P z#>Bo#EQ}vUiB1^+l>mgwii@jrP2{x&VQ$lMcH(79leH=~Bj~h+fIV1=BspqPbdoGh z6okIuKqLKuXDMRbX56Clr|BlBO-4Gi9#--Y_)7K&P-z&nvh@&=4i z!KZL`PJ9AbO!N2t+eo`Nx&pXz{p9kh=f$B)WSeWh#=-LDHIY>u+Z9o!f7Fjg``U%2x34i zw9UPJyUy;u`y&?42BXiFdGzur7qK8QkW zoE2#oovX@)Yc=o8SUcWmjhue#`)zCMK&I5Qck3%-=o0DC90=By79j%ZGFmW|DO{bJ z#*6wxe15r(iRR9zo=s4R0pTySzwcswt2lnD3fp9s>rRKe0hG#!Idj1Sqc^bmd=;l_)A;#g8{6MsK@`nBd+Bmfq8Hu) z$iYP5Y!Q@vS&Sp2WR2DPWDAH==%&&w9RO+=m!41*MZPS`^nPU#Cu=ikJX(Muz+9<+ z0MG%aen3w%4u3K@r=R(kWqprCE5+(>SGwby?{M^eTWkuAPayrO>l8`4jW5% ziD_>W9RPENMmb55#4+M1@tMQeX?tEF;IVrToL_enWs8BP=9I$FqtZPYnOnx|`B|qe z11Uu76#O&`)*+|1WDha&2#58M>eh_%$*d-J%* zGc!$1tP2O`-Z|%d=k?7QK}2{vasCJOdZ{1?aApx81aHeam_IzoovPVSEn9s8b}l}8 z2o*pGi_ylBRKTDQ!QlP(>l4*-Wp$zb^ZsZ8HdYhkO5WpT(0KWst{i}Y7v%>S> zOig0HT*0LqMa=M4Y*MES8lvE&1(QiA(vFW2o14SzW&>9~ZDF#!hSv5Tb{{{%-qU9Y zJl|Z)a0N;XxCPPiarNjsXYt@R*5Q5q0*m>Wda(+bh~sl23-Y~T|34Lw%Z6Uhh+zjZ zod(YaWHzgvwZ7kH+-L>X>2-3?(lTPZUWb**Ai21RP@$k@wUk}qaE1eQ3%(D_4rwW9 zwcyrk`s{9PqStB~FxwT*G(FOSs=!CcakLmKl@Q7o3`yw}5~Vx(tn8#o{1*pZ9;A2- z-!4p}x%2>`T;4e4&S_ccm0jV^-U2J6-$j@iM>qod@DZ)~TL6>BQw0%;z)5Em2^uH< z4sb;DZewSsNM^{5W%y-U1FD3sUf~BOp&kTByvXMi{(l{^-?lpZ7GMD3&He)P$$vip O0000$eY%Jo!KM+B!8*!m1#lIl_2RG79e}`@a72_s|P~4PS7w%NBwPF=pv~5f>nS9Lk z-j`&Wn2itK%$@h{IrqME-Vih6_1vig?sR6tFvQqkfJmk>`&SP4Gtsi(bh!Em1zdXg z07^h)B)bP>B@DYDN&fM6bFT8N{Aj6hba%9XY*wac*duxW8S`ggDc7O;{i^mu`E)NTP?Vr2Pf{qjm6-2GAAa$K_J_NJxQB?@f?Mv%ge7$ zWS$Hf=n+T)`@a1k0ia$7{?vd*1Kr;T$eufoO>*&)9At`TO9}Cy6sw~oJ8$7hvCm@7Ujk;Y6eor1Kkr3sD*>yp3Byt=pYVOX>o-M-! zR`g~7V|piY1Z*agb{(RF5-5nJfNC{_ABaenz>z9;QFS<~qWEnaRI9-V(2*QR3a}rH zbYP-Ln4NeWjkPye?D|-2)j;A(vHA-n+K_;Z76_Un`a~{-tpIK^f$z7M@ySc!L%+&L zQC|s+dafNvr@cduxe!?Y^)}A$?M4X;+_CR3xdM#n5sF(w_+uCJ!sx{@5`R6D2RG`- z?e1XbbPkl9wB3<7qIu&ks6asrF}-;*5%a)PDg3-}5%FwRER;0I*ut7e{}NQ0*WPVy zm3Z_gIgW<_)X$H;^@k9~yu>s3|8Xd|&l>y{U;t8*@q1GCM*08%002ovPDHLkV1ku8 BGS2`2 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ss.png b/mfr/extensions/zip/static/img/file_extension_ss.png new file mode 100644 index 0000000000000000000000000000000000000000..7d056d0241657e889c59a79bcc5ad4f19e671dbd GIT binary patch literal 695 zcmV;o0!aOdP)MbWR%RepEaRt|2Uc( zykWE5Uw9rriTF|sRaG8NR=TPNg8JRrGEzvEmPo(BY$ArrO4V6qoSUUr&`1fUbG%yY z$K;oODWaeo_6H`iHW-&E0ArA4}YZSf?MpT4(?O002ovPDHLkV1nEaHUaIZeoiN4WXc}<2-EgTYG|Pn6ZbR*MfmTcM*&y?Lc#i|8PhHS= z2VeEe1^`_XDp7S!hOqzbYaDJ>aimiRiX{XNMo?r7pUFIti0FL2U#2-yH5%9vqT=)? zJ3=g=sKD|AgdfHb7Fk;bpt3!fzYieABY?e&_W+`f7MZ5O{9Qn9?lLMLlZaAIbLAbz zo;)31Q*Q(TK(p>Vdq#FZvnlWLSFXdz{X}#lPYs$F6LHaCgn<;1DA($e2{aW}HjB#2 z8xoLa5AVZ_pictJyb%T@j@);<0~n@!2gUefcu$>mJRW->`# z7`7A7k-xu$(5)N5<}aXBl+?}DRVQ~8Kw;>{;^3PFWEbWUym$%j=roO0qZQM8Xw=bN zj*kFn4gg`PB&2ocE~3v~0@KHB!4>{sl(j1=LPkd=#Sqtast^dVvmgdla*^kn=){ zr)e(0=fiNm15gIm^i*n=i-P`I|31AU`YL6 T9B!5+00000NkvXXu0mjfqB|{d literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_tgz.png b/mfr/extensions/zip/static/img/file_extension_tgz.png new file mode 100644 index 0000000000000000000000000000000000000000..5253aab3d0be7f7c92145ac59756010b4f0cf645 GIT binary patch literal 621 zcmV-z0+RiSP)oF{&|2gB_O}zW_s15WEYv5FSUP5NtwS`L%V@rPgSRWMu$S&b zzC49L`@5*WuHo9<8Jx*xE3;GM)h+@d@f}j0N0x#$2A4|{_)vdA@fI}6+I7JAgEG>*vFNZ7#_PR@&5kPn7>!V^qm4SnG7o~#{@R1z-l8sFjVuU z(hVW``eh5}hH^Nc%Sow>qfQ-Bf@{e|LnKV}sZkY@-#a^4UtbgZOhydJ7K93z&k+Gj z=j9A=u~5NkvnpkIDORRsDn2Pt-Az>RMS+P_Xsk9CksqzVL?v-!*%*he5@_#;nSl}@ zP`(h2n|zM(B>0?hNeP`jpmYi?6mLCk1B$nwQH;o`ENivkx_S`4#;}Q?T2Gz5&<3z? zqU=(te0)+jEP)Zc+50OFz7eTbJQd_ieCA4Vgs(rMH76mOTXfffYHeo@Qm6JLkx|0fHCW>NU z9B^Sc-T&|W|8VDVr^s_R_nyah&iTG`nbsP{&Q45av{G%wufG@tG-K(v_bzspTvRJd zA5?s-?=$RH-yPaP)-J9R)A(_{056V}4v#G_c7lZ|1-_M+GpB_MO7~^bGDi zx`NHEccVZ8K8UQG(sXu0F1QdSpYl8cWZ(u=ZDM@57xiv()Dcfiml0XLriPGC6#y3! zKfYuT>xkjR_)~bwL(jk&YW4MU4S*fVb&B0ANx*MUA(zWTlCO35PP>xeWvY3QY17>h zR?rMv3b;Oe7%y%P;e79269kvCNLY|WUlzp#Zj2p4d|xweKU+n2tPz8gui!{-ClgG= zm%avo)WXEMLs(kNBlUS51MxlRibjYR7k974(cTiq^VE0DrgdqGDgYuI4_{{ph@n8c zPcLO{-tmLYws_=L3Lg1)wZ-6{N6j~mM9HNMojY2w$(;|hH0YQToMZD-C{)BX% zBo=xx*_|2Ryft^b=Lrt%GBfXc-+b?zH^LZ$VzGBc>nLyMsX=SIBZRPDZEWmyXEPLI zUHh}i1A`Z7Q!|)SECfayifLLJEG<^H6$;_>_;}@9@(g!_O+{;%d3+DjaVTBbbSM>} ze_#ZqhqrL;`Xa*c{BWTFK_tT|0(+u13Vsm4aXePRq$(sDQY9sR)`3$e?^AsA?9`O+ zQPP*oBD)=CKX*f_o8@X7n7bCx`20;`O_^50Hs3+hfdY2q$Xmpq52mV zX0h+UVeCJ6gv(-2T0LL|YK@XYT)kXI>$rWV2fml%8|mpi)}Fu`CZs{TA!GzeNGUx! zNTp)3X=214B**(|33KJUxN_+Yc5FXH=4!^p*PJ4t5=ed!WE+9%he!DIHcOeAT3kby^6?08OFFIInj zCEVsj0SONb_kjn`3y>it&tFcal4qYyAd|^)yC*$}OOQk$6oPE<=b`xcwp>POW(Zri zbYpp?N*x#=o9iI3W_*gEUe`}wy_i4Rc#S6h@mn;Xxg+iSK>R8h-?(C%M4P*=G`P)8USFD>dX?05nnH$;znwr4{Yx8z!qaXX?0iOP{yi$y+QhrLWh5ZF zK_@e7?SoPPh5-~yl3cY~!HcmG1iqf2g;i;Kshf8t@?=-kY9X&>ovMq=D?EJk7{!H> zQ`9#&EON)Q02YoZG!`G;jAx9TUE6kb@hGv0n!P5{@O>Y}@)rJ7D%d+ZLp3xUZ}NH? zq$qMWV`6FrB87a8i(bU$F>5}T<5;sNjrW`d@ECxn_=m&OpXl%D!okURj&umV zknE}A%aPcN0Bj=wH3QTem4}`ut@!fw49~jTIVP8v`W*_iGc&XyLN-qbYy1xl>rmw0 z#H|YCnndKxHxoQZay9F?~KG)|2+bE75BT|goPP8`PYK`pKG2y|0}=%ZWN^xWDAPZ00000NkvXX Hu0mjf_l5jt literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_torrent.png b/mfr/extensions/zip/static/img/file_extension_torrent.png new file mode 100644 index 0000000000000000000000000000000000000000..09de7ab1d425834775a91b9dbc87c5dc88ab9608 GIT binary patch literal 618 zcmV-w0+s!VP)F%L13)k6k^ z5VIi)8UzoEupkJ6;2}T2Z15mnM4}S#B<7^xHGx$WkG{^ih`D$Q=)sHNDWa_4;}!!O z5@x5nt?Jp?-C-BBhN64AtG@oKzHZ^11Ka%5>i5iKlg?R;G9d)HYQ4GMI##T4t}cE! zd3mu32B6ShqNC4P11Tjwec7C{%~#Lg-uSUt?CU|a)a+yR#S*j%(Faa(b72klpIyb~ zavS?*w}Iw53J~3=2pDG&$KxJ=PiER#mcqayPyzO~4er$*;Q@3*JzkfTwjc-VOic$m z2r+h`f-{rnAe4fl|D9jIacZ`X`Ikp=e)R~BS8K4&Ugn$R`W7nhx#}zu2O6b@Q0v$niRhUa^n5vxc^V7*$l2Z8|aomuMIY5da413g9>PK$Xr5WC|81Lczy1|q07n16N(M*4ssI2007*qoM6N<$ Ef@u60)c^nh literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_ttf.png b/mfr/extensions/zip/static/img/file_extension_ttf.png new file mode 100644 index 0000000000000000000000000000000000000000..51a0bbb6ef4f0c42b7dba32e6a11a3a2e5e0041d GIT binary patch literal 668 zcmV;N0%QG&P)(j)fDJ zp#w%xnGM(?qMUZE!^G@o6SQa}7`SU&6hcV57A;y7g@o-|)JBN{VZsJ$Q5a<;fyks# zFynjocFuk8P4m)47w)_Fo%@~de&^>3Yb_2=Emi_++KmAXOH;&aG6bX)tDmm*?@BD} z$3ydnoySh~!@wI(P)P zUzD(ReE=g*^P`wt5JWPXA`k=*==Nsq!&9;@p(aD8KnODY{(&b$owzuYKj+;kdxSX4 zzA|BA0<9IaQbeMmXjQa^A<(zG1G%XcblfOme=f`M52X}10s?x{gQ5^z?1ohtyjoht zU~e~y`?{U|Z=zEnL^<%J;%uWv`wN9uOq|$(TXSo8T>c7QMM*t%4J1uR<# zMR7}v9n0d%vkJzK?h=w2T)9|BYZiwAEj z80ga2)8@Hzhx@mY5GRpkjvUUo|Cg7W=-U}jki7}_=Bo~eZ3#%4rbG?*`I!G^F#SHD zibQ1_KBS%fe#to876QqgMkUH-GC1?l(pI>5siLmUZ_Y*C%IA!8_|#kYwLbf1xm+~X z)?1`8&PE$MGrs;#`B_r0_tL%{|37|`-x6>B2rvM|^V(+LdXy#r0000Pt=9xYUH=-`1gflx>Up7t4Z+sTF_iPBIweQ6O| zD`bNJAxH2p$%KHS6a@TqVG`%&mQb%urS8N;spfE-?Awdzv6rzc_n8xV+Se@(d$p@w}s} z3&p$7k;!BuC2i@#pI<*;zx(`gAbC9TGi+6xVgrh0!6yXdULa8)%iZ|@@q_I?iSSo| Z0RV*7nBh-qdNbA{a5qj`Yi=c;k5PBDnf;|f}kN1>tD4< z(pGJg?9BS!B-vzb4?ftPH#6V&z4zwL2+#9y?&_1gRyxN1zs4(qKPeWcuASK8uUD}) z|CoGg;D}ii3>Ot9&$af9$b4=w-ak5XXL>w&zA=DZQ!Bd~52xlJB}oWTAuA8Z&vxVP z zKnkww5t#)nlQOs*PorGc*uE={lb2tavXZI8$iA6R1v220UCKaO5}GC~R-))iX{6I1 zk=VZjd%AW)Qf5k-!wH@Nn@Lwn6lomp-;3UZ?LH`zTgKRAngV$^babC7v1YR7lu20; zWcYMvfc*7y5vv7Yr0)Pc%Z96ht*)2ADU;XR6*n6fZahPFVFg=b&A5572hkP@_kl3o zYBWCsu1(th6d#DZ$+7V*|HqKowr!3WoY+Xf)e50d2x}_}@8AAHM{6^FuenHcM1AlN z+EYrcFM%Z$oxI~%n4Vie_wF{_9yBnbgh<#nxb=r<+9KeD9k|rv>-Te}EA6dK_`Xy^6REXCBe1Ht#x@#(((3YT?scYz zubNlACmd&~`W6jMR6d?Fz9t~d3lt(jehmL_1>$Ad`76KxE}H`uzX`h_00000NkvXX Hu0mjf1y3%I literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_vob.png b/mfr/extensions/zip/static/img/file_extension_vob.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5dde849b24710e7a20c035aae12b283c19f920 GIT binary patch literal 632 zcmV-;0*C#HP)3%J4~r%=+bkkKZGwLC!}ALVw#O01 zs@P%h;gMl5pGd%%&d|$Ju>ad)?$Y?&&6gL4kH_CtBhjK30JD!@K*|P%A@sqaJ-Bmw z2Fq6ps0NFpljC!UNmQai_*6+L1<#Xpg3uU*F75%rPmCQIK%0IxdR5MI(lMEw(x+-d zNeHj;cm!N7enu|ei`^3o*mdSUp0@9$md(+o4!DO6swO1?rA$hP(vLFWX>{z&(MX1# zu&z_n2-P4&jny)U#H6M61On=eaO7L3D(9sL*vjKztN_PO$zX^J>QDd)9@4)Q) zUszcW&_<%3eel)AmrmtzYiS*8eu&gL;GsTM0t{VWiT0n0TrO2OlU#A_gKxJSYJVAs}MV z^$`(vr+cjG+1czP2McPpruM63cR?9<* zPY?B`Nk)?Zsvv6<7cZ@R?W{~p-+Xia=&AYvI_p+322&5`p*@mmE*Be%k%I+XzdwhM z7e;V4HlvuBCT=p?&>&@zAPO}%P}K(D1_qplA_c6KaAP2kqN0=j%hF};Yt2qYL+(3Y_L79JFo;ifK#UnKU@mdRCzGHl_z)hGP**rz=@a`M80lmAPg=K6!31fgwXd;VH|D5z_14GVSvFq&(U}5$@&EC zVILpe#o0xKfe#bg))nOPia2e7hg_SF&P^c>+=92p@#qycw};St6SES*)$fpgOn-j8`0yV6^%5r8gBtKI7JThpJ{rFJJ2}qb i|Lq6YeUjjx00RKXJ>r@41|B~E0000Sj2#pg$? zvsd=bJinRU9Gh4;%kbv-f4~1VE7CN@$q6x=TI9I&!%ASW3z!@On%swiGlToPYZyU$ zq;2ECZz$d|*zZnP0CA>?zFSuTT?b@}%FE}&Gj|Gido505&1eCf&Ze0C`V$ZWDFNl! zU~&8`Hcd^UGdOEF+uejP@UP5f68y;M3qQ2q>XDL2MMXJmdBRc3l`J z$cID2#2I(iz@*L*5%lgv4v>)vj-5CMt81{u_oxbmHxCNHjcZWr0SgAml47-D4Fv%y zv^K~#>uh0_(8L3LPK^b0FRcT-7>I#=gTSXpt)?r+8ybwH4NM=Mg0?jxs6TQOLp?Fx zUOK*#MXLtJC79s#=U!ZYHiUYjv9+rLts2P6CPLd_;VfdRwls{7VqF(_qYN%TJm~Ax zon1oHNCd1yOz&Dsgq)F*%%1>ju%Qdfoc23q`z?e?ATpZ~G^>8k6Pnl#iChsHg)3*? z`E2H^A?ww^m%)ql%z_3Afeu*MR+lzDWpaek$RC(N{?HGf4y3`JSA2Q$4^$w$law7& zBJt0?1Ms^nirY)mdEp+fyQCQG|M!m{XfemL)tpQ2zFsaa?}htYviE&l=kWhyj=FDd c@mGKW0QKPC0elTeBme*a07*qoM6N<$g5Ml7lmGw# literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_wmv.png b/mfr/extensions/zip/static/img/file_extension_wmv.png new file mode 100644 index 0000000000000000000000000000000000000000..4017f8671291d1d0c0820ed02e8f05ac74396c95 GIT binary patch literal 688 zcmV;h0#E&kP){g_O-})###_8;(NICz2eH0#chFU1A1~7iM7mneBkF`T8^>5EWgrxyOJjT3Af2goecvgzkgW*C2Ih z>LMx$W2`)Vjgvacy8#SUho&mQ{?5z{kb4Y#{f+I(Ayl}55>qg^&w=lWk$)J-G;~d) z;^={1uhlS{H<6yafr0ub3~Y5nC&3XFo39U+RZZv`3<3$zRTb~+%a}Dy;C2C`{}4Qv z*!eybS}}k84f3!KG{#>1Q?Mk-{k)#lzEwF&S$k(U;v9I*}rFtZlO`3-{*cka_+Ah3ZPskxkSk zxJ_)>#=sJ$2g|ZiEZ#?Y;WG+vzQY!jrER^GV0@W?S#3~#6mUI3 zXNk5WHew*cv1QbzcgF%Mto4${JWHM)f)~Mjh%UmR$oZ!cX1mX|vD$g4yKr)EAGRoA z&VJ+z76B$D6LO`Sh z>OqKzL{!8iGqb)on{B&IKp(rqoA>k0H}Aa>zVD;&a<;6E-_CkO!o3jmiLW1KFKpj% z1wNM-PCj?)m^D%;_=6t=k&jiZu9Z5g-ps>d_R`4aGu#kOD~-nsOK=<+=0j_PdbueCx?S0{F)=IFnRT{}A%JlVjYT2rVg14Vac7KRznKL5UmeS5mm zySE#Om;+xMG^qjbr&2@VzGsa?;|uTxdU2+IH*V$L;YR9!weKIzV&G_B1VGliL?{}E zu00A+g=3RhO6A|S6Qh}z#LOX9stG{7?v+~Lym$R1%0DYsANTq(MJ$#-e!aRD;h0n)L{o$YqK={Tund8^Z_5}*T lO>f8l%Xi8vvhr7e0RU3V>suov1}Xpm002ovPDHLkV1gFoDCqzI literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_xls.png b/mfr/extensions/zip/static/img/file_extension_xls.png new file mode 100644 index 0000000000000000000000000000000000000000..a5cb228ddeabfdfd1700c892410cfba818f48343 GIT binary patch literal 617 zcmV-v0+#)WP)gn+kHk5C54qJ z7D=Nb3a?Qj_ya$UVhT+_5VR1Bh(VALEJE;8YD5rH2(~7j_$kyF2sWYw0v1WoMnu#` zUwr#^X1sHkeQ%en;K1(A{hc{;?q1=&M_BuBZ~UBEyD7Il}pW)G;2tgmP#s^lomA4?mh4`8}A&brCH|TX^&8HKbH+0Ou_B?(4(N$-DS4 zX3?}O0~jAg4x$STVd0@71EmT8R>D)zC`wI$^G7cuR%-^#jS)%VGqQL`OQ#8~N{=MK z#pPw}=-Gz)tuE}kZh)ToaI4cL2CPH4u#!l8!nRQ{BY*w=1#68)-}XAZql0YcTwRno z2*}uU4uwPf}rqeZb#c^J~WT^`QnHuoNH}K%Zd-k85>g9c4 zlc33Q7Q2c;5YbDIiDPqZ-@}t1`FrnprpuKV2Qsm%0D_1niZT515Vfg8v*nt&b8r^( z-)5n-=DbRPAdb=zv5ZP%5EIzdnIrUzOA@(OEus+FwCFg3sFgn+kHk5C54qJ z7D=Nb3a?Qj_ya$UVhT+_5VR1Bh(VALEJE;8YD5rH2(~7j_$kyF2sWYw0v1WoMnu#` zUwr#^X1sHkeQ%en;K1(A{hc{;?q1=&M_BuBZ~UBEyD7Il}pW)G;2tgmP#s^lomA4?mh4`8}A&brCH|TX^&8HKbH+0Ou_B?(4(N$-DS4 zX3?}O0~jAg4x$STVd0@71EmT8R>D)zC`wI$^G7cuR%-^#jS)%VGqQL`OQ#8~N{=MK z#pPw}=-Gz)tuE}kZh)ToaI4cL2CPH4u#!l8!nRQ{BY*w=1#68)-}XAZql0YcTwRno z2*}uU4uwPf}rqeZb#c^J~WT^`QnHuoNH}K%Zd-k85>g9c4 zlc33Q7Q2c;5YbDIiDPqZ-@}t1`FrnprpuKV2Qsm%0D_1niZT515Vfg8v*nt&b8r^( z-)5n-=DbRPAdb=zv5ZP%5EIzdnIrUzOA@(OEus+FwCFg3sFgn@e+-xCK}L2 zf?81_hzpmx)`j9mMbNl#CAd-0Ri!_`jeo&XP;li!s8~U%yLKTiw1prPY^&)a5UR!+ z^Jd2L=H;bL(?|#Ido%Z*d*|FUGr~ECXw+_tMQ2coSN%i8_OdZ%K6b+TH_&XD$t3VwhHe?Tkkaa$KK)@y)p4frw%%#Cxt3RGVKD^P5m>Tl;UvY+`gnXZ2Z*TByI{x9L6oTasVfkf z0^IK7aPJ?(EzdBX?GdqCz%vvQDif(sYkUIUeFWZ)GA4O9$YLnp0n4PL^#b)4-e7wA y{Givk`DI4lvk+p0zdW`-8q8hzC%^y*r@RycJ(AUG4-gNU-p*(#jOZMld9Wf(W+O7KVTrv@mF6uv4&5B#8Kf62Tlq3&9{pA|hHS zLWJDzzV(~8cbmJz0|(x|dGF19GvCatN|FRm=4wA(91n;N$dYf;QlXTB*7`^7{L>w1 zN@@#O`G|9E{1k7Um~)STs38x4rin55_UXg+#o6%Akqa+RqD^du7H#6uz1uKKBaSyw z8lA@Q!AZpLFXQ3e1suEh7A`t7u{aAwkckceFD^npmxneQt`T|X)fd-L+!jju_`U%Y zYS)?Ixf74C1OYw9#Z9Lq=}!P_H3BZ#*OulnJa(2WBJA2bgf~|!cyMV1I|ui`CCTxw z43tmX&`~j(Viv{f6xLqfz{ckl>>Jt7Rq<3~7iPunpy1+=00x>BSKQZ^Z=rZ#8n0Fs zP+xlPgE$tsTpg3PbOOjRjtIcWS`KW+?#gL=sox|e1Cz5EfKXCxUC>(;LeE`5j8XVn zpT}T%Qab4GthHRm+X3ny6kLNX*M0^RvniCPn%E(0!i}KX8E=PP8AxQUB9so#WClaE z8Q$@Yme#7?8F&gZ1H|kvR5OGA!f2D0X7O79-Ca;A1sllN_F?t@QBHM~K5>+DxxRFy zn^fDYXj?yvLWCf1)2k%th(eStm3FGTjlchd&)zMsA8H?vo}yCw>?qSk#1i!Z{J;F7 e-$zmY3NQc>HPk6~O~^O^00004gUbq(tw1lgoXx`HVs0gK|-QT;Nk*gBnKlTn_z-{ zmhYU)-7d3t&KJ-ik94}dotgJ$-pr9P27{QufTqgxGmAP3uNoaE7bGM|sxpx{$6x!S zseeO+ZJ)Bq=VzY*TTvP$C03r?ILjc0=nnu+A|W7D<`Wa0NdS!2oVvxShDKmPGuu1Z{X#D3g|-0BZ&qN9*G%zO46N zD4sVu^%@Qrc`Ds1baRPAMG7LbeA>HftOGIA&>{S+y14WB!(!4xyYUUh=}X*79hA*; zs@NUjK4So91b$-;-y6->tMfCSvO&Q{3%OG#fnJLTF^s=9aIa;Dv9bIfwI98O6QfM# z&RzC+V0j(IuuEljHs;@Ei!vnIlXu^Ym7iYmY~+PRvHvr>_inmd1OCpx1sDLU%fF)P S!b7P50000 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/folder_delete.png b/mfr/extensions/zip/static/img/folder_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..bb56a9e6f9b274f40000c2b79208c7343c61c651 GIT binary patch literal 767 zcmV>wa6MEbuIXhZn!v0Gs} z6iwDtdYO+CnciYpOqYxtW!{7#FhBGaze3A=RJs6B8^=nVIAo4--}*8IunoiQ6p;F< z3~EAfa0&%p6TWLq$fg;YVgP2cA@g@aTHgSAQgO^Nz9ta zuRv0qM0Cpu!!PkT6=^!@P^S~lz!;S)yORPHRwFt-h3{*L9?A2@ z#_|F@6{mo$AnervouqLZrsga1CFZ+F5$>OX<0AAUub~9Do{YTG6k_2;l$}1$THL3!g}I4o3^$#7D4a3H!Vw%eb{KFcKm}g5qO5rU zPZ5^-rcmuGhx#3X{WAo$9)a&@8I+;!N?Xwe!}J86KZ7GGl~a$_08Cbgn`ty&1)6W< zbp7cK)R#$pu6xi{Q=hWZY4wk6Z3R0TPsRQ5;&=5`9w;ltJ+`$z$i<3Wia}0vHw9|% z49sR{wBNE@E_&Y1uEnoc6*xUqP+Vkg!$LS=^=c_|kQWXFI literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/folder_horizontal_closed.png b/mfr/extensions/zip/static/img/folder_horizontal_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..eed25bc695c92907b2f421f7b1e05db76086ff81 GIT binary patch literal 542 zcmV+(0^$9MP)|y%0dwF+e0up9bsl7ZSvd?*MSb<_!sgZ~0B^lP*TAxY6k&3n%bSlt z0^op`Wk z(An$v*xnwgjhH1)pF6{q+Ydk|;EL!7{4wyJ?I*XgJ%&h^OD^8H3cVKhJ^f;anSoh` z9bZR?=*dg_o_JBszh*!LdY}RC(Xrd-$FBkn2E=Yos7u5Mmb%WsgaBPsoNDIx0jH2s zPNxl}i*thJyIOC0U`9~|k&JcIzo~Trug2hLqg^q=MKCNi=gI zU}nN(6;jCAmJ#R}+!$n>q03z)HMn{W(>hb`Jioq3ZFd4dRLL!Ehq@08Q6Y?KN_3<) gGJW_?j(iyT3tJV!Z07*qoM6N<$f-$D-_5c6? literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/generic-file.png b/mfr/extensions/zip/static/img/generic-file.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e1db2e36ef8a3ace0fba37416f28584649b1d4 GIT binary patch literal 251 zcmVg8iK2;AfL ul > li").clone(!0),this._data.core.original_container_html.find("li").addBack().contents().filter(function(){return 3===this.nodeType&&(!this.nodeValue||/^\s+$/.test(this.nodeValue))}).remove(),this.element.html(""),this._data.core.li_height=this.get_container_ul().children("li:eq(0)").height()||18,this.trigger("loading"),this.load_node("#")},destroy:function(){this.element.unbind("destroyed",this.teardown),this.teardown()},teardown:function(){this.unbind(),this.element.removeClass("jstree").removeData("jstree").find("[class^='jstree']").addBack().attr("class",function(){return this.className.replace(/jstree[^ ]*|$/gi,"")}),this.element=null},bind:function(){this.element.on("dblclick.jstree",function(){if(document.selection&&document.selection.empty)document.selection.empty();else if(window.getSelection){var e=window.getSelection();try{e.removeAllRanges(),e.collapse()}catch(t){}}}).on("click.jstree",".jstree-ocl",e.proxy(function(e){this.toggle_node(e.target)},this)).on("click.jstree",".jstree-anchor",e.proxy(function(t){t.preventDefault(),e(t.currentTarget).focus(),this.activate_node(t.currentTarget,t)},this)).on("keydown.jstree",".jstree-anchor",e.proxy(function(t){if("INPUT"===t.target.tagName)return!0;var i=null;switch(t.which){case 13:case 32:t.type="click",e(t.currentTarget).trigger(t);break;case 37:t.preventDefault(),this.is_open(t.currentTarget)?this.close_node(t.currentTarget):(i=this.get_prev_dom(t.currentTarget),i&&i.length&&i.children(".jstree-anchor").focus());break;case 38:t.preventDefault(),i=this.get_prev_dom(t.currentTarget),i&&i.length&&i.children(".jstree-anchor").focus();break;case 39:t.preventDefault(),this.is_closed(t.currentTarget)?this.open_node(t.currentTarget,function(e){this.get_node(e,!0).children(".jstree-anchor").focus()}):(i=this.get_next_dom(t.currentTarget),i&&i.length&&i.children(".jstree-anchor").focus());break;case 40:t.preventDefault(),i=this.get_next_dom(t.currentTarget),i&&i.length&&i.children(".jstree-anchor").focus();break;case 46:t.preventDefault(),i=this.get_node(t.currentTarget),i&&i.id&&"#"!==i.id&&(i=this.is_selected(i)?this.get_selected():i);break;case 113:t.preventDefault(),i=this.get_node(t.currentTarget);break;default:}},this)).on("load_node.jstree",e.proxy(function(t,i){if(i.status&&("#"!==i.node.id||this._data.core.loaded||(this._data.core.loaded=!0,this.trigger("loaded")),!this._data.core.ready&&!this.get_container_ul().find(".jstree-loading:eq(0)").length)){if(this._data.core.ready=!0,this._data.core.selected.length){if(this.settings.core.expand_selected_onload){var n=[],r,s;for(r=0,s=this._data.core.selected.length;s>r;r++)n=n.concat(this._model.data[this._data.core.selected[r]].parents);for(n=e.vakata.array_unique(n),r=0,s=n.length;s>r;r++)this.open_node(n[r],!1,0)}this.trigger("changed",{action:"ready",selected:this._data.core.selected})}setTimeout(e.proxy(function(){this.trigger("ready")},this),0)}},this)).on("init.jstree",e.proxy(function(){var e=this.settings.core.themes;this._data.core.themes.dots=e.dots,this._data.core.themes.stripes=e.stripes,this._data.core.themes.icons=e.icons,this.set_theme(e.name||"default",e.url),this.set_theme_variant(e.variant)},this)).on("loading.jstree",e.proxy(function(){this[this._data.core.themes.dots?"show_dots":"hide_dots"](),this[this._data.core.themes.icons?"show_icons":"hide_icons"](),this[this._data.core.themes.stripes?"show_stripes":"hide_stripes"]()},this)).on("focus.jstree",".jstree-anchor",e.proxy(function(t){this.element.find(".jstree-hovered").not(t.currentTarget).mouseleave(),e(t.currentTarget).mouseenter()},this)).on("mouseenter.jstree",".jstree-anchor",e.proxy(function(e){this.hover_node(e.currentTarget)},this)).on("mouseleave.jstree",".jstree-anchor",e.proxy(function(e){this.dehover_node(e.currentTarget)},this))},unbind:function(){this.element.off(".jstree"),e(document).off(".jstree-"+this._id)},trigger:function(e,t){t||(t={}),t.instance=this,this.element.triggerHandler(e.replace(".jstree","")+".jstree",t)},get_container:function(){return this.element},get_container_ul:function(){return this.element.children("ul:eq(0)")},get_string:function(t){var i=this.settings.core.strings;return e.isFunction(i)?i.call(this,t):i&&i[t]?i[t]:t},_firstChild:function(e){e=e?e.firstChild:null;while(null!==e&&1!==e.nodeType)e=e.nextSibling;return e},_nextSibling:function(e){e=e?e.nextSibling:null;while(null!==e&&1!==e.nodeType)e=e.nextSibling;return e},_previousSibling:function(e){e=e?e.previousSibling:null;while(null!==e&&1!==e.nodeType)e=e.previousSibling;return e},get_node:function(t,i){t&&t.id&&(t=t.id);var n;try{if(this._model.data[t])t=this._model.data[t];else if(((n=e(t,this.element)).length||(n=e("#"+t.replace(e.jstree.idregex,"\\$&"),this.element)).length)&&this._model.data[n.closest("li").attr("id")])t=this._model.data[n.closest("li").attr("id")];else{if(!(n=e(t,this.element)).length||!n.hasClass("jstree"))return!1;t=this._model.data["#"]}return i&&(t="#"===t.id?this.element:e("#"+t.id.replace(e.jstree.idregex,"\\$&"),this.element)),t}catch(r){return!1}},get_path:function(e,t,i){if(e=e.parents?e:this.get_node(e),!e||"#"===e.id||!e.parents)return!1;var n,r,s=[];for(s.push(i?e.id:e.text),n=0,r=e.parents.length;r>n;n++)s.push(i?e.parents[n]:this.get_text(e.parents[n]));return s=s.reverse().slice(1),t?s.join(t):s},get_next_dom:function(t,i){var n;return t=this.get_node(t,!0),t[0]===this.element[0]?(n=this._firstChild(this.get_container_ul()[0]),n?e(n):!1):t&&t.length?i?(n=this._nextSibling(t[0]),n?e(n):!1):t.hasClass("jstree-open")?(n=this._firstChild(t.children("ul")[0]),n?e(n):!1):null!==(n=this._nextSibling(t[0]))?e(n):t.parentsUntil(".jstree","li").next("li").eq(0):!1},get_prev_dom:function(t,i){var n;if(t=this.get_node(t,!0),t[0]===this.element[0])return n=this.get_container_ul()[0].lastChild,n?e(n):!1;if(!t||!t.length)return!1;if(i)return n=this._previousSibling(t[0]),n?e(n):!1;if(null!==(n=this._previousSibling(t[0]))){t=e(n);while(t.hasClass("jstree-open"))t=t.children("ul:eq(0)").children("li:last");return t}return n=t[0].parentNode.parentNode,n&&"LI"===n.tagName?e(n):!1},get_parent:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.parent:!1},get_children_dom:function(e){return e=this.get_node(e,!0),e[0]===this.element[0]?this.get_container_ul().children("li"):e&&e.length?e.children("ul").children("li"):!1},is_parent:function(e){return e=this.get_node(e),e&&(e.state.loaded===!1||e.children.length>0)},is_loaded:function(e){return e=this.get_node(e),e&&e.state.loaded},is_loading:function(e){return e=this.get_node(e),e&&e.state&&e.state.loading},is_open:function(e){return e=this.get_node(e),e&&e.state.opened},is_closed:function(e){return e=this.get_node(e),e&&this.is_parent(e)&&!e.state.opened},is_leaf:function(e){return!this.is_parent(e)},load_node:function(t,i){var n,r,s,a,o,d,l;if(e.isArray(t)){for(t=t.slice(),n=0,r=t.length;r>n;n++)this.load_node(t[n],i);return!0}if(t=this.get_node(t),!t)return i&&i.call(this,t,!1),!1;if(t.state.loaded){for(t.state.loaded=!1,s=0,a=t.children_d.length;a>s;s++){for(o=0,d=t.parents.length;d>o;o++)this._model.data[t.parents[o]].children_d=e.vakata.array_remove_item(this._model.data[t.parents[o]].children_d,t.children_d[s]);this._model.data[t.children_d[s]].state.selected&&(l=!0,this._data.core.selected=e.vakata.array_remove_item(this._data.core.selected,t.children_d[s])),delete this._model.data[t.children_d[s]]}t.children=[],t.children_d=[],l&&this.trigger("changed",{action:"load_node",node:t,selected:this._data.core.selected})}return t.state.loading=!0,this.get_node(t,!0).addClass("jstree-loading"),this._load_node(t,e.proxy(function(e){t.state.loading=!1,t.state.loaded=e;var n=this.get_node(t,!0);t.state.loaded&&!t.children.length&&n&&n.length&&!n.hasClass("jstree-leaf")&&n.removeClass("jstree-closed jstree-open").addClass("jstree-leaf"),n.removeClass("jstree-loading"),this.trigger("load_node",{node:t,status:e}),i&&i.call(this,t,e)},this)),!0},_load_nodes:function(e,t,i){var n=!0,r=function(){this._load_nodes(e,t,!0)},s=this._model.data,a,o;for(a=0,o=e.length;o>a;a++)!s[e[a]]||s[e[a]].state.loaded&&i||(this.is_loading(e[a])||this.load_node(e[a],r),n=!1);n&&(t.done||(t.call(this,e),t.done=!0))},_load_node:function(t,i){var n=this.settings.core.data,r;return n?e.isFunction(n)?n.call(this,t,e.proxy(function(n){return n===!1?i.call(this,!1):i.call(this,this["string"==typeof n?"_append_html_data":"_append_json_data"](t,"string"==typeof n?e(n):n))},this)):"object"==typeof n?n.url?(n=e.extend(!0,{},n),e.isFunction(n.url)&&(n.url=n.url.call(this,t)),e.isFunction(n.data)&&(n.data=n.data.call(this,t)),e.ajax(n).done(e.proxy(function(n,r,s){var a=s.getResponseHeader("Content-Type");return-1!==a.indexOf("json")||"object"==typeof n?i.call(this,this._append_json_data(t,n)):-1!==a.indexOf("html")||"string"==typeof n?i.call(this,this._append_html_data(t,e(n))):(this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:t.id,xhr:s})},i.call(this,!1))},this)).fail(e.proxy(function(e){i.call(this,!1),this._data.core.last_error={error:"ajax",plugin:"core",id:"core_04",reason:"Could not load node",data:JSON.stringify({id:t.id,xhr:e})},this.settings.core.error.call(this,this._data.core.last_error)},this))):(r=e.isArray(n)||e.isPlainObject(n)?JSON.parse(JSON.stringify(n)):n,"#"!==t.id&&(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_05",reason:"Could not load node",data:JSON.stringify({id:t.id})}),i.call(this,"#"===t.id?this._append_json_data(t,r):!1)):"string"==typeof n?("#"!==t.id&&(this._data.core.last_error={error:"nodata",plugin:"core",id:"core_06",reason:"Could not load node",data:JSON.stringify({id:t.id})}),i.call(this,"#"===t.id?this._append_html_data(t,e(n)):!1)):i.call(this,!1):i.call(this,"#"===t.id?this._append_html_data(t,this._data.core.original_container_html.clone(!0)):!1)},_node_changed:function(e){e=this.get_node(e),e&&this._model.changed.push(e.id)},_append_html_data:function(t,i){t=this.get_node(t),t.children=[],t.children_d=[];var n=i.is("ul")?i.children():i,r=t.id,s=[],a=[],o=this._model.data,d=o[r],l=this._data.core.selected.length,c,h,_;for(n.each(e.proxy(function(t,i){c=this._parse_model_from_html(e(i),r,d.parents.concat()),c&&(s.push(c),a.push(c),o[c].children_d.length&&(a=a.concat(o[c].children_d)))},this)),d.children=s,d.children_d=a,h=0,_=d.parents.length;_>h;h++)o[d.parents[h]].children_d=o[d.parents[h]].children_d.concat(a);return this.trigger("model",{nodes:a,parent:r}),"#"!==r?(this._node_changed(r),this.redraw()):(this.get_container_ul().children(".jstree-initial-node").remove(),this.redraw(!0)),this._data.core.selected.length!==l&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),!0},_append_json_data:function(i,n){i=this.get_node(i),i.children=[],i.children_d=[];var r=n,s=i.id,a=[],o=[],d=this._model.data,l=d[s],c=this._data.core.selected.length,h,_,u;if(r.d&&(r=r.d,"string"==typeof r&&(r=JSON.parse(r))),e.isArray(r)||(r=[r]),r.length&&r[0].id!==t&&r[0].parent!==t){for(_=0,u=r.length;u>_;_++)r[_].children||(r[_].children=[]),d[""+r[_].id]=r[_];for(_=0,u=r.length;u>_;_++)d[""+r[_].parent].children.push(""+r[_].id),l.children_d.push(""+r[_].id);for(_=0,u=l.children.length;u>_;_++)h=this._parse_model_from_flat_json(d[l.children[_]],s,l.parents.concat()),o.push(h),d[h].children_d.length&&(o=o.concat(d[h].children_d))}else{for(_=0,u=r.length;u>_;_++)h=this._parse_model_from_json(r[_],s,l.parents.concat()),h&&(a.push(h),o.push(h),d[h].children_d.length&&(o=o.concat(d[h].children_d)));for(l.children=a,l.children_d=o,_=0,u=l.parents.length;u>_;_++)d[l.parents[_]].children_d=d[l.parents[_]].children_d.concat(o)}return this.trigger("model",{nodes:o,parent:s}),"#"!==s?(this._node_changed(s),this.redraw()):this.redraw(!0),this._data.core.selected.length!==c&&this.trigger("changed",{action:"model",selected:this._data.core.selected}),!0},_parse_model_from_html:function(i,n,r){r=r?[].concat(r):[],n&&r.unshift(n);var s,a,o=this._model.data,d={id:!1,text:!1,icon:!0,parent:n,parents:r,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1},l,c,h;for(l in this._model.default_state)this._model.default_state.hasOwnProperty(l)&&(d.state[l]=this._model.default_state[l]);if(c=e.vakata.attributes(i,!0),e.each(c,function(i,n){return n=e.trim(n),n.length?(d.li_attr[i]=n,"id"===i&&(d.id=""+n),t):!0}),c=i.children("a").eq(0),c.length&&(c=e.vakata.attributes(c,!0),e.each(c,function(t,i){i=e.trim(i),i.length&&(d.a_attr[t]=i)})),c=i.children("a:eq(0)").length?i.children("a:eq(0)").clone():i.clone(),c.children("ins, i, ul").remove(),c=c.html(),c=e("
").html(c),d.text=c.html(),c=i.data(),d.data=c?e.extend(!0,{},c):null,d.state.opened=i.hasClass("jstree-open"),d.state.selected=i.children("a").hasClass("jstree-clicked"),d.state.disabled=i.children("a").hasClass("jstree-disabled"),d.data&&d.data.jstree)for(l in d.data.jstree)d.data.jstree.hasOwnProperty(l)&&(d.state[l]=d.data.jstree[l]);c=i.children("a").children(".jstree-themeicon"),c.length&&(d.icon=c.hasClass("jstree-themeicon-hidden")?!1:c.attr("rel")),d.state.icon&&(d.icon=d.state.icon),c=i.children("ul").children("li");do h="j"+this._id+"_"+ ++this._cnt;while(o[h]);return d.id=d.li_attr.id?""+d.li_attr.id:h,c.length?(c.each(e.proxy(function(t,i){s=this._parse_model_from_html(e(i),d.id,r),a=this._model.data[s],d.children.push(s),a.children_d.length&&(d.children_d=d.children_d.concat(a.children_d))},this)),d.children_d=d.children_d.concat(d.children)):i.hasClass("jstree-closed")&&(d.state.loaded=!1),d.li_attr["class"]&&(d.li_attr["class"]=d.li_attr["class"].replace("jstree-closed","").replace("jstree-open","")),d.a_attr["class"]&&(d.a_attr["class"]=d.a_attr["class"].replace("jstree-clicked","").replace("jstree-disabled","")),o[d.id]=d,d.state.selected&&this._data.core.selected.push(d.id),d.id},_parse_model_from_flat_json:function(e,i,n){n=n?n.concat():[],i&&n.unshift(i);var r=""+e.id,s=this._model.data,a=this._model.default_state,o,d,l,c,h={id:r,text:e.text||"",icon:e.icon!==t?e.icon:!0,parent:i,parents:n,children:e.children||[],children_d:e.children_d||[],data:e.data,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(o in a)a.hasOwnProperty(o)&&(h.state[o]=a[o]);if(e&&e.data&&e.data.jstree&&e.data.jstree.icon&&(h.icon=e.data.jstree.icon),e&&e.data&&(h.data=e.data,e.data.jstree))for(o in e.data.jstree)e.data.jstree.hasOwnProperty(o)&&(h.state[o]=e.data.jstree[o]);if(e&&"object"==typeof e.state)for(o in e.state)e.state.hasOwnProperty(o)&&(h.state[o]=e.state[o]);if(e&&"object"==typeof e.li_attr)for(o in e.li_attr)e.li_attr.hasOwnProperty(o)&&(h.li_attr[o]=e.li_attr[o]);if(h.li_attr.id||(h.li_attr.id=r),e&&"object"==typeof e.a_attr)for(o in e.a_attr)e.a_attr.hasOwnProperty(o)&&(h.a_attr[o]=e.a_attr[o]);for(e&&e.children&&e.children===!0&&(h.state.loaded=!1,h.children=[],h.children_d=[]),s[h.id]=h,o=0,d=h.children.length;d>o;o++)l=this._parse_model_from_flat_json(s[h.children[o]],h.id,n),c=s[l],h.children_d.push(l),c.children_d.length&&(h.children_d=h.children_d.concat(c.children_d));return delete e.data,delete e.children,s[h.id].original=e,h.state.selected&&this._data.core.selected.push(h.id),h.id},_parse_model_from_json:function(e,i,n){n=n?n.concat():[],i&&n.unshift(i);var r=!1,s,a,o,d,l=this._model.data,c=this._model.default_state,h;do r="j"+this._id+"_"+ ++this._cnt;while(l[r]);h={id:!1,text:"string"==typeof e?e:"",icon:"object"==typeof e&&e.icon!==t?e.icon:!0,parent:i,parents:n,children:[],children_d:[],data:null,state:{},li_attr:{id:!1},a_attr:{href:"#"},original:!1};for(s in c)c.hasOwnProperty(s)&&(h.state[s]=c[s]);if(e&&e.id&&(h.id=""+e.id),e&&e.text&&(h.text=e.text),e&&e.data&&e.data.jstree&&e.data.jstree.icon&&(h.icon=e.data.jstree.icon),e&&e.data&&(h.data=e.data,e.data.jstree))for(s in e.data.jstree)e.data.jstree.hasOwnProperty(s)&&(h.state[s]=e.data.jstree[s]);if(e&&"object"==typeof e.state)for(s in e.state)e.state.hasOwnProperty(s)&&(h.state[s]=e.state[s]);if(e&&"object"==typeof e.li_attr)for(s in e.li_attr)e.li_attr.hasOwnProperty(s)&&(h.li_attr[s]=e.li_attr[s]);if(h.li_attr.id&&!h.id&&(h.id=""+h.li_attr.id),h.id||(h.id=r),h.li_attr.id||(h.li_attr.id=h.id),e&&"object"==typeof e.a_attr)for(s in e.a_attr)e.a_attr.hasOwnProperty(s)&&(h.a_attr[s]=e.a_attr[s]);if(e&&e.children&&e.children.length){for(s=0,a=e.children.length;a>s;s++)o=this._parse_model_from_json(e.children[s],h.id,n),d=l[o],h.children.push(o),d.children_d.length&&(h.children_d=h.children_d.concat(d.children_d));h.children_d=h.children_d.concat(h.children)}return e&&e.children&&e.children===!0&&(h.state.loaded=!1,h.children=[],h.children_d=[]),delete e.data,delete e.children,h.original=e,l[h.id]=h,h.state.selected&&this._data.core.selected.push(h.id),h.id},_redraw:function(){var e=this._model.force_full_redraw?this._model.data["#"].children.concat([]):this._model.changed.concat([]),t=document.createElement("UL"),i,n,r;for(n=0,r=e.length;r>n;n++)i=this.redraw_node(e[n],!0,this._model.force_full_redraw),i&&this._model.force_full_redraw&&t.appendChild(i);this._model.force_full_redraw&&(t.className=this.get_container_ul()[0].className,this.element.empty().append(t)),this._model.force_full_redraw=!1,this._model.changed=[],this.trigger("redraw",{nodes:e})},redraw:function(e){e&&(this._model.force_full_redraw=!0),this._redraw()},redraw_node:function(t,i,n){var r=this.get_node(t),s=!1,a=!1,o=!1,d=!1,c=!1,h=!1,_="",u=document,g=this._model.data,f=!1,p=!1;if(!r)return!1;if("#"===r.id)return this.redraw(!0);if(i=i||0===r.children.length,t=document.querySelector?this.element[0].querySelector("#"+(-1!=="0123456789".indexOf(r.id[0])?"\\3"+r.id[0]+" "+r.id.substr(1).replace(e.jstree.idregex,"\\$&"):r.id.replace(e.jstree.idregex,"\\$&"))):document.getElementById(r.id))t=e(t),n||(s=t.parent().parent()[0],s===this.element[0]&&(s=null),a=t.index()),i||!r.children.length||t.children("ul").length||(i=!0),i||(o=t.children("UL")[0]),p=t.attr("aria-selected"),f=t.children(".jstree-anchor")[0]===document.activeElement,t.remove();else if(i=!0,!n){if(s="#"!==r.parent?e("#"+r.parent.replace(e.jstree.idregex,"\\$&"),this.element)[0]:null,!(null===s||s&&g[r.parent].state.opened))return!1;a=e.inArray(r.id,null===s?g["#"].children:g[r.parent].children)}t=l.cloneNode(!0),_="jstree-node ";for(d in r.li_attr)if(r.li_attr.hasOwnProperty(d)){if("id"===d)continue;"class"!==d?t.setAttribute(d,r.li_attr[d]):_+=r.li_attr[d]}p&&"false"!==p&&t.setAttribute("aria-selected",!0),r.state.loaded&&!r.children.length?_+=" jstree-leaf":(_+=r.state.opened&&r.state.loaded?" jstree-open":" jstree-closed",t.setAttribute("aria-expanded",r.state.opened&&r.state.loaded)),null!==r.parent&&g[r.parent].children[g[r.parent].children.length-1]===r.id&&(_+=" jstree-last"),t.id=r.id,t.className=_,_=(r.state.selected?" jstree-clicked":"")+(r.state.disabled?" jstree-disabled":"");for(c in r.a_attr)if(r.a_attr.hasOwnProperty(c)){if("href"===c&&"#"===r.a_attr[c])continue;"class"!==c?t.childNodes[1].setAttribute(c,r.a_attr[c]):_+=" "+r.a_attr[c]}if(_.length&&(t.childNodes[1].className="jstree-anchor "+_),(r.icon&&r.icon!==!0||r.icon===!1)&&(r.icon===!1?t.childNodes[1].childNodes[0].className+=" jstree-themeicon-hidden":-1===r.icon.indexOf("/")&&-1===r.icon.indexOf(".")?t.childNodes[1].childNodes[0].className+=" "+r.icon+" jstree-themeicon-custom":(t.childNodes[1].childNodes[0].style.backgroundImage="url("+r.icon+")",t.childNodes[1].childNodes[0].style.backgroundPosition="center center",t.childNodes[1].childNodes[0].style.backgroundSize="auto",t.childNodes[1].childNodes[0].className+=" jstree-themeicon-custom")),t.childNodes[1].innerHTML+=r.text,i&&r.children.length&&r.state.opened&&r.state.loaded){for(h=u.createElement("UL"),h.setAttribute("role","group"),h.className="jstree-children",d=0,c=r.children.length;c>d;d++)h.appendChild(this.redraw_node(r.children[d],i,!0));t.appendChild(h)}return o&&t.appendChild(o),n||(s||(s=this.element[0]),s.getElementsByTagName("UL").length?s=s.getElementsByTagName("UL")[0]:(d=u.createElement("UL"),d.setAttribute("role","group"),d.className="jstree-children",s.appendChild(d),s=d),s.childNodes.length>a?s.insertBefore(t,s.childNodes[a]):s.appendChild(t),f&&t.childNodes[1].focus()),r.state.opened&&!r.state.loaded&&(r.state.opened=!1,setTimeout(e.proxy(function(){this.open_node(r.id,!1,0)},this),0)),t},open_node:function(i,n,r){var s,a,o,d;if(e.isArray(i)){for(i=i.slice(),s=0,a=i.length;a>s;s++)this.open_node(i[s],n,r);return!0}if(i=this.get_node(i),!i||"#"===i.id)return!1;if(r=r===t?this.settings.core.animation:r,!this.is_closed(i))return n&&n.call(this,i,!1),!1;if(this.is_loaded(i))o=this.get_node(i,!0),d=this,o.length&&(i.children.length&&!this._firstChild(o.children("ul")[0])&&(i.state.opened=!0,this.redraw_node(i,!0),o=this.get_node(i,!0)),r?(this.trigger("before_open",{node:i}),o.children("ul").css("display","none").end().removeClass("jstree-closed").addClass("jstree-open").attr("aria-expanded",!0).children("ul").stop(!0,!0).slideDown(r,function(){this.style.display="",d.trigger("after_open",{node:i})})):(this.trigger("before_open",{node:i}),o[0].className=o[0].className.replace("jstree-closed","jstree-open"),o[0].setAttribute("aria-expanded",!0))),i.state.opened=!0,n&&n.call(this,i,!0),o.length||this.trigger("before_open",{node:i}),this.trigger("open_node",{node:i}),r&&o.length||this.trigger("after_open",{node:i});else{if(this.is_loading(i))return setTimeout(e.proxy(function(){this.open_node(i,n,r)},this),500);this.load_node(i,function(e,t){return t?this.open_node(e,n,r):n?n.call(this,e,!1):!1})}},_open_to:function(t){if(t=this.get_node(t),!t||"#"===t.id)return!1;var i,n,r=t.parents;for(i=0,n=r.length;n>i;i+=1)"#"!==i&&this.open_node(r[i],!1,0);return e("#"+t.id.replace(e.jstree.idregex,"\\$&"),this.element)},close_node:function(i,n){var r,s,a,o;if(e.isArray(i)){for(i=i.slice(),r=0,s=i.length;s>r;r++)this.close_node(i[r],n);return!0}return i=this.get_node(i),i&&"#"!==i.id?this.is_closed(i)?!1:(n=n===t?this.settings.core.animation:n,a=this,o=this.get_node(i,!0),o.length&&(n?o.children("ul").attr("style","display:block !important").end().removeClass("jstree-open").addClass("jstree-closed").attr("aria-expanded",!1).children("ul").stop(!0,!0).slideUp(n,function(){this.style.display="",o.children("ul").remove(),a.trigger("after_close",{node:i})}):(o[0].className=o[0].className.replace("jstree-open","jstree-closed"),o.attr("aria-expanded",!1).children("ul").remove())),i.state.opened=!1,this.trigger("close_node",{node:i}),n&&o.length||this.trigger("after_close",{node:i}),t):!1},toggle_node:function(i){var n,r;if(e.isArray(i)){for(i=i.slice(),n=0,r=i.length;r>n;n++)this.toggle_node(i[n]);return!0}return this.is_closed(i)?this.open_node(i):this.is_open(i)?this.close_node(i):t},open_all:function(e,t,i){if(e||(e="#"),e=this.get_node(e),!e)return!1;var n="#"===e.id?this.get_container_ul():this.get_node(e,!0),r,s,a;if(!n.length){for(r=0,s=e.children_d.length;s>r;r++)this.is_closed(this._model.data[e.children_d[r]])&&(this._model.data[e.children_d[r]].state.opened=!0);return this.trigger("open_all",{node:e})}i=i||n,a=this,n=this.is_closed(e)?n.find("li.jstree-closed").addBack():n.find("li.jstree-closed"),n.each(function(){a.open_node(this,function(e,n){n&&this.is_parent(e)&&this.open_all(e,t,i)},t||0)}),0===i.find("li.jstree-closed").length&&this.trigger("open_all",{node:this.get_node(i)})},close_all:function(t,i){if(t||(t="#"),t=this.get_node(t),!t)return!1;var n="#"===t.id?this.get_container_ul():this.get_node(t,!0),r=this,s,a;if(!n.length){for(s=0,a=t.children_d.length;a>s;s++)this._model.data[t.children_d[s]].state.opened=!1;return this.trigger("close_all",{node:t})}n=this.is_open(t)?n.find("li.jstree-open").addBack():n.find("li.jstree-open"),e(n.get().reverse()).each(function(){r.close_node(this,i||0)}),this.trigger("close_all",{node:t})},is_disabled:function(e){return e=this.get_node(e),e&&e.state&&e.state.disabled},enable_node:function(i){var n,r;if(e.isArray(i)){for(i=i.slice(),n=0,r=i.length;r>n;n++)this.enable_node(i[n]);return!0}return i=this.get_node(i),i&&"#"!==i.id?(i.state.disabled=!1,this.get_node(i,!0).children(".jstree-anchor").removeClass("jstree-disabled"),this.trigger("enable_node",{node:i}),t):!1},disable_node:function(i){var n,r;if(e.isArray(i)){for(i=i.slice(),n=0,r=i.length;r>n;n++)this.disable_node(i[n]);return!0}return i=this.get_node(i),i&&"#"!==i.id?(i.state.disabled=!0,this.get_node(i,!0).children(".jstree-anchor").addClass("jstree-disabled"),this.trigger("disable_node",{node:i}),t):!1},activate_node:function(e,i){if(this.is_disabled(e))return!1;if(this._data.core.last_clicked=this._data.core.last_clicked&&this._data.core.last_clicked.id!==t?this.get_node(this._data.core.last_clicked.id):null,this._data.core.last_clicked&&!this._data.core.last_clicked.state.selected&&(this._data.core.last_clicked=null),!this._data.core.last_clicked&&this._data.core.selected.length&&(this._data.core.last_clicked=this.get_node(this._data.core.selected[this._data.core.selected.length-1])),this.settings.core.multiple&&(i.metaKey||i.ctrlKey||i.shiftKey)&&(!i.shiftKey||this._data.core.last_clicked&&this.get_parent(e)&&this.get_parent(e)===this._data.core.last_clicked.parent))if(i.shiftKey){var n=this.get_node(e).id,r=this._data.core.last_clicked.id,s=this.get_node(this._data.core.last_clicked.parent).children,a=!1,o,d;for(o=0,d=s.length;d>o;o+=1)s[o]===n&&(a=!a),s[o]===r&&(a=!a),a||s[o]===n||s[o]===r?this.select_node(s[o],!1,!1,i):this.deselect_node(s[o],!1,!1,i)}else this.is_selected(e)?this.deselect_node(e,!1,!1,i):this.select_node(e,!1,!1,i);else!this.settings.core.multiple&&(i.metaKey||i.ctrlKey||i.shiftKey)&&this.is_selected(e)?this.deselect_node(e,!1,!1,i):(this.deselect_all(!0),this.select_node(e,!1,!1,i),this._data.core.last_clicked=this.get_node(e));this.trigger("activate_node",{node:this.get_node(e)})},hover_node:function(e){if(e=this.get_node(e,!0),!e||!e.length||e.children(".jstree-hovered").length)return!1;var t=this.element.find(".jstree-hovered"),i=this.element;t&&t.length&&this.dehover_node(t),e.children(".jstree-anchor").addClass("jstree-hovered"),this.trigger("hover_node",{node:this.get_node(e)}),setTimeout(function(){i.attr("aria-activedescendant",e[0].id),e.attr("aria-selected",!0)},0)},dehover_node:function(e){return e=this.get_node(e,!0),e&&e.length&&e.children(".jstree-hovered").length?(e.attr("aria-selected",!1).children(".jstree-anchor").removeClass("jstree-hovered"),this.trigger("dehover_node",{node:this.get_node(e)}),t):!1},select_node:function(i,n,r,s){var a,o,d,l;if(e.isArray(i)){for(i=i.slice(),o=0,d=i.length;d>o;o++)this.select_node(i[o],n,r,s);return!0}return i=this.get_node(i),i&&"#"!==i.id?(a=this.get_node(i,!0),i.state.selected||(i.state.selected=!0,this._data.core.selected.push(i.id),r||(a=this._open_to(i)),a&&a.length&&a.children(".jstree-anchor").addClass("jstree-clicked"),this.trigger("select_node",{node:i,selected:this._data.core.selected,event:s}),n||this.trigger("changed",{action:"select_node",node:i,selected:this._data.core.selected,event:s})),t):!1},deselect_node:function(i,n,r){var s,a,o;if(e.isArray(i)){for(i=i.slice(),s=0,a=i.length;a>s;s++)this.deselect_node(i[s],n,r);return!0}return i=this.get_node(i),i&&"#"!==i.id?(o=this.get_node(i,!0),i.state.selected&&(i.state.selected=!1,this._data.core.selected=e.vakata.array_remove_item(this._data.core.selected,i.id),o.length&&o.children(".jstree-anchor").removeClass("jstree-clicked"),this.trigger("deselect_node",{node:i,selected:this._data.core.selected,event:r}),n||this.trigger("changed",{action:"deselect_node",node:i,selected:this._data.core.selected,event:r})),t):!1},select_all:function(e){var t=this._data.core.selected.concat([]),i,n;for(this._data.core.selected=this._model.data["#"].children_d.concat(),i=0,n=this._data.core.selected.length;n>i;i++)this._model.data[this._data.core.selected[i]]&&(this._model.data[this._data.core.selected[i]].state.selected=!0);this.redraw(!0),this.trigger("select_all",{selected:this._data.core.selected}),e||this.trigger("changed",{action:"select_all",selected:this._data.core.selected,old_selection:t})},deselect_all:function(e){var t=this._data.core.selected.concat([]),i,n;for(i=0,n=this._data.core.selected.length;n>i;i++)this._model.data[this._data.core.selected[i]]&&(this._model.data[this._data.core.selected[i]].state.selected=!1);this._data.core.selected=[],this.element.find(".jstree-clicked").removeClass("jstree-clicked"),this.trigger("deselect_all",{selected:this._data.core.selected,node:t}),e||this.trigger("changed",{action:"deselect_all",selected:this._data.core.selected,old_selection:t})},is_selected:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.state.selected:!1},get_selected:function(t){return t?e.map(this._data.core.selected,e.proxy(function(e){return this.get_node(e) +},this)):this._data.core.selected},get_top_selected:function(t){var i=this.get_selected(!0),n={},r,s,a,o;for(r=0,s=i.length;s>r;r++)n[i[r].id]=i[r];for(r=0,s=i.length;s>r;r++)for(a=0,o=i[r].children_d.length;o>a;a++)n[i[r].children_d[a]]&&delete n[i[r].children_d[a]];i=[];for(r in n)n.hasOwnProperty(r)&&i.push(r);return t?e.map(i,e.proxy(function(e){return this.get_node(e)},this)):i},get_bottom_selected:function(t){var i=this.get_selected(!0),n=[],r,s;for(r=0,s=i.length;s>r;r++)i[r].children.length||n.push(i[r].id);return t?e.map(n,e.proxy(function(e){return this.get_node(e)},this)):n},get_state:function(){var e={core:{open:[],scroll:{left:this.element.scrollLeft(),top:this.element.scrollTop()},selected:[]}},t;for(t in this._model.data)this._model.data.hasOwnProperty(t)&&"#"!==t&&(this._model.data[t].state.opened&&e.core.open.push(t),this._model.data[t].state.selected&&e.core.selected.push(t));return e},set_state:function(i,n){if(i){if(i.core){var r,s,a,o;if(i.core.open)return e.isArray(i.core.open)?(r=!0,s=!1,a=this,e.each(i.core.open.concat([]),function(t,o){s=a.get_node(o),s&&(a.is_loaded(o)?(a.is_closed(o)&&a.open_node(o,!1,0),i&&i.core&&i.core.open&&e.vakata.array_remove_item(i.core.open,o)):(a.is_loading(o)||a.open_node(o,e.proxy(function(t,r){!r&&i&&i.core&&i.core.open&&e.vakata.array_remove_item(i.core.open,t.id),this.set_state(i,n)},a),0),r=!1))}),r&&(delete i.core.open,this.set_state(i,n)),!1):(delete i.core.open,this.set_state(i,n),!1);if(i.core.scroll)return i.core.scroll&&i.core.scroll.left!==t&&this.element.scrollLeft(i.core.scroll.left),i.core.scroll&&i.core.scroll.top!==t&&this.element.scrollTop(i.core.scroll.top),delete i.core.scroll,this.set_state(i,n),!1;if(i.core.selected)return o=this,this.deselect_all(),e.each(i.core.selected,function(e,t){o.select_node(t)}),delete i.core.selected,this.set_state(i,n),!1;if(e.isEmptyObject(i.core))return delete i.core,this.set_state(i,n),!1}return e.isEmptyObject(i)?(i=null,n&&n.call(this),this.trigger("set_state"),!1):!0}return!1},refresh:function(t){this._data.core.state=this.get_state(),this._cnt=0,this._model.data={"#":{id:"#",parent:null,parents:[],children:[],children_d:[],state:{loaded:!1}}};var i=this.get_container_ul()[0].className;t||this.element.html(""),this.load_node("#",function(t,n){n&&(this.get_container_ul()[0].className=i,this.set_state(e.extend(!0,{},this._data.core.state),function(){this.trigger("refresh")})),this._data.core.state=null})},refresh_node:function(t){if(t=this.get_node(t),!t||"#"===t.id)return!1;var i=[],n=this._data.core.selected.concat([]);t.state.opened===!0&&i.push(t.id),this.get_node(t,!0).find(".jstree-open").each(function(){i.push(this.id)}),this._load_nodes(i,e.proxy(function(e){this.open_node(e,!1,0),this.select_node(this._data.core.selected),this.trigger("refresh_node",{node:t,nodes:e})},this))},set_id:function(t,i){if(t=this.get_node(t),!t||"#"===t.id)return!1;var n,r,s=this._model.data;for(i=""+i,s[t.parent].children[e.inArray(t.id,s[t.parent].children)]=i,n=0,r=t.parents.length;r>n;n++)s[t.parents[n]].children_d[e.inArray(t.id,s[t.parents[n]].children_d)]=i;for(n=0,r=t.children.length;r>n;n++)s[t.children[n]].parent=i;for(n=0,r=t.children_d.length;r>n;n++)s[t.children_d[n]].parents[e.inArray(t.id,s[t.children_d[n]].parents)]=i;return n=e.inArray(t.id,this._data.core.selected),-1!==n&&(this._data.core.selected[n]=i),n=this.get_node(t.id,!0),n&&n.attr("id",i),delete s[t.id],t.id=i,s[i]=t,!0},get_text:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.text:!1},set_text:function(t,i){var n,r,s,a;if(e.isArray(t)){for(t=t.slice(),n=0,r=t.length;r>n;n++)this.set_text(t[n],i);return!0}return t=this.get_node(t),t&&"#"!==t.id?(t.text=i,s=this.get_node(t,!0),s.length&&(s=s.children(".jstree-anchor:eq(0)"),a=s.children("I").clone(),s.html(i).prepend(a),this.trigger("set_text",{obj:t,text:i})),!0):!1},get_json:function(e,t,i){if(e=this.get_node(e||"#"),!e)return!1;t&&t.flat&&!i&&(i=[]);var n={id:e.id,text:e.text,icon:this.get_icon(e),li_attr:e.li_attr,a_attr:e.a_attr,state:{},data:t&&t.no_data?!1:e.data},r,s;if(t&&t.flat?n.parent=e.parent:n.children=[],!t||!t.no_state)for(r in e.state)e.state.hasOwnProperty(r)&&(n.state[r]=e.state[r]);if(t&&t.no_id&&(delete n.id,n.li_attr&&n.li_attr.id&&delete n.li_attr.id),t&&t.flat&&"#"!==e.id&&i.push(n),!t||!t.no_children)for(r=0,s=e.children.length;s>r;r++)t&&t.flat?this.get_json(e.children[r],t,i):n.children.push(this.get_json(e.children[r],t));return t&&t.flat?i:"#"===e.id?n.children:n},create_node:function(i,n,r,s,a){if(null===i&&(i="#"),i=this.get_node(i),!i)return!1;if(r=r===t?"last":r,!(""+r).match(/^(before|after)$/)&&!a&&!this.is_loaded(i))return this.load_node(i,function(){this.create_node(i,n,r,s,!0)});n||(n={text:this.get_string("New node")}),n.text===t&&(n.text=this.get_string("New node"));var o,d,l,c;switch("#"===i.id&&("before"===r&&(r="first"),"after"===r&&(r="last")),r){case"before":o=this.get_node(i.parent),r=e.inArray(i.id,o.children),i=o;break;case"after":o=this.get_node(i.parent),r=e.inArray(i.id,o.children)+1,i=o;break;case"inside":case"first":r=0;break;case"last":r=i.children.length;break;default:r||(r=0)}if(r>i.children.length&&(r=i.children.length),n.id||(n.id=!0),!this.check("create_node",n,i,r))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(n.id===!0&&delete n.id,n=this._parse_model_from_json(n,i.id,i.parents.concat()),!n)return!1;for(o=this.get_node(n),d=[],d.push(n),d=d.concat(o.children_d),this.trigger("model",{nodes:d,parent:i.id}),i.children_d=i.children_d.concat(d),l=0,c=i.parents.length;c>l;l++)this._model.data[i.parents[l]].children_d=this._model.data[i.parents[l]].children_d.concat(d);for(n=o,o=[],l=0,c=i.children.length;c>l;l++)o[l>=r?l+1:l]=i.children[l];return o[r]=n.id,i.children=o,this.redraw_node(i,!0),s&&s.call(this,this.get_node(n)),this.trigger("create_node",{node:this.get_node(n),parent:i.id,position:r}),n.id},rename_node:function(t,i){var n,r,s;if(e.isArray(t)){for(t=t.slice(),n=0,r=t.length;r>n;n++)this.rename_node(t[n],i);return!0}return t=this.get_node(t),t&&"#"!==t.id?(s=t.text,this.check("rename_node",t,this.get_parent(t),i)?(this.set_text(t,i),this.trigger("rename_node",{node:t,text:i,old:s}),!0):(this.settings.core.error.call(this,this._data.core.last_error),!1)):!1},delete_node:function(t){var i,n,r,s,a,o,d,l,c,h;if(e.isArray(t)){for(t=t.slice(),i=0,n=t.length;n>i;i++)this.delete_node(t[i]);return!0}if(t=this.get_node(t),!t||"#"===t.id)return!1;if(r=this.get_node(t.parent),s=e.inArray(t.id,r.children),h=!1,!this.check("delete_node",t,r,s))return this.settings.core.error.call(this,this._data.core.last_error),!1;for(-1!==s&&(r.children=e.vakata.array_remove(r.children,s)),a=t.children_d.concat([]),a.push(t.id),l=0,c=a.length;c>l;l++){for(o=0,d=t.parents.length;d>o;o++)s=e.inArray(a[l],this._model.data[t.parents[o]].children_d),-1!==s&&(this._model.data[t.parents[o]].children_d=e.vakata.array_remove(this._model.data[t.parents[o]].children_d,s));this._model.data[a[l]].state.selected&&(h=!0,s=e.inArray(a[l],this._data.core.selected),-1!==s&&(this._data.core.selected=e.vakata.array_remove(this._data.core.selected,s)))}for(this.trigger("delete_node",{node:t,parent:r.id}),h&&this.trigger("changed",{action:"delete_node",node:t,selected:this._data.core.selected,parent:r.id}),l=0,c=a.length;c>l;l++)delete this._model.data[a[l]];return this.redraw_node(r,!0),!0},check:function(t,i,n,r,s){i=i&&i.id?i:this.get_node(i),n=n&&n.id?n:this.get_node(n);var a=t.match(/^move_node|copy_node|create_node$/i)?n:i,o=this.settings.core.check_callback;return"move_node"!==t&&"copy_node"!==t||s&&s.is_multi||i.id!==n.id&&e.inArray(i.id,n.children)!==r&&-1===e.inArray(n.id,i.children_d)?(a&&a.data&&(a=a.data),a&&a.functions&&(a.functions[t]===!1||a.functions[t]===!0)?(a.functions[t]===!1&&(this._data.core.last_error={error:"check",plugin:"core",id:"core_02",reason:"Node data prevents function: "+t,data:JSON.stringify({chk:t,pos:r,obj:i&&i.id?i.id:!1,par:n&&n.id?n.id:!1})}),a.functions[t]):o===!1||e.isFunction(o)&&o.call(this,t,i,n,r,s)===!1||o&&o[t]===!1?(this._data.core.last_error={error:"check",plugin:"core",id:"core_03",reason:"User config for core.check_callback prevents function: "+t,data:JSON.stringify({chk:t,pos:r,obj:i&&i.id?i.id:!1,par:n&&n.id?n.id:!1})},!1):!0):(this._data.core.last_error={error:"check",plugin:"core",id:"core_01",reason:"Moving parent inside child",data:JSON.stringify({chk:t,pos:r,obj:i&&i.id?i.id:!1,par:n&&n.id?n.id:!1})},!1)},last_error:function(){return this._data.core.last_error},move_node:function(i,n,r,s,a){var o,d,l,c,h,_,u,g,f,p,m,v,y;if(e.isArray(i)){for(i=i.reverse().slice(),o=0,d=i.length;d>o;o++)this.move_node(i[o],n,r,s,a);return!0}if(i=i&&i.id?i:this.get_node(i),n=this.get_node(n),r=r===t?0:r,!n||!i||"#"===i.id)return!1;if(!(""+r).match(/^(before|after)$/)&&!a&&!this.is_loaded(n))return this.load_node(n,function(){this.move_node(i,n,r,s,!0)});if(l=""+(i.parent||"#"),c=(""+r).match(/^(before|after)$/)&&"#"!==n.id?this.get_node(n.parent):n,h=i.instance?i.instance:this._model.data[i.id]?this:e.jstree.reference(i.id),_=!h||!h._id||this._id!==h._id)return this.copy_node(i,n,r,s,a)?(h&&h.delete_node(i),!0):!1;switch("#"===c.id&&("before"===r&&(r="first"),"after"===r&&(r="last")),r){case"before":r=e.inArray(n.id,c.children);break;case"after":r=e.inArray(n.id,c.children)+1;break;case"inside":case"first":r=0;break;case"last":r=c.children.length;break;default:r||(r=0)}if(r>c.children.length&&(r=c.children.length),!this.check("move_node",i,c,r,{core:!0,is_multi:h&&h._id&&h._id!==this._id,is_foreign:!h||!h._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(i.parent===c.id){for(u=c.children.concat(),g=e.inArray(i.id,u),-1!==g&&(u=e.vakata.array_remove(u,g),r>g&&r--),g=[],f=0,p=u.length;p>f;f++)g[f>=r?f+1:f]=u[f];g[r]=i.id,c.children=g,this._node_changed(c.id),this.redraw("#"===c.id)}else{for(g=i.children_d.concat(),g.push(i.id),f=0,p=i.parents.length;p>f;f++){for(u=[],y=h._model.data[i.parents[f]].children_d,m=0,v=y.length;v>m;m++)-1===e.inArray(y[m],g)&&u.push(y[m]);h._model.data[i.parents[f]].children_d=u}for(h._model.data[l].children=e.vakata.array_remove_item(h._model.data[l].children,i.id),f=0,p=c.parents.length;p>f;f++)this._model.data[c.parents[f]].children_d=this._model.data[c.parents[f]].children_d.concat(g);for(u=[],f=0,p=c.children.length;p>f;f++)u[f>=r?f+1:f]=c.children[f];for(u[r]=i.id,c.children=u,c.children_d.push(i.id),c.children_d=c.children_d.concat(i.children_d),i.parent=c.id,g=c.parents.concat(),g.unshift(c.id),y=i.parents.length,i.parents=g,g=g.concat(),f=0,p=i.children_d.length;p>f;f++)this._model.data[i.children_d[f]].parents=this._model.data[i.children_d[f]].parents.slice(0,-1*y),Array.prototype.push.apply(this._model.data[i.children_d[f]].parents,g);this._node_changed(l),this._node_changed(c.id),this.redraw("#"===l||"#"===c.id)}return s&&s.call(this,i,c,r),this.trigger("move_node",{node:i,parent:c.id,position:r,old_parent:l,is_multi:h&&h._id&&h._id!==this._id,is_foreign:!h||!h._id,old_instance:h,new_instance:this}),!0},copy_node:function(i,n,r,s,a){var o,d,l,c,h,_,u,g,f,p,m;if(e.isArray(i)){for(i=i.reverse().slice(),o=0,d=i.length;d>o;o++)this.copy_node(i[o],n,r,s,a);return!0}if(i=i&&i.id?i:this.get_node(i),n=this.get_node(n),r=r===t?0:r,!n||!i||"#"===i.id)return!1;if(!(""+r).match(/^(before|after)$/)&&!a&&!this.is_loaded(n))return this.load_node(n,function(){this.copy_node(i,n,r,s,!0)});switch(g=""+(i.parent||"#"),f=(""+r).match(/^(before|after)$/)&&"#"!==n.id?this.get_node(n.parent):n,p=i.instance?i.instance:this._model.data[i.id]?this:e.jstree.reference(i.id),m=!p||!p._id||this._id!==p._id,"#"===f.id&&("before"===r&&(r="first"),"after"===r&&(r="last")),r){case"before":r=e.inArray(n.id,f.children);break;case"after":r=e.inArray(n.id,f.children)+1;break;case"inside":case"first":r=0;break;case"last":r=f.children.length;break;default:r||(r=0)}if(r>f.children.length&&(r=f.children.length),!this.check("copy_node",i,f,r,{core:!0,is_multi:p&&p._id&&p._id!==this._id,is_foreign:!p||!p._id}))return this.settings.core.error.call(this,this._data.core.last_error),!1;if(u=p?p.get_json(i,{no_id:!0,no_data:!0,no_state:!0}):i,!u)return!1;if(u.id===!0&&delete u.id,u=this._parse_model_from_json(u,f.id,f.parents.concat()),!u)return!1;for(c=this.get_node(u),i&&i.state&&i.state.loaded===!1&&(c.state.loaded=!1),l=[],l.push(u),l=l.concat(c.children_d),this.trigger("model",{nodes:l,parent:f.id}),h=0,_=f.parents.length;_>h;h++)this._model.data[f.parents[h]].children_d=this._model.data[f.parents[h]].children_d.concat(l);for(l=[],h=0,_=f.children.length;_>h;h++)l[h>=r?h+1:h]=f.children[h];return l[r]=c.id,f.children=l,f.children_d.push(c.id),f.children_d=f.children_d.concat(c.children_d),this._node_changed(f.id),this.redraw("#"===f.id),s&&s.call(this,c,f,r),this.trigger("copy_node",{node:c,original:i,parent:f.id,position:r,old_parent:g,is_multi:p&&p._id&&p._id!==this._id,is_foreign:!p||!p._id,old_instance:p,new_instance:this}),c.id},cut:function(i){if(i||(i=this._data.core.selected.concat()),e.isArray(i)||(i=[i]),!i.length)return!1;var a=[],o,d,l;for(d=0,l=i.length;l>d;d++)o=this.get_node(i[d]),o&&o.id&&"#"!==o.id&&a.push(o);return a.length?(n=a,s=this,r="move_node",this.trigger("cut",{node:i}),t):!1},copy:function(i){if(i||(i=this._data.core.selected.concat()),e.isArray(i)||(i=[i]),!i.length)return!1;var a=[],o,d,l;for(d=0,l=i.length;l>d;d++)o=this.get_node(i[d]),o&&o.id&&"#"!==o.id&&a.push(o);return a.length?(n=a,s=this,r="copy_node",this.trigger("copy",{node:i}),t):!1},get_buffer:function(){return{mode:r,node:n,inst:s}},can_paste:function(){return r!==!1&&n!==!1},paste:function(e,i){return e=this.get_node(e),e&&r&&r.match(/^(copy_node|move_node)$/)&&n?(this[r](n,e,i)&&this.trigger("paste",{parent:e.id,node:n,mode:r}),n=!1,r=!1,s=!1,t):!1},edit:function(i,n){if(i=this._open_to(i),!i||!i.length)return!1;var r=this._data.core.rtl,s=this.element.width(),a=i.children(".jstree-anchor"),o=e(""),d="string"==typeof n?n:this.get_text(i),l=e("
",{css:{position:"absolute",top:"-200px",left:r?"0px":"-1000px",visibility:"hidden"}}).appendTo("body"),c=e("",{value:d,"class":"jstree-rename-input",css:{padding:"0",border:"1px solid silver","box-sizing":"border-box",display:"inline-block",height:this._data.core.li_height+"px",lineHeight:this._data.core.li_height+"px",width:"150px"},blur:e.proxy(function(){var e=o.children(".jstree-rename-input"),t=e.val();""===t&&(t=d),l.remove(),o.replaceWith(a),o.remove(),this.set_text(i,d),this.rename_node(i,t)===!1&&this.set_text(i,d)},this),keydown:function(e){var t=e.which;27===t&&(this.value=d),(27===t||13===t||37===t||38===t||39===t||40===t||32===t)&&e.stopImmediatePropagation(),(27===t||13===t)&&(e.preventDefault(),this.blur())},click:function(e){e.stopImmediatePropagation()},mousedown:function(e){e.stopImmediatePropagation()},keyup:function(e){c.width(Math.min(l.text("pW"+this.value).width(),s))},keypress:function(e){return 13===e.which?!1:t}}),h={fontFamily:a.css("fontFamily")||"",fontSize:a.css("fontSize")||"",fontWeight:a.css("fontWeight")||"",fontStyle:a.css("fontStyle")||"",fontStretch:a.css("fontStretch")||"",fontVariant:a.css("fontVariant")||"",letterSpacing:a.css("letterSpacing")||"",wordSpacing:a.css("wordSpacing")||""};this.set_text(i,""),o.attr("class",a.attr("class")).append(a.contents().clone()).append(c),a.replaceWith(o),l.css(h),c.css(h).width(Math.min(l.text("pW"+c[0].value).width(),s))[0].select()},set_theme:function(t,i){if(!t)return!1;if(i===!0){var n=this.settings.core.themes.dir;n||(n=e.jstree.path+"/themes"),i=n+"/"+t+"/style.css"}i&&-1===e.inArray(i,a)&&(e("head").append(''),a.push(i)),this._data.core.themes.name&&this.element.removeClass("jstree-"+this._data.core.themes.name),this._data.core.themes.name=t,this.element.addClass("jstree-"+t),this.element[this.settings.core.themes.responsive?"addClass":"removeClass"]("jstree-"+t+"-responsive"),this.trigger("set_theme",{theme:t})},get_theme:function(){return this._data.core.themes.name},set_theme_variant:function(e){this._data.core.themes.variant&&this.element.removeClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant),this._data.core.themes.variant=e,e&&this.element.addClass("jstree-"+this._data.core.themes.name+"-"+this._data.core.themes.variant)},get_theme_variant:function(){return this._data.core.themes.variant},show_stripes:function(){this._data.core.themes.stripes=!0,this.get_container_ul().addClass("jstree-striped")},hide_stripes:function(){this._data.core.themes.stripes=!1,this.get_container_ul().removeClass("jstree-striped")},toggle_stripes:function(){this._data.core.themes.stripes?this.hide_stripes():this.show_stripes()},show_dots:function(){this._data.core.themes.dots=!0,this.get_container_ul().removeClass("jstree-no-dots")},hide_dots:function(){this._data.core.themes.dots=!1,this.get_container_ul().addClass("jstree-no-dots")},toggle_dots:function(){this._data.core.themes.dots?this.hide_dots():this.show_dots()},show_icons:function(){this._data.core.themes.icons=!0,this.get_container_ul().removeClass("jstree-no-icons")},hide_icons:function(){this._data.core.themes.icons=!1,this.get_container_ul().addClass("jstree-no-icons")},toggle_icons:function(){this._data.core.themes.icons?this.hide_icons():this.show_icons()},set_icon:function(t,i){var n,r,s,a;if(e.isArray(t)){for(t=t.slice(),n=0,r=t.length;r>n;n++)this.set_icon(t[n],i);return!0}return t=this.get_node(t),t&&"#"!==t.id?(a=t.icon,t.icon=i,s=this.get_node(t,!0).children(".jstree-anchor").children(".jstree-themeicon"),i===!1?this.hide_icon(t):i===!0?s.removeClass("jstree-themeicon-custom "+a).css("background","").removeAttr("rel"):-1===i.indexOf("/")&&-1===i.indexOf(".")?(s.removeClass(a).css("background",""),s.addClass(i+" jstree-themeicon-custom").attr("rel",i)):(s.removeClass(a).css("background",""),s.addClass("jstree-themeicon-custom").css("background","url('"+i+"') center center no-repeat").attr("rel",i)),!0):!1},get_icon:function(e){return e=this.get_node(e),e&&"#"!==e.id?e.icon:!1},hide_icon:function(t){var i,n;if(e.isArray(t)){for(t=t.slice(),i=0,n=t.length;n>i;i++)this.hide_icon(t[i]);return!0}return t=this.get_node(t),t&&"#"!==t?(t.icon=!1,this.get_node(t,!0).children("a").children(".jstree-themeicon").addClass("jstree-themeicon-hidden"),!0):!1},show_icon:function(t){var i,n,r;if(e.isArray(t)){for(t=t.slice(),i=0,n=t.length;n>i;i++)this.show_icon(t[i]);return!0}return t=this.get_node(t),t&&"#"!==t?(r=this.get_node(t,!0),t.icon=r.length?r.children("a").children(".jstree-themeicon").attr("rel"):!0,t.icon||(t.icon=!0),r.children("a").children(".jstree-themeicon").removeClass("jstree-themeicon-hidden"),!0):!1}},e.vakata={},e.vakata.attributes=function(t,i){t=e(t)[0];var n=i?{}:[];return t&&t.attributes&&e.each(t.attributes,function(t,r){-1===e.inArray(r.nodeName.toLowerCase(),["style","contenteditable","hasfocus","tabindex"])&&null!==r.nodeValue&&""!==e.trim(r.nodeValue)&&(i?n[r.nodeName]=r.nodeValue:n.push(r.nodeName))}),n},e.vakata.array_unique=function(e){var t=[],i,n,r;for(i=0,r=e.length;r>i;i++){for(n=0;i>=n;n++)if(e[i]===e[n])break;n===i&&t.push(e[i])}return t},e.vakata.array_remove=function(e,t,i){var n=e.slice((i||t)+1||e.length);return e.length=0>t?e.length+t:t,e.push.apply(e,n),e},e.vakata.array_remove_item=function(t,i){var n=e.inArray(i,t);return-1!==n?e.vakata.array_remove(t,n):t},function(){var t={},i=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},n=i(window.navigator.userAgent);n.browser&&(t[n.browser]=!0,t.version=n.version),t.chrome?t.webkit=!0:t.webkit&&(t.safari=!0),e.vakata.browser=t}(),e.vakata.browser.msie&&8>e.vakata.browser.version&&(e.jstree.defaults.core.animation=0);var _=document.createElement("I");_.className="jstree-icon jstree-checkbox",e.jstree.defaults.checkbox={visible:!0,three_state:!0,whole_node:!0,keep_selected_style:!0},e.jstree.plugins.checkbox=function(t,i){this.bind=function(){i.bind.call(this),this._data.checkbox.uto=!1,this.element.on("init.jstree",e.proxy(function(){this._data.checkbox.visible=this.settings.checkbox.visible,this.settings.checkbox.keep_selected_style||this.element.addClass("jstree-checkbox-no-clicked")},this)).on("loading.jstree",e.proxy(function(){this[this._data.checkbox.visible?"show_checkboxes":"hide_checkboxes"]()},this)),this.settings.checkbox.three_state&&this.element.on("changed.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree",e.proxy(function(){this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(e.proxy(this._undetermined,this),50)},this)).on("model.jstree",e.proxy(function(t,i){var n=this._model.data,r=n[i.parent],s=i.nodes,a=[],o,d,l,c,h,_;if(r.state.selected){for(d=0,l=s.length;l>d;d++)n[s[d]].state.selected=!0;this._data.core.selected=this._data.core.selected.concat(s)}else for(d=0,l=s.length;l>d;d++)if(n[s[d]].state.selected){for(c=0,h=n[s[d]].children_d.length;h>c;c++)n[n[s[d]].children_d[c]].state.selected=!0;this._data.core.selected=this._data.core.selected.concat(n[s[d]].children_d)}for(d=0,l=r.children_d.length;l>d;d++)n[r.children_d[d]].children.length||a.push(n[r.children_d[d]].parent);for(a=e.vakata.array_unique(a),c=0,h=a.length;h>c;c++){r=n[a[c]];while(r&&"#"!==r.id){for(o=0,d=0,l=r.children.length;l>d;d++)o+=n[r.children[d]].state.selected;if(o!==l)break;r.state.selected=!0,this._data.core.selected.push(r.id),_=this.get_node(r,!0),_&&_.length&&_.children(".jstree-anchor").addClass("jstree-clicked"),r=this.get_node(r.parent)}}this._data.core.selected=e.vakata.array_unique(this._data.core.selected)},this)).on("select_node.jstree",e.proxy(function(t,i){var n=i.node,r=this._model.data,s=this.get_node(n.parent),a=this.get_node(n,!0),o,d,l,c;for(this._data.core.selected=e.vakata.array_unique(this._data.core.selected.concat(n.children_d)),o=0,d=n.children_d.length;d>o;o++)c=r[n.children_d[o]],c.state.selected=!0,c&&c.original&&c.original.state&&c.original.state.undetermined&&(c.original.state.undetermined=!1);while(s&&"#"!==s.id){for(l=0,o=0,d=s.children.length;d>o;o++)l+=r[s.children[o]].state.selected;if(l!==d)break;s.state.selected=!0,this._data.core.selected.push(s.id),c=this.get_node(s,!0),c&&c.length&&c.children(".jstree-anchor").addClass("jstree-clicked"),s=this.get_node(s.parent)}a.length&&a.find(".jstree-anchor").addClass("jstree-clicked")},this)).on("deselect_all.jstree",e.proxy(function(e,t){var i=this.get_node("#"),n=this._model.data,r,s,a;for(r=0,s=i.children_d.length;s>r;r++)a=n[i.children_d[r]],a&&a.original&&a.original.state&&a.original.state.undetermined&&(a.original.state.undetermined=!1)},this)).on("deselect_node.jstree",e.proxy(function(t,i){var n=i.node,r=this.get_node(n,!0),s,a,o;for(n&&n.original&&n.original.state&&n.original.state.undetermined&&(n.original.state.undetermined=!1),s=0,a=n.children_d.length;a>s;s++)o=this._model.data[n.children_d[s]],o.state.selected=!1,o&&o.original&&o.original.state&&o.original.state.undetermined&&(o.original.state.undetermined=!1);for(s=0,a=n.parents.length;a>s;s++)o=this._model.data[n.parents[s]],o.state.selected=!1,o&&o.original&&o.original.state&&o.original.state.undetermined&&(o.original.state.undetermined=!1),o=this.get_node(n.parents[s],!0),o&&o.length&&o.children(".jstree-anchor").removeClass("jstree-clicked");for(o=[],s=0,a=this._data.core.selected.length;a>s;s++)-1===e.inArray(this._data.core.selected[s],n.children_d)&&-1===e.inArray(this._data.core.selected[s],n.parents)&&o.push(this._data.core.selected[s]);this._data.core.selected=e.vakata.array_unique(o),r.length&&r.find(".jstree-anchor").removeClass("jstree-clicked")},this)).on("delete_node.jstree",e.proxy(function(e,t){var i=this.get_node(t.parent),n=this._model.data,r,s,a,o;while(i&&"#"!==i.id){for(a=0,r=0,s=i.children.length;s>r;r++)a+=n[i.children[r]].state.selected;if(a!==s)break;i.state.selected=!0,this._data.core.selected.push(i.id),o=this.get_node(i,!0),o&&o.length&&o.children(".jstree-anchor").addClass("jstree-clicked"),i=this.get_node(i.parent)}},this)).on("move_node.jstree",e.proxy(function(t,i){var n=i.is_multi,r=i.old_parent,s=this.get_node(i.parent),a=this._model.data,o,d,l,c,h;if(!n){o=this.get_node(r);while(o&&"#"!==o.id){for(d=0,l=0,c=o.children.length;c>l;l++)d+=a[o.children[l]].state.selected;if(d!==c)break;o.state.selected=!0,this._data.core.selected.push(o.id),h=this.get_node(o,!0),h&&h.length&&h.children(".jstree-anchor").addClass("jstree-clicked"),o=this.get_node(o.parent)}}o=s;while(o&&"#"!==o.id){for(d=0,l=0,c=o.children.length;c>l;l++)d+=a[o.children[l]].state.selected;if(d===c)o.state.selected||(o.state.selected=!0,this._data.core.selected.push(o.id),h=this.get_node(o,!0),h&&h.length&&h.children(".jstree-anchor").addClass("jstree-clicked"));else{if(!o.state.selected)break;o.state.selected=!1,this._data.core.selected=e.vakata.array_remove_item(this._data.core.selected,o.id),h=this.get_node(o,!0),h&&h.length&&h.children(".jstree-anchor").removeClass("jstree-clicked")}o=this.get_node(o.parent)}},this))},this._undetermined=function(){var t,i,n=this._model.data,r=this._data.core.selected,s=[],a=this;for(t=0,i=r.length;i>t;t++)n[r[t]]&&n[r[t]].parents&&(s=s.concat(n[r[t]].parents));for(this.element.find(".jstree-closed").not(":has(ul)").each(function(){var e=a.get_node(this),r;if(e.state.loaded)for(t=0,i=e.children_d.length;i>t;t++)r=n[e.children_d[t]],!r.state.loaded&&r.original&&r.original.state&&r.original.state.undetermined&&r.original.state.undetermined===!0&&(s.push(r.id),s=s.concat(r.parents));else e.original&&e.original.state&&e.original.state.undetermined&&e.original.state.undetermined===!0&&(s.push(e.id),s=s.concat(e.parents))}),s=e.vakata.array_unique(s),s=e.vakata.array_remove_item(s,"#"),this.element.find(".jstree-undetermined").removeClass("jstree-undetermined"),t=0,i=s.length;i>t;t++)n[s[t]].state.selected||(r=this.get_node(s[t],!0),r&&r.length&&r.children("a").children(".jstree-checkbox").addClass("jstree-undetermined"))},this.redraw_node=function(t,n,r){if(t=i.redraw_node.call(this,t,n,r)){var s=t.getElementsByTagName("A")[0];s.insertBefore(_.cloneNode(!1),s.childNodes[0])}return!r&&this.settings.checkbox.three_state&&(this._data.checkbox.uto&&clearTimeout(this._data.checkbox.uto),this._data.checkbox.uto=setTimeout(e.proxy(this._undetermined,this),50)),t},this.activate_node=function(t,n){return(this.settings.checkbox.whole_node||e(n.target).hasClass("jstree-checkbox"))&&(n.ctrlKey=!0),i.activate_node.call(this,t,n)},this.show_checkboxes=function(){this._data.core.themes.checkboxes=!0,this.element.children("ul").removeClass("jstree-no-checkboxes")},this.hide_checkboxes=function(){this._data.core.themes.checkboxes=!1,this.element.children("ul").addClass("jstree-no-checkboxes")},this.toggle_checkboxes=function(){this._data.core.themes.checkboxes?this.hide_checkboxes():this.show_checkboxes()}},e.jstree.defaults.contextmenu={select_node:!0,show_at_node:!0,items:function(t,i){return{create:{separator_before:!1,separator_after:!0,_disabled:!1,label:"Create",action:function(t){var i=e.jstree.reference(t.reference),n=i.get_node(t.reference);i.create_node(n,{},"last",function(e){setTimeout(function(){i.edit(e)},0)})}},rename:{separator_before:!1,separator_after:!1,_disabled:!1,label:"Rename",action:function(t){var i=e.jstree.reference(t.reference),n=i.get_node(t.reference);i.edit(n)}},remove:{separator_before:!1,icon:!1,separator_after:!1,_disabled:!1,label:"Delete",action:function(t){var i=e.jstree.reference(t.reference),n=i.get_node(t.reference);i.is_selected(n)?i.delete_node(i.get_selected()):i.delete_node(n)}},ccp:{separator_before:!0,icon:!1,separator_after:!1,label:"Edit",action:!1,submenu:{cut:{separator_before:!1,separator_after:!1,label:"Cut",action:function(t){var i=e.jstree.reference(t.reference),n=i.get_node(t.reference);i.is_selected(n)?i.cut(i.get_selected()):i.cut(n)}},copy:{separator_before:!1,icon:!1,separator_after:!1,label:"Copy",action:function(t){var i=e.jstree.reference(t.reference),n=i.get_node(t.reference);i.is_selected(n)?i.copy(i.get_selected()):i.copy(n)}},paste:{separator_before:!1,icon:!1,_disabled:function(t){return!e.jstree.reference(t.reference).can_paste()},separator_after:!1,label:"Paste",action:function(t){var i=e.jstree.reference(t.reference),n=i.get_node(t.reference);i.paste(n)}}}}}}},e.jstree.plugins.contextmenu=function(i,n){this.bind=function(){n.bind.call(this);var t=0;this.element.on("contextmenu.jstree",".jstree-anchor",e.proxy(function(e){e.preventDefault(),t=e.ctrlKey?e.timeStamp:0,this.is_loading(e.currentTarget)||this.show_contextmenu(e.currentTarget,e.pageX,e.pageY,e)},this)).on("click.jstree",".jstree-anchor",e.proxy(function(i){this._data.contextmenu.visible&&(!t||i.timeStamp-t>250)&&e.vakata.context.hide()},this)),e(document).on("context_hide.vakata",e.proxy(function(){this._data.contextmenu.visible=!1},this))},this.teardown=function(){this._data.contextmenu.visible&&e.vakata.context.hide(),n.teardown.call(this)},this.show_contextmenu=function(i,n,r,s){if(i=this.get_node(i),!i||"#"===i.id)return!1;var a=this.settings.contextmenu,o=this.get_node(i,!0),d=o.children(".jstree-anchor"),l=!1,c=!1;(a.show_at_node||n===t||r===t)&&(l=d.offset(),n=l.left,r=l.top+this._data.core.li_height),this.settings.contextmenu.select_node&&!this.is_selected(i)&&(this.deselect_all(),this.select_node(i,!1,!1,s)),c=a.items,e.isFunction(c)&&(c=c.call(this,i,e.proxy(function(e){this._show_contextmenu(i,n,r,e)},this))),e.isPlainObject(c)&&this._show_contextmenu(i,n,r,c)},this._show_contextmenu=function(t,i,n,r){var s=this.get_node(t,!0),a=s.children(".jstree-anchor");e(document).one("context_show.vakata",e.proxy(function(t,i){var n="jstree-contextmenu jstree-"+this.get_theme()+"-contextmenu";e(i.element).addClass(n)},this)),this._data.contextmenu.visible=!0,e.vakata.context.show(a,{x:i,y:n},r),this.trigger("show_contextmenu",{node:t,x:i,y:n})}},function(e){var i=!1,n={element:!1,reference:!1,position_x:0,position_y:0,items:[],html:"",is_visible:!1};e.vakata.context={settings:{hide_onmouseleave:0,icons:!0},_trigger:function(t){e(document).triggerHandler("context_"+t+".vakata",{reference:n.reference,element:n.element,position:{x:n.position_x,y:n.position_y}})},_execute:function(t){return t=n.items[t],t&&(!t._disabled||e.isFunction(t._disabled)&&!t._disabled({item:t,reference:n.reference,element:n.element}))&&t.action?t.action.call(null,{item:t,reference:n.reference,element:n.element,position:{x:n.position_x,y:n.position_y}}):!1},_parse:function(i,r){if(!i)return!1;r||(n.html="",n.items=[]);var s="",a=!1,o;return r&&(s+=""),r||(n.html=s,e.vakata.context._trigger("parse")),s.length>10?s:!1},_show_submenu:function(t){if(t=e(t),t.length&&t.children("ul").length){var n=t.children("ul"),r=t.offset().left+t.outerWidth(),s=t.offset().top,a=n.width(),o=n.height(),d=e(window).width()+e(window).scrollLeft(),l=e(window).height()+e(window).scrollTop();i?t[0>r-(a+10+t.outerWidth())?"addClass":"removeClass"]("vakata-context-left"):t[r+a+10>d?"addClass":"removeClass"]("vakata-context-right"),s+o+10>l&&n.css("bottom","-1px"),n.show()}},show:function(t,r,s){var a,o,d,l,c,h,_,u,g=!0;switch(n.element&&n.element.length&&n.element.width(""),g){case!r&&!t:return!1;case!!r&&!!t:n.reference=t,n.position_x=r.x,n.position_y=r.y;break;case!r&&!!t:n.reference=t,a=t.offset(),n.position_x=a.left+t.outerHeight(),n.position_y=a.top;break;case!!r&&!t:n.position_x=r.x,n.position_y=r.y}t&&!s&&e(t).data("vakata_contextmenu")&&(s=e(t).data("vakata_contextmenu")),e.vakata.context._parse(s)&&n.element.html(n.html),n.items.length&&(o=n.element,d=n.position_x,l=n.position_y,c=o.width(),h=o.height(),_=e(window).width()+e(window).scrollLeft(),u=e(window).height()+e(window).scrollTop(),i&&(d-=o.outerWidth(),e(window).scrollLeft()+20>d&&(d=e(window).scrollLeft()+20)),d+c+20>_&&(d=_-(c+20)),l+h+20>u&&(l=u-(h+20)),n.element.css({left:d,top:l}).show().find("a:eq(0)").focus().parent().addClass("vakata-context-hover"),n.is_visible=!0,e.vakata.context._trigger("show"))},hide:function(){n.is_visible&&(n.element.hide().find("ul").hide().end().find(":focus").blur(),n.is_visible=!1,e.vakata.context._trigger("hide"))}},e(function(){i="rtl"===e("body").css("direction");var t=!1;n.element=e("
    "),n.element.on("mouseenter","li",function(i){i.stopImmediatePropagation(),e.contains(this,i.relatedTarget)||(t&&clearTimeout(t),n.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(),e(this).siblings().find("ul").hide().end().end().parentsUntil(".vakata-context","li").addBack().addClass("vakata-context-hover"),e.vakata.context._show_submenu(this))}).on("mouseleave","li",function(t){e.contains(this,t.relatedTarget)||e(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover")}).on("mouseleave",function(i){e(this).find(".vakata-context-hover").removeClass("vakata-context-hover"),e.vakata.context.settings.hide_onmouseleave&&(t=setTimeout(function(t){return function(){e.vakata.context.hide()}}(this),e.vakata.context.settings.hide_onmouseleave))}).on("click","a",function(e){e.preventDefault()}).on("mouseup","a",function(t){e(this).blur().parent().hasClass("vakata-context-disabled")||e.vakata.context._execute(e(this).attr("rel"))===!1||e.vakata.context.hide()}).on("keydown","a",function(t){var i=null;switch(t.which){case 13:case 32:t.type="mouseup",t.preventDefault(),e(t.currentTarget).trigger(t);break;case 37:n.is_visible&&(n.element.find(".vakata-context-hover").last().parents("li:eq(0)").find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 38:n.is_visible&&(i=n.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(),i.length||(i=n.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last()),i.addClass("vakata-context-hover").children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 39:n.is_visible&&(n.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 40:n.is_visible&&(i=n.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(),i.length||(i=n.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first()),i.addClass("vakata-context-hover").children("a").focus(),t.stopImmediatePropagation(),t.preventDefault());break;case 27:e.vakata.context.hide(),t.preventDefault();break;default:}}).on("keydown",function(e){e.preventDefault();var t=n.element.find(".vakata-contextmenu-shortcut-"+e.which).parent();t.parent().not(".vakata-context-disabled")&&t.mouseup()}).appendTo("body"),e(document).on("mousedown",function(t){n.is_visible&&!e.contains(n.element[0],t.target)&&e.vakata.context.hide()}).on("context_show.vakata",function(e,t){n.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"),i&&n.element.addClass("vakata-context-rtl").css("direction","rtl"),n.element.find("ul").hide().end()})})}(e),e.jstree.defaults.dnd={copy:!0,open_timeout:500,is_draggable:!0,check_while_dragging:!0,always_copy:!1},e.jstree.plugins.dnd=function(i,n){this.bind=function(){n.bind.call(this),this.element.on("mousedown.jstree touchstart.jstree",".jstree-anchor",e.proxy(function(i){var n=this.get_node(i.target),r=this.is_selected(n)?this.get_selected().length:1;return n&&n.id&&"#"!==n.id&&(1===i.which||"touchstart"===i.type)&&(this.settings.dnd.is_draggable===!0||e.isFunction(this.settings.dnd.is_draggable)&&this.settings.dnd.is_draggable.call(this,r>1?this.get_selected(!0):[n]))?(this.element.trigger("mousedown.jstree"),e.vakata.dnd.start(i,{jstree:!0,origin:this,obj:this.get_node(n,!0),nodes:r>1?this.get_selected():[n.id]},'
    '+(r>1?r+" "+this.get_string("nodes"):this.get_text(i.currentTarget,!0))+'
    ')):t},this))}},e(function(){var i=!1,n=!1,r=!1,s=e('
     
    ').hide().appendTo("body");e(document).bind("dnd_start.vakata",function(e,t){i=!1}).bind("dnd_move.vakata",function(a,o){if(r&&clearTimeout(r),o.data.jstree&&(!o.event.target.id||"jstree-marker"!==o.event.target.id)){var d=e.jstree.reference(o.event.target),l=!1,c=!1,h=!1,_,u,g,f,p,m,v,y,j,x,k,b;if(d&&d._data&&d._data.dnd)if(s.attr("class","jstree-"+d.get_theme()),o.helper.children().attr("class","jstree-"+d.get_theme()).find(".jstree-copy:eq(0)")[o.data.origin&&(o.data.origin.settings.dnd.always_copy||o.data.origin.settings.dnd.copy&&(o.event.metaKey||o.event.ctrlKey))?"show":"hide"](),o.event.target!==d.element[0]&&o.event.target!==d.get_container_ul()[0]||0!==d.get_container_ul().children().length){if(l=e(o.event.target).closest("a"),l&&l.length&&l.parent().is(".jstree-closed, .jstree-open, .jstree-leaf")&&(c=l.offset(),h=o.event.pageY-c.top,g=l.height(),m=g/3>h?["b","i","a"]:h>g-g/3?["a","i","b"]:h>g/2?["i","a","b"]:["i","b","a"],e.each(m,function(a,h){switch(h){case"b":_=c.left-6,u=c.top-5,f=d.get_parent(l),p=l.parent().index();break;case"i":_=c.left-2,u=c.top-5+g/2+1,f=d.get_node(l.parent()).id,p=0;break;case"a":_=c.left-6,u=c.top-5+g,f=d.get_parent(l),p=l.parent().index()+1}for(v=!0,y=0,j=o.data.nodes.length;j>y;y++)if(x=o.data.origin&&(o.data.origin.settings.dnd.always_copy||o.data.origin.settings.dnd.copy&&(o.event.metaKey||o.event.ctrlKey))?"copy_node":"move_node",k=p,"move_node"===x&&"a"===h&&o.data.origin&&o.data.origin===d&&f===d.get_parent(o.data.nodes[y])&&(b=d.get_node(f),k>e.inArray(o.data.nodes[y],b.children)&&(k-=1)),v=v&&(d&&d.settings&&d.settings.dnd&&d.settings.dnd.check_while_dragging===!1||d.check(x,o.data.origin&&o.data.origin!==d?o.data.origin.get_node(o.data.nodes[y]):o.data.nodes[y],f,k,{dnd:!0,ref:d.get_node(l.parent()),pos:h,is_multi:o.data.origin&&o.data.origin!==d,is_foreign:!o.data.origin})),!v){d&&d.last_error&&(n=d.last_error());break}return v?("i"===h&&l.parent().is(".jstree-closed")&&d.settings.dnd.open_timeout&&(r=setTimeout(function(e,t){return function(){e.open_node(t)}}(d,l),d.settings.dnd.open_timeout)),i={ins:d,par:f,pos:p},s.css({left:_+"px",top:u+"px"}).show(),o.helper.find(".jstree-icon:eq(0)").removeClass("jstree-er").addClass("jstree-ok"),n={},m=!0,!1):t}),m===!0))return}else{for(v=!0,y=0,j=o.data.nodes.length;j>y;y++)if(v=v&&d.check(o.data.origin&&(o.data.origin.settings.dnd.always_copy||o.data.origin.settings.dnd.copy&&(o.event.metaKey||o.event.ctrlKey))?"copy_node":"move_node",o.data.origin&&o.data.origin!==d?o.data.origin.get_node(o.data.nodes[y]):o.data.nodes[y],"#","last",{dnd:!0,ref:d.get_node("#"),pos:"i",is_multi:o.data.origin&&o.data.origin!==d,is_foreign:!o.data.origin}),!v)break;if(v)return i={ins:d,par:"#",pos:"last"},s.hide(),o.helper.find(".jstree-icon:eq(0)").removeClass("jstree-er").addClass("jstree-ok"),t}i=!1,o.helper.find(".jstree-icon").removeClass("jstree-ok").addClass("jstree-er"),s.hide()}}).bind("dnd_scroll.vakata",function(e,t){t.data.jstree&&(s.hide(),i=!1,t.helper.find(".jstree-icon:eq(0)").removeClass("jstree-ok").addClass("jstree-er"))}).bind("dnd_stop.vakata",function(t,a){if(r&&clearTimeout(r),a.data.jstree){s.hide();var o,d,l=[];if(i){for(o=0,d=a.data.nodes.length;d>o;o++)l[o]=a.data.origin?a.data.origin.get_node(a.data.nodes[o]):a.data.nodes[o],a.data.origin&&(l[o].instance=a.data.origin);i.ins[a.data.origin&&(a.data.origin.settings.dnd.always_copy||a.data.origin.settings.dnd.copy&&(a.event.metaKey||a.event.ctrlKey))?"copy_node":"move_node"](l,i.par,i.pos)}else o=e(a.event.target).closest(".jstree"),o.length&&n&&n.error&&"check"===n.error&&(o=o.jstree(!0),o&&o.settings.core.error.call(this,n))}}).bind("keyup keydown",function(t,i){i=e.vakata.dnd._get(),i.data&&i.data.jstree&&i.helper.find(".jstree-copy:eq(0)")[i.data.origin&&(i.data.origin.settings.dnd.always_copy||i.data.origin.settings.dnd.copy&&(t.metaKey||t.ctrlKey))?"show":"hide"]()})}),function(e){var i={element:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1};e.vakata.dnd={settings:{scroll_speed:10,scroll_proximity:20,helper_left:5,helper_top:10,threshold:5},_trigger:function(t,i){var n=e.vakata.dnd._get();n.event=i,e(document).triggerHandler("dnd_"+t+".vakata",n)},_get:function(){return{data:i.data,element:i.element,helper:i.helper}},_clean:function(){i.helper&&i.helper.remove(),i.scroll_i&&(clearInterval(i.scroll_i),i.scroll_i=!1),i={element:!1,is_down:!1,is_drag:!1,helper:!1,helper_w:0,data:!1,init_x:0,init_y:0,scroll_l:0,scroll_t:0,scroll_e:!1,scroll_i:!1},e(document).off("mousemove touchmove",e.vakata.dnd.drag),e(document).off("mouseup touchend",e.vakata.dnd.stop)},_scroll:function(t){if(!i.scroll_e||!i.scroll_l&&!i.scroll_t)return i.scroll_i&&(clearInterval(i.scroll_i),i.scroll_i=!1),!1;if(!i.scroll_i)return i.scroll_i=setInterval(e.vakata.dnd._scroll,100),!1;if(t===!0)return!1;var n=i.scroll_e.scrollTop(),r=i.scroll_e.scrollLeft();i.scroll_e.scrollTop(n+i.scroll_t*e.vakata.dnd.settings.scroll_speed),i.scroll_e.scrollLeft(r+i.scroll_l*e.vakata.dnd.settings.scroll_speed),(n!==i.scroll_e.scrollTop()||r!==i.scroll_e.scrollLeft())&&e.vakata.dnd._trigger("scroll",i.scroll_e)},start:function(t,n,r){"touchstart"===t.type&&t.originalEvent&&t.originalEvent.changedTouches&&t.originalEvent.changedTouches[0]&&(t.pageX=t.originalEvent.changedTouches[0].pageX,t.pageY=t.originalEvent.changedTouches[0].pageY,t.target=document.elementFromPoint(t.originalEvent.changedTouches[0].pageX-window.pageXOffset,t.originalEvent.changedTouches[0].pageY-window.pageYOffset)),i.is_drag&&e.vakata.dnd.stop({});try{t.currentTarget.unselectable="on",t.currentTarget.onselectstart=function(){return!1},t.currentTarget.style&&(t.currentTarget.style.MozUserSelect="none")}catch(s){}return i.init_x=t.pageX,i.init_y=t.pageY,i.data=n,i.is_down=!0,i.element=t.currentTarget,r!==!1&&(i.helper=e("
    ").html(r).css({display:"block",margin:"0",padding:"0",position:"absolute",top:"-2000px",lineHeight:"16px",zIndex:"10000"})),e(document).bind("mousemove touchmove",e.vakata.dnd.drag),e(document).bind("mouseup touchend",e.vakata.dnd.stop),!1},drag:function(n){if("touchmove"===n.type&&n.originalEvent&&n.originalEvent.changedTouches&&n.originalEvent.changedTouches[0]&&(n.pageX=n.originalEvent.changedTouches[0].pageX,n.pageY=n.originalEvent.changedTouches[0].pageY,n.target=document.elementFromPoint(n.originalEvent.changedTouches[0].pageX-window.pageXOffset,n.originalEvent.changedTouches[0].pageY-window.pageYOffset)),i.is_down){if(!i.is_drag){if(!(Math.abs(n.pageX-i.init_x)>e.vakata.dnd.settings.threshold||Math.abs(n.pageY-i.init_y)>e.vakata.dnd.settings.threshold))return;i.helper&&(i.helper.appendTo("body"),i.helper_w=i.helper.outerWidth()),i.is_drag=!0,e.vakata.dnd._trigger("start",n)}var r=!1,s=!1,a=!1,o=!1,d=!1,l=!1,c=!1,h=!1,_=!1,u=!1;i.scroll_t=0,i.scroll_l=0,i.scroll_e=!1,e(e(n.target).parentsUntil("body").addBack().get().reverse()).filter(function(){return/^auto|scroll$/.test(e(this).css("overflow"))&&(this.scrollHeight>this.offsetHeight||this.scrollWidth>this.offsetWidth)}).each(function(){var r=e(this),s=r.offset();return this.scrollHeight>this.offsetHeight&&(s.top+r.height()-n.pageYthis.offsetWidth&&(s.left+r.width()-n.pageXo&&n.pageY-co&&o-(n.pageY-c)l&&n.pageX-hl&&l-(n.pageX-h)a&&(_=a-50),d&&u+i.helper_w>d&&(u=d-(i.helper_w+2)),i.helper.css({left:u+"px",top:_+"px"})),e.vakata.dnd._trigger("move",n)}},stop:function(t){"touchend"===t.type&&t.originalEvent&&t.originalEvent.changedTouches&&t.originalEvent.changedTouches[0]&&(t.pageX=t.originalEvent.changedTouches[0].pageX,t.pageY=t.originalEvent.changedTouches[0].pageY,t.target=document.elementFromPoint(t.originalEvent.changedTouches[0].pageX-window.pageXOffset,t.originalEvent.changedTouches[0].pageY-window.pageYOffset)),i.is_drag&&e.vakata.dnd._trigger("stop",t),e.vakata.dnd._clean()}}}(jQuery),e.jstree.defaults.search={ajax:!1,fuzzy:!0,case_sensitive:!1,show_only_matches:!1,close_opened_onclear:!0,search_leaves_only:!1},e.jstree.plugins.search=function(t,i){this.bind=function(){i.bind.call(this),this._data.search.str="",this._data.search.dom=e(),this._data.search.res=[],this._data.search.opn=[],this.element.on("before_open.jstree",e.proxy(function(t,i){var n,r,s,a=this._data.search.res,o=[],d=e();if(a&&a.length){for(this._data.search.dom=e(),n=0,r=a.length;r>n;n++)o=o.concat(this.get_node(a[n]).parents),s=this.get_node(a[n],!0),s&&(this._data.search.dom=this._data.search.dom.add(s));for(o=e.vakata.array_unique(o),n=0,r=o.length;r>n;n++)"#"!==o[n]&&(s=this.get_node(o[n],!0),s&&(d=d.add(s)));this._data.search.dom.children(".jstree-anchor").addClass("jstree-search"),this.settings.search.show_only_matches&&this._data.search.res.length&&(this.element.find("li").hide().filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last"),d=d.add(this._data.search.dom),d.parentsUntil(".jstree").addBack().show().filter("ul").each(function(){e(this).children("li:visible").eq(-1).addClass("jstree-last")}))}},this)),this.settings.search.show_only_matches&&this.element.on("search.jstree",function(t,i){i.nodes.length&&(e(this).find("li").hide().filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last"),i.nodes.parentsUntil(".jstree").addBack().show().filter("ul").each(function(){e(this).children("li:visible").eq(-1).addClass("jstree-last")}))}).on("clear_search.jstree",function(t,i){i.nodes.length&&e(this).find("li").css("display","").filter(".jstree-last").filter(function(){return this.nextSibling}).removeClass("jstree-last")})},this.search=function(t,i){if(t===!1||""===e.trim(t))return this.clear_search();var n=this.settings.search,r=n.ajax?n.ajax:!1,s=null,a=[],o=[],d,l;if(this._data.search.res.length&&this.clear_search(),!i&&r!==!1)return e.isFunction(r)?r.call(this,t,e.proxy(function(i){i&&i.d&&(i=i.d),this._load_nodes(e.isArray(i)?i:[],function(){this.search(t,!0)})},this)):(r=e.extend({},r),r.data||(r.data={}),r.data.str=t,e.ajax(r).fail(e.proxy(function(){this._data.core.last_error={error:"ajax",plugin:"search",id:"search_01",reason:"Could not load search parents",data:JSON.stringify(r)},this.settings.core.error.call(this,this._data.core.last_error)},this)).done(e.proxy(function(i){i&&i.d&&(i=i.d),this._load_nodes(e.isArray(i)?i:[],function(){this.search(t,!0)})},this)));if(this._data.search.str=t,this._data.search.dom=e(),this._data.search.res=[],this._data.search.opn=[],s=new e.vakata.search(t,!0,{caseSensitive:n.case_sensitive,fuzzy:n.fuzzy}),e.each(this._model.data,function(e,t){t.text&&s.search(t.text).isMatch&&(!n.search_leaves_only||t.state.loaded&&0===t.children.length)&&(a.push(e),o=o.concat(t.parents))}),a.length){for(o=e.vakata.array_unique(o),this._search_open(o),d=0,l=a.length;l>d;d++)s=this.get_node(a[d],!0),s&&(this._data.search.dom=this._data.search.dom.add(s));this._data.search.res=a,this._data.search.dom.children(".jstree-anchor").addClass("jstree-search")}this.trigger("search",{nodes:this._data.search.dom,str:t,res:this._data.search.res})},this.clear_search=function(){this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"),this.settings.search.close_opened_onclear&&this.close_node(this._data.search.opn,0),this.trigger("clear_search",{nodes:this._data.search.dom,str:this._data.search.str,res:this._data.search.res}),this._data.search.str="",this._data.search.res=[],this._data.search.opn=[],this._data.search.dom=e()},this._search_open=function(t){var i=this;e.each(t.concat([]),function(n,r){if("#"===r)return!0;try{r=e("#"+r.replace(e.jstree.idregex,"\\$&"),i.element)}catch(s){}r&&r.length&&i.is_closed(r)&&(i._data.search.opn.push(r[0].id),i.open_node(r,function(){i._search_open(t)},0))})}},function(e){e.vakata.search=function(e,t,i){i=i||{},i.fuzzy!==!1&&(i.fuzzy=!0),e=i.caseSensitive?e:e.toLowerCase();var n=i.location||0,r=i.distance||100,s=i.threshold||.6,a=e.length,o,d,l,c;return a>32&&(i.fuzzy=!1),i.fuzzy&&(o=1<i;i++)t[e.charAt(i)]=0;for(i=0;a>i;i++)t[e.charAt(i)]|=1<r;r++){g=0,f=p;while(f>g)_>=l(r,n+f)?g=f:p=f,f=Math.floor((p-g)/2+g);for(p=f,v=Math.max(1,n-f+1),y=Math.min(n+f,h)+a,j=Array(y+2),j[y+1]=(1<=v;c--)if(x=d[t.charAt(c-1)],j[c]=0===r?(1|j[c+1]<<1)&x:(1|j[c+1]<<1)&x|(1|(m[c+1]|m[c])<<1)|m[c+1],j[c]&o&&(k=l(r,c-1),_>=k)){if(_=k,u=c-1,b.push(u),!(u>n))break;v=Math.max(1,2*n-u)}if(l(r+1,n)>_)break;m=j}return{isMatch:u>=0,score:k}},t===!0?{search:c}:c(t)}}(jQuery),e.jstree.defaults.sort=function(e,t){return this.get_text(e)>this.get_text(t)?1:-1},e.jstree.plugins.sort=function(t,i){this.bind=function(){i.bind.call(this),this.element.on("model.jstree",e.proxy(function(e,t){this.sort(t.parent,!0)},this)).on("rename_node.jstree create_node.jstree",e.proxy(function(e,t){this.sort(t.parent||t.node.parent,!1),this.redraw_node(t.parent||t.node.parent,!0)},this)).on("move_node.jstree copy_node.jstree",e.proxy(function(e,t){this.sort(t.parent,!1),this.redraw_node(t.parent,!0)},this))},this.sort=function(t,i){var n,r;if(t=this.get_node(t),t&&t.children&&t.children.length&&(t.children.sort(e.proxy(this.settings.sort,this)),i))for(n=0,r=t.children_d.length;r>n;n++)this.sort(t.children_d[n],!1)}};var u=!1;e.jstree.defaults.state={key:"jstree",events:"changed.jstree open_node.jstree close_node.jstree",ttl:!1,filter:!1},e.jstree.plugins.state=function(t,i){this.bind=function(){i.bind.call(this);var t=e.proxy(function(){this.element.on(this.settings.state.events,e.proxy(function(){u&&clearTimeout(u),u=setTimeout(e.proxy(function(){this.save_state()},this),100)},this))},this);this.element.on("ready.jstree",e.proxy(function(e,i){this.element.one("restore_state.jstree",t),this.restore_state()||t()},this))},this.save_state=function(){var t={state:this.get_state(),ttl:this.settings.state.ttl,sec:+new Date};e.vakata.storage.set(this.settings.state.key,JSON.stringify(t))},this.restore_state=function(){var t=e.vakata.storage.get(this.settings.state.key);if(t)try{t=JSON.parse(t)}catch(i){return!1}return t&&t.ttl&&t.sec&&+new Date-t.sec>t.ttl?!1:(t&&t.state&&(t=t.state),t&&e.isFunction(this.settings.state.filter)&&(t=this.settings.state.filter.call(this,t)),t?(this.element.one("set_state.jstree",function(i,n){n.instance.trigger("restore_state",{state:e.extend(!0,{},t)})}),this.set_state(t),!0):!1)},this.clear_state=function(){return e.vakata.storage.del(this.settings.state.key)}},function(e,t){e.vakata.storage={set:function(e,t){return window.localStorage.setItem(e,t)},get:function(e){return window.localStorage.getItem(e)},del:function(e){return window.localStorage.removeItem(e)}}}(jQuery),e.jstree.defaults.types={"#":{},"default":{}},e.jstree.plugins.types=function(i,n){this.init=function(e,i){var r,s;if(i&&i.types&&i.types["default"])for(r in i.types)if("default"!==r&&"#"!==r&&i.types.hasOwnProperty(r))for(s in i.types["default"])i.types["default"].hasOwnProperty(s)&&i.types[r][s]===t&&(i.types[r][s]=i.types["default"][s]);n.init.call(this,e,i),this._model.data["#"].type="#"},this.refresh=function(e){n.refresh.call(this,e),this._model.data["#"].type="#"},this.bind=function(){this.element.on("model.jstree",e.proxy(function(e,i){var n=this._model.data,r=i.nodes,s=this.settings.types,a,o,d="default";for(a=0,o=r.length;o>a;a++)d="default",n[r[a]].original&&n[r[a]].original.type&&s[n[r[a]].original.type]&&(d=n[r[a]].original.type),n[r[a]].data&&n[r[a]].data.jstree&&n[r[a]].data.jstree.type&&s[n[r[a]].data.jstree.type]&&(d=n[r[a]].data.jstree.type),n[r[a]].type=d,n[r[a]].icon===!0&&s[d].icon!==t&&(n[r[a]].icon=s[d].icon)},this)),n.bind.call(this)},this.get_json=function(t,i,r){var s,a,o=this._model.data,d=i?e.extend(!0,{},i,{no_id:!1}):{},l=n.get_json.call(this,t,d,r);if(l===!1)return!1;if(e.isArray(l))for(s=0,a=l.length;a>s;s++)l[s].type=l[s].id&&o[l[s].id]&&o[l[s].id].type?o[l[s].id].type:"default",i&&i.no_id&&(delete l[s].id,l[s].li_attr&&l[s].li_attr.id&&delete l[s].li_attr.id);else l.type=l.id&&o[l.id]&&o[l.id].type?o[l.id].type:"default",i&&i.no_id&&(l=this._delete_ids(l));return l},this._delete_ids=function(t){if(e.isArray(t)){for(var i=0,n=t.length;n>i;i++)t[i]=this._delete_ids(t[i]);return t}return delete t.id,t.li_attr&&t.li_attr.id&&delete t.li_attr.id,t.children&&e.isArray(t.children)&&(t.children=this._delete_ids(t.children)),t},this.check=function(i,r,s,a,o){if(n.check.call(this,i,r,s,a,o)===!1)return!1;r=r&&r.id?r:this.get_node(r),s=s&&s.id?s:this.get_node(s);var d=r&&r.id?e.jstree.reference(r.id):null,l,c,h,_;switch(d=d&&d._model&&d._model.data?d._model.data:null,i){case"create_node":case"move_node":case"copy_node":if("move_node"!==i||-1===e.inArray(r.id,s.children)){if(l=this.get_rules(s),l.max_children!==t&&-1!==l.max_children&&l.max_children===s.children.length)return this._data.core.last_error={error:"check",plugin:"types",id:"types_01",reason:"max_children prevents function: "+i,data:JSON.stringify({chk:i,pos:a,obj:r&&r.id?r.id:!1,par:s&&s.id?s.id:!1})},!1;if(l.valid_children!==t&&-1!==l.valid_children&&-1===e.inArray(r.type,l.valid_children))return this._data.core.last_error={error:"check",plugin:"types",id:"types_02",reason:"valid_children prevents function: "+i,data:JSON.stringify({chk:i,pos:a,obj:r&&r.id?r.id:!1,par:s&&s.id?s.id:!1})},!1;if(d&&r.children_d&&r.parents){for(c=0,h=0,_=r.children_d.length;_>h;h++)c=Math.max(c,d[r.children_d[h]].parents.length);c=c-r.parents.length+1}(0>=c||c===t)&&(c=1);do{if(l.max_depth!==t&&-1!==l.max_depth&&c>l.max_depth)return this._data.core.last_error={error:"check",plugin:"types",id:"types_03",reason:"max_depth prevents function: "+i,data:JSON.stringify({chk:i,pos:a,obj:r&&r.id?r.id:!1,par:s&&s.id?s.id:!1})},!1;s=this.get_node(s.parent),l=this.get_rules(s),c++}while(s)}}return!0},this.get_rules=function(e){if(e=this.get_node(e),!e)return!1;var i=this.get_type(e,!0);return i.max_depth===t&&(i.max_depth=-1),i.max_children===t&&(i.max_children=-1),i.valid_children===t&&(i.valid_children=-1),i},this.get_type=function(t,i){return t=this.get_node(t),t?i?e.extend({type:t.type},this.settings.types[t.type]):t.type:!1},this.set_type=function(i,n){var r,s,a,o,d;if(e.isArray(i)){for(i=i.slice(),s=0,a=i.length;a>s;s++)this.set_type(i[s],n);return!0}return r=this.settings.types,i=this.get_node(i),r[n]&&i?(o=i.type,d=this.get_icon(i),i.type=n,(d===!0||r[o]&&r[o].icon&&d===r[o].icon)&&this.set_icon(i,r[n].icon!==t?r[n].icon:!0),!0):!1}},e.jstree.plugins.unique=function(t,i){this.check=function(t,n,r,s,a){if(i.check.call(this,t,n,r,s,a)===!1)return!1;if(n=n&&n.id?n:this.get_node(n),r=r&&r.id?r:this.get_node(r),!r||!r.children)return!0;var o="rename_node"===t?s:n.text,d=[],l=this._model.data,c,h;for(c=0,h=r.children.length;h>c;c++)d.push(l[r.children[c]].text);switch(t){case"delete_node":return!0;case"rename_node":case"copy_node":return c=-1===e.inArray(o,d),c||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+o+" already exists. Preventing: "+t,data:JSON.stringify({chk:t,pos:s,obj:n&&n.id?n.id:!1,par:r&&r.id?r.id:!1})}),c;case"move_node":return c=n.parent===r.id||-1===e.inArray(o,d),c||(this._data.core.last_error={error:"check",plugin:"unique",id:"unique_01",reason:"Child with name "+o+" already exists. Preventing: "+t,data:JSON.stringify({chk:t,pos:s,obj:n&&n.id?n.id:!1,par:r&&r.id?r.id:!1})}),c}return!0}};var g=document.createElement("DIV");g.setAttribute("unselectable","on"),g.className="jstree-wholerow",g.innerHTML=" ",e.jstree.plugins.wholerow=function(t,i){this.bind=function(){i.bind.call(this),this.element.on("loading",e.proxy(function(){g.style.height=this._data.core.li_height+"px"},this)).on("ready.jstree set_state.jstree",e.proxy(function(){this.hide_dots()},this)).on("ready.jstree",e.proxy(function(){this.get_container_ul().addClass("jstree-wholerow-ul")},this)).on("deselect_all.jstree",e.proxy(function(e,t){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked")},this)).on("changed.jstree",e.proxy(function(e,t){this.element.find(".jstree-wholerow-clicked").removeClass("jstree-wholerow-clicked");var i=!1,n,r;for(n=0,r=t.selected.length;r>n;n++)i=this.get_node(t.selected[n],!0),i&&i.length&&i.children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("open_node.jstree",e.proxy(function(e,t){this.get_node(t.node,!0).find(".jstree-clicked").parent().children(".jstree-wholerow").addClass("jstree-wholerow-clicked")},this)).on("hover_node.jstree dehover_node.jstree",e.proxy(function(e,t){this.get_node(t.node,!0).children(".jstree-wholerow")["hover_node"===e.type?"addClass":"removeClass"]("jstree-wholerow-hovered")},this)).on("contextmenu.jstree",".jstree-wholerow",e.proxy(function(t){t.preventDefault();var i=e.Event("contextmenu",{metaKey:t.metaKey,ctrlKey:t.ctrlKey,altKey:t.altKey,shiftKey:t.shiftKey,pageX:t.pageX,pageY:t.pageY});e(t.currentTarget).closest("li").children("a:eq(0)").trigger(i)},this)).on("click.jstree",".jstree-wholerow",function(t){t.stopImmediatePropagation();var i=e.Event("click",{metaKey:t.metaKey,ctrlKey:t.ctrlKey,altKey:t.altKey,shiftKey:t.shiftKey});e(t.currentTarget).closest("li").children("a:eq(0)").trigger(i).focus()}).on("click.jstree",".jstree-leaf > .jstree-ocl",e.proxy(function(t){t.stopImmediatePropagation();var i=e.Event("click",{metaKey:t.metaKey,ctrlKey:t.ctrlKey,altKey:t.altKey,shiftKey:t.shiftKey});e(t.currentTarget).closest("li").children("a:eq(0)").trigger(i).focus()},this)).on("mouseover.jstree",".jstree-wholerow, .jstree-icon",e.proxy(function(e){return e.stopImmediatePropagation(),this.hover_node(e.currentTarget),!1},this)).on("mouseleave.jstree",".jstree-node",e.proxy(function(e){this.dehover_node(e.currentTarget)},this))},this.teardown=function(){this.settings.wholerow&&this.element.find(".jstree-wholerow").remove(),i.teardown.call(this)},this.redraw_node=function(t,n,r){if(t=i.redraw_node.call(this,t,n,r)){var s=g.cloneNode(!0);-1!==e.inArray(t.id,this._data.core.selected)&&(s.className+=" jstree-wholerow-clicked"),t.insertBefore(s,t.childNodes[0])}return t}}}}); \ No newline at end of file diff --git a/mfr/extensions/zip/static/js/jstreetable.js b/mfr/extensions/zip/static/js/jstreetable.js new file mode 100755 index 000000000..c76647b63 --- /dev/null +++ b/mfr/extensions/zip/static/js/jstreetable.js @@ -0,0 +1,1060 @@ +/* + * http://github.com/adamjimenez/jstree-table + * + * This plugin handles adding columns to a tree to display additional data + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Works only with jstree version >= 3.0.0 + * + * $Revision: 3.4.2 $ + */ + +/*jslint nosmen:true */ +/*jshint unused:vars */ +/*global navigator, document, jQuery, define, localStorage */ + +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery', 'jstree'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + var renderAWidth, renderATitle, getIndent, copyData, htmlstripre, findLastClosedNode, BLANKRE = /^\s*$/g, + IDREGEX = /[\\:&!^|()\[\]<>@*'+~#";,= \/${}%]/g, escapeId = function (id) { + return (id||"").replace(IDREGEX,'\\$&'); + }, NODE_DATA_ATTR = "data-jstreetable", COL_DATA_ATTR = "data-jstreetable-column", + SPECIAL_TITLE = "_DATA_", LEVELINDENT = 24, styled = false, TABLECELLID_PREFIX = "jstable_",TABLECELLID_POSTFIX = "_col", + MINCOLWIDTH = 10, + findDataCell = function (from,id) { + return from.find("div["+NODE_DATA_ATTR+'="'+ escapeId(id) +'"]'); + }, + isClickedSep = false, toResize = null, oldMouseX = 0, newMouseX = 0; + + /*jslint regexp:true */ + htmlstripre = /<\/?[^>]+>/gi; + /*jslint regexp:false */ + + getIndent = function(node,tree) { + var div, i, li, width; + + // did we already save it for this tree? + tree._tableSettings = tree._tableSettings || {}; + if (tree._tableSettings.indent > 0) { + width = tree._tableSettings.indent; + } else { + // create a new div on the DOM but not visible on the page + div = $("
    "); + i = node.prev("i"); + li = i.parent(); + // add to that div all of the classes on the tree root + div.addClass(tree.get_node("#",true).attr("class")); + + // move the li to the temporary div root + li.appendTo(div); + + // attach to the body quickly + div.appendTo($("body")); + + // get the width + width = i.width() || LEVELINDENT; + + // detach the li from the new div and destroy the new div + li.detach(); + div.remove(); + + // save it for the future + tree._tableSettings.indent = width; + } + + + return(width); + + }; + + copyData = function (fromtree,from,totree,to,recurse) { + var i, j; + to.data = $.extend(true, {}, from.data); + if (from && from.children_d && recurse) { + for(i = 0, j = from.children_d.length; i < j; i++) { + copyData(fromtree,fromtree.get_node(from.children_d[i]),totree,totree.get_node(to.children_d[i]),recurse); + } + } + }; + + findLastClosedNode = function (tree,id) { + // first get our node + var ret, node = tree.get_node(id), children = node.children; + // is it closed? + if (!children || children.length <= 0 || !node.state.opened) { + ret = id; + } else { + ret = findLastClosedNode(tree,children[children.length-1]); + } + return(ret); + }; + + renderAWidth = function(node,tree) { + var depth, width, + fullWidth = parseInt(tree.settings.table.columns[0].width,10) + parseInt(tree._tableSettings.treeWidthDiff,10); + // need to use a selector in jquery 1.4.4+ + depth = tree.get_node(node).parents.length; + width = fullWidth - depth*getIndent(node,tree); + // the following line is no longer needed, since we are doing this inside a + //a.css({"vertical-align": "top", "overflow":"hidden"}); + return(fullWidth); + }; + renderATitle = function(node,t,tree) { + var a = node.get(0).tagName.toLowerCase() === "a" ? node : node.children("a"), title, col = tree.settings.table.columns[0]; + // get the title + title = ""; + if (col.title) { + if (col.title === SPECIAL_TITLE) { + title = tree.get_text(t); + } else if (t.attr(col.title)) { + title = t.attr(col.title); + } + } + // strip out HTML + title = title.replace(htmlstripre, ''); + if (title) { + a.attr("title",title); + } + }; + + $.jstree.defaults.table = { + width: 'auto' + }; + + $.jstree.plugins.table = function(options,parent) { + var _this = this; + + this._initialize = function () { + if (!this._initialized) { + var s = this.settings.table || {}, styles, container = this.element, i, + gs = this._tableSettings = { + columns : s.columns || [], + treeClass : "jstree-table-col-0", + context: s.contextmenu || false, + columnWidth : s.columnWidth, + defaultConf : {"*display":"inline","*+display":"inline"}, + isThemeroller : !!this._data.themeroller, + treeWidthDiff : 0, + resizable : s.resizable, + draggable : s.draggable, + stateful: s.stateful, + indent: 0, + sortFn: [], + sortOrder: 'text', + sortAsc: true, + fixedHeader: s.fixedHeader !== false, + headerContextMenu: s.headerContextMenu !== false, + checkIcon: 'fa fa-check', + arrowDownIcon: 'fa fa-chevron-down', + arrowUpIcon: 'fa fa-chevron-up', + width: s.width, + height: s.height + }, cols = gs.columns, treecol = 0; + // find which column our tree shuld go in + for (i=0;i'+styles.join("\n")+'').appendTo("head"); + } + this.tableWrapper = $("
    ").addClass("jstree-table-wrapper").insertAfter(container); + this.midWrapper = $("
    ").addClass("jstree-table-midwrapper").appendTo(this.tableWrapper); + // set the wrapper width + if (s.width) { + this.tableWrapper.width(s.width); + } + if (s.height) { + this.tableWrapper.height(s.height); + } + // create the data columns + for (i=0;i
    ").addClass("jstree-default jstree-table-column jstree-table-column-"+i+" jstree-table-column-root-"+this.rootid).appendTo(this.midWrapper); + + if (typeof(cols[i].value) === "function") { + console.warn("[jstree-table] using value as a function is no longer supported, use 'format' option instead."); + } + } + this.midWrapper.children("div:eq("+treecol+")").append(container); + container.addClass("jstree-table-cell"); + + //move header with scroll + if (gs.fixedHeader) { + this.tableWrapper.scroll(function() { + $(this).find('.jstree-table-header').css('top', $(this).scrollTop()); + }); + } + + // copy original sort function + var defaultSort = $.proxy(this.settings.sort, this); + + // override sort function + this.settings.sort = function (a, b) { + var bigger; + + if (gs.sortOrder==='text') { + bigger = defaultSort(a, b); + } else { + var nodeA = this.get_node(a); + var nodeB = this.get_node(b); + var valueA = nodeA.data[gs.sortOrder]; + var valueB = nodeB.data[gs.sortOrder]; + if(valueA && valueB){ + if(gs.sortFn[gs.sortOrder]){ + bigger = gs.sortFn[gs.sortOrder](valueA, valueB, nodeA, nodeB); + }else{ + // Default sorting + bigger = (valueA > valueB ? 1 : -1); + } + }else{ + // undefined is second + if(valueA){ + bigger = 1; + }else if(valueB){ + bigger = -1; + }else{ + // Compare two nodes without values + bigger = defaultSort(a, b); + } + } + } + + if (gs.sortAsc===false){ + bigger = -bigger; + + } + + return bigger; + }; + + // sortable columns when jQuery UI is available + if (gs.draggable) { + if (!$.ui || !$.ui.sortable) { + console.warn('[jstree-table] draggable option requires jQuery UI'); + } else { + var from, to; + + $(this.midWrapper).sortable({ + axis: "x", + handle: ".jstree-table-header", + cancel: ".jstree-table-separator", + start: function (event, ui) { + from = ui.item.index(); + }, + stop: function (event, ui) { + to = ui.item.index(); + gs.columns.splice(to, 0, gs.columns.splice(from, 1)[0]); + } + }); + } + } + + this._initialized = true; + } + }; + this.init = function (el,options) { + parent.init.call(this,el,options); + this._initialize(); + }; + this.bind = function () { + parent.bind.call(this); + this._initialize(); + this.element + .on("move_node.jstree create_node.jstree clean_node.jstree change_node.jstree", $.proxy(function (e, data) { + var target = this.get_node(data || "#",true); + this._prepare_table(target); + }, this)) + .on("delete_node.jstree",$.proxy(function (e,data) { + if (data.node.id !== undefined) { + var table = this.tableWrapper, removeNodes = [data.node.id], i; + // add children to remove list + if (data.node && data.node.children_d) { + removeNodes = removeNodes.concat(data.node.children_d); + } + for (i=0;i\ + div.jstree-table-cell-root-'+me.rootid+' {line-height: '+anchorHeight+'px; min-height: '+anchorHeight+'px;}\ + div.jstree-table-midwrapper a.jstree-clicked:before, .jstree-table-midwrapper a.jstree-hovered:before {width: ' + tableWidth + 'px;}\ + ').appendTo("head"); + } + + resize(); + + // resize rows on zoom + $(window).on('resize', resize); + + // resize column expand + this.element.on("resize_column.jstree-table", resize); + },this)) + .on("move_node.jstree",$.proxy(function(e,data) { + var node = data.new_instance.element; + //renderAWidth(node,this); + // check all the children, because we could drag a tree over + node.find("li > a").each($.proxy(function(i,elm) { + //renderAWidth($(elm),this); + },this)); + },this)) + .on("search.jstree", $.proxy(function (e, data) { + // search sometimes filters, so we need to hide all of the appropriate table cells as well, and show only the matches + var table = this.tableWrapper; + if(this._data.search.som) { + if(data.nodes.length) { + // hide all of the table cells + table.find('div.jstree-table-cell-regular').hide(); + // show only those that match + data.nodes.add(data.nodes.parentsUntil(".jstree")).filter(".jstree-node").each(function (i,node) { + var id = node.id; + if (id) { + findDataCell(table,id).show(); + } + }); + } + } + return true; + }, this)) + .on("clear_search.jstree", $.proxy(function (e, data) { + // search has been cleared, so we need to show all rows + this.tableWrapper.find('div.jstree-table-cell').show(); + return true; + }, this)) + .on("copy_node.jstree", function (e, data) { + var newtree = data.new_instance, oldtree = data.old_instance, obj = newtree.get_node(data.node,true); + copyData(oldtree,data.original,newtree,data.node,true); + newtree._prepare_table(obj); + return true; + }); + if (this._tableSettings.isThemeroller) { + this.element + .on("select_node.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").addClass("ui-state-active"); + },this)) + .on("deselect_node.jstree deselect_all.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").removeClass("ui-state-active"); + },this)) + .on("hover_node.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").addClass("ui-state-hover"); + },this)) + .on("dehover_node.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").removeClass("ui-state-hover"); + },this)); + } + + if (this._tableSettings.stateful) { + this.element + .on("resize_column.jstree-table",$.proxy(function(e,col,width) { + localStorage['jstree-root-'+this.rootid+'-column-'+col] = width; + },this)); + } + }; + // tear down the tree entirely + this.teardown = function() { + var gw = this.tableWrapper, container = this.element, tableparent = gw.parent(); + container.detach(); + gw.remove(); + tableparent.append(container); + parent.teardown.call(this); + }; + // clean the table in case of redraw or refresh entire tree + this._clean_table = function (target,id) { + var table = this.tableWrapper; + if (target) { + findDataCell(table,id).remove(); + } else { + // get all of the `div` children in all of the `td` in dataRow except for :first (that is the tree itself) and remove + table.find("div.jstree-table-cell-regular").remove(); + } + }; + // prepare the headers + this._prepare_headers = function() { + var header, i, col, _this = this, gs = this._tableSettings,cols = gs.columns || [], width, defaultWidth = gs.columnWidth, resizable = gs.resizable || false, + cl, ccl, val, name, margin, last, tr = gs.isThemeroller, classAdd = (tr?"themeroller":"regular"), puller, + hasHeaders = false, tableparent = this.tableparent, rootid = this.rootid, + conf = gs.defaultConf, + borPadWidth = 0, totalWidth = 0; + // save the original parent so we can reparent on destroy + this.parent = tableparent; + + + // create the headers + for (i=0;i"); + //col.appendTo(colgroup); + cl = cols[i].headerClass || ""; + ccl = cols[i].columnClass || ""; + val = cols[i].header || ""; + name = cols[i].value || "text"; + + if (val) {hasHeaders = true;} + if(gs.stateful && localStorage['jstree-root-'+rootid+'-column-'+i]) + width = localStorage['jstree-root-'+rootid+'-column-'+i]; + else + width = cols[i].width || defaultWidth; + + col = this.midWrapper.children("div.jstree-table-column-"+i); + last = $("
    ").css(conf).addClass("jstree-table-div-"+this.uniq+"-"+i+" "+(tr?"ui-widget-header ":"")+" jstree-table-header jstree-table-header-cell jstree-table-header-"+classAdd+" "+cl+" "+ccl).html(val); + last.addClass((tr?"ui-widget-header ":"")+"jstree-table-header jstree-table-header-"+classAdd); + last.prependTo(col); + + if (name) { + last.attr(COL_DATA_ATTR, name); + } + last.hover(function () { + $(this).addClass("jstree-hovered jstree-table-header-hovered"); + }, function () { + $(this).removeClass("jstree-hovered jstree-table-header-hovered"); + }); + totalWidth += last.outerWidth(); + puller = $("
     
    ").appendTo(last); + col.width(width); + col.css("min-width",width); + col.css("max-width",width); + } + + last.addClass((tr?"ui-widget-header ":"")+"jstree-table-header jstree-table-header-last jstree-table-header-"+classAdd); + // if there is no width given for the last column, do it via automatic + if (cols[cols.length-1].width === undefined) { + totalWidth -= width; + col.css({width:"auto"}); + last.addClass("jstree-table-width-auto").next(".jstree-table-separator").remove(); + } + if (hasHeaders) { + // save the offset of the div from the body + //gs.divOffset = header.parent().offset().left; + gs.header = header; + } else { + $("div.jstree-table-header").hide(); + } + + if (!this.bound && resizable) { + this.bound = true; + $(document).mouseup(function () { + var ref, cols, width, headers, currentTree, colNum; + if (isClickedSep) { + colNum = toResize.prevAll(".jstree-table-column").length; + currentTree = toResize.closest(".jstree-table-wrapper").find(".jstree"); + ref = $.jstree.reference(currentTree); + cols = ref.settings.table.columns; + headers = toResize.parent().children("div.jstree-table-column"); + if (isNaN(colNum) || colNum < 0) { ref._tableSettings.treeWidthDiff = currentTree.find("ins:eq(0)").width() + currentTree.find("a:eq(0)").width() - ref._tableSettings.columns[0].width; } + width = ref._tableSettings.columns[colNum].width = parseFloat(toResize.css("width")); + isClickedSep = false; + toResize = null; + + currentTree.trigger("resize_column.jstree-table", [colNum,width]); + } + }).mousemove(function (e) { + if (isClickedSep) { + newMouseX = e.pageX; + var diff = newMouseX - oldMouseX, + oldPrevHeaderInner, + oldPrevColWidth, newPrevColWidth; + + if (diff !== 0) { + oldPrevHeaderInner = toResize.width(); + oldPrevColWidth = parseFloat(toResize.css("width")); + + // handle a Chrome issue with columns set to auto + // thanks to Brabus https://github.com/side-by-side + if (!oldPrevColWidth) { + oldPrevColWidth = toResize.innerWidth(); + } + + // make sure that diff cannot be beyond the left/right limits + diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; + newPrevColWidth = oldPrevColWidth+diff; + + // only do this if we are not shrinking past 0 on left - and limit it to that amount + if ((diff > 0 || oldPrevHeaderInner > 0) && newPrevColWidth > MINCOLWIDTH) { + toResize.width(newPrevColWidth+"px"); + toResize.css("min-width",newPrevColWidth+"px"); + toResize.css("max-width",newPrevColWidth+"px"); + oldMouseX = newMouseX; + } + } + } + }); + this.tableWrapper.on("selectstart", ".jstree-table-resizable-separator", function () { + return false; + }) + .on("mousedown", ".jstree-table-resizable-separator", function (e) { + isClickedSep = true; + oldMouseX = e.pageX; + toResize = $(this).closest("div.jstree-table-column"); + // the max rightmost position we will allow is the right-most of the wrapper minus a buffer (10) + return false; + }) + .on("dblclick", ".jstree-table-resizable-separator", function (e) { + var col = $(this).closest("div.jstree-table-column"); + _this.autosize_column(col); + }) + .on("click", ".jstree-table-separator", function (e) { + // don't sort after resize + e.stopPropagation(); + }); + } + + this.tableWrapper.on("click", ".jstree-table-header-cell", function (e) { + if (!_this.sort) { return; } + + // get column + var name = $(this).attr(COL_DATA_ATTR); + if (!name) { return; } + + // sort order + var arrowClass; + if (gs.sortOrder === name && gs.sortAsc === true) { + gs.sortAsc = false; + arrowClass = gs.arrowDownIcon; + } else { + gs.sortOrder = name; + gs.sortAsc = true; + arrowClass = gs.arrowUpIcon; + } + + // add sort arrow + $(this).closest('.jstree-table-wrapper').find(".jstree-table-sort-icon").remove(); + $("").addClass("jstree-table-sort-icon").appendTo($(this)).addClass(arrowClass); + + // sort by column + var rootNode = _this.get_node('#'); + _this.sort(rootNode, true); + _this.redraw_node(rootNode, true); + }); + + // header context menu + this.midWrapper.on("contextmenu", ".jstree-table-header-cell", function(e) { + if (!gs.headerContextMenu) { return; } + e.preventDefault(); + + var options = { + "fit":{label:"Size column to fit","action": function (data) { + var col = $(e.target).closest("div.jstree-table-column"); + _this.autosize_column(col); + }}, + "fitAll":{"separator_after": true,label:"Size all columns to fit","action": function (data) { + _this.autosize_all_columns(); + }} + }; + + // create menu item for every header cell + var cell, icon, value, label; + _this.midWrapper.find(".jstree-table-header-cell").each(function() { + cell = $(this); + icon = cell.is(":visible") ? gs.checkIcon : false; + value = cell.attr(COL_DATA_ATTR); + //get label without sorting arrows + label = cell.clone().children('.jstree-table-sort-icon').remove().end().text().trim(); + + options[value] = {icon:icon, column:value, label:label, _disabled: (value === 'text'), "action": function (data) { + var col = _this.midWrapper.find(".jstree-table-header-cell["+COL_DATA_ATTR+"='"+data.item.column+"']").parent(); + col.toggle(); + }}; + }); + + $.vakata.context.show(this,{ 'x' : e.pageX, 'y' : e.pageY },options); + }); + }; + /* + * Override redraw_node to correctly insert the table + */ + this.redraw_node = function(obj, deep, is_callback, force_render) { + // first allow the parent to redraw the node + obj = parent.redraw_node.call(this, obj, deep, is_callback, force_render); + // next prepare the table + if(obj) { + this._prepare_table(obj); + } + return obj; + }; + this.refresh = function () { + this._clean_table(); + return parent.refresh.apply(this,arguments); + }; + /* + * Override set_id to update cell attributes + */ + this.set_id = function (obj, id) { + var old; + if(obj) { + old = obj.id; + } + var result = parent.set_id.apply(this,arguments); + if(result) { + if (old !== undefined) { + var table = this.tableWrapper, oldNodes = [old], i; + // get children + if (obj && obj.children_d) { + oldNodes = oldNodes.concat(obj.children_d); + } + // update id in children + for (i=0;i", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"), + h2 = $("<"+"input />", { + "value" : t, + "class" : "jstree-rename-input", + "css" : { + "padding" : "0", + "border" : "1px solid silver", + "box-sizing" : "border-box", + "display" : "inline-block", + "height" : (this._data.core.li_height) + "px", + "lineHeight" : (this._data.core.li_height) + "px", + "width" : "150px" // will be set a bit further down + }, + "blur" : $.proxy(function () { + var v = h2.val(); + // save the value if changed + if(v === "" || v === t) { + v = t; + } else { + obj.data[col.value] = v; + this.element.trigger('update_cell.jstree-table',{node:obj, col:col.value, value:v, old:t}); + this._prepare_table(this.get_node(obj,true)); + } + h2.remove(); + element.show(); + }, this), + "keydown" : function (event) { + var key = event.which; + if(key === 27) { + this.value = t; + } + if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { + event.stopImmediatePropagation(); + } + if(key === 27 || key === 13) { + event.preventDefault(); + this.blur(); + } + }, + "click" : function (e) { e.stopImmediatePropagation(); }, + "mousedown" : function (e) { e.stopImmediatePropagation(); }, + "keyup" : function (event) { + h2.width(Math.min(h1.text("pW" + this.value).width(),w)); + }, + "keypress" : function(event) { + if(event.which === 13) { return false; } + } + }), + fn = { + fontFamily : element.css('fontFamily') || '', + fontSize : element.css('fontSize') || '', + fontWeight : element.css('fontWeight') || '', + fontStyle : element.css('fontStyle') || '', + fontStretch : element.css('fontStretch') || '', + fontVariant : element.css('fontVariant') || '', + letterSpacing : element.css('letterSpacing') || '', + wordSpacing : element.css('wordSpacing') || '' + }; + element.hide(); + element.parent().append(h2); + h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); + }; + + this.autosize_column = function (col) { + // don't resize hidden columns + if (col.is(":hidden")) { return; } + + var oldPrevColWidth = parseFloat(col.css("width")), newWidth = 0, diff, + colNum = col.prevAll(".jstree-table-column").length, + oldPrevHeaderInner = col.width(), newPrevColWidth; + + //find largest width + col.find(".jstree-table-cell").each(function() { + var item = $(this), width; + item.css("position", "absolute"); + item.css("width", "auto"); + width = item.outerWidth(); + item.css("position", "relative"); + + if (width>newWidth) { + newWidth = width; + } + }); + + diff = newWidth-oldPrevColWidth; + + // make sure that diff cannot be beyond the left limits + diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; + newPrevColWidth = (oldPrevColWidth+diff)+"px"; + + col.width(newPrevColWidth); + col.css("min-width",newPrevColWidth); + col.css("max-width",newPrevColWidth); + + $(this).closest(".jstree-table-wrapper").find(".jstree").trigger("resize_column.jstree-table",[colNum,newPrevColWidth]); + }; + + this.autosize_all_columns = function () { + this.tableWrapper.find(".jstree-table-column").each(function() { + _this.autosize_column($(this)); + }); + }; + + this._prepare_table = function (obj) { + var gs = this._tableSettings, c = gs.treeClass, _this = this, t, cols = gs.columns || [], width, tr = gs.isThemeroller, + tree = this.element, rootid = this.rootid, + classAdd = (tr?"themeroller":"regular"), img, objData = this.get_node(obj), + defaultWidth = gs.columnWidth, conf = gs.defaultConf, cellClickHandler = function (tree,node,val,col,t) { + return function(e) { + //node = tree.find("#"+node.attr("id")); + node.children(".jstree-anchor").trigger("click.jstree",e); + tree.trigger("select_cell.jstree-table", [{value: val,column: col.header,node: node,table:$(this),sourceName: col.value}]); + }; + }, cellRightClickHandler = function (tree,node,val,col,t) { + return function (e) { + if (gs.context) { + e.preventDefault(); + $.vakata.context.show(this,{ 'x' : e.pageX, 'y' : e.pageY },{ + "edit":{label:"Edit","action": function (data) { + var obj = t.get_node(node); + _this._edit(obj,col,e.target); + }} + }); + } + }; + }, + hoverInHandler = function (node, jsTreeInstance) { + return function() { jsTreeInstance.hover_node(node); }; + }, + hoverOutHandler = function (node, jsTreeInstance) { + return function() { jsTreeInstance.dehover_node(node); }; + }, + i, val, cl, wcl, ccl, a, last, valClass, wideValClass, span, paddingleft, title, tableCellName, tableCellParentId, tableCellParent, + tableCellPrev, tableCellPrevId, tableCellNext, tableCellNextId, tableCellChild, tableCellChildId, + col, content, tmpWidth, mw = this.midWrapper, dataCell, lid = objData.id, + peers = this.get_node(objData.parent).children, + // find my position in the list of peers. "peers" is the list of everyone at my level under my parent, in order + pos = $.inArray(lid,peers), + hc = this.holdingCells, rendered = false, closed; + // get our column definition + t = $(obj); + + // find the a children + a = t.children("a"); + + if (a.length === 1) { + closed = !objData.state.opened; + tableCellName = TABLECELLID_PREFIX+escapeId(lid)+TABLECELLID_POSTFIX; + tableCellParentId = objData.parent === "#" ? null : objData.parent; + a.addClass(c); + //renderAWidth(a,_this); + renderATitle(a,t,_this); + last = a; + // find which column our tree shuld go in + var s = this.settings.table; + var treecol = 0; + for (i=0;i
    ' : '';} + } else { content = val; } + + // content cannot be blank, or it messes up heights + if (content === undefined || content === null || BLANKRE.test(content)) { + content = " "; + } + + // get the valueClass + valClass = col.valueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.valueClass] || "" : ""; + if (valClass && col.valueClassPrefix && col.valueClassPrefix !== "") { + valClass = col.valueClassPrefix + valClass; + } + // get the wideValueClass + wideValClass = col.wideValueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.wideValueClass] || "" : ""; + if (wideValClass && col.wideValueClassPrefix && col.wideValueClassPrefix !== "") { + wideValClass = col.wideValueClassPrefix + wideValClass; + } + // get the title + title = col.title && objData.data !== null && objData.data !== undefined ? objData.data[col.title] || "" : ""; + // strip out HTML + if (typeof title === 'string') { + title = title.replace(htmlstripre, ''); + } + + // get the width + paddingleft = 7; + width = col.width || defaultWidth; + if (width !== 'auto') { + width = tmpWidth || (width - paddingleft); + } + + last = findDataCell(dataCell, lid); + if (!last || last.length < 1) { + last = $("
    "); + $("").appendTo(last); + last.attr("id",tableCellName+i); + last.addClass(tableCellName); + last.attr(NODE_DATA_ATTR,lid); + + } + // we need to put it in the dataCell - after the parent, but the position matters + // if we have no parent, then we are one of the root nodes, but still need to look at peers + + + // if we are first, i.e. pos === 0, we go right after the parent; + // if we are not first, and our previous peer (one before us) is closed, we go right after the previous peer cell + // if we are not first, and our previous peer is opened, then we have to find its youngest & lowest closed child (incl. leaf) + // + // probably be much easier to go *before* our next one + // but that one might not be drawn yet + // here is the logic for jstree drawing: + // it draws peers from first to last or from last to first + // it draws children before a parent + // + // so I can rely on my *parent* not being drawn, but I cannot rely on my previous peer or my next peer being drawn + + // so we do the following: + // 1- We are the first child: install after the parent + // 2- Our previous peer is already drawn: install after the previous peer + // 3- Our previous peer is not drawn, we have a child that is drawn: install right before our first child + // 4- Our previous peer is not drawn, we have no child that is drawn, our next peer is drawn: install right before our next peer + // 5- Our previous peer is not drawn, we have no child that is drawn, our next peer is not drawn: install right after parent + tableCellPrevId = pos <=0 ? objData.parent : findLastClosedNode(this,peers[pos-1]); + tableCellPrev = findDataCell(dataCell,tableCellPrevId); + tableCellNextId = pos >= peers.length-1 ? "NULL" : peers[pos+1]; + tableCellNext = findDataCell(dataCell,tableCellNextId); + tableCellChildId = objData.children && objData.children.length > 0 ? objData.children[0] : "NULL"; + tableCellChild = findDataCell(dataCell,tableCellChildId); + tableCellParent = findDataCell(dataCell,tableCellParentId); + + // if our parent is already drawn, then we put this in the right order under our parent + if (tableCellParentId) { + if (tableCellParent && tableCellParent.length > 0) { + if (tableCellPrev && tableCellPrev.length > 0) { + last.insertAfter(tableCellPrev); + } else if (tableCellChild && tableCellChild.length > 0) { + last.insertBefore(tableCellChild); + } else if (tableCellNext && tableCellNext.length > 0) { + last.insertBefore(tableCellNext); + } else { + last.insertAfter(tableCellParent); + } + rendered = true; + } else { + rendered = false; + } + // always put it in the holding cells, and then sort when the parent comes in, in case parent is (re)drawn later + hc[tableCellName+i] = last; + } else { + if (tableCellPrev && tableCellPrev.length > 0) { + last.insertAfter(tableCellPrev); + } else if (tableCellChild && tableCellChild.length > 0) { + last.insertBefore(tableCellChild); + } else if (tableCellNext && tableCellNext.length > 0) { + last.insertBefore(tableCellNext); + } else { + last.appendTo(dataCell); + } + rendered = true; + } + // do we have any children waiting for this cell? walk down through the children/grandchildren/etc tree + if (rendered) { + last.after(this.getHoldingCells(objData,i,hc)); + } + // need to make the height of this match the line height of the tree. How? + span = last.children("span"); + + // create a span inside the div, so we can control what happens in the whole div versus inside just the text/background + span.addClass(cl+" "+valClass).html(content); + last = last.css(conf).addClass("jstree-table-cell jstree-table-cell-regular jstree-table-cell-root-"+rootid+" jstree-table-cell-"+classAdd+" "+wcl+ " " + wideValClass + (tr?" ui-state-default":"")).addClass("jstree-table-col-"+i); + // add click handler for clicking inside a table cell + last.click(cellClickHandler(tree,t,val,col,this)); + last.on("contextmenu",cellRightClickHandler(tree,t,val,col,this)); + last.hover(hoverInHandler(t, this), hoverOutHandler(t, this)); + + if (title) { + span.attr("title",title); + } + } + last.addClass("jstree-table-cell-last"+(tr?" ui-state-default":"")); + // if there is no width given for the last column, do it via automatic + if (cols[cols.length-1].width === undefined) { + last.addClass("jstree-table-width-auto").next(".jstree-table-separator").remove(); + } + } + this.element.css({'overflow-y':'auto !important'}); + }; + // clean up holding cells + this.holdingCells = {}; + }; +})); \ No newline at end of file diff --git a/mfr/extensions/zip/static/jstree-theme/32px.png b/mfr/extensions/zip/static/jstree-theme/32px.png new file mode 100755 index 0000000000000000000000000000000000000000..15327152481789306eadef88393cd1c748dc31a7 GIT binary patch literal 3121 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 q$a=%VWn+k|UtiDv&>%>!2^rk(D6aNK_^-%!; literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/jstree-theme/40px.png b/mfr/extensions/zip/static/jstree-theme/40px.png new file mode 100755 index 0000000000000000000000000000000000000000..1959347aea041d75a58d0584ea7ec51714797983 GIT binary patch literal 1880 zcmZ`)doPK^x}L8xo#OE#OkB~$LGr;}=FbpxeWUvbGmLn1DXa;HsQK~D7_{^sq2 z^fni3chvJ5$YKUAlPB<%YYsGqZ3*PyX7OjPSmNI*c$WG!up*Jd*}3 zyaNUJH)Q(CkAGRYx9(QF6|av~uGv)1Y;;XvzcpOJ6RwjX&Aq_Aw}!?@ks55jzGfWq zHi2b^qzQ-8bl-&6a#)X#NWKfdin__%Ol?}CAS&@2z3m-#8{JmeH=J{JF%S+MQ5YWYP20_w8qRF6(+-b#Trf> zo_2Ahj>H8mS@~xq^k9LXSkqS5UA65dkI8zx!mlGSfKyE;s4Src2P4*>GKW637{uPZ zn41TS!b0I%aCMOGtR7_5i0R^u?Z1kp6{@2~AH^7slz&0Qj|5)78I0s6dlVU{)cQrP zeNGP#HlU^~-R%ecwQ5d4f89gT`1oM|(Ofc=m=oyYg2-k3n{hQ$7?G# z&FPF6FFv(B1kEI;9zR$1bF}BYcUcz6lkHP>F~*Z@^?L7Dwi265tsN>ESDZo%}%mSZ>gVZrQEHe#NWr4C*NSf*0NrTPY+o|6J6YC;=zHNu2 z8bz_U4ETk(5(4ZKzU=r-bX5C~YoQu69_!Kg_;tIz@|bcZeUDp?>LM|N ziJp5yVxnWe6Y7OqZ0sqz9>rV_e8%6p;7r{y(wfYhJK>k?%R9^#}q@xkWO6(y$(5^YBRpql1{)zuK zbrtwwtit>e;@%w>h7p&2<37Z3Q~Of2IoVshosA0BYcm}a31kTD@b5Y^cq1>Lz~v#* z=I3$&3b7mLgtwj%M~`+Qvt=#z{qJiwXm0kiXWM^#JaGk!bF6zb=stF+fn62*;^IMV z;8jniInrmfUG6KNlUC^lV!pmFFQ+Bb!%x?kA|oelOOeQZy&ZYzuw;)RIQ$l#&^K8* z0OFJoe{kr3Me>S$Wc!cxtzZ7K-m>EtO!YQ<*Jwhovtf3=v?o4fP-T|cmxOL~h!|$H iV&_@$q2+YC87j9T{b5} .jstree-ocl { + cursor: default; +} +.jstree .jstree-open > .jstree-children { + display: block; +} +.jstree .jstree-closed > .jstree-children, +.jstree .jstree-leaf > .jstree-children { + display: none; +} +.jstree-anchor > .jstree-themeicon { + margin-right: 2px; +} +.jstree-no-icons .jstree-themeicon, +.jstree-anchor > .jstree-themeicon-hidden { + display: none; +} +.jstree-hidden, +.jstree-node.jstree-hidden { + display: none; +} +.jstree-rtl .jstree-anchor { + padding: 0 1px 0 4px; +} +.jstree-rtl .jstree-anchor > .jstree-themeicon { + margin-left: 2px; + margin-right: 0; +} +.jstree-rtl .jstree-node { + margin-left: 0; +} +.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; +} +.jstree-wholerow-ul { + position: relative; + display: inline-block; + min-width: 100%; +} +.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { + cursor: pointer; +} +.jstree-wholerow-ul .jstree-anchor, +.jstree-wholerow-ul .jstree-icon { + position: relative; +} +.jstree-wholerow-ul .jstree-wholerow { + width: 100%; + cursor: pointer; + position: absolute; + left: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.jstree-contextmenu .jstree-anchor { + -webkit-user-select: none; + /* disable selection/Copy of UIWebView */ + -webkit-touch-callout: none; + /* disable the IOS popup when long-press on a link */ +} +.vakata-context { + display: none; +} +.vakata-context, +.vakata-context ul { + margin: 0; + padding: 2px; + position: absolute; + background: #f5f5f5; + border: 1px solid #979797; + box-shadow: 2px 2px 2px #999999; +} +.vakata-context ul { + list-style: none; + left: 100%; + margin-top: -2.7em; + margin-left: -4px; +} +.vakata-context .vakata-context-right ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context li { + list-style: none; +} +.vakata-context li > a { + display: block; + padding: 0 2em 0 2em; + text-decoration: none; + width: auto; + color: black; + white-space: nowrap; + line-height: 2.4em; + text-shadow: 1px 1px 0 white; + border-radius: 1px; +} +.vakata-context li > a:hover { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); + background-position: right center; + background-repeat: no-repeat; +} +.vakata-context li > a:focus { + outline: 0; +} +.vakata-context .vakata-context-hover > a { + position: relative; + background-color: #e8eff7; + box-shadow: 0 0 2px #0a6aa1; +} +.vakata-context .vakata-context-separator > a, +.vakata-context .vakata-context-separator > a:hover { + background: white; + border: 0; + border-top: 1px solid #e2e3e3; + height: 1px; + min-height: 1px; + max-height: 1px; + padding: 0; + margin: 0 0 0 2.4em; + border-left: 1px solid #e0e0e0; + text-shadow: 0 0 0 transparent; + box-shadow: 0 0 0 transparent; + border-radius: 0; +} +.vakata-context .vakata-contextmenu-disabled a, +.vakata-context .vakata-contextmenu-disabled a:hover { + color: silver; + background-color: transparent; + border: 0; + box-shadow: 0 0 0; +} +.vakata-context li > a > i { + text-decoration: none; + display: inline-block; + width: 2.4em; + height: 2.4em; + background: transparent; + margin: 0 0 0 -2em; + vertical-align: top; + text-align: center; + line-height: 2.4em; +} +.vakata-context li > a > i:empty { + width: 2.4em; + line-height: 2.4em; +} +.vakata-context li > a .vakata-contextmenu-sep { + display: inline-block; + width: 1px; + height: 2.4em; + background: white; + margin: 0 0.5em 0 0; + border-left: 1px solid #e2e3e3; +} +.vakata-context .vakata-contextmenu-shortcut { + font-size: 0.8em; + color: silver; + opacity: 0.5; + display: none; +} +.vakata-context-rtl ul { + left: auto; + right: 100%; + margin-left: auto; + margin-right: -4px; +} +.vakata-context-rtl li > a.vakata-context-parent { + background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); + background-position: left center; + background-repeat: no-repeat; +} +.vakata-context-rtl .vakata-context-separator > a { + margin: 0 2.4em 0 0; + border-left: 0; + border-right: 1px solid #e2e3e3; +} +.vakata-context-rtl .vakata-context-left ul { + right: auto; + left: 100%; + margin-left: -4px; + margin-right: auto; +} +.vakata-context-rtl li > a > i { + margin: 0 -2em 0 0; +} +.vakata-context-rtl li > a .vakata-contextmenu-sep { + margin: 0 0 0 0.5em; + border-left-color: white; + background: #e2e3e3; +} +#jstree-marker { + position: absolute; + top: 0; + left: 0; + margin: -5px 0 0 0; + padding: 0; + border-right: 0; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid; + width: 0; + height: 0; + font-size: 0; + line-height: 0; +} +#jstree-dnd { + line-height: 16px; + margin: 0; + padding: 4px; +} +#jstree-dnd .jstree-icon, +#jstree-dnd .jstree-copy { + display: inline-block; + text-decoration: none; + margin: 0 2px 0 0; + padding: 0; + width: 16px; + height: 16px; +} +#jstree-dnd .jstree-ok { + background: green; +} +#jstree-dnd .jstree-er { + background: red; +} +#jstree-dnd .jstree-copy { + margin: 0 2px 0 2px; +} +.jstree-default .jstree-node, +.jstree-default .jstree-icon { + background-repeat: no-repeat; + background-color: transparent; +} +.jstree-default .jstree-anchor, +.jstree-default .jstree-animated, +.jstree-default .jstree-wholerow { + transition: background-color 0.15s, box-shadow 0.15s; +} +.jstree-default .jstree-hovered { + background: #e7f4f9; + border-radius: 2px; + box-shadow: inset 0 0 1px #cccccc; +} +.jstree-default .jstree-context { + background: #e7f4f9; + border-radius: 2px; + box-shadow: inset 0 0 1px #cccccc; +} +.jstree-default .jstree-clicked { + background: #beebff; + border-radius: 2px; + box-shadow: inset 0 0 1px #999999; +} +.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { + display: none; +} +.jstree-default .jstree-disabled { + background: transparent; + color: #666666; +} +.jstree-default .jstree-disabled.jstree-hovered { + background: transparent; + box-shadow: none; +} +.jstree-default .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default .jstree-disabled > .jstree-icon { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default .jstree-search { + font-style: italic; + color: #8b0000; + font-weight: bold; +} +.jstree-default .jstree-no-checkboxes .jstree-checkbox { + display: none !important; +} +.jstree-default.jstree-checkbox-no-clicked .jstree-clicked { + background: transparent; + box-shadow: none; +} +.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { + background: #e7f4f9; +} +.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { + background: transparent; +} +.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { + background: #e7f4f9; +} +.jstree-default > .jstree-striped { + min-width: 100%; + display: inline-block; + background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; +} +.jstree-default > .jstree-wholerow-ul .jstree-hovered, +.jstree-default > .jstree-wholerow-ul .jstree-clicked { + background: transparent; + box-shadow: none; + border-radius: 0; +} +.jstree-default .jstree-wholerow { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} +.jstree-default .jstree-wholerow-hovered { + background: #e7f4f9; +} +.jstree-default .jstree-wholerow-clicked { + background: #beebff; + background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); + background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); +} +.jstree-default .jstree-node { + min-height: 24px; + line-height: 24px; + margin-left: 24px; + min-width: 24px; +} +.jstree-default .jstree-anchor { + line-height: 24px; + height: 24px; +} +.jstree-default .jstree-icon { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default .jstree-icon:empty { + width: 24px; + height: 24px; + line-height: 24px; +} +.jstree-default.jstree-rtl .jstree-node { + margin-right: 24px; +} +.jstree-default .jstree-wholerow { + height: 24px; +} +.jstree-default .jstree-node, +.jstree-default .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default .jstree-node { + background-position: -292px -4px; + background-repeat: repeat-y; +} +.jstree-default .jstree-last { + background: transparent; +} +.jstree-default .jstree-open > .jstree-ocl { + background-position: -132px -4px; +} +.jstree-default .jstree-closed > .jstree-ocl { + background-position: -100px -4px; +} +.jstree-default .jstree-leaf > .jstree-ocl { + background-position: -68px -4px; +} +.jstree-default .jstree-themeicon { + background-position: -260px -4px; +} +.jstree-default > .jstree-no-dots .jstree-node, +.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -4px; +} +.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -4px; +} +.jstree-default .jstree-disabled { + background: transparent; +} +.jstree-default .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default .jstree-checkbox { + background-position: -164px -4px; +} +.jstree-default .jstree-checkbox:hover { + background-position: -164px -36px; +} +.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default .jstree-checked > .jstree-checkbox { + background-position: -228px -4px; +} +.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default .jstree-checked > .jstree-checkbox:hover { + background-position: -228px -36px; +} +.jstree-default .jstree-anchor > .jstree-undetermined { + background-position: -196px -4px; +} +.jstree-default .jstree-anchor > .jstree-undetermined:hover { + background-position: -196px -36px; +} +.jstree-default .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default > .jstree-striped { + background-size: auto 48px; +} +.jstree-default.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -132px -36px; +} +.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -100px -36px; +} +.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -68px -36px; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -36px -36px; +} +.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -4px -36px; +} +.jstree-default .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default .jstree-file { + background: url("32px.png") -100px -68px no-repeat; +} +.jstree-default .jstree-folder { + background: url("32px.png") -260px -4px no-repeat; +} +.jstree-default > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default { + line-height: 24px; + padding: 0 4px; +} +#jstree-dnd.jstree-default .jstree-ok, +#jstree-dnd.jstree-default .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default i { + background: transparent; + width: 24px; + height: 24px; + line-height: 24px; +} +#jstree-dnd.jstree-default .jstree-ok { + background-position: -4px -68px; +} +#jstree-dnd.jstree-default .jstree-er { + background-position: -36px -68px; +} +.jstree-default .jstree-ellipsis { + overflow: hidden; +} +.jstree-default .jstree-ellipsis .jstree-anchor { + width: calc(100% - 29px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor { + width: calc(100% - 5px); +} +.jstree-default.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); +} +.jstree-default.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-small .jstree-node { + min-height: 18px; + line-height: 18px; + margin-left: 18px; + min-width: 18px; +} +.jstree-default-small .jstree-anchor { + line-height: 18px; + height: 18px; +} +.jstree-default-small .jstree-icon { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-small .jstree-icon:empty { + width: 18px; + height: 18px; + line-height: 18px; +} +.jstree-default-small.jstree-rtl .jstree-node { + margin-right: 18px; +} +.jstree-default-small .jstree-wholerow { + height: 18px; +} +.jstree-default-small .jstree-node, +.jstree-default-small .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-small .jstree-node { + background-position: -295px -7px; + background-repeat: repeat-y; +} +.jstree-default-small .jstree-last { + background: transparent; +} +.jstree-default-small .jstree-open > .jstree-ocl { + background-position: -135px -7px; +} +.jstree-default-small .jstree-closed > .jstree-ocl { + background-position: -103px -7px; +} +.jstree-default-small .jstree-leaf > .jstree-ocl { + background-position: -71px -7px; +} +.jstree-default-small .jstree-themeicon { + background-position: -263px -7px; +} +.jstree-default-small > .jstree-no-dots .jstree-node, +.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -7px; +} +.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -7px; +} +.jstree-default-small .jstree-disabled { + background: transparent; +} +.jstree-default-small .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-small .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-small .jstree-checkbox { + background-position: -167px -7px; +} +.jstree-default-small .jstree-checkbox:hover { + background-position: -167px -39px; +} +.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-small .jstree-checked > .jstree-checkbox { + background-position: -231px -7px; +} +.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-small .jstree-checked > .jstree-checkbox:hover { + background-position: -231px -39px; +} +.jstree-default-small .jstree-anchor > .jstree-undetermined { + background-position: -199px -7px; +} +.jstree-default-small .jstree-anchor > .jstree-undetermined:hover { + background-position: -199px -39px; +} +.jstree-default-small .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-small > .jstree-striped { + background-size: auto 36px; +} +.jstree-default-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -135px -39px; +} +.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -103px -39px; +} +.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -71px -39px; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -39px -39px; +} +.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: -7px -39px; +} +.jstree-default-small .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-small .jstree-file { + background: url("32px.png") -103px -71px no-repeat; +} +.jstree-default-small .jstree-folder { + background: url("32px.png") -263px -7px no-repeat; +} +.jstree-default-small > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-small { + line-height: 18px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-small .jstree-ok, +#jstree-dnd.jstree-default-small .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-small i { + background: transparent; + width: 18px; + height: 18px; + line-height: 18px; +} +#jstree-dnd.jstree-default-small .jstree-ok { + background-position: -7px -71px; +} +#jstree-dnd.jstree-default-small .jstree-er { + background-position: -39px -71px; +} +.jstree-default-small .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-small .jstree-ellipsis .jstree-anchor { + width: calc(100% - 23px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor { + width: calc(100% - 5px); +} +.jstree-default-small.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); +} +.jstree-default-small.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-large .jstree-node { + min-height: 32px; + line-height: 32px; + margin-left: 32px; + min-width: 32px; +} +.jstree-default-large .jstree-anchor { + line-height: 32px; + height: 32px; +} +.jstree-default-large .jstree-icon { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-large .jstree-icon:empty { + width: 32px; + height: 32px; + line-height: 32px; +} +.jstree-default-large.jstree-rtl .jstree-node { + margin-right: 32px; +} +.jstree-default-large .jstree-wholerow { + height: 32px; +} +.jstree-default-large .jstree-node, +.jstree-default-large .jstree-icon { + background-image: url("32px.png"); +} +.jstree-default-large .jstree-node { + background-position: -288px 0px; + background-repeat: repeat-y; +} +.jstree-default-large .jstree-last { + background: transparent; +} +.jstree-default-large .jstree-open > .jstree-ocl { + background-position: -128px 0px; +} +.jstree-default-large .jstree-closed > .jstree-ocl { + background-position: -96px 0px; +} +.jstree-default-large .jstree-leaf > .jstree-ocl { + background-position: -64px 0px; +} +.jstree-default-large .jstree-themeicon { + background-position: -256px 0px; +} +.jstree-default-large > .jstree-no-dots .jstree-node, +.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px 0px; +} +.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px 0px; +} +.jstree-default-large .jstree-disabled { + background: transparent; +} +.jstree-default-large .jstree-disabled.jstree-hovered { + background: transparent; +} +.jstree-default-large .jstree-disabled.jstree-clicked { + background: #efefef; +} +.jstree-default-large .jstree-checkbox { + background-position: -160px 0px; +} +.jstree-default-large .jstree-checkbox:hover { + background-position: -160px -32px; +} +.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, +.jstree-default-large .jstree-checked > .jstree-checkbox { + background-position: -224px 0px; +} +.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, +.jstree-default-large .jstree-checked > .jstree-checkbox:hover { + background-position: -224px -32px; +} +.jstree-default-large .jstree-anchor > .jstree-undetermined { + background-position: -192px 0px; +} +.jstree-default-large .jstree-anchor > .jstree-undetermined:hover { + background-position: -192px -32px; +} +.jstree-default-large .jstree-checkbox-disabled { + opacity: 0.8; + filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); + /* Firefox 10+ */ + filter: gray; + /* IE6-9 */ + -webkit-filter: grayscale(100%); + /* Chrome 19+ & Safari 6+ */ +} +.jstree-default-large > .jstree-striped { + background-size: auto 64px; +} +.jstree-default-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); + background-position: 100% 1px; + background-repeat: repeat-y; +} +.jstree-default-large.jstree-rtl .jstree-last { + background: transparent; +} +.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { + background-position: -128px -32px; +} +.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -96px -32px; +} +.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { + background-position: -64px -32px; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { + background: transparent; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { + background-position: -32px -32px; +} +.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { + background-position: 0px -32px; +} +.jstree-default-large .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; +} +.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { + background: url("throbber.gif") center center no-repeat; +} +.jstree-default-large .jstree-file { + background: url("32px.png") -96px -64px no-repeat; +} +.jstree-default-large .jstree-folder { + background: url("32px.png") -256px 0px no-repeat; +} +.jstree-default-large > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; +} +#jstree-dnd.jstree-default-large { + line-height: 32px; + padding: 0 4px; +} +#jstree-dnd.jstree-default-large .jstree-ok, +#jstree-dnd.jstree-default-large .jstree-er { + background-image: url("32px.png"); + background-repeat: no-repeat; + background-color: transparent; +} +#jstree-dnd.jstree-default-large i { + background: transparent; + width: 32px; + height: 32px; + line-height: 32px; +} +#jstree-dnd.jstree-default-large .jstree-ok { + background-position: 0px -64px; +} +#jstree-dnd.jstree-default-large .jstree-er { + background-position: -32px -64px; +} +.jstree-default-large .jstree-ellipsis { + overflow: hidden; +} +.jstree-default-large .jstree-ellipsis .jstree-anchor { + width: calc(100% - 37px); + text-overflow: ellipsis; + overflow: hidden; +} +.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor { + width: calc(100% - 5px); +} +.jstree-default-large.jstree-rtl .jstree-node { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); +} +.jstree-default-large.jstree-rtl .jstree-last { + background: transparent; +} +@media (max-width: 768px) { + #jstree-dnd.jstree-dnd-responsive { + line-height: 40px; + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + #jstree-dnd.jstree-dnd-responsive > i { + background: transparent; + width: 40px; + height: 40px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-ok { + background-image: url("40px.png"); + background-position: 0 -200px; + background-size: 120px 240px; + } + #jstree-dnd.jstree-dnd-responsive > .jstree-er { + background-image: url("40px.png"); + background-position: -40px -200px; + background-size: 120px 240px; + } + #jstree-marker.jstree-dnd-responsive { + border-left-width: 10px; + border-top-width: 10px; + border-bottom-width: 10px; + margin-top: -10px; + } +} +@media (max-width: 768px) { + .jstree-default-responsive { + /* + .jstree-open > .jstree-ocl, + .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } + */ + } + .jstree-default-responsive .jstree-icon { + background-image: url("40px.png"); + } + .jstree-default-responsive .jstree-node, + .jstree-default-responsive .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-responsive .jstree-node { + min-height: 40px; + line-height: 40px; + margin-left: 40px; + min-width: 40px; + white-space: nowrap; + } + .jstree-default-responsive .jstree-anchor { + line-height: 40px; + height: 40px; + } + .jstree-default-responsive .jstree-icon, + .jstree-default-responsive .jstree-icon:empty { + width: 40px; + height: 40px; + line-height: 40px; + } + .jstree-default-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + } + .jstree-default-responsive.jstree-rtl .jstree-node { + margin-left: 0; + margin-right: 40px; + background: transparent; + } + .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { + margin-right: 0; + } + .jstree-default-responsive .jstree-ocl, + .jstree-default-responsive .jstree-themeicon, + .jstree-default-responsive .jstree-checkbox { + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-leaf > .jstree-ocl, + .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { + background: transparent; + } + .jstree-default-responsive .jstree-open > .jstree-ocl { + background-position: 0 0px !important; + } + .jstree-default-responsive .jstree-closed > .jstree-ocl { + background-position: 0 -40px !important; + } + .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { + background-position: -40px 0px !important; + } + .jstree-default-responsive .jstree-themeicon { + background-position: -40px -40px; + } + .jstree-default-responsive .jstree-checkbox, + .jstree-default-responsive .jstree-checkbox:hover { + background-position: -40px -80px; + } + .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, + .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, + .jstree-default-responsive .jstree-checked > .jstree-checkbox, + .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { + background-position: 0 -80px; + } + .jstree-default-responsive .jstree-anchor > .jstree-undetermined, + .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { + background-position: 0 -120px; + } + .jstree-default-responsive .jstree-anchor { + font-weight: bold; + font-size: 1.1em; + text-shadow: 1px 1px white; + } + .jstree-default-responsive > .jstree-striped { + background: transparent; + } + .jstree-default-responsive .jstree-wholerow { + border-top: 1px solid rgba(255, 255, 255, 0.7); + border-bottom: 1px solid rgba(64, 64, 64, 0.2); + background: #ebebeb; + height: 40px; + } + .jstree-default-responsive .jstree-wholerow-hovered { + background: #e7f4f9; + } + .jstree-default-responsive .jstree-wholerow-clicked { + background: #beebff; + } + .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { + box-shadow: inset 0 -6px 3px -5px #666666; + } + .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { + box-shadow: inset 0 6px 3px -5px #666666; + border-top: 0; + } + .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { + box-shadow: none; + } + .jstree-default-responsive .jstree-node, + .jstree-default-responsive .jstree-icon, + .jstree-default-responsive .jstree-node > .jstree-ocl, + .jstree-default-responsive .jstree-themeicon, + .jstree-default-responsive .jstree-checkbox { + background-image: url("40px.png"); + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-node { + background-position: -80px 0; + background-repeat: repeat-y; + } + .jstree-default-responsive .jstree-last { + background: transparent; + } + .jstree-default-responsive .jstree-leaf > .jstree-ocl { + background-position: -40px -120px; + } + .jstree-default-responsive .jstree-last > .jstree-ocl { + background-position: -40px -160px; + } + .jstree-default-responsive .jstree-themeicon-custom { + background-color: transparent; + background-image: none; + background-position: 0 0; + } + .jstree-default-responsive .jstree-file { + background: url("40px.png") 0 -160px no-repeat; + background-size: 120px 240px; + } + .jstree-default-responsive .jstree-folder { + background: url("40px.png") -40px -40px no-repeat; + background-size: 120px 240px; + } + .jstree-default-responsive > .jstree-container-ul > .jstree-node { + margin-left: 0; + margin-right: 0; + } +} diff --git a/mfr/extensions/zip/static/jstree-theme/style.min.css b/mfr/extensions/zip/static/jstree-theme/style.min.css new file mode 100755 index 000000000..f9822c747 --- /dev/null +++ b/mfr/extensions/zip/static/jstree-theme/style.min.css @@ -0,0 +1 @@ +.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden,.jstree-node.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jstree-contextmenu .jstree-anchor{-webkit-user-select:none;-webkit-touch-callout:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-animated,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-context{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default .jstree-ellipsis{overflow:hidden}.jstree-default .jstree-ellipsis .jstree-anchor{width:calc(100% - 29px);text-overflow:ellipsis;overflow:hidden}.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small .jstree-ellipsis{overflow:hidden}.jstree-default-small .jstree-ellipsis .jstree-anchor{width:calc(100% - 23px);text-overflow:ellipsis;overflow:hidden}.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large .jstree-ellipsis{overflow:hidden}.jstree-default-large .jstree-ellipsis .jstree-anchor{width:calc(100% - 37px);text-overflow:ellipsis;overflow:hidden}.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor{width:calc(100% - 5px)}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px;background:0 0}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl,.jstree-default-responsive.jstree-rtl .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}} \ No newline at end of file diff --git a/mfr/extensions/zip/static/jstree-theme/throbber.gif b/mfr/extensions/zip/static/jstree-theme/throbber.gif new file mode 100755 index 0000000000000000000000000000000000000000..1b5b2fde42f8ea14e6981339196a9d62b681d79e GIT binary patch literal 1720 zcmZ|OYfMvT7zgm4p2O+ea@rnBg#)OxTPX)YQxLES+gfgxVz~&+f}$;m6s%Hi3W%nq zP@z^qrV}=TNF%FL8K5q@MN>cp#S0pVI*qHSli{|&j8i`-D~lhy5AU}p`Tz2N-e*-( zqBu&8Q*g>F3T19?Zf0i2Y&JU_j>N>onwlC4g`!j{1p>jzlP51;yvXHpJ32ZL1c{7{ z)MzyPIro%=%#1i`T0+<|5ezw}`5%1a$_msK1)F#~iYhcbb+NiiTcX~ytZ3Wj5(@tv zLT5OqLY&VTiBl*@DK5jOqAQC<V}_H8&J8*d!6F|8^P+>r!@8gG==_FR|TOFO5N ztmi!uPli+Ln$x?H-gK%V=cf&)%tK3Ubl`;)j){YK#AZm_($yDbHN+iIVb4-MA(|Tn z%Y=0Su-m75IE?%N1|!SEl|tuKXsXZNj2Z=vp;+=jlJSZD2EODW0H`sM#)b0zgDU0)5!Grr5zO1 zNgN^!L7)EBFUC+Zhm%Mr7yC91@!CieHdPd#!o7Jn^!!TMrU0vgH)|h-!|2wozJKmj z`G&1Z^{+00Fi|SEx@=o?UTI)xo@>T@7i7MZAqTYCMc0JP{oZJEdWye2L~bM45otrq zk@}$q6%b*2<$_YGZVC^6PBqU&pG6rtOM!WN;+E;i3EB*=+K0j60WC&J{7x}V=Ak(w<1X>er- zV`_bHI~Y%5hQkS?_Lf?1C-Yh;suT(z!ZdS6NOH8>FGetNtnE-ngIxI9OKM9M!nq|ao z@ByV)WU%+EiuxlBZ=#rs_ZnY%+O^bXr2P8_g2l~7Z8221w?Uyx%!zc@?f!tWxz6{`xAWPUyeq1Vbvuj7m$3Dh(PTY04bw^_A zwRr|LuoC34N#A1;?zXdaId|wW$kzq2e~Uqdrq=@A0^DlGO4UM zzCO9@&t7@ohLX-t)ftJ| z)q;&?w?;l@^4Pc`;x3vPJ8(itFdKg3;$nap8V7O~;L775>pjUjnIyS=0%4f;&$i;^ q^<`2=x-x(uk2YUU2h;2jemskO_4rHker(f Date: Wed, 28 Mar 2018 14:28:47 -0400 Subject: [PATCH 03/12] Add fixtures for hierarchical zip rendering --- tests/extensions/zip/files/test-tree.zip | Bin 0 -> 6775 bytes tests/extensions/zip/fixtures/fixtures.json | 117 ++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 tests/extensions/zip/files/test-tree.zip create mode 100644 tests/extensions/zip/fixtures/fixtures.json diff --git a/tests/extensions/zip/files/test-tree.zip b/tests/extensions/zip/files/test-tree.zip new file mode 100644 index 0000000000000000000000000000000000000000..516c32b898b69fb61bf94b38b4fc6570462c0550 GIT binary patch literal 6775 zcmWIWW@h1H0D%RqnciRqlwf5LU?@o~F3}H-;9)2}!x9w(#NQZ27y^J=L>M@La3Pu& zKA09gm*Du|lKi4nkX~b;zBs7fx6{x19dZz8NMHEsk^h^6E`8M>lPm&El-MV;eSC0s zi5q{`lBF!OrsyqnUDWW<^owQdHePH8ZK=`7VlesLLYt3=q&TSsI})}Pm0ST-Z-t9x$BueY`a}8*+0wh zVw!Eou4Jhrv z(hYWPpmYP*hLYxx^=^n|2@557KOANa#M0vebmNHD7lNHcDf z7HIw<>Trf3T=75yvqf7Ai{ngDgV+}!-?DRjk-Wag1eh->fEbkgA>NpX=6h~f@=wVu zQZR)3-wDb85I-DmO7cR^YJ#X5K_Q@E2+BIPK&`C3J0d{Ar|qe$7ibXTaqhgf=UHt{ zHn77E-mO*?1RBMU;xP1R5y1!}R2O1~GP(<8aG0PMkKM621KQBQK$i8AgWctFwnYue z9v%WMtd|a2Fm_zNIAw#=5y>5r5=SO~F8(US%~cfi)hS5ZE9Ud0&%s8Y6{IB6nK^Y8 zoK~Fl)%Eo8)bZSM>RahY9nZ60b@=@BynN3V`{`(C>Uy@{BVCoF7USao7o>7Bc`Ra}x(wx0UaByYPS?QV_NbjRO|)_pq|@Ho8b+FS2$|9Of9 zjb4?Wk6rshbL-pxViPZ&Y@a+WhA(hh@a(*#-!9spExX%}hMiAe6n!|}|4!Mjb-}4^(M>+iOTa?lI};=u5TBZj$x6-G z%_oo+F{~O*iz6W|LW<<&_=;pBc#)h%T9Is|4=&|QK#4eomPInch2$2=M*7eq8N;!o z*m`vrFo1Q;J*cV694(^TC~-F&5y z{eG>D7KVn}hR0VJtz4vJt-W@~1|{JPCt5TRrj;Jq7_WcWVqg1LV*?Wv?o~OD=RDZ* zG`6qvRv)j}$C)#)mrTyl{<7cx-mX1+_fE<6z3~5ZJm22AHCbt$(I*rQZQZKt51-%0 zDLdz7q<7paz5VCT*S>J|aQB&76?E3y=ABW`RuBGnVx>}qR?F7TWtQH{<&V;oxPWPUhM9BK6g_h&t(@bKH_Z5vhNSS zg-xTOe%Ec~?RBSi&fPA*CtS}v@WvLu!rQ&iZhx-N?LIkkRdS3*)xUx#E2sA{zGMH_ zt=BuF=y~3=w=ui**QVFEznH`OXIa7XpNDU!KfZl_b^f|P*>}nw{gBa5-W-{Ebn>!- zy)jp1@`~!F8iAW3x3o{au>v+h!kO_kL*T7(L<^PVvKxB?L=2-bjNA-Hwgg`~A8iH? zuVyfMnTwkKjHp=J;!J-Smf%Z&qvb55BQ{#j5?9VLGKn%n8rhg5g*>p)42J`bASS5D z1va)h;Nyk?-XQIe;uJJ$h&-Ic$AHkjq|q3r9cd7U13rcbF$dxd^id8@By;{cngA;Z z_?QyRDWFz0J|mEw^4BpN*$5ObAu3b5 z`oJ!N4dg(A8Z^{|9Mqs;9ONM)K@@joqZ$IMCpqB5PWXaK1j(qsj;Db}!9yF1!_Wf^ z&7!*zQBmXet|c2vn1Q_u94x?X6mAF31R90SyHE#WF%?($ z6gg6lav(Vn)D?t8DyXwce5C$EH3aNSU|)~}-f<;9QsX$W`4ZtU(js*M4$~0*RdhE( zA{A7xBKJa2)9@K?lrRH(7uel^7zOItAcq{tDCEW?YO2!##sy}iB6ni2n~I*vxKYyb z0Y0b$!A=8?>SFgLdWH}~F+>VDzKiNK eyigrA3up*dN1>U=3d}4F45B~?%7GdpARYkzkQo{P literal 0 HcmV?d00001 diff --git a/tests/extensions/zip/fixtures/fixtures.json b/tests/extensions/zip/fixtures/fixtures.json new file mode 100644 index 000000000..d41bb5ee3 --- /dev/null +++ b/tests/extensions/zip/fixtures/fixtures.json @@ -0,0 +1,117 @@ +{ + "file_tree":[ + { + "text":"test.zip", + "icon":"http://mfr.osf.io/assets/zip/img/file_extension_zip.png", + "children":[ + { + "text":"test", + "icon":"http://mfr.osf.io/assets/zip/img/folder.png", + "children":[ + { + "text":".DS_Store", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":"6.1KB", + "date":"2017-11-09 16:45:02" + } + }, + { + "text":"dir 1", + "icon":"http://mfr.osf.io/assets/zip/img/folder.png", + "children":[ + { + "text":"test 1", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":" 15B", + "date":"2017-03-02 16:22:14" + } + }, + { + "text":"test 3", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":" 15B", + "date":"2017-03-02 16:22:14" + } + } + ], + "data":{ + "size":"", + "date":"2017-11-09 16:44:34" + } + }, + { + "text":"dir 2", + "icon":"http://mfr.osf.io/assets/zip/img/folder.png", + "children":[ + { + "text":"test 4", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":" 15B", + "date":"2017-03-02 16:22:14" + } + }, + { + "text":"test 5", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":" 15B", + "date":"2017-03-02 16:22:24" + } + } + ], + "data":{ + "size":"", + "date":"2017-11-09 16:45:14" + } + }, + { + "text":"test 1", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":" 15B", + "date":"2017-03-02 16:22:14" + } + }, + { + "text":"test 2", + "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", + "children":[ + + ], + "data":{ + "size":" 15B", + "date":"2017-03-02 16:22:24" + } + } + ], + "data":{ + "size":"", + "date":"2017-11-09 16:45:00" + } + } + ] + } + ] +} \ No newline at end of file From b0718894dd85447e6e8fea76c9574b4e1dad6c61 Mon Sep 17 00:00:00 2001 From: John Tordoff Date: Wed, 28 Mar 2018 15:25:03 -0400 Subject: [PATCH 04/12] Remove bad scroll bar and unused CSS files --- .../zip/static/css/jstree-style.min.css | 1 - mfr/extensions/zip/static/js/jstreetable.js | 2 +- .../zip/static/jstree-theme/style.css | 1108 ----------------- mfr/extensions/zip/templates/viewer.mako | 2 +- 4 files changed, 2 insertions(+), 1111 deletions(-) delete mode 100644 mfr/extensions/zip/static/css/jstree-style.min.css delete mode 100755 mfr/extensions/zip/static/jstree-theme/style.css diff --git a/mfr/extensions/zip/static/css/jstree-style.min.css b/mfr/extensions/zip/static/css/jstree-style.min.css deleted file mode 100644 index a24ff3013..000000000 --- a/mfr/extensions/zip/static/css/jstree-style.min.css +++ /dev/null @@ -1 +0,0 @@ -.jstree-node,.jstree-children,.jstree-container-ul{display:block;margin:0;padding:0;list-style-type:none;list-style-image:none}.jstree-node{white-space:nowrap}.jstree-anchor{display:inline-block;color:#000;white-space:nowrap;padding:0 4px 0 1px;margin:0;vertical-align:top}.jstree-anchor:focus{outline:0}.jstree-anchor,.jstree-anchor:link,.jstree-anchor:visited,.jstree-anchor:hover,.jstree-anchor:active{text-decoration:none;color:inherit}.jstree-icon{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-icon:empty{display:inline-block;text-decoration:none;margin:0;padding:0;vertical-align:top;text-align:center}.jstree-ocl{cursor:pointer}.jstree-leaf>.jstree-ocl{cursor:default}.jstree .jstree-open>.jstree-children{display:block}.jstree .jstree-closed>.jstree-children,.jstree .jstree-leaf>.jstree-children{display:none}.jstree-anchor>.jstree-themeicon{margin-right:2px}.jstree-no-icons .jstree-themeicon,.jstree-anchor>.jstree-themeicon-hidden{display:none}.jstree-hidden{display:none}.jstree-rtl .jstree-anchor{padding:0 1px 0 4px}.jstree-rtl .jstree-anchor>.jstree-themeicon{margin-left:2px;margin-right:0}.jstree-rtl .jstree-node{margin-left:0}.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-wholerow-ul{position:relative;display:inline-block;min-width:100%}.jstree-wholerow-ul .jstree-leaf>.jstree-ocl{cursor:pointer}.jstree-wholerow-ul .jstree-anchor,.jstree-wholerow-ul .jstree-icon{position:relative}.jstree-wholerow-ul .jstree-wholerow{width:100%;cursor:pointer;position:absolute;left:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vakata-context{display:none}.vakata-context,.vakata-context ul{margin:0;padding:2px;position:absolute;background:#f5f5f5;border:1px solid #979797;box-shadow:2px 2px 2px #999}.vakata-context ul{list-style:none;left:100%;margin-top:-2.7em;margin-left:-4px}.vakata-context .vakata-context-right ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context li{list-style:none;display:inline}.vakata-context li>a{display:block;padding:0 2em;text-decoration:none;width:auto;color:#000;white-space:nowrap;line-height:2.4em;text-shadow:1px 1px 0 #fff;border-radius:1px}.vakata-context li>a:hover{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==);background-position:right center;background-repeat:no-repeat}.vakata-context li>a:focus{outline:0}.vakata-context .vakata-context-hover>a{position:relative;background-color:#e8eff7;box-shadow:0 0 2px #0a6aa1}.vakata-context .vakata-context-separator>a,.vakata-context .vakata-context-separator>a:hover{background:#fff;border:0;border-top:1px solid #e2e3e3;height:1px;min-height:1px;max-height:1px;padding:0;margin:0 0 0 2.4em;border-left:1px solid #e0e0e0;text-shadow:0 0 0 transparent;box-shadow:0 0 0 transparent;border-radius:0}.vakata-context .vakata-contextmenu-disabled a,.vakata-context .vakata-contextmenu-disabled a:hover{color:silver;background-color:transparent;border:0;box-shadow:0 0 0}.vakata-context li>a>i{text-decoration:none;display:inline-block;width:2.4em;height:2.4em;background:0 0;margin:0 0 0 -2em;vertical-align:top;text-align:center;line-height:2.4em}.vakata-context li>a>i:empty{width:2.4em;line-height:2.4em}.vakata-context li>a .vakata-contextmenu-sep{display:inline-block;width:1px;height:2.4em;background:#fff;margin:0 .5em 0 0;border-left:1px solid #e2e3e3}.vakata-context .vakata-contextmenu-shortcut{font-size:.8em;color:silver;opacity:.5;display:none}.vakata-context-rtl ul{left:auto;right:100%;margin-left:auto;margin-right:-4px}.vakata-context-rtl li>a.vakata-context-parent{background-image:url(data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7);background-position:left center;background-repeat:no-repeat}.vakata-context-rtl .vakata-context-separator>a{margin:0 2.4em 0 0;border-left:0;border-right:1px solid #e2e3e3}.vakata-context-rtl .vakata-context-left ul{right:auto;left:100%;margin-left:-4px;margin-right:auto}.vakata-context-rtl li>a>i{margin:0 -2em 0 0}.vakata-context-rtl li>a .vakata-contextmenu-sep{margin:0 0 0 .5em;border-left-color:#fff;background:#e2e3e3}#jstree-marker{position:absolute;top:0;left:0;margin:-5px 0 0 0;padding:0;border-right:0;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid;width:0;height:0;font-size:0;line-height:0}#jstree-dnd{line-height:16px;margin:0;padding:4px}#jstree-dnd .jstree-icon,#jstree-dnd .jstree-copy{display:inline-block;text-decoration:none;margin:0 2px 0 0;padding:0;width:16px;height:16px}#jstree-dnd .jstree-ok{background:green}#jstree-dnd .jstree-er{background:red}#jstree-dnd .jstree-copy{margin:0 2px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-repeat:no-repeat;background-color:transparent}.jstree-default .jstree-anchor,.jstree-default .jstree-wholerow{transition:background-color .15s,box-shadow .15s}.jstree-default .jstree-hovered{background:#e7f4f9;border-radius:2px;box-shadow:inset 0 0 1px #ccc}.jstree-default .jstree-clicked{background:#beebff;border-radius:2px;box-shadow:inset 0 0 1px #999}.jstree-default .jstree-no-icons .jstree-anchor>.jstree-themeicon{display:none}.jstree-default .jstree-disabled{background:0 0;color:#666}.jstree-default .jstree-disabled.jstree-hovered{background:0 0;box-shadow:none}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-disabled>.jstree-icon{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default .jstree-search{font-style:italic;color:#8b0000;font-weight:700}.jstree-default .jstree-no-checkboxes .jstree-checkbox{display:none!important}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked{background:0 0;box-shadow:none}.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered{background:#e7f4f9}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked{background:0 0}.jstree-default.jstree-checkbox-no-clicked>.jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered{background:#e7f4f9}.jstree-default>.jstree-striped{min-width:100%;display:inline-block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==) left top repeat}.jstree-default>.jstree-wholerow-ul .jstree-hovered,.jstree-default>.jstree-wholerow-ul .jstree-clicked{background:0 0;box-shadow:none;border-radius:0}.jstree-default .jstree-wholerow{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.jstree-default .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default .jstree-wholerow-clicked{background:#beebff;background:-webkit-linear-gradient(top,#beebff 0,#a8e4ff 100%);background:linear-gradient(to bottom,#beebff 0,#a8e4ff 100%)}.jstree-default .jstree-node{min-height:24px;line-height:24px;margin-left:24px;min-width:24px}.jstree-default .jstree-anchor{line-height:24px;height:24px}.jstree-default .jstree-icon{width:24px;height:24px;line-height:24px}.jstree-default .jstree-icon:empty{width:24px;height:24px;line-height:24px}.jstree-default.jstree-rtl .jstree-node{margin-right:24px}.jstree-default .jstree-wholerow{height:24px}.jstree-default .jstree-node,.jstree-default .jstree-icon{background-image:url(32px.png)}.jstree-default .jstree-node{background-position:-292px -4px;background-repeat:repeat-y}.jstree-default .jstree-last{background:0 0}.jstree-default .jstree-open>.jstree-ocl{background-position:-132px -4px}.jstree-default .jstree-closed>.jstree-ocl{background-position:-100px -4px}.jstree-default .jstree-leaf>.jstree-ocl{background-position:-68px -4px}.jstree-default .jstree-themeicon{background-position:-260px -4px}.jstree-default>.jstree-no-dots .jstree-node,.jstree-default>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -4px}.jstree-default>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -4px}.jstree-default .jstree-disabled{background:0 0}.jstree-default .jstree-disabled.jstree-hovered{background:0 0}.jstree-default .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default .jstree-checkbox{background-position:-164px -4px}.jstree-default .jstree-checkbox:hover{background-position:-164px -36px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default .jstree-checked>.jstree-checkbox{background-position:-228px -4px}.jstree-default.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default .jstree-checked>.jstree-checkbox:hover{background-position:-228px -36px}.jstree-default .jstree-anchor>.jstree-undetermined{background-position:-196px -4px}.jstree-default .jstree-anchor>.jstree-undetermined:hover{background-position:-196px -36px}.jstree-default .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default>.jstree-striped{background-size:auto 48px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default.jstree-rtl .jstree-open>.jstree-ocl{background-position:-132px -36px}.jstree-default.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-100px -36px}.jstree-default.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-68px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-36px -36px}.jstree-default.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-4px -36px}.jstree-default .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default .jstree-file{background:url(32px.png) -100px -68px no-repeat}.jstree-default .jstree-folder{background:url(32px.png) -260px -4px no-repeat}.jstree-default>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default{line-height:24px;padding:0 4px}#jstree-dnd.jstree-default .jstree-ok,#jstree-dnd.jstree-default .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default i{background:0 0;width:24px;height:24px;line-height:24px}#jstree-dnd.jstree-default .jstree-ok{background-position:-4px -68px}#jstree-dnd.jstree-default .jstree-er{background-position:-36px -68px}.jstree-default.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==)}.jstree-default.jstree-rtl .jstree-last{background:0 0}.jstree-default-small .jstree-node{min-height:18px;line-height:18px;margin-left:18px;min-width:18px}.jstree-default-small .jstree-anchor{line-height:18px;height:18px}.jstree-default-small .jstree-icon{width:18px;height:18px;line-height:18px}.jstree-default-small .jstree-icon:empty{width:18px;height:18px;line-height:18px}.jstree-default-small.jstree-rtl .jstree-node{margin-right:18px}.jstree-default-small .jstree-wholerow{height:18px}.jstree-default-small .jstree-node,.jstree-default-small .jstree-icon{background-image:url(32px.png)}.jstree-default-small .jstree-node{background-position:-295px -7px;background-repeat:repeat-y}.jstree-default-small .jstree-last{background:0 0}.jstree-default-small .jstree-open>.jstree-ocl{background-position:-135px -7px}.jstree-default-small .jstree-closed>.jstree-ocl{background-position:-103px -7px}.jstree-default-small .jstree-leaf>.jstree-ocl{background-position:-71px -7px}.jstree-default-small .jstree-themeicon{background-position:-263px -7px}.jstree-default-small>.jstree-no-dots .jstree-node,.jstree-default-small>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -7px}.jstree-default-small>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -7px}.jstree-default-small .jstree-disabled{background:0 0}.jstree-default-small .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-small .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-small .jstree-checkbox{background-position:-167px -7px}.jstree-default-small .jstree-checkbox:hover{background-position:-167px -39px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-small .jstree-checked>.jstree-checkbox{background-position:-231px -7px}.jstree-default-small.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-small .jstree-checked>.jstree-checkbox:hover{background-position:-231px -39px}.jstree-default-small .jstree-anchor>.jstree-undetermined{background-position:-199px -7px}.jstree-default-small .jstree-anchor>.jstree-undetermined:hover{background-position:-199px -39px}.jstree-default-small .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-small>.jstree-striped{background-size:auto 36px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-small.jstree-rtl .jstree-open>.jstree-ocl{background-position:-135px -39px}.jstree-default-small.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-103px -39px}.jstree-default-small.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-71px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-39px -39px}.jstree-default-small.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:-7px -39px}.jstree-default-small .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-small>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-small .jstree-file{background:url(32px.png) -103px -71px no-repeat}.jstree-default-small .jstree-folder{background:url(32px.png) -263px -7px no-repeat}.jstree-default-small>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-small{line-height:18px;padding:0 4px}#jstree-dnd.jstree-default-small .jstree-ok,#jstree-dnd.jstree-default-small .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-small i{background:0 0;width:18px;height:18px;line-height:18px}#jstree-dnd.jstree-default-small .jstree-ok{background-position:-7px -71px}#jstree-dnd.jstree-default-small .jstree-er{background-position:-39px -71px}.jstree-default-small.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==)}.jstree-default-small.jstree-rtl .jstree-last{background:0 0}.jstree-default-large .jstree-node{min-height:32px;line-height:32px;margin-left:32px;min-width:32px}.jstree-default-large .jstree-anchor{line-height:32px;height:32px}.jstree-default-large .jstree-icon{width:32px;height:32px;line-height:32px}.jstree-default-large .jstree-icon:empty{width:32px;height:32px;line-height:32px}.jstree-default-large.jstree-rtl .jstree-node{margin-right:32px}.jstree-default-large .jstree-wholerow{height:32px}.jstree-default-large .jstree-node,.jstree-default-large .jstree-icon{background-image:url(32px.png)}.jstree-default-large .jstree-node{background-position:-288px 0;background-repeat:repeat-y}.jstree-default-large .jstree-last{background:0 0}.jstree-default-large .jstree-open>.jstree-ocl{background-position:-128px 0}.jstree-default-large .jstree-closed>.jstree-ocl{background-position:-96px 0}.jstree-default-large .jstree-leaf>.jstree-ocl{background-position:-64px 0}.jstree-default-large .jstree-themeicon{background-position:-256px 0}.jstree-default-large>.jstree-no-dots .jstree-node,.jstree-default-large>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px 0}.jstree-default-large>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 0}.jstree-default-large .jstree-disabled{background:0 0}.jstree-default-large .jstree-disabled.jstree-hovered{background:0 0}.jstree-default-large .jstree-disabled.jstree-clicked{background:#efefef}.jstree-default-large .jstree-checkbox{background-position:-160px 0}.jstree-default-large .jstree-checkbox:hover{background-position:-160px -32px}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-large .jstree-checked>.jstree-checkbox{background-position:-224px 0}.jstree-default-large.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-large .jstree-checked>.jstree-checkbox:hover{background-position:-224px -32px}.jstree-default-large .jstree-anchor>.jstree-undetermined{background-position:-192px 0}.jstree-default-large .jstree-anchor>.jstree-undetermined:hover{background-position:-192px -32px}.jstree-default-large .jstree-checkbox-disabled{opacity:.8;filter:url("data:image/svg+xml;utf8,#jstree-grayscale");filter:gray;-webkit-filter:grayscale(100%)}.jstree-default-large>.jstree-striped{background-size:auto 64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==);background-position:100% 1px;background-repeat:repeat-y}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}.jstree-default-large.jstree-rtl .jstree-open>.jstree-ocl{background-position:-128px -32px}.jstree-default-large.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-96px -32px}.jstree-default-large.jstree-rtl .jstree-leaf>.jstree-ocl{background-position:-64px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-node,.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-open>.jstree-ocl{background-position:-32px -32px}.jstree-default-large.jstree-rtl>.jstree-no-dots .jstree-closed>.jstree-ocl{background-position:0 -32px}.jstree-default-large .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-large>.jstree-container-ul .jstree-loading>.jstree-ocl{background:url(throbber.gif) center center no-repeat}.jstree-default-large .jstree-file{background:url(32px.png) -96px -64px no-repeat}.jstree-default-large .jstree-folder{background:url(32px.png) -256px 0 no-repeat}.jstree-default-large>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}#jstree-dnd.jstree-default-large{line-height:32px;padding:0 4px}#jstree-dnd.jstree-default-large .jstree-ok,#jstree-dnd.jstree-default-large .jstree-er{background-image:url(32px.png);background-repeat:no-repeat;background-color:transparent}#jstree-dnd.jstree-default-large i{background:0 0;width:32px;height:32px;line-height:32px}#jstree-dnd.jstree-default-large .jstree-ok{background-position:0 -64px}#jstree-dnd.jstree-default-large .jstree-er{background-position:-32px -64px}.jstree-default-large.jstree-rtl .jstree-node{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==)}.jstree-default-large.jstree-rtl .jstree-last{background:0 0}@media (max-width:768px){#jstree-dnd.jstree-dnd-responsive{line-height:40px;font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}#jstree-dnd.jstree-dnd-responsive>i{background:0 0;width:40px;height:40px}#jstree-dnd.jstree-dnd-responsive>.jstree-ok{background-image:url(40px.png);background-position:0 -200px;background-size:120px 240px}#jstree-dnd.jstree-dnd-responsive>.jstree-er{background-image:url(40px.png);background-position:-40px -200px;background-size:120px 240px}#jstree-marker.jstree-dnd-responsive{border-left-width:10px;border-top-width:10px;border-bottom-width:10px;margin-top:-10px}}@media (max-width:768px){.jstree-default-responsive .jstree-icon{background-image:url(40px.png)}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-node{min-height:40px;line-height:40px;margin-left:40px;min-width:40px;white-space:nowrap}.jstree-default-responsive .jstree-anchor{line-height:40px;height:40px}.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-icon:empty{width:40px;height:40px;line-height:40px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0}.jstree-default-responsive.jstree-rtl .jstree-node{margin-left:0;margin-right:40px}.jstree-default-responsive.jstree-rtl .jstree-container-ul>.jstree-node{margin-right:0}.jstree-default-responsive .jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-size:120px 240px}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background:0 0}.jstree-default-responsive .jstree-open>.jstree-ocl{background-position:0 0!important}.jstree-default-responsive .jstree-closed>.jstree-ocl{background-position:0 -40px!important}.jstree-default-responsive.jstree-rtl .jstree-closed>.jstree-ocl{background-position:-40px 0!important}.jstree-default-responsive .jstree-themeicon{background-position:-40px -40px}.jstree-default-responsive .jstree-checkbox,.jstree-default-responsive .jstree-checkbox:hover{background-position:-40px -80px}.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox,.jstree-default-responsive.jstree-checkbox-selection .jstree-clicked>.jstree-checkbox:hover,.jstree-default-responsive .jstree-checked>.jstree-checkbox,.jstree-default-responsive .jstree-checked>.jstree-checkbox:hover{background-position:0 -80px}.jstree-default-responsive .jstree-anchor>.jstree-undetermined,.jstree-default-responsive .jstree-anchor>.jstree-undetermined:hover{background-position:0 -120px}.jstree-default-responsive .jstree-anchor{font-weight:700;font-size:1.1em;text-shadow:1px 1px #fff}.jstree-default-responsive>.jstree-striped{background:0 0}.jstree-default-responsive .jstree-wholerow{border-top:1px solid rgba(255,255,255,.7);border-bottom:1px solid rgba(64,64,64,.2);background:#ebebeb;height:40px}.jstree-default-responsive .jstree-wholerow-hovered{background:#e7f4f9}.jstree-default-responsive .jstree-wholerow-clicked{background:#beebff}.jstree-default-responsive .jstree-children .jstree-last>.jstree-wholerow{box-shadow:inset 0 -6px 3px -5px #666}.jstree-default-responsive .jstree-children .jstree-open>.jstree-wholerow{box-shadow:inset 0 6px 3px -5px #666;border-top:0}.jstree-default-responsive .jstree-children .jstree-open+.jstree-open{box-shadow:none}.jstree-default-responsive .jstree-node,.jstree-default-responsive .jstree-icon,.jstree-default-responsive .jstree-node>.jstree-ocl,.jstree-default-responsive .jstree-themeicon,.jstree-default-responsive .jstree-checkbox{background-image:url(40px.png);background-size:120px 240px}.jstree-default-responsive .jstree-node{background-position:-80px 0;background-repeat:repeat-y}.jstree-default-responsive .jstree-last{background:0 0}.jstree-default-responsive .jstree-leaf>.jstree-ocl{background-position:-40px -120px}.jstree-default-responsive .jstree-last>.jstree-ocl{background-position:-40px -160px}.jstree-default-responsive .jstree-themeicon-custom{background-color:transparent;background-image:none;background-position:0 0}.jstree-default-responsive .jstree-file{background:url(40px.png) 0 -160px no-repeat;background-size:120px 240px}.jstree-default-responsive .jstree-folder{background:url(40px.png) -40px -40px no-repeat;background-size:120px 240px}.jstree-default-responsive>.jstree-container-ul>.jstree-node{margin-left:0;margin-right:0}} \ No newline at end of file diff --git a/mfr/extensions/zip/static/js/jstreetable.js b/mfr/extensions/zip/static/js/jstreetable.js index c76647b63..a8d86cd4f 100755 --- a/mfr/extensions/zip/static/js/jstreetable.js +++ b/mfr/extensions/zip/static/js/jstreetable.js @@ -198,7 +198,7 @@ '.jstree-table-resizable-separator {cursor: col-resize; width: 10px;}', '.jstree-table-separator-regular {border-color: #d0d0d0; border-style: solid;}', '.jstree-table-cell-themeroller {border: none !important; background: transparent !important;}', - '.jstree-table-wrapper {table-layout: fixed; width: 100%; overflow: auto; position: relative;}', + '.jstree-table-wrapper {position: relative;}', // modified to remove scrollbar '.jstree-table-midwrapper {display: table-row;}', '.jstree-table-width-auto {width:auto;display:block;}', '.jstree-table-column {display: table-cell; overflow: hidden;}', diff --git a/mfr/extensions/zip/static/jstree-theme/style.css b/mfr/extensions/zip/static/jstree-theme/style.css deleted file mode 100755 index 674f87cc0..000000000 --- a/mfr/extensions/zip/static/jstree-theme/style.css +++ /dev/null @@ -1,1108 +0,0 @@ -/* jsTree default theme */ -.jstree-node, -.jstree-children, -.jstree-container-ul { - display: block; - margin: 0; - padding: 0; - list-style-type: none; - list-style-image: none; -} -.jstree-node { - white-space: nowrap; -} -.jstree-anchor { - display: inline-block; - color: black; - white-space: nowrap; - padding: 0 4px 0 1px; - margin: 0; - vertical-align: top; -} -.jstree-anchor:focus { - outline: 0; -} -.jstree-anchor, -.jstree-anchor:link, -.jstree-anchor:visited, -.jstree-anchor:hover, -.jstree-anchor:active { - text-decoration: none; - color: inherit; -} -.jstree-icon { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0; - vertical-align: top; - text-align: center; -} -.jstree-icon:empty { - display: inline-block; - text-decoration: none; - margin: 0; - padding: 0; - vertical-align: top; - text-align: center; -} -.jstree-ocl { - cursor: pointer; -} -.jstree-leaf > .jstree-ocl { - cursor: default; -} -.jstree .jstree-open > .jstree-children { - display: block; -} -.jstree .jstree-closed > .jstree-children, -.jstree .jstree-leaf > .jstree-children { - display: none; -} -.jstree-anchor > .jstree-themeicon { - margin-right: 2px; -} -.jstree-no-icons .jstree-themeicon, -.jstree-anchor > .jstree-themeicon-hidden { - display: none; -} -.jstree-hidden, -.jstree-node.jstree-hidden { - display: none; -} -.jstree-rtl .jstree-anchor { - padding: 0 1px 0 4px; -} -.jstree-rtl .jstree-anchor > .jstree-themeicon { - margin-left: 2px; - margin-right: 0; -} -.jstree-rtl .jstree-node { - margin-left: 0; -} -.jstree-rtl .jstree-container-ul > .jstree-node { - margin-right: 0; -} -.jstree-wholerow-ul { - position: relative; - display: inline-block; - min-width: 100%; -} -.jstree-wholerow-ul .jstree-leaf > .jstree-ocl { - cursor: pointer; -} -.jstree-wholerow-ul .jstree-anchor, -.jstree-wholerow-ul .jstree-icon { - position: relative; -} -.jstree-wholerow-ul .jstree-wholerow { - width: 100%; - cursor: pointer; - position: absolute; - left: 0; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.jstree-contextmenu .jstree-anchor { - -webkit-user-select: none; - /* disable selection/Copy of UIWebView */ - -webkit-touch-callout: none; - /* disable the IOS popup when long-press on a link */ -} -.vakata-context { - display: none; -} -.vakata-context, -.vakata-context ul { - margin: 0; - padding: 2px; - position: absolute; - background: #f5f5f5; - border: 1px solid #979797; - box-shadow: 2px 2px 2px #999999; -} -.vakata-context ul { - list-style: none; - left: 100%; - margin-top: -2.7em; - margin-left: -4px; -} -.vakata-context .vakata-context-right ul { - left: auto; - right: 100%; - margin-left: auto; - margin-right: -4px; -} -.vakata-context li { - list-style: none; -} -.vakata-context li > a { - display: block; - padding: 0 2em 0 2em; - text-decoration: none; - width: auto; - color: black; - white-space: nowrap; - line-height: 2.4em; - text-shadow: 1px 1px 0 white; - border-radius: 1px; -} -.vakata-context li > a:hover { - position: relative; - background-color: #e8eff7; - box-shadow: 0 0 2px #0a6aa1; -} -.vakata-context li > a.vakata-context-parent { - background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); - background-position: right center; - background-repeat: no-repeat; -} -.vakata-context li > a:focus { - outline: 0; -} -.vakata-context .vakata-context-hover > a { - position: relative; - background-color: #e8eff7; - box-shadow: 0 0 2px #0a6aa1; -} -.vakata-context .vakata-context-separator > a, -.vakata-context .vakata-context-separator > a:hover { - background: white; - border: 0; - border-top: 1px solid #e2e3e3; - height: 1px; - min-height: 1px; - max-height: 1px; - padding: 0; - margin: 0 0 0 2.4em; - border-left: 1px solid #e0e0e0; - text-shadow: 0 0 0 transparent; - box-shadow: 0 0 0 transparent; - border-radius: 0; -} -.vakata-context .vakata-contextmenu-disabled a, -.vakata-context .vakata-contextmenu-disabled a:hover { - color: silver; - background-color: transparent; - border: 0; - box-shadow: 0 0 0; -} -.vakata-context li > a > i { - text-decoration: none; - display: inline-block; - width: 2.4em; - height: 2.4em; - background: transparent; - margin: 0 0 0 -2em; - vertical-align: top; - text-align: center; - line-height: 2.4em; -} -.vakata-context li > a > i:empty { - width: 2.4em; - line-height: 2.4em; -} -.vakata-context li > a .vakata-contextmenu-sep { - display: inline-block; - width: 1px; - height: 2.4em; - background: white; - margin: 0 0.5em 0 0; - border-left: 1px solid #e2e3e3; -} -.vakata-context .vakata-contextmenu-shortcut { - font-size: 0.8em; - color: silver; - opacity: 0.5; - display: none; -} -.vakata-context-rtl ul { - left: auto; - right: 100%; - margin-left: auto; - margin-right: -4px; -} -.vakata-context-rtl li > a.vakata-context-parent { - background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); - background-position: left center; - background-repeat: no-repeat; -} -.vakata-context-rtl .vakata-context-separator > a { - margin: 0 2.4em 0 0; - border-left: 0; - border-right: 1px solid #e2e3e3; -} -.vakata-context-rtl .vakata-context-left ul { - right: auto; - left: 100%; - margin-left: -4px; - margin-right: auto; -} -.vakata-context-rtl li > a > i { - margin: 0 -2em 0 0; -} -.vakata-context-rtl li > a .vakata-contextmenu-sep { - margin: 0 0 0 0.5em; - border-left-color: white; - background: #e2e3e3; -} -#jstree-marker { - position: absolute; - top: 0; - left: 0; - margin: -5px 0 0 0; - padding: 0; - border-right: 0; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid; - width: 0; - height: 0; - font-size: 0; - line-height: 0; -} -#jstree-dnd { - line-height: 16px; - margin: 0; - padding: 4px; -} -#jstree-dnd .jstree-icon, -#jstree-dnd .jstree-copy { - display: inline-block; - text-decoration: none; - margin: 0 2px 0 0; - padding: 0; - width: 16px; - height: 16px; -} -#jstree-dnd .jstree-ok { - background: green; -} -#jstree-dnd .jstree-er { - background: red; -} -#jstree-dnd .jstree-copy { - margin: 0 2px 0 2px; -} -.jstree-default .jstree-node, -.jstree-default .jstree-icon { - background-repeat: no-repeat; - background-color: transparent; -} -.jstree-default .jstree-anchor, -.jstree-default .jstree-animated, -.jstree-default .jstree-wholerow { - transition: background-color 0.15s, box-shadow 0.15s; -} -.jstree-default .jstree-hovered { - background: #e7f4f9; - border-radius: 2px; - box-shadow: inset 0 0 1px #cccccc; -} -.jstree-default .jstree-context { - background: #e7f4f9; - border-radius: 2px; - box-shadow: inset 0 0 1px #cccccc; -} -.jstree-default .jstree-clicked { - background: #beebff; - border-radius: 2px; - box-shadow: inset 0 0 1px #999999; -} -.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { - display: none; -} -.jstree-default .jstree-disabled { - background: transparent; - color: #666666; -} -.jstree-default .jstree-disabled.jstree-hovered { - background: transparent; - box-shadow: none; -} -.jstree-default .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default .jstree-disabled > .jstree-icon { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default .jstree-search { - font-style: italic; - color: #8b0000; - font-weight: bold; -} -.jstree-default .jstree-no-checkboxes .jstree-checkbox { - display: none !important; -} -.jstree-default.jstree-checkbox-no-clicked .jstree-clicked { - background: transparent; - box-shadow: none; -} -.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { - background: #e7f4f9; -} -.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { - background: transparent; -} -.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { - background: #e7f4f9; -} -.jstree-default > .jstree-striped { - min-width: 100%; - display: inline-block; - background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; -} -.jstree-default > .jstree-wholerow-ul .jstree-hovered, -.jstree-default > .jstree-wholerow-ul .jstree-clicked { - background: transparent; - box-shadow: none; - border-radius: 0; -} -.jstree-default .jstree-wholerow { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; -} -.jstree-default .jstree-wholerow-hovered { - background: #e7f4f9; -} -.jstree-default .jstree-wholerow-clicked { - background: #beebff; - background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); - background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); -} -.jstree-default .jstree-node { - min-height: 24px; - line-height: 24px; - margin-left: 24px; - min-width: 24px; -} -.jstree-default .jstree-anchor { - line-height: 24px; - height: 24px; -} -.jstree-default .jstree-icon { - width: 24px; - height: 24px; - line-height: 24px; -} -.jstree-default .jstree-icon:empty { - width: 24px; - height: 24px; - line-height: 24px; -} -.jstree-default.jstree-rtl .jstree-node { - margin-right: 24px; -} -.jstree-default .jstree-wholerow { - height: 24px; -} -.jstree-default .jstree-node, -.jstree-default .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default .jstree-node { - background-position: -292px -4px; - background-repeat: repeat-y; -} -.jstree-default .jstree-last { - background: transparent; -} -.jstree-default .jstree-open > .jstree-ocl { - background-position: -132px -4px; -} -.jstree-default .jstree-closed > .jstree-ocl { - background-position: -100px -4px; -} -.jstree-default .jstree-leaf > .jstree-ocl { - background-position: -68px -4px; -} -.jstree-default .jstree-themeicon { - background-position: -260px -4px; -} -.jstree-default > .jstree-no-dots .jstree-node, -.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -36px -4px; -} -.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -4px -4px; -} -.jstree-default .jstree-disabled { - background: transparent; -} -.jstree-default .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default .jstree-checkbox { - background-position: -164px -4px; -} -.jstree-default .jstree-checkbox:hover { - background-position: -164px -36px; -} -.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default .jstree-checked > .jstree-checkbox { - background-position: -228px -4px; -} -.jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default .jstree-checked > .jstree-checkbox:hover { - background-position: -228px -36px; -} -.jstree-default .jstree-anchor > .jstree-undetermined { - background-position: -196px -4px; -} -.jstree-default .jstree-anchor > .jstree-undetermined:hover { - background-position: -196px -36px; -} -.jstree-default .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default > .jstree-striped { - background-size: auto 48px; -} -.jstree-default.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -132px -36px; -} -.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -100px -36px; -} -.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -68px -36px; -} -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -36px -36px; -} -.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -4px -36px; -} -.jstree-default .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default .jstree-file { - background: url("32px.png") -100px -68px no-repeat; -} -.jstree-default .jstree-folder { - background: url("32px.png") -260px -4px no-repeat; -} -.jstree-default > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default { - line-height: 24px; - padding: 0 4px; -} -#jstree-dnd.jstree-default .jstree-ok, -#jstree-dnd.jstree-default .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default i { - background: transparent; - width: 24px; - height: 24px; - line-height: 24px; -} -#jstree-dnd.jstree-default .jstree-ok { - background-position: -4px -68px; -} -#jstree-dnd.jstree-default .jstree-er { - background-position: -36px -68px; -} -.jstree-default .jstree-ellipsis { - overflow: hidden; -} -.jstree-default .jstree-ellipsis .jstree-anchor { - width: calc(100% - 29px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor { - width: calc(100% - 5px); -} -.jstree-default.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); -} -.jstree-default.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-small .jstree-node { - min-height: 18px; - line-height: 18px; - margin-left: 18px; - min-width: 18px; -} -.jstree-default-small .jstree-anchor { - line-height: 18px; - height: 18px; -} -.jstree-default-small .jstree-icon { - width: 18px; - height: 18px; - line-height: 18px; -} -.jstree-default-small .jstree-icon:empty { - width: 18px; - height: 18px; - line-height: 18px; -} -.jstree-default-small.jstree-rtl .jstree-node { - margin-right: 18px; -} -.jstree-default-small .jstree-wholerow { - height: 18px; -} -.jstree-default-small .jstree-node, -.jstree-default-small .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-small .jstree-node { - background-position: -295px -7px; - background-repeat: repeat-y; -} -.jstree-default-small .jstree-last { - background: transparent; -} -.jstree-default-small .jstree-open > .jstree-ocl { - background-position: -135px -7px; -} -.jstree-default-small .jstree-closed > .jstree-ocl { - background-position: -103px -7px; -} -.jstree-default-small .jstree-leaf > .jstree-ocl { - background-position: -71px -7px; -} -.jstree-default-small .jstree-themeicon { - background-position: -263px -7px; -} -.jstree-default-small > .jstree-no-dots .jstree-node, -.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -39px -7px; -} -.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -7px -7px; -} -.jstree-default-small .jstree-disabled { - background: transparent; -} -.jstree-default-small .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-small .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-small .jstree-checkbox { - background-position: -167px -7px; -} -.jstree-default-small .jstree-checkbox:hover { - background-position: -167px -39px; -} -.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-small .jstree-checked > .jstree-checkbox { - background-position: -231px -7px; -} -.jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-small .jstree-checked > .jstree-checkbox:hover { - background-position: -231px -39px; -} -.jstree-default-small .jstree-anchor > .jstree-undetermined { - background-position: -199px -7px; -} -.jstree-default-small .jstree-anchor > .jstree-undetermined:hover { - background-position: -199px -39px; -} -.jstree-default-small .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-small > .jstree-striped { - background-size: auto 36px; -} -.jstree-default-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -135px -39px; -} -.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -103px -39px; -} -.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -71px -39px; -} -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -39px -39px; -} -.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: -7px -39px; -} -.jstree-default-small .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-small .jstree-file { - background: url("32px.png") -103px -71px no-repeat; -} -.jstree-default-small .jstree-folder { - background: url("32px.png") -263px -7px no-repeat; -} -.jstree-default-small > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-small { - line-height: 18px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-small .jstree-ok, -#jstree-dnd.jstree-default-small .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-small i { - background: transparent; - width: 18px; - height: 18px; - line-height: 18px; -} -#jstree-dnd.jstree-default-small .jstree-ok { - background-position: -7px -71px; -} -#jstree-dnd.jstree-default-small .jstree-er { - background-position: -39px -71px; -} -.jstree-default-small .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-small .jstree-ellipsis .jstree-anchor { - width: calc(100% - 23px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor { - width: calc(100% - 5px); -} -.jstree-default-small.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); -} -.jstree-default-small.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-large .jstree-node { - min-height: 32px; - line-height: 32px; - margin-left: 32px; - min-width: 32px; -} -.jstree-default-large .jstree-anchor { - line-height: 32px; - height: 32px; -} -.jstree-default-large .jstree-icon { - width: 32px; - height: 32px; - line-height: 32px; -} -.jstree-default-large .jstree-icon:empty { - width: 32px; - height: 32px; - line-height: 32px; -} -.jstree-default-large.jstree-rtl .jstree-node { - margin-right: 32px; -} -.jstree-default-large .jstree-wholerow { - height: 32px; -} -.jstree-default-large .jstree-node, -.jstree-default-large .jstree-icon { - background-image: url("32px.png"); -} -.jstree-default-large .jstree-node { - background-position: -288px 0px; - background-repeat: repeat-y; -} -.jstree-default-large .jstree-last { - background: transparent; -} -.jstree-default-large .jstree-open > .jstree-ocl { - background-position: -128px 0px; -} -.jstree-default-large .jstree-closed > .jstree-ocl { - background-position: -96px 0px; -} -.jstree-default-large .jstree-leaf > .jstree-ocl { - background-position: -64px 0px; -} -.jstree-default-large .jstree-themeicon { - background-position: -256px 0px; -} -.jstree-default-large > .jstree-no-dots .jstree-node, -.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -32px 0px; -} -.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: 0px 0px; -} -.jstree-default-large .jstree-disabled { - background: transparent; -} -.jstree-default-large .jstree-disabled.jstree-hovered { - background: transparent; -} -.jstree-default-large .jstree-disabled.jstree-clicked { - background: #efefef; -} -.jstree-default-large .jstree-checkbox { - background-position: -160px 0px; -} -.jstree-default-large .jstree-checkbox:hover { - background-position: -160px -32px; -} -.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, -.jstree-default-large .jstree-checked > .jstree-checkbox { - background-position: -224px 0px; -} -.jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, -.jstree-default-large .jstree-checked > .jstree-checkbox:hover { - background-position: -224px -32px; -} -.jstree-default-large .jstree-anchor > .jstree-undetermined { - background-position: -192px 0px; -} -.jstree-default-large .jstree-anchor > .jstree-undetermined:hover { - background-position: -192px -32px; -} -.jstree-default-large .jstree-checkbox-disabled { - opacity: 0.8; - filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); - /* Firefox 10+ */ - filter: gray; - /* IE6-9 */ - -webkit-filter: grayscale(100%); - /* Chrome 19+ & Safari 6+ */ -} -.jstree-default-large > .jstree-striped { - background-size: auto 64px; -} -.jstree-default-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); - background-position: 100% 1px; - background-repeat: repeat-y; -} -.jstree-default-large.jstree-rtl .jstree-last { - background: transparent; -} -.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { - background-position: -128px -32px; -} -.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -96px -32px; -} -.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { - background-position: -64px -32px; -} -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { - background: transparent; -} -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { - background-position: -32px -32px; -} -.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { - background-position: 0px -32px; -} -.jstree-default-large .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; -} -.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { - background: url("throbber.gif") center center no-repeat; -} -.jstree-default-large .jstree-file { - background: url("32px.png") -96px -64px no-repeat; -} -.jstree-default-large .jstree-folder { - background: url("32px.png") -256px 0px no-repeat; -} -.jstree-default-large > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; -} -#jstree-dnd.jstree-default-large { - line-height: 32px; - padding: 0 4px; -} -#jstree-dnd.jstree-default-large .jstree-ok, -#jstree-dnd.jstree-default-large .jstree-er { - background-image: url("32px.png"); - background-repeat: no-repeat; - background-color: transparent; -} -#jstree-dnd.jstree-default-large i { - background: transparent; - width: 32px; - height: 32px; - line-height: 32px; -} -#jstree-dnd.jstree-default-large .jstree-ok { - background-position: 0px -64px; -} -#jstree-dnd.jstree-default-large .jstree-er { - background-position: -32px -64px; -} -.jstree-default-large .jstree-ellipsis { - overflow: hidden; -} -.jstree-default-large .jstree-ellipsis .jstree-anchor { - width: calc(100% - 37px); - text-overflow: ellipsis; - overflow: hidden; -} -.jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor { - width: calc(100% - 5px); -} -.jstree-default-large.jstree-rtl .jstree-node { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); -} -.jstree-default-large.jstree-rtl .jstree-last { - background: transparent; -} -@media (max-width: 768px) { - #jstree-dnd.jstree-dnd-responsive { - line-height: 40px; - font-weight: bold; - font-size: 1.1em; - text-shadow: 1px 1px white; - } - #jstree-dnd.jstree-dnd-responsive > i { - background: transparent; - width: 40px; - height: 40px; - } - #jstree-dnd.jstree-dnd-responsive > .jstree-ok { - background-image: url("40px.png"); - background-position: 0 -200px; - background-size: 120px 240px; - } - #jstree-dnd.jstree-dnd-responsive > .jstree-er { - background-image: url("40px.png"); - background-position: -40px -200px; - background-size: 120px 240px; - } - #jstree-marker.jstree-dnd-responsive { - border-left-width: 10px; - border-top-width: 10px; - border-bottom-width: 10px; - margin-top: -10px; - } -} -@media (max-width: 768px) { - .jstree-default-responsive { - /* - .jstree-open > .jstree-ocl, - .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } - */ - } - .jstree-default-responsive .jstree-icon { - background-image: url("40px.png"); - } - .jstree-default-responsive .jstree-node, - .jstree-default-responsive .jstree-leaf > .jstree-ocl { - background: transparent; - } - .jstree-default-responsive .jstree-node { - min-height: 40px; - line-height: 40px; - margin-left: 40px; - min-width: 40px; - white-space: nowrap; - } - .jstree-default-responsive .jstree-anchor { - line-height: 40px; - height: 40px; - } - .jstree-default-responsive .jstree-icon, - .jstree-default-responsive .jstree-icon:empty { - width: 40px; - height: 40px; - line-height: 40px; - } - .jstree-default-responsive > .jstree-container-ul > .jstree-node { - margin-left: 0; - } - .jstree-default-responsive.jstree-rtl .jstree-node { - margin-left: 0; - margin-right: 40px; - background: transparent; - } - .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { - margin-right: 0; - } - .jstree-default-responsive .jstree-ocl, - .jstree-default-responsive .jstree-themeicon, - .jstree-default-responsive .jstree-checkbox { - background-size: 120px 240px; - } - .jstree-default-responsive .jstree-leaf > .jstree-ocl, - .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { - background: transparent; - } - .jstree-default-responsive .jstree-open > .jstree-ocl { - background-position: 0 0px !important; - } - .jstree-default-responsive .jstree-closed > .jstree-ocl { - background-position: 0 -40px !important; - } - .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { - background-position: -40px 0px !important; - } - .jstree-default-responsive .jstree-themeicon { - background-position: -40px -40px; - } - .jstree-default-responsive .jstree-checkbox, - .jstree-default-responsive .jstree-checkbox:hover { - background-position: -40px -80px; - } - .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, - .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, - .jstree-default-responsive .jstree-checked > .jstree-checkbox, - .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { - background-position: 0 -80px; - } - .jstree-default-responsive .jstree-anchor > .jstree-undetermined, - .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { - background-position: 0 -120px; - } - .jstree-default-responsive .jstree-anchor { - font-weight: bold; - font-size: 1.1em; - text-shadow: 1px 1px white; - } - .jstree-default-responsive > .jstree-striped { - background: transparent; - } - .jstree-default-responsive .jstree-wholerow { - border-top: 1px solid rgba(255, 255, 255, 0.7); - border-bottom: 1px solid rgba(64, 64, 64, 0.2); - background: #ebebeb; - height: 40px; - } - .jstree-default-responsive .jstree-wholerow-hovered { - background: #e7f4f9; - } - .jstree-default-responsive .jstree-wholerow-clicked { - background: #beebff; - } - .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { - box-shadow: inset 0 -6px 3px -5px #666666; - } - .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { - box-shadow: inset 0 6px 3px -5px #666666; - border-top: 0; - } - .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { - box-shadow: none; - } - .jstree-default-responsive .jstree-node, - .jstree-default-responsive .jstree-icon, - .jstree-default-responsive .jstree-node > .jstree-ocl, - .jstree-default-responsive .jstree-themeicon, - .jstree-default-responsive .jstree-checkbox { - background-image: url("40px.png"); - background-size: 120px 240px; - } - .jstree-default-responsive .jstree-node { - background-position: -80px 0; - background-repeat: repeat-y; - } - .jstree-default-responsive .jstree-last { - background: transparent; - } - .jstree-default-responsive .jstree-leaf > .jstree-ocl { - background-position: -40px -120px; - } - .jstree-default-responsive .jstree-last > .jstree-ocl { - background-position: -40px -160px; - } - .jstree-default-responsive .jstree-themeicon-custom { - background-color: transparent; - background-image: none; - background-position: 0 0; - } - .jstree-default-responsive .jstree-file { - background: url("40px.png") 0 -160px no-repeat; - background-size: 120px 240px; - } - .jstree-default-responsive .jstree-folder { - background: url("40px.png") -40px -40px no-repeat; - background-size: 120px 240px; - } - .jstree-default-responsive > .jstree-container-ul > .jstree-node { - margin-left: 0; - margin-right: 0; - } -} diff --git a/mfr/extensions/zip/templates/viewer.mako b/mfr/extensions/zip/templates/viewer.mako index 0c96eb6cb..7f27722af 100644 --- a/mfr/extensions/zip/templates/viewer.mako +++ b/mfr/extensions/zip/templates/viewer.mako @@ -1,5 +1,5 @@ - + From 67ffcfe7962658bd8c09ff7446cdd28039e75814 Mon Sep 17 00:00:00 2001 From: longze chen Date: Fri, 6 Apr 2018 11:39:33 -0400 Subject: [PATCH 05/12] Optimize static image assets for the zip renderer Rename image names with shorter length and use dashes and underscores consistently. Optimize images which saves 15% space in total. --- mfr/extensions/zip/static/img/delete.png | Bin 695 -> 499 bytes .../zip/static/img/file-ext-3gp.png | Bin 0 -> 484 bytes mfr/extensions/zip/static/img/file-ext-7z.png | Bin 0 -> 578 bytes .../zip/static/img/file-ext-ace.png | Bin 0 -> 593 bytes mfr/extensions/zip/static/img/file-ext-ai.png | Bin 0 -> 560 bytes .../zip/static/img/file-ext-aif.png | Bin 0 -> 544 bytes .../zip/static/img/file-ext-aiff.png | Bin 0 -> 563 bytes .../zip/static/img/file-ext-amr.png | Bin 0 -> 480 bytes .../zip/static/img/file-ext-asf.png | Bin 0 -> 590 bytes .../zip/static/img/file-ext-asx.png | Bin 0 -> 525 bytes .../zip/static/img/file-ext-bat.png | Bin 0 -> 558 bytes .../zip/static/img/file-ext-bin.png | Bin 0 -> 473 bytes .../zip/static/img/file-ext-bmp.png | Bin 0 -> 573 bytes .../zip/static/img/file-ext-bup.png | Bin 0 -> 534 bytes .../zip/static/img/file-ext-cab.png | Bin 0 -> 582 bytes .../zip/static/img/file-ext-cbr.png | Bin 0 -> 535 bytes .../zip/static/img/file-ext-cda.png | Bin 0 -> 589 bytes .../zip/static/img/file-ext-cdl.png | Bin 0 -> 643 bytes .../zip/static/img/file-ext-cdr.png | Bin 0 -> 548 bytes .../zip/static/img/file-ext-chm.png | Bin 0 -> 582 bytes .../zip/static/img/file-ext-dat.png | Bin 0 -> 583 bytes .../zip/static/img/file-ext-divx.png | Bin 0 -> 591 bytes .../zip/static/img/file-ext-dll.png | Bin 0 -> 476 bytes .../zip/static/img/file-ext-dmg.png | Bin 0 -> 577 bytes .../zip/static/img/file-ext-doc.png | Bin 0 -> 522 bytes .../zip/static/img/file-ext-docx.png | Bin 0 -> 522 bytes .../zip/static/img/file-ext-dss.png | Bin 0 -> 503 bytes .../zip/static/img/file-ext-dvf.png | Bin 0 -> 600 bytes .../zip/static/img/file-ext-dwg.png | Bin 0 -> 569 bytes .../zip/static/img/file-ext-eml.png | Bin 0 -> 538 bytes .../zip/static/img/file-ext-eps.png | Bin 0 -> 523 bytes .../zip/static/img/file-ext-exe.png | Bin 0 -> 506 bytes .../zip/static/img/file-ext-fla.png | Bin 0 -> 557 bytes .../zip/static/img/file-ext-flv.png | Bin 0 -> 553 bytes .../zip/static/img/file-ext-generic.png | Bin 0 -> 194 bytes .../zip/static/img/file-ext-gif.png | Bin 0 -> 531 bytes mfr/extensions/zip/static/img/file-ext-gz.png | Bin 0 -> 568 bytes .../zip/static/img/file-ext-hqx.png | Bin 0 -> 552 bytes .../zip/static/img/file-ext-htm.png | Bin 0 -> 590 bytes .../zip/static/img/file-ext-html.png | Bin 0 -> 630 bytes .../zip/static/img/file-ext-ifo.png | Bin 0 -> 597 bytes .../zip/static/img/file-ext-indd.png | Bin 0 -> 613 bytes .../zip/static/img/file-ext-iso.png | Bin 0 -> 544 bytes .../zip/static/img/file-ext-jar.png | Bin 0 -> 566 bytes .../zip/static/img/file-ext-jpeg.png | Bin 0 -> 588 bytes .../zip/static/img/file-ext-jpg.png | Bin 0 -> 583 bytes .../zip/static/img/file-ext-lnk.png | Bin 0 -> 554 bytes .../zip/static/img/file-ext-log.png | Bin 0 -> 581 bytes .../zip/static/img/file-ext-m4a.png | Bin 0 -> 487 bytes .../zip/static/img/file-ext-m4b.png | Bin 0 -> 573 bytes .../zip/static/img/file-ext-m4p.png | Bin 0 -> 557 bytes .../zip/static/img/file-ext-m4v.png | Bin 0 -> 577 bytes .../zip/static/img/file-ext-mcd.png | Bin 0 -> 611 bytes .../zip/static/img/file-ext-mdb.png | Bin 0 -> 565 bytes .../zip/static/img/file-ext-mid.png | Bin 0 -> 563 bytes .../zip/static/img/file-ext-mov.png | Bin 0 -> 590 bytes .../zip/static/img/file-ext-mp2.png | Bin 0 -> 580 bytes .../zip/static/img/file-ext-mp3.png | Bin 0 -> 563 bytes .../zip/static/img/file-ext-mp4.png | Bin 0 -> 523 bytes .../zip/static/img/file-ext-mpeg.png | Bin 0 -> 572 bytes .../zip/static/img/file-ext-mpg.png | Bin 0 -> 541 bytes .../zip/static/img/file-ext-msi.png | Bin 0 -> 593 bytes .../zip/static/img/file-ext-mswmm.png | Bin 0 -> 682 bytes .../zip/static/img/file-ext-ogg.png | Bin 0 -> 598 bytes .../zip/static/img/file-ext-pdf.png | Bin 0 -> 570 bytes .../zip/static/img/file-ext-png.png | Bin 0 -> 613 bytes .../zip/static/img/file-ext-pps.png | Bin 0 -> 509 bytes mfr/extensions/zip/static/img/file-ext-ps.png | Bin 0 -> 535 bytes .../zip/static/img/file-ext-psd.png | Bin 0 -> 594 bytes .../zip/static/img/file-ext-pst.png | Bin 0 -> 502 bytes .../zip/static/img/file-ext-ptb.png | Bin 0 -> 569 bytes .../zip/static/img/file-ext-pub.png | Bin 0 -> 561 bytes mfr/extensions/zip/static/img/file-ext-py.png | Bin 0 -> 791 bytes .../zip/static/img/file-ext-qbb.png | Bin 0 -> 529 bytes .../zip/static/img/file-ext-qbw.png | Bin 0 -> 501 bytes .../zip/static/img/file-ext-qxd.png | Bin 0 -> 615 bytes .../zip/static/img/file-ext-ram.png | Bin 0 -> 534 bytes .../zip/static/img/file-ext-rar.png | Bin 0 -> 606 bytes mfr/extensions/zip/static/img/file-ext-rm.png | Bin 0 -> 562 bytes .../zip/static/img/file-ext-rmvb.png | Bin 0 -> 536 bytes .../zip/static/img/file-ext-rtf.png | Bin 0 -> 574 bytes .../zip/static/img/file-ext-sea.png | Bin 0 -> 565 bytes .../zip/static/img/file-ext-ses.png | Bin 0 -> 584 bytes .../zip/static/img/file-ext-sit.png | Bin 0 -> 599 bytes .../zip/static/img/file-ext-sitx.png | Bin 0 -> 579 bytes mfr/extensions/zip/static/img/file-ext-ss.png | Bin 0 -> 600 bytes .../zip/static/img/file-ext-swf.png | Bin 0 -> 584 bytes .../zip/static/img/file-ext-tgz.png | Bin 0 -> 548 bytes .../zip/static/img/file-ext-thm.png | Bin 0 -> 531 bytes .../zip/static/img/file-ext-tif.png | Bin 0 -> 557 bytes .../zip/static/img/file-ext-tmp.png | Bin 0 -> 450 bytes .../zip/static/img/file-ext-torrent.png | Bin 0 -> 543 bytes .../zip/static/img/file-ext-ttf.png | Bin 0 -> 576 bytes .../zip/static/img/file-ext-txt.png | Bin 0 -> 522 bytes .../zip/static/img/file-ext-vcd.png | Bin 0 -> 582 bytes .../zip/static/img/file-ext-vob.png | Bin 0 -> 520 bytes .../zip/static/img/file-ext-wav.png | Bin 0 -> 560 bytes .../zip/static/img/file-ext-wma.png | Bin 0 -> 600 bytes .../zip/static/img/file-ext-wmv.png | Bin 0 -> 585 bytes .../zip/static/img/file-ext-wps.png | Bin 0 -> 558 bytes .../zip/static/img/file-ext-xls.png | Bin 0 -> 517 bytes .../zip/static/img/file-ext-xlsx.png | Bin 0 -> 517 bytes .../zip/static/img/file-ext-xpi.png | Bin 0 -> 513 bytes .../zip/static/img/file-ext-zip.png | Bin 0 -> 561 bytes .../zip/static/img/file_extension_3gp.png | Bin 576 -> 0 bytes .../zip/static/img/file_extension_7z.png | Bin 654 -> 0 bytes .../zip/static/img/file_extension_ace.png | Bin 671 -> 0 bytes .../zip/static/img/file_extension_ai.png | Bin 641 -> 0 bytes .../zip/static/img/file_extension_aif.png | Bin 622 -> 0 bytes .../zip/static/img/file_extension_aiff.png | Bin 643 -> 0 bytes .../zip/static/img/file_extension_amr.png | Bin 570 -> 0 bytes .../zip/static/img/file_extension_asf.png | Bin 676 -> 0 bytes .../zip/static/img/file_extension_asx.png | Bin 647 -> 0 bytes .../zip/static/img/file_extension_bat.png | Bin 663 -> 0 bytes .../zip/static/img/file_extension_bin.png | Bin 557 -> 0 bytes .../zip/static/img/file_extension_bmp.png | Bin 665 -> 0 bytes .../zip/static/img/file_extension_bup.png | Bin 662 -> 0 bytes .../zip/static/img/file_extension_cab.png | Bin 663 -> 0 bytes .../zip/static/img/file_extension_cbr.png | Bin 617 -> 0 bytes .../zip/static/img/file_extension_cda.png | Bin 677 -> 0 bytes .../zip/static/img/file_extension_cdl.png | Bin 729 -> 0 bytes .../zip/static/img/file_extension_cdr.png | Bin 632 -> 0 bytes .../zip/static/img/file_extension_chm.png | Bin 662 -> 0 bytes .../zip/static/img/file_extension_dat.png | Bin 668 -> 0 bytes .../zip/static/img/file_extension_divx.png | Bin 678 -> 0 bytes .../zip/static/img/file_extension_dll.png | Bin 598 -> 0 bytes .../zip/static/img/file_extension_dmg.png | Bin 669 -> 0 bytes .../zip/static/img/file_extension_doc.png | Bin 624 -> 0 bytes .../zip/static/img/file_extension_docx.png | Bin 624 -> 0 bytes .../zip/static/img/file_extension_dss.png | Bin 609 -> 0 bytes .../zip/static/img/file_extension_dvf.png | Bin 688 -> 0 bytes .../zip/static/img/file_extension_dwg.png | Bin 643 -> 0 bytes .../zip/static/img/file_extension_eml.png | Bin 639 -> 0 bytes .../zip/static/img/file_extension_eps.png | Bin 614 -> 0 bytes .../zip/static/img/file_extension_exe.png | Bin 613 -> 0 bytes .../zip/static/img/file_extension_fla.png | Bin 665 -> 0 bytes .../zip/static/img/file_extension_flv.png | Bin 633 -> 0 bytes .../zip/static/img/file_extension_gif.png | Bin 611 -> 0 bytes .../zip/static/img/file_extension_gz.png | Bin 649 -> 0 bytes .../zip/static/img/file_extension_hqx.png | Bin 643 -> 0 bytes .../zip/static/img/file_extension_htm.png | Bin 673 -> 0 bytes .../zip/static/img/file_extension_html.png | Bin 711 -> 0 bytes .../zip/static/img/file_extension_ifo.png | Bin 691 -> 0 bytes .../zip/static/img/file_extension_indd.png | Bin 702 -> 0 bytes .../zip/static/img/file_extension_iso.png | Bin 643 -> 0 bytes .../zip/static/img/file_extension_jar.png | Bin 649 -> 0 bytes .../zip/static/img/file_extension_jpeg.png | Bin 678 -> 0 bytes .../zip/static/img/file_extension_jpg.png | Bin 670 -> 0 bytes .../zip/static/img/file_extension_lnk.png | Bin 629 -> 0 bytes .../zip/static/img/file_extension_log.png | Bin 664 -> 0 bytes .../zip/static/img/file_extension_m4a.png | Bin 600 -> 0 bytes .../zip/static/img/file_extension_m4b.png | Bin 653 -> 0 bytes .../zip/static/img/file_extension_m4p.png | Bin 645 -> 0 bytes .../zip/static/img/file_extension_m4v.png | Bin 651 -> 0 bytes .../zip/static/img/file_extension_mcd.png | Bin 699 -> 0 bytes .../zip/static/img/file_extension_mdb.png | Bin 645 -> 0 bytes .../zip/static/img/file_extension_mid.png | Bin 637 -> 0 bytes .../zip/static/img/file_extension_mov.png | Bin 697 -> 0 bytes .../zip/static/img/file_extension_mp2.png | Bin 656 -> 0 bytes .../zip/static/img/file_extension_mp3.png | Bin 637 -> 0 bytes .../zip/static/img/file_extension_mp4.png | Bin 603 -> 0 bytes .../zip/static/img/file_extension_mpeg.png | Bin 670 -> 0 bytes .../zip/static/img/file_extension_mpg.png | Bin 645 -> 0 bytes .../zip/static/img/file_extension_msi.png | Bin 697 -> 0 bytes .../zip/static/img/file_extension_mswmm.png | Bin 791 -> 0 bytes .../zip/static/img/file_extension_ogg.png | Bin 690 -> 0 bytes .../zip/static/img/file_extension_pdf.png | Bin 657 -> 0 bytes .../zip/static/img/file_extension_png.png | Bin 702 -> 0 bytes .../zip/static/img/file_extension_pps.png | Bin 596 -> 0 bytes .../zip/static/img/file_extension_ps.png | Bin 624 -> 0 bytes .../zip/static/img/file_extension_psd.png | Bin 689 -> 0 bytes .../zip/static/img/file_extension_pst.png | Bin 624 -> 0 bytes .../zip/static/img/file_extension_ptb.png | Bin 664 -> 0 bytes .../zip/static/img/file_extension_pub.png | Bin 650 -> 0 bytes .../zip/static/img/file_extension_py.png | Bin 1282 -> 0 bytes .../zip/static/img/file_extension_qbb.png | Bin 612 -> 0 bytes .../zip/static/img/file_extension_qbw.png | Bin 595 -> 0 bytes .../zip/static/img/file_extension_qxd.png | Bin 714 -> 0 bytes .../zip/static/img/file_extension_ram.png | Bin 666 -> 0 bytes .../zip/static/img/file_extension_rar.png | Bin 740 -> 0 bytes .../zip/static/img/file_extension_rm.png | Bin 674 -> 0 bytes .../zip/static/img/file_extension_rmvb.png | Bin 660 -> 0 bytes .../zip/static/img/file_extension_rtf.png | Bin 664 -> 0 bytes .../zip/static/img/file_extension_sea.png | Bin 649 -> 0 bytes .../zip/static/img/file_extension_ses.png | Bin 668 -> 0 bytes .../zip/static/img/file_extension_sit.png | Bin 680 -> 0 bytes .../zip/static/img/file_extension_sitx.png | Bin 667 -> 0 bytes .../zip/static/img/file_extension_ss.png | Bin 695 -> 0 bytes .../zip/static/img/file_extension_swf.png | Bin 685 -> 0 bytes .../zip/static/img/file_extension_tgz.png | Bin 621 -> 0 bytes .../zip/static/img/file_extension_thm.png | Bin 635 -> 0 bytes .../zip/static/img/file_extension_tif.png | Bin 646 -> 0 bytes .../zip/static/img/file_extension_tmp.png | Bin 569 -> 0 bytes .../zip/static/img/file_extension_torrent.png | Bin 618 -> 0 bytes .../zip/static/img/file_extension_ttf.png | Bin 668 -> 0 bytes .../zip/static/img/file_extension_txt.png | Bin 639 -> 0 bytes .../zip/static/img/file_extension_vcd.png | Bin 673 -> 0 bytes .../zip/static/img/file_extension_vob.png | Bin 632 -> 0 bytes .../zip/static/img/file_extension_wav.png | Bin 648 -> 0 bytes .../zip/static/img/file_extension_wma.png | Bin 694 -> 0 bytes .../zip/static/img/file_extension_wmv.png | Bin 688 -> 0 bytes .../zip/static/img/file_extension_wps.png | Bin 651 -> 0 bytes .../zip/static/img/file_extension_xls.png | Bin 617 -> 0 bytes .../zip/static/img/file_extension_xlsx.png | Bin 617 -> 0 bytes .../zip/static/img/file_extension_xpi.png | Bin 612 -> 0 bytes .../zip/static/img/file_extension_zip.png | Bin 644 -> 0 bytes .../zip/static/img/folder-delete.png | Bin 0 -> 662 bytes .../static/img/folder-horizontal-closed.png | Bin 0 -> 454 bytes mfr/extensions/zip/static/img/folder.png | Bin 632 -> 534 bytes .../zip/static/img/folder_delete.png | Bin 767 -> 0 bytes .../static/img/folder_horizontal_closed.png | Bin 542 -> 0 bytes .../zip/static/img/generic-file.png | Bin 251 -> 0 bytes .../zip/static/jstree-theme/32px.png | Bin 3121 -> 2986 bytes .../zip/static/jstree-theme/40px.png | Bin 1880 -> 1627 bytes .../zip/static/jstree-theme/throbber.gif | Bin 1720 -> 1434 bytes 215 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 mfr/extensions/zip/static/img/file-ext-3gp.png create mode 100644 mfr/extensions/zip/static/img/file-ext-7z.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ace.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ai.png create mode 100644 mfr/extensions/zip/static/img/file-ext-aif.png create mode 100644 mfr/extensions/zip/static/img/file-ext-aiff.png create mode 100644 mfr/extensions/zip/static/img/file-ext-amr.png create mode 100644 mfr/extensions/zip/static/img/file-ext-asf.png create mode 100644 mfr/extensions/zip/static/img/file-ext-asx.png create mode 100644 mfr/extensions/zip/static/img/file-ext-bat.png create mode 100644 mfr/extensions/zip/static/img/file-ext-bin.png create mode 100644 mfr/extensions/zip/static/img/file-ext-bmp.png create mode 100644 mfr/extensions/zip/static/img/file-ext-bup.png create mode 100644 mfr/extensions/zip/static/img/file-ext-cab.png create mode 100644 mfr/extensions/zip/static/img/file-ext-cbr.png create mode 100644 mfr/extensions/zip/static/img/file-ext-cda.png create mode 100644 mfr/extensions/zip/static/img/file-ext-cdl.png create mode 100644 mfr/extensions/zip/static/img/file-ext-cdr.png create mode 100644 mfr/extensions/zip/static/img/file-ext-chm.png create mode 100644 mfr/extensions/zip/static/img/file-ext-dat.png create mode 100644 mfr/extensions/zip/static/img/file-ext-divx.png create mode 100644 mfr/extensions/zip/static/img/file-ext-dll.png create mode 100644 mfr/extensions/zip/static/img/file-ext-dmg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-doc.png create mode 100644 mfr/extensions/zip/static/img/file-ext-docx.png create mode 100644 mfr/extensions/zip/static/img/file-ext-dss.png create mode 100644 mfr/extensions/zip/static/img/file-ext-dvf.png create mode 100644 mfr/extensions/zip/static/img/file-ext-dwg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-eml.png create mode 100644 mfr/extensions/zip/static/img/file-ext-eps.png create mode 100644 mfr/extensions/zip/static/img/file-ext-exe.png create mode 100644 mfr/extensions/zip/static/img/file-ext-fla.png create mode 100644 mfr/extensions/zip/static/img/file-ext-flv.png create mode 100644 mfr/extensions/zip/static/img/file-ext-generic.png create mode 100644 mfr/extensions/zip/static/img/file-ext-gif.png create mode 100644 mfr/extensions/zip/static/img/file-ext-gz.png create mode 100644 mfr/extensions/zip/static/img/file-ext-hqx.png create mode 100644 mfr/extensions/zip/static/img/file-ext-htm.png create mode 100644 mfr/extensions/zip/static/img/file-ext-html.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ifo.png create mode 100644 mfr/extensions/zip/static/img/file-ext-indd.png create mode 100644 mfr/extensions/zip/static/img/file-ext-iso.png create mode 100644 mfr/extensions/zip/static/img/file-ext-jar.png create mode 100644 mfr/extensions/zip/static/img/file-ext-jpeg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-jpg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-lnk.png create mode 100644 mfr/extensions/zip/static/img/file-ext-log.png create mode 100644 mfr/extensions/zip/static/img/file-ext-m4a.png create mode 100644 mfr/extensions/zip/static/img/file-ext-m4b.png create mode 100644 mfr/extensions/zip/static/img/file-ext-m4p.png create mode 100644 mfr/extensions/zip/static/img/file-ext-m4v.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mcd.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mdb.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mid.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mov.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mp2.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mp3.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mp4.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mpeg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mpg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-msi.png create mode 100644 mfr/extensions/zip/static/img/file-ext-mswmm.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ogg.png create mode 100644 mfr/extensions/zip/static/img/file-ext-pdf.png create mode 100644 mfr/extensions/zip/static/img/file-ext-png.png create mode 100644 mfr/extensions/zip/static/img/file-ext-pps.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ps.png create mode 100644 mfr/extensions/zip/static/img/file-ext-psd.png create mode 100644 mfr/extensions/zip/static/img/file-ext-pst.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ptb.png create mode 100644 mfr/extensions/zip/static/img/file-ext-pub.png create mode 100644 mfr/extensions/zip/static/img/file-ext-py.png create mode 100644 mfr/extensions/zip/static/img/file-ext-qbb.png create mode 100644 mfr/extensions/zip/static/img/file-ext-qbw.png create mode 100644 mfr/extensions/zip/static/img/file-ext-qxd.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ram.png create mode 100644 mfr/extensions/zip/static/img/file-ext-rar.png create mode 100644 mfr/extensions/zip/static/img/file-ext-rm.png create mode 100644 mfr/extensions/zip/static/img/file-ext-rmvb.png create mode 100644 mfr/extensions/zip/static/img/file-ext-rtf.png create mode 100644 mfr/extensions/zip/static/img/file-ext-sea.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ses.png create mode 100644 mfr/extensions/zip/static/img/file-ext-sit.png create mode 100644 mfr/extensions/zip/static/img/file-ext-sitx.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ss.png create mode 100644 mfr/extensions/zip/static/img/file-ext-swf.png create mode 100644 mfr/extensions/zip/static/img/file-ext-tgz.png create mode 100644 mfr/extensions/zip/static/img/file-ext-thm.png create mode 100644 mfr/extensions/zip/static/img/file-ext-tif.png create mode 100644 mfr/extensions/zip/static/img/file-ext-tmp.png create mode 100644 mfr/extensions/zip/static/img/file-ext-torrent.png create mode 100644 mfr/extensions/zip/static/img/file-ext-ttf.png create mode 100644 mfr/extensions/zip/static/img/file-ext-txt.png create mode 100644 mfr/extensions/zip/static/img/file-ext-vcd.png create mode 100644 mfr/extensions/zip/static/img/file-ext-vob.png create mode 100644 mfr/extensions/zip/static/img/file-ext-wav.png create mode 100644 mfr/extensions/zip/static/img/file-ext-wma.png create mode 100644 mfr/extensions/zip/static/img/file-ext-wmv.png create mode 100644 mfr/extensions/zip/static/img/file-ext-wps.png create mode 100644 mfr/extensions/zip/static/img/file-ext-xls.png create mode 100644 mfr/extensions/zip/static/img/file-ext-xlsx.png create mode 100644 mfr/extensions/zip/static/img/file-ext-xpi.png create mode 100644 mfr/extensions/zip/static/img/file-ext-zip.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_3gp.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_7z.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ace.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ai.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_aif.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_aiff.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_amr.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_asf.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_asx.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_bat.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_bin.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_bmp.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_bup.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_cab.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_cbr.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_cda.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_cdl.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_cdr.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_chm.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_dat.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_divx.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_dll.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_dmg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_doc.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_docx.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_dss.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_dvf.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_dwg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_eml.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_eps.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_exe.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_fla.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_flv.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_gif.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_gz.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_hqx.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_htm.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_html.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ifo.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_indd.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_iso.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_jar.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_jpeg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_jpg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_lnk.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_log.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_m4a.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_m4b.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_m4p.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_m4v.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mcd.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mdb.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mid.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mov.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mp2.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mp3.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mp4.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mpeg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mpg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_msi.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_mswmm.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ogg.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_pdf.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_png.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_pps.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ps.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_psd.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_pst.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ptb.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_pub.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_py.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_qbb.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_qbw.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_qxd.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ram.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_rar.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_rm.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_rmvb.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_rtf.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_sea.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ses.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_sit.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_sitx.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ss.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_swf.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_tgz.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_thm.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_tif.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_tmp.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_torrent.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_ttf.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_txt.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_vcd.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_vob.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_wav.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_wma.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_wmv.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_wps.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_xls.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_xlsx.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_xpi.png delete mode 100644 mfr/extensions/zip/static/img/file_extension_zip.png create mode 100644 mfr/extensions/zip/static/img/folder-delete.png create mode 100644 mfr/extensions/zip/static/img/folder-horizontal-closed.png delete mode 100644 mfr/extensions/zip/static/img/folder_delete.png delete mode 100644 mfr/extensions/zip/static/img/folder_horizontal_closed.png delete mode 100644 mfr/extensions/zip/static/img/generic-file.png diff --git a/mfr/extensions/zip/static/img/delete.png b/mfr/extensions/zip/static/img/delete.png index ace289edd9f926ac7efbb4fdec05a31bebff5c50..0d1b36d244abf7c58a200d28f14fae083d068a53 100644 GIT binary patch delta 474 zcmV<00VV#o1@i-tBYy$9Nkl%dl~HOA4H`mXMZj@c%!#Cx#{l*wLZJ6 z>Qxg|xqP&$R*f?~o=Q*798U1P{yg$^{;jjJy?UhT6=PJrdZKF9PFBsjDczWc9bj_i zaPaIIC}!&L{{>qX$a8utC(ChcgB(W#P0kz+o;~)Fh38n0Z;|)>Zn@9ylYRC;pea8vL`KMf#EpE*(`J6FhidB1e~ zxOD5dsPyE_;owaNh;U-elwmRHGe^0A(`Sqnm7bh=;Buh&+j!s}(~}3P4aC?7eAmjb QFaQ7m07*qoM6N<$f|@(=4*&oF delta 672 zcmV;R0$=^}1Gfc`BYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU! zSxH1eRCwBqQ%h)5Q4l@%eUplX`e`82R76o~gj&=tTBD`fx=`G8<4#=&c2VfUwM!R* z3kxp9jXO6g3eupqiFHwx2sK2DA8aJm#>QxDlb83q-g)V>(SHbbV7Sc8Ip@vXd6(fY zOZ0S%amPK)IS=?b#+bom>Bga_ne+8nfdTV_WN&o9v8?g7!~JOO+6S$r1zwc{X0eET z>IFVcK7y>OgR!Y}{11WT!RP>!gVuT|+ z@oEBMHumE?L)()ikK83Pm`bUM%udCmi94x3Wgy;_K{9I_=cV z)$Lo`5e|pMWd*@_tw+Z&FrWK^cOU1F`1W(y$NMAr)+~I-tpmF*Y*Lkz;vzI~AHmE; z%f37G?9C++ycJ$*c#U-y5x&t|@v6DP3x3=6&l&lb00RI}q6ifUxb92<0000<3DcIvk3wyk`OkLEMHe*ta@_oHYx&}^!>^ZWLEpCX_Va=X1J1D_w4S#+ywnHms z*RI^R`m*&q(i%92$!7Qq+?z0%&wu~&8{yWCXA~<{oN~)HQ+ClxE|(|-PI?2_lm>#f z)@Q-1n;ToBm!$0c2xkQ|#(193s0K^H99;=9o3;89v0IT2PM-1~RuGKwHz zb7mutWTWGm^AydO7p=ev;hZOTE_A#uO$7Jt+lhzQ?zKb68b#2jFu1>P(rBO%vGb7y a6ZsDvEwW37+}BY60000(Q>+gL03SUW1$h*O2NqB3^UsJ3lJ8`QRKWuyF+P(4sr49l}| zsGjg^c6e4AA_0kcv9&0{C2CAb(M%gwgH6;5+9*;|lh9g#m?tf!AVT0gCM6jN_q4yo-KL7v# literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ace.png b/mfr/extensions/zip/static/img/file-ext-ace.png new file mode 100644 index 0000000000000000000000000000000000000000..c7020ef45c0c6e3c1668a4783f3132d03c654751 GIT binary patch literal 593 zcmV-X0qC^Ri#QZ}E5;$|%hKmRn8jMmv{lL<})lk2B@s5RhEZQ0;z$#oyW8~5QncJ^n zVyB7_N}+U-9LUgm8Pc_wjw1Q9*pA!88NtdI8rbff@i#0emPd*N{ploEtEFmLZ2jBHgJ%MP!@mV;NKm)ovUdFP1R0kHwncHjb- z0ERRzh6VfYA)(nvA~O;p#C;WE{>1u&JJ9e<0A~!0Gt4*UL5+)mGU|do`!}r#!vP46 z@J}cQNv)xX#9(8#l7xaVW`YT*rj8>(umj(Yz&SJ+X7#NU4b16R37Swa#_f(Q7wiC$ zOJtr0swFBF$Pf+KYiqV+fe^<9M<9T&6cU6C$QYW0opj4`0Ha8fI0Q}!0LK|V5I~_c zMWQ5$pf!*L+MT1q2}rcba)yr^p!}bw&Kx^mLurNoBLtWjnZW8{d{A}<#j!GwExt-LZ00000NkvXXu0mjfB8C9U literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ai.png b/mfr/extensions/zip/static/img/file-ext-ai.png new file mode 100644 index 0000000000000000000000000000000000000000..8136601dc5cadaba2e325cbacf65a1bc107c8a59 GIT binary patch literal 560 zcmV-00?+-4P))z4w{5&G0#{5ht~6L~U%dZo`^U-G(oy-JrH@``+nhgUA0Q>$BftM$C*C z^W>u?lwdTK0TRmFj$5n^jT8Zx-`sJ^LNEgW5ikpdGyzh6-@V%U`E=RSafeNA0>FTO z|9G~06XK}bpFpPxGkCIPJ6-k}tycA)&K?7*U1f zk1u~wRlZ+6M``sSO3VL(I!IEWPIWg(Js^rvjGT&zv|N{xTQ!B>Z=Uku#9m&)*{0$ORAu6AYN1+RyBYS zA@6IFiFHrN%EI*=%AXCD@aYlSp@L|3ElF`l09;NUSaSdY%+Q=d(xXdp$qy)Q4_}}9 z@e*8NYm&8n(Y)f|LmB}@099`+g148TxU?>x-(H3s^`#|<1fMhpeE7q0YHJ5#U`E{u yMx6vCv;==g06@$P5$Oq(@PEXE4?ul)K@0%SYsJk9s9-|?0000+7=_=jamVx9wrv}+Z7gHk&L&>Rwrz72+qQGN>dU12dB!^Ju5;e9s45dH48Cfu zeH>MCNEHPH0g;Qf=eB>AT=D=Og}*3M2DKKE&>V$T!+$7TI)3t*u_gOWth=yN&D?;{ zY>i>pym>gT3nH2SJ}X(0ZBu8^cy(`=H$4BzYdrhO%e?y22Yl1$>6PNc8*Ku}kcqy^~cPrvc#me!(qJW263C5XS{zY14@~j)RE@0Jxq9 zMhgH0hD@`uQK9crdQ2l?X^9cQcTsEd2Uu&sz<;A^hpfZXb5$c6Rn>e~&kN?w8yFBO*-c zvHOc~Wk&CRA_xEjm|=XFwY^hzBp?8V*W6`LGms=O#t?IhSK)^6m$-G91!X>h!NU^LaTPrJ?sxdqcu6?d^iPiwj6A(D(U`h~H z|NBj-iiDg#ei?OJRnqwcYrwRb1ysoy$nX8z-l>)m2WtbuAGNXam9d2KlV z2BHnRIT{`asP&PF*Fd4n0z_Ol$Ji|se}2302>x+l+9rgMN$-MxkW7Sw0+z!OQVsw9 zZ)4$@iy(qt3+EqO=fD!K0b_6l!AWOh(WGmTf^@^b8UBG`F!&k2PYBZac!EFSpQm2m zzgY(a5K;6E)WJkBKOa*PX=4!p8Ig9r644_l{sIPb;I@yBN?iZ|002ovPDHLkV1fr$ B`L_T7 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-amr.png b/mfr/extensions/zip/static/img/file-ext-amr.png new file mode 100644 index 0000000000000000000000000000000000000000..f1afbdb269b52cd0d4d428d221cc2a25cf28a1ca GIT binary patch literal 480 zcmV<60U!Q}P)KdD)>hFx~$!h?5q-r?-F7qNE6tPHA(W}8NXs$j4E*nJ-k zJA$Jx13q{$l@&1qNEx)+ss1wO>O0I@K6sat&L99F1A(fXl70jD<7Ym3i>DH%)1j^q z=FA|K5Mx5%k((1%FI=aEXf?Kyh;AqA)_a|1<*$Ssf1)dLAkKSP>Q zF$2h^X3%Kt_!&CgtX~IgSfAe2bCnQK)pUBu*VFDw=l&s{zlT^Syr+*U5@rD*?E{0n z`~Y>G(jOd7XOO;;_8Gv2>YvHU55|v-kr)A{emE6L-!l$Ej8O<-cMMtjvOLE49c%>E WN1@JJ$Z^sD0000r)va= zKt>xncV2+!DFB=lgL&eK3u)bM9$T8;#{F79b=G^M)$-qOdI|!001C)i2N4fja%B`G zosbqGSuiLC6n4<>h4Z=K@?)R8;G?lUs*C{q5m@rTv4=$Y^T`Xi>hyyFc&y(ljy>sM zj(&4C3V7(L^H?@#>mxM+lGeia@S`t_Dm`2X-Y(Xhv^tR|r?l~v9ra)xgn zK93v}ukf=25#Xo;LVR`2@qBURvD|s=f$Yue+5=K~!}aGK%AR}>aOnOKj(T|*7TBX< zdyW$SFj9p&Mvyg@l!lCftUxTRI3OP4xEBYJ7f2gO>VT`UjS47ON6tdV0tK*6um#J! z7I%}(fH(+;15Q;Rfu|H!VCb?0MhHfd)r|b}cDAR2Z%yD^3HTa)V3gyp3Cl?qg5eJO z^Pciz1Ee*+?{hUrpp?RhkT8~4d(UF>+9bw-1C$3-HzawbvLqxVGD%wr$&P!^W;{+qP{RYuh-z{YSgw`I4K=d-vqbF9R%TlI0|h zGZM#yj{0=K{9}NrgqJJe#WH1u`?vC3^V7x3LP~daByp4-3@#XB@MIwgBaOtd?u<4P zh8x_U&7Xb-KKGEn_z9fF`N5RGI{;(>x%}>IZkgul3};vN_8^=a6hd&aH;@2jpMfOTefKjU&9y7} z=<3A<7aZ*d<*%XW5%7_O!A9b6<4<>!-~|*uboJtb3l4XMl6#PMRp3MZ4lpNFJ%xPj zaxc4jae;!d28X&(^=h@i(@=Px-`z~2>zYqN=26Hw>FULa_Y;gW$6U6)A*AmRybp5s zL)LE1+a=hA_O4!>_#lEqovB<~kIF60seZi}vNuBJdPz2DUWE2eFD_7!IKkjZ7ueMX zcC>=6%|M^6H=4C~_2R_W7Q7v0x3xr{sO+Jm9&!BVYYBAXm8LNy-Xr)2n}5lxPzgY+ P00000NkvXXu0mjf$G7>? literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-bat.png b/mfr/extensions/zip/static/img/file-ext-bat.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c5606ff7d0ae0a8a672fafa7db760512cc070f GIT binary patch literal 558 zcmV+}0@3}6P)Meg7o$=G}AV%!M6bH}{0|*I7p$ znR&$FKh8K}&y2%{=HK)`$UBrjJ{oq&@8exwFZMs!C*@sk53jSkcx8CVJ%=d=-^JSu z&~C4?x|n+KEi<&c36xGf@Rnz3?F`@c6k(Trx%>hbS<|G@5a_!1N4Y@Vrp4xhUb}6Bvp1Z z?w~!w=zVXAD{W`i2^SWgb2lM1XhTcD^~frgUh*N?4BJ9-MVC39w|vNN3Ah|u%JM6| zOgZj?5LVd2q+`xf1l84-&t|~6z+zTh^W!(BopNK5Ig#`?)R)g@z-hmHR+-nHea;IZ zvZRAqXT78ds;e)bC1Cb3CysmPu>L_fne_wMg6itaC%+}&sCyQhpGULqVK`ZhgDk%0 zk08}rb@k=51k5?^%n`SA_Sh%0>s=DtUMH~SRXm$s#7VVQU48kG|Nl2Q__ERzO~Xm) wBD2J!(!VwJ<&*!v0D~!p-)Bq$R)!e>0JnUG$>UWh`v3p{07*qoM6N<$f<*ZfZ2$lO literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-bin.png b/mfr/extensions/zip/static/img/file-ext-bin.png new file mode 100644 index 0000000000000000000000000000000000000000..44bdc7cf90d306d6e287a46344fab18ff3e9268a GIT binary patch literal 473 zcmV;~0Ve*5P)jhh zWQ2OKc6OCQB*7&PJGgkI7!d1`h=7P-P~`I-7wkCXz}AiPs8(b*}ODOYy8)y>+plylWoBg zF@g%kpAkU}QH;RV8_)Sa&wsQTcmhW$N>qyhZnpwjCkvS9USaFBilj&T@y7s3IHptq z-*@RS;RN4*MKA`m2H(|arBL?2=R`eAnpQ9^V5=u*VfbKW_$s}T|Fr4A@;Id;>(BEoM` zbeMS-OAtl_-$C23i1pGrL?cKjtsGQ@r1V{K2{-NxM68$Y79@JgeV1KHIB7ep7dv}0 zFLfXk451vjcqr0GtY`h?f$!hm?|glUI%E;+Ckt#@(zF+lldSV@^J3u-lNr6?i<%D^ P00000NkvXXu0mjf-l*0* literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-bmp.png b/mfr/extensions/zip/static/img/file-ext-bmp.png new file mode 100644 index 0000000000000000000000000000000000000000..1876576791b7060f1033c6e9312c5b98c8b93c47 GIT binary patch literal 573 zcmV-D0>b@?P)lUX^hXw_byNYCvLzEh60sO z^yxP;Tx-*(V{H&HO%M^%1T5_ckOu+&T5#tppg?SBS{4A(697RUC0wL7kK}@Cv{;u0Z9@LK`0E?g_*?PoFHL;A#t!TDHBkxf(ex2;_vq_ zd^kD?B_^*HY@%GNG59h_u@5&<(UJ(D<8P_>=NeL2K=4q-dd3aE2am5Pu~3{BkM>fr zav3CA9F&2GV0jIaW()`y76@azVkAPvusi{h-XO)QRV427f&hRZSe6Ivi2{Lw0yQGN zIP0*C>DglCrF z=zk_0{nxRjcg!ZJu~F zN#83Qu4rpL=L|5a!s=fQ6jwJ>Slxm}rfbPqRNvf2QFW7+Gj;@6`MnlVpEF6Mmp37b zE@mr@X||6AWNVD%pz(9qJxuap|f>RTwNX=c=w6fAlYQNhX|H5~(%{-|Q& zoea#%qpqj(E47A+cQcuAD}%8&)3y54dl@YMS%t|NU^@1nCEqKU^EjKS53=bt<8 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-cab.png b/mfr/extensions/zip/static/img/file-ext-cab.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8c11ac7e487b36c871e5257ee16ddfa74050d6 GIT binary patch literal 582 zcmV-M0=fN(P)XKV zJ8ti@DDt0sGXOA%_YDw0R8Y}JmuI#3mNEnYvGK@3E%6=%hzv40h&%)efrE3`pM3Mz zh+WHX&TZANoC7oCZ5HM)-HvlgI%kaR@CTzh{l%ocuxRNf9xv`h-&~!(e~;KDH|DnL zTgrg|sR$D9CvmD|@Qf%hp0fT1Z$J7IRfXImRt)@(0ZO0RqxU2(&1%sDK*>Yeg9Hu| z@uSSxdY6e^|0eAtYW?*SKMp<34}-Vx+i%}u=DU~6ARUIW14IQB#tlM`I1tRb1*sMN+P%eYFVT1$< zqTq}%t$$(0?gwZxAdz$kAl{RTbwVL1g(XB0<`nOQ$O+SS-)C&gp9uxb2?QEHaZiwP zB_MGRAfZGaQU>E&{sKT+gwP2|Rm8~akn$N6_8^O}y5GMPvZn99@gC*`aT@E&XFy>O zoWs1Q&0n8UNSnVu!&JdJz+zqbDTqMY$0a!4bIQ*PFOZ82h_{3f-w!|q$m>MPIS^9j zk@o@u;FI^k$RiZm3SfDilo?}~ez7+=d8c_`REw9qo;-+|AtHYPpHp+5o7qi(cU<1v U`*Fy7lK=n!07*qoM6N<$f@V?;ivR!s literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-cbr.png b/mfr/extensions/zip/static/img/file-ext-cbr.png new file mode 100644 index 0000000000000000000000000000000000000000..7c61e7d618ac721ec01603807d52e54873f063dd GIT binary patch literal 535 zcmV+y0_gpTP)R!qOV&&YtJ; z#mij2bVa_(o|#|9VtIg6S$UO&YmK>yGvfq|j;QdCqdeS;(J0I^ki`iI24k+{5caD04(VMeHZ=$-&w zy#pjAr%~U~#OpV2+yISDEyTtp(bd!M0ibJiboG&wS3qWVE-7MR@rlWll$Nu*w~y4} z(Gi8krL=eUcmn9Ob#zlwR;f;LX$3_k<>VKY3TUB#=2Ko-Lrq;Ht?gat`hNh!FlZHk zy2h4&PeTi}_081OH;LpX`4@n0MEt*i@ALKbJpd963JfHK!J0wpQ49bAWgs>t0V~4{ Z006L6e#Z-clC=N;002ovPDHLkV1lID{73)* literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-cda.png b/mfr/extensions/zip/static/img/file-ext-cda.png new file mode 100644 index 0000000000000000000000000000000000000000..6c216231b9b42b9fa5d73a6b510a0cba6c12e61f GIT binary patch literal 589 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 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-dll.png b/mfr/extensions/zip/static/img/file-ext-dll.png new file mode 100644 index 0000000000000000000000000000000000000000..f69421085fed327b4bc4d36006c1eca8bcb56272 GIT binary patch literal 476 zcmV<20VDp2P)RTCTp$!qqoX{5IRf zt-rlLI2c=3V{}c;OMBnLt4d)N`o?B(=~ZT1M8Jp`UVfc{>+f>B=6iTWiBpdfL3IvJ zf{?I);Z+6hd@jU;&L0( z$gJtZ=aP0@c##f*29{*tJ{TYhDV}Fm<7IZOxHWj5RfDG)Rd^;c`ejZXGw#9z`WKGz zI;URzxfUwD759_NK=Ja;oIQ780lo7_cwf*AmBEHEV$Pns@PMA#LnM^8<7G}GsAH88 zHN7+7rI@qlE-avHW*;e)J@~JW#qCI~>gDxj?70gI=$zg~R{bCn%DO-)bXFu)^njOQ z&YrulfR4#+u?J!w4u|zL~SV<0umch$6bN1YE9{@Q2Bw?E2)i}%@_W=N*-%|o&V-m0uNFM+^`p7qd SJaNSU00001r;P)r7!I{k&qzuzG1Ke+6LF3$i!2puF7KB;7aWJmLT zpU8nR0u4nBf9xZ34#kTAJTB;(0`3s0rZo6OQDZp9?tW+clhe z!r`dXr+S3|5Lyt=AjY6Tq>hj8Jb~vggE#FdTzTQC2oPC^0KEkS!qx-NL)+qq2x)nI z1WR-3nYTWlj4z2!kDP#+jyj#a1*9G@?*#Rw!lA)QGOqae~- zz}8nSDBZzrs-QrFD%#_o1)4+%fI4ZvPY0r^h{##M;WUqU@BygrE{FjD#RKQ@@HW%t P00000NkvXXu0mjf@P7vx literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-doc.png b/mfr/extensions/zip/static/img/file-ext-doc.png new file mode 100644 index 0000000000000000000000000000000000000000..23b079c7dff59167275a98e595fdfec532ee04e8 GIT binary patch literal 522 zcmV+l0`>igP)3i}fJ9SaS?L8oTS zrAN|(NVVeq2(12?fer6cAYBV!qCJi+Sad508iJh;4VZj898>N@VA|aX%)B3|&Z#sf z(>dKUj`)#+C1l)YT?3w~mTp{f$Ybk$f78*?(+{5Q#1XG4*ltsenNMRFwBI-bz5N4h zeaIve$|^L!3FGcXF;1&st4$RqJZ1u9RCR!-tG6GmU40PWCSdlSN-^baB9xdX*J3X{Qev4>hiUJUAbd`N@F|&b z#A^zcn-^iumsCvqn1bn_QZVy#DyGtU2Cap!X%N4q(M)BWR>4Bk0ti1d43;=;f?!Cd z`I!4Jo0_Ai*^DE8q+oD{MH_d51kDL!ux5~Y6a#=j35bnJz)B!}0Of?Rt+4TB^#A|> M07*qoM6N<$f*cs?@Bjb+ literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-docx.png b/mfr/extensions/zip/static/img/file-ext-docx.png new file mode 100644 index 0000000000000000000000000000000000000000..23b079c7dff59167275a98e595fdfec532ee04e8 GIT binary patch literal 522 zcmV+l0`>igP)3i}fJ9SaS?L8oTS zrAN|(NVVeq2(12?fer6cAYBV!qCJi+Sad508iJh;4VZj898>N@VA|aX%)B3|&Z#sf z(>dKUj`)#+C1l)YT?3w~mTp{f$Ybk$f78*?(+{5Q#1XG4*ltsenNMRFwBI-bz5N4h zeaIve$|^L!3FGcXF;1&st4$RqJZ1u9RCR!-tG6GmU40PWCSdlSN-^baB9xdX*J3X{Qev4>hiUJUAbd`N@F|&b z#A^zcn-^iumsCvqn1bn_QZVy#DyGtU2Cap!X%N4q(M)BWR>4Bk0ti1d43;=;f?!Cd z`I!4Jo0_Ai*^DE8q+oD{MH_d51kDL!ux5~Y6a#=j35bnJz)B!}0Of?Rt+4TB^#A|> M07*qoM6N<$f*cs?@Bjb+ literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-dss.png b/mfr/extensions/zip/static/img/file-ext-dss.png new file mode 100644 index 0000000000000000000000000000000000000000..34e892d692ee7879da50a6e6b0157325f6f289a4 GIT binary patch literal 503 zcmV+L4|(~8$S)}J zn4O)6i|botW@LaiI6T54r|}cG0+-i!C=vlEZJ~`NdVYR+jqI!}dxp(m@16QG~)VkK`w3SE#FRaMNTVGcyy1C+DC(uE6o>xqB2rI1)o7TI`X$rL`UV zhsW4EIKr;;gQF90<+vkKz^>YaAeBXcE)B$g%B>@Kr777 zFQcro2C0mB>Zp$^Fg>?`#->(O*VLo5tm@Y~L~_QNr!KC5(HaxebLi;qLwjcr8k^hj zr;#(xJayFnUBDQOP0pZyXcYZ}Bk1WH@()_tx`^bAGw*fO|5ZQ;@xOIJ<6T2*%}YC% t9?2PJo;vEk4aEQ;PzGXS60kDN0008>fQJ+Qk4XRk002ovPDHLkV1gw?=?VY< literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-dvf.png b/mfr/extensions/zip/static/img/file-ext-dvf.png new file mode 100644 index 0000000000000000000000000000000000000000..11db5a9ff479f895fcfa822c2b2fadf4495954c2 GIT binary patch literal 600 zcmV-e0;m0nP)X@zZzP-3msyBd$Yrb##rnwWgpx3zv^b=+D8#jP z9BGr54}}#xdd0zzKgz+)g4El#3A3!%WEJBYuAL9LkCVXBD9xz#YF)+G4>qFSdodSC<)lPwVLyv{)NOSB5j<$ z?JbB98AC})$X5er5L-ZE$MyvSN=G`P)-@yHdQ zl+xM4|51|81hVMe$z{XyAO;7F(mGqa)-50cBDrV`!gJyWc=7s8?mB}P?>xI|RF_zR zg#M`j2M-+uSr)YBbD%&lXv^Xqdk*62mPr`0>|bY=5KB5E5ep0fP<+AleR%vamV-;{ z#`3R?Kq*)(h5CV&!yBMfsZyO94qvuEA_xhzhU?gHY&)D6jC8}}p+vF5sNQb{s`Z+K zLWS~&9k-2)z$8|3Kt%kp!LZE1j9d8)y~^ae^R#?N~5CatD@UMm<~;+ZU-a3*|TIomQ3l8F}(-Zb0kOc zOC&Knt_#aCFeF}rEIgW&P7%8UB0w7hj|B#Rh>b8K7X*iOofZQHhOYi--McTc9{huTxs!@hk-et@5Ib6AmmV+ghl z-m-p?ZDVMzyq@}0=;Os9uqfClgwO3S{RKfVFAzrEETsMVkkdW`^e36D>w;0+zA;oa zmUThQ_HW?-<^G8NmkJbe#%I7B|3(~}!*Okkq|^3DRI5MheFM!_1VTj?V%XJu?3+R_ zx^KY*%y?IiW1IPKXS7iaPE*@Wf6ALWx*bg7zvTh^x6I%4>#>FEM{Qny-LJ| z*b4sJpHAz2$+X#(K(o!!{I)urlOOUC@>zTZ47y#8Xnr^g(RP0_9rq;Aa%&9Y=cR!N z`FsZSyIG28eKd;}2hu->ZI4I%wKjs^mj@yG8=uA38T7tZ;IYUfqYh9 z0X?r2BQC^L@bCUK6!8DHIR4of&9AG%Ipv>^kWYTEr`-EW5$`f%q^ cz{)TK0AR<|GxalVLI3~&07*qoM6N<$f=UDnJ^%m! literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-eps.png b/mfr/extensions/zip/static/img/file-ext-eps.png new file mode 100644 index 0000000000000000000000000000000000000000..2623955aaca9f89bf594ba99b80dd40aa4e140f3 GIT binary patch literal 523 zcmV+m0`&cfP)K?Wy0MA1}{-KF{7kAkpvp=A|b^ zWy|;hbI!QHS5H4@-m7WK-7C*pD~Yv|v$hpL4%DNFx)u>KQ}+58h~Vp%xmUe!%KiJD z`R&EgtliG3P__tKrD;^nFlBA1>RPGL``_rr<2gNib!r&CXa(t%9ak{uE5n8IUulS#|p+KazgEEU2vys>bAFPS`=PWeas#KY08- zJ&zz+H;p>!!Y8d+-zT*lKdR--ZM%~%! zt-6zDr2f$LV%QkfxM@TolQ!+*9dwMk@h_{dX^gnJr~AMGs!*n! literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-exe.png b/mfr/extensions/zip/static/img/file-ext-exe.png new file mode 100644 index 0000000000000000000000000000000000000000..608b775474414ff18f846d62850dc87f242d717b GIT binary patch literal 506 zcmV1rTr57Sn zR{wyq{+El=KaQ07s>dMaK2N2|9ZiF$QBrLEhc3H(&~2BmHM4&h0kmE76e!ODvFKGQ zALpTm!2o&2hmkCg86VTnu6(25Orz;oeWO-RA9)7P!N_QA=Y}>$xv%%Pq3y=r)6;Te>p~+ zj|9Oy;c7G{UyEV(m{X@|aNtjgh+{#FyBLj0*J3gCdaO0GC%C6h(_qifVobXekEXyq zb=0eV<()qZG5cvMW<5&AjE8D+&OLS1dl(pZyv43x#aQ(*2P>`2#)=Ovvge$8>ZtcH wFs;A;l|#KaH%IEI_b?C)5{_&I2RRHH0Lfm)bH+hioB#j-07*qoM6N<$g8D)81poj5 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-fla.png b/mfr/extensions/zip/static/img/file-ext-fla.png new file mode 100644 index 0000000000000000000000000000000000000000..b3faa0a0816ea07d536d105e8aceaccc933679f6 GIT binary patch literal 557 zcmV+|0@D47P)Nkl)97o5txti^>ZNJ#IZQHi9j-7^+CFc@_xJ5R-%{F%5H4I;Mm)3{i=&e+T7WK0E?d zGIo@5o!jn$U0X1VyIR7cv4lop35miK7y%ns^Z3J$C=;kW$ko(rA=_+F`}t~%KC00000NkvXXu0mjf5XJbP literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-flv.png b/mfr/extensions/zip/static/img/file-ext-flv.png new file mode 100644 index 0000000000000000000000000000000000000000..222df3c501ca36ccafed40bd8af326228a3eb1a1 GIT binary patch literal 553 zcmV+^0@nSBP)x*7>1v3=HN2hw%fPKw(U0Awr%fP$5pNKD%-Z}vNQEx{C&2V+;TfDpY;p zC6m?hJc^f~lss?n<$W#k$s(g1bEADbNCA{0tJL>j4@9{B{a4Kgp)$uB{Q5GY2moW? zPn3Jp=Aaxq&mT|FXy+zwPnbeWli+$ZHvB(?EW{$e5^?NM2<1BY0P$1?VmW*RTF#!% zb-!=;gEEy=gD>xfsr)q(iJ@H=?KruY<@fXX#A(X3ZOt2TxTAfvj7IQ`8495C`-#WW zMmuv^Hd-_Z56T=pOcN6)T%{T$6Ch9!01(Xr?DVA+fi9h>boLCoR0+N>U4{1fQu~TF zQ6#lsISyi3U<@V}r_A2%Bp*NJQ@akRvSqMBp)^3Gm<(b$8Mx{6l_ofJFaTEF+EjY| zI9-zCLaew95Qs*w92XJ6#1i<1^vAq@!=Dvv5x*bXAHXP;+6Pj&giHpug~a1nV@IGH zHXyQS1?Iscuq?FShcW4WNRbRkk5M%Cf;m_{y5K#2f?T|c6$s|mY>X+|!~#7iT{>kp zPo9ySy%-%1gHjaUSNs%`2^=>7eTS#|;JAKJLO}^czJV0#!527p@4}@{=_3CPF92x< rs|PV**%@S`5|9#PARfF2>b(a5Y~H$fUipd(00000NkvXXu0mjf@`&|S literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-generic.png b/mfr/extensions/zip/static/img/file-ext-generic.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0592ab4888767b8582cb72ad2173e370137dcc GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ot`d^Ar*|t42^AVZJ! zI&!&T##Bb>2CX3GBte}DeSzXP)HE)w=+&Vo#$e*@%!&2r-ZZYB3W252|ru$)6f?$>;bPjO1z!8cga1OH|>vAZlC4t-_ z2&gJyPy!L7WLO5(5~;B~fh$P{rNa`a`n(S8Du7aP#7XUx}Ui=Geo2rP?_TM)yy6N`~!~L V@QNtlj!OUl002ovPDHLkV1lK4?LGhi literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-gz.png b/mfr/extensions/zip/static/img/file-ext-gz.png new file mode 100644 index 0000000000000000000000000000000000000000..90321d39704b2e095023e2762ad6e421d043fd69 GIT binary patch literal 568 zcmV-80>}M{P)6|2 zGuS(c5N-vO!hK3z?!0Nx`@ALt5d2)MTvl(w9#m-xp?;cdn597pV@WW zu-d#N9Xb?jGRd07OIf>Q8LJj7=H5q1{_R(UNB17Ebk;n|j<3ge-~Lc*M7|!g(ii}o z*H|+bzY_nkMJvr+9#LU>6Mp#Vr<$V+_nx1|fFym4F>ZLNv1`hD^0z9D z_&%S0@i}Au?aqLI+Vj!JpI}9*yi$X(4n9U3lu~%wBUjU+DI*&=d-4=N{r(F-|Nbk2 zV8xO)1qC)K7|+9Kk4S3WKYdfmND=N_zsd3ahd6%l5Xbf(1S@H~0Ju;C1E8?lzZXB4lC1s=l9@?FaXM*9lG!ZBizV8R11LU#g zpT-4nN(wsoltyXCIi9p_^j-d1pv2%>&w=7YYN9P+ZH#eT+8QX3u!x{6ALsb$Iq*r2 zuklovmI^t?r{6{|f=+lWsyq%G=886&Xd>oT6>_Alfl_E6VzC&AAn`aLgiD&(J^MI^BJ4e%z}*9{Rl1@HuxN!`MY8}Kjy0000<)uR9N`cIg7PF-589? zlFeo%dp9_1KX~o`uE9CS?!hs;hsW$4ov^)s$lBHp%j=u0ZSJtXy-VNV5b1RKFfYKL zy1jS6jq5kLb?Xk7FJEPAYYT6)i_3)GzSX+DtD8(ZeH6Tb0Ja41=;33YK7G#Z+jn(g zWo3<-`9;E^5Z^$pr>`G*?s)*PxxLSe7q58z`YjIyw6n9T3)8cU)YjD#jYNoq!z{0D zVyz(n@NW)S&Oj!zWw z^5q+1v81|(FDt+X07Bm&n{`-IL^PVv<&%>$t&J&^r6RH!(XDLY@&Oi>S1B$jqqww; zWID^~>4icP$uuRU<&>3G=v;L90dtEhR8&?|R$i$9H58z|s_I%QW$txBfV0fZEm2d~ zKv_i~BtK6nZU25%h%1m5!0YIU1GMHmmr|mI^eP qFb1gusYfvY2$X@?m;|g0GXMZ2iGW$*KSDhK00003BQQ026sMC=Etn-m;xp6^~5*dgXhk zUOPm<7{j3ueDLK29NR`jqI0fN+Q~AhbS@GVf*AT}75a6(a z6rTr=Klwz*K@GNLL3lgg+>k?WXT#O?k5Bz^fB-;1gE;n(C!h?~75U^oFpJ!~{-vZO z8)Nik140lW;JVQR#=449i-)>1=MAG=_x#xwj4hmj}uMyP!FOxaH9#V$neqr$s%UmSj2!ySLF!(&@GHh68p@j3*wi^vcGA!s!IqdgRV zx)g1|5lBzRjfe~sa07d%IkVQBc6DQivB2odQGJf_L cV^#tj0plRtew*~WFaQ7m07*qoM6N<$f_P5?vj6}9 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-html.png b/mfr/extensions/zip/static/img/file-ext-html.png new file mode 100644 index 0000000000000000000000000000000000000000..c94f677c3105edbfec8ce093f73fc324c5fc7e6d GIT binary patch literal 630 zcmV-+0*U>JP)Y3j?FS-ryLey+fE_2ZFBuFJ)PY3?#mfZUw_rg7(?mthu&!I zf9@MY5sbkAN+~R5y|^-?{l2QKQY0aP>O_;W52hZoXphu!qkH1ImS2t%j>_ILTfC92KxS;@n zaKRsCprry&!-rakY7ggqfaOkqD*xaj{Q7y0N-}Jf zG(?ag;szbU#z$Dy?t6|tinI7!7XB%pkdsCz=!hLc(FzpAj3y9t7`*2ZYp%UTsQy!c z?>}})@zPj->nVYdBX%SYQDihePT1w+AdETujG+gf@Xwb)?x(~F+7`h`P#nch?288Q zqA7=*Q+MmR23#PRy9?hK_*8+C3x(jT9D8z+?JN=h0zT*6hzB2l`tE`l0QfxhDd<^A QiU0rr07*qoM6N<$g3s(ImjD0& literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ifo.png b/mfr/extensions/zip/static/img/file-ext-ifo.png new file mode 100644 index 0000000000000000000000000000000000000000..28a95d90658975532fa039f945b4689f441fac0d GIT binary patch literal 597 zcmV-b0;>IqP)nKZkWJaCxz&c`tb70xGx7i!FL>JO1vKI>jC`2@ zK!aWOlpVLoEZm|p0cg0pBtH68f_xk535Gq72cWPJzWO9{!8`_l^&i40I}h#SWdXT@ z`Xi2f9?SffL9{#RL6d{7%zPHa9lLm>tvTX`{+JueaW}@ij6?EOFLA`PXkNP~0T7p2 zz~Z-I@+^0cDFZW1dGd^nMsa1cp|_Fo_2xw&V$ZwH4NUFj2OcVEDI^{RA;c9Y{Tj j0YIP(#Kt6GWtaf~b^5S@&K{Hl00000NkvXXu0mjfu)Y>Y literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-indd.png b/mfr/extensions/zip/static/img/file-ext-indd.png new file mode 100644 index 0000000000000000000000000000000000000000..7c43535ed386d15c8e2129258caf95d5dda6770c GIT binary patch literal 613 zcmV-r0-F7aP)+qP}n?%P%8_3FER^J{l~wbwqPs(jIX z_8#Z_DPENZsreMa8rkvJE4QCT!w>*Cr>A`M${nZ!srFF?PxTT53s&zx^P|o)JOB6E z9j`S3c=e6#^$m$A|dU%|8gFW|A? zhH~}AC*i$5-@rfsr%((MFa@rW(YzoZ1BYQ*nRo8)z)KI@k5NcHC<;IW1E&z13f2fO zB%i{uAiGY3BbJL+zD4iFhv>I>E8f!}0W|<$HArjwCdILxkyIF1=}#l!iU zF-;Ay#t?*X+okZvp$9?AcrDwFf~;5V*F;p6$G#uF-#I5o-F4VpIM~Q^97Gd_#dQ z0nmHi@K*^H7eDAXrt9|hNN^cj>{5I=1|$yZc6EJmHv zavrsgOHpmN04Vx^7LSc6)FUXM!DjZ61puE>>#`j6E-NTt0c!0Ds%;56{I&qOkAZ@h zG+tA{dr-dspy(YMTvwvOX&yv%E|@7rtdjP-R1)l5|1=(EBp(69lO89-`fMEx6Po6zLI^ znh*||RCmNlsB#|&0~9&;(HXP@n*LO%>-11%yNEwr?YM3V&>66a`tAt;%qbxI4tgW@ zLtO9=%7Hv6FlOy%PGKniG^8VSP-9y1_CO3o?V|n_(T-w(W*(+^}(jnn7(dPHNk>`R%@L=eKS$o;h>h6;AWj zrBL!p0dehZ)wNoIT=D?^Kdw4rDyZTl;^wZ!5fJnH?$z?oN6Xf#8+CXd01Bj1JlnDw zvDw~7P;JN6ilJ=xe)$7j34xD@ zB#(bnV#!7H_c!#{7k=%Xk1bpb#khL~IQWZmpb<(;{PJo7`Uy6~vj&WSSm!jm41fYe z5ytnhU!VRtWY2I3rGJRjS2E)=bZ21Ou_ zF_oGTEc*tZ9usZq=k}0X01?0lws>(kxzN=qE^W;+YCUZ667HVl27LI#8IJwi9($mA zcz(jjnT$}2nIP(=p~9f-42pYYAX|Wec<=$J?=FY|0BgL+0@ZApjQ{`u07*qoM6N<$ Ef+2ALR{#J2 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-jpeg.png b/mfr/extensions/zip/static/img/file-ext-jpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..961d2eff45fa655fa10139265d0884e990096878 GIT binary patch literal 588 zcmV-S0<-;zP)g>%8IcF!{ z`1sHNjniT&Q9=-83J^k2Rq^}VPup%8?WcyO3}1fw_WntX5z#@&2*k*{@>VNa^S3YXV|xSj;)cr-VgL|K#b+N)O4+!eUaa*0 z-rgX`idb80*+tBa(+@F|3@tN3)FW3 a!~g(2T)uX^a2#d;0000`0w0KrhK}|+27*sS&WfH z@7de#y-a+O_aG5t5JbQjgLC%Q!anssr)(tAb^2yqlXNbTP6y5gE(I>90%2a2wD!nd zb(*?qi6lNIZaPiftka>qf5#|k*MEWEG;pUhbVrarms*ZnFNLf)bVot5^kabq5QbNR zD$kd|^NfHcCybnQ5a6uk)q|U~|F?v8O{#S2K6C3T-X;yeAiRL5Pr#%&o7XYk>^!6b z)&Kp0)^iTxeZq`>Em*VBw=E?AVFgoux`Z*{1i1hfj@*F`&HkW6^FQzjQ78$@zJWaC zTd)u%#s(Z*+w~1sO*YbVva4RE*4F^0v;e?+$aYZ>V;$T+J&oi z{j$sGFxF92QXB=9MN;e;TxkLD=)}I0`GS~=6lJbGDkT`#Yj=IX@p{CAzb)|)1^_`v V1ch0TDo_9b002ovPDHLkV1ko`5aR#< literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-lnk.png b/mfr/extensions/zip/static/img/file-ext-lnk.png new file mode 100644 index 0000000000000000000000000000000000000000..a86c9e65907158cb46b609a77aff6d1b77dddf43 GIT binary patch literal 554 zcmV+_0@eMAP)@8W>3Jy16EKR3%P3j9P;mF|eLQ;f1dkspV97RD4|F(i5akuskmGKj z5fD_KC~!I5aJxJ#rR~7v^c+%B(hwNvfTAcE8Jh(8GlH?n8MtJk&!>XP>-B@}gv3+~ zk4|7n(%{HAOJ43-!LXQB)qtj%@Ob>PqDzkAz{7`6Sc=RGx7&vyk(|4Of#ES&b_fj1 z#>bDJa5_A)Bg3@GoiFGe7)C@yG{VE9t(__=&oD2M`yZh?v-T zaHUtL1g7kcW8}>91nphDNKQ!?C=ok5@40MG1YOs{qgZU6uP07*qoM6N<$f_Mf5NdN!< literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-log.png b/mfr/extensions/zip/static/img/file-ext-log.png new file mode 100644 index 0000000000000000000000000000000000000000..7f0892bf9a4a80a31127f386d15a6024a163b2ad GIT binary patch literal 581 zcmV-L0=oT)P)bfVp@w|WJiNg!~x6JR|u&{TF9Lx9o?hUg$SIlf*;qIF!tI;-|RFErfnBKl5 ztI38OOXRH?jaDW$&iSuWhm5&>N_6ZKNd;4)SlH&EOes(~C{jAfZn877a>AV|J#Sw= zMaI!ROL6fVGM(-dEos>ub{>?OnmCC-2{i%k_-F;%c%S#D1+m)1;=P|4Nz%pr$iG*QfX+X+1ZD$ ze<@LrFBUw#3mAh#{IL$duYuarOMH~x0o*x_p5Vo{n4+MMKnB)9cjW&az2$h#>6u`vl)8D;KU}@tZDqBYrDQg;n${IpV|0;g{{0^2wzKQULEWxeGCqrYX?VMy#-9C=e zreO@t?P7A{T0VIL6kY2*AfG9ah8OkS(`f3OLqpFDhY6v)WmIGnV6U!g3gpOV{fQSk zHyZorQQtF*^44+0tE^>=8)`a5E`4(3vjpc_mk1V+S+(6Wc>Meg9zA=Fmcb=*xdkUG zCt8MjI8~fyP3wAHf zSlClwabF2$Ud}Vy*WBZ8?32qS*v8J485?JYq9I2b@?P){}pYdpR8=>xIW@@lVj z7nL^U?!7YBf`}l(*}Vh4xQ|K%06H|cYxEwO0D=G(aNov+7qIux*?XVqvU=K~!CyA2 z62SRlX~p>I8}WTXL~v%UEKUD=n_-hSaC+o-{FPP>pY5_*4i5gZArT%Cac%JO0{r~& z%FA5j`NXsV5lEh6Uh`*p{jEnEywqduoI3&t5LXHb1OgA^3n_uPwVaKmxbLAd$~tZ4 zzP8JF@R2gG_U}7N5P^i&*g&wJkkp0`o~huIr^@-|&AWN*hX-&pTyPwx!&d5nBd&C2 zcM;-g%e0oSQkg|-_w)NV&mjU;N=PV;@dPbGDpKq^d7Z)Qj`H=0tq9o+dyrNps}6MvL8_JzOKZ{sF=e=-GX@g~r~7@(J%u?qT#w>WuqsV- zQ;1p1;cg#LmLJ6xvgSzbIbHQVa3!QXiOdnX9+wgd$JL}F$n!~>$~}mPYmJ}daV4cF z%?-F58j6c@cyib#w6)}T9tB~5gws_mK}Z-werR}X%vO}P1inyQl8Y~p)d&!`h7zgN z#B}2F+R~kTUSh#oi;c?iL_i=bw?I};ggAqUJPnjne=dc-!vHq`+^g+7PFF_>00000 LNkvXXu0mjfM*0ab literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-m4p.png b/mfr/extensions/zip/static/img/file-ext-m4p.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b01ae10025ec30f7c34d44f3a3c2e03e8ad3b2 GIT binary patch literal 557 zcmV+|0@D47P)NklHIThZEfw6-y}ZQHi(aBSN)g0Xq4&Q!XG&tJ3j=TKA?sWs;q*4>UO zc_MO1TYr2n*$4sfhg<*hCQcO*K>&qlY@MPA3wIv6N2<&muI)bgJ*R*w7oDZ<$fXbn zh=3|srNK|H(P+?Ow8xixaKZlOMZ}Bz1~G;RL7hTcKx%qOnt%K^8mj_E;NoHC{__-{ zzw+3xQe)QGYyyz9j`T#}pYWz{(pnyQ;x44pN~H7@UVrQkaQtwy3lMEg4GjrnV*gP@ z43pOE<;PbZC4BACc-}eyatf#=CGuanm~>pU%DGFH^<`c{>dxUd?@l04C3U`)K97~*yoc?!6l!gE|zcK}=lnh(!DxNtX300000NkvXXu0mjf3X=SD literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-m4v.png b/mfr/extensions/zip/static/img/file-ext-m4v.png new file mode 100644 index 0000000000000000000000000000000000000000..a65dc2a8e06935c4afc257f14854c11bbaa92fc1 GIT binary patch literal 577 zcmV-H0>1r;P)#ZXWI!TJNR)VF!&-77`bH^-Y#8>_U_zf(u7EpW{8GDK>#5H0=9#oPyIdw zWbU)=*cl+gu)0HER4r1VX}&?db|x@TxJ;ip1{X%-;pbG286n`#^0S= zAz#)kYN-tpEJ48phiOunlpw-6%H+(AQrUB&da>ddQL`BoWA|-<%Q@gB+5-Y;k!6~o zgn+pbENRyTiP?Jc9NJVWrv*utz!-yN7%(UWmA~Tt%jZ~o{193%oePCyS>T*&eWE20 zxLm-L1|FbI6!qp#)#YEzg~GN>9S4x4OK>>@CD6fKFeq%3;>hqx_$v^E!ZIkBNOlH# z5A;Pk(0?RCK7Z_miWWy3ntBs8iSL2SI0z-NVujy!@a5+ZD8BvriGbsPbD`stIYuD` zHom(N1T2|He&O#>2rZV*);HCl2Eu+nnDCOm1xg4M|AYeQxN5$>eQNXm4~IYr1&I38 zuToFNCo~X0e;qq?^=1VT{eWU1gy=s$BsxB}E(Izm2Y|njem+XwBS?M&{tVoo{x@;Q P00000NkvXXu0mjfvLXPr literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-mcd.png b/mfr/extensions/zip/static/img/file-ext-mcd.png new file mode 100644 index 0000000000000000000000000000000000000000..aa993f57f98a630cd1f6086522364961da8b76a6 GIT binary patch literal 611 zcmV-p0-XJcP)s zQZ5AqF>-j$z*aXwR4zd7@b~}zj4DH&NHDi15x1ag-mEY^jf}w4HrKo~EA#W*>N|H=pe)8iS zNQ?pX8CdrZo_ytnU*7n;(TE5D3INyhqEF02t>ylQALOa;>hQ!jRk{2Adveh4BOw6T z(Bir=9M{Q*fP!NjHmzF6b8o!Nv#-5W2rE=jpd1k5#XKCxfJo6R!|}sMSu|~S?r`3l zm*0D{yb8ri;CL>^6ae|`tKwTr7}`8QfQxlk}jeXze^H-l{ z{Nl9?X#79x_Z*~3`ym`Sb`n*~4Od@D--iDnq9BxeaKR7w=aV<`Pv7x#n6z{~anI%2 ztFJ&6&SwG!O<92BxClbD4+KP&dF!?VaP-W1(y1hgWP(^cPCOnXnM!c->_uELh)C1} zBL>fPn7e5wvo~z#ytSmSOyd|S&{3?yzEfw2UCiW49R-A$3o{o@oB6i2S}2zYMg*jE xy!0Z!W-}LOQj`=A+z(vCr4bK40QKDkF#reg2Y)}&!s7q{002ovPDHLkV1n?JAC~|C literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-mdb.png b/mfr/extensions/zip/static/img/file-ext-mdb.png new file mode 100644 index 0000000000000000000000000000000000000000..efb086b973adca079e4155e746dc55f0802a6cbe GIT binary patch literal 565 zcmV-50?Pe~P)G|uc_cOL6SKmA2^UeO@ z1WcfR9?nf$32B+gXP|#R)So{JrzR}LXnqW@&)9y7L@1Je`2?~+E*N%V9PFfcII5{p zuZ0khLgEX6<_A`zM5m^Gw`bNl97aGM!;EzcTa2Td=kt(Rt0MM_l31r&X7zGlq8@=3 zG?*BM>%#C`(DLbz56_OAMbS15P`pDENZSPEM>d>*V7d;ZX@K+mH{G%rIgM&U0WVKq z#hH<_QE^x|XoOoJ7>=Ww4a2qofr7_-OSeL9)7t9H0((&ukhWk$NWXlcNQhjF_x+2&D`V08x}Ic&t6-b0l*AtnuyI-KTC-M2vya-x*tsNL-3h4;;#iy}Y&sn=JuCwRMdGa(FKwGBO%*aS4czw{iLAO(d39H(^U)0IR9F4Yb{} zFaRx+j5fHOZcYgVdHw1Q#wTZyl$1*FNP@;yiNVzDg7pff=N6&q26Q74ZjTQ_ zp->1%N5?2HujIDP?!?6OoF#w#DAmOIW#8eCnjadK` z8GQr8$jHjM6`-3*SHM5N{~#+jpL`=wlrVsTp1wg8mXzb~-+$);fBqt`pcn;3rBs&i zSb1eFdisYz{@VamRS7VJrj~Zp&~vS$$ zb@I~qC!YU4ZmWuNJCRTLZvjaErwqi#Bw%Hj0RW6KcOohnLnQzJ002ovPDHLkV1fcE B{nh{g literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-mov.png b/mfr/extensions/zip/static/img/file-ext-mov.png new file mode 100644 index 0000000000000000000000000000000000000000..02f6a7b6821a48da46eb2f8b9facbfe53ff2370c GIT binary patch literal 590 zcmV-U0ifne|u)&_gCPz`*V9RE$HH$TtEPCAtM_XyQt1FPRud`&Ltun}& zR5Rs`t3I>Rn1Qz7Jwk^oAtJe_D_CPr=eJE}{@H5f-)&YIWz7n8<=Vmz@HHKw$MsM- z!Q(Q5)uuH5-)^PSE{8NK?6ix7rJqx%eb60|$dxQJq$2q;g5}0!DyxI4>~<)TojR-Xa_wiKU>)=s9I>M6I5e&TU%O&?@g!@WbP1P5uoUUNr+gNJtcOdLF$5MHZow0WV z;U^ri$0O9-=U}eN=?Z4Oj-ugVXM{mFd}(ml1!3~TAjaGcK zx*=>aMAP)R8y(Jj(eQ{X2W;^O%}=-?Imwq1OnVVd`}3Z>3(G(_?i|m!dx0Etibr@B zoJQ-j9!z^4t}mGWJdFO=ed(eu^HXFN#d)1C?S93ZsVY}iu+GG+m!V926v(&-0Sv$E z$Dmuj%z6>Zz?;4dzU|AfJAO!Q=8F(izLa3;3$tvBIlq5&X7ovo?d;wh`1(Z8J`72eqTx?sn&WZ)bM$`8&JgbDx}hL{<50 zP`iu9m4+qsfVgftQ5(rVy#65jvYPt=zD#d&)nH( zY^@4_Bt;b6X34^7xQ+`Vpo+1EKmM-8tXUH{Fmw{t^SPSu_iZ6NdXK3|DxBi5YRCj3 znJ`Njh6M592LVP6ngDO+ne%@WUVr=j8Xpg6J-;kKAhHpj=M@geby0*!mCLuT@yJup z@LbPEyxgfiPe1!CsQzDO1rUshaC`@Gg}gDm|H7-h|J+Ob@Wux`_37^v{2!q)1;MI(LGp+gH(e)@Ty>8K1}+ zfQkvMjRCHU1so>@RGl&$H@?qBQ3~+^64^-?RAtwXH!-+ya;A-v`iLU2!gh2*tD(gVf z4#G^p&DfarGu();58QnZH5ZITRSR9*lg)w}kn$afASn0Tbr*G(jl)=57`Xr5dvGNU zDWpEdCfBk6b2GPQ_x9ait18J+BteSJ#gf!t{Fn@g$jiV3+!^uU15n>x5CZ_nYTK0P St)IjI00004;;#iy}Y&sn=JuCwRMdGa(FKwGBO%*aS4czw{iLAO(d39H(^U)0IR9F4Yb{} zFaRx+j5fHOZcYgVdHw1Q#wTZyl$1*FNP@;yiNVzDg7pff=N6&q26Q74ZjTQ_ zp->1%N5?2HujIDP?!?6OoF#w#DAmOIW#8eCnjadK` z8GQr8$jHjM6`-3*SHM5N{~#+jpL`=wlrVsTp1wg8mXzb~-+$);fBqt`pcn;3rBs&i zSb1eFdisYz{@VamRS7VJrj~Zp&~vS$$ zb@I~qC!YU4ZmWuNJCRTLZvjaErwqi#Bw%Hj0RW6KcOohnLnQzJ002ovPDHLkV1fcE B{nh{g literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-mp4.png b/mfr/extensions/zip/static/img/file-ext-mp4.png new file mode 100644 index 0000000000000000000000000000000000000000..10fab5777a5839b99fef9ca6abfd10923addcb4f GIT binary patch literal 523 zcmV+m0`&cfP)DNOOCuMBgwrywTxY2z7Z%Tp$Le1d}Hn4rW7C|hpgs_lZT=TA_W>1yazAP{LR@Wt(G3nyt`q@jA8;% zemmH{c|Vc0B?L)9K?r+@D^(zh@&)1?4hYhJ-ts?pJk3ymKME3A)Ea)P;KX3#n9JAh)1q|)S}s3JvjzJ(U#lmmp9+vC z5QIO@BeCU|3O85xrAxCK{56JGZ$I+x>o=;^sUFIEk3gXC3cN$&2+i3-=B&2#Xj%hj zEs}_WJXs+}NrJ!LV2kxRym)^uxBjelYwvSB=#D=rWqm}48NAQ@9z(yw_9)P}K; zlVaBx1U_s*L@CJH6R)}P{tqT$QEx(yk_2H3u|>!itULLZU3b3o3&QeMmA@qk1o-X3 z7V=iG?(BPZ-cL3g!PuOrYRHwa1>vvyaDWvp%-R2jYwv#Z+Ze1RAJvcpDIyT~gJLQr zFu>U_E?k`zkiz{ThZOxxKR@sJdieTiQX}L6^1ic(GzV&tIv-W_!GHZ3&4{JY`e^_F N002ovPDHLkV1l>6@23C& literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-mpeg.png b/mfr/extensions/zip/static/img/file-ext-mpeg.png new file mode 100644 index 0000000000000000000000000000000000000000..75c087df9c914ed562d420a9ea4aaf836ae34102 GIT binary patch literal 572 zcmV-C0>k}@P) z1B|3m5QI18*~Z!m&(TF^+qP}nchTCmZQHiZ_@?&NnuAJe`gM2B_e%+YlFoU*cFi-s z&^YZg#_Ij{2CLXNF+1MNJD%bgl-0 zmHh*^W-L134*YKgwfkEh#2vegeFOoxBZ6v|f}ngc2&*p!L-i6Jgd0wcSoKa^yx;`DRp&;mx*P&3r>YCzeM+(RNi2+>B;ur1Eza21;evfVt~fP7^YkQu^WsXX zHzRPOA(lUE)3ca zvO&L7H@*Cg7k=?c{)6)-_o1AOTczc{k?X zibGyqFXr5gLt_KtQ+ysD*7;HAL zgz~F&Pz#=^`9f|00000< KMNUMnLSTZXWD2vm@MBxkP9|00J*k9CmZ6e8P;j~x@J&!!NZrQ*l6V|pQ>2vr2 zwxe!r(ok)0iB~lxXusz+im|~WZF0l1!5R@dPkJ#<`!LS%`d+!Kuv$VcRHhjoG4K%T=RtoY!k$Cfw zQ&kDZ$-_anqRcL@WnM)+i>ew}R?{fwSu|K$-H7XafL-~u1T#)7y?T$rB?DBadee_IyQrFhH=`)**Fp@v z9b@>NxLS=-XkB%7s|K_3D;aV(j>2&x!XSC9v09A*ja6sS;JBNac@>Oy=h7Cmt~%A5 z8qCV8WO}5S34ub!`3o2;{L5-y>#8$1=(Fcau0xVGVc%m9>2uUf&1+qCs{f~f;M)C_aACo~y=(2!ERn6FJ?TsyVzLVCl_JX3R8*Y@= zLt5Vf`1%Rd(YQ=#TX{w;0ozXWhOw+w0mF!JdOLfg8r)h`m1mZKj6Ynr(ixu58jE(Pd_ z#f9u*C_DS%_us$x2jD|tIW}2);%!DD{{H)m-@?q<(^(F1E~5adu7Q)~*NNH4=^g-; z)iZ$C37M07=Ikv6Sb5@fY97=*LqJKp20+ruSG=2l(C`SEJX6fsV}A+YL~<5%d?PUN z^*eHgMzB93fp43WXYQG^w>;o@Vg_~v$6#|nB%Y<`p=xY`B~G5XXU^Ud0B^}uksyjKZ=nQ~UXqpUSIT|2ZP$Fvndj4+KxV3Rw zKbW}HzmYpt1T?@&6*oFs>H*}Ii0;^p01R62+lnKc4F$L7Pe{D7jp8|PlIG`whDRc2 zR9rZz=p=VX_J0&WX2G;gXVJ(6#cZ&4ilJ%cC)Drylfvc!N^09FsB9v)td1+1qW~TN zyfteFA1>I#TZ@k%tUS+qYcDf>y||x$24S|iPTdJ04JfT?;q&=>S?tz9;j*u&oh48{ z=UpmRzXyI3>DK?7cjh0bxTY2HzqAG4FW%1eGGqYTYgdRmzJ`L??~*a~ZBoQ^mQ8()@77zr&=%&lz`InK8%J z7;{98iH8)Kvg-~-@)$^Gf%oR@V!C4s$!mV4cF}tjO%fxNI&C(`c@lL~zR}kehnm{6CO-6a#=j8HkNZz{)TK0DJYTBklE> Qf&c&j07*qoM6N<$f(bu9D*ylh literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ogg.png b/mfr/extensions/zip/static/img/file-ext-ogg.png new file mode 100644 index 0000000000000000000000000000000000000000..1242b343721c69dcf985900442f07c4d2b93a9df GIT binary patch literal 598 zcmV-c0;&CpP)ZQFKx_nh<3+WeBA;~7y^zFuv==aG(ky z3oG^>!x4iBs8&0s_tzgYf5%}ikNk}OUVg8S7aW&k!$0Z;H5jPDS_ls~M1)nXK=m13 zxm3Z3z^i+#_&bhI^YeOsvFPNc77jcMj^k9WK$FwAP@0xR$+Ei?&pk|GQap-wX;K0L zuCF*osuxm|kuip&H*fPreh#1K<)A2@^+B8UKmbpD9OIy3@T?H3Troko{_Hh(UR=Zx zP*r{|D{46f0N1y87$O2;{Fwpc${s-K7d-XhzYSM;_B?~t1Q zBkqBLyjg#igsz)d+wFVK-Ye(V>>#6ezd>oh0I0%S*JtbhMWpI3c(4pj$R*;>X}mr- zo7nZ=@N2?No|eOtcOC#Orr@f_?YHkidQZ5wh+y)+1jAD?clRLAFF{lhGY&igEF#UD zD1yNKWjUJ_8dHq)$07*qoM6N<$g0v_UF8}}l literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-pdf.png b/mfr/extensions/zip/static/img/file-ext-pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..df97fdb255d3ac883eba568941ec1999f3a989ff GIT binary patch literal 570 zcmV-A0>%A_P)70NCC?jwd0&?jcog6kH(k9HCqOBRaL;iAB3%FetImV;e|I+i^<`)|0oKBw z5cj6fMFsq#S2h}<>9Pgf9y^g-8|8W^JR~8ZP~uUN#Ls?uIw~mu#vmCP*hmy&F~ke- z4al7{gX<~DLmvEFRW<(dZm^;VfnXS&l!OihP+Iff+}UJL7{llNhxxBn3*M$>bH`65 zHx$HJJE(L90z|_3i+vw!0c-I7`;YIBo+63&nRV)8V^MI2K=~3v1p?2*0_N2#;!mFA zB_)CH<1mu{U->4A;68W>fjEJ+B<18FZQBsLausm`5tLH-0udaFl7w9bNodbUD~+yO z2lMnfDJ`0#;s$L&i-u6Bf(&pO1o8YN#2EY`gNU6xL+tu3GWKpIa`XiD`wy&AaN#^q zHUlZ>ffiJ13P}TcqbvQ7U%Mv1I`t&FeNRz?U8WT`@z-zs?p;ZmGmXgHd6=u$!SnEx zf*(JLt>1zLsGJQ{BnSoxBo@b)uR(6#L#L&K2<3=GDxQKv`V2=aL1$%yPyqtLZ$+qP}n?%P%8_3FER^J{l~wbwqPs(jIX z_8#Z_DPENZsreMa8rkvJE4QCT!w>*Cr>A`M${nZ!srFF?PxTT53s&zx^P|o)JOB6E z9j`S3c=e6#^$m$A|dU%|8gFW|A? zhH~}AC*i$5-@rfsr%((MFa@rW(YzoZ1BYQ*nRo8)z)KI@k5NcHC<;IW1E&z13f2fO zB%i{uAiGY3BbJL+zD4iFhv>I>E8f!}0W|<$HArjwCdILxkyIF1=}#l!iU zF-;Ay#t?*X+okZvp$9?AcrDwFf~;5V*F;p6$G#uF-#IEOIzW4AsMos-g9~wf zko{g5RFF%93%*I_lbiB!VUP!$=?SOp^kjE9)rD*OR&i-S?hSSYa*9It#uVVeIFFQ? ze@=Af&d|)5T-~`)CH4i!+wpi@9-dCfo6;xa^T@nC_eNyrPb`{i`&OIlY_b&`YC-g$ zkHr1^L|o_>wBf(_v7!i{mKNv!$Q;}qk^zpi;)3BV1s-sqAu)eG@L)tH9*)i~?~FVc zm6b;m3h{WdH;=~W6X8!d*cjpM2=>*})1Oby&8HomF^T^Em>1JMcsVj*i zdul51YDNx{6aD!HuV?4u%>rLu&n;;7%Gnp}t}6Hb%=`JdNKRbXXZ~HCPw1^xd|6vY z1;W`Ac*3p<#EanT$^zJl%nO>ma>CmY>?}h<=ofyk_b2p38`4JpbuN45Yz2d5u&ub9 z@QKiEzJzWMB6N$7)Jxy;uXEWeC%ipDQ4+$xLf99Ow@qcPd*N&Z7Y2L5uHvvUL>la* zA<7AFDLByEy)|~K$=h! z6~5Bs>X#xp)Pe~RHGes{7x)1vrHKeg0G)IL@5uAItx5;iP42UAdROZ9(;gV Z1^|=#+geSO_@e*-002ovPDHLkV1lE5@(KU| literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-psd.png b/mfr/extensions/zip/static/img/file-ext-psd.png new file mode 100644 index 0000000000000000000000000000000000000000..6629aec8fff49fd002ceb309ebcf22ae433c11d2 GIT binary patch literal 594 zcmV-Y0y!67PS5?mH@9Eaozti)3t(~d-15QN zZ8L?sZZuWFpDy#SHT!=VKi2M>nVEdRjKn==B=0j*N`1QYQ)73T9KB21MTg1TX+tzC zpis9>Oo`kfU*`?zwN*-7`t?i*-Xdpc zO>(zd1$;%-V%|aIiPI*)82=55^mS2UfQOO;z3N6k%6py4qap%XP41Q}8Sc4?=Klfc zBae`Y;`--7-rrSxpojWXGYoTGVd(bD4BmE$p{~o>0XkWvp9gDi7X^B3r(jQcg}!cq z_yi^;t~VIG^%7PyU^D$Tox|40#os!6_bE<+mL3|Q?64qZ#0P9XhvrSo*mLb^Y;t#1 z+j+ZLzxxKNqH^c*Bf=CN;HC5sKfTwVM)M{>x78R`!$PR6{bU)31}QQ) zK#vs%x$x)(s@hYMnll6JJvP&7;Xx{mi=(PAHb#v}so%Zo#fNX&8#!AK6JQH17agSD zjGfeybysgRYq#OmCZ(x7AxZVgY3+@i=Kp<#PAg97ppx|isT;jq8>h6}zvG(!2OzRb geV;K2SQ%yj0CDnvTUg!)KmY&$07*qoM6N<$f{)`NNdN!< literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-pst.png b/mfr/extensions/zip/static/img/file-ext-pst.png new file mode 100644 index 0000000000000000000000000000000000000000..eecf90ecd791cf13ae960078c277222a915107bf GIT binary patch literal 502 zcmV0 zU40q4r+b0Ct!ZC$nAB^Kd=*l}YgS3V0*MzP=_2LNmhfX|r>mX;x%L>%l*)R6&19~~&QJ+Y_xvZ(_(RalfhUT7}paoZgb zdx~gtDE9b}-yCfE{t$JPlnWF1vaubXH?)Q5V}#1@{0L?cd6<|ZeTX~Ko4BLBt;QVc zLDsd&w0zlO$+ztgcEEnA?(g8o4l2?=5`?mpxA1+tS3nnAs|&A42+t z;iR1#Z2CS_#NGukzV*oO3TXPc1|j`yf2*07Mv--8oYXOw&oiLm-3si%i$lq}Gz`G# z2&?Kf2jue#=t}+Dr3l#=G`P)9dPV+drQ;@Z)96ia!EUV(h! zIyUz_#kF0KUJTsv!B7sw0b>wML&5ng zEM&)ow-p~$X+rJ41re#-e{ao-sv;uy18LgN1ywEET@V8Ro0Z0;G$C~c00000NkvXX Hu0mjf7`^jm+qP}n?Ih{s+V`I4IjfxW#^Ri#*vQHE zt#uzeXUQoC2!K+zkM(HxB{`%4e7Sa|3Rq_m1O#y4;no|taP|5Ze+(Tz=XCFmO>zNz z@MRpca{WeBpwjzTW2jQT97|TM;o9KNR9*PGaRQM9(wH& z26$;Lh@nI2{{RSefFJWYasdQlPgV-Nfm>bMlCB2JR`OOD5-7pv5XgNC9uO$-2EHCW zo%bTmTR}kN9ccuJ^WQ>@6-DewTe9Z;=q)@zDM8X6+$(D!&s(q-CvdSt696uEY>EUz zpj9d$u|ET2Eg(6zAP_stTkk}an70fM(@OF7+Yy0M8F7ct86@W!n5R!R-aB)pyi5B) z00wv_0+4Ob2>3i{5?>IJ-++%Px*jCGvjA@Z{3+UG8u9T~00000NkvXXu0mjfV1o8f literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-py.png b/mfr/extensions/zip/static/img/file-ext-py.png new file mode 100644 index 0000000000000000000000000000000000000000..81221cc27970681a10eba5a1b75abf59f52a8be2 GIT binary patch literal 791 zcmV+y1L*vTP){OCUYSPc|i}C+;B!E2g z%roKLci%l~*syl#?M*m9Z*MON5H^l5BuNq)*Eo*dzyJQb`P*;5O*G)Hx#pVVFTC)= z$!V5Vjy@*LaZV7S8a1Jmhs|?v4iRzX;bmE7>h=0%rNI&nptV*(5Jc5#)i2%AzE56? zdin-vjv}I_5K#(i^Txjbs-XeU0HtHYJqPilC@MB@-z`%XtY^Z?-Nd%woKbDOaOe57 zRx8fhOch0ur)dg+0`LJTiH*VcoUGos3zSb=RAKD^d^C9r%hv7$RS}0mO4yGEsP*?# zra+om{v5x64Z95sH`b)3DR4tW;q*aO>E5-{^=)2-Zod#uSApzM1P~xN{+YUxhksbj zFH85x##orNJ(VQSWpS^j!gd)NeMC?nhjl_gdMJWn!#b$PhPmr&Ts9&i7e#yEablYz zv5pUhz!_uqIP8f8=>qEMbp*}B4jD8GA|hx7Yf|BzQyec{y@XKLad{WlH0FXa-E_3CpyKaxRd1bmcC%pCJJSC!>MWEW6;L}AK@dP* zIPSReH2!MuU`*R8NELaC^wdW>iXQP=9w4iHPUatlwx%*Lz@Z2l9ViM%SY9tVV>E+1 z+8pLj=NC&|dt|6~TufZFN=;6;ei$)--t6yQef8}n&N-#nk1MfxL7rQe>f?yLFUj2r z*xX|BcDKh2$%c1of6kmaf821xO|JmOLk~S9n*B6p+$0HtQ*G@-u*H*P_CAyntW|VG zi9ch;%s+0r>E_3P*Psl6p@PCpO6o9Tzrr3l`4% z`ugjyzaQxDD#hbU@xdZanKEUq=XsYZrKGvJnFFoee?zY^?u|FzSPB#kad{N%=YIia VZ55=aQ)d7G002ovPDHLkV1i!fcKZMT literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-qbb.png b/mfr/extensions/zip/static/img/file-ext-qbb.png new file mode 100644 index 0000000000000000000000000000000000000000..5012020e6c52a71e305397dd1b27ee3f4c31a9b1 GIT binary patch literal 529 zcmV+s0`C2ZP)?1^70{GxL~ zUVcRlXsSk@^Dmts%8`3--kIU@e?X_<2Jqkpt4A^5Q2WnhASJ*+Jov!S24MgIUVi92 Tb9!r600000NkvXXu0mjfKjZ9} literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-qbw.png b/mfr/extensions/zip/static/img/file-ext-qbw.png new file mode 100644 index 0000000000000000000000000000000000000000..9a1c7f383863408bfdd83233f58ef27a91042768 GIT binary patch literal 501 zcmV`I@j>pMmf}LsZPrU zDByqP%E1*Fj~{?AfWA}KabfQ&2CP;(_#>xY+aS_wnNG#Y;6zwOQ7IIc7Ew}K9JlEL zL^T)#FDv1{QO9ZDYt)qMTg>5HK$He};CYfRCNAl*B!I?kTl0LYaB-dRf6H!Yq~kN5 zfCvPYSWmE4KpaynFYg|uZO^f^?GXYBK~?T2LJatZX9Z(%0Kpi;xAzaYf95_KlBmm& zX&{EIC;WN?(nYZ*#EOqa@nYjbjn|TcK(Ya#VP&$xq>Y9;M14%8v|FI*)?L?tMwI}$ zH_$ZMCgvb9ww|MiGaBOn7Syi-)BRt!pE3CTVY$pn0^;`E(cwL`)1 rd(|fUaS~OHiS2>^_;Ys3;^f7vu)e9ZQB@}ZQEYk8k}w0wr!hr>3_XDm+xyNsZz{7HE&sRsyz5sH(EF-45sfbr6gv%g3#Mt=;@b+zJVFg2W3>JmIvMHNGnIdKA^>{ z{pINHon}=$LEz2yGME-qXa7c{!dP@`^N03$;tzV;hV=||rcgTMnz7tH$ICv|F z9zi+`p~>;O+6dv}3ew?rsSbKeVh-O8AHM(Q42$0#D!>Df;1yg4C~4ggwTxcGwZQgAq59@Cm|!Me-SIQAfv$oTO6C6C@; zV8Pz%!j-cl@Ji3}GbI_c;eP-b4(8ayAXMCZeLy?^{Q0f*6(@Xr!Q#_J7`Zh$Cmx5t z9CmRKm!5CN=X58ozuLpeCuT-%O`$k@f($G=S&)f)GB9#SB2GUEC1#v`YGKrlBwAl_ z!p9c$@Rr7@Jj^IoG5J6$#_vnQxP6J3us@09shJ`5Sx2&Koba&)ogC8dQ^g)) zR`zaQ>C}H6y(E{q)>oY3V+kbwP8o=eNx;f50{{fth@KGtTj~G+002ovPDHLkV1mtm BDW3oU literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ram.png b/mfr/extensions/zip/static/img/file-ext-ram.png new file mode 100644 index 0000000000000000000000000000000000000000..3224bc1b27cf93d56c00d14fb818cc4129107e20 GIT binary patch literal 534 zcmV+x0_pvUP)0_=RW{glHKs zOf>$Oz3L=04t7N^z#cgdCzZdGJ$xRP;5nEB=TOzT9irKs`T78wfrCX2KSXU>Nu3av zvTX{UrTR3mDw?-2WPvWgL4d@KV@TP29#XZK&!uczLgygrP6zNBEM5t%c&Y9R(zaND zOl=lYT7(R(7b11@`4|~Ei!8mD@hT`ymD^#z24D@HM@AXAhyoWPMY9D++GIWo_Fjjc zlTV=Uw38S#^At=36fOKp0Cxdg}=LrXJ^U*u#>B-Aa=tSe>GdjdGsOQ>^8n&INV%~uY!?xkXwHIJ5 z-g6t3sgK9Wrw0hg`))t>Ali;Oh}NSIpyT*Mc=h%(hWbySv2UO3<8k(}U-K9E-4C91 zN-l9AB}?cmdQUlyzEe+Nzzq2Yj{3PaTe^I&i6?z z_&%i-Olya`Lp(2LCUesKlVh%Yyy5qAcIG^N&N@fIxmIv3~;RbLGZS;OeuDsTK_12g8i|?}vlU19>zyibE{|8FUCn9Wgo# zQ*99MEa<+LxyPX2vUl`Y_8qR&GHPYiMy_3V<>CztXO| za&g`Y)-&IRI)ffleaKtb76)4j!sfzq?Yb)$hj>SUf1lCJI|`LrJfm{!SCnXN-fQl| z?ExWj?Yb)$hj>RprExwie$|A@_iHfqK}{w-tHz?aox9)upOzXzItUK7n%Wx+@olc#nc5FWOUPV&Y*BuqI^koMYzwg58hIzTy*+;Hjcje*`?<^P{cCF&L5H z4(mUZ_y6%@vdsf#o}=%Kv-G$1*XSEMORvBgdiu{$xc^pMmFaUm0lI=VyJ9|E$pEfY zP^)r!1WsE#5h+*CO@hqx1oSgNRh_}Pm`qO65WN33FvX;j{xW$Jo|Iw0^(GgPpm5Qh*oJXXZS=+91>+x&aO*(=65dba59pjgh)?ZGBHfzb&VLjP8t{1>S zE0J1_Kkf;z#vedv^A+-S-%RHA>(Nj=XZtmz))Tw{)qM7XPS9w~er`Q_gO}dC`%IIu z2k2NBLpdu~y<*EaR#^8)zM_pUo)KedPNr{=JI z)E{+#7q36k*>{YJL-wGW`tr#i;VkIC?>O}YdX)AydIeA0_djaSe2jLJkE6Q!@|piX zK;`k%0OmA~DezI~w*UYD07*qoM6N<$g6rZQ Ab^rhX literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-rmvb.png b/mfr/extensions/zip/static/img/file-ext-rmvb.png new file mode 100644 index 0000000000000000000000000000000000000000..94c25d829f667873120d1dd5b756be533a998138 GIT binary patch literal 536 zcmV+z0_XjSP)R;Vt`0hKqBLyf`%YCJ4*r@7O zWYO`b;`J9(N%DZXm*_j^BK>vyxAb){(#yU;PwN7O`|m_mnY}O+AYYJVRV;=oX`@Ox zrj>CI`@HT?MU=niHi0Y(1@zN^_!Z}owCVzqRanW${Fyjn8G*DHGc>yxfb@q93H(trK4OjT_^Cxlj;qx~ptiDLL`YY%%>s$z+ zYK*p1PjmIb8~&=!=p$@B`OpKpqT_9}Py7Kui%F+E=E6Pqkg@Jc^0ry$nHOIupw(nA zpw`I4Y(D+~zr+^=REwDnYB>H7x1W3leqZ80G2uLx?>Jgd-P#yjygpBaYuOb{wtkhr>HpOfXtb=_{1N03v%x} z&OBp&vAr(6ob$AtEa!iUcGJxrFmdsT-wUWbdH3(v7}NCVB60DF-viM4HDw?+CIKtM a3;+N?kDnl%RUoS->P)fD1Z1k+Bb3lW!H^I{Oz;h-!8B;KY2TXHCSQaD)%GML_0g`dIfM2h`(&@-kSY`?5 z!UPr)jJ@{91g>oIr!pvk&INXOlVgq~#N?LT1OD?-3y*sULs(52AG z<|U)qPA7)b+0dImFyzKJ8oz`7FkE0ILBH!?A(@|o&`1}iLBBi$hUMunEMrZ@fE!;x ze6*nF)lX0^%Rr5JX{bCW6}17?Hd8?7OYfi{z@OT5 zF*3?knI4Y#XhECvuc2I@gPJR{P?i3z_R4J3q1ITQ<=LydG7Bm?CoZ<2)wvf?ZpuSw z>a5N6jP=%eN7d$h#zhP4vjj9b^#tl|g{ZkM4;5GEqVk$t)S!8t4f&94Eg53oMf_iyjG?+51^TY73UmMKF%>VFHSl`hUhGU}cyA0Kbr?mrDMr%>V!Z M07*qoM6N<$g3>(@ZU6uP literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-sea.png b/mfr/extensions/zip/static/img/file-ext-sea.png new file mode 100644 index 0000000000000000000000000000000000000000..7faf28579f1f14a4603774ac5896a116c32e61cd GIT binary patch literal 565 zcmV-50?Pe~P)wc8jCYumQs#zt-1HZOL*-Y?HOJH{_(vPMMcy6VQ~ z$osNhgyOKqygxs$b!GB{1JKJ8GFl@71~MA~pIH&$&WmrA+AO_#@an=gBgu;zbXayp zR$dWlv*fb0Pmen+zbe}6eCZ{T`im}zGUoJ`^xBm}dMCSDPz(tVVd&B|#JO}$_knZ7 zJs4}?*BkcsD?_`cb%u9ZdHs04Cm0|Rf!KgJkn*Z-h$6$cIMlCJo<=KQfxKj7MhC9n zdp0OvfD(^{guu3ewdqp31bLY+wdv5j4j?2Wj{))rn9P94SiMZcm3R5aS=2l*5DPMU zFG8QT4Z%R+C!`{<79|!s{tFF?vxd-u(Eu-`iZsvwFNA?bNr~_?30J4qr_;6FR!> ze@)xnuZTyWz0N}y=)RsS>NgsaA_Or<0E7bndH6fG^=}!3c-g@=GeLBL)PdBaWu~tm z4!*w0U=Nfd06=;n>QM|hQ)`zDqy!j<2Ok(}AhrPj9AxSoj?BcR00000NkvXXu0mjf DLfHI7 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ses.png b/mfr/extensions/zip/static/img/file-ext-ses.png new file mode 100644 index 0000000000000000000000000000000000000000..0a127f4d0085e731fc9b55ab4e9932baff4fe2f4 GIT binary patch literal 584 zcmV-O0=NB%P)Kcpls_5kHeGjJVrzkv-2D! z>&JK)91DE;1SYMqho3WH6;MotFX+85s25M;B#YI` zmk;nfL57EPI>Y`lNrCXZO5`u@B5z?Ax%1n|C+8+x1@PwcL^+t7;VEEVCad6(riE<^ zd8!(Yq&%twrM)J$V|wd-4qTmk1fMiYyk5lMf;CG zPW}<>EVm$Ia#bLJnxz|>2ji;AhO;UQ%yWqejIGQ9#zmb4!^nd04fI0`2+Ar$aCQZJ zsOyZKG82r4u>fACLNJ>CIqN1mQGju14sj)oh$V&Q)%>`P;YUzNZZ)C`>kv^;3tj(= z^$qwx&=1TYrMd&G_=+}!6*hn&r+F)qX`Ms?({M`oFTgob2Hn6M6zwBWw2eUCHVjGg zAkrH9!OnAD=Y6i@`hNoKqf>Tx(V1?-a{4X_UzMHbzxTL~>;DNLzD*g3jY+`DFarQn WCV+2n%+(730000x-bqWuYWBl9QqN=QI zY`dz3LQRq+lr#kq5MwSreDy*T^O_HkSmOJ?`V`9m5d#7!sJ)XE5mnA^-PX9OyynkG zZ(n<>gn=eXF$mcG(H9us2P2RuNj}fyC-1TDz4v%p6@B*kH!TyfOx^?lFaQW>9OGv* z_+>f#oSkmZf@NaxxB&DlTf*RD55KXduKEAD3=lL3@O&T7^V~Ed7=+|bK=Z^D+r?*v zcr=X+p^3gc#{>k3VmvXK9)m)zaebfcv*N07|0}MHoK?Kyv94!RAc>1Uq+7xO4%){aYL$l;%Mgk;-NPsCfEm zQq3&@__Z}uJ^d_z`?ol_rw{Tmeq{wG+IzV0#yg~%ngQ(I>hAX4{aYNRQ4qn4@}#ZD zNoUYqySenp6JVW&=OLL4+1fhrjKj%%1~*hUY(H}3eg#kkfZ3I43;>8A;P3zduAD8$ lexQcCBOZJJ>bnbK008PM?BwHVR{H<|002ovPDHLkV1k;t6v6-i literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-sitx.png b/mfr/extensions/zip/static/img/file-ext-sitx.png new file mode 100644 index 0000000000000000000000000000000000000000..18ff4d82df4571c07a8a41b30cae7daa687a2702 GIT binary patch literal 579 zcmV-J0=)f+P)Uq0XT1-xNj%_03rq?7*YR>D`9RnRMIz(|>_W=vgmu6>t-bpZ&P&4vf@27dpBpTFSGA4*@o(q-64u1mxz zv2-3f7%5-4>);*%%q9b)}VD87&3D@3TVC%uJr(d^Q%dz6wG%djwF+a z5r`thrzF;fqV`#_1Vrir1kmyv#uxysH=A?{0q}M3fMC*6Dbz{?>J?D}z*-A{$>ret z4~D*aiv0S8@kT3xH3rS*K%_1p$dhd%!JkW47+%UUJpT)c#~J$LGvaF_A{c8SS58p< zF1UP-D3#>R@>M*DXSgQ)=!oXPngAw6HuL0|jVDhgDz&7wo@yDS^8e~*RYgPw0Bvc#zIoqcfWKPs;9VTJ R2+{xm002ovPDHLkV1h`93qk+@ literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-ss.png b/mfr/extensions/zip/static/img/file-ext-ss.png new file mode 100644 index 0000000000000000000000000000000000000000..b5dcfcc41e9a6a34db3d709bc4d49102330cbf1f GIT binary patch literal 600 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 UpbA_}EdT%j07*qoM6N<$f>@j+*Z=?k literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-vob.png b/mfr/extensions/zip/static/img/file-ext-vob.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b2e1b4c2a92b275a404514d57f6a492cbdcddf GIT binary patch literal 520 zcmV+j0{8uiP)upz0_K#;OdBs=n|Lz_IfMen9GSU1S zC75@kI67!{vuu#K!4MK!zFQC6sRQl?f$Ceez)coEW!7WH_0sQA1?Vf+s(}Ufo3Q9% zvjD2Evi`(#c_4e0Du{&tK`|~?0ZSgYVfnKT0ZX2=;S%dly;KOe%^>@n)j-Gj86j|{ z!iS~LJFwzqmw@FjI!Ahicl@FW77{QR(};^*=I5Duly{+wj2W% z-V76<#)d2%HvE)f1ADghEUsb8>v%1I=ERF8P>NNV8f^TdNC@H)KSW^Btx_z>P-9Dq z7Mo*(&xuF;5P`WD((wr$&XN40Hacbn||nRhbl-(F=_j4?D{u=|tJ zI)6BiVho6cP2QcK*sCZJJb>`>u&#|UX=(us*tOQi&L2H{TcrM+?dz^g?lUxMzzY8< z#oE0W@mxVf?4GYQgE}{4>8`Upm^z5jz8Vr3k-*3h(r`#aX+tvM1ud4=;&#*q9C6_L zCswqtOYNHF2RE6&b4$d4@K0%6&&gt8QLcDFjHX|<6a?^< z!gC#5$Hj!70Tr|xkDgGcW;xq1wq7YkwD?*ft_vdk(}wT9&z14rX}Dw$FF$<4a|8!y zQMW1rWKTh`1w#zKl+TyHf9>Uvzs7KOY*&u}}u zM`m?uhzg?%bfiR(Rs+NkCGHB74qc>f@j{4TQ?;ZN(I}EJj|et`x$PTr^W7&BF_(Wv zrPRQplqP2)PN%KMX};kw>3E(?z2MhPKXrpdJcjahY6^nb;^c_C6u|NSo7q{#w$r7F?W9VY*iD>NVVNen=4`iT+qP}nzK=We&gOFX8;h#)adX+L zfg4o;AQ(7w4Yd0K>Od?Ir}VzJq#tqK6#;1A#@nBM6jV zw94SOJK#c@0&s7%;<-C=Cja>^dNzO$K*7YN572nTb5sh)E!P~z*(#Z-6Nf6Qfn4F{ zsz2U~^HxE@dj9JBA_!cU)u?+zWD4?7#u-C=^i8b6s)yh?e-%zU0H`7w5MLna^+fg3 z@pwQ`0>F7aP{3RM`En{g!2VKv`?v4PZSO z&qEUiaHH9SjRX`_1SYN+qONnZQHhI>YtleNxM(-7vK3F1fXP;C9WB!3k+JN zoiEt&`EP9c{uegOw*K^M0U%n}{6Q|0{K%A)hsLBnGEs_sZUnWl&=3i0qu3LZz}9cR z&+8PBXH=F)7yQH6qJJ5d{}+8q{({NBNFa)}%Av43Btk*D1g2N^Vsgd5G>`RisE=U1 z_?%~`XHRs3ayy*@^J@n%qox}G!J(ljlkUaI+2dLN**C0}5bL6pXVL*kmcY`cq0DRS z1Aw8SA<;3hDC4RND@Vf$+1eO3wFmSiko3TaHJe7UY{NhROifL(va%vNR*k6K%=oZm z95hC;_1mA?0>N2=NC~XoHi>0hM>Yd?c6L};SP&K-jxrurP!~Wyjv9Sway9BnX0WB?U^_kaQ=eywj2){iDpIzwGbOqd(z#a+g{*30iY077zrx3x1 z_&nq=BIuw5UUvl;quT!^ssmr3Iy*x)4UT;!mo6g0j>}FULXV-{DIgyr4^0$A>7Jpw zN1Cjv1bJ2^Et&cmG_?h8r~a^3BFHOg6D0y+w@o=?OHF)cQM|SdAg8LN+5jz XmQ$dNSoPvh00000NkvXXu0mjfpnMNr literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-wps.png b/mfr/extensions/zip/static/img/file-ext-wps.png new file mode 100644 index 0000000000000000000000000000000000000000..e57f08a19e31c757befe38779084346d29d588a1 GIT binary patch literal 558 zcmV+}0@3}6P)tU#^dd0O+mR<>AiKYLRH&h>f?7T~XPFQv& zm|DY+QPSa9JVO(vY7#gucjoO)h0O|3uo+#lM{zGhEx&~kt|*4KI`!K~B2s6XZu z4eZn=c6uY*T+jNQ=ig+^!7q$E^o6O%zcbs`ISFcyJi(+RUn!>7>f79SABxy~xpch# zxKqqH`Q7ysOgj9DmeVdE`mMP~F|!Z7CMP$KaXX*T*q&_4(a+9;x}#2-;3JJDofk;iyX8px4G@f)8G4{ZF^u$j0V8X%oB~KuRY;?{fr=C!a%Xz4ndPGcQrhh@CG@aI(BW10#36v@d>@Rx>W4w3&6e zq;5C+irQ9RX6TORt_6d)J;fIWZGGx2(ElE}<0-w?-lf~>J9J&;9F1#U>$JZ76Aat; wQiC$rRz^BUiwwr#tgwcSRw?YObiXw5x?Z=7UbuDjkl&4Bvktxx}( zwI+qk)ydJbCYkKD$-jjSj(;JKJ%1fIf7@{V@uz<8{AI=U*Ua%7dl|O6cS|D}c>Xv#*5tS@XE*<2IkR2P!*(f8xafjiAE#r#T8QmxJ~O<1{EuZVXWI2*xfd={kgX23 zzn_BrMj^T@{x+EC>5SCe%Y!jr&yo9jE<2iF^SjB|ZWR!(the%oi!RvkW+L+*lw-SB zi1lv1KZe^GNWJ~{7{|S0;i3!Hyc);CC$$lo|F{~*!&0iwwr#tgwcSRw?YObiXw5x?Z=7UbuDjkl&4Bvktxx}( zwI+qk)ydJbCYkKD$-jjSj(;JKJ%1fIf7@{V@uz<8{AI=U*Ua%7dl|O6cS|D}c>Xv#*5tS@XE*<2IkR2P!*(f8xafjiAE#r#T8QmxJ~O<1{EuZVXWI2*xfd={kgX23 zzn_BrMj^T@{x+EC>5SCe%Y!jr&yo9jE<2iF^SjB|ZWR!(the%oi!RvkW+L+*lw-SB zi1lv1KZe^GNWJ~{7{|S0;i3!Hyc);CC$$lo|F{~*!&0{2-9mBBHmB=#AFaIUV8eR@GPFQMjTvCk=O za8a2Gu6DzzAm{92c=vT9G2#_~>~fd6(F>Qk;Br@7^Gl&81jy`@x%9$iF1XYM-{NxM z{tC9IfDR-9K5)K-kO|+Sat4>V;Cv?nD=UEg4Ln{7ACE$U6TV)A&u76GL10A%gUeiS zt|OtfRl|a(E8)p<2-@MxIf)2VU&Y`u7o2HN+?G1%o(TAUK?#;Yzy{wggY7+f$f^3; z2A8?uR67!PHzILI1Cp+eLjQ3W0NwPCq$|T^F1>IW1<|85INbq`wh8A*OE}mR4m47G z6S*gM!U>;7@NS6qP=-;th;YKE5vZ@WO7lFVHlY0n;Apor3zz*@00000NkvXXu0mjf D!hG*( literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file-ext-zip.png b/mfr/extensions/zip/static/img/file-ext-zip.png new file mode 100644 index 0000000000000000000000000000000000000000..955e2339ef2db0b3e5052dccfbefcbdfa8c46038 GIT binary patch literal 561 zcmV-10?z%3P);d|aLw%XGA zgZ8yb1Bm|Ye`eE)MQBk3!Dk9p?naTSoe3_EWW(~sG#q>emvb%~RSirG zETpMmf|vtnlnCO+yT|8}zhXBIoLc_VvoWyAJRb$=T9VL$|eG00000NkvXXu0mjfgS7yy literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/file_extension_3gp.png b/mfr/extensions/zip/static/img/file_extension_3gp.png deleted file mode 100644 index 4065bdfd90c5ca8ac2a69d0f3a6a0f0572a43522..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmV-G0>Axk7RCwBqQ$0%^K@>fAXZHDB2r*SY z)E{7H6CWZLqJn=r5kl~zOPv(zi=FV0fS{FyXb>TVAt8!guuxJM#k3Y82#G#t zCijlJdAqnzGBE7iz4xAb&KZWBbCA{c{=+Y8?8BR=!V2i*VB$q{97?Z_18MFa%tHVu z(Ic_57KRAz$ET0qO&6CAr(O=nd7T_!jK$}*Z3HSn0vKHb9oSge!u*>t{5ID^bJIn{ zASnRLlyX%ehykvQK~5>2&K!uT1`K-j2V=e6s8M=oc6LFgJP%R;OjU&nB|h)J8o_y~ zgi98&_x&fD9^FT4VG%8F=dt~uQKmh+&48x`T8kDRAH5z;dDvE5Ml~}DxQ?IVq!?4tj`T?rc7rkhkjtefJhD_v-XRuNseQLvyC zP3FDv+?jlgM!^R+b2IPUlXLF9QBf4(_J!J4=X{^!?GyQKuC#(y>htv6#O}_03v1;= zii?wDeCY)a&*HG*`1H_5!!X`&eB3n^Rv*kPmM4)qxLtEc*BMBZ41q6WDgrqyl9u zlu|M6sZt(Ks%v<&_637S@{B=vS`EFU<*o(W5`bpY!DvGQHjMOu z#Gr^xJ$h^;Dfm-CNDIp9Sb-wLXfcOpwGEhzfei@b`^b5jSh~L5L={^w+H&5sK_$xz zZ*j7Ch&P5!WM62{Fa(#DkXTTO1u3LTssTpNA54@v{&J*co2X1BIQ5q?iUn;9!3vkJ zk8}W6mX`!Hgxr4{WM!{mx1&32S&L3Vf=e^R1V0+zS3a%3I+0$Ge;$?KJ748* o$=M%Z-iQA`o2+{$$u9v00A9P@Gf!DhVE_OC07*qoM6N<$g0h_^tN;K2 diff --git a/mfr/extensions/zip/static/img/file_extension_ace.png b/mfr/extensions/zip/static/img/file_extension_ace.png deleted file mode 100644 index 912abbd9bebbb206cefe7f620b7a9db266d6ffbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}}#P)hvq+H;>wMyg9J(dHjdGbEUb;8m4u?Tu=u?}F_4pf|h&*_r^$}|G7APs{ zmfv{TID`=?&(8<<1A?7ntV}CK)}m0<-PL^d8Q1FvVMxwEbvycoX3%@)HmW+2paXJSpg?b@X1`)= zZ~!xNkMZ>Nr>?ofC-!#`Sq6d&SkHh9COw8Sbt>w!Z+ z1+-F7T49>NBPXlAD_oe*0-|QD!j zl14>zPfg5wvwQ-1P~KF4mI-mr%bM6JAZZRHO63xGM#?0lGb=th9jIi;q|eXKLip$H z`!^pB$1YEAy^wqv<)_br$C7%ygZ33{Jbn>wi8ucQ7y$li;s_NgjCcS5002ovPDHLk FV1n}~A+7)b diff --git a/mfr/extensions/zip/static/img/file_extension_ai.png b/mfr/extensions/zip/static/img/file_extension_ai.png deleted file mode 100644 index 762346076e985bfafca8b4402cf886eacfcd5b3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P)gn@$z0%V-k`I zn&`qJwacchTLl;HtshOg5ClQcmHrM3EiR=}M0YMM?y{;NxTv`3LZJxK1Q(6gfK+Mn zX2v@+X+9MkxXjFb_ndp~o%@(E24C;6A4VYqgVAMu%vq!O6eqfF-m)$IJjQaB@V4@FC*y7Dw*j-!4nU@Cn<>_)ApBRyp z2MIbdWRk#A5&?4(4UvLrFb>o-aQeYVBWrZO2a%e9TA2b*ru~SrAp$$PR=-Fc2O3)h z&i3ZH@g9h%wkYR)6vu`M_FLFQwR#bq|EHUwzgw*1WvA-Y@4|3AE2GvKbNdK!~50t2cVKj-qeE zKMp=IJPhv~`32_~%pYOQvhwYFciGHTt~|YUu{B51$mFcWa-F(6W(1Lp=Lw<=6w)+DV2uGRD-ft*4QK9;;>D!8@Ic?y6mdRBz*1$BL;{lR zjDHq)$ diff --git a/mfr/extensions/zip/static/img/file_extension_aiff.png b/mfr/extensions/zip/static/img/file_extension_aiff.png deleted file mode 100644 index 6bd4ab7a60c7b65fdc7b445ef9708c31cb117f07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)?)jk4$rZEmlnnEeb8+5xiHN7bOp0B} z^@|wsV`&xd78;nH`4D`Ws-Ow=FceE*%>>0ezB{$ZdN8?mkwB`!C3wC}TNXzIF}03A zi3x8$K7`6}+V*9*EgGbO*4#9XP%A_P) zTNDy1LSv$xc68dTg==htL=qD#=!}Kfkw^paBU{PS$3kq!r?97{a z-nVy#odF7O@^%JIy)GhW^JluRnua zV#a907%P`pt_|P6(XrO;_dlCQR4i09NG$ZTVs>bD6zeaSf+9KgM< zGA=DB=aktB{e~ug|AH@{V6OmcHbqrN4WY)sOYoN$7SWvz1xpisj|ITybyl@IkY&N9 zli7PoFW$qYnW8u@7+eI9THT(_9hhnr`hrRGn1M_wJp&L_8Tbj5&122eaB{5v=tOh* zMH2j-WRhq~K_Z3mls;$L@ZpuNvNh zK?GgJ-`XNnsVJf#erZ!gU8xHfT?m5W&W(#g<3 zHshqz`MjC&-ZxE1S_Lm*-n;Lfd+s-sBnh@(em);XagMJolGHy07(|unkv%;P+Y;E4 zk2s$m+JTrKDaC6)0mU)EKYW^<&j-Vk_vc3Yhnj;}DI4I13S(m*VHl(haiWPaFt81G z?@i(R?R_{Lh9w%Fq}kE_QVW5&cnn6yK*R*TiV;SM&cF#2NC3f4jGx(pBL)p-FFnoh z%ZUboh#N-m`7Er-qCB`2y_>r9`^oVyC~W9L&&78-(9u#6Gw**KZ^=N!;S#!YZFqg9 z7e-T!BYQXER(CtHmVsZ3A#4uREDfyfDO^8RgeT<)^Qnirk@-#&*LJPP)tv<#D6GP7 zKm0pE%~$9v=1}!hf?P)i`E!pU@v7`o;m5w>TGWDnWU#0r)EMY0zH{g{i_qC_V%^yZ z_^dA|DKo{b7^7}7Pr+lGEB1g#$a9Q1+SHwca9kcW56QAp94*g)w+uWrJeskg_|%zj z!=9A)qf$$Csa))WGl*IVL{${y=8Mlf_cYy!@}Y(^t61Pu?1Ed70WqWErLnob3lHAn z)mH~^@RCwBqQ@?9dQ562pd#|lh4QZQ3 zv}r`7Tb&#fwN?-uoGf*)I*WtoBqII;E=oa{j*3A#2whwhi_IWvQ8&Rw#N^q*ViOH* zn)mDa-FuU2lNP*ix#!&Togd%1=ZaDaOP8ghBBYUE`{iIc_Ym2Zs{Qoxj6&z3>$fQ+ z1_{xZuzC_xNYME7e$bDKPjUrZ{5P%%U^0gd`1kKYyrv~Ffswm<4W+veke^e?G!9Ss z@=&d5yePKqo5kuH&2%V8Ztdzpm{U-^KHbL@iez3HOmyk*u}VE~6fuP=+t zt$FNyq_D5RD8GN8cVrhZDJY#2^o)$^>Lxc=p!o)C@CLFNxKpCi^OwizY4rEapnrmQ z^$HW!(Ci;JDlq!`DpHrGDXen;!nZS;R|xc`ffF}@qc;#_jsuOgw#R9$U>#kfCwVTL zAP%c8PwcP_34b!d61oqKnPzVtAPOxos+bD&YdCCb>Fgd`Ra|Y_Lv%i)p-Uohjet6V z3W{CVJO6Bv{&Y;(4>z{Bjtb1+C?ua3c#>nVf`rHL>`S2boqE;WTf4IOjsSe@==D>A znJuhf|7?NIzST7a-Wj_d3fYPR$JXUA#d9-oj+}zz57<$51*-fN$-APl+i`CTV5W~# zfA}*~(QR`4JP7y?^L+}SwP^*wELI)Al zL2S*t?>^5tFG&;Q;Cb)9bMN{2-Z|gBm!c>_--*KaFtkaTw@Sp1ydZ)@^mXp`=&Gi# z9_z_Rl7};UVcAG(rZ}C~p|y(fvGRFk&5Yft-pgfLf8sUJYJtJ6yAR>IF8`3?WD_Di zv=+!mLJD)IAQ@a*#kIwm5wF6yw8Ti zlIJu5jNxQYhwCkXS$t( zAQXp#^T&7K$Y39ac!MUaOvc3b&Tv9(9saFk3T4DoWyrjAluX3<>6YfjN z8%a*w=8-})(7z6gzm47p6I#`B7KB*7Nbs0I(E{@3Z3XY9&QY@kTl+Q3#=-akHEv@4 xLrdEpS56w=Rsr|a%kw1uUw&|2RVIG~7y#pf49I4|p%(xE002ovPDHLkV1gk+K)?V1 diff --git a/mfr/extensions/zip/static/img/file_extension_bin.png b/mfr/extensions/zip/static/img/file_extension_bin.png deleted file mode 100644 index 4c5411efb8d38e7a8c7c918558fafa33b5589b0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 557 zcmV+|0@D47P))EotNyTyOGuh5_}Nnq zhgJk^K@$MVVry|AegA&>mm@(OG~-$m5VKSQ9$oLKsZupgYT!#)>Sq;FL^!mzKp;;- z5YQ5GbFMGloBnhHNh;hwk@?$lpE0zN=^A~7x)ms{9J{@MNCRIv1x&!W)*%wLCD6vl z7rEq1>t*OT16FTLTMO2uT>5;PCe2g5czPDsOh5n@<^>vF?l3e~bS@ARrUaF{o87-< vjN^gDcsDmW&Xjx)-8%5_`bWK&_W}$6>e0di4uzT=00000NkvXXu0mjfI@k2U diff --git a/mfr/extensions/zip/static/img/file_extension_bmp.png b/mfr/extensions/zip/static/img/file_extension_bmp.png deleted file mode 100644 index 42aa0026f2368e52c89e3add362fade3191bba37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 665 zcmV;K0%rY*P)0%5w~XBW40LKYSMVC=L?zmG zgEFk01QuMQfmR|7$Bd&L9YXqG4$WA!+Y1jv1da)1rYMT{6C6rj!m~;qjYx@pnh3;5 z9Zo{Q=5d97d1bmNRPGS|1D$Myr(n_iM?Zp=zlNTQC(!`p8x{@zKi{qq$t^l00000NkvXXu0mjf0yip| diff --git a/mfr/extensions/zip/static/img/file_extension_bup.png b/mfr/extensions/zip/static/img/file_extension_bup.png deleted file mode 100644 index ce04201323d409d21ce477edb933c0cb204f556b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmV;H0%`q;P)$mjd=JZNL1^;cy?qlN z-XB5navrWXHgI*QfCxmjC5Q$^Qc6Kes|nz14L{IJz^mfez8sSF_`ntGIU60a+F3Rz znot&mY)wgy#pxMjva7N2%o}VNe2UR!TPbCIFqQ%5;QAVMEdt`qo0-^_g|9y<(2z)E z(p))szTd1V-M`82zNhG9zLm|7?bS+W?uAR~7NJ!Ku!06Gn zfqqZ6qZwew?au@fwl+eDQK->@kdh)weS;Ujvd^8M(%VBc0DMgbE!jjLNwbQ1QLJMpfNu;V!xiqmreA9 w@XuGt&TJn@(Q_6;WNBG}{~xpDTly`)02%z)E2)QztpET307*qoM6N<$f`0Wg?f?J) diff --git a/mfr/extensions/zip/static/img/file_extension_cab.png b/mfr/extensions/zip/static/img/file_extension_cab.png deleted file mode 100644 index 74aef831b7e5ae7c5e456d876d49d9f73e258a64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)J_s#dd_oA$|I5t)OVNBc;bMF>E;+K;W(+XPYjSqKoy=X4m zjP>P5lE<&+5XVV^;axrCmuFwoJmBre@4Fjg#fP8g^P||b{1#fJ0o+@B3D480g%;yy z4`N~@i`!-3{^E0ddoY4Rc(kC#ifVN}U)Ta5uT~8Zq*L&;MjbJ3FnQ+LCscMGf~F7Q z1|D76gUcG1QWK?sDHkPIw~%T=U$_Qh8goluaO?a4{RT&}`?2r(8|=OI0+~!N8OIko z7}TQ30f=A%J2{-e?9v)uzpvob$-_87lTzzZhz<>)6siOueJEWg6j za3vT6O9rv0 zU}&?Ybxh{^5b@ITob*#WO;kq-bcqHcp7g%TIhfA%C*tzChyW>;rfi}WHbJx*v@~e& z^mufz9q^~#x_sx@m3IFpw8~3zm1E%I)L(6kYQM_<%Gw#< xV%rs~B))Z4GF?Q>a^HjhUq6|*Dx2Q|3;+V2-RVF|`PY9zA}74?FMC z>3qb~xy4zNgCMg5fS!d>1kdw~Tq`k263cQ}s%m4siKS;N4=9O8!`RIA^-3k-mrA%m zULuHfQX_>#^~yEet=CZ}zg(%9eVHyOFtu`8q$y=`b_S}~`rhs?ZcR?&`i-05oI@*} z*8DfX1T)4_t6jyy!aStlA&RvXN9EFgg2w)jtDDbI9buK`NgpM_VA_eR`1*Tb|Xc((& z&++5*v;cVV@)dkPFinR-BN?P22VsDp-7Z#E*K7}rkBwn!>NaNLX)G@UbfFnZo1y*$n>JxZG!bD*EUat=8;g>PG-xL20t;y*7U;xCs|3+$ zn;PTYAI`ncdu9xY^YUKKJ@-53e&>7VGOaZV=N~R8salQyFJp{Th%ogQ>TLzqQ;QJR`Eo5<;7eM&Kf-ok#AU(5_NFfb;G0dqJMoi3!NL`5-;m(NS+ z?8zd#vkQ)4rj%{3xd0^)SJZ^Y$k8p>yDbqMZ{9B9+^uQLbjP0Ukw(9a|7IW|XgQqU zYLj=J9JBG+cU7z`P|^NwXcE|HRc}20X<;ZK$=lc6W;fD-ivy>|ky-6wQ|Bt|?paU! z+_uKh#DG}_M!?uS@&nI7-{?5jt&KYE*pRlk`W_Mu6ba^eE^5mP@8_#fB-Xc3%}>%%by}flgOgk^#dP*2I%6wGD4cb_LdYrF4mBu`Dn?c?Hm|fgs&^`qq5P)Xpd^YehPjdt^-^vS)k{JV(Q8yBBtb?*p$`UKUQ0=&KrHMb3X?WX zda$w$FX_(C{D0?+m)%u@&RqCs<~!f{&UgM%q?A~5{7%d?Ew2y~{|Z%AfAl>#>6?A# zJPwU-rYXFaPalM!mnszS3HmOifMt^^c=LWBKVjZ#iMF1qO(nJoxN5^7mgya8)5Iu1ZtDVVKfR zP^ks(-x2~-RJ|w**s--7ySGPi00000 LNkvXXu0mjfBpXa; diff --git a/mfr/extensions/zip/static/img/file_extension_cdr.png b/mfr/extensions/zip/static/img/file_extension_cdr.png deleted file mode 100644 index 277b23d0e5a17d9576aa4a247ac99ea433e5ba4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmV-;0*C#HP)mdUt0&Pp!K^YZ5$r*MyV;`~)}aQLRj1<@FmpzyB2v zS1WV%MF=99>mlH<&RfKhgjNzlh(Kzr3(+O74}g2~+i0v`sq01@ky9-rVAakih#~0C7fZGYatlg-_dNCfY5MQS|Bv6~_l1A{2rvM*u;sXM Sayae)0000_a{+`50q4SUaeFnN*x7+v1Wm=Cqii21yo|ONd76*EaVom}JY>pA z$<c37_`EhKqK zPo4v3+qV6b|17`>s!g~y*z=rK@16Ng-hb{qLY(L~LbrH(CR5lJ4s z_a0Ra$+m*=c1Au>(65*?X2v_ wIZwysR1=@wRSQ()xex!p)|s~=hra?008r=c;u%{t9smFU07*qoM6N<$g5lpS+W-In diff --git a/mfr/extensions/zip/static/img/file_extension_dat.png b/mfr/extensions/zip/static/img/file_extension_dat.png deleted file mode 100644 index 758a0e1c1a4d0fb5403361422682d30fce19af72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)W0v`}nfVS%npzpKP%>QQ}sZ3sDY1lC$K;~38$Pl7zf6vWw6 zSYy#Ya2D4mZsX(K6wT!HAmIhQ9$yG+lDylaL(KSME6iLMcg$kr=&Dm0J)31@mPbN@~F{#JbX zv5tX6*PW*g^Aa(b9>eK1t<8nsl13@(B>m9#>3C` zhTDlUV(|+uuffJM${YltJMZl}0F!e6?jh4k8=0gHpJzb)f+O`8fo;&U~G_u2zt@f zgLb8b`fQBJ?u`G;wyAAa@ZTL~=6`(ieLpiy2mzLv_yWPh-~#@}01fjPIucv<$U13; zx8vdSsY5ggmCK|{B>}GB;N;1Fnvdp&$H#CbJ@7a55&%$k9Nd|DMJH)1QJ3RvR|iHP zzl6vfL)%@q|LyQNBar^(lxnssk26gAO_+7w4ATH-k`-|(E#S?WcI=Pu=)?7g_iF$u zMBgwpn7SOg8it`034v(SX0U6|!7e|*uGl8Y_{3@nWR5GS$be1~R`C}El8#4e0ICv71Tb-Y z59Ue^+D7vzRs@>s1ISF|3uJ6G>M!@t)?JxF-7YTTWC8`W)Vnj3L+9B4WwFSEru4YqD7$CCQ@h-BH}`7 ze%$*y-_bWS+KhA_k8{88ocrB#&U@F3q6oC%d%0EXYzMYsee=APXOkl*W5~Th46L;s z{TI`qp66Bf5WC26H%gnUC#;>AnaPb_kK;k@0nRzhy_rW~s&v_warr_T&u3p?Zu&k- zC7S^z5R2>*h~!B&ClLg-0v4VR7-QhdMO^9YMi>SeV;P7jGUE{}(9o05bGiiTs1?-by9gj)mW;jB#EH=0*hfEBR+>|hU0cedlv*d68RiODnWqJ|Yj91tGAdawBF zw;#Hur*X|V^BPnjEd(KQcW)}5efLTF-&9W{&-nI#QLh3CBoZOUAHGza={*Z8r_s~M zGafY*;AfN`hx*PbK9g$4`0al6H1dq^JH+OuCcMsn!OG7yOg(+8JUuaa#%qTdRPTug zU)}@Bq<-ZOpO?|rdKgdUKdL7_)N)XN4d!_}7p5Xm_`S8Tkk5DRcNr^(?d0n^zRsf9 kDeegV-!^3L_rC%R0Hs#q^WSK6qyPW_07*qoM6N<$f_wcDiU0rr diff --git a/mfr/extensions/zip/static/img/file_extension_dmg.png b/mfr/extensions/zip/static/img/file_extension_dmg.png deleted file mode 100644 index d8d6a81c161be2a5e728b3f5eae5037d999998a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 669 zcmV;O0%HA%P)L3u@gj(L@*sGz9uz@E#X>AzdZ^a; z14}8c(Z*zV-+RvNHcOV~;K18A``*kq^Ucf?#uyyD`QfM1I>)*JAZYR4FP0F??=F=$ z_x{K8&sFz8o5)!RHi#CVvFZHRR^FRz+@Bk-oaqOaJv1)>?#?t|TY{sJqak2} z`mqXbKbpnD#D1LhN9tm-A>NNy>Tzb#Cg5qnNl9#QQgGImloCFjTLg;s58OMo5tUur zYX_$09wY!bZ3eKUO-qJ5Y#Y9?(CPvsg-s|;e@E&1EQ*C3j5ene6j(e(K(+;8Ss`cN zXj~pEpjHMhsBPG{yBG%Yl@9kLfM5W+pr|I~Plj|@D-YvUa~01T-;j|}We@M&fqn!T zQwTIPG3pYPjI^*NEphbDBATv`tYdQ@VUuAH49b9{OBwhS`Px_>CwC5oXD^y<94cl* z{o>3L-h63Ot#ooedKq+-!q#CYc4p~0pMSiBr=R~)VXZLGzzjTP&}=CTl4@xPiei0o zy%1ns1`HW!MKd7r(GAuCoEXjGRyB_mkGr4}MT{u~RQfa(>*`B4zI?LSiS-+ATX1MT zJhB_mMnP=@(&-eK>hXswAV&B_ExGdgH#YzdwIH2IA>b(yA_<^Y-RH~mIAYcwPMcq4 zpB-1GLq9Z>_#-0w9)RG7B!n0xJ%|4nm;4r3`6s{ti2m!0eaO2500000NkvXXu0mjf D{6!@= diff --git a/mfr/extensions/zip/static/img/file_extension_doc.png b/mfr/extensions/zip/static/img/file_extension_doc.png deleted file mode 100644 index dfd46f9ce9cf109823545d5976c72af51b3a740c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)L_(hUzO(Z#I{0<+Ym z+O2(WX8LBH``%ktqLN0kqOwV*B|OiIe55oK5&Kv)_=Ul~9I~mm1LI=WM!C`;;4|1T*?4gV z5QNgoD%#rj;rPuW6d&i+k5;H?j>^Sh9z32{6Sa*p0w(Ho##Ro>1T0`0 zYhVjk@dJFkecG+pe%5gB`4>F6)Q!u9_n5qPgi{YQyZCfHDzr#uKxA-uwCL;`&sK1^ z??4!Zi5dQ1m&)iEnYSs%Crk=(1yI$YJ#wK7QiM?o{fF@Tufot&348ZQhucxWHwv_! z=Fzq+9?pMrc8e6a&g8&$Bkeg{lK}6zE_kW1g^%BT$BR#8XFpl`frYP?aF07=aYRiQ ziQCM|nHGtI<4X=8cL_(hUzO(Z#I{0<+Ym z+O2(WX8LBH``%ktqLN0kqOwV*B|OiIe55oK5&Kv)_=Ul~9I~mm1LI=WM!C`;;4|1T*?4gV z5QNgoD%#rj;rPuW6d&i+k5;H?j>^Sh9z32{6Sa*p0w(Ho##Ro>1T0`0 zYhVjk@dJFkecG+pe%5gB`4>F6)Q!u9_n5qPgi{YQyZCfHDzr#uKxA-uwCL;`&sK1^ z??4!Zi5dQ1m&)iEnYSs%Crk=(1yI$YJ#wK7QiM?o{fF@Tufot&348ZQhucxWHwv_! z=Fzq+9?pMrc8e6a&g8&$Bkeg{lK}6zE_kW1g^%BT$BR#8XFpl`frYP?aF07=aYRiQ ziQCM|nHGtI<4X=8cgn*tIM>QW~fb z0)-DC;R7gu)__352?+}lHAr+sk!TRFZve$fFv2bQ0zLo*QP2dWn3e)ME4w>8+%sc? z;{}OXuV?1obI+W)_pb8ZBg?WM&bfK6YlAkWLt)vcQ#) zEFU3IK}Cf|qk$wzC?Y5?ib7OW&{_u-8|x48?D>nXwKkFMb;fFp8RQxgoPs`UO-cmDzMyufHQlE!+8?DkzW#h#`~@Dn#ZbQGXsBMG2AHz#j91aola zo_6|)Q<$xS+?AzcC$e;Gp!JPM0c?y$tJMzk1c%u&=6U}9^QXP@u|Irhl=!vzs4skt v6Ri?z2%dV9f}mgv1;K;hSp-1}>Paddqr} zf*>f=8r*F5z1?-@ZKIp0;DqeH8D_qjZ@#x8O;a4X@?gcrNi|7Q{L7S-U!LEX+|=>8 zj?Lo-7tfwQ3I-4o5S&1N_8lk%-Yk6@G}H6#+TCaHl!Oq%#Y~*w z^4Y_fx%~uhZ(Tquv=f+~7X&iV1;Ey}3H*YF)`}Vu0R4=KVQk9d1JNqxCin7$r}d?K zno7pGPV$2bB5R?jSSbbRNl2Q6-yGlFsAKfvLySz_!Om@)dAhMbCWxq;Aow_??v6XC zJFxibJ@)Ns;Na+XM~(Bc4dnr7Nv$Zs`ceVo`*#r)g)Ox*N=1#~jTIEhKQ_BS(+P|n z8limA4ZvzQOt?R?*l>k9#F+5mtVBcFNOQ!pfsnAP7 zu#5=`o<^}x!;*~k{xVhrgNm=QW2lN#*PkLurMp-;5!O_oh@oZqegO-wKOp9NK)(B4 zQtk}YHk9DWEKl^xXj{z}@0OMiaD}V+%SXvIVyzkH|B7cai3Xjk_<#FGb<2GCDZl{J WU;;fAe}v=!0000U|29Qj^ANb&8}-OF3rH!ZB@mvydk z>csKvP>4{-OWtP>u=M5YW>Xt`GI#&#nY9u+XKPx6nddJ^Ny0hW8%w$#14R7z=?vaa z-N40(<{)Zgf=C8)0+|^k7gP`>31WJ@)Oh#c8qEsET1X;={e^o&{YcaFbpNICX9WTt z#yLbjrU)o7p|VS*v9Pd+zTGKy z^`-FCnj^w>83Y1jptKCR=ME$}`d+VNe*Qx%Oo#pZ_Wpywu>%!avCg;70vi#lkQ0+w zUv$t4QBa5mj!?@DgSqiqxO_wN&y@y#Hw_wWowFpIfaq`_xCKiJ5-;ym!_l7V1U^0- z!t2osZScw4(*d`pezgToJ4qrOyZH#S!)HS=kHgoeP>MALDp5+}fcr}eS%?V%yUQgU zy)_*!dEV5s0X-W_D0jt(=-z}D);SP?Sw|5iPic$n^XM*jkt&_Z)!!m>(2)Uu{*Drk ziGXohM>sz^8wivX1x3b*&J3C>%WoGyeLm!K8J`IX6vXoXGT_^L9~i|>T37J@;|J9( d@#2pF0{~d&@>LNZ1(g5*002ovPDHLkV1oBr7-awe diff --git a/mfr/extensions/zip/static/img/file_extension_eml.png b/mfr/extensions/zip/static/img/file_extension_eml.png deleted file mode 100644 index e6f3174fb09bda2e19bbf47d716a606659f937ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)q(kDD+Z6aitX$M9{M*FCG*@4;2bRMRdikwz?uq zzre$mLep+O-gD+9+a~P_J~GK<-u!*nyx@#oH(1o+gG13 zF>nm$DyrvbE-whu69WWYC?qTsM#3OK0F}OklH9%l*mHP&A%(6N>Qdd%7mFm_tTPaF z4UdvRVm4(Yp!iDWP`qi!R-}h!kRJSqhNdKUcQO75WR54XECrau5soRkFMOZH&V4Ct zCo_rfdH(8TqkzSV#G|fVIJJK>{p20v%p(`n?h zdtti@)c(_k_qE-hoOt{st z1&5wYX}|TsPd%XBx5shs{GM1|Y>3<)y>*PuI_OSs)K+Va&AB?y5NiPZ=~|{h9}Uo@ z3e|rCk!IQBp>C?Tbbbur+wwB1i;Nq)_}ph?VIBSJ?+rSR_Gg^so{0LlC{4 z*&W}^T<&(g2pJe|=9~Av_q})DGOaa^=h!bDqZ1mf%V5mzlkx`o8nAZ3p1n|VX?EVA z?v*ijHam$4NKo6~>#eFU+vN|KN%MP+DoUaHaScqQ@+r6c>;(?jw{Z89M$g-!=_uarU7$UKV zkP`Cu?Tr^oc3{p7sTC)#V4A=x5RzbWs)9IgZy008o~vIVnJ!~g&Q07*qoM6N<$f`0cI Ax&QzG diff --git a/mfr/extensions/zip/static/img/file_extension_exe.png b/mfr/extensions/zip/static/img/file_extension_exe.png deleted file mode 100644 index 09bbde7eafa980714adc697f206884e8897c207b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F7aP)_mS*7lE*q-wa%nr?{*e34&!&qoK^`zf}d z9}Rx@XcX1}o@hWCnDC8F8t`@NXaC!|=KKAZV>6uz9D!zzVqpCB26w!+m(h*KH*xRH zD(vC}4x{1ek8@2S$@CclwL~+OLzDs!9s~v!t;mp^Re2Wt#~q5LBw)<3O-bth-tO=I1wyu z?qGKK8XnvjLg+J5oDgG?Blt(f=*Nf2I__NV%T1&C;{XpEJ6O7V-Bo;Ir;2eB?9cBS ztTuMF$`%Wpj6rS+$`?_^a**=XmcLU2aU)d`TNG&b>5$V%agrr)8gP_-#q@WeH$a5~ z^6)UD#owbetNNqNVQUkxg-V$Ih8&wGo~ytzUwGW8`W4reAf|{HiYfBjlPg_yP`~2x z1k9B1=v*v?m}%^~zO$y)s9$lNA~*t{(7XEMQsKDe3t-aF^Kd(V4OM1;?Y)VgasagYlT00sRG4Hb#3rLEPZKNp@1 zQ+|Y;p1r||tI58C%hBz6dHvn{ME>ck?7qgvg+66b%ExvP-I<}>V4Mn^e;Q4AUzyXb zoAl9x5!KF}rToz7oX?Xm0;P_FErSES7~qIT0o!JffgcPRe)b%@PoJDB#FI~aT2G+S zL`1;#I#jg^qgI2_Yyy=k#xmn5D}^PF;qf$E<(~IxW?%@Dc4hBl=*+2p_r5J7#X_m$ zhqW)9Q`li4=eCUzU77a!B-SfA}Y$x9XGf--Gyndw; z-JC+{(lngncTBFX0gl6K+;OwjcgI?Qdqbz|`QQOe6YiI<*m(KEyU?X%0u$?&77(1i z>yU{uxA}xdg8^I#KdAEEdl)%z2>ZFBiJvQgW$Asv_4s}ZN^i87>~v9ikVWbCEcVVn z0!mD7w>3;2mf%7PW>5hW;V|%b8O7_@uyg7nqL~bPQqiw55&^cF8uwQP(i^YR>jkJI z2Qit?>t`(|%N5H$n@VrqGD>aYLjp<`lmRvW7;6~-^BYSR}qV8d{}_(Stu+n z9wRyRA4AB359ab1lu~;*kK_M`#k^%n{s=Gt%K0Xpdqdhh00000NkvXXu0mjfjw3Nr diff --git a/mfr/extensions/zip/static/img/file_extension_flv.png b/mfr/extensions/zip/static/img/file_extension_flv.png deleted file mode 100644 index 043623c4d8cd71828548c30b971f2c17e5957d52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmV-<0*3vGP)YS z;1BQzcw!U8-bz9W8?n%sH2wt^5tOJH1Utbr+L%~rEoh~^3RVWhPL@ zx9;=J?CoBTJH!WXcW38)-+c4U8$m?SvATQjmo!QCBTX?l1T0H@t~S3O$p2`p$O%@$ z5juK*9)`fOx;Q=l!zl!oHh;puGW)ptt2vz$n1{~g;ax{rfS!3YMB?T?R!Kkf^=O- z$0<_zKE6MBitxm7tP2P4rH8St7E+=~jk31m5l0!&?xeCIg+!Yz2p1pV7{#dU*#{); ztiFdp$5u{YXUS%kCdM)P{2Ao%4s71I1?hRFE|0DU?6RIvOdyof4uPT=;k~;^>L2m# z>&<6=8+pY;{0i{@(PV7nuK)u8Ifv4P T6f>qU00000NkvXXu0mjfKnot6 diff --git a/mfr/extensions/zip/static/img/file_extension_gif.png b/mfr/extensions/zip/static/img/file_extension_gif.png deleted file mode 100644 index efa8206090a47478e16f459fab099b683bb8a945..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)@8Mdt7nO;og%oKdrNEzpjqqR>aZd`-5BW4wrZNW$Zux@zt3N z;ekj=V0mBz&|vNB#-ZN4UV1q9;bzrIJY+LQWBKK4M9MRGjCf*{vw#IYcX z)WE+$3`3y&@lFT5#qkj0wV88x|7G*~E&^jS%6Cv=2LxW9!^gFCbdQhWG%a^jPjpFO zQpTghOXn=SZ$E$g@f#bPt4wZ$ShaBe)XC8VI!iGzUk-W#WD3RD?FmNyKgD;ki8;d`L)Mzkev zL{`T8BdAE?7WWO#`$>`%;AY$i{jy7e zcm_UvySh-TKw&;CR-u*b3kqbX0`XZTaBnjqxKd|Vd~!F$iSJC=p;JS_fAHVqSvtRrZU;u^}^fUzT3a|hG002ovPDHLkV1gi$8kqn9 diff --git a/mfr/extensions/zip/static/img/file_extension_gz.png b/mfr/extensions/zip/static/img/file_extension_gz.png deleted file mode 100644 index f391025d7e7f26a08ec00fc2ed10fa6b60d37b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)+#Q@d+c{F`omfl}I2CkimeNUAxH3Hq zNryUbs5*>GdmuOkZz6<2ThFNk(B5+zO8B%y6<6;;V;NNd*{rZ~bC#;&bLC$-(;T`{ zRB>q!h+5Km7>52LH8uH*RF%gk`%49f6GAi+ln)Pz>)YS*wz0%VHr~tlFsf_A%Ye_h9ga0I@8`+6vfqNj~Uqk>#HT{f)~Jg(Q#h-1VnE5xi( zyD^RJ-`jZm<~1HHE@0^RaCth4p7jy1N)}Wo6cC0Xf*=6xhI&1Q(b}rgH2-jU3Bw~N zCTC}7*7p!t6^ViJeJG{uSY2&mZf=GMfWe_-s8%Ydl*>4BbdVKa>8_LACNT*u^x-%T zJgUc!l?yn;B;O z;)Pw)`w0>aj}|(@L8sHf3R@EULrmGpg0CQb38_4+t-VC4bQP|2 z?R%ew3Vb^99=)T^Wn!mt3>bu(Na zfv}nc27&>5C;3L^O9+uWI}HetgG9`qnyJgEpR-YVWiZyrRjB2jWLIfzItM5W-x zBCSx8O?GG2H@n$1X*~GgB{TEh``-J$nI+%%F?74METys)uRDzQ`hEXX4eVYc`w<0KKQiods}0&_~P4C{z7{XGeWC2fa&M&VH!rzQJ;BI zVxn*o51+loubD9v+ye!gEK+4EU+4hP9cvPZB`n0uH30G?>O6rV1mG^=<)t((3Y@oY zeT;F*IbACvBu9_0i`Tg$eGFu`qxX6lz2mdUWKs;S&UQ`UcwSK88-n>0b60Q~zc@FK zT&^F3!~L)f;yf2!8ffKe3;sc6_L#)BSggJfX>rWN=fFi53M`+!KUV<+qA&y#5}zwmT>Kg1Dn(TmOgx zLJE>O9^A316`Ve`r?rl8j4TmMfPYeOJ-8(BU@Q{^D$8{YKlzOPsW^`A+>Ar%9$1zc zirqbd*1!t{%x+EK@XQyKuMJ}L-bgd1aQDN{5J1ZAThO8e+$;lI;s#1r_TkmS3a-9c zI)OM-FyjoMybckY0E9X}{GN>#c0K(H))6KrCG7+Zjz!;x{;zQ!(K-!0=TFHj z|2UrD=NoVPAVqttrYQ>Zqdf(0o+!&}8~<-BTvySHzXA*Z=LqCDH(x+`00000NkvXX Hu0mjfZT2lj diff --git a/mfr/extensions/zip/static/img/file_extension_html.png b/mfr/extensions/zip/static/img/file_extension_html.png deleted file mode 100644 index a78b68e37b9f47046d92c66fa9f25a947950f57a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)NkIz`wwYAjGSnC#i_wK@f#dN<4Xq(w-6}MGHY= zkt9}=Y_hZKd%I1WHXa<9-I;mseeZkUyb+G$;K1Ee>nKo)d|=(JJVzbp0rmq9XeS2^mAupW^Q&VIeDo)hisu$8^FV-DM+8s&B$k# zQn;Qtf%}i&;K!p=NHq5+#LS$?Cnpn|061e!0eZj>U2XsfOTi=tK1~CfD|mKg7cOhK z=)XO$Q^LCaFXChSTxCqFi4F}|xf%f|qH0p$h4C1Uj6~2Mlz5eE;^XHc7M7NYoWSX$ zaY`uG0kjr_KTQiJ$(@`U#=VmRkfcH3mxZw3!P$5}j*kwxWz|SnA+|8!eU%I*Q9O6B z$2Gjp|3;}QusdYn=3xzy?kG~ZuO2{K32Pz>)SG+_zIDT5(L|Y)-Lu_08>JRf%z$nN z|0(IF!D0U2~dqKn&)#`811cwcDX$wCcw z#zsJ{B0zTb!`2d56w^`glf#Wv0WWf8*Ek;Yqc^CdVy)t3{yY2u>H2kw$k#}jWtWbi z0o-|4#Ps|(4DT?oTxr0d{xG@?H<0~A8-fd9)hlV4`EpFB7sM4CYp<|GpO9!hFfYg! to_`BKxIHh#5Us=b|52v6JTLwVFaZ1{{No>;vrYg2002ovPDHLkV1gf(K;r-a diff --git a/mfr/extensions/zip/static/img/file_extension_ifo.png b/mfr/extensions/zip/static/img/file_extension_ifo.png deleted file mode 100644 index 541c14efc014fd88c34873291ad4362b914dcc01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 691 zcmV;k0!;mhP);nd*n<^3NH3nW(n>BKL@yo`#giuy1bgrYZ^c8X1*wP?DOOC8 zw2^B4NljKuwP|){eY4rdZ1mt;c6auh_rCYNH*cA3+lVB_^Gd3aURRq&7+qj2`~GTo zQyF)Cg?{MZ-o9>Vj8z5`pp*?sXl8a{V{tHfcj0=^@yY~Z%~4tsqYuZxxk1U`kVz$R z@JJl@N0Rt{^APqIRX+xkj7a)D1Uj#!6ny>~7=jZ4E0ZdEGsb~p783(4=(>$#{^2nn z1@-Aj?#4S(4Pkh0;S&zNbz3tUPQOCv)MIREY0~6Js}xWIDZver&s|O;<&^o|+YH)w zwW6)F)oH1cR;jZd0s;!F7JiXj+p-exi~ZMwWUai$aV=Bl%9 zyFBH*Eoy9K4IJ*ENL2#AUW{RM#>9=MUl83K#H|F*23MgJ}~6*G&Z?;Z2@ta~0^pQ8>IKgw(kXydLVnx*CBKyBqOl zXeZ9bn-L5Mq!Ur+v?`71fe8;kvBR-;*qt}?zW2TFy_q4cHLg7R@Iy+KRc!Z+_L2y~q18Ku+)&50j&;pX zN}atpm4lXyjqxykh4>=}SpK{=7|kv|ynA-fneH5xKxu_20*Y?{&(W5|@V6A9xDS}V zy@1lyBfQ>L!0aM1Nuh@zCIL1inn+Nb(yUvWpvi?00^zUkI6gWAL8DXd+&hm^c@yWf z2_g2@UTmpV_W~ZNbxfbpNR0Tm=A|XTD8~PVP%akBOxT3+CQ;dpYq~=+t5V#F^ z6k1&OaN-`2Wezwv?Nso3@H&&QqguA}i;cICrn2?N3aD3s5M;Au6E(g#607|=%ng*- z7My{l>pHT!!gk%_EWVrI?fY*ydJMR^G;VL+$N>HGWWOscgkie0{YMr`s|k?nY?mbp_?8Hx6Yw1Vpqe kKJ@<{lH-<)@mqia00gDvwpb81V*mgE07*qoM6N<$f`Y38~z)RPDQiJl6@)>9RF5Ct!SoTSi8o6WAnpTvH0vRPTkVT zRC8m6sb$JdV65RIVsFkQ6(cGMJ7tG|qccoMYU3Bsb)kU6$4`$gPvc=SfURJ2l(ZPY zVgQTj1U2*=?8Vm^!r~;MyZ;2&kCE0ABEk?-a{0uidl7#wt@!CF29KS?;E<~4(^1KP z0R&Z8hO1ve|Cu>B*-No$d-XonUtTkrk0 zwMT64ih4i^P1JmCrE*X$zeY`_o4O0^Y&?eh;Wi{UM7KSdFbVe#WC^H_ZbqshcsB|+ z*aq#%K>z;2X;Mfz1MDP2KcY5(as@9|-aZ+Q!Q&)_wkH`SGyd_hp+rPkmectEwZ(Ct djqpc+0RSUF$%DYA6PN%1002ovPDHLkV1i-cBcK2P diff --git a/mfr/extensions/zip/static/img/file_extension_jar.png b/mfr/extensions/zip/static/img/file_extension_jar.png deleted file mode 100644 index f77a21c38f5b447045fb337ee2701435a9eeaa71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 649 zcmV;40(Sk0P)K@>gnd2iXo4V%qJ zF{?!&5w%-zy1^-qkA_@AzAwmF7BDQ z;iBPGh_H9d8V*>LKP`2Y(zkQP8C9x=j?WW1ADkR7 z;iF)X@kW3u4c)@US~Gy~6p29r10jKL7C1Kf0i6#|Un=Rvhz~|xnXCa=$S8t}Vt&U^ zI)YSutg>kB%L5k$mPZ9Ly#tQ%g=PjOg^amaRYNx6m_>4Q7=<&xP#BDZHq+>I4Zx=U zR-u$Pj*<#;V^c6|zfrDqqp~muVl5qKM-BjR65=T6Ps(V!vj{40fVS4L^=y)r9Af6u z=N-Tx2@Kdw;(4r7I)9PsM4*D1W)R3pmsp>l0LPwWNwSHWw%czF&~`=6TrOi{g9hWwtLu$y`AeIM`h j`2S~>>%O?nwg3YF;||a>0mqZ900000NkvXXu0mjfn+79N diff --git a/mfr/extensions/zip/static/img/file_extension_jpeg.png b/mfr/extensions/zip/static/img/file_extension_jpeg.png deleted file mode 100644 index a69dff9948f223eae48c0250e8836577374a77f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 678 zcmV;X0$KfuP)fV;Vh^FtX3 zV`SR8_a?&Yb2?Up@0HqfcZa2HVA+_0O_w;~lH};nK}^nn#;Mycaioxjlya)A0-Z;Y z;7-2GhA|^=9O{zRrFG!+$pR(`;RS^I4Gal%1&W5G2udOcBw1Wq#~;K{H*E%2@vOLq z6TN771V@B|9$~@^5GSH6|5)id;=TPyWOGCx#!ENg8sTs|2z_cRxu;E~A_5eJ$ zhW@b}2DU16SZl8URvLCz$28xkC9Pj8>Lx30EE`~@=)c{uiGm#y7E;;nmiDyus%2_>Zb3E<=0B4rrtkfyjQUCw| M07*qoM6N<$f*AEd?EnA( diff --git a/mfr/extensions/zip/static/img/file_extension_jpg.png b/mfr/extensions/zip/static/img/file_extension_jpg.png deleted file mode 100644 index 6ec08d7d4938998fe8db84e78b2f1846326a35d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 670 zcmV;P0%84$P)!m#p;L#TaF@l3q3YMk6Js3Qa#hRGV zQH*o9Uz#}@UtD9RsRe40I#Z+aJIl8xKTaLdDXz{GlJD&y`FfMR+-9A6jU!7>5`z2t|j6j4)vZ8kaArS3X}s$w{H?BvGy=Q7T+TJv>4nso4Z>5hd7W{R>}5P~j9R zHG^^uSS*g9hJR+D;j*kaK{mnhSU{B7egUQ5zfh{I_}^BZW#o~#VH2BS2xzhqt|7+- z9XK@|RWZ)W$7yJ8K9 zv5>?cg*1v_qOq|!X(SgDJrnUyurL-%&;)2CkRYI#*xQg`EUvf~6B2=hA8N06+FNLg zw=?5=Gq>k1T;a>k?#_E}zW2@dW;|mIs@3W*tyE-S;LM|8lE-;G?`N%6>u*oN>(~Up zv{uor+jm`}?#Zn1UN~UWmwpuNV<$I3Ri-mbSeKvKEib$GP+1KH#v_d`% zXoQ);OirIUhtbg+D3{APH88-s+&RL4_bP)BLWqANQTgqyZH!zV!G%l1)~DHT47vgY z1i1NzC~<8|Sxr?TcbBO|e))fi&3v^cg$5d+>8P0*EN?+cg|F z?feV?^?c*Y{?2tiASQLw95}B{adziqqci1XLOe_V5&qwP)4B%#{1spT6*k)wUW9;% P00000NkvXXu0mjf^@|_e diff --git a/mfr/extensions/zip/static/img/file_extension_log.png b/mfr/extensions/zip/static/img/file_extension_log.png deleted file mode 100644 index ae294cfaa0ce6ea136f97ac0787046a4185d46b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)4=UnGsEUI0AcR7(O`)g+sXbJUkVaeTU!~DR6n}E4f~_PV2%;WD(1XX~Rs2D! z2l3=VPgZwlX8mTCE$*fTXLpv_;eGFW@9iuLf&fP_C$XfrI<^ z;^DLBczpW;E;jsuLg_MV*3S$?1je!?A>mjCToZ7KHf1uH%mC*C24e{PB}|U=V@r4E zq2Y4%QG$R`Hwnuy@o~>MKI|UX5+2kl`0aVvxIT-%6EnzBwg-C7F z=vrv#En%loI6Z?knG81PHle#S2ir0s$W~hhYH&^jwu8pgV>+~A?;SL2V=?gIN)5Yq zY!5?D5(p`fBHd&8yDC*UzK7v*9iGp1q$$gSnFJ3S0+LWx!aw1z%E??V{Qm)C8se zdCXoa#uS{Ko&}e|${|WRNGS+R4z)7lsjMf|}7#m+*5 z+}+NMZ{}|AZqJkWmSuO|eDB-ueQ%aYDWT%c@MKCzQHR{}R!F)S*vZ1j!TLguYOP?Q zil4PM(;LB9Ng)vmAvCxu<~;IwVrBW$NKdeDm3#tRNc>z|hiMhl-1qUK^ErP1*~GWm zF=R5?ZXkhx#0tqIl4vvvtCWCqz+f;erCTwecs8vi!*~75%B|&-WnaC9`;3)GzYNn;x51|pdu7j2F@p*9- z!RW&Zv|&<9FAvvsG5z&BTAH4K8HUE)9%EjC0+)v(ecRWC?cD=JB9Y1pSl)Hdiz5Dh z1_PtXA^}aNxv>HBKYr1eBO1plwxAR^4jvFmO?5Tm?`Cv9M(dIBIaGNb9BtxVEs)L1 zWtKn77L9Z)IS()9(OF`JHWjV{0fQur>hXUe8472iK#;z^+Softwd1beF%(SW^;_U5 m$$m_a8r(lFsP^bafB^tiBFdlsz&YRm0000!ln{b$v_4OttNqRU+JJuy zf$xr=%92#f1zC}`bW{9kxwR*mn44`jM#ujZ2y&Gu(Rlj&EtC?eB7==~xOx2~W}Yo# z|vM%!%d3Xng|#pSH1(eF0P;(jHO*Wf4)H`$y*oUfep0F)40@_uqsB8DpG8 z+B6Yp4MAW85|+B?QrISvR@6mpe+89$?@_z+8v71ZxaDgbI$(j=7&szuQlLYsBS&`P z%%LhSpV)<=OMBDe`pa)=9bCbKbOdd@IO-l{tK>LIF<_Lr#C`O1eVl| z;P!pR$M3)KaN#S?KU&J<6gt{M6t}>pMLdE6t&G+teUHZ*i%=wyXxpofjLsHa7$Hgw z63RzZylytE_u)c z^C?NJ#ySmubu@xL^1yE4fq#(o9HLSI2n00000NkvXXu0mjf^PVE| diff --git a/mfr/extensions/zip/static/img/file_extension_m4p.png b/mfr/extensions/zip/static/img/file_extension_m4p.png deleted file mode 100644 index a7d89042a3efb2cfbbcbd44855af677833e98c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)RCwBqQ!!|hK@|S({y+H>EhKGe zaj~UT1h){H3RWyA;^v~Fb#V|J6x4Pohyf8g6a^6n3*zFU4lYjOP$7y{T3QeaE>%Qu zs$g(wO>%dB@BSnvHc}7nzkB!IeeZqWyI(oypstmEz}PIf|L0I@9k&nnH%wQL4gHsw zZ=K!`D_}}NNdTwV#yaj57Cx`{y_lMRj5|lpw&I3$I8>}b@#!KED9Pr}U>t6o8o|v+ z@8RZ-;m|KL@n&jX5oDqPpzHO)F%wb&qI8H9r>tW8N;Ls1-|_m~FplO2&tUr1v%dg< znz2YH0?x2)tr>&eL%mRwD^M3-qA=J^ZaC3S!2=jXp+-XMn7=Sr8qYs`#mW2t!jXaa zoQbw-AOOxF>G@NSnni{DH>w7!mvT_W5;CMC?(+xtb^xHG#!F$KvB|Yu9BT`5GvnAb z`;HZgR@TRFsh~;OLV2hcye;LoIr^7S$F(auBxLW(I=J5sPj?utU}ySIeybb=jp zKGB}Li|C;(jfer-HPEdZ>_}35PRX%$bre+x|FA4Cf4p3PCP3BJI#r-xSXzoIZ8G!P zm4ZM0GCA4|%-vr`S5h<1qE&<@1#w6P2?|+wu!5xvdF1An>#bGj-I?&Kv7Oqe<*_+r z(*fi`X3`qRpR8i2Ct~XqeagRX$r~{45Ag=T#?R8jw-|@T_Cv?<&7ai8f8a3pS^WPf f^WG=f{1#vUVb##Ji%}+D00000NkvXXu0mjf07olT diff --git a/mfr/extensions/zip/static/img/file_extension_m4v.png b/mfr/extensions/zip/static/img/file_extension_m4v.png deleted file mode 100644 index cf0f2cfed9e0a0014a1c34bd0a78d279e21a05b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)1i?cTAzoo4+9-zzUZVsAwJ?RG4x-rDh=qj+1}hO1 z3`pYL?(CfJ&Hiw^SomOe=jXleeeat$qTlah=k?3KbYdEY=4H#*0*(+rKHYsVR-9zM zia#9OI(is6fDpnu@JNiYd+(ROjz-Pdr_1fm@xc@-N9$^h+Y5_O(jfreW8ehWrY6yP zwt%0Vd7O#c(`e2L0-4SMWX2GNG6kNGp&E}G0{YiHuV8>kqx8BKNzGMa3d{VX(6oDi-yXBQ$Ur9h^hvHuaS_6LLSUk zr@r{z{bT2=y)FXZCk;$V#DQxx6yRZvZXj^!AN4R2hB(o=XFJuQ4jr!7$*=rgEC62} z+qy8oxkvYH_px}R!y%nXn^9Pz!alIvzW^}Z-s`0gANQN=0p-RT2q8)tMdn|uIe?rt l)4YNIw-t)}!jr!O3;-4i;8MVr(6#^o002ovPDHLkV1h(wExiB$ diff --git a/mfr/extensions/zip/static/img/file_extension_mcd.png b/mfr/extensions/zip/static/img/file_extension_mcd.png deleted file mode 100644 index 403ecad8befa46cc034c7020eb59e1d734af02a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 699 zcmV;s0!00ZP)+^M3aAKu--l1TPwzjhb-liPF+Xr}CA}t4g`Sjncy}1w5MYey z4!-B%P&R`Hw{v*&=nl>}ZibkM4FpuLJJ~I97-E?~x}JVAPO<_A_phGDg+b$l z5d9{>jw>v$GbsXLnvHkNBy~R0TRO1q*cEI&atW#QCPmuYpg8HYP$CAMU#oONx(1#I1dT5 z`vh|6DM_97g6gV{tLF0$1vCj!Gf>jnC8?bqDO^6f9~;_}5n%AigsyEO@MvTKbyqXD zY!f%Khp~P0Mtu2R#_U`PsrBu;&SXXuqU9XW-f#s$`s%|*yl?2jVDilWxJ<44@F6zKl7gmQO3Xgi{yVXLSfYktLS|{=U h*H6NIREs|X3;^NC5MVDxx>o=I002ovPDHLkV1il0JHG$` diff --git a/mfr/extensions/zip/static/img/file_extension_mdb.png b/mfr/extensions/zip/static/img/file_extension_mdb.png deleted file mode 100644 index a74b16d60b0ab0f62615db23c8e1c3c5b271c648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)RCwBqQ%h)5K@>gnd7o6RL7P;& z5-Wm`g%n$hQ5pp4LR^$CY`YT_RFo`S34TDOc3De7go?Te2rdLy;=fpEKv&xx=*9c-EEQ(3LQ)wL)@H$S%gnI4_?o2ibZo z4odq$#mDbog;vUDn*tkGntYMne+iZ|GcPNp^P3A}$wOiQI$2dB%wL}ZcOf*Z>qBk7MtNBR0M^8({9@E#xi?H2@?eCrKpLyXA0{5*`{y42s_B%dIwRwV#vu5EtJWrl|4y_@!F{Qvq! fb*pCcM}PqUF=o`fmvckE00000NkvXXu0mjfo=F^- diff --git a/mfr/extensions/zip/static/img/file_extension_mid.png b/mfr/extensions/zip/static/img/file_extension_mid.png deleted file mode 100644 index 07887a064bccf145a215c945033ccf062b5ffbcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 637 zcmV-@0)qXCP)f<4A-6%Ir9k`vEP4tk;`r}M@P{A#sYbK@;Ij^XhmO;vp3 z=56cfIGGRGQz)g(`)8+fK1q^ByWL*KF?f~@=lM zI82gibPo?Pci|!`l?s-Y7IEqF73RA&rGRslegKbB7>!1_zOaD#`D>_Ft5{!qV0>Qe z?3#K&Yn)2p6M;iT91Moo-rmAVeERSacb4n6Mq@Y=1c4+K60YYOTc^`Ov-uvYR7ge` zg;v4IF60CO~X{cu_nkg@PBWh^3&1B8xU)D_ZfO zr4(uti_#X`idN0;jDL5{c5QR;!|crb`Tza*{>(BdCD=vdD=ZO(#0IN67@%MQS38@$ z6X~9D=PN|?Qdb)+@+oXRT?k1&2|IRtb}44$NAICsoJWdxF|0w`WJDZq3UL7hXdb7w|FLJ%GSRu(aSsuc&)i4(Z+ zY-kgJt*I`cKo3wdSD|qQnyL^9fp|*;Sl?@~Gf&ah9JPb9|4JY;r3Fn954rC&i8TF{j^|v0b!|;{R=# f@@DMC9{~mcL4)HvwSIez00000NkvXXu0mjf=iDWf diff --git a/mfr/extensions/zip/static/img/file_extension_mp2.png b/mfr/extensions/zip/static/img/file_extension_mp2.png deleted file mode 100644 index 704a347e04508b477164bc434e3f630d9f4cf310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 656 zcmV;B0&o3^P)1RCwBqQ$1)DK@|RGX7~0kS@8k%OZg}B z{{ntl0v{fkAfsj15^l-KT8oTKA3wa^oL)G6dwF(YtTjYXuxb4V5ANN9l8OQfHo{ng zgNMe@Y+lEk%ZoUYCJiw&C0@^5YqSw~5`(Bxg$e?Pw~jQ0A$!J#)f9JzPhmnW9t|#@ z2?;X7IGL9SZ8ZV{^COj_>IF2Bd|&&CO+DMtH+=&A=Z;}(Z!bq1?#MvE7!4Up2qlmj zgMsZkG0?XIL%VjPXU_rWHTB{?>7~)CbXfuuaCDN}=`lY#iO%)%`4bEc?)MtyOBNeV z1YExgI16un_vI6AEXDmwhpjyLkuO#S#y4LJKVR8z^o?ER+d)wairpw<#({nxnN@d q^2h*k>Zg4j|G&Nw?mch*3NQdpXXL*ypc@SU0000f<4A-6%Ir9k`vEP4tk;`r}M@P{A#sYbK@;Ij^XhmO;vp3 z=56cfIGGRGQz)g(`)8+fK1q^ByWL*KF?f~@=lM zI82gibPo?Pci|!`l?s-Y7IEqF73RA&rGRslegKbB7>!1_zOaD#`D>_Ft5{!qV0>Qe z?3#K&Yn)2p6M;iT91Moo-rmAVeERSacb4n6Mq@Y=1c4+K60YYOTc^`Ov-uvYR7ge` zg;v4IF60CfAX5Q)+aYgz5%=xe znepD)eVbXcMeZ^zbLXCO&pk7by!Vheb8qFFwQdCH?EeoB0!V#bt4)sfa*Q>_M!+-I zryzVp5s>%J@#0){BR%=RF4aFjo|-StP23~1z>DV%7_EERwzar6a|QKhi}?O@8qGYN zdx9ktBqo;G=1xiZ2#nb$ASSRc+$BfYFReM7|rEs@V)uN5*+u%w`q z1n*bZacbfO#_y&WyVJnC;R`I-%?hSRK>TZ22TC-W3|_l`31`PD$d$s6%^hs*?qTTo zv9KJQQrOh5z*#0R@ZAyWH&5gIXa$z#Q^^E!SyG2V1UWM+22$0ViI3YYs1h6ORH(xsf-r*2 z8NJ5Zn@zm>^ao9mD>uY1D<4E4k}}&Fp-@muxAAhF!HS@?={-%U8!!SP_bwQClt;bQ z*ud&mhK#RK$Cii!@478x0^YY+x+<4~v*~Xeu1*s`{rFHx?&%!~Or!(jGkYBsEBC4~-sd4}wRj_y^jf2c_V_Rw$^5iYTRspr@8XL~=1uV$|A# zf{oQSkW!P)?u_s4nz%77IIzo`?|tu^Z{ExZtu?x@yxeqM9pN}QbnP!7g;>wt9f;O) zf4C<9T%{wI5`9nv3c+;0Oe;+oyf3$sZ?i||9xl(sF9a7ct7;`j;r{F*3`3HDAOQ{6 zRY;!g#nj_@i}ZL8 z&Kw2y*c*72%6dG{a?k8BhyQW9SkGU6GeYl3noX}G5hW(@pQ2M zuRxj3%GMHJZ}nlf(Y&vTc&ZMoZJ|U7W%$$d>K59rrI7u$jn=Ug-mVlqykOHpy52!e zpu*NHzo+p#?{Q#%7=zO}v^0ltZYt;D2K9(}*l`QgUBfc`Yid%r2~>0;6kjRRUz799 zYv_S@3e*EDWO?!0#Hk&7z}U>~aca+LA4Oeiakidx7Ez#S#4fC{W!p2fqav06-x1XD-1ZS^xk507*qoM6N<$ Eg3IkIYXATM diff --git a/mfr/extensions/zip/static/img/file_extension_mpg.png b/mfr/extensions/zip/static/img/file_extension_mpg.png deleted file mode 100644 index d01440fe284a5bf3fb79bf9472578d58bafe448c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)RCwBqQ{78cK@|VZ+1jDlrAWN-7IWr zw+|n}duKXl?!C6FD|BF(nKNg8=Xbt@)*7AH@0YaFDMjbCL`d=N)rG#z@m)u@wz<&f zuAbds03ie_jaaAX?0MhQOGCqVCI*k4ssy%ULqAY>IyMa{CAniI5GaMt?lwHiO=9Zu zN%Sqf9N0HBEC^&E29V3%l!lYAX<6Z(w2`2l^@i2&GDdn2VB5~7{{7cR?p85i3CK_r z+#e#$;aT)a(A_5%ndTJQZ{!WF?!)cyW)@CV1CWD&Lf}|mpE(M*_ygl}Uy*Y^Vfw>7 zTDGUrvZD#MB+x*c@K!Nksa%yqHgCe&j$LN4^{DHi@VSU5AHSeu&(<(UD*+Ty zb!>?TGal}_bGVeBKxRV&dRsF%xFwA%hxTIZ<~;lrrTzy%)OWxPZonBrfLPqH$dv z&gTn8?>LsR6SYFnR0YeHQQJxcR7Opf3c}o3_?_)m=Rkzrm~=u0&-;67=78VL4AiOu z`N8`71dcy^VfsIgG~T5M-$hjb5kRo`bKIRmmx|`1)=+Xcb4$y}ep#=>32dcv3jZ%< f`ZvpmzXA*Z@oeVUjAU7h00000NkvXXu0mjfj)gKi diff --git a/mfr/extensions/zip/static/img/file_extension_msi.png b/mfr/extensions/zip/static/img/file_extension_msi.png deleted file mode 100644 index 3f53d37854b034acd10d941f95f6fbd5ac124be2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 697 zcmV;q0!ICbP)n?VLL^GWH0%kNfVq_k8zz-}!mM7=!kqJ72Xn5o0v|IfTs3_n(WFw|tL> z!!N$P@7Q4!2?RX^D59Wwl9|n9Yu&+-`)>!5y_LL9i4My1F#R|MDJ6685tLGh#Sb9$ zXabq57qQ=UdoVa6h@_`XAj^i<8cr~XK!_%-Iw0|zm6@(-0bP2!Wx_Eb`56k&Hs_Ua@ym1#>t_`E6u7>4xtqnmGDpDW-zXDAmNEv`6Z{O%M#2Yqa`EmlCEnAVKJpPjRD6#|O z3sQentq)TeMVzQ8qa{$kex|;>`EZCEq}(H>w9$n1N7mYGD+6R4)a$KJuvsjK&IT{u#8fN4O z$geug)<;pIJ2SCwv7v2rGOjsjXn9H1+EUgnE!ZzfZvR7o{B!T%PqO_kO0xnq9ePY8 zzXT;9zuBB9s!Dw1JJsvU*sy%zzBAVzw#+1uHRfjf3A$Vq20UyXYDF!r!0ymc-aTbW zaSruOFFDq5k43rJn3h$OCeYGBO2Hhri;^t(RDGJ*hc|5Nc!>ALakgLXplVeKhA~bu zX^=L18iANl@OB_f`_Y4psj_yv2bWe$dF%(RyXvIV3D9F$ubQV@@JB&kcm$u##>%=Y zTx-n7`y-65I1vHCyfbC!-EsUkE9nVGrDftT6D1aed^k0Q47)<(?z?n(3mJ~-L`@gb zF^#zDz~OX}7xK=oAmxEu(+D~3tp5CfWZ^R0v9Bb)Mfq~_HJMV0XZ|+2!?D>2CcEHq z*qP@QwC_F7aNARsxiisCg`B}Q#6Ty0hf03PlOEBT3VNghzm)i_p`I~0Ji6w=&{klg zf~Oo?;W)uWL@J2Rra+LF>O%hjnlif#c?-RN(J7D{23;u zcA)>;2t@%OoAZ2hEUsZR9G3$lyEg=b&F@LH_EMbTqi-lSk)MW0?ZL@Qcb>a_fl5_X zFh83*})MC7~9RPalH0RW}i V0xOx&W&r>I002ovPDHLkV1kX*Y)t?F diff --git a/mfr/extensions/zip/static/img/file_extension_ogg.png b/mfr/extensions/zip/static/img/file_extension_ogg.png deleted file mode 100644 index 874915f710eb05de81e89f7210542e4ad95b47f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)`(BneXsi%7!Tgzh6M z?tU!#8F(TJrMFERZ?D9m^AEu42zc};!aWbM_4N@BjCG__JdLI;fn2$t^5y z?*SV7fb27<^_QS(I;7=KU>iSyy>SdptcwG8?@3TZib%BZ;L92sGz|&67uxI$+LG5X zbn-WDw1jY$^74l5?#aNaPXXLP!LX1sWMq&6R~Vj8*^u};?yt}R(z;6h*6&k%<&_RZ zV-7S`_8tn#N^{@q@Yp)M1_gU_Dk`oWBAL Y09`2TD3C;CI{*Lx07*qoM6N<$f~mtf0ssI2 diff --git a/mfr/extensions/zip/static/img/file_extension_pdf.png b/mfr/extensions/zip/static/img/file_extension_pdf.png deleted file mode 100644 index ef52e6a4d8c007d2e730b5fe68c2c081e3315364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|@P)|7~{y-Exc@RNS(4(HLfoc{ke5TQ`5A$jrAgVBx3sYoDvn6cyxXnpIpUP|@rQZ^rsqLb%! zR_pnBy$GcZ-d~;5rBwEQB%oq0n;xum8p2M5J5weD?KJ`42dMED} z#^y=UeMYzqNZW=?Bp{?jZsr1E-){};%y7}-LZL(z{ zj7A4gxg4sWS3vxI>(B_aZyYt-^)Ug1`lf(VF#KS36|Lnm6uSb8hM7{kE<%?B3V$dT zAS1vQ?6EP>f&K8`Er5&wnO2In0JSZMn1hCKz!@kDQb@?*Ap|RBBq#Pla4RL-k|bH6 z-ot@86o;cM8^j&3rY7M(e+j>^h|HtA@SZ+{uC7BH2d`ft3PHp|G#N;?*_VWU;uz$> zc38W2qIT#gn)e=d0ya*2hgjQyb>uMY>2vUAE+bedaD{?0yRQF)fAdZlE(V=mM_{-v z5=?Ggy8-%8giNJ7Va4Eif9Zmmj-TcL338j$vH9nvg1gqK?+E+=UKHQFJ&4WA^-nO_ r)Q7LpZ6u-*p0fCVRG7Q`OMn3YukhRVY_OIH00000NkvXXu0mjf3jigk diff --git a/mfr/extensions/zip/static/img/file_extension_png.png b/mfr/extensions/zip/static/img/file_extension_png.png deleted file mode 100644 index 812e3c012b9ffbc4b8d11527145d0382a035932b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP)*qt}?zW2TFy_q4cHLg7R@Iy+KRc!Z+_L2y~q18Ku+)&50j&;pX zN}atpm4lXyjqxykh4>=}SpK{=7|kv|ynA-fneH5xKxu_20*Y?{&(W5|@V6A9xDS}V zy@1lyBfQ>L!0aM1Nuh@zCIL1inn+Nb(yUvWpvi?00^zUkI6gWAL8DXd+&hm^c@yWf z2_g2@UTmpV_W~ZNbxfbpNR0Tm=A|XTD8~PVP%akBOxT3+CQ;dpYq~=+t5V#F^ z6k1&OaN-`2Wezwv?Nso3@H&&QqguA}i;cICrn2?N3aD3s5M;Au6E(g#607|=%ng*- z7My{l>pHT!!gk%_EWVrI?fY*ydJMR^G;VL+$N>HGWWOscgkie0{YMr`s|k?nY?mbp_?8Hx6Yw1Vpqe kKJ@<{lH-<)@mqia00gDvwpb81V*mgE07*qoM6N<$f`Y3eK@`WoZ)RuC+~ts< zg`%etwGgopazzx>LJJWU#X^(9|3Fj(5l*lO1O&m}G$M$dU?B(r3v@dh_eQB> zjjbIycb=mK-PSU}V7Xi0-88qKOh4?*rm1y+^PM(Ed+`N?kR!bYhfbWqhnG(=b^j4s z@$Z=??jeOlnU%~RC^2AwSr0j4u;ZAF@M{3nFI>a2D$g`!LvZ>^77+I^d9w}4n+1s^ zCNzFLK8~%mefZkgjFq^Lsgq~1gp#zqpXZ20h3q z1}VjG%GBinEEb5MO2ffqbqBT_yTgDAdhLZ_T^_)67l)ncvK|5|+fc1v5C5yJyUb7O zP^bZui631lqq{hpNqJwhHWU^rn!p2D90!Z2#3!%w4&7(F{DzZtqz-YPCoduuY2cH5 z3dc{kf)+XBv+qLO<|hcFMFRBvD2gw{NZr_Y@*M^I?AupMZ@!HE> z?*fK*M45<#<8x{})aTWD-_r8y#}mNy&Rf{=rKo#%+#>5&e~Fyk%x(9~yE*r1Y}73Q zPg-#zDo09FM64pMaUcl1j{NhCclyFoTV2D@g>zHOz|&S(8(=R%z(GM6WD;oTl7i#^ zN00QQ&a_^z)J_iz{*t>+6EygGqX0%paOcBG&U&`3}U zHRn&k?)}Et<_5643oz*W!6B%wE?sn|wL(IiPR zfMsW?_nG+zus?qxotyQvNCy~s^bo2NWBt|)T$1hwz%Nkzg5GY}fOX6@uog}+r7!|j zE8Z@C`%p-rqY!kg2KuoBefDzhWY!iy2dmyLe#J@TJ_sunY){^V<>U>#d&@a!_#}R~ zGVPNncJV8wAZ3ipKskb|#`t(?(w7sQyy$Qrh&6;xTJQqtCgQd%$8md%e5+<-(fnkC z)zQ99fF0mXeR1XdztdQ>sOg`dWgv*?IPZJ#|LZ%)ZOi7500RIDjNS1Gh;iNk0000< KMNUMnLSTZdsUvFu diff --git a/mfr/extensions/zip/static/img/file_extension_psd.png b/mfr/extensions/zip/static/img/file_extension_psd.png deleted file mode 100644 index d3f6ec562b774d60b3536be5e38d640ad38c21ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmV;i0#5yjP)XqucEXMD79^U&NV zuC*P7`ADTx?JZkj0T{CzbeNlpg>G*}i6jl zQz+|#1Q!9`^S&W$TffN8pPg;R{8>pmPoKUQ08A{w0J^jwgkyun+nshimw$!hnN8?< zSwPprJ`9ci#LDFKsWc!4q@bZ{Y-z_8)KJ|%UBNe>#?YBwhn_RL(R3njyET~s3jh-F zm<`UXO&}fzk1)l8*I|l2J^^Rm}FEp|2kwD#VNl8z)TX|x@9y^;s32j`#zY-KLG{+ XA4~%b)|^RR00000NkvXXu0mjfP2M!` diff --git a/mfr/extensions/zip/static/img/file_extension_pst.png b/mfr/extensions/zip/static/img/file_extension_pst.png deleted file mode 100644 index 5da647e5d01b0161fb2a8fb17a3175c7995eb286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 624 zcmV-$0+0QPP)mZ<mvQ}WzMm!kn1|Q%Y>BKXJe}k*K5vW)A_^6 z?XgjsP*5m1Lm0(B)$;FNrhYwcCZ2!zHCRlndu+6`W#aeZETq&Sgit#;j)jis2-X(j zcrm_(W^;64Jq|%610@8Mp>{GJR6%ML1p?btDo8#K&w)p8X3-?a`u|KD6_nM-sWQ+) zyJ?iHX*#LU$ZKj2JCBErZP=e_#oEMEgu+jV)QOcU;Cfh>bW{t1clApkNYz2+3nFbD zY6v2RnGXtBAYin4j&ScJY8pH5yos~j71ZXw<5m%wz%egW^1tn69Is44>XjrxBefP> z`x15C?@`;@3n%;8m+VtOuQw(?E9pOdp%?Ojdtq@9zm$<9gY$`s^UlU zQP0zwQ^dwoO-h}6n%pt|L?8s&`tGmh~$I#H?)yhzV^#Voq#!fO%)(_vKAD0~UQ z*?%Xs`SaT=YJUF_m3xl!m3G0000< KMNUMnLSTaHrXfB6 diff --git a/mfr/extensions/zip/static/img/file_extension_ptb.png b/mfr/extensions/zip/static/img/file_extension_ptb.png deleted file mode 100644 index 8250def1cf11eabacb57b712f7e1d5aae70047cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)u6xco2H@DBeBAiiaLN^dM9Od(cA>Jg6u&L1+qM zz^2wF+s*EdZ)a_qZF=zS&di&6Z@&57n>VDj#`otFn>z4wS_g=WHa+nN5{>a2)k4>z zBbzc4-aIySFI0^CzVJK<4A4&F!)UeQJ}cc?zutR91YjIHsI5K(5ib#iNAT}qeDW^V z-aWvn+gm95H|MIA6=IONJpi%KHh{F!P{|CG6*ZX{FhE2C^(`Ph^AyG77q8V8N{jsf zfe$5;+$<^$tzDd5L)j6qKlI~;;QV&n{38?WJZ9Jt;toZU8p{3P7>_d(WBBxIuDms~BeNg74)ui-7)~AK z1b&0Ev(e^02H|3>ZnT}3mzc~ppDww26*P~+8U$_EAZ5xhIwXmv))6#6A$@r{=8y?H zx5GXfCGSD~f@b yxcOc382XRxS+uEjDzTo!|4WniRYT>k00RJEBFiL$$4BM>0000vZYzBliC->mZ9W5?*tug>`%?;TbT&rmYa`tz#`r^@Yp@59^3 zLy`~d9e^W&61d7U1>_{STzL1Pw=ptyXZGTmqn!ts7Ta=`Vd~j5bfjDPaMog9{~kPe z^aSrOpT*$4#t=rv6iJ3!1UfvKVVy%18$`xHo0wss7!Aww6#+{>@c7Umwp1!dwpGXP z7Zk{e4V%G{uI?-{DiT$mq~Ggxl*_&7t4=@@xPM?b7Ut&<76=dsn8^3s`IBpmoY+*x z!^MwCSe|n(H?>d#w|G7bCHGaw!_N9E*Rk>H4P1Kq9LKkA#*11FFK1?8gQcoSAWO>< zVtP70Ne9>|63tRXK!Jm7zj zb|u((cQTL}dQoC0BCXqS5tn%z@C5?<>*w^B*|+`Pul!{qbg7B#tT|kJ;@e9}P)b!e k@4^3%Z_JyM$sYj*013<96hNqh-2eap07*qoM6N<$g8VEk8~^|S diff --git a/mfr/extensions/zip/static/img/file_extension_py.png b/mfr/extensions/zip/static/img/file_extension_py.png deleted file mode 100644 index 0fc745b68221ca9a9567379c928c4f8ec9b3aa15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1282 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a5n0T@z%2~Ij105p zNH8!kMrMXYltlRYSS9D@>LsS+C#C9DVstT4fPE4;bsH1+JHo@{EISEfi{E8 zw==W>t3(ll+GC>+vK+}V5TAlYfnK%aveAbJn;nNwB&=u>^m`0o1M@#TT*Wd%Pj*?#?d=+$slhK|lo&hng`HwlXa zg%f9dxO|S|u)wcpuU_u*n6%{1V~b@oXU_ck^5x4TkL;x+B`u9?Z2l;m-E=BCf45}^ zOH0Fh-U9|cD{RuWAE`UqoYgshtFkw#O?j zHCn9EW#b#n>v}Tjb0epVj%v>2Ba^rK{@ZByB6Pzg_H}kYr0dsg`LR~1L-E!&m(M}R zguhfh5Sft1wf(*RgUIMd7o!x)cr8i}h+1sCE*?Gm^p?Hb)838Q^vyq5bRF zEWYn*kC9kmsn*9UB;>kdle~rH6~z_F1(#S|URGLMJ*Lg1+u`T^`j?65jz4-2U-yeY zj1oMaIw|{`<@IR|Zzg7H=&f!1-zmZJcT-6Ey_?O?y$#RtpL;c<{JGmcsJ`yDmz%EYdy`8?Ugsru$5t z@U%%&?ZVyrgIr=8n>b_c*;`a{{C+iO&mP~hjV`ACht}`!-*H2isnF@>y7v2W|BBu| zI_ll+a^&P5nHt5Z;&&Rmf?gXWeYSp5GUaxJ<1^D&C;r~duGXoptNVAYm3w~8;SEVO zH8soSmn~c7$Lcs?U&huISF0QYMS^ckzH&F~a@mcAW$E4jD)%{V-n`jdGUBS8`z+ts zgL65SOu4hj%WB$G&zYwbUZ{9p@qOf?TA6sX)hqMi#l!F2-QDfe1J<8>P<>X7`{yR% z=g*#n`CR@p;k5FqtCtSer#@nKDl@RO+sQx36y~H`)GY6{w`~boFyt I=akR{05AFw$^ZZW diff --git a/mfr/extensions/zip/static/img/file_extension_qbb.png b/mfr/extensions/zip/static/img/file_extension_qbb.png deleted file mode 100644 index 5e4d56b8637056ca51d15e642058d8742ba89b32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)o9K^%C$3J1O)2bv zysX(1yj)+ud^lzo-#vb_gd0`jq-1k8$IItyh$EwNx(V`(@yTm=y1tIL4;Zs6Cuc4# zel|ifQxZhMo?M=Dq-lh-k)k2D&bnqUV6-X+R%W+xx;c9N@>0B7BM5e#MG_mtl{-m< zfE-Q?AH~JH1{dZHhK7!-xv5$UYMEStNI+54?jZOQ>8+3N(L8e&qfJs^AT<0(23qW0 zCSX;rC689?JAUqbgOfb;uXE?eN`-n0&KD9O+75JAWW4dPAQWJ1%q@dt-%$|+>mkZo zTL{GB)3boc;l|(fS=uZC?pEB;6q|{NR<8UAhbZa zm?b>9xs2Q&Dh40|P(hlH4=wz|fwx8IUq`BGMKO9CGRFyyggHe|(th1l2S!if#Jye~ zIn{@~{XGejLMY|2?i_EK6Cv&I>&NESJ~kFI(|L{U^Ph=gRPCzE$ZFq9Ah5sq^`~tb y=ZdwiU!~-v^|cm+aYUX6@c*MFxJ`XH5MTfSlI{K6e#Qp?0000fAX7{1kU?Idr zLmpTVN`a72K%vGTfCV2hp`fxhYNZLCCPo^5fCY5gQ9ct1(L{_fQem{PqA&!6w-0f5 z_ImHUVR@Se36q_jnVoyiJ#*$RF*Cj_R(9E?T{0~-4lg3#e-A%Icd-|OBfk*v(Cm^- za#@joJX+VelQm=i$NH6x7jIWa9$}_6Ns~Z>(*t~3egYGrAaEHlI<Qa_Sc7nCR1LY)(?aftGhwh?!(>2eP zHPGgPM`U$G0yZ{yATJ}@>pS1EwYDWjHzNne#X~v~ZcYe}6^IX(VU2^O6jriomVpQC z_cT!``J7}I!0ddG!X&+g<^0(IJ0Usjn0CwIGDxG1x zR33F-`oA)X9GV1^_TBy3y0Qz|{Z%002ovPDHLkV1kYf|04hZ diff --git a/mfr/extensions/zip/static/img/file_extension_qxd.png b/mfr/extensions/zip/static/img/file_extension_qxd.png deleted file mode 100644 index 577f6efd0d2bcdc689d57dd7d06bb10645b28a8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmV;*0yX`KP) zwJO9&iidcpO%8hKp%hvWQ!o-Gc(7FvK@h}?=+T=O4HQun6N9LiUg}Mh8t@RU^-xU} zN)<)0+E$vpzjfZG2}z^i!oD}V`^~pA-^?=3IgZ~7EZUCkckO=-#@P4Vsb9g`x`tKU zk3-If2NGhFRpBl~tR3!<<>1r8hb<$SH`#|{tH&CNl`0!xTLzvyeGFNWYyP09Fw{Sc z2NO9=oa4A`?MseiN{mR7O#~teZa~u%D6-;)D{i-J`oo0e5-tN*4o%~#6g{ere^hBF z;rdB60?RR>DhvuyN;0Qui)mVA?C9K%;oA&D*BQDxIzd?-Sr-ALaOozQu3|Qkm0{Xt z>(tLuTp(ba?{~MB{5B zuZzI6DzI4vqj7TXPGNqri2U?Lv}v1gx-SQrv>7j?Nta3!L0tpep#x?J=Q2fcX)=nz z@C6Kn&*SFH1p2y3c*!7~(V7AiDHxE|>gMF^HJpv#M`UZiSf}=9@OkMiLcti}R+|W< zwKjue8&rkrvcne=V!EUB<2iiVW^D6CFuz=zGTtcl|pXj4CNm{ zVc`xbZ(+&!29N3$xW80^8iu;gqkEBkmxf!-WX}z85(y6C_18SIGim60o4~bHK}5t% zcs&|4?#H9j81nB=iZ>uJi3oMHZ)_)96}W~BsszSw{%pFqa?tI6E}j8xbGh*;(wz=X ww^9{>uOEpQ$k=YO{rLa!ll!CvRqE^r%wl(|bytmn9lPEaw_Psar&Aj<$W|`-CV8?ELhwCOm=YI-g3%EPDHn@5f ztSZ0ceA?Uzhm@SL(8qN>IJ5+I=Hr)^=lv6RkUMcS8dt4^lg{I}rvQbE*QAcTF_ztd zbGb=)`4M!Vat5aQCm0182m zQy4wuAzJLP24&ktQ(VL7p-v3#%g9m$^4kWk=4WyK{#zXB&Qvvr2l=m*Z4}P*V%YSZ zUzLjJ+PVcD?VE@WaPnX~o>2`}EXU_tTLa7SuyK7;Xn0b1iv8vRyqkR=>M~@v9q%t0 zpi=0FJbL&5Jw3bY=BXCPgC6P{$KZu&%zs^ys+nR5eSLdF;J3vxj+0&Bz-kAHL?hx0 zix!417G;{tmW#{7+t8It;@*o-xRRekBBr3l;HaNO3dt$AWzW&&avv8>K@EuMl);+DxNNZ~lXz|H#v3__ZL1S<7egs<(L(qEtY4Gkh3Q@J z+^QDU|B+&Gi4RrscV;Y2=Oq4LevsdsIQ$V{06e9}Fkm|zC;$Ke07*qoM6N<$f?pLj A2><{9 diff --git a/mfr/extensions/zip/static/img/file_extension_rar.png b/mfr/extensions/zip/static/img/file_extension_rar.png deleted file mode 100644 index 6a94dd89cdd37df9279645ff4b827529a1e39ec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmVeR^Ij#Bx8B*6_DVgy(E2S6nxrY=leNQ}`R;MRo1MK`)|W2h^LZg2qP^3rab?YRx0?;%)_nV4bafq2j|Eo zcelDwTPBy)3FeMP_2u*hGn6=e{@hU-Z9`y4)n-VaQmUwfFZRK_z8Q>c?15LEl7w%7A8y@J~JP3x5H2N$ui zOJ`zg5(_Qi@l5IgfiTAFxe>2IZ8+dRv$R)%{3@iDkdg>I7u`c~EK-3C?TbA-XswiP z1~uy%u&K0uHavozvXP8#L)!JvcHmr3D?WcIV{WX7Fc0)Z#0KuYNkcy!VT~(zWrQiX zvAz!%t$3ao1*WeVH8BW9`#L7)Un7JvPIN^Ae3J&$9f}1H4#BXo3CL0-C`u?4BwFC1 ztGn^@Ap%|_aN(Kx7rz0jgIcD(8I6G#vAyNMR&IbZ_#*_z?XMus@b{Mh6A~BRu3_45 z$N7_CeEeO(jJ1adwh1EwoWUOj84J+Ss5aa_tBygG%75PBYxsuz2<OI>mq7jA(jyr=_=$$HuEa=&n2)U%AFL8Td2;B9ne;~nY zLLM?w@^R-1ggT?u!BC)W3yP53Bza`$T8xw5N*8(V)5W1B2qlr9ukWPYJ2EW1dFF?Kt)d$e-2fP_)Cc=saU~71%p-(9@2|8 zBBcj^4i<_vB-wq=d)sWcO$7&rH#<8s@B8N4WkLwB-h02`x(QJHPh;#So}5V5AH`BF zQv?x&AEpKK-c7LDo5QI%$*>V1A8bYblvqnzRVXexCW|6%@K-!jdJ53zT)tXHt_Zo zbfPEZRe@#uJE%~#9X4>bryc!=wl#<_GVvLg#)|0fT=|aI@s}$#Oyttox;~EEFK2N5 z*(WUgsjA(?BPLEC*^bv&4&v%q$>Y0v2UUVCo2BI*O;aO7iycC9Jfw0%4~p2>998s! z<`2-8<;R6%9f(IwIG&QQ34zRc-xJoLKuOckaPrzaobTdi^bJqJwnCof zt5q;)!$0OLI5qqpwVFV=>fq+UZtU8Uz|+DUZjH|%Z0cy*5Lp8Ojns%kQ_NH{x}=Ip zl5S2$apulPeEGJBWFiEvd38YuyuJXF5VY7~C9zyn)Y36HT2xiv}Z8yQPcoWTFvJoS}i@K=BV0Lu-`Je}?pX8-^I07*qo IM6N<$g6DQJk^lez diff --git a/mfr/extensions/zip/static/img/file_extension_rmvb.png b/mfr/extensions/zip/static/img/file_extension_rmvb.png deleted file mode 100644 index 9c533a050507f9d0143e7bb15baed35900b10c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmV;F0&D$=P)OcHVog`;?V3 zMKGwv1=))r^al?e45GaRDYO;^2^9*_#X>qoLUbq!qB<-U5k}BL5FrcIK`2@DP=}yH zSX2i~qmpRZ_WkQO^Y%UVsYwI#X6E;AzVG+VW1i=M9lHAiuA2ny|2Y_2!h_*W!O^S5 z3iYMrbJ?A6$jBKBb6nShLsQ1ie)`(_d@z3>g<}Wn>xx=Al{_&y1H`zzP1z_L7sZpa2gM($o_MOw&M<>96vv5OL}Kg_jq0qd$|%A$Pm5s(@tF zs0qZi7#c(jhVWNOp>uN^SoR*x>)1wnLN^elp!m{3a8NufTT*giJ02d-eL%K*3q&Rb zO)$F1Lw&Qu9#m}?&2bH5`!hJPw=2@j@*f-d;yYY^^cDyD(h+fZfWK0;Q9R#|k!)He zAHFn;r>_>2yU`FhwXYk`s0S6x@%gUofkkk;I+{br!uJY}Tq&XF1aKhGN>PkkJRMAP&t?dbn-Fl7pU&?52 zX@KBkS;|4 diff --git a/mfr/extensions/zip/static/img/file_extension_rtf.png b/mfr/extensions/zip/static/img/file_extension_rtf.png deleted file mode 100644 index a7efed7e318a76bf34b37cdeeae0caf4fd51ecc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)gne*Neo7GtYb z2^I;6S{F^lg-Fpw7j+?ZVciR^v2SzYDCrC2VOu*$an(5duOml-i4B;`lAxP-2AbX(;ryt96&XpH7U(afYfoeQg z5-bd?1qwxa>0h5`pZBTMPVByvL-)ljI=ee{{==IT2)IFjGF5z^IbIjAXZ$5TFXoXx zlE(htG#w=Z=@YG*YoHaBDHl=x4Mk)+KZ~mWu9 z%Ye=OC)5!HEN+JZJQg;amx0o?3~V|UCNeym6by!Ad(v+K?Ww2@Hbgh0Fto(v#KP#ilPn}e=6=U{2u> zL(F;X@A$plyCtiqIPmtpnR)Nq?|qL^#uyyF^Zt7nMWu-G-GSA!kYs<%R|xo4tRkjCy%XM!;!P z#>Bo#EQ}vUiB1^+l>mgwii@jrP2{x&VQ$lMcH(79leH=~Bj~h+fIV1=BspqPbdoGh z6okIuKqLKuXDMRbX56Clr|BlBO-4Gi9#--Y_)7K&P-z&nvh@&=4i z!KZL`PJ9AbO!N2t+eo`Nx&pXz{p9kh=f$B)WSeWh#=-LDHIY>u+Z9o!f7Fjg``U%2x34i zw9UPJyUy;u`y&?42BXiFdGzur7qK8QkW zoE2#oovX@)Yc=o8SUcWmjhue#`)zCMK&I5Qck3%-=o0DC90=By79j%ZGFmW|DO{bJ z#*6wxe15r(iRR9zo=s4R0pTySzwcswt2lnD3fp9s>rRKe0hG#!Idj1Sqc^bmd=;l_)A;#g8{6MsK@`nBd+Bmfq8Hu) z$iYP5Y!Q@vS&Sp2WR2DPWDAH==%&&w9RO+=m!41*MZPS`^nPU#Cu=ikJX(Muz+9<+ z0MG%aen3w%4u3K@r=R(kWqprCE5+(>SGwby?{M^eTWkuAPayrO>l8`4jW5% ziD_>W9RPENMmb55#4+M1@tMQeX?tEF;IVrToL_enWs8BP=9I$FqtZPYnOnx|`B|qe z11Uu76#O&`)*+|1WDha&2#58M>eh_%$*d-J%* zGc!$1tP2O`-Z|%d=k?7QK}2{vasCJOdZ{1?aApx81aHeam_IzoovPVSEn9s8b}l}8 z2o*pGi_ylBRKTDQ!QlP(>l4*-Wp$zb^ZsZ8HdYhkO5WpT(0KWst{i}Y7v%>S> zOig0HT*0LqMa=M4Y*MES8lvE&1(QiA(vFW2o14SzW&>9~ZDF#!hSv5Tb{{{%-qU9Y zJl|Z)a0N;XxCPPiarNjsXYt@R*5Q5q0*m>Wda(+bh~sl23-Y~T|34Lw%Z6Uhh+zjZ zod(YaWHzgvwZ7kH+-L>X>2-3?(lTPZUWb**Ai21RP@$k@wUk}qaE1eQ3%(D_4rwW9 zwcyrk`s{9PqStB~FxwT*G(FOSs=!CcakLmKl@Q7o3`yw}5~Vx(tn8#o{1*pZ9;A2- z-!4p}x%2>`T;4e4&S_ccm0jV^-U2J6-$j@iM>qod@DZ)~TL6>BQw0%;z)5Em2^uH< z4sb;DZewSsNM^{5W%y-U1FD3sUf~BOp&kTByvXMi{(l{^-?lpZ7GMD3&He)P$$vip O0000$eY%Jo!KM+B!8*!m1#lIl_2RG79e}`@a72_s|P~4PS7w%NBwPF=pv~5f>nS9Lk z-j`&Wn2itK%$@h{IrqME-Vih6_1vig?sR6tFvQqkfJmk>`&SP4Gtsi(bh!Em1zdXg z07^h)B)bP>B@DYDN&fM6bFT8N{Aj6hba%9XY*wac*duxW8S`ggDc7O;{i^mu`E)NTP?Vr2Pf{qjm6-2GAAa$K_J_NJxQB?@f?Mv%ge7$ zWS$Hf=n+T)`@a1k0ia$7{?vd*1Kr;T$eufoO>*&)9At`TO9}Cy6sw~oJ8$7hvCm@7Ujk;Y6eor1Kkr3sD*>yp3Byt=pYVOX>o-M-! zR`g~7V|piY1Z*agb{(RF5-5nJfNC{_ABaenz>z9;QFS<~qWEnaRI9-V(2*QR3a}rH zbYP-Ln4NeWjkPye?D|-2)j;A(vHA-n+K_;Z76_Un`a~{-tpIK^f$z7M@ySc!L%+&L zQC|s+dafNvr@cduxe!?Y^)}A$?M4X;+_CR3xdM#n5sF(w_+uCJ!sx{@5`R6D2RG`- z?e1XbbPkl9wB3<7qIu&ks6asrF}-;*5%a)PDg3-}5%FwRER;0I*ut7e{}NQ0*WPVy zm3Z_gIgW<_)X$H;^@k9~yu>s3|8Xd|&l>y{U;t8*@q1GCM*08%002ovPDHLkV1ku8 BGS2`2 diff --git a/mfr/extensions/zip/static/img/file_extension_ss.png b/mfr/extensions/zip/static/img/file_extension_ss.png deleted file mode 100644 index 7d056d0241657e889c59a79bcc5ad4f19e671dbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)MbWR%RepEaRt|2Uc( zykWE5Uw9rriTF|sRaG8NR=TPNg8JRrGEzvEmPo(BY$ArrO4V6qoSUUr&`1fUbG%yY z$K;oODWaeo_6H`iHW-&E0ArA4}YZSf?MpT4(?O002ovPDHLkV1nEaHUaIZeoiN4WXc}<2-EgTYG|Pn6ZbR*MfmTcM*&y?Lc#i|8PhHS= z2VeEe1^`_XDp7S!hOqzbYaDJ>aimiRiX{XNMo?r7pUFIti0FL2U#2-yH5%9vqT=)? zJ3=g=sKD|AgdfHb7Fk;bpt3!fzYieABY?e&_W+`f7MZ5O{9Qn9?lLMLlZaAIbLAbz zo;)31Q*Q(TK(p>Vdq#FZvnlWLSFXdz{X}#lPYs$F6LHaCgn<;1DA($e2{aW}HjB#2 z8xoLa5AVZ_pictJyb%T@j@);<0~n@!2gUefcu$>mJRW->`# z7`7A7k-xu$(5)N5<}aXBl+?}DRVQ~8Kw;>{;^3PFWEbWUym$%j=roO0qZQM8Xw=bN zj*kFn4gg`PB&2ocE~3v~0@KHB!4>{sl(j1=LPkd=#Sqtast^dVvmgdla*^kn=){ zr)e(0=fiNm15gIm^i*n=i-P`I|31AU`YL6 T9B!5+00000NkvXXu0mjfqB|{d diff --git a/mfr/extensions/zip/static/img/file_extension_tgz.png b/mfr/extensions/zip/static/img/file_extension_tgz.png deleted file mode 100644 index 5253aab3d0be7f7c92145ac59756010b4f0cf645..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+RiSP)oF{&|2gB_O}zW_s15WEYv5FSUP5NtwS`L%V@rPgSRWMu$S&b zzC49L`@5*WuHo9<8Jx*xE3;GM)h+@d@f}j0N0x#$2A4|{_)vdA@fI}6+I7JAgEG>*vFNZ7#_PR@&5kPn7>!V^qm4SnG7o~#{@R1z-l8sFjVuU z(hVW``eh5}hH^Nc%Sow>qfQ-Bf@{e|LnKV}sZkY@-#a^4UtbgZOhydJ7K93z&k+Gj z=j9A=u~5NkvnpkIDORRsDn2Pt-Az>RMS+P_Xsk9CksqzVL?v-!*%*he5@_#;nSl}@ zP`(h2n|zM(B>0?hNeP`jpmYi?6mLCk1B$nwQH;o`ENivkx_S`4#;}Q?T2Gz5&<3z? zqU=(te0)+jEP)Zc+50OFz7eTbJQd_ieCA4Vgs(rMH76mOTXfffYHeo@Qm6JLkx|0fHCW>NU z9B^Sc-T&|W|8VDVr^s_R_nyah&iTG`nbsP{&Q45av{G%wufG@tG-K(v_bzspTvRJd zA5?s-?=$RH-yPaP)-J9R)A(_{056V}4v#G_c7lZ|1-_M+GpB_MO7~^bGDi zx`NHEccVZ8K8UQG(sXu0F1QdSpYl8cWZ(u=ZDM@57xiv()Dcfiml0XLriPGC6#y3! zKfYuT>xkjR_)~bwL(jk&YW4MU4S*fVb&B0ANx*MUA(zWTlCO35PP>xeWvY3QY17>h zR?rMv3b;Oe7%y%P;e79269kvCNLY|WUlzp#Zj2p4d|xweKU+n2tPz8gui!{-ClgG= zm%avo)WXEMLs(kNBlUS51MxlRibjYR7k974(cTiq^VE0DrgdqGDgYuI4_{{ph@n8c zPcLO{-tmLYws_=L3Lg1)wZ-6{N6j~mM9HNMojY2w$(;|hH0YQToMZD-C{)BX% zBo=xx*_|2Ryft^b=Lrt%GBfXc-+b?zH^LZ$VzGBc>nLyMsX=SIBZRPDZEWmyXEPLI zUHh}i1A`Z7Q!|)SECfayifLLJEG<^H6$;_>_;}@9@(g!_O+{;%d3+DjaVTBbbSM>} ze_#ZqhqrL;`Xa*c{BWTFK_tT|0(+u13Vsm4aXePRq$(sDQY9sR)`3$e?^AsA?9`O+ zQPP*oBD)=CKX*f_o8@X7n7bCx`20;`O_^50Hs3+hfdY2q$Xmpq52mV zX0h+UVeCJ6gv(-2T0LL|YK@XYT)kXI>$rWV2fml%8|mpi)}Fu`CZs{TA!GzeNGUx! zNTp)3X=214B**(|33KJUxN_+Yc5FXH=4!^p*PJ4t5=ed!WE+9%he!DIHcOeAT3kby^6?08OFFIInj zCEVsj0SONb_kjn`3y>it&tFcal4qYyAd|^)yC*$}OOQk$6oPE<=b`xcwp>POW(Zri zbYpp?N*x#=o9iI3W_*gEUe`}wy_i4Rc#S6h@mn;Xxg+iSK>R8h-?(C%M4P*=G`P)8USFD>dX?05nnH$;znwr4{Yx8z!qaXX?0iOP{yi$y+QhrLWh5ZF zK_@e7?SoPPh5-~yl3cY~!HcmG1iqf2g;i;Kshf8t@?=-kY9X&>ovMq=D?EJk7{!H> zQ`9#&EON)Q02YoZG!`G;jAx9TUE6kb@hGv0n!P5{@O>Y}@)rJ7D%d+ZLp3xUZ}NH? zq$qMWV`6FrB87a8i(bU$F>5}T<5;sNjrW`d@ECxn_=m&OpXl%D!okURj&umV zknE}A%aPcN0Bj=wH3QTem4}`ut@!fw49~jTIVP8v`W*_iGc&XyLN-qbYy1xl>rmw0 z#H|YCnndKxHxoQZay9F?~KG)|2+bE75BT|goPP8`PYK`pKG2y|0}=%ZWN^xWDAPZ00000NkvXX Hu0mjf_l5jt diff --git a/mfr/extensions/zip/static/img/file_extension_torrent.png b/mfr/extensions/zip/static/img/file_extension_torrent.png deleted file mode 100644 index 09de7ab1d425834775a91b9dbc87c5dc88ab9608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)F%L13)k6k^ z5VIi)8UzoEupkJ6;2}T2Z15mnM4}S#B<7^xHGx$WkG{^ih`D$Q=)sHNDWa_4;}!!O z5@x5nt?Jp?-C-BBhN64AtG@oKzHZ^11Ka%5>i5iKlg?R;G9d)HYQ4GMI##T4t}cE! zd3mu32B6ShqNC4P11Tjwec7C{%~#Lg-uSUt?CU|a)a+yR#S*j%(Faa(b72klpIyb~ zavS?*w}Iw53J~3=2pDG&$KxJ=PiER#mcqayPyzO~4er$*;Q@3*JzkfTwjc-VOic$m z2r+h`f-{rnAe4fl|D9jIacZ`X`Ikp=e)R~BS8K4&Ugn$R`W7nhx#}zu2O6b@Q0v$niRhUa^n5vxc^V7*$l2Z8|aomuMIY5da413g9>PK$Xr5WC|81Lczy1|q07n16N(M*4ssI2007*qoM6N<$ Ef@u60)c^nh diff --git a/mfr/extensions/zip/static/img/file_extension_ttf.png b/mfr/extensions/zip/static/img/file_extension_ttf.png deleted file mode 100644 index 51a0bbb6ef4f0c42b7dba32e6a11a3a2e5e0041d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 668 zcmV;N0%QG&P)(j)fDJ zp#w%xnGM(?qMUZE!^G@o6SQa}7`SU&6hcV57A;y7g@o-|)JBN{VZsJ$Q5a<;fyks# zFynjocFuk8P4m)47w)_Fo%@~de&^>3Yb_2=Emi_++KmAXOH;&aG6bX)tDmm*?@BD} z$3ydnoySh~!@wI(P)P zUzD(ReE=g*^P`wt5JWPXA`k=*==Nsq!&9;@p(aD8KnODY{(&b$owzuYKj+;kdxSX4 zzA|BA0<9IaQbeMmXjQa^A<(zG1G%XcblfOme=f`M52X}10s?x{gQ5^z?1ohtyjoht zU~e~y`?{U|Z=zEnL^<%J;%uWv`wN9uOq|$(TXSo8T>c7QMM*t%4J1uR<# zMR7}v9n0d%vkJzK?h=w2T)9|BYZiwAEj z80ga2)8@Hzhx@mY5GRpkjvUUo|Cg7W=-U}jki7}_=Bo~eZ3#%4rbG?*`I!G^F#SHD zibQ1_KBS%fe#to876QqgMkUH-GC1?l(pI>5siLmUZ_Y*C%IA!8_|#kYwLbf1xm+~X z)?1`8&PE$MGrs;#`B_r0_tL%{|37|`-x6>B2rvM|^V(+LdXy#r0000Pt=9xYUH=-`1gflx>Up7t4Z+sTF_iPBIweQ6O| zD`bNJAxH2p$%KHS6a@TqVG`%&mQb%urS8N;spfE-?Awdzv6rzc_n8xV+Se@(d$p@w}s} z3&p$7k;!BuC2i@#pI<*;zx(`gAbC9TGi+6xVgrh0!6yXdULa8)%iZ|@@q_I?iSSo| Z0RV*7nBh-qdNbA{a5qj`Yi=c;k5PBDnf;|f}kN1>tD4< z(pGJg?9BS!B-vzb4?ftPH#6V&z4zwL2+#9y?&_1gRyxN1zs4(qKPeWcuASK8uUD}) z|CoGg;D}ii3>Ot9&$af9$b4=w-ak5XXL>w&zA=DZQ!Bd~52xlJB}oWTAuA8Z&vxVP z zKnkww5t#)nlQOs*PorGc*uE={lb2tavXZI8$iA6R1v220UCKaO5}GC~R-))iX{6I1 zk=VZjd%AW)Qf5k-!wH@Nn@Lwn6lomp-;3UZ?LH`zTgKRAngV$^babC7v1YR7lu20; zWcYMvfc*7y5vv7Yr0)Pc%Z96ht*)2ADU;XR6*n6fZahPFVFg=b&A5572hkP@_kl3o zYBWCsu1(th6d#DZ$+7V*|HqKowr!3WoY+Xf)e50d2x}_}@8AAHM{6^FuenHcM1AlN z+EYrcFM%Z$oxI~%n4Vie_wF{_9yBnbgh<#nxb=r<+9KeD9k|rv>-Te}EA6dK_`Xy^6REXCBe1Ht#x@#(((3YT?scYz zubNlACmd&~`W6jMR6d?Fz9t~d3lt(jehmL_1>$Ad`76KxE}H`uzX`h_00000NkvXX Hu0mjf1y3%I diff --git a/mfr/extensions/zip/static/img/file_extension_vob.png b/mfr/extensions/zip/static/img/file_extension_vob.png deleted file mode 100644 index 5a5dde849b24710e7a20c035aae12b283c19f920..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmV-;0*C#HP)3%J4~r%=+bkkKZGwLC!}ALVw#O01 zs@P%h;gMl5pGd%%&d|$Ju>ad)?$Y?&&6gL4kH_CtBhjK30JD!@K*|P%A@sqaJ-Bmw z2Fq6ps0NFpljC!UNmQai_*6+L1<#Xpg3uU*F75%rPmCQIK%0IxdR5MI(lMEw(x+-d zNeHj;cm!N7enu|ei`^3o*mdSUp0@9$md(+o4!DO6swO1?rA$hP(vLFWX>{z&(MX1# zu&z_n2-P4&jny)U#H6M61On=eaO7L3D(9sL*vjKztN_PO$zX^J>QDd)9@4)Q) zUszcW&_<%3eel)AmrmtzYiS*8eu&gL;GsTM0t{VWiT0n0TrO2OlU#A_gKxJSYJVAs}MV z^$`(vr+cjG+1czP2McPpruM63cR?9<* zPY?B`Nk)?Zsvv6<7cZ@R?W{~p-+Xia=&AYvI_p+322&5`p*@mmE*Be%k%I+XzdwhM z7e;V4HlvuBCT=p?&>&@zAPO}%P}K(D1_qplA_c6KaAP2kqN0=j%hF};Yt2qYL+(3Y_L79JFo;ifK#UnKU@mdRCzGHl_z)hGP**rz=@a`M80lmAPg=K6!31fgwXd;VH|D5z_14GVSvFq&(U}5$@&EC zVILpe#o0xKfe#bg))nOPia2e7hg_SF&P^c>+=92p@#qycw};St6SES*)$fpgOn-j8`0yV6^%5r8gBtKI7JThpJ{rFJJ2}qb i|Lq6YeUjjx00RKXJ>r@41|B~E0000Sj2#pg$? zvsd=bJinRU9Gh4;%kbv-f4~1VE7CN@$q6x=TI9I&!%ASW3z!@On%swiGlToPYZyU$ zq;2ECZz$d|*zZnP0CA>?zFSuTT?b@}%FE}&Gj|Gido505&1eCf&Ze0C`V$ZWDFNl! zU~&8`Hcd^UGdOEF+uejP@UP5f68y;M3qQ2q>XDL2MMXJmdBRc3l`J z$cID2#2I(iz@*L*5%lgv4v>)vj-5CMt81{u_oxbmHxCNHjcZWr0SgAml47-D4Fv%y zv^K~#>uh0_(8L3LPK^b0FRcT-7>I#=gTSXpt)?r+8ybwH4NM=Mg0?jxs6TQOLp?Fx zUOK*#MXLtJC79s#=U!ZYHiUYjv9+rLts2P6CPLd_;VfdRwls{7VqF(_qYN%TJm~Ax zon1oHNCd1yOz&Dsgq)F*%%1>ju%Qdfoc23q`z?e?ATpZ~G^>8k6Pnl#iChsHg)3*? z`E2H^A?ww^m%)ql%z_3Afeu*MR+lzDWpaek$RC(N{?HGf4y3`JSA2Q$4^$w$law7& zBJt0?1Ms^nirY)mdEp+fyQCQG|M!m{XfemL)tpQ2zFsaa?}htYviE&l=kWhyj=FDd c@mGKW0QKPC0elTeBme*a07*qoM6N<$g5Ml7lmGw# diff --git a/mfr/extensions/zip/static/img/file_extension_wmv.png b/mfr/extensions/zip/static/img/file_extension_wmv.png deleted file mode 100644 index 4017f8671291d1d0c0820ed02e8f05ac74396c95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP){g_O-})###_8;(NICz2eH0#chFU1A1~7iM7mneBkF`T8^>5EWgrxyOJjT3Af2goecvgzkgW*C2Ih z>LMx$W2`)Vjgvacy8#SUho&mQ{?5z{kb4Y#{f+I(Ayl}55>qg^&w=lWk$)J-G;~d) z;^={1uhlS{H<6yafr0ub3~Y5nC&3XFo39U+RZZv`3<3$zRTb~+%a}Dy;C2C`{}4Qv z*!eybS}}k84f3!KG{#>1Q?Mk-{k)#lzEwF&S$k(U;v9I*}rFtZlO`3-{*cka_+Ah3ZPskxkSk zxJ_)>#=sJ$2g|ZiEZ#?Y;WG+vzQY!jrER^GV0@W?S#3~#6mUI3 zXNk5WHew*cv1QbzcgF%Mto4${JWHM)f)~Mjh%UmR$oZ!cX1mX|vD$g4yKr)EAGRoA z&VJ+z76B$D6LO`Sh z>OqKzL{!8iGqb)on{B&IKp(rqoA>k0H}Aa>zVD;&a<;6E-_CkO!o3jmiLW1KFKpj% z1wNM-PCj?)m^D%;_=6t=k&jiZu9Z5g-ps>d_R`4aGu#kOD~-nsOK=<+=0j_PdbueCx?S0{F)=IFnRT{}A%JlVjYT2rVg14Vac7KRznKL5UmeS5mm zySE#Om;+xMG^qjbr&2@VzGsa?;|uTxdU2+IH*V$L;YR9!weKIzV&G_B1VGliL?{}E zu00A+g=3RhO6A|S6Qh}z#LOX9stG{7?v+~Lym$R1%0DYsANTq(MJ$#-e!aRD;h0n)L{o$YqK={Tund8^Z_5}*T lO>f8l%Xi8vvhr7e0RU3V>suov1}Xpm002ovPDHLkV1gFoDCqzI diff --git a/mfr/extensions/zip/static/img/file_extension_xls.png b/mfr/extensions/zip/static/img/file_extension_xls.png deleted file mode 100644 index a5cb228ddeabfdfd1700c892410cfba818f48343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)gn+kHk5C54qJ z7D=Nb3a?Qj_ya$UVhT+_5VR1Bh(VALEJE;8YD5rH2(~7j_$kyF2sWYw0v1WoMnu#` zUwr#^X1sHkeQ%en;K1(A{hc{;?q1=&M_BuBZ~UBEyD7Il}pW)G;2tgmP#s^lomA4?mh4`8}A&brCH|TX^&8HKbH+0Ou_B?(4(N$-DS4 zX3?}O0~jAg4x$STVd0@71EmT8R>D)zC`wI$^G7cuR%-^#jS)%VGqQL`OQ#8~N{=MK z#pPw}=-Gz)tuE}kZh)ToaI4cL2CPH4u#!l8!nRQ{BY*w=1#68)-}XAZql0YcTwRno z2*}uU4uwPf}rqeZb#c^J~WT^`QnHuoNH}K%Zd-k85>g9c4 zlc33Q7Q2c;5YbDIiDPqZ-@}t1`FrnprpuKV2Qsm%0D_1niZT515Vfg8v*nt&b8r^( z-)5n-=DbRPAdb=zv5ZP%5EIzdnIrUzOA@(OEus+FwCFg3sFgn+kHk5C54qJ z7D=Nb3a?Qj_ya$UVhT+_5VR1Bh(VALEJE;8YD5rH2(~7j_$kyF2sWYw0v1WoMnu#` zUwr#^X1sHkeQ%en;K1(A{hc{;?q1=&M_BuBZ~UBEyD7Il}pW)G;2tgmP#s^lomA4?mh4`8}A&brCH|TX^&8HKbH+0Ou_B?(4(N$-DS4 zX3?}O0~jAg4x$STVd0@71EmT8R>D)zC`wI$^G7cuR%-^#jS)%VGqQL`OQ#8~N{=MK z#pPw}=-Gz)tuE}kZh)ToaI4cL2CPH4u#!l8!nRQ{BY*w=1#68)-}XAZql0YcTwRno z2*}uU4uwPf}rqeZb#c^J~WT^`QnHuoNH}K%Zd-k85>g9c4 zlc33Q7Q2c;5YbDIiDPqZ-@}t1`FrnprpuKV2Qsm%0D_1niZT515Vfg8v*nt&b8r^( z-)5n-=DbRPAdb=zv5ZP%5EIzdnIrUzOA@(OEus+FwCFg3sFgn@e+-xCK}L2 zf?81_hzpmx)`j9mMbNl#CAd-0Ri!_`jeo&XP;li!s8~U%yLKTiw1prPY^&)a5UR!+ z^Jd2L=H;bL(?|#Ido%Z*d*|FUGr~ECXw+_tMQ2coSN%i8_OdZ%K6b+TH_&XD$t3VwhHe?Tkkaa$KK)@y)p4frw%%#Cxt3RGVKD^P5m>Tl;UvY+`gnXZ2Z*TByI{x9L6oTasVfkf z0^IK7aPJ?(EzdBX?GdqCz%vvQDif(sYkUIUeFWZ)GA4O9$YLnp0n4PL^#b)4-e7wA y{Givk`DI4lvk+p0zdW`-8q8hzC%^y*r@RycJ(AUG4-gNU-p*(#jOZMld9Wf(W+O7KVTrv@mF6uv4&5B#8Kf62Tlq3&9{pA|hHS zLWJDzzV(~8cbmJz0|(x|dGF19GvCatN|FRm=4wA(91n;N$dYf;QlXTB*7`^7{L>w1 zN@@#O`G|9E{1k7Um~)STs38x4rin55_UXg+#o6%Akqa+RqD^du7H#6uz1uKKBaSyw z8lA@Q!AZpLFXQ3e1suEh7A`t7u{aAwkckceFD^npmxneQt`T|X)fd-L+!jju_`U%Y zYS)?Ixf74C1OYw9#Z9Lq=}!P_H3BZ#*OulnJa(2WBJA2bgf~|!cyMV1I|ui`CCTxw z43tmX&`~j(Viv{f6xLqfz{ckl>>Jt7Rq<3~7iPunpy1+=00x>BSKQZ^Z=rZ#8n0Fs zP+xlPgE$tsTpg3PbOOjRjtIcWS`KW+?#gL=sox|e1Cz5EfKXCxUC>(;LeE`5j8XVn zpT}T%Qab4GthHRm+X3ny6kLNX*M0^RvniCPn%E(0!i}KX8E=PP8AxQUB9so#WClaE z8Q$@Yme#7?8F&gZ1H|kvR5OGA!f2D0X7O79-Ca;A1sllN_F?t@QBHM~K5>+DxxRFy zn^fDYXj?yvLWCf1)2k%th(eStm3FGTjlchd&)zMsA8H?vo}yCw>?qSk#1i!Z{J;F7 e-$zmY3NQc>HPk6~O~^O^0000G>XWO=|%WT`Wk2~!=+qUi9Up%&L+ijC=o&70dM^(=pGw#!+b%W0U zkg>?RUdfyQiUIK}fxscH;uorT;;69CjW0uzlCzewCoV?TA&I}p2QV%g{xRGbzyPG~?BVB}Xj-5A)D}whQI}osd zEyN%P5`sKzTUE=N>&EPG#v9;MfZvxA6{vjXnzI}d*d;njn;2>9;df%219oElEjJ)( zdjtr-eP*>SSu(pYIhU?-GKR(eHkM|lIq2?pz-JHyvSeLP5irOJMZbg!XssQYtg5AZ zbnzW08K(L>S$oS}VXh57@?G8t1UAmsYgTi#KUc=UXH8&0e8#eaHsI1nOJ8$HOb_(3 z>E4Gz(vRY`5QdyFD7JJyUqVtc&S9q=1I|H~(pp_l$?*r?tEy*@4L(WO=Z0HhVFLU- zAaX{qnq$S0k8#LR`yo<-&&Y49D^OBVhx0*G#<{gCpM8?xJ>mD;gNz^+w%{@WdHyG literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/folder-horizontal-closed.png b/mfr/extensions/zip/static/img/folder-horizontal-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..055089d050b57c95556cd59f1da7a7d633993d16 GIT binary patch literal 454 zcmV;%0XhDOP)+ zJiG<89Fz4WR(~+`EcSND1s4+?D!QLV!-O*R`VHr74$$gk@-3R7pMmxn-+b-ON1ye@ z`yUF)-|+Tb$K{?UJ`!#0`vuDD4?ZE6mkn#Z%)ypBZ{zS&FQP1{zbG@>MzrRoD^3Ot z0ajNXbo`Nwh3L?XU%xIh`2oSkdkVd>*}+KAqLf6)M2`_mw5H4}0%%)dNupo>LO1=T zVXYK>$T5L?HeAd87u3_yw%>Kmm|2QGW?g z>n}k92oMrtLcatWnYHU=W>{>+&{1Z@56YbSgZP2Q>Zf8@Qm4DhG6k*F`rT`{-n$9B we#ZlTKI#0^^^u~4ZZ;K2)am!*W*8g*0KajVSdgJiBLDyZ07*qoM6N<$f^|d91^@s6 literal 0 HcmV?d00001 diff --git a/mfr/extensions/zip/static/img/folder.png b/mfr/extensions/zip/static/img/folder.png index f1ed9abe0338be5a0401f4aee1b3bb168b4d815f..0cbd0851a345d391ab502953e377ff476754888e 100644 GIT binary patch delta 509 zcmV3&%0?S;HTn9uk93TZjRWi%{gVZv15FjfeHXmdiJNG8Tps z01!p2|L3(EHvDz3Nn%ez&f$D={tX{5z6QWs2rx9jVByc0iGQT?p6Aw2CV>+GNFV`# z0Po58@2#t|M?87k^&c%<=K-)D@M(yMMB_YQ4g%za#eu%AUIZW``Mj6GjIQ3nJAo|^ z2;yE`QYt7y?D{!`n8Gy~^tE>ZhA`0gxX6>9l=R=``u*rZpaGDhucHr1AOKOZzK}C6 zJe4!w_zyx17=K_OASs!QVeg;rdQGMtCoznuzk3W0>S}+#GVW# zol0+g84dN#3(Tz3BhlB|PWmMmKz}=mP6osQrJPLbx(!q`^-l#*#;_+kMK~cOVk`s< z4*GxuCf9N67t1c(5`lo5frulMFtZGRV_xS?;-Jd3DpX_500000NkvXXu0mjf@5S+- delta 608 zcmV-m0-ybs1o#AyBYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU! z8c9S!RCwB?Q$24JK@fejyJrW3Q3wPIn?w{yq2NPFL`xHBDJYN-qJbg>4gUbq(tw1l zgoXx`HVs0gK|-QT;Nk*gBnKlTn_z-{mhYU)-7d3t&KJ-ikAHN!y`7o&X5P$^F$RN} zz<{R8^D~P&3a=U+Cl@3nNUAcCILBZ6qp5#Ggl(U)$>(RE0b5ZTBqdg!+&If1hUgCf zP9h;7ROS;Cok;+U)||YFu<{Vb5S+p_OwK;%=K9GNWE;r7l!9BjH6ck%@%^$&9Hz^T z1MHWG)?e|(%YP)67{tUHLC5cxZjdQl=XisTA70EK%vu0;#Xf{H#7Ak1++o(NOXZ!5 zpw+P~?BR*geF&+LbDR?E_8NJiNj$*6&h^y8~=@vldihl^j1e)z|Nm*vUzQ)P|)Ats* zow%=-MEtb`ZFp5Ela`+VYX%rc>*FfEtoL3ho;N!68V(nED%~n{bBRMm3L>+7+PiD4 z12NOkA^fbmxbyhKV$wpp@eRf4OWaBwl+AOh*d5_MV*qCaeq#;a8_n0N^D~~ZLBU1~ zxl<>BURjF=F^s=9aIa;Dv9bIfwI98O6QfM#&RzC+V0j(IuuEljHs;@Ei!vnIlXu^Y um7iYmY~+PRvHvr>_inmd1OCpx1sDLU%fF)P!b7P50000>wa6MEbuIXhZn!v0Gs} z6iwDtdYO+CnciYpOqYxtW!{7#FhBGaze3A=RJs6B8^=nVIAo4--}*8IunoiQ6p;F< z3~EAfa0&%p6TWLq$fg;YVgP2cA@g@aTHgSAQgO^Nz9ta zuRv0qM0Cpu!!PkT6=^!@P^S~lz!;S)yORPHRwFt-h3{*L9?A2@ z#_|F@6{mo$AnervouqLZrsga1CFZ+F5$>OX<0AAUub~9Do{YTG6k_2;l$}1$THL3!g}I4o3^$#7D4a3H!Vw%eb{KFcKm}g5qO5rU zPZ5^-rcmuGhx#3X{WAo$9)a&@8I+;!N?Xwe!}J86KZ7GGl~a$_08Cbgn`ty&1)6W< zbp7cK)R#$pu6xi{Q=hWZY4wk6Z3R0TPsRQ5;&=5`9w;ltJ+`$z$i<3Wia}0vHw9|% z49sR{wBNE@E_&Y1uEnoc6*xUqP+Vkg!$LS=^=c_|kQWXFI diff --git a/mfr/extensions/zip/static/img/folder_horizontal_closed.png b/mfr/extensions/zip/static/img/folder_horizontal_closed.png deleted file mode 100644 index eed25bc695c92907b2f421f7b1e05db76086ff81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542 zcmV+(0^$9MP)|y%0dwF+e0up9bsl7ZSvd?*MSb<_!sgZ~0B^lP*TAxY6k&3n%bSlt z0^op`Wk z(An$v*xnwgjhH1)pF6{q+Ydk|;EL!7{4wyJ?I*XgJ%&h^OD^8H3cVKhJ^f;anSoh` z9bZR?=*dg_o_JBszh*!LdY}RC(Xrd-$FBkn2E=Yos7u5Mmb%WsgaBPsoNDIx0jH2s zPNxl}i*thJyIOC0U`9~|k&JcIzo~Trug2hLqg^q=MKCNi=gI zU}nN(6;jCAmJ#R}+!$n>q03z)HMn{W(>hb`Jioq3ZFd4dRLL!Ehq@08Q6Y?KN_3<) gGJW_?j(iyT3tJV!Z07*qoM6N<$f-$D-_5c6? diff --git a/mfr/extensions/zip/static/img/generic-file.png b/mfr/extensions/zip/static/img/generic-file.png deleted file mode 100644 index e8e1db2e36ef8a3ace0fba37416f28584649b1d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 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 literal 3121 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 q$a=%VWn+k|UtiDv&>%>!2^rk(D6aNK_^-%!; diff --git a/mfr/extensions/zip/static/jstree-theme/40px.png b/mfr/extensions/zip/static/jstree-theme/40px.png index 1959347aea041d75a58d0584ea7ec51714797983..a66b8f78e5a10b913492cdb8c24dab7f668743b3 100755 GIT binary patch literal 1627 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 Q55DbcS|^Aek^->dFJlhn7ytkO literal 1720 zcmZ|OYfMvT7zgm4p2O+ea@rnBg#)OxTPX)YQxLES+gfgxVz~&+f}$;m6s%Hi3W%nq zP@z^qrV}=TNF%FL8K5q@MN>cp#S0pVI*qHSli{|&j8i`-D~lhy5AU}p`Tz2N-e*-( zqBu&8Q*g>F3T19?Zf0i2Y&JU_j>N>onwlC4g`!j{1p>jzlP51;yvXHpJ32ZL1c{7{ z)MzyPIro%=%#1i`T0+<|5ezw}`5%1a$_msK1)F#~iYhcbb+NiiTcX~ytZ3Wj5(@tv zLT5OqLY&VTiBl*@DK5jOqAQC<V}_H8&J8*d!6F|8^P+>r!@8gG==_FR|TOFO5N ztmi!uPli+Ln$x?H-gK%V=cf&)%tK3Ubl`;)j){YK#AZm_($yDbHN+iIVb4-MA(|Tn z%Y=0Su-m75IE?%N1|!SEl|tuKXsXZNj2Z=vp;+=jlJSZD2EODW0H`sM#)b0zgDU0)5!Grr5zO1 zNgN^!L7)EBFUC+Zhm%Mr7yC91@!CieHdPd#!o7Jn^!!TMrU0vgH)|h-!|2wozJKmj z`G&1Z^{+00Fi|SEx@=o?UTI)xo@>T@7i7MZAqTYCMc0JP{oZJEdWye2L~bM45otrq zk@}$q6%b*2<$_YGZVC^6PBqU&pG6rtOM!WN;+E;i3EB*=+K0j60WC&J{7x}V=Ak(w<1X>er- zV`_bHI~Y%5hQkS?_Lf?1C-Yh;suT(z!ZdS6NOH8>FGetNtnE-ngIxI9OKM9M!nq|ao z@ByV)WU%+EiuxlBZ=#rs_ZnY%+O^bXr2P8_g2l~7Z8221w?Uyx%!zc@?f!tWxz6{`xAWPUyeq1Vbvuj7m$3Dh(PTY04bw^_A zwRr|LuoC34N#A1;?zXdaId|wW$kzq2e~Uqdrq=@A0^DlGO4UM zzCO9@&t7@ohLX-t)ftJ| z)q;&?w?;l@^4Pc`;x3vPJ8(itFdKg3;$nap8V7O~;L775>pjUjnIyS=0%4f;&$i;^ q^<`2=x-x(uk2YUU2h;2jemskO_4rHker(f Date: Thu, 12 Apr 2018 14:30:26 -0400 Subject: [PATCH 06/12] Rewrite the render.py for zip for better clarity - Update code for previous assets refactor - Improve import styles and naming for vars/funcs - Add a sanitizer to remove system files/folders - Update docstrings, comments and TODOs Note: there is a bug that the tree building algorithm only works when files in the zip file are sorted in increasing alphabetic order --- mfr/extensions/zip/render.py | 149 ++++++++++++++++------- mfr/extensions/zip/templates/viewer.mako | 28 +++-- 2 files changed, 126 insertions(+), 51 deletions(-) diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index d406ae590..9e28b6aa6 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -1,79 +1,146 @@ import os -import zipfile +from typing import List +from zipfile import ZipFile from mako.lookup import TemplateLookup -from mfr.core import extension from mfr.core.utils import sizeof_fmt +from mfr.core.extension import BaseRenderer -class ZipRenderer(extension.BaseRenderer): +class ZipRenderer(BaseRenderer): TEMPLATE = TemplateLookup( directories=[ os.path.join(os.path.dirname(__file__), 'templates') ]).get_template('viewer.mako') + @property + def file_required(self): + return True + + @property + def cache_result(self): + return False + def render(self): - zip_file = zipfile.ZipFile(self.file_path, 'r') - files = [file for file in zip_file.filelist if not file.filename.startswith('__MACOSX')] - data = self.filelist_to_tree(files) + zip_file = ZipFile(self.file_path, 'r') + + file_list = self.sanitize_file_list(zip_file.filelist) + file_tree = self.file_list_to_tree(file_list) + + return self.TEMPLATE.render(data=file_tree, base=self.assets_url) - return self.TEMPLATE.render(data=data, base=self.assets_url) + def file_list_to_tree(self, file_list: list) -> List[dict]: + """Build the file tree and return a "tree". - def filelist_to_tree(self, files): + TODO: Fix this algorithm + This algorithm only works when the ``file_list`` are in strict alphabetical order. Here is + an example file A.zip where list 1 fails while list 2 succeed. - self.icons_url = self.assets_url + '/img' + A.zip + --- A/ + --- A/aa.png + --- B/ab.png - tree_data = [{ + File list 1: [ A/, A/B/, A/A/, A/A/aa.png, A/B/ab.png, ] + + File list 2: [ A/, A/A/, A/A/aa.png, A/B/, A/B/ab.png, ] + + :param file_list: the sanitized file list + :rtype: ``List[dict]`` + :return: a "tree" in form of a list which contains one dictionary as the root node + """ + + icons_url = self.assets_url + '/img' + + # Build the root of the file tree + tree_root = [{ 'text': self.metadata.name + self.metadata.ext, - 'icon': self.icons_url + '/file_extension_zip.png', + 'icon': icons_url + '/file-ext-zip.png', 'children': [] }] - for file in files: - node_path = tree_data[0] + # Iteratively build the file tree for each file and folder.egments. + for file in file_list: + + node_path = tree_root[0] + + # Split the full path into segments, add each path segment to the tree if the segment + # doesn't already exist. The segments can be either a folder or a file. paths = [path for path in file.filename.split('/') if path] for path in paths: - if not len(node_path['children']) or node_path['children'][-1]['text'] != path: - # Add a child - new_node = {'text': path, 'children': []} - if new_node['text']: # If not a placeholder/"root" directory. - date = '%d-%02d-%02d %02d:%02d:%02d' % file.date_time[:6] - size = sizeof_fmt(int(file.file_size)) if file.file_size else '' + # Add a child to the node + if not len(node_path['children']) or node_path['children'][-1]['text'] != path: - # create new node - new_node['data'] = {'date': date, 'size': size} + new_node = {'text': path, 'children': []} - if file.filename[-1] == '/': - new_node['icon'] = self.icons_url + '/folder.png' + date = '%d-%02d-%02d %02d:%02d:%02d' % file.date_time[:6] + size = sizeof_fmt(int(file.file_size)) if file.file_size else '' + new_node['data'] = {'date': date, 'size': size} + + if file.filename[-1] == '/': + new_node['icon'] = icons_url + '/folder.png' + else: + ext = os.path.splitext(file.filename)[1].lstrip('.') + if ext: + ext = ext.lower() + if self.icon_exists_for_type(ext): + new_node['icon'] = '{}/file-ext-{}.png'.format(icons_url, ext) else: - ext = os.path.splitext(file.filename)[1].lstrip('.') - if check_icon_ext(ext): - new_node['icon'] = \ - self.icons_url + '/file_extension_{}.png'.format(ext) - else: - new_node['icon'] = self.icons_url + '/generic-file.png' + new_node['icon'] = '{}/file-ext-generic.png'.format(icons_url) - node_path['children'].append(new_node) + node_path['children'].append(new_node) node_path = new_node + # Go one level deeper else: - # "go deeper" to get children of children. node_path = node_path['children'][-1] - return tree_data + return tree_root - @property - def file_required(self): - return True + @staticmethod + def icon_exists_for_type(ext: str) -> bool: + """Check if an icon exists for the given file type. The extension string is converted to + lower case. - @property - def cache_result(self): - return True + :param ext: the file extension str + :rtype: ``bool`` + :return: ``True`` if found; ``False`` otherwise + """ + + return os.path.isfile(os.path.join( + os.path.dirname(__file__), + 'static', + 'img', + 'file-ext-{}.png'.format(ext.lower()) + )) + + @staticmethod + def sanitize_file_list(file_list: list) -> list: + """Remove macOS system and temporary files. Current implementation only removes '__MACOSX/' + and '.DS_Store'. If necessary, extend the sanitizer to exclude more file types. + + :param file_list: the list of the path for each file and folder in the zip + :rtype: ``list`` + :return: a sanitized list + """ + + sanitized_file_list = [] + + for file in file_list: + + file_path = file.filename + # Ignore macOS '__MACOSX' folder for zip file + if file_path.startswith('__MACOSX/'): + continue + + # Ignore macOS '.DS_STORE' file + if file_path == '.DS_Store' or file_path.endswith('/.DS_Store'): + continue + + sanitized_file_list.append(file) -def check_icon_ext(ext): - return os.path.isfile(os.path.join(os.path.dirname(__file__), 'static', 'img', 'icons', - 'file_extension_{}.png'.format(ext))) + return sanitized_file_list diff --git a/mfr/extensions/zip/templates/viewer.mako b/mfr/extensions/zip/templates/viewer.mako index 7f27722af..b95cf7255 100644 --- a/mfr/extensions/zip/templates/viewer.mako +++ b/mfr/extensions/zip/templates/viewer.mako @@ -13,6 +13,7 @@
    From 7821b1baadc8f7c95b5174711d1f2687e2aceb68 Mon Sep 17 00:00:00 2001 From: longze chen Date: Fri, 13 Apr 2018 11:29:10 -0400 Subject: [PATCH 07/12] Rewrite the zip tree building algorithm - Handles the case when the generated ``filelist`` is not in order. - The outer loop: iterate through each file in the list and break the full path into segments. - The inner loop: iterate through each segment, add a new node if not found in the child nodes of its parent and update the node with the file's details if the segment is the last one. - The full tree is complete at the end of only a single pass. --- mfr/extensions/zip/render.py | 190 +++++++++++++++++++++-------------- 1 file changed, 116 insertions(+), 74 deletions(-) diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index 9e28b6aa6..d258c846c 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -1,6 +1,6 @@ import os -from typing import List -from zipfile import ZipFile +from typing import List, Union +from zipfile import ZipFile, ZipInfo from mako.lookup import TemplateLookup @@ -27,82 +27,108 @@ def render(self): zip_file = ZipFile(self.file_path, 'r') - file_list = self.sanitize_file_list(zip_file.filelist) - file_tree = self.file_list_to_tree(file_list) + # ``ZipFile.filelist`` contains both files and folder. Using ``obj`` for better clarity. + obj_list = self.sanitize_obj_list(zip_file.filelist) + obj_tree = self.obj_list_to_tree(obj_list) - return self.TEMPLATE.render(data=file_tree, base=self.assets_url) + return self.TEMPLATE.render(data=obj_tree, base=self.assets_url) - def file_list_to_tree(self, file_list: list) -> List[dict]: - """Build the file tree and return a "tree". + def obj_list_to_tree(self, obj_list: list) -> List[dict]: + """Build the object tree from the object list. Each node is represented using a dictionary, + where non-leaf nodes represent folders and leaves represent files. Return a list which + contains only one element: the root node. - TODO: Fix this algorithm - This algorithm only works when the ``file_list`` are in strict alphabetical order. Here is - an example file A.zip where list 1 fails while list 2 succeed. - - A.zip - --- A/ - --- A/aa.png - --- B/ab.png - - File list 1: [ A/, A/B/, A/A/, A/A/aa.png, A/B/ab.png, ] - - File list 2: [ A/, A/A/, A/A/aa.png, A/B/, A/B/ab.png, ] - - :param file_list: the sanitized file list + :param obj_list: the object list :rtype: ``List[dict]`` - :return: a "tree" in form of a list which contains one dictionary as the root node + :return: a list which contains only one element: the root node. """ - icons_url = self.assets_url + '/img' - - # Build the root of the file tree - tree_root = [{ + # Build the root node of the tree + tree_root = { 'text': self.metadata.name + self.metadata.ext, - 'icon': icons_url + '/file-ext-zip.png', + 'icon': self.assets_url + '/img/file-ext-zip.png', 'children': [] - }] - - # Iteratively build the file tree for each file and folder.egments. - for file in file_list: - - node_path = tree_root[0] - - # Split the full path into segments, add each path segment to the tree if the segment - # doesn't already exist. The segments can be either a folder or a file. - paths = [path for path in file.filename.split('/') if path] - for path in paths: - - # Add a child to the node - if not len(node_path['children']) or node_path['children'][-1]['text'] != path: - - new_node = {'text': path, 'children': []} - - date = '%d-%02d-%02d %02d:%02d:%02d' % file.date_time[:6] - size = sizeof_fmt(int(file.file_size)) if file.file_size else '' - new_node['data'] = {'date': date, 'size': size} + } + + for obj in obj_list: + + # For each object, always start from the root of the tree + parent = tree_root + path_from_root = obj.filename + is_folder = path_from_root[-1] == '/' + path_segments = [segment for segment in path_from_root.split('/') if segment] + last_index = len(path_segments) - 1 + + # Iterate through the path segments list. Add the segment to tree if not already there + # and update the details with the current object if it is the last one along the path. + for index, segment in enumerate(path_segments): + + # Check if the segment has already been added + siblings = parent.get('children', []) + current_node = self.find_node_among_siblings(segment, siblings) + + # Found + if current_node: + if index == last_index: + # If it is the last segment, this node must be a folder and represents the + # current object. Update it with the objects' info and break. + assert is_folder + self.update_node_with_attributes(current_node, obj, is_folder=is_folder) + break + # Otherwise, jump to the next segment with the current node as the new parent + parent = current_node + continue + + # Not found + new_node = { + 'text': segment, + 'children': [], + } + if index == last_index: + # If it is the last segment, the node represents the current object. Update the + # it with the objects' info, add it to the siblings and break. + self.update_node_with_attributes(new_node, obj, is_folder=is_folder) + siblings.append(new_node) + break + + # Otherwise, append the new node to tree, jump to the next segment with the current + # node as the new parent + siblings.append(new_node) + parent = new_node + continue - if file.filename[-1] == '/': - new_node['icon'] = icons_url + '/folder.png' - else: - ext = os.path.splitext(file.filename)[1].lstrip('.') - if ext: - ext = ext.lower() - if self.icon_exists_for_type(ext): - new_node['icon'] = '{}/file-ext-{}.png'.format(icons_url, ext) - else: - new_node['icon'] = '{}/file-ext-generic.png'.format(icons_url) + return [tree_root, ] - node_path['children'].append(new_node) + def update_node_with_attributes(self, node: dict, obj: ZipInfo, is_folder: bool) -> None: + """Update details (date, size, icon, etc.) of the node with the given object. - node_path = new_node - # Go one level deeper - else: - node_path = node_path['children'][-1] + :param node: the node to update + :param obj: the object that the node represents + :param is_folder: the folder flag + """ - return tree_root + date = '%d-%02d-%02d %02d:%02d:%02d' % obj.date_time[:6] + size = sizeof_fmt(int(obj.file_size)) if obj.file_size else '' + + if is_folder: + icon_path = self.assets_url + '/img/folder.png' + else: + ext = (os.path.splitext(obj.filename)[1].lstrip('.')).lower() + if self.icon_exists(ext): + icon_path = '{}/img/file-ext-{}.png'.format(self.assets_url, ext) + else: + icon_path = '{}/img/file-ext-generic.png'.format(self.assets_url) + + node.update({ + 'icon': icon_path, + 'data': { + 'date': date, + 'size': size, + }, + }) @staticmethod - def icon_exists_for_type(ext: str) -> bool: + def icon_exists(ext: str) -> bool: """Check if an icon exists for the given file type. The extension string is converted to lower case. @@ -119,28 +145,44 @@ def icon_exists_for_type(ext: str) -> bool: )) @staticmethod - def sanitize_file_list(file_list: list) -> list: + def sanitize_obj_list(obj_list: list) -> list: """Remove macOS system and temporary files. Current implementation only removes '__MACOSX/' and '.DS_Store'. If necessary, extend the sanitizer to exclude more file types. - :param file_list: the list of the path for each file and folder in the zip + :param obj_list: a list of full paths for each file and folder in the zip :rtype: ``list`` :return: a sanitized list """ - sanitized_file_list = [] + sanitized_obj_list = [] - for file in file_list: + for obj in obj_list: - file_path = file.filename + obj_path = obj.filename # Ignore macOS '__MACOSX' folder for zip file - if file_path.startswith('__MACOSX/'): + if obj_path.startswith('__MACOSX/'): continue - # Ignore macOS '.DS_STORE' file - if file_path == '.DS_Store' or file_path.endswith('/.DS_Store'): + if obj_path == '.DS_Store' or obj_path.endswith('/.DS_Store'): continue - sanitized_file_list.append(file) + sanitized_obj_list.append(obj) + + return sanitized_obj_list + + @staticmethod + def find_node_among_siblings(segment: str, siblings: list) -> Union[dict, None]: + """Find if the folder or file represented by the path segment has already been added. + + :param segment: the path segment + :param siblings: the list containing all added sibling nodes + :rtype: ``Union[dict, None]`` + :return: the node if found or ``None`` otherwise + """ + + for sibling in siblings: + + if sibling.get('text', '') == segment: + return sibling - return sanitized_file_list + return None From be6a195265fd546a65700fba301ab673c5150bc2 Mon Sep 17 00:00:00 2001 From: longze chen Date: Fri, 13 Apr 2018 13:10:57 -0400 Subject: [PATCH 08/12] Refactor "jstreetable.js" and update the zip renderer - Remove redundant and not-working customization that modifies the "jstree-table-wrapper" style. "jstreetable.js" doesn't provide any minimum version so that MFR has to use the full one. The file has been refactored with eslint es5 plugin and better docstrings. - Minor updates for the renderer: - Enable cache which was disabled for local test - Update column width for file size - Set `is_folder` optional (`True` as default) - Use closed-folder icon - Remove unused assets --- mfr/extensions/zip/render.py | 4 +- mfr/extensions/zip/static/img/delete.png | Bin 499 -> 0 bytes .../zip/static/img/folder-delete.png | Bin 662 -> 0 bytes .../static/img/folder-horizontal-closed.png | Bin 454 -> 0 bytes mfr/extensions/zip/static/img/folder.png | Bin 534 -> 454 bytes mfr/extensions/zip/static/js/jstreetable.js | 2090 +++++++++-------- mfr/extensions/zip/templates/viewer.mako | 2 +- 7 files changed, 1051 insertions(+), 1045 deletions(-) delete mode 100644 mfr/extensions/zip/static/img/delete.png delete mode 100644 mfr/extensions/zip/static/img/folder-delete.png delete mode 100644 mfr/extensions/zip/static/img/folder-horizontal-closed.png diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index d258c846c..f37bc3851 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -21,7 +21,7 @@ def file_required(self): @property def cache_result(self): - return False + return True def render(self): @@ -99,7 +99,7 @@ def obj_list_to_tree(self, obj_list: list) -> List[dict]: return [tree_root, ] - def update_node_with_attributes(self, node: dict, obj: ZipInfo, is_folder: bool) -> None: + def update_node_with_attributes(self, node: dict, obj: ZipInfo, is_folder: bool=True) -> None: """Update details (date, size, icon, etc.) of the node with the given object. :param node: the node to update diff --git a/mfr/extensions/zip/static/img/delete.png b/mfr/extensions/zip/static/img/delete.png deleted file mode 100644 index 0d1b36d244abf7c58a200d28f14fae083d068a53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmV%dl~HOA4H`mXD&E+qqjJ@>F)=%KD(>xRTEUXe6*@ojWa!-N>9!lPVl|{Jo0t^ zt+TSddZg+VV^qC*qH5MoR?WI8-KHmJ4hPR($L-UHJFRiwRli}H>XwaG?UIqEM+BIh zIUGEDod=AN^UV`AtQ@Oo1P9Mv#{n}(%5m+Wn#?CgBRF{WIu4jMO3vdO)w*Slq7fWC zdj?9MJ=$eGv__7Dt7P4=Kvom5Zk`=ra^`UG>=`I#>hS*sTNcQ3dMhW(acqMeM*~gH z91fm6_K}6>SdVX!_xx_T&+e4#%#Hw)Glzp`&p_zzaLdW;xnpHNykbnj<=`%;UfYWD; p6qTNwdEj!O_}h5k9@CQtstv^02YlDcurL4s002ovPDHLkV1nYB@>c)= diff --git a/mfr/extensions/zip/static/img/folder-delete.png b/mfr/extensions/zip/static/img/folder-delete.png deleted file mode 100644 index abd45644820ffebacdbaed16f819a630626d5e8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662 zcmV;H0%`q;P)G>XWO=|%WT`Wk2~!=+qUi9Up%&L+ijC=o&70dM^(=pGw#!+b%W0U zkg>?RUdfyQiUIK}fxscH;uorT;;69CjW0uzlCzewCoV?TA&I}p2QV%g{xRGbzyPG~?BVB}Xj-5A)D}whQI}osd zEyN%P5`sKzTUE=N>&EPG#v9;MfZvxA6{vjXnzI}d*d;njn;2>9;df%219oElEjJ)( zdjtr-eP*>SSu(pYIhU?-GKR(eHkM|lIq2?pz-JHyvSeLP5irOJMZbg!XssQYtg5AZ zbnzW08K(L>S$oS}VXh57@?G8t1UAmsYgTi#KUc=UXH8&0e8#eaHsI1nOJ8$HOb_(3 z>E4Gz(vRY`5QdyFD7JJyUqVtc&S9q=1I|H~(pp_l$?*r?tEy*@4L(WO=Z0HhVFLU- zAaX{qnq$S0k8#LR`yo<-&&Y49D^OBVhx0*G#<{gCpM8?xJ>mD;gNz^+w%{@WdHyG diff --git a/mfr/extensions/zip/static/img/folder-horizontal-closed.png b/mfr/extensions/zip/static/img/folder-horizontal-closed.png deleted file mode 100644 index 055089d050b57c95556cd59f1da7a7d633993d16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmV;%0XhDOP)+ zJiG<89Fz4WR(~+`EcSND1s4+?D!QLV!-O*R`VHr74$$gk@-3R7pMmxn-+b-ON1ye@ z`yUF)-|+Tb$K{?UJ`!#0`vuDD4?ZE6mkn#Z%)ypBZ{zS&FQP1{zbG@>MzrRoD^3Ot z0ajNXbo`Nwh3L?XU%xIh`2oSkdkVd>*}+KAqLf6)M2`_mw5H4}0%%)dNupo>LO1=T zVXYK>$T5L?HeAd87u3_yw%>Kmm|2QGW?g z>n}k92oMrtLcatWnYHU=W>{>+&{1Z@56YbSgZP2Q>Zf8@Qm4DhG6k*F`rT`{-n$9B we#ZlTKI#0^^^u~4ZZ;K2)am!*W*8g*0KajVSdgJiBLDyZ07*qoM6N<$f^|d91^@s6 diff --git a/mfr/extensions/zip/static/img/folder.png b/mfr/extensions/zip/static/img/folder.png index 0cbd0851a345d391ab502953e377ff476754888e..055089d050b57c95556cd59f1da7a7d633993d16 100644 GIT binary patch delta 428 zcmV;d0aN~#1jYl9B!7)bL_t(|0b&?%z<7GH(?bBGbP4!P5d;AA&F@{DFI8$I020U)r6_IkMzrRoD^3Ot0ajNXbo`Nwh3L?XU%xIh`2oSkdkVd>*}+KA zqLf6)M2`_mw11||D*|X+VM(H2|3WwYrDGw7_4On}$9iAXQY5raEerz{35foO00k&H zW6E$}$D5)cW0Px8A!6yne?6em?2^(5`#}$hyjp`P~@|2{AB5khxNdg%Qt;87KRc4 z5Jjy2=d~L){B^HMVoyTO;e2xb4IeMQ2EbbgFf_nm;m??fq<{0C=hjaqffE2oAOU~? z@5%V@t*f&~JbByoA1z$x0k9tMX^4nK<2+yv0_23nfxfO@1Rx{%yqCd@uHL~rfh`XR z;$B=*Dkwti`Z!JiwadpXfjUv;j!2E+lSoJ{Mw4OBGsPX$oMuqQf2I3XlrECdV= y`hWx`*Kz9?%P!m!fq diff --git a/mfr/extensions/zip/static/js/jstreetable.js b/mfr/extensions/zip/static/js/jstreetable.js index a8d86cd4f..86559beaf 100755 --- a/mfr/extensions/zip/static/js/jstreetable.js +++ b/mfr/extensions/zip/static/js/jstreetable.js @@ -1,3 +1,12 @@ +/** + * MFR Customizations: + * + * "jstreetable.js" doesn't have a min version and the comments doesn't provide the release number. + * MFR uses 4.0.0: https://raw.githubusercontent.com/adamjimenez/jstree-table/4.0.0/jstreetable.js. + * There is no functional customization of the file except linting updates. Please refer to the + * ".eslintrc.json" in the MFR root for more information. + */ + /* * http://github.com/adamjimenez/jstree-table * @@ -5,7 +14,7 @@ * * Licensed under the MIT license: * http://www.opensource.org/licenses/mit-license.php - * + * * Works only with jstree version >= 3.0.0 * * $Revision: 3.4.2 $ @@ -16,1045 +25,1042 @@ /*global navigator, document, jQuery, define, localStorage */ (function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery', 'jstree'], factory); - } else { - // Browser globals - factory(jQuery); - } + if (typeof define === "function" && define.amd) { + // AMD. Register as an anonymous module. + define(["jquery", "jstree"], factory); + } else { + // Browser globals + factory(jQuery); + } }(function ($) { - var renderAWidth, renderATitle, getIndent, copyData, htmlstripre, findLastClosedNode, BLANKRE = /^\s*$/g, - IDREGEX = /[\\:&!^|()\[\]<>@*'+~#";,= \/${}%]/g, escapeId = function (id) { - return (id||"").replace(IDREGEX,'\\$&'); - }, NODE_DATA_ATTR = "data-jstreetable", COL_DATA_ATTR = "data-jstreetable-column", - SPECIAL_TITLE = "_DATA_", LEVELINDENT = 24, styled = false, TABLECELLID_PREFIX = "jstable_",TABLECELLID_POSTFIX = "_col", - MINCOLWIDTH = 10, - findDataCell = function (from,id) { - return from.find("div["+NODE_DATA_ATTR+'="'+ escapeId(id) +'"]'); - }, - isClickedSep = false, toResize = null, oldMouseX = 0, newMouseX = 0; - - /*jslint regexp:true */ - htmlstripre = /<\/?[^>]+>/gi; - /*jslint regexp:false */ - - getIndent = function(node,tree) { - var div, i, li, width; - - // did we already save it for this tree? - tree._tableSettings = tree._tableSettings || {}; - if (tree._tableSettings.indent > 0) { - width = tree._tableSettings.indent; - } else { - // create a new div on the DOM but not visible on the page - div = $("
    "); - i = node.prev("i"); - li = i.parent(); - // add to that div all of the classes on the tree root - div.addClass(tree.get_node("#",true).attr("class")); - - // move the li to the temporary div root - li.appendTo(div); - - // attach to the body quickly - div.appendTo($("body")); - - // get the width - width = i.width() || LEVELINDENT; - - // detach the li from the new div and destroy the new div - li.detach(); - div.remove(); - - // save it for the future - tree._tableSettings.indent = width; - } - - - return(width); - - }; - - copyData = function (fromtree,from,totree,to,recurse) { - var i, j; - to.data = $.extend(true, {}, from.data); - if (from && from.children_d && recurse) { - for(i = 0, j = from.children_d.length; i < j; i++) { - copyData(fromtree,fromtree.get_node(from.children_d[i]),totree,totree.get_node(to.children_d[i]),recurse); - } - } - }; - - findLastClosedNode = function (tree,id) { - // first get our node - var ret, node = tree.get_node(id), children = node.children; - // is it closed? - if (!children || children.length <= 0 || !node.state.opened) { - ret = id; - } else { - ret = findLastClosedNode(tree,children[children.length-1]); - } - return(ret); - }; - - renderAWidth = function(node,tree) { - var depth, width, - fullWidth = parseInt(tree.settings.table.columns[0].width,10) + parseInt(tree._tableSettings.treeWidthDiff,10); - // need to use a selector in jquery 1.4.4+ - depth = tree.get_node(node).parents.length; - width = fullWidth - depth*getIndent(node,tree); - // the following line is no longer needed, since we are doing this inside a - //a.css({"vertical-align": "top", "overflow":"hidden"}); - return(fullWidth); - }; - renderATitle = function(node,t,tree) { - var a = node.get(0).tagName.toLowerCase() === "a" ? node : node.children("a"), title, col = tree.settings.table.columns[0]; - // get the title - title = ""; - if (col.title) { - if (col.title === SPECIAL_TITLE) { - title = tree.get_text(t); - } else if (t.attr(col.title)) { - title = t.attr(col.title); - } - } - // strip out HTML - title = title.replace(htmlstripre, ''); - if (title) { - a.attr("title",title); - } - }; - - $.jstree.defaults.table = { - width: 'auto' - }; - - $.jstree.plugins.table = function(options,parent) { - var _this = this; - - this._initialize = function () { - if (!this._initialized) { - var s = this.settings.table || {}, styles, container = this.element, i, - gs = this._tableSettings = { - columns : s.columns || [], - treeClass : "jstree-table-col-0", - context: s.contextmenu || false, - columnWidth : s.columnWidth, - defaultConf : {"*display":"inline","*+display":"inline"}, - isThemeroller : !!this._data.themeroller, - treeWidthDiff : 0, - resizable : s.resizable, - draggable : s.draggable, - stateful: s.stateful, - indent: 0, - sortFn: [], - sortOrder: 'text', - sortAsc: true, - fixedHeader: s.fixedHeader !== false, - headerContextMenu: s.headerContextMenu !== false, - checkIcon: 'fa fa-check', - arrowDownIcon: 'fa fa-chevron-down', - arrowUpIcon: 'fa fa-chevron-up', - width: s.width, - height: s.height - }, cols = gs.columns, treecol = 0; - // find which column our tree shuld go in - for (i=0;i'+styles.join("\n")+'').appendTo("head"); - } - this.tableWrapper = $("
    ").addClass("jstree-table-wrapper").insertAfter(container); - this.midWrapper = $("
    ").addClass("jstree-table-midwrapper").appendTo(this.tableWrapper); - // set the wrapper width - if (s.width) { - this.tableWrapper.width(s.width); - } - if (s.height) { - this.tableWrapper.height(s.height); - } - // create the data columns - for (i=0;i
    ").addClass("jstree-default jstree-table-column jstree-table-column-"+i+" jstree-table-column-root-"+this.rootid).appendTo(this.midWrapper); - - if (typeof(cols[i].value) === "function") { - console.warn("[jstree-table] using value as a function is no longer supported, use 'format' option instead."); - } - } - this.midWrapper.children("div:eq("+treecol+")").append(container); - container.addClass("jstree-table-cell"); - - //move header with scroll - if (gs.fixedHeader) { - this.tableWrapper.scroll(function() { - $(this).find('.jstree-table-header').css('top', $(this).scrollTop()); - }); - } - - // copy original sort function - var defaultSort = $.proxy(this.settings.sort, this); - - // override sort function - this.settings.sort = function (a, b) { - var bigger; - - if (gs.sortOrder==='text') { - bigger = defaultSort(a, b); - } else { - var nodeA = this.get_node(a); - var nodeB = this.get_node(b); - var valueA = nodeA.data[gs.sortOrder]; - var valueB = nodeB.data[gs.sortOrder]; - if(valueA && valueB){ - if(gs.sortFn[gs.sortOrder]){ - bigger = gs.sortFn[gs.sortOrder](valueA, valueB, nodeA, nodeB); - }else{ - // Default sorting - bigger = (valueA > valueB ? 1 : -1); - } - }else{ - // undefined is second - if(valueA){ - bigger = 1; - }else if(valueB){ - bigger = -1; - }else{ - // Compare two nodes without values - bigger = defaultSort(a, b); - } - } - } - - if (gs.sortAsc===false){ - bigger = -bigger; - - } - - return bigger; - }; - - // sortable columns when jQuery UI is available - if (gs.draggable) { - if (!$.ui || !$.ui.sortable) { - console.warn('[jstree-table] draggable option requires jQuery UI'); - } else { - var from, to; - - $(this.midWrapper).sortable({ - axis: "x", - handle: ".jstree-table-header", - cancel: ".jstree-table-separator", - start: function (event, ui) { - from = ui.item.index(); - }, - stop: function (event, ui) { - to = ui.item.index(); - gs.columns.splice(to, 0, gs.columns.splice(from, 1)[0]); - } - }); - } - } - - this._initialized = true; - } - }; - this.init = function (el,options) { - parent.init.call(this,el,options); - this._initialize(); - }; - this.bind = function () { - parent.bind.call(this); - this._initialize(); - this.element - .on("move_node.jstree create_node.jstree clean_node.jstree change_node.jstree", $.proxy(function (e, data) { - var target = this.get_node(data || "#",true); - this._prepare_table(target); - }, this)) - .on("delete_node.jstree",$.proxy(function (e,data) { - if (data.node.id !== undefined) { - var table = this.tableWrapper, removeNodes = [data.node.id], i; - // add children to remove list - if (data.node && data.node.children_d) { - removeNodes = removeNodes.concat(data.node.children_d); - } - for (i=0;i\ - div.jstree-table-cell-root-'+me.rootid+' {line-height: '+anchorHeight+'px; min-height: '+anchorHeight+'px;}\ - div.jstree-table-midwrapper a.jstree-clicked:before, .jstree-table-midwrapper a.jstree-hovered:before {width: ' + tableWidth + 'px;}\ - ').appendTo("head"); - } - - resize(); - - // resize rows on zoom - $(window).on('resize', resize); - - // resize column expand - this.element.on("resize_column.jstree-table", resize); - },this)) - .on("move_node.jstree",$.proxy(function(e,data) { - var node = data.new_instance.element; - //renderAWidth(node,this); - // check all the children, because we could drag a tree over - node.find("li > a").each($.proxy(function(i,elm) { - //renderAWidth($(elm),this); - },this)); - },this)) - .on("search.jstree", $.proxy(function (e, data) { - // search sometimes filters, so we need to hide all of the appropriate table cells as well, and show only the matches - var table = this.tableWrapper; - if(this._data.search.som) { - if(data.nodes.length) { - // hide all of the table cells - table.find('div.jstree-table-cell-regular').hide(); - // show only those that match - data.nodes.add(data.nodes.parentsUntil(".jstree")).filter(".jstree-node").each(function (i,node) { - var id = node.id; - if (id) { - findDataCell(table,id).show(); - } - }); - } - } - return true; - }, this)) - .on("clear_search.jstree", $.proxy(function (e, data) { - // search has been cleared, so we need to show all rows - this.tableWrapper.find('div.jstree-table-cell').show(); - return true; - }, this)) - .on("copy_node.jstree", function (e, data) { - var newtree = data.new_instance, oldtree = data.old_instance, obj = newtree.get_node(data.node,true); - copyData(oldtree,data.original,newtree,data.node,true); - newtree._prepare_table(obj); - return true; - }); - if (this._tableSettings.isThemeroller) { - this.element - .on("select_node.jstree",$.proxy(function(e,data) { - data.rslt.obj.children("a").nextAll("div").addClass("ui-state-active"); - },this)) - .on("deselect_node.jstree deselect_all.jstree",$.proxy(function(e,data) { - data.rslt.obj.children("a").nextAll("div").removeClass("ui-state-active"); - },this)) - .on("hover_node.jstree",$.proxy(function(e,data) { - data.rslt.obj.children("a").nextAll("div").addClass("ui-state-hover"); - },this)) - .on("dehover_node.jstree",$.proxy(function(e,data) { - data.rslt.obj.children("a").nextAll("div").removeClass("ui-state-hover"); - },this)); - } - - if (this._tableSettings.stateful) { - this.element - .on("resize_column.jstree-table",$.proxy(function(e,col,width) { - localStorage['jstree-root-'+this.rootid+'-column-'+col] = width; - },this)); - } - }; - // tear down the tree entirely - this.teardown = function() { - var gw = this.tableWrapper, container = this.element, tableparent = gw.parent(); - container.detach(); - gw.remove(); - tableparent.append(container); - parent.teardown.call(this); - }; - // clean the table in case of redraw or refresh entire tree - this._clean_table = function (target,id) { - var table = this.tableWrapper; - if (target) { - findDataCell(table,id).remove(); - } else { - // get all of the `div` children in all of the `td` in dataRow except for :first (that is the tree itself) and remove - table.find("div.jstree-table-cell-regular").remove(); - } - }; - // prepare the headers - this._prepare_headers = function() { - var header, i, col, _this = this, gs = this._tableSettings,cols = gs.columns || [], width, defaultWidth = gs.columnWidth, resizable = gs.resizable || false, - cl, ccl, val, name, margin, last, tr = gs.isThemeroller, classAdd = (tr?"themeroller":"regular"), puller, - hasHeaders = false, tableparent = this.tableparent, rootid = this.rootid, - conf = gs.defaultConf, - borPadWidth = 0, totalWidth = 0; - // save the original parent so we can reparent on destroy - this.parent = tableparent; - - - // create the headers - for (i=0;i"); - //col.appendTo(colgroup); - cl = cols[i].headerClass || ""; - ccl = cols[i].columnClass || ""; - val = cols[i].header || ""; - name = cols[i].value || "text"; - - if (val) {hasHeaders = true;} - if(gs.stateful && localStorage['jstree-root-'+rootid+'-column-'+i]) - width = localStorage['jstree-root-'+rootid+'-column-'+i]; - else - width = cols[i].width || defaultWidth; - - col = this.midWrapper.children("div.jstree-table-column-"+i); - last = $("
    ").css(conf).addClass("jstree-table-div-"+this.uniq+"-"+i+" "+(tr?"ui-widget-header ":"")+" jstree-table-header jstree-table-header-cell jstree-table-header-"+classAdd+" "+cl+" "+ccl).html(val); - last.addClass((tr?"ui-widget-header ":"")+"jstree-table-header jstree-table-header-"+classAdd); - last.prependTo(col); - - if (name) { - last.attr(COL_DATA_ATTR, name); - } - last.hover(function () { - $(this).addClass("jstree-hovered jstree-table-header-hovered"); - }, function () { - $(this).removeClass("jstree-hovered jstree-table-header-hovered"); - }); - totalWidth += last.outerWidth(); - puller = $("
     
    ").appendTo(last); - col.width(width); - col.css("min-width",width); - col.css("max-width",width); - } - - last.addClass((tr?"ui-widget-header ":"")+"jstree-table-header jstree-table-header-last jstree-table-header-"+classAdd); - // if there is no width given for the last column, do it via automatic - if (cols[cols.length-1].width === undefined) { - totalWidth -= width; - col.css({width:"auto"}); - last.addClass("jstree-table-width-auto").next(".jstree-table-separator").remove(); - } - if (hasHeaders) { - // save the offset of the div from the body - //gs.divOffset = header.parent().offset().left; - gs.header = header; - } else { - $("div.jstree-table-header").hide(); - } - - if (!this.bound && resizable) { - this.bound = true; - $(document).mouseup(function () { - var ref, cols, width, headers, currentTree, colNum; - if (isClickedSep) { - colNum = toResize.prevAll(".jstree-table-column").length; - currentTree = toResize.closest(".jstree-table-wrapper").find(".jstree"); - ref = $.jstree.reference(currentTree); - cols = ref.settings.table.columns; - headers = toResize.parent().children("div.jstree-table-column"); - if (isNaN(colNum) || colNum < 0) { ref._tableSettings.treeWidthDiff = currentTree.find("ins:eq(0)").width() + currentTree.find("a:eq(0)").width() - ref._tableSettings.columns[0].width; } - width = ref._tableSettings.columns[colNum].width = parseFloat(toResize.css("width")); - isClickedSep = false; - toResize = null; - - currentTree.trigger("resize_column.jstree-table", [colNum,width]); - } - }).mousemove(function (e) { - if (isClickedSep) { - newMouseX = e.pageX; - var diff = newMouseX - oldMouseX, - oldPrevHeaderInner, - oldPrevColWidth, newPrevColWidth; - - if (diff !== 0) { - oldPrevHeaderInner = toResize.width(); - oldPrevColWidth = parseFloat(toResize.css("width")); - - // handle a Chrome issue with columns set to auto - // thanks to Brabus https://github.com/side-by-side - if (!oldPrevColWidth) { - oldPrevColWidth = toResize.innerWidth(); - } - - // make sure that diff cannot be beyond the left/right limits - diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; - newPrevColWidth = oldPrevColWidth+diff; - - // only do this if we are not shrinking past 0 on left - and limit it to that amount - if ((diff > 0 || oldPrevHeaderInner > 0) && newPrevColWidth > MINCOLWIDTH) { - toResize.width(newPrevColWidth+"px"); - toResize.css("min-width",newPrevColWidth+"px"); - toResize.css("max-width",newPrevColWidth+"px"); - oldMouseX = newMouseX; - } - } - } - }); - this.tableWrapper.on("selectstart", ".jstree-table-resizable-separator", function () { - return false; - }) - .on("mousedown", ".jstree-table-resizable-separator", function (e) { - isClickedSep = true; - oldMouseX = e.pageX; - toResize = $(this).closest("div.jstree-table-column"); - // the max rightmost position we will allow is the right-most of the wrapper minus a buffer (10) - return false; - }) - .on("dblclick", ".jstree-table-resizable-separator", function (e) { - var col = $(this).closest("div.jstree-table-column"); - _this.autosize_column(col); - }) - .on("click", ".jstree-table-separator", function (e) { - // don't sort after resize - e.stopPropagation(); - }); - } - - this.tableWrapper.on("click", ".jstree-table-header-cell", function (e) { - if (!_this.sort) { return; } - - // get column - var name = $(this).attr(COL_DATA_ATTR); - if (!name) { return; } - - // sort order - var arrowClass; - if (gs.sortOrder === name && gs.sortAsc === true) { - gs.sortAsc = false; - arrowClass = gs.arrowDownIcon; - } else { - gs.sortOrder = name; - gs.sortAsc = true; - arrowClass = gs.arrowUpIcon; - } - - // add sort arrow - $(this).closest('.jstree-table-wrapper').find(".jstree-table-sort-icon").remove(); - $("").addClass("jstree-table-sort-icon").appendTo($(this)).addClass(arrowClass); - - // sort by column - var rootNode = _this.get_node('#'); - _this.sort(rootNode, true); - _this.redraw_node(rootNode, true); - }); - - // header context menu - this.midWrapper.on("contextmenu", ".jstree-table-header-cell", function(e) { - if (!gs.headerContextMenu) { return; } - e.preventDefault(); - - var options = { - "fit":{label:"Size column to fit","action": function (data) { - var col = $(e.target).closest("div.jstree-table-column"); - _this.autosize_column(col); - }}, - "fitAll":{"separator_after": true,label:"Size all columns to fit","action": function (data) { - _this.autosize_all_columns(); - }} - }; - - // create menu item for every header cell - var cell, icon, value, label; - _this.midWrapper.find(".jstree-table-header-cell").each(function() { - cell = $(this); - icon = cell.is(":visible") ? gs.checkIcon : false; - value = cell.attr(COL_DATA_ATTR); - //get label without sorting arrows - label = cell.clone().children('.jstree-table-sort-icon').remove().end().text().trim(); - - options[value] = {icon:icon, column:value, label:label, _disabled: (value === 'text'), "action": function (data) { - var col = _this.midWrapper.find(".jstree-table-header-cell["+COL_DATA_ATTR+"='"+data.item.column+"']").parent(); - col.toggle(); - }}; - }); - - $.vakata.context.show(this,{ 'x' : e.pageX, 'y' : e.pageY },options); - }); - }; - /* - * Override redraw_node to correctly insert the table - */ - this.redraw_node = function(obj, deep, is_callback, force_render) { - // first allow the parent to redraw the node - obj = parent.redraw_node.call(this, obj, deep, is_callback, force_render); - // next prepare the table - if(obj) { - this._prepare_table(obj); - } - return obj; - }; - this.refresh = function () { - this._clean_table(); - return parent.refresh.apply(this,arguments); - }; - /* - * Override set_id to update cell attributes - */ - this.set_id = function (obj, id) { - var old; - if(obj) { - old = obj.id; - } - var result = parent.set_id.apply(this,arguments); - if(result) { - if (old !== undefined) { - var table = this.tableWrapper, oldNodes = [old], i; - // get children - if (obj && obj.children_d) { - oldNodes = oldNodes.concat(obj.children_d); - } - // update id in children - for (i=0;i", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"), - h2 = $("<"+"input />", { - "value" : t, - "class" : "jstree-rename-input", - "css" : { - "padding" : "0", - "border" : "1px solid silver", - "box-sizing" : "border-box", - "display" : "inline-block", - "height" : (this._data.core.li_height) + "px", - "lineHeight" : (this._data.core.li_height) + "px", - "width" : "150px" // will be set a bit further down - }, - "blur" : $.proxy(function () { - var v = h2.val(); - // save the value if changed - if(v === "" || v === t) { - v = t; - } else { - obj.data[col.value] = v; - this.element.trigger('update_cell.jstree-table',{node:obj, col:col.value, value:v, old:t}); - this._prepare_table(this.get_node(obj,true)); - } - h2.remove(); - element.show(); - }, this), - "keydown" : function (event) { - var key = event.which; - if(key === 27) { - this.value = t; - } - if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { - event.stopImmediatePropagation(); - } - if(key === 27 || key === 13) { - event.preventDefault(); - this.blur(); - } - }, - "click" : function (e) { e.stopImmediatePropagation(); }, - "mousedown" : function (e) { e.stopImmediatePropagation(); }, - "keyup" : function (event) { - h2.width(Math.min(h1.text("pW" + this.value).width(),w)); - }, - "keypress" : function(event) { - if(event.which === 13) { return false; } - } - }), - fn = { - fontFamily : element.css('fontFamily') || '', - fontSize : element.css('fontSize') || '', - fontWeight : element.css('fontWeight') || '', - fontStyle : element.css('fontStyle') || '', - fontStretch : element.css('fontStretch') || '', - fontVariant : element.css('fontVariant') || '', - letterSpacing : element.css('letterSpacing') || '', - wordSpacing : element.css('wordSpacing') || '' - }; - element.hide(); - element.parent().append(h2); - h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); - }; - - this.autosize_column = function (col) { - // don't resize hidden columns - if (col.is(":hidden")) { return; } - - var oldPrevColWidth = parseFloat(col.css("width")), newWidth = 0, diff, - colNum = col.prevAll(".jstree-table-column").length, - oldPrevHeaderInner = col.width(), newPrevColWidth; - - //find largest width - col.find(".jstree-table-cell").each(function() { - var item = $(this), width; - item.css("position", "absolute"); - item.css("width", "auto"); - width = item.outerWidth(); - item.css("position", "relative"); - - if (width>newWidth) { - newWidth = width; - } - }); - - diff = newWidth-oldPrevColWidth; - - // make sure that diff cannot be beyond the left limits - diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; - newPrevColWidth = (oldPrevColWidth+diff)+"px"; - - col.width(newPrevColWidth); - col.css("min-width",newPrevColWidth); - col.css("max-width",newPrevColWidth); - - $(this).closest(".jstree-table-wrapper").find(".jstree").trigger("resize_column.jstree-table",[colNum,newPrevColWidth]); - }; - - this.autosize_all_columns = function () { - this.tableWrapper.find(".jstree-table-column").each(function() { - _this.autosize_column($(this)); - }); - }; - - this._prepare_table = function (obj) { - var gs = this._tableSettings, c = gs.treeClass, _this = this, t, cols = gs.columns || [], width, tr = gs.isThemeroller, - tree = this.element, rootid = this.rootid, - classAdd = (tr?"themeroller":"regular"), img, objData = this.get_node(obj), - defaultWidth = gs.columnWidth, conf = gs.defaultConf, cellClickHandler = function (tree,node,val,col,t) { - return function(e) { - //node = tree.find("#"+node.attr("id")); - node.children(".jstree-anchor").trigger("click.jstree",e); - tree.trigger("select_cell.jstree-table", [{value: val,column: col.header,node: node,table:$(this),sourceName: col.value}]); - }; - }, cellRightClickHandler = function (tree,node,val,col,t) { - return function (e) { - if (gs.context) { - e.preventDefault(); - $.vakata.context.show(this,{ 'x' : e.pageX, 'y' : e.pageY },{ - "edit":{label:"Edit","action": function (data) { - var obj = t.get_node(node); - _this._edit(obj,col,e.target); - }} - }); - } - }; - }, - hoverInHandler = function (node, jsTreeInstance) { - return function() { jsTreeInstance.hover_node(node); }; - }, - hoverOutHandler = function (node, jsTreeInstance) { - return function() { jsTreeInstance.dehover_node(node); }; - }, - i, val, cl, wcl, ccl, a, last, valClass, wideValClass, span, paddingleft, title, tableCellName, tableCellParentId, tableCellParent, - tableCellPrev, tableCellPrevId, tableCellNext, tableCellNextId, tableCellChild, tableCellChildId, - col, content, tmpWidth, mw = this.midWrapper, dataCell, lid = objData.id, - peers = this.get_node(objData.parent).children, - // find my position in the list of peers. "peers" is the list of everyone at my level under my parent, in order - pos = $.inArray(lid,peers), - hc = this.holdingCells, rendered = false, closed; - // get our column definition - t = $(obj); - - // find the a children - a = t.children("a"); - - if (a.length === 1) { - closed = !objData.state.opened; - tableCellName = TABLECELLID_PREFIX+escapeId(lid)+TABLECELLID_POSTFIX; - tableCellParentId = objData.parent === "#" ? null : objData.parent; - a.addClass(c); - //renderAWidth(a,_this); - renderATitle(a,t,_this); - last = a; - // find which column our tree shuld go in - var s = this.settings.table; - var treecol = 0; - for (i=0;i' : '';} - } else { content = val; } - - // content cannot be blank, or it messes up heights - if (content === undefined || content === null || BLANKRE.test(content)) { - content = " "; - } - - // get the valueClass - valClass = col.valueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.valueClass] || "" : ""; - if (valClass && col.valueClassPrefix && col.valueClassPrefix !== "") { - valClass = col.valueClassPrefix + valClass; - } - // get the wideValueClass - wideValClass = col.wideValueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.wideValueClass] || "" : ""; - if (wideValClass && col.wideValueClassPrefix && col.wideValueClassPrefix !== "") { - wideValClass = col.wideValueClassPrefix + wideValClass; - } - // get the title - title = col.title && objData.data !== null && objData.data !== undefined ? objData.data[col.title] || "" : ""; - // strip out HTML - if (typeof title === 'string') { - title = title.replace(htmlstripre, ''); - } - - // get the width - paddingleft = 7; - width = col.width || defaultWidth; - if (width !== 'auto') { - width = tmpWidth || (width - paddingleft); - } - - last = findDataCell(dataCell, lid); - if (!last || last.length < 1) { - last = $("
    "); - $("").appendTo(last); - last.attr("id",tableCellName+i); - last.addClass(tableCellName); - last.attr(NODE_DATA_ATTR,lid); - - } - // we need to put it in the dataCell - after the parent, but the position matters - // if we have no parent, then we are one of the root nodes, but still need to look at peers - - - // if we are first, i.e. pos === 0, we go right after the parent; - // if we are not first, and our previous peer (one before us) is closed, we go right after the previous peer cell - // if we are not first, and our previous peer is opened, then we have to find its youngest & lowest closed child (incl. leaf) - // - // probably be much easier to go *before* our next one - // but that one might not be drawn yet - // here is the logic for jstree drawing: - // it draws peers from first to last or from last to first - // it draws children before a parent - // - // so I can rely on my *parent* not being drawn, but I cannot rely on my previous peer or my next peer being drawn - - // so we do the following: - // 1- We are the first child: install after the parent - // 2- Our previous peer is already drawn: install after the previous peer - // 3- Our previous peer is not drawn, we have a child that is drawn: install right before our first child - // 4- Our previous peer is not drawn, we have no child that is drawn, our next peer is drawn: install right before our next peer - // 5- Our previous peer is not drawn, we have no child that is drawn, our next peer is not drawn: install right after parent - tableCellPrevId = pos <=0 ? objData.parent : findLastClosedNode(this,peers[pos-1]); - tableCellPrev = findDataCell(dataCell,tableCellPrevId); - tableCellNextId = pos >= peers.length-1 ? "NULL" : peers[pos+1]; - tableCellNext = findDataCell(dataCell,tableCellNextId); - tableCellChildId = objData.children && objData.children.length > 0 ? objData.children[0] : "NULL"; - tableCellChild = findDataCell(dataCell,tableCellChildId); - tableCellParent = findDataCell(dataCell,tableCellParentId); - - // if our parent is already drawn, then we put this in the right order under our parent - if (tableCellParentId) { - if (tableCellParent && tableCellParent.length > 0) { - if (tableCellPrev && tableCellPrev.length > 0) { - last.insertAfter(tableCellPrev); - } else if (tableCellChild && tableCellChild.length > 0) { - last.insertBefore(tableCellChild); - } else if (tableCellNext && tableCellNext.length > 0) { - last.insertBefore(tableCellNext); - } else { - last.insertAfter(tableCellParent); - } - rendered = true; - } else { - rendered = false; - } - // always put it in the holding cells, and then sort when the parent comes in, in case parent is (re)drawn later - hc[tableCellName+i] = last; - } else { - if (tableCellPrev && tableCellPrev.length > 0) { - last.insertAfter(tableCellPrev); - } else if (tableCellChild && tableCellChild.length > 0) { - last.insertBefore(tableCellChild); - } else if (tableCellNext && tableCellNext.length > 0) { - last.insertBefore(tableCellNext); - } else { - last.appendTo(dataCell); - } - rendered = true; - } - // do we have any children waiting for this cell? walk down through the children/grandchildren/etc tree - if (rendered) { - last.after(this.getHoldingCells(objData,i,hc)); - } - // need to make the height of this match the line height of the tree. How? - span = last.children("span"); - - // create a span inside the div, so we can control what happens in the whole div versus inside just the text/background - span.addClass(cl+" "+valClass).html(content); - last = last.css(conf).addClass("jstree-table-cell jstree-table-cell-regular jstree-table-cell-root-"+rootid+" jstree-table-cell-"+classAdd+" "+wcl+ " " + wideValClass + (tr?" ui-state-default":"")).addClass("jstree-table-col-"+i); - // add click handler for clicking inside a table cell - last.click(cellClickHandler(tree,t,val,col,this)); - last.on("contextmenu",cellRightClickHandler(tree,t,val,col,this)); - last.hover(hoverInHandler(t, this), hoverOutHandler(t, this)); - - if (title) { - span.attr("title",title); - } - } - last.addClass("jstree-table-cell-last"+(tr?" ui-state-default":"")); - // if there is no width given for the last column, do it via automatic - if (cols[cols.length-1].width === undefined) { - last.addClass("jstree-table-width-auto").next(".jstree-table-separator").remove(); - } - } - this.element.css({'overflow-y':'auto !important'}); - }; - // clean up holding cells - this.holdingCells = {}; - }; -})); \ No newline at end of file + var renderAWidth, renderATitle, getIndent, copyData, htmlstripre, findLastClosedNode, BLANKRE = /^\s*$/g, + IDREGEX = /[\\:&!^|()\[\]<>@*'+~#";,= \/${}%]/g, escapeId = function (id) { + return (id||"").replace(IDREGEX,"\\$&"); + }, NODE_DATA_ATTR = "data-jstreetable", COL_DATA_ATTR = "data-jstreetable-column", + SPECIAL_TITLE = "_DATA_", LEVELINDENT = 24, styled = false, TABLECELLID_PREFIX = "jstable_",TABLECELLID_POSTFIX = "_col", + MINCOLWIDTH = 10, + findDataCell = function (from,id) { + return from.find("div["+NODE_DATA_ATTR+"=\""+ escapeId(id) +"\"]"); + }, + isClickedSep = false, toResize = null, oldMouseX = 0, newMouseX = 0; + + /*jslint regexp:true */ + htmlstripre = /<\/?[^>]+>/gi; + /*jslint regexp:false */ + + getIndent = function(node,tree) { + var div, i, li, width; + + // did we already save it for this tree? + tree._tableSettings = tree._tableSettings || {}; + if (tree._tableSettings.indent > 0) { + width = tree._tableSettings.indent; + } else { + // create a new div on the DOM but not visible on the page + div = $("
    "); + i = node.prev("i"); + li = i.parent(); + // add to that div all of the classes on the tree root + div.addClass(tree.get_node("#",true).attr("class")); + + // move the li to the temporary div root + li.appendTo(div); + + // attach to the body quickly + div.appendTo($("body")); + + // get the width + width = i.width() || LEVELINDENT; + + // detach the li from the new div and destroy the new div + li.detach(); + div.remove(); + + // save it for the future + tree._tableSettings.indent = width; + } + + + return(width); + + }; + + copyData = function (fromtree,from,totree,to,recurse) { + var i, j; + to.data = $.extend(true, {}, from.data); + if (from && from.children_d && recurse) { + for(i = 0, j = from.children_d.length; i < j; i++) { + copyData(fromtree,fromtree.get_node(from.children_d[i]),totree,totree.get_node(to.children_d[i]),recurse); + } + } + }; + + findLastClosedNode = function (tree,id) { + // first get our node + var ret, node = tree.get_node(id), children = node.children; + // is it closed? + if (!children || children.length <= 0 || !node.state.opened) { + ret = id; + } else { + ret = findLastClosedNode(tree,children[children.length-1]); + } + return(ret); + }; + + renderAWidth = function(node,tree) { + var depth, width, + fullWidth = parseInt(tree.settings.table.columns[0].width,10) + parseInt(tree._tableSettings.treeWidthDiff,10); + // need to use a selector in jquery 1.4.4+ + depth = tree.get_node(node).parents.length; + width = fullWidth - depth*getIndent(node,tree); + // the following line is no longer needed, since we are doing this inside a + //a.css({"vertical-align": "top", "overflow":"hidden"}); + return(fullWidth); + }; + renderATitle = function(node,t,tree) { + var a = node.get(0).tagName.toLowerCase() === "a" ? node : node.children("a"), title, col = tree.settings.table.columns[0]; + // get the title + title = ""; + if (col.title) { + if (col.title === SPECIAL_TITLE) { + title = tree.get_text(t); + } else if (t.attr(col.title)) { + title = t.attr(col.title); + } + } + // strip out HTML + title = title.replace(htmlstripre, ""); + if (title) { + a.attr("title",title); + } + }; + + $.jstree.defaults.table = { + width: "auto" + }; + + $.jstree.plugins.table = function(options,parent) { + var _this = this; + + this._initialize = function () { + if (!this._initialized) { + var s = this.settings.table || {}, styles, container = this.element, i, + gs = this._tableSettings = { + columns : s.columns || [], + treeClass : "jstree-table-col-0", + context: s.contextmenu || false, + columnWidth : s.columnWidth, + defaultConf : {"*display":"inline","*+display":"inline"}, + isThemeroller : !!this._data.themeroller, + treeWidthDiff : 0, + resizable : s.resizable, + draggable : s.draggable, + stateful: s.stateful, + indent: 0, + sortFn: [], + sortOrder: "text", + sortAsc: true, + fixedHeader: s.fixedHeader !== false, + headerContextMenu: s.headerContextMenu !== false, + checkIcon: "fa fa-check", + arrowDownIcon: "fa fa-chevron-down", + arrowUpIcon: "fa fa-chevron-up", + width: s.width, + height: s.height + }, cols = gs.columns, treecol = 0; + // find which column our tree shuld go in + for (i=0;i"+styles.join("\n")+"").appendTo("head"); + } + this.tableWrapper = $("
    ").addClass("jstree-table-wrapper").insertAfter(container); + this.midWrapper = $("
    ").addClass("jstree-table-midwrapper").appendTo(this.tableWrapper); + // set the wrapper width + if (s.width) { + this.tableWrapper.width(s.width); + } + if (s.height) { + this.tableWrapper.height(s.height); + } + // create the data columns + for (i=0;i").addClass("jstree-default jstree-table-column jstree-table-column-"+i+" jstree-table-column-root-"+this.rootid).appendTo(this.midWrapper); + + if (typeof(cols[i].value) === "function") { + console.warn("[jstree-table] using value as a function is no longer supported, use 'format' option instead."); + } + } + this.midWrapper.children("div:eq("+treecol+")").append(container); + container.addClass("jstree-table-cell"); + + //move header with scroll + if (gs.fixedHeader) { + this.tableWrapper.scroll(function() { + $(this).find(".jstree-table-header").css("top", $(this).scrollTop()); + }); + } + + // copy original sort function + var defaultSort = $.proxy(this.settings.sort, this); + + // override sort function + this.settings.sort = function (a, b) { + var bigger; + + if (gs.sortOrder==="text") { + bigger = defaultSort(a, b); + } else { + var nodeA = this.get_node(a); + var nodeB = this.get_node(b); + var valueA = nodeA.data[gs.sortOrder]; + var valueB = nodeB.data[gs.sortOrder]; + if(valueA && valueB){ + if(gs.sortFn[gs.sortOrder]){ + bigger = gs.sortFn[gs.sortOrder](valueA, valueB, nodeA, nodeB); + }else{ + // Default sorting + bigger = (valueA > valueB ? 1 : -1); + } + }else{ + // undefined is second + if(valueA){ + bigger = 1; + }else if(valueB){ + bigger = -1; + }else{ + // Compare two nodes without values + bigger = defaultSort(a, b); + } + } + } + + if (gs.sortAsc===false){ + bigger = -bigger; + + } + + return bigger; + }; + + // sortable columns when jQuery UI is available + if (gs.draggable) { + if (!$.ui || !$.ui.sortable) { + console.warn("[jstree-table] draggable option requires jQuery UI"); + } else { + var from, to; + + $(this.midWrapper).sortable({ + axis: "x", + handle: ".jstree-table-header", + cancel: ".jstree-table-separator", + start: function (event, ui) { + from = ui.item.index(); + }, + stop: function (event, ui) { + to = ui.item.index(); + gs.columns.splice(to, 0, gs.columns.splice(from, 1)[0]); + } + }); + } + } + + this._initialized = true; + } + }; + this.init = function (el,options) { + parent.init.call(this,el,options); + this._initialize(); + }; + this.bind = function () { + parent.bind.call(this); + this._initialize(); + this.element + .on("move_node.jstree create_node.jstree clean_node.jstree change_node.jstree", $.proxy(function (e, data) { + var target = this.get_node(data || "#",true); + this._prepare_table(target); + }, this)) + .on("delete_node.jstree",$.proxy(function (e,data) { + if (data.node.id !== undefined) { + var table = this.tableWrapper, removeNodes = [data.node.id], i; + // add children to remove list + if (data.node && data.node.children_d) { + removeNodes = removeNodes.concat(data.node.children_d); + } + for (i=0;idiv.jstree-table-cell-root-"+me.rootid+" {line-height: "+anchorHeight+"px; min-height: "+anchorHeight+"px;}div.jstree-table-midwrapper a.jstree-clicked:before, .jstree-table-midwrapper a.jstree-hovered:before {width: " + tableWidth + "px;}").appendTo("head"); + } + + resize(); + + // resize rows on zoom + $(window).on("resize", resize); + + // resize column expand + this.element.on("resize_column.jstree-table", resize); + },this)) + .on("move_node.jstree",$.proxy(function(e,data) { + var node = data.new_instance.element; + //renderAWidth(node,this); + // check all the children, because we could drag a tree over + node.find("li > a").each($.proxy(function(i,elm) { + //renderAWidth($(elm),this); + },this)); + },this)) + .on("search.jstree", $.proxy(function (e, data) { + // search sometimes filters, so we need to hide all of the appropriate table cells as well, and show only the matches + var table = this.tableWrapper; + if(this._data.search.som) { + if(data.nodes.length) { + // hide all of the table cells + table.find("div.jstree-table-cell-regular").hide(); + // show only those that match + data.nodes.add(data.nodes.parentsUntil(".jstree")).filter(".jstree-node").each(function (i,node) { + var id = node.id; + if (id) { + findDataCell(table,id).show(); + } + }); + } + } + return true; + }, this)) + .on("clear_search.jstree", $.proxy(function (e, data) { + // search has been cleared, so we need to show all rows + this.tableWrapper.find("div.jstree-table-cell").show(); + return true; + }, this)) + .on("copy_node.jstree", function (e, data) { + var newtree = data.new_instance, oldtree = data.old_instance, obj = newtree.get_node(data.node,true); + copyData(oldtree,data.original,newtree,data.node,true); + newtree._prepare_table(obj); + return true; + }); + if (this._tableSettings.isThemeroller) { + this.element + .on("select_node.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").addClass("ui-state-active"); + },this)) + .on("deselect_node.jstree deselect_all.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").removeClass("ui-state-active"); + },this)) + .on("hover_node.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").addClass("ui-state-hover"); + },this)) + .on("dehover_node.jstree",$.proxy(function(e,data) { + data.rslt.obj.children("a").nextAll("div").removeClass("ui-state-hover"); + },this)); + } + + if (this._tableSettings.stateful) { + this.element + .on("resize_column.jstree-table",$.proxy(function(e,col,width) { + localStorage["jstree-root-"+this.rootid+"-column-"+col] = width; + },this)); + } + }; + // tear down the tree entirely + this.teardown = function() { + var gw = this.tableWrapper, container = this.element, tableparent = gw.parent(); + container.detach(); + gw.remove(); + tableparent.append(container); + parent.teardown.call(this); + }; + // clean the table in case of redraw or refresh entire tree + this._clean_table = function (target,id) { + var table = this.tableWrapper; + if (target) { + findDataCell(table,id).remove(); + } else { + // get all of the `div` children in all of the `td` in dataRow except for :first (that is the tree itself) and remove + table.find("div.jstree-table-cell-regular").remove(); + } + }; + // prepare the headers + this._prepare_headers = function() { + var header, i, col, _this = this, gs = this._tableSettings,cols = gs.columns || [], width, defaultWidth = gs.columnWidth, resizable = gs.resizable || false, + cl, ccl, val, name, margin, last, tr = gs.isThemeroller, classAdd = (tr?"themeroller":"regular"), puller, + hasHeaders = false, tableparent = this.tableparent, rootid = this.rootid, + conf = gs.defaultConf, + borPadWidth = 0, totalWidth = 0; + // save the original parent so we can reparent on destroy + this.parent = tableparent; + + + // create the headers + for (i=0;i"); + //col.appendTo(colgroup); + cl = cols[i].headerClass || ""; + ccl = cols[i].columnClass || ""; + val = cols[i].header || ""; + name = cols[i].value || "text"; + + if (val) {hasHeaders = true;} + if(gs.stateful && localStorage["jstree-root-"+rootid+"-column-"+i]) + width = localStorage["jstree-root-"+rootid+"-column-"+i]; + else + width = cols[i].width || defaultWidth; + + col = this.midWrapper.children("div.jstree-table-column-"+i); + last = $("
    ").css(conf).addClass("jstree-table-div-"+this.uniq+"-"+i+" "+(tr?"ui-widget-header ":"")+" jstree-table-header jstree-table-header-cell jstree-table-header-"+classAdd+" "+cl+" "+ccl).html(val); + last.addClass((tr?"ui-widget-header ":"")+"jstree-table-header jstree-table-header-"+classAdd); + last.prependTo(col); + + if (name) { + last.attr(COL_DATA_ATTR, name); + } + last.hover(function () { + $(this).addClass("jstree-hovered jstree-table-header-hovered"); + }, function () { + $(this).removeClass("jstree-hovered jstree-table-header-hovered"); + }); + totalWidth += last.outerWidth(); + puller = $("
     
    ").appendTo(last); + col.width(width); + col.css("min-width",width); + col.css("max-width",width); + } + + last.addClass((tr?"ui-widget-header ":"")+"jstree-table-header jstree-table-header-last jstree-table-header-"+classAdd); + // if there is no width given for the last column, do it via automatic + if (cols[cols.length-1].width === undefined) { + totalWidth -= width; + col.css({width:"auto"}); + last.addClass("jstree-table-width-auto").next(".jstree-table-separator").remove(); + } + if (hasHeaders) { + // save the offset of the div from the body + //gs.divOffset = header.parent().offset().left; + gs.header = header; + } else { + $("div.jstree-table-header").hide(); + } + + if (!this.bound && resizable) { + this.bound = true; + $(document).mouseup(function () { + var ref, cols, width, headers, currentTree, colNum; + if (isClickedSep) { + colNum = toResize.prevAll(".jstree-table-column").length; + currentTree = toResize.closest(".jstree-table-wrapper").find(".jstree"); + ref = $.jstree.reference(currentTree); + cols = ref.settings.table.columns; + headers = toResize.parent().children("div.jstree-table-column"); + if (isNaN(colNum) || colNum < 0) { ref._tableSettings.treeWidthDiff = currentTree.find("ins:eq(0)").width() + currentTree.find("a:eq(0)").width() - ref._tableSettings.columns[0].width; } + width = ref._tableSettings.columns[colNum].width = parseFloat(toResize.css("width")); + isClickedSep = false; + toResize = null; + + currentTree.trigger("resize_column.jstree-table", [colNum,width]); + } + }).mousemove(function (e) { + if (isClickedSep) { + newMouseX = e.pageX; + var diff = newMouseX - oldMouseX, + oldPrevHeaderInner, + oldPrevColWidth, newPrevColWidth; + + if (diff !== 0) { + oldPrevHeaderInner = toResize.width(); + oldPrevColWidth = parseFloat(toResize.css("width")); + + // handle a Chrome issue with columns set to auto + // thanks to Brabus https://github.com/side-by-side + if (!oldPrevColWidth) { + oldPrevColWidth = toResize.innerWidth(); + } + + // make sure that diff cannot be beyond the left/right limits + diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; + newPrevColWidth = oldPrevColWidth+diff; + + // only do this if we are not shrinking past 0 on left - and limit it to that amount + if ((diff > 0 || oldPrevHeaderInner > 0) && newPrevColWidth > MINCOLWIDTH) { + toResize.width(newPrevColWidth+"px"); + toResize.css("min-width",newPrevColWidth+"px"); + toResize.css("max-width",newPrevColWidth+"px"); + oldMouseX = newMouseX; + } + } + } + }); + this.tableWrapper.on("selectstart", ".jstree-table-resizable-separator", function () { + return false; + }) + .on("mousedown", ".jstree-table-resizable-separator", function (e) { + isClickedSep = true; + oldMouseX = e.pageX; + toResize = $(this).closest("div.jstree-table-column"); + // the max rightmost position we will allow is the right-most of the wrapper minus a buffer (10) + return false; + }) + .on("dblclick", ".jstree-table-resizable-separator", function (e) { + var col = $(this).closest("div.jstree-table-column"); + _this.autosize_column(col); + }) + .on("click", ".jstree-table-separator", function (e) { + // don't sort after resize + e.stopPropagation(); + }); + } + + this.tableWrapper.on("click", ".jstree-table-header-cell", function (e) { + if (!_this.sort) { return; } + + // get column + var name = $(this).attr(COL_DATA_ATTR); + if (!name) { return; } + + // sort order + var arrowClass; + if (gs.sortOrder === name && gs.sortAsc === true) { + gs.sortAsc = false; + arrowClass = gs.arrowDownIcon; + } else { + gs.sortOrder = name; + gs.sortAsc = true; + arrowClass = gs.arrowUpIcon; + } + + // add sort arrow + $(this).closest(".jstree-table-wrapper").find(".jstree-table-sort-icon").remove(); + $("").addClass("jstree-table-sort-icon").appendTo($(this)).addClass(arrowClass); + + // sort by column + var rootNode = _this.get_node("#"); + _this.sort(rootNode, true); + _this.redraw_node(rootNode, true); + }); + + // header context menu + this.midWrapper.on("contextmenu", ".jstree-table-header-cell", function(e) { + if (!gs.headerContextMenu) { return; } + e.preventDefault(); + + var options = { + "fit":{label:"Size column to fit","action": function (data) { + var col = $(e.target).closest("div.jstree-table-column"); + _this.autosize_column(col); + }}, + "fitAll":{"separator_after": true,label:"Size all columns to fit","action": function (data) { + _this.autosize_all_columns(); + }} + }; + + // create menu item for every header cell + var cell, icon, value, label; + _this.midWrapper.find(".jstree-table-header-cell").each(function() { + cell = $(this); + icon = cell.is(":visible") ? gs.checkIcon : false; + value = cell.attr(COL_DATA_ATTR); + //get label without sorting arrows + label = cell.clone().children(".jstree-table-sort-icon").remove().end().text().trim(); + + options[value] = {icon:icon, column:value, label:label, _disabled: (value === "text"), "action": function (data) { + var col = _this.midWrapper.find(".jstree-table-header-cell["+COL_DATA_ATTR+"='"+data.item.column+"']").parent(); + col.toggle(); + }}; + }); + + $.vakata.context.show(this,{ "x" : e.pageX, "y" : e.pageY },options); + }); + }; + /** + * Override redraw_node to correctly insert the table + */ + this.redraw_node = function(obj, deep, is_callback, force_render) { + // first allow the parent to redraw the node + obj = parent.redraw_node.call(this, obj, deep, is_callback, force_render); + // next prepare the table + if(obj) { + this._prepare_table(obj); + } + return obj; + }; + this.refresh = function () { + this._clean_table(); + return parent.refresh.apply(this,arguments); + }; + /** + * Override set_id to update cell attributes + */ + this.set_id = function (obj, id) { + var old; + if(obj) { + old = obj.id; + } + var result = parent.set_id.apply(this,arguments); + if(result) { + if (old !== undefined) { + var table = this.tableWrapper, oldNodes = [old], i; + // get children + if (obj && obj.children_d) { + oldNodes = oldNodes.concat(obj.children_d); + } + // update id in children + for (i=0;i", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"), + h2 = $("<"+"input />", { + "value" : t, + "class" : "jstree-rename-input", + "css" : { + "padding" : "0", + "border" : "1px solid silver", + "box-sizing" : "border-box", + "display" : "inline-block", + "height" : (this._data.core.li_height) + "px", + "lineHeight" : (this._data.core.li_height) + "px", + "width" : "150px" // will be set a bit further down + }, + "blur" : $.proxy(function () { + var v = h2.val(); + // save the value if changed + if(v === "" || v === t) { + v = t; + } else { + obj.data[col.value] = v; + this.element.trigger("update_cell.jstree-table",{node:obj, col:col.value, value:v, old:t}); + this._prepare_table(this.get_node(obj,true)); + } + h2.remove(); + element.show(); + }, this), + "keydown" : function (event) { + var key = event.which; + if(key === 27) { + this.value = t; + } + if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { + event.stopImmediatePropagation(); + } + if(key === 27 || key === 13) { + event.preventDefault(); + this.blur(); + } + }, + "click" : function (e) { e.stopImmediatePropagation(); }, + "mousedown" : function (e) { e.stopImmediatePropagation(); }, + "keyup" : function (event) { + h2.width(Math.min(h1.text("pW" + this.value).width(),w)); + }, + "keypress" : function(event) { + if(event.which === 13) { return false; } + } + }), + fn = { + fontFamily : element.css("fontFamily") || "", + fontSize : element.css("fontSize") || "", + fontWeight : element.css("fontWeight") || "", + fontStyle : element.css("fontStyle") || "", + fontStretch : element.css("fontStretch") || "", + fontVariant : element.css("fontVariant") || "", + letterSpacing : element.css("letterSpacing") || "", + wordSpacing : element.css("wordSpacing") || "" + }; + element.hide(); + element.parent().append(h2); + h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); + }; + + this.autosize_column = function (col) { + // don't resize hidden columns + if (col.is(":hidden")) { return; } + + var oldPrevColWidth = parseFloat(col.css("width")), newWidth = 0, diff, + colNum = col.prevAll(".jstree-table-column").length, + oldPrevHeaderInner = col.width(), newPrevColWidth; + + //find largest width + col.find(".jstree-table-cell").each(function() { + var item = $(this), width; + item.css("position", "absolute"); + item.css("width", "auto"); + width = item.outerWidth(); + item.css("position", "relative"); + + if (width>newWidth) { + newWidth = width; + } + }); + + diff = newWidth-oldPrevColWidth; + + // make sure that diff cannot be beyond the left limits + diff = diff < 0 ? Math.max(diff,-oldPrevHeaderInner) : diff; + newPrevColWidth = (oldPrevColWidth+diff)+"px"; + + col.width(newPrevColWidth); + col.css("min-width",newPrevColWidth); + col.css("max-width",newPrevColWidth); + + $(this).closest(".jstree-table-wrapper").find(".jstree").trigger("resize_column.jstree-table",[colNum,newPrevColWidth]); + }; + + this.autosize_all_columns = function () { + this.tableWrapper.find(".jstree-table-column").each(function() { + _this.autosize_column($(this)); + }); + }; + + this._prepare_table = function (obj) { + var gs = this._tableSettings, c = gs.treeClass, _this = this, t, cols = gs.columns || [], width, tr = gs.isThemeroller, + tree = this.element, rootid = this.rootid, + classAdd = (tr?"themeroller":"regular"), img, objData = this.get_node(obj), + defaultWidth = gs.columnWidth, conf = gs.defaultConf, cellClickHandler = function (tree,node,val,col,t) { + return function(e) { + //node = tree.find("#"+node.attr("id")); + node.children(".jstree-anchor").trigger("click.jstree",e); + tree.trigger("select_cell.jstree-table", [{value: val,column: col.header,node: node,table:$(this),sourceName: col.value}]); + }; + }, cellRightClickHandler = function (tree,node,val,col,t) { + return function (e) { + if (gs.context) { + e.preventDefault(); + $.vakata.context.show(this,{ "x" : e.pageX, "y" : e.pageY },{ + "edit":{label:"Edit","action": function (data) { + var obj = t.get_node(node); + _this._edit(obj,col,e.target); + }} + }); + } + }; + }, + hoverInHandler = function (node, jsTreeInstance) { + return function() { jsTreeInstance.hover_node(node); }; + }, + hoverOutHandler = function (node, jsTreeInstance) { + return function() { jsTreeInstance.dehover_node(node); }; + }, + i, val, cl, wcl, ccl, a, last, valClass, wideValClass, span, paddingleft, title, tableCellName, tableCellParentId, tableCellParent, + tableCellPrev, tableCellPrevId, tableCellNext, tableCellNextId, tableCellChild, tableCellChildId, + col, content, tmpWidth, mw = this.midWrapper, dataCell, lid = objData.id, + peers = this.get_node(objData.parent).children, + // find my position in the list of peers. "peers" is the list of everyone at my level under my parent, in order + pos = $.inArray(lid,peers), + hc = this.holdingCells, rendered = false, closed; + // get our column definition + t = $(obj); + + // find the a children + a = t.children("a"); + + if (a.length === 1) { + closed = !objData.state.opened; + tableCellName = TABLECELLID_PREFIX+escapeId(lid)+TABLECELLID_POSTFIX; + tableCellParentId = objData.parent === "#" ? null : objData.parent; + a.addClass(c); + //renderAWidth(a,_this); + renderATitle(a,t,_this); + last = a; + // find which column our tree shuld go in + var s = this.settings.table; + var treecol = 0; + for (i=0;i" : "";} + } else { content = val; } + + // content cannot be blank, or it messes up heights + if (content === undefined || content === null || BLANKRE.test(content)) { + content = " "; + } + + // get the valueClass + valClass = col.valueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.valueClass] || "" : ""; + if (valClass && col.valueClassPrefix && col.valueClassPrefix !== "") { + valClass = col.valueClassPrefix + valClass; + } + // get the wideValueClass + wideValClass = col.wideValueClass && objData.data !== null && objData.data !== undefined ? objData.data[col.wideValueClass] || "" : ""; + if (wideValClass && col.wideValueClassPrefix && col.wideValueClassPrefix !== "") { + wideValClass = col.wideValueClassPrefix + wideValClass; + } + // get the title + title = col.title && objData.data !== null && objData.data !== undefined ? objData.data[col.title] || "" : ""; + // strip out HTML + if (typeof title === "string") { + title = title.replace(htmlstripre, ""); + } + + // get the width + paddingleft = 7; + width = col.width || defaultWidth; + if (width !== "auto") { + width = tmpWidth || (width - paddingleft); + } + + last = findDataCell(dataCell, lid); + if (!last || last.length < 1) { + last = $("
    "); + $("").appendTo(last); + last.attr("id",tableCellName+i); + last.addClass(tableCellName); + last.attr(NODE_DATA_ATTR,lid); + + } + // we need to put it in the dataCell - after the parent, but the position matters + // if we have no parent, then we are one of the root nodes, but still need to look at peers + + + // if we are first, i.e. pos === 0, we go right after the parent; + // if we are not first, and our previous peer (one before us) is closed, we go right after the previous peer cell + // if we are not first, and our previous peer is opened, then we have to find its youngest & lowest closed child (incl. leaf) + // + // probably be much easier to go *before* our next one + // but that one might not be drawn yet + // here is the logic for jstree drawing: + // it draws peers from first to last or from last to first + // it draws children before a parent + // + // so I can rely on my *parent* not being drawn, but I cannot rely on my previous peer or my next peer being drawn + + // so we do the following: + // 1- We are the first child: install after the parent + // 2- Our previous peer is already drawn: install after the previous peer + // 3- Our previous peer is not drawn, we have a child that is drawn: install right before our first child + // 4- Our previous peer is not drawn, we have no child that is drawn, our next peer is drawn: install right before our next peer + // 5- Our previous peer is not drawn, we have no child that is drawn, our next peer is not drawn: install right after parent + tableCellPrevId = pos <=0 ? objData.parent : findLastClosedNode(this,peers[pos-1]); + tableCellPrev = findDataCell(dataCell,tableCellPrevId); + tableCellNextId = pos >= peers.length-1 ? "NULL" : peers[pos+1]; + tableCellNext = findDataCell(dataCell,tableCellNextId); + tableCellChildId = objData.children && objData.children.length > 0 ? objData.children[0] : "NULL"; + tableCellChild = findDataCell(dataCell,tableCellChildId); + tableCellParent = findDataCell(dataCell,tableCellParentId); + + // if our parent is already drawn, then we put this in the right order under our parent + if (tableCellParentId) { + if (tableCellParent && tableCellParent.length > 0) { + if (tableCellPrev && tableCellPrev.length > 0) { + last.insertAfter(tableCellPrev); + } else if (tableCellChild && tableCellChild.length > 0) { + last.insertBefore(tableCellChild); + } else if (tableCellNext && tableCellNext.length > 0) { + last.insertBefore(tableCellNext); + } else { + last.insertAfter(tableCellParent); + } + rendered = true; + } else { + rendered = false; + } + // always put it in the holding cells, and then sort when the parent comes in, in case parent is (re)drawn later + hc[tableCellName+i] = last; + } else { + if (tableCellPrev && tableCellPrev.length > 0) { + last.insertAfter(tableCellPrev); + } else if (tableCellChild && tableCellChild.length > 0) { + last.insertBefore(tableCellChild); + } else if (tableCellNext && tableCellNext.length > 0) { + last.insertBefore(tableCellNext); + } else { + last.appendTo(dataCell); + } + rendered = true; + } + // do we have any children waiting for this cell? walk down through the children/grandchildren/etc tree + if (rendered) { + last.after(this.getHoldingCells(objData,i,hc)); + } + // need to make the height of this match the line height of the tree. How? + span = last.children("span"); + + // create a span inside the div, so we can control what happens in the whole div versus inside just the text/background + span.addClass(cl+" "+valClass).html(content); + last = last.css(conf).addClass("jstree-table-cell jstree-table-cell-regular jstree-table-cell-root-"+rootid+" jstree-table-cell-"+classAdd+" "+wcl+ " " + wideValClass + (tr?" ui-state-default":"")).addClass("jstree-table-col-"+i); + // add click handler for clicking inside a table cell + last.click(cellClickHandler(tree,t,val,col,this)); + last.on("contextmenu",cellRightClickHandler(tree,t,val,col,this)); + last.hover(hoverInHandler(t, this), hoverOutHandler(t, this)); + + if (title) { + span.attr("title",title); + } + } + last.addClass("jstree-table-cell-last"+(tr?" ui-state-default":"")); + // if there is no width given for the last column, do it via automatic + if (cols[cols.length-1].width === undefined) { + last.addClass("jstree-table-width-auto").next(".jstree-table-separator").remove(); + } + } + this.element.css({"overflow-y":"auto !important"}); + }; + // clean up holding cells + this.holdingCells = {}; + }; +})); diff --git a/mfr/extensions/zip/templates/viewer.mako b/mfr/extensions/zip/templates/viewer.mako index b95cf7255..de29a152a 100644 --- a/mfr/extensions/zip/templates/viewer.mako +++ b/mfr/extensions/zip/templates/viewer.mako @@ -26,7 +26,7 @@ 'columns': [ {'header': "Name", 'width': '100%'}, {'header': "Size", 'width': 100, 'value': "size"}, - {'header': "Date", 'width': 250, 'value': "date"} + {'header': "Date", 'width': 200, 'value': "date"} ] } }); From 0741370a68630ec8fed66fee93dc9d0488604282 Mon Sep 17 00:00:00 2001 From: longze chen Date: Mon, 16 Apr 2018 18:27:34 -0400 Subject: [PATCH 09/12] Update and rewrite tests for the zip renderer --- mfr/extensions/zip/static/__init__.py | 0 tests/extensions/zip/__init__.py | 0 tests/extensions/zip/files/empty.zip | Bin 22 -> 0 bytes tests/extensions/zip/files/test-tree.zip | Bin 6775 -> 0 bytes tests/extensions/zip/files/test.zip | Bin 4180 -> 0 bytes tests/extensions/zip/files/zip-empty.zip | Bin 0 -> 146 bytes tests/extensions/zip/files/zip-test.zip | Bin 0 -> 8041 bytes tests/extensions/zip/fixtures/fixtures.json | 117 ----------- tests/extensions/zip/fixtures/obj_list.json | 22 ++ tests/extensions/zip/fixtures/obj_tree.json | 169 ++++++++++++++++ .../zip/fixtures/obj_tree_partial.json | 90 +++++++++ tests/extensions/zip/test_renderer.py | 191 +++++++++++++++--- 12 files changed, 440 insertions(+), 149 deletions(-) delete mode 100644 mfr/extensions/zip/static/__init__.py delete mode 100644 tests/extensions/zip/__init__.py delete mode 100644 tests/extensions/zip/files/empty.zip delete mode 100644 tests/extensions/zip/files/test-tree.zip delete mode 100644 tests/extensions/zip/files/test.zip create mode 100644 tests/extensions/zip/files/zip-empty.zip create mode 100644 tests/extensions/zip/files/zip-test.zip delete mode 100644 tests/extensions/zip/fixtures/fixtures.json create mode 100644 tests/extensions/zip/fixtures/obj_list.json create mode 100644 tests/extensions/zip/fixtures/obj_tree.json create mode 100644 tests/extensions/zip/fixtures/obj_tree_partial.json diff --git a/mfr/extensions/zip/static/__init__.py b/mfr/extensions/zip/static/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/extensions/zip/__init__.py b/tests/extensions/zip/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/extensions/zip/files/empty.zip b/tests/extensions/zip/files/empty.zip deleted file mode 100644 index 15cb0ecb3e219d1701294bfdf0fe3f5cb5d208e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22 NcmWIWW@Tf*000g10H*)| diff --git a/tests/extensions/zip/files/test-tree.zip b/tests/extensions/zip/files/test-tree.zip deleted file mode 100644 index 516c32b898b69fb61bf94b38b4fc6570462c0550..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6775 zcmWIWW@h1H0D%RqnciRqlwf5LU?@o~F3}H-;9)2}!x9w(#NQZ27y^J=L>M@La3Pu& zKA09gm*Du|lKi4nkX~b;zBs7fx6{x19dZz8NMHEsk^h^6E`8M>lPm&El-MV;eSC0s zi5q{`lBF!OrsyqnUDWW<^owQdHePH8ZK=`7VlesLLYt3=q&TSsI})}Pm0ST-Z-t9x$BueY`a}8*+0wh zVw!Eou4Jhrv z(hYWPpmYP*hLYxx^=^n|2@557KOANa#M0vebmNHD7lNHcDf z7HIw<>Trf3T=75yvqf7Ai{ngDgV+}!-?DRjk-Wag1eh->fEbkgA>NpX=6h~f@=wVu zQZR)3-wDb85I-DmO7cR^YJ#X5K_Q@E2+BIPK&`C3J0d{Ar|qe$7ibXTaqhgf=UHt{ zHn77E-mO*?1RBMU;xP1R5y1!}R2O1~GP(<8aG0PMkKM621KQBQK$i8AgWctFwnYue z9v%WMtd|a2Fm_zNIAw#=5y>5r5=SO~F8(US%~cfi)hS5ZE9Ud0&%s8Y6{IB6nK^Y8 zoK~Fl)%Eo8)bZSM>RahY9nZ60b@=@BynN3V`{`(C>Uy@{BVCoF7USao7o>7Bc`Ra}x(wx0UaByYPS?QV_NbjRO|)_pq|@Ho8b+FS2$|9Of9 zjb4?Wk6rshbL-pxViPZ&Y@a+WhA(hh@a(*#-!9spExX%}hMiAe6n!|}|4!Mjb-}4^(M>+iOTa?lI};=u5TBZj$x6-G z%_oo+F{~O*iz6W|LW<<&_=;pBc#)h%T9Is|4=&|QK#4eomPInch2$2=M*7eq8N;!o z*m`vrFo1Q;J*cV694(^TC~-F&5y z{eG>D7KVn}hR0VJtz4vJt-W@~1|{JPCt5TRrj;Jq7_WcWVqg1LV*?Wv?o~OD=RDZ* zG`6qvRv)j}$C)#)mrTyl{<7cx-mX1+_fE<6z3~5ZJm22AHCbt$(I*rQZQZKt51-%0 zDLdz7q<7paz5VCT*S>J|aQB&76?E3y=ABW`RuBGnVx>}qR?F7TWtQH{<&V;oxPWPUhM9BK6g_h&t(@bKH_Z5vhNSS zg-xTOe%Ec~?RBSi&fPA*CtS}v@WvLu!rQ&iZhx-N?LIkkRdS3*)xUx#E2sA{zGMH_ zt=BuF=y~3=w=ui**QVFEznH`OXIa7XpNDU!KfZl_b^f|P*>}nw{gBa5-W-{Ebn>!- zy)jp1@`~!F8iAW3x3o{au>v+h!kO_kL*T7(L<^PVvKxB?L=2-bjNA-Hwgg`~A8iH? zuVyfMnTwkKjHp=J;!J-Smf%Z&qvb55BQ{#j5?9VLGKn%n8rhg5g*>p)42J`bASS5D z1va)h;Nyk?-XQIe;uJJ$h&-Ic$AHkjq|q3r9cd7U13rcbF$dxd^id8@By;{cngA;Z z_?QyRDWFz0J|mEw^4BpN*$5ObAu3b5 z`oJ!N4dg(A8Z^{|9Mqs;9ONM)K@@joqZ$IMCpqB5PWXaK1j(qsj;Db}!9yF1!_Wf^ z&7!*zQBmXet|c2vn1Q_u94x?X6mAF31R90SyHE#WF%?($ z6gg6lav(Vn)D?t8DyXwce5C$EH3aNSU|)~}-f<;9QsX$W`4ZtU(js*M4$~0*RdhE( zA{A7xBKJa2)9@K?lrRH(7uel^7zOItAcq{tDCEW?YO2!##sy}iB6ni2n~I*vxKYyb z0Y0b$!A=8?>SFgLdWH}~F+>VDzKiNK eyigrA3up*dN1>U=3d}4F45B~?%7GdpARYkzkQo{P diff --git a/tests/extensions/zip/files/test.zip b/tests/extensions/zip/files/test.zip deleted file mode 100644 index 8338e8a2dd76d8b933f9d6c2c66b4f87cbb8bb4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4180 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 diff --git a/tests/extensions/zip/files/zip-empty.zip b/tests/extensions/zip/files/zip-empty.zip new file mode 100644 index 0000000000000000000000000000000000000000..6e0bd5d41661c16f6ae2560653749ca59fae10ef GIT binary patch literal 146 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 literal 0 HcmV?d00001 diff --git a/tests/extensions/zip/fixtures/fixtures.json b/tests/extensions/zip/fixtures/fixtures.json deleted file mode 100644 index d41bb5ee3..000000000 --- a/tests/extensions/zip/fixtures/fixtures.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "file_tree":[ - { - "text":"test.zip", - "icon":"http://mfr.osf.io/assets/zip/img/file_extension_zip.png", - "children":[ - { - "text":"test", - "icon":"http://mfr.osf.io/assets/zip/img/folder.png", - "children":[ - { - "text":".DS_Store", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":"6.1KB", - "date":"2017-11-09 16:45:02" - } - }, - { - "text":"dir 1", - "icon":"http://mfr.osf.io/assets/zip/img/folder.png", - "children":[ - { - "text":"test 1", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":" 15B", - "date":"2017-03-02 16:22:14" - } - }, - { - "text":"test 3", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":" 15B", - "date":"2017-03-02 16:22:14" - } - } - ], - "data":{ - "size":"", - "date":"2017-11-09 16:44:34" - } - }, - { - "text":"dir 2", - "icon":"http://mfr.osf.io/assets/zip/img/folder.png", - "children":[ - { - "text":"test 4", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":" 15B", - "date":"2017-03-02 16:22:14" - } - }, - { - "text":"test 5", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":" 15B", - "date":"2017-03-02 16:22:24" - } - } - ], - "data":{ - "size":"", - "date":"2017-11-09 16:45:14" - } - }, - { - "text":"test 1", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":" 15B", - "date":"2017-03-02 16:22:14" - } - }, - { - "text":"test 2", - "icon":"http://mfr.osf.io/assets/zip/img/generic-file.png", - "children":[ - - ], - "data":{ - "size":" 15B", - "date":"2017-03-02 16:22:24" - } - } - ], - "data":{ - "size":"", - "date":"2017-11-09 16:45:00" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/tests/extensions/zip/fixtures/obj_list.json b/tests/extensions/zip/fixtures/obj_list.json new file mode 100644 index 000000000..6c102f131 --- /dev/null +++ b/tests/extensions/zip/fixtures/obj_list.json @@ -0,0 +1,22 @@ +{ + "test_file_list": [ + "zip-test/", + "zip-test/file-generic-ext.mfr", + "zip-test/folder-3/", + "zip-test/folder-3/folder-3-1/", + "zip-test/folder-3/folder-3-1/text-3.docx", + "zip-test/folder-3/folder-3-1/folder-3-1-1/", + "zip-test/folder-3/folder-3-1/folder-3-1-1/image-3.bmp", + "zip-test/folder-2/", + "zip-test/folder-2/text-2.pdf", + "zip-test/folder-2/folder-2-1/", + "zip-test/folder-2/folder-2-1/image-2.jpg", + "zip-test/file-no-ext", + "zip-test/folder-1/", + "zip-test/folder-1/text-1.txt", + "zip-test/folder-1/image-1.png" + ], + "empty_file_list": [ + "zip-empty/" + ] +} diff --git a/tests/extensions/zip/fixtures/obj_tree.json b/tests/extensions/zip/fixtures/obj_tree.json new file mode 100644 index 000000000..e8f5f859b --- /dev/null +++ b/tests/extensions/zip/fixtures/obj_tree.json @@ -0,0 +1,169 @@ +{ + "test_file_tree": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-zip.png", + "text": "test.zip", + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "zip-test", + "data": { + "size": "", + "date": "2018-04-16 11:52:50" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-generic.png", + "text": "file-generic-ext.mfr", + "data": { + "size": " 29B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-3", + "data": { + "size": "", + "date": "2018-04-16 17:07:48" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-3-1", + "data": { + "size": "", + "date": "2018-04-16 11:56:56" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-docx.png", + "text": "text-3.docx", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-3-1-1", + "data": { + "size": "", + "date": "2018-04-16 11:57:12" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-bmp.png", + "text": "image-3.bmp", + "data": { + "size": " 17B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + } + ] + } + ] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-2", + "data": { + "size": "", + "date": "2018-04-16 11:56:50" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-pdf.png", + "text": "text-2.pdf", + "data": { + "size": " 37B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-2-1", + "data": { + "size": "", + "date": "2018-04-16 11:56:56" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-jpg.png", + "text": "image-2.jpg", + "data": { + "size": " 26B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + } + ] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-generic.png", + "text": "file-no-ext", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-1", + "data": { + "size": "", + "date": "2018-04-16 11:50:48" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-txt.png", + "text": "text-1.txt", + "data": { + "size": " 35B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-png.png", + "text": "image-1.png", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + } + ] + } + ] + } + ], + "empty_file_tree": [ + { + "text": "test.zip", + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-zip.png", + "children": [ + { + "text": "zip-empty", + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "data": { + "date": "2018-04-16 11:53:50", + "size": "" + }, + "children": [] + } + ] + } + ] +} diff --git a/tests/extensions/zip/fixtures/obj_tree_partial.json b/tests/extensions/zip/fixtures/obj_tree_partial.json new file mode 100644 index 000000000..2a3fe0c84 --- /dev/null +++ b/tests/extensions/zip/fixtures/obj_tree_partial.json @@ -0,0 +1,90 @@ +{ + "test_file_tree_partial": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-zip.png", + "text": "test.zip", + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "zip-test", + "data": { + "size": "", + "date": "2018-04-16 11:52:50" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-generic.png", + "text": "file-generic-ext.mfr", + "data": { + "size": " 29B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-2", + "data": { + "size": "", + "date": "2018-04-16 11:56:50" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-pdf.png", + "text": "text-2.pdf", + "data": { + "size": " 37B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-2-1", + "data": { + "size": "", + "date": "2018-04-16 11:56:56" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-jpg.png", + "text": "image-2.jpg", + "data": { + "size": " 26B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + } + ] + }, + { + "text": "folder-1", + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-txt.png", + "text": "text-1.txt", + "data": { + "size": " 35B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-png.png", + "text": "image-1.png", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + } + ] + } + ] + } + ] +} diff --git a/tests/extensions/zip/test_renderer.py b/tests/extensions/zip/test_renderer.py index ce413b4a5..efbfd65b5 100644 --- a/tests/extensions/zip/test_renderer.py +++ b/tests/extensions/zip/test_renderer.py @@ -1,46 +1,77 @@ import os -import re import json from zipfile import ZipFile import pytest -from mfr.core.provider import ProviderMetadata from mfr.extensions.zip import ZipRenderer - +from mfr.core.provider import ProviderMetadata BASE = os.path.dirname(os.path.abspath(__file__)) @pytest.fixture -def metadata(): - return ProviderMetadata('test', - '.zip', - 'text/plain', - '1234', - 'http://wb.osf.io/file/test.zip?token=1234') +def test_file(): + return ZipFile(os.path.join(BASE, 'files', 'zip-test.zip'), 'r') -@pytest.fixture -def zip_file(): - return ZipFile(os.path.join(BASE, 'files', 'test.zip'), 'r') @pytest.fixture -def zip_file_tree(): - return ZipFile(os.path.join(BASE, 'files', 'test-tree.zip'), 'r') +def empty_file(): + return ZipFile(os.path.join(BASE, 'files', 'zip-empty.zip'), 'r') @pytest.fixture -def zip_empty_file(): - return ZipFile(os.path.join(BASE, 'files', 'empty.zip'), 'r') +def test_file_path(): + return os.path.join(BASE, 'files', 'zip-test.zip') @pytest.fixture def test_file_path(): - return os.path.join(BASE, 'files', 'test.zip') + return os.path.join(BASE, 'files', 'zip-empty.zip') + + +@pytest.fixture +def test_file_obj_name_list(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/obj_list.json'), 'r') as fp: + return json.load(fp)['test_file_list'] + + +@pytest.fixture +def empty_file_obj_name_list(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/obj_list.json'), 'r') as fp: + return json.load(fp)['empty_file_list'] + + +@pytest.fixture +def test_file_obj_list(test_file): + return ZipRenderer.sanitize_obj_list(test_file.filelist) + + +@pytest.fixture +def test_file_obj_tree(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/obj_tree.json'), 'r') as fp: + return json.load(fp)['test_file_tree'] + + +@pytest.fixture +def empty_file_obj_list(empty_file): + return ZipRenderer.sanitize_obj_list(empty_file.filelist) + + +@pytest.fixture +def empty_file_obj_tree(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/obj_tree.json'), 'r') as fp: + return json.load(fp)['empty_file_tree'] + + +@pytest.fixture +def file_metadata(): + return ProviderMetadata('test', '.zip', 'text/plain', '9876543210', + 'https://test-wb.osf.io/file/test.zip?token=9876543210') @pytest.fixture -def url(): +def file_url(): return 'http://osf.io/file/test.zip' @@ -50,30 +81,126 @@ def assets_url(): @pytest.fixture -def export_url(url): - return 'http://mfr.osf.io/export?url=' + url +def export_url(file_url): + return 'http://mfr.osf.io/export?url=' + file_url @pytest.fixture -def renderer(metadata, test_file_path, url, assets_url, export_url): - return ZipRenderer(metadata, test_file_path, url, assets_url, export_url) +def test_file_renderer(file_metadata, test_file_path, file_url, assets_url, export_url): + return ZipRenderer(file_metadata, test_file_path, file_url, assets_url, export_url) @pytest.fixture -def file_tree(): - with open(os.path.join(os.path.dirname(__file__), 'fixtures/fixtures.json'), 'r') as fp: - return json.load(fp)['file_tree'] +def empty_file_renderer(file_metadata, test_file_path, file_url, assets_url, export_url): + return ZipRenderer(file_metadata, test_file_path, file_url, assets_url, export_url) -class TestZipRenderer: +@pytest.fixture +def test_file_obj_tree_partial(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/obj_tree_partial.json'), 'r') as fp: + return json.load(fp)['test_file_tree_partial'][0] + - def test_render(self, renderer): - body = renderer.render() +@pytest.fixture +def new_file_to_add(test_file_obj_tree_partial): + return { + 'full_path': 'zip-test/file-no-ext', + 'path_segment': 'file-no-ext', + 'siblings': test_file_obj_tree_partial['children'][0]['children'] + } - def test_filelist_to_tree(self, renderer, zip_file_tree, file_tree): - files = [file for file in zip_file_tree.filelist if not file.filename.startswith('__MACOSX')] +@pytest.fixture +def new_folder_to_add(test_file_obj_tree_partial): + return { + 'full_path': 'zip-test/folder-3/', + 'path_segment': 'folder-3', + 'siblings': test_file_obj_tree_partial['children'][0]['children'] + } + - actual = renderer.filelist_to_tree(files) - assert actual == file_tree +@pytest.fixture +def exiting_folder_to_skip(test_file_obj_tree_partial): + return { + 'full_path': 'zip-test/folder-2/text-2.pdf', + 'path_segment': 'folder-2', + 'siblings': test_file_obj_tree_partial['children'][0]['children'] + } + + +@pytest.fixture +def existing_folder_to_update(test_file_obj_tree_partial): + return { + 'full_path': 'zip-test/folder-1/', + 'path_segment': 'folder-1', + 'siblings': test_file_obj_tree_partial['children'][0]['children'], + 'icon': 'http://mfr.osf.io/assets/zip/img/folder.png', + 'data': { + 'size': '', + 'date': '2018-04-16 11:50:48' + }, + } + + +@pytest.fixture +def obj_zip_info_to_update(test_file): + for obj in test_file.filelist: + if obj.filename == 'zip-test/folder-1/': + return obj + + +class TestZipRenderer: + # The rendered template HTML does not contain the actual data + def test_render(self, test_file_renderer): + test_file_renderer.render() + + def test_sanitize_obj_list(self, test_file, test_file_obj_name_list): + obj_list = ZipRenderer.sanitize_obj_list(test_file.filelist) + obj_name_list = [obj.filename for obj in obj_list if obj] + assert sorted(obj_name_list) == sorted(test_file_obj_name_list) + + def test_sanitize_obj_list_empty(self, empty_file, empty_file_obj_name_list): + obj_list = ZipRenderer.sanitize_obj_list(empty_file.filelist) + obj_name_list = [obj.filename for obj in obj_list if obj] + assert sorted(obj_name_list) == sorted(empty_file_obj_name_list) + + def test_find_node_among_siblings_return_node(self, exiting_folder_to_skip): + segment = exiting_folder_to_skip['path_segment'] + siblings = exiting_folder_to_skip['siblings'] + assert ZipRenderer.find_node_among_siblings(segment, siblings) + + def test_find_node_among_siblings_return_none_file(self, new_file_to_add): + segment = new_file_to_add['path_segment'] + siblings = new_file_to_add['siblings'] + assert not ZipRenderer.find_node_among_siblings(segment, siblings) + + def test_find_node_among_siblings_return_none_folder(self, new_folder_to_add): + segment = new_folder_to_add['path_segment'] + siblings = new_folder_to_add['siblings'] + assert not ZipRenderer.find_node_among_siblings(segment, siblings) + + def test_icon_exists_true(self): + assert ZipRenderer.icon_exists('png') + + def test_icon_exists_false(self): + assert not ZipRenderer.icon_exists('mfr') + + def test_update_node_with_attributes(self, test_file_renderer, obj_zip_info_to_update, + existing_folder_to_update): + segment = existing_folder_to_update['path_segment'] + siblings = existing_folder_to_update['siblings'] + node_to_update = ZipRenderer.find_node_among_siblings(segment, siblings) + assert not node_to_update.get('data', None) and not node_to_update.get('icon', None) + test_file_renderer.update_node_with_attributes(node_to_update, obj_zip_info_to_update) + assert node_to_update.get('data', {}) == existing_folder_to_update['data'] + assert node_to_update.get('icon', {}) == existing_folder_to_update['icon'] + + def test_obj_list_to_tree(self, test_file_obj_list, test_file_renderer, test_file_obj_tree): + obj_tree = test_file_renderer.obj_list_to_tree(test_file_obj_list) + assert obj_tree == test_file_obj_tree + + def test_obj_list_to_tree_empty(self, empty_file_obj_list, empty_file_renderer, + empty_file_obj_tree): + obj_tree = empty_file_renderer.obj_list_to_tree(empty_file_obj_list) + assert obj_tree == empty_file_obj_tree From 38e2e1faff72b050a648da490b8f57f7559da666 Mon Sep 17 00:00:00 2001 From: longze chen Date: Mon, 13 Aug 2018 10:28:52 -0400 Subject: [PATCH 10/12] Sort the file list and simplify the tree buidling process With a sorted list, new node can be created and updated at the same time. For example, when adding "/root/a/b/c" to the tree, node "a/" and node "b/" must exist. Just find the sibling list of node "b/" and add "c" to the list. --- mfr/extensions/zip/render.py | 110 +++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 38 deletions(-) diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index f37bc3851..dccfc1798 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -27,46 +27,90 @@ def render(self): zip_file = ZipFile(self.file_path, 'r') - # ``ZipFile.filelist`` contains both files and folder. Using ``obj`` for better clarity. - obj_list = self.sanitize_obj_list(zip_file.filelist) - obj_tree = self.obj_list_to_tree(obj_list) + # ``ZipFile.filelist`` contains both files and folders. Using ``obj`` for better clarity. + sorted_obj_list = self.sanitize_obj_list(zip_file.filelist, sort=True) + obj_tree = self.sorted_obj_list_to_tree(sorted_obj_list) return self.TEMPLATE.render(data=obj_tree, base=self.assets_url) - def obj_list_to_tree(self, obj_list: list) -> List[dict]: - """Build the object tree from the object list. Each node is represented using a dictionary, - where non-leaf nodes represent folders and leaves represent files. Return a list which - contains only one element: the root node. + def sorted_obj_list_to_tree(self, sorted_obj_list: list) -> List[dict]: + """Build the object tree from a sorted object list. Each node is a dictionary. Leaf nodes + represent files and empty folders. Non-leaf nodes represent non-emtpy folders. Return a + list of dictionary that contains only one element: the root node. The tree can be accessed + and searched via the ``children`` key, of which the value is a list of child nodes. - :param obj_list: the object list + :param sorted_obj_list: the sorted object list :rtype: ``List[dict]`` - :return: a list which contains only one element: the root node. + :return: a list that contains only one element: the root node. """ - # Build the root node of the tree tree_root = { 'text': self.metadata.name + self.metadata.ext, 'icon': self.assets_url + '/img/file-ext-zip.png', 'children': [] } + # Iterate through each path and build the tree + for obj in sorted_obj_list: + path_from_root = obj.filename + print(path_from_root) + path_segments = [segment for segment in path_from_root.split('/') if segment] + # Ignore the root tree node + if len(path_segments) == 1: + continue + # Find the parent node of the current object, always start from the root node + parent = tree_root + for index, segment in enumerate(path_segments): + # the first segment is the tree node, skip + if index == 0: + continue + # last segment is the current object, parents must have been found, end loop + if index == len(path_segments) - 1: + break + # for a sorted list, every segment on the path must have a tree node + sibling_list = parent.get('children', []) + parent = self.find_node_among_siblings(segment, sibling_list) + # TODO: do we need this assert? + assert parent + # Create a new node, update details and add it to the sibling list + sibling_list = parent.get('children', []) + is_folder = path_from_root[-1] == '/' + new_node = { + 'text': path_segments[-1], + 'children': [], + } + self.update_node_with_attributes(new_node, obj, is_folder=is_folder) + sibling_list.append(new_node) + return [tree_root, ] - for obj in obj_list: + # TODO: should we remove this function? + def unsorted_obj_list_to_tree(self, obj_list: list) -> List[dict]: + """Build the object tree from an object list. Each node is a dictionary, where leaf nodes + represent empty folders and files and non-leaf nodes represent non-emtpy folders. Return a + list that contains only one element: the root node. + :param obj_list: the object list + :rtype: ``List[dict]`` + :return: a list that contains only one element: the root node. + """ + # Build the root node of the tree + tree_root = { + 'text': self.metadata.name + self.metadata.ext, + 'icon': self.assets_url + '/img/file-ext-zip.png', + 'children': [] + } + for obj in obj_list: # For each object, always start from the root of the tree parent = tree_root path_from_root = obj.filename is_folder = path_from_root[-1] == '/' path_segments = [segment for segment in path_from_root.split('/') if segment] last_index = len(path_segments) - 1 - # Iterate through the path segments list. Add the segment to tree if not already there # and update the details with the current object if it is the last one along the path. for index, segment in enumerate(path_segments): - # Check if the segment has already been added siblings = parent.get('children', []) current_node = self.find_node_among_siblings(segment, siblings) - # Found if current_node: if index == last_index: @@ -78,7 +122,6 @@ def obj_list_to_tree(self, obj_list: list) -> List[dict]: # Otherwise, jump to the next segment with the current node as the new parent parent = current_node continue - # Not found new_node = { 'text': segment, @@ -90,13 +133,11 @@ def obj_list_to_tree(self, obj_list: list) -> List[dict]: self.update_node_with_attributes(new_node, obj, is_folder=is_folder) siblings.append(new_node) break - # Otherwise, append the new node to tree, jump to the next segment with the current # node as the new parent siblings.append(new_node) parent = new_node continue - return [tree_root, ] def update_node_with_attributes(self, node: dict, obj: ZipInfo, is_folder: bool=True) -> None: @@ -106,10 +147,8 @@ def update_node_with_attributes(self, node: dict, obj: ZipInfo, is_folder: bool= :param obj: the object that the node represents :param is_folder: the folder flag """ - date = '%d-%02d-%02d %02d:%02d:%02d' % obj.date_time[:6] size = sizeof_fmt(int(obj.file_size)) if obj.file_size else '' - if is_folder: icon_path = self.assets_url + '/img/folder.png' else: @@ -118,7 +157,6 @@ def update_node_with_attributes(self, node: dict, obj: ZipInfo, is_folder: bool= icon_path = '{}/img/file-ext-{}.png'.format(self.assets_url, ext) else: icon_path = '{}/img/file-ext-generic.png'.format(self.assets_url) - node.update({ 'icon': icon_path, 'data': { @@ -132,11 +170,10 @@ def icon_exists(ext: str) -> bool: """Check if an icon exists for the given file type. The extension string is converted to lower case. - :param ext: the file extension str + :param ext: the file extension string :rtype: ``bool`` - :return: ``True`` if found; ``False`` otherwise + :return: ``True`` if found, ``False`` otherwise """ - return os.path.isfile(os.path.join( os.path.dirname(__file__), 'static', @@ -145,19 +182,19 @@ def icon_exists(ext: str) -> bool: )) @staticmethod - def sanitize_obj_list(obj_list: list) -> list: - """Remove macOS system and temporary files. Current implementation only removes '__MACOSX/' - and '.DS_Store'. If necessary, extend the sanitizer to exclude more file types. + def sanitize_obj_list(obj_list: list, sort: bool=False) -> list: + """Remove macOS system and temporary files with an option flag to sort the list. Current + implementation only removes '__MACOSX/' and '.DS_Store'. + + TODO: If necessary, extend the sanitizer to exclude more file types. - :param obj_list: a list of full paths for each file and folder in the zip + :param obj_list: a list of full paths for each file or folder in the zip + :param sort: the flag for returning a sorted list :rtype: ``list`` :return: a sanitized list """ - sanitized_obj_list = [] - for obj in obj_list: - obj_path = obj.filename # Ignore macOS '__MACOSX' folder for zip file if obj_path.startswith('__MACOSX/'): @@ -165,24 +202,21 @@ def sanitize_obj_list(obj_list: list) -> list: # Ignore macOS '.DS_STORE' file if obj_path == '.DS_Store' or obj_path.endswith('/.DS_Store'): continue - sanitized_obj_list.append(obj) - + if sort: + return sorted(sanitized_obj_list, key=lambda obj: obj.filename) return sanitized_obj_list @staticmethod def find_node_among_siblings(segment: str, siblings: list) -> Union[dict, None]: - """Find if the folder or file represented by the path segment has already been added. + """Find the folder or file node represented by the path segment. :param segment: the path segment - :param siblings: the list containing all added sibling nodes + :param siblings: the list containing all sibling nodes :rtype: ``Union[dict, None]`` - :return: the node if found or ``None`` otherwise + :return: the node dictionary if found or ``None`` otherwise """ - for sibling in siblings: - if sibling.get('text', '') == segment: return sibling - return None From 41fc95aee786b0b30e5d04de21a7482683458309 Mon Sep 17 00:00:00 2001 From: longze chen Date: Mon, 13 Aug 2018 14:54:21 -0400 Subject: [PATCH 11/12] Add the root folder node under the root zip node |- root-folder.zip |- root-folder/ |- folder_1/ |- file_1.a |- file_2.b --- mfr/extensions/zip/render.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index dccfc1798..e02fc11d4 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -54,15 +54,9 @@ def sorted_obj_list_to_tree(self, sorted_obj_list: list) -> List[dict]: path_from_root = obj.filename print(path_from_root) path_segments = [segment for segment in path_from_root.split('/') if segment] - # Ignore the root tree node - if len(path_segments) == 1: - continue # Find the parent node of the current object, always start from the root node parent = tree_root for index, segment in enumerate(path_segments): - # the first segment is the tree node, skip - if index == 0: - continue # last segment is the current object, parents must have been found, end loop if index == len(path_segments) - 1: break From 098aa903e0e687adc3d00c6a0a29a690ef58c05c Mon Sep 17 00:00:00 2001 From: longze chen Date: Mon, 13 Aug 2018 15:02:54 -0400 Subject: [PATCH 12/12] Add tests and fixtures for build zip tree with sorted file list In addition, remove left-over debug statements --- mfr/extensions/zip/render.py | 1 - tests/extensions/zip/fixtures/obj_tree.json | 150 ++++++++++++++++++++ tests/extensions/zip/test_renderer.py | 41 +++++- 3 files changed, 184 insertions(+), 8 deletions(-) diff --git a/mfr/extensions/zip/render.py b/mfr/extensions/zip/render.py index e02fc11d4..8abde946f 100644 --- a/mfr/extensions/zip/render.py +++ b/mfr/extensions/zip/render.py @@ -52,7 +52,6 @@ def sorted_obj_list_to_tree(self, sorted_obj_list: list) -> List[dict]: # Iterate through each path and build the tree for obj in sorted_obj_list: path_from_root = obj.filename - print(path_from_root) path_segments = [segment for segment in path_from_root.split('/') if segment] # Find the parent node of the current object, always start from the root node parent = tree_root diff --git a/tests/extensions/zip/fixtures/obj_tree.json b/tests/extensions/zip/fixtures/obj_tree.json index e8f5f859b..52fa7f94e 100644 --- a/tests/extensions/zip/fixtures/obj_tree.json +++ b/tests/extensions/zip/fixtures/obj_tree.json @@ -149,6 +149,156 @@ ] } ], + "test_file_tree_sorted": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-zip.png", + "text": "test.zip", + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "zip-test", + "data": { + "size": "", + "date": "2018-04-16 11:52:50" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-generic.png", + "text": "file-generic-ext.mfr", + "data": { + "size": " 29B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-generic.png", + "text": "file-no-ext", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-1", + "data": { + "size": "", + "date": "2018-04-16 11:50:48" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-png.png", + "text": "image-1.png", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-txt.png", + "text": "text-1.txt", + "data": { + "size": " 35B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-2", + "data": { + "size": "", + "date": "2018-04-16 11:56:50" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-2-1", + "data": { + "size": "", + "date": "2018-04-16 11:56:56" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-jpg.png", + "text": "image-2.jpg", + "data": { + "size": " 26B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-pdf.png", + "text": "text-2.pdf", + "data": { + "size": " 37B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-3", + "data": { + "size": "", + "date": "2018-04-16 17:07:48" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-3-1", + "data": { + "size": "", + "date": "2018-04-16 11:56:56" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/folder.png", + "text": "folder-3-1-1", + "data": { + "size": "", + "date": "2018-04-16 11:57:12" + }, + "children": [ + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-bmp.png", + "text": "image-3.bmp", + "data": { + "size": " 17B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + }, + { + "icon": "http://mfr.osf.io/assets/zip/img/file-ext-docx.png", + "text": "text-3.docx", + "data": { + "size": " 19B", + "date": "2018-03-27 15:42:32" + }, + "children": [] + } + ] + } + ] + } + ] + } + ] + } + ], "empty_file_tree": [ { "text": "test.zip", diff --git a/tests/extensions/zip/test_renderer.py b/tests/extensions/zip/test_renderer.py index efbfd65b5..877b4beba 100644 --- a/tests/extensions/zip/test_renderer.py +++ b/tests/extensions/zip/test_renderer.py @@ -44,7 +44,12 @@ def empty_file_obj_name_list(): @pytest.fixture def test_file_obj_list(test_file): - return ZipRenderer.sanitize_obj_list(test_file.filelist) + return ZipRenderer.sanitize_obj_list(test_file.filelist, sort=False) + + +@pytest.fixture +def test_file_sorted_obj_list(test_file): + return ZipRenderer.sanitize_obj_list(test_file.filelist, sort=True) @pytest.fixture @@ -53,9 +58,15 @@ def test_file_obj_tree(): return json.load(fp)['test_file_tree'] +@pytest.fixture +def test_file_obj_tree_sorted(): + with open(os.path.join(os.path.dirname(__file__), 'fixtures/obj_tree.json'), 'r') as fp: + return json.load(fp)['test_file_tree_sorted'] + + @pytest.fixture def empty_file_obj_list(empty_file): - return ZipRenderer.sanitize_obj_list(empty_file.filelist) + return ZipRenderer.sanitize_obj_list(empty_file.filelist, sort=False) @pytest.fixture @@ -160,6 +171,11 @@ def test_sanitize_obj_list(self, test_file, test_file_obj_name_list): obj_name_list = [obj.filename for obj in obj_list if obj] assert sorted(obj_name_list) == sorted(test_file_obj_name_list) + def test_sanitize_and_sort_obj_list(self, test_file, test_file_obj_name_list): + sorted_obj_list = ZipRenderer.sanitize_obj_list(test_file.filelist, sort=True) + sorted_obj_name_list = [obj.filename for obj in sorted_obj_list if obj] + assert sorted_obj_name_list == sorted(test_file_obj_name_list) + def test_sanitize_obj_list_empty(self, empty_file, empty_file_obj_name_list): obj_list = ZipRenderer.sanitize_obj_list(empty_file.filelist) obj_name_list = [obj.filename for obj in obj_list if obj] @@ -196,11 +212,22 @@ def test_update_node_with_attributes(self, test_file_renderer, obj_zip_info_to_u assert node_to_update.get('data', {}) == existing_folder_to_update['data'] assert node_to_update.get('icon', {}) == existing_folder_to_update['icon'] - def test_obj_list_to_tree(self, test_file_obj_list, test_file_renderer, test_file_obj_tree): - obj_tree = test_file_renderer.obj_list_to_tree(test_file_obj_list) + def test_unsorted_obj_list_to_tree(self, test_file_obj_list, test_file_renderer, + test_file_obj_tree): + obj_tree = test_file_renderer.unsorted_obj_list_to_tree(test_file_obj_list) assert obj_tree == test_file_obj_tree - def test_obj_list_to_tree_empty(self, empty_file_obj_list, empty_file_renderer, - empty_file_obj_tree): - obj_tree = empty_file_renderer.obj_list_to_tree(empty_file_obj_list) + def test_sorted_obj_list_to_tree(self, test_file_sorted_obj_list, test_file_renderer, + test_file_obj_tree_sorted): + obj_tree = test_file_renderer.sorted_obj_list_to_tree(test_file_sorted_obj_list) + assert obj_tree == test_file_obj_tree_sorted + + def test_unsorted_obj_list_to_tree_empty(self, empty_file_obj_list, empty_file_renderer, + empty_file_obj_tree): + obj_tree = empty_file_renderer.unsorted_obj_list_to_tree(empty_file_obj_list) + assert obj_tree == empty_file_obj_tree + + def test_sorted_obj_list_to_tree_empty(self, empty_file_obj_list, empty_file_renderer, + empty_file_obj_tree): + obj_tree = empty_file_renderer.sorted_obj_list_to_tree(empty_file_obj_list) assert obj_tree == empty_file_obj_tree