├── .dockerignore
├── .github
└── workflows
│ └── test-build.yml
├── .gitignore
├── .mailmap
├── AUTHORS.rst
├── CHANGELOG
├── CONTRIBUTING.rst
├── Dockerfile
├── LICENSE
├── PULL_REQUEST_TEMPLATE.md
├── README-docker-compose.md
├── README.md
├── constraints.txt
├── dev-requirements.txt
├── doc-requirements.txt
├── docs
├── Makefile
├── _templates
│ ├── side-primary.html
│ └── side-secondary.html
├── _themes
│ ├── .gitignore
│ ├── LICENSE
│ ├── flask_theme_support.py
│ ├── kr
│ │ ├── layout.html
│ │ ├── relations.html
│ │ ├── static
│ │ │ ├── flasky.css_t
│ │ │ └── small_flask.css
│ │ └── theme.conf
│ └── kr_small
│ │ ├── layout.html
│ │ ├── static
│ │ └── flasky.css_t
│ │ └── theme.conf
├── authors.rst
├── changelog.rst
├── code.rst
├── conf.py
├── contributing.rst
├── core.rst
├── extensions.rst
├── index.rst
├── install.rst
├── integrations.rst
├── license.rst
├── make.bat
├── overview.rst
├── providers.rst
├── quickstart.rst
└── server.rst
├── mfr
├── __init__.py
├── core
│ ├── __init__.py
│ ├── exceptions.py
│ ├── extension.py
│ ├── metrics.py
│ ├── provider.py
│ ├── remote_logging.py
│ └── utils.py
├── extensions
│ ├── __init__.py
│ ├── audio
│ │ ├── __init__.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── codepygments
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── render.py
│ │ ├── settings.py
│ │ ├── static
│ │ │ └── css
│ │ │ │ └── default.css
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── docx
│ │ ├── __init__.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── image
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── export.py
│ │ ├── render.py
│ │ ├── settings.py
│ │ ├── static
│ │ │ ├── images
│ │ │ │ └── question-circle.png
│ │ │ └── js
│ │ │ │ ├── jquery.mousewheel.min.js
│ │ │ │ └── jquery.zoom.js
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── ipynb
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── render.py
│ │ ├── static
│ │ │ └── css
│ │ │ │ ├── ipynb.css
│ │ │ │ └── pygments.css
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── jamovi
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── html_processor.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── jasp
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── html_processor.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── jsc3d
│ │ ├── __init__.py
│ │ ├── export.py
│ │ ├── freecad_converter.py
│ │ ├── render.py
│ │ ├── settings.py
│ │ ├── static
│ │ │ ├── images
│ │ │ │ └── question-circle.png
│ │ │ └── js
│ │ │ │ ├── jsc3d.3ds.js
│ │ │ │ ├── jsc3d.ctm.js
│ │ │ │ ├── jsc3d.js
│ │ │ │ ├── jsc3d.touch.js
│ │ │ │ ├── jsc3d.webgl.js
│ │ │ │ └── jsc3d_ie.js
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── md
│ │ ├── __init__.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── pdb
│ │ ├── __init__.py
│ │ ├── render.py
│ │ ├── settings.py
│ │ ├── static
│ │ │ ├── css
│ │ │ │ ├── foundation.css
│ │ │ │ ├── jquery-ui.min.css
│ │ │ │ ├── qunit.css
│ │ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png
│ │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png
│ │ │ │ ├── ui-bg_flat_10_000000_40x100.png
│ │ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png
│ │ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png
│ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png
│ │ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png
│ │ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png
│ │ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png
│ │ │ │ ├── ui-icons_222222_256x240.png
│ │ │ │ ├── ui-icons_228ef1_256x240.png
│ │ │ │ ├── ui-icons_ef8c08_256x240.png
│ │ │ │ ├── ui-icons_ffd27a_256x240.png
│ │ │ │ └── ui-icons_ffffff_256x240.png
│ │ │ └── js
│ │ │ │ ├── GLmol.js
│ │ │ │ ├── Three49custom.js
│ │ │ │ ├── animation.js
│ │ │ │ ├── buffer-allocators.js
│ │ │ │ ├── cam.js
│ │ │ │ ├── chain-data.js
│ │ │ │ ├── core.js
│ │ │ │ ├── framebuffer.js
│ │ │ │ ├── geom-builders.js
│ │ │ │ ├── geom.js
│ │ │ │ ├── gl-matrix.js
│ │ │ │ ├── indexed-vertex-array.js
│ │ │ │ ├── io.js
│ │ │ │ ├── mol.js
│ │ │ │ ├── render.js
│ │ │ │ ├── scene.js
│ │ │ │ ├── shade.js
│ │ │ │ ├── shaders.js
│ │ │ │ ├── slab.js
│ │ │ │ ├── symmetry.js
│ │ │ │ ├── trace.js
│ │ │ │ ├── vert-assoc.js
│ │ │ │ ├── vertex-array-base.js
│ │ │ │ ├── vertex-array.js
│ │ │ │ └── viewer.js
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── pdf
│ │ ├── __init__.py
│ │ ├── exceptions.py
│ │ ├── export.py
│ │ ├── render.py
│ │ ├── settings.py
│ │ ├── static
│ │ │ ├── build
│ │ │ │ ├── pdf.js
│ │ │ │ ├── pdf.min.js
│ │ │ │ ├── pdf.worker.js
│ │ │ │ └── pdf.worker.min.js
│ │ │ ├── css
│ │ │ │ └── minimal.css
│ │ │ ├── html
│ │ │ │ ├── pdf with selection alerts.html
│ │ │ │ └── pdf.html
│ │ │ ├── images
│ │ │ │ ├── leftarrow.png
│ │ │ │ └── rightarrow.png
│ │ │ ├── js
│ │ │ │ ├── compatibility.js
│ │ │ │ ├── jquery.min.js
│ │ │ │ ├── pdf.js
│ │ │ │ ├── pdf.min.js
│ │ │ │ ├── pdf.min.worker.js
│ │ │ │ ├── pdf.worker.js
│ │ │ │ ├── pdf_find_bar.js
│ │ │ │ ├── pdf_find_bar.min.js
│ │ │ │ ├── pdf_find_controller.js
│ │ │ │ ├── pdf_find_controller.min.js
│ │ │ │ ├── text_layer_builder.js
│ │ │ │ ├── text_layer_builder.min.js
│ │ │ │ ├── ui_utils.js
│ │ │ │ └── ui_utils.min.js
│ │ │ └── web
│ │ │ │ ├── cmaps
│ │ │ │ ├── 78-EUC-H.bcmap
│ │ │ │ ├── 78-EUC-V.bcmap
│ │ │ │ ├── 78-H.bcmap
│ │ │ │ ├── 78-RKSJ-H.bcmap
│ │ │ │ ├── 78-RKSJ-V.bcmap
│ │ │ │ ├── 78-V.bcmap
│ │ │ │ ├── 78ms-RKSJ-H.bcmap
│ │ │ │ ├── 78ms-RKSJ-V.bcmap
│ │ │ │ ├── 83pv-RKSJ-H.bcmap
│ │ │ │ ├── 90ms-RKSJ-H.bcmap
│ │ │ │ ├── 90ms-RKSJ-V.bcmap
│ │ │ │ ├── 90msp-RKSJ-H.bcmap
│ │ │ │ ├── 90msp-RKSJ-V.bcmap
│ │ │ │ ├── 90pv-RKSJ-H.bcmap
│ │ │ │ ├── 90pv-RKSJ-V.bcmap
│ │ │ │ ├── Add-H.bcmap
│ │ │ │ ├── Add-RKSJ-H.bcmap
│ │ │ │ ├── Add-RKSJ-V.bcmap
│ │ │ │ ├── Add-V.bcmap
│ │ │ │ ├── Adobe-CNS1-0.bcmap
│ │ │ │ ├── Adobe-CNS1-1.bcmap
│ │ │ │ ├── Adobe-CNS1-2.bcmap
│ │ │ │ ├── Adobe-CNS1-3.bcmap
│ │ │ │ ├── Adobe-CNS1-4.bcmap
│ │ │ │ ├── Adobe-CNS1-5.bcmap
│ │ │ │ ├── Adobe-CNS1-6.bcmap
│ │ │ │ ├── Adobe-CNS1-UCS2.bcmap
│ │ │ │ ├── Adobe-GB1-0.bcmap
│ │ │ │ ├── Adobe-GB1-1.bcmap
│ │ │ │ ├── Adobe-GB1-2.bcmap
│ │ │ │ ├── Adobe-GB1-3.bcmap
│ │ │ │ ├── Adobe-GB1-4.bcmap
│ │ │ │ ├── Adobe-GB1-5.bcmap
│ │ │ │ ├── Adobe-GB1-UCS2.bcmap
│ │ │ │ ├── Adobe-Japan1-0.bcmap
│ │ │ │ ├── Adobe-Japan1-1.bcmap
│ │ │ │ ├── Adobe-Japan1-2.bcmap
│ │ │ │ ├── Adobe-Japan1-3.bcmap
│ │ │ │ ├── Adobe-Japan1-4.bcmap
│ │ │ │ ├── Adobe-Japan1-5.bcmap
│ │ │ │ ├── Adobe-Japan1-6.bcmap
│ │ │ │ ├── Adobe-Japan1-UCS2.bcmap
│ │ │ │ ├── Adobe-Korea1-0.bcmap
│ │ │ │ ├── Adobe-Korea1-1.bcmap
│ │ │ │ ├── Adobe-Korea1-2.bcmap
│ │ │ │ ├── Adobe-Korea1-UCS2.bcmap
│ │ │ │ ├── B5-H.bcmap
│ │ │ │ ├── B5-V.bcmap
│ │ │ │ ├── B5pc-H.bcmap
│ │ │ │ ├── B5pc-V.bcmap
│ │ │ │ ├── CNS-EUC-H.bcmap
│ │ │ │ ├── CNS-EUC-V.bcmap
│ │ │ │ ├── CNS1-H.bcmap
│ │ │ │ ├── CNS1-V.bcmap
│ │ │ │ ├── CNS2-H.bcmap
│ │ │ │ ├── CNS2-V.bcmap
│ │ │ │ ├── ETHK-B5-H.bcmap
│ │ │ │ ├── ETHK-B5-V.bcmap
│ │ │ │ ├── ETen-B5-H.bcmap
│ │ │ │ ├── ETen-B5-V.bcmap
│ │ │ │ ├── ETenms-B5-H.bcmap
│ │ │ │ ├── ETenms-B5-V.bcmap
│ │ │ │ ├── EUC-H.bcmap
│ │ │ │ ├── EUC-V.bcmap
│ │ │ │ ├── Ext-H.bcmap
│ │ │ │ ├── Ext-RKSJ-H.bcmap
│ │ │ │ ├── Ext-RKSJ-V.bcmap
│ │ │ │ ├── Ext-V.bcmap
│ │ │ │ ├── GB-EUC-H.bcmap
│ │ │ │ ├── GB-EUC-V.bcmap
│ │ │ │ ├── GB-H.bcmap
│ │ │ │ ├── GB-V.bcmap
│ │ │ │ ├── GBK-EUC-H.bcmap
│ │ │ │ ├── GBK-EUC-V.bcmap
│ │ │ │ ├── GBK2K-H.bcmap
│ │ │ │ ├── GBK2K-V.bcmap
│ │ │ │ ├── GBKp-EUC-H.bcmap
│ │ │ │ ├── GBKp-EUC-V.bcmap
│ │ │ │ ├── GBT-EUC-H.bcmap
│ │ │ │ ├── GBT-EUC-V.bcmap
│ │ │ │ ├── GBT-H.bcmap
│ │ │ │ ├── GBT-V.bcmap
│ │ │ │ ├── GBTpc-EUC-H.bcmap
│ │ │ │ ├── GBTpc-EUC-V.bcmap
│ │ │ │ ├── GBpc-EUC-H.bcmap
│ │ │ │ ├── GBpc-EUC-V.bcmap
│ │ │ │ ├── H.bcmap
│ │ │ │ ├── HKdla-B5-H.bcmap
│ │ │ │ ├── HKdla-B5-V.bcmap
│ │ │ │ ├── HKdlb-B5-H.bcmap
│ │ │ │ ├── HKdlb-B5-V.bcmap
│ │ │ │ ├── HKgccs-B5-H.bcmap
│ │ │ │ ├── HKgccs-B5-V.bcmap
│ │ │ │ ├── HKm314-B5-H.bcmap
│ │ │ │ ├── HKm314-B5-V.bcmap
│ │ │ │ ├── HKm471-B5-H.bcmap
│ │ │ │ ├── HKm471-B5-V.bcmap
│ │ │ │ ├── HKscs-B5-H.bcmap
│ │ │ │ ├── HKscs-B5-V.bcmap
│ │ │ │ ├── Hankaku.bcmap
│ │ │ │ ├── Hiragana.bcmap
│ │ │ │ ├── KSC-EUC-H.bcmap
│ │ │ │ ├── KSC-EUC-V.bcmap
│ │ │ │ ├── KSC-H.bcmap
│ │ │ │ ├── KSC-Johab-H.bcmap
│ │ │ │ ├── KSC-Johab-V.bcmap
│ │ │ │ ├── KSC-V.bcmap
│ │ │ │ ├── KSCms-UHC-H.bcmap
│ │ │ │ ├── KSCms-UHC-HW-H.bcmap
│ │ │ │ ├── KSCms-UHC-HW-V.bcmap
│ │ │ │ ├── KSCms-UHC-V.bcmap
│ │ │ │ ├── KSCpc-EUC-H.bcmap
│ │ │ │ ├── KSCpc-EUC-V.bcmap
│ │ │ │ ├── Katakana.bcmap
│ │ │ │ ├── LICENSE
│ │ │ │ ├── NWP-H.bcmap
│ │ │ │ ├── NWP-V.bcmap
│ │ │ │ ├── RKSJ-H.bcmap
│ │ │ │ ├── RKSJ-V.bcmap
│ │ │ │ ├── Roman.bcmap
│ │ │ │ ├── UniCNS-UCS2-H.bcmap
│ │ │ │ ├── UniCNS-UCS2-V.bcmap
│ │ │ │ ├── UniCNS-UTF16-H.bcmap
│ │ │ │ ├── UniCNS-UTF16-V.bcmap
│ │ │ │ ├── UniCNS-UTF32-H.bcmap
│ │ │ │ ├── UniCNS-UTF32-V.bcmap
│ │ │ │ ├── UniCNS-UTF8-H.bcmap
│ │ │ │ ├── UniCNS-UTF8-V.bcmap
│ │ │ │ ├── UniGB-UCS2-H.bcmap
│ │ │ │ ├── UniGB-UCS2-V.bcmap
│ │ │ │ ├── UniGB-UTF16-H.bcmap
│ │ │ │ ├── UniGB-UTF16-V.bcmap
│ │ │ │ ├── UniGB-UTF32-H.bcmap
│ │ │ │ ├── UniGB-UTF32-V.bcmap
│ │ │ │ ├── UniGB-UTF8-H.bcmap
│ │ │ │ ├── UniGB-UTF8-V.bcmap
│ │ │ │ ├── UniJIS-UCS2-H.bcmap
│ │ │ │ ├── UniJIS-UCS2-HW-H.bcmap
│ │ │ │ ├── UniJIS-UCS2-HW-V.bcmap
│ │ │ │ ├── UniJIS-UCS2-V.bcmap
│ │ │ │ ├── UniJIS-UTF16-H.bcmap
│ │ │ │ ├── UniJIS-UTF16-V.bcmap
│ │ │ │ ├── UniJIS-UTF32-H.bcmap
│ │ │ │ ├── UniJIS-UTF32-V.bcmap
│ │ │ │ ├── UniJIS-UTF8-H.bcmap
│ │ │ │ ├── UniJIS-UTF8-V.bcmap
│ │ │ │ ├── UniJIS2004-UTF16-H.bcmap
│ │ │ │ ├── UniJIS2004-UTF16-V.bcmap
│ │ │ │ ├── UniJIS2004-UTF32-H.bcmap
│ │ │ │ ├── UniJIS2004-UTF32-V.bcmap
│ │ │ │ ├── UniJIS2004-UTF8-H.bcmap
│ │ │ │ ├── UniJIS2004-UTF8-V.bcmap
│ │ │ │ ├── UniJISPro-UCS2-HW-V.bcmap
│ │ │ │ ├── UniJISPro-UCS2-V.bcmap
│ │ │ │ ├── UniJISPro-UTF8-V.bcmap
│ │ │ │ ├── UniJISX0213-UTF32-H.bcmap
│ │ │ │ ├── UniJISX0213-UTF32-V.bcmap
│ │ │ │ ├── UniJISX02132004-UTF32-H.bcmap
│ │ │ │ ├── UniJISX02132004-UTF32-V.bcmap
│ │ │ │ ├── UniKS-UCS2-H.bcmap
│ │ │ │ ├── UniKS-UCS2-V.bcmap
│ │ │ │ ├── UniKS-UTF16-H.bcmap
│ │ │ │ ├── UniKS-UTF16-V.bcmap
│ │ │ │ ├── UniKS-UTF32-H.bcmap
│ │ │ │ ├── UniKS-UTF32-V.bcmap
│ │ │ │ ├── UniKS-UTF8-H.bcmap
│ │ │ │ ├── UniKS-UTF8-V.bcmap
│ │ │ │ ├── V.bcmap
│ │ │ │ └── WP-Symbol.bcmap
│ │ │ │ ├── compatibility.js
│ │ │ │ ├── compressed.tracemonkey-pldi-09.pdf
│ │ │ │ ├── debugger.js
│ │ │ │ ├── images
│ │ │ │ ├── annotation-check.svg
│ │ │ │ ├── annotation-comment.svg
│ │ │ │ ├── annotation-help.svg
│ │ │ │ ├── annotation-insert.svg
│ │ │ │ ├── annotation-key.svg
│ │ │ │ ├── annotation-newparagraph.svg
│ │ │ │ ├── annotation-noicon.svg
│ │ │ │ ├── annotation-note.svg
│ │ │ │ ├── annotation-paragraph.svg
│ │ │ │ ├── findbarButton-next-rtl.png
│ │ │ │ ├── findbarButton-next-rtl@2x.png
│ │ │ │ ├── findbarButton-next.png
│ │ │ │ ├── findbarButton-next@2x.png
│ │ │ │ ├── findbarButton-previous-rtl.png
│ │ │ │ ├── findbarButton-previous-rtl@2x.png
│ │ │ │ ├── findbarButton-previous.png
│ │ │ │ ├── findbarButton-previous@2x.png
│ │ │ │ ├── grab.cur
│ │ │ │ ├── grabbing.cur
│ │ │ │ ├── loading-icon.gif
│ │ │ │ ├── loading-small.png
│ │ │ │ ├── loading-small@2x.png
│ │ │ │ ├── secondaryToolbarButton-documentProperties.png
│ │ │ │ ├── secondaryToolbarButton-documentProperties@2x.png
│ │ │ │ ├── secondaryToolbarButton-firstPage.png
│ │ │ │ ├── secondaryToolbarButton-firstPage@2x.png
│ │ │ │ ├── secondaryToolbarButton-handTool.png
│ │ │ │ ├── secondaryToolbarButton-handTool@2x.png
│ │ │ │ ├── secondaryToolbarButton-lastPage.png
│ │ │ │ ├── secondaryToolbarButton-lastPage@2x.png
│ │ │ │ ├── secondaryToolbarButton-rotateCcw.png
│ │ │ │ ├── secondaryToolbarButton-rotateCcw@2x.png
│ │ │ │ ├── secondaryToolbarButton-rotateCw.png
│ │ │ │ ├── secondaryToolbarButton-rotateCw@2x.png
│ │ │ │ ├── shadow.png
│ │ │ │ ├── texture.png
│ │ │ │ ├── toolbarButton-bookmark.png
│ │ │ │ ├── toolbarButton-bookmark@2x.png
│ │ │ │ ├── toolbarButton-download.png
│ │ │ │ ├── toolbarButton-download@2x.png
│ │ │ │ ├── toolbarButton-menuArrows.png
│ │ │ │ ├── toolbarButton-menuArrows@2x.png
│ │ │ │ ├── toolbarButton-openFile.png
│ │ │ │ ├── toolbarButton-openFile@2x.png
│ │ │ │ ├── toolbarButton-pageDown-rtl.png
│ │ │ │ ├── toolbarButton-pageDown-rtl@2x.png
│ │ │ │ ├── toolbarButton-pageDown.png
│ │ │ │ ├── toolbarButton-pageDown@2x.png
│ │ │ │ ├── toolbarButton-pageUp-rtl.png
│ │ │ │ ├── toolbarButton-pageUp-rtl@2x.png
│ │ │ │ ├── toolbarButton-pageUp.png
│ │ │ │ ├── toolbarButton-pageUp@2x.png
│ │ │ │ ├── toolbarButton-presentationMode.png
│ │ │ │ ├── toolbarButton-presentationMode@2x.png
│ │ │ │ ├── toolbarButton-print.png
│ │ │ │ ├── toolbarButton-print@2x.png
│ │ │ │ ├── toolbarButton-search.png
│ │ │ │ ├── toolbarButton-search@2x.png
│ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl.png
│ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl@2x.png
│ │ │ │ ├── toolbarButton-secondaryToolbarToggle.png
│ │ │ │ ├── toolbarButton-secondaryToolbarToggle@2x.png
│ │ │ │ ├── toolbarButton-sidebarToggle-rtl.png
│ │ │ │ ├── toolbarButton-sidebarToggle-rtl@2x.png
│ │ │ │ ├── toolbarButton-sidebarToggle.png
│ │ │ │ ├── toolbarButton-sidebarToggle@2x.png
│ │ │ │ ├── toolbarButton-viewAttachments.png
│ │ │ │ ├── toolbarButton-viewAttachments@2x.png
│ │ │ │ ├── toolbarButton-viewOutline-rtl.png
│ │ │ │ ├── toolbarButton-viewOutline-rtl@2x.png
│ │ │ │ ├── toolbarButton-viewOutline.png
│ │ │ │ ├── toolbarButton-viewOutline@2x.png
│ │ │ │ ├── toolbarButton-viewThumbnail.png
│ │ │ │ ├── toolbarButton-viewThumbnail@2x.png
│ │ │ │ ├── toolbarButton-zoomIn.png
│ │ │ │ ├── toolbarButton-zoomIn@2x.png
│ │ │ │ ├── toolbarButton-zoomOut.png
│ │ │ │ └── toolbarButton-zoomOut@2x.png
│ │ │ │ ├── l10n.js
│ │ │ │ ├── locale
│ │ │ │ ├── ach
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── af
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ak
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── an
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ar
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── as
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ast
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── az
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── be
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── bg
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── bn-BD
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── bn-IN
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── br
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── bs
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ca
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── cs
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── csb
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── cy
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── da
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── de
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── el
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── en-GB
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── en-US
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── en-ZA
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── eo
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── es-AR
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── es-CL
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── es-ES
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── es-MX
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── et
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── eu
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── fa
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ff
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── fi
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── fr
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── fy-NL
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ga-IE
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── gd
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── gl
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── gu-IN
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── he
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── hi-IN
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── hr
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── hu
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── hy-AM
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── id
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── is
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── it
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ja
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ka
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── kk
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── km
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── kn
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ko
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ku
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── lg
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── lij
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── locale.properties
│ │ │ │ ├── lt
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── lv
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── mai
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── mk
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ml
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── mn
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── mr
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ms
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── my
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── nb-NO
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── nl
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── nn-NO
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── nso
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── oc
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── or
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── pa-IN
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── pl
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── pt-BR
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── pt-PT
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── rm
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ro
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ru
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── rw
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sah
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── si
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sk
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sl
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── son
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sq
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sr
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sv-SE
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── sw
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ta-LK
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ta
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── te
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── th
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── tl
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── tn
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── tr
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── uk
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── ur
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── vi
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── wo
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── xh
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── zh-CN
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── zh-TW
│ │ │ │ │ └── viewer.properties
│ │ │ │ └── zu
│ │ │ │ │ └── viewer.properties
│ │ │ │ ├── viewer.css
│ │ │ │ ├── viewer.html
│ │ │ │ └── viewer.js
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── rst
│ │ ├── __init__.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── settings.py
│ ├── svg
│ │ ├── __init__.py
│ │ ├── render.py
│ │ ├── static
│ │ │ └── js
│ │ │ │ ├── svg-injector.map.js
│ │ │ │ └── svg-injector.min.js
│ │ └── templates
│ │ │ └── viewer.mako
│ ├── tabular
│ │ ├── __init__.py
│ │ ├── compat.py
│ │ ├── exceptions.py
│ │ ├── libs
│ │ │ ├── __init__.py
│ │ │ ├── ezodf_tools.py
│ │ │ ├── h5py_scipy_tools.py
│ │ │ ├── panda_tools.py
│ │ │ ├── stdlib_tools.py
│ │ │ └── xlrd_tools.py
│ │ ├── render.py
│ │ ├── settings.py
│ │ ├── static
│ │ │ ├── css
│ │ │ │ ├── bootstrap.min.css
│ │ │ │ ├── examples.css
│ │ │ │ ├── slick-default-theme.css
│ │ │ │ └── slick.grid.css
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── images
│ │ │ │ ├── actions.gif
│ │ │ │ ├── ajax-loader-small.gif
│ │ │ │ ├── arrow_redo.png
│ │ │ │ ├── arrow_right_peppermint.png
│ │ │ │ ├── arrow_right_spearmint.png
│ │ │ │ ├── arrow_undo.png
│ │ │ │ ├── bullet_blue.png
│ │ │ │ ├── bullet_star.png
│ │ │ │ ├── bullet_toggle_minus.png
│ │ │ │ ├── bullet_toggle_plus.png
│ │ │ │ ├── calendar.gif
│ │ │ │ ├── collapse.gif
│ │ │ │ ├── comment_yellow.gif
│ │ │ │ ├── down.gif
│ │ │ │ ├── drag-handle.png
│ │ │ │ ├── editor-helper-bg.gif
│ │ │ │ ├── expand.gif
│ │ │ │ ├── header-bg.gif
│ │ │ │ ├── header-columns-bg.gif
│ │ │ │ ├── header-columns-over-bg.gif
│ │ │ │ ├── help.png
│ │ │ │ ├── info.gif
│ │ │ │ ├── listview.gif
│ │ │ │ ├── pencil.gif
│ │ │ │ ├── row-over-bg.gif
│ │ │ │ ├── sort-asc.gif
│ │ │ │ ├── sort-asc.png
│ │ │ │ ├── sort-desc.gif
│ │ │ │ ├── sort-desc.png
│ │ │ │ ├── stripes.png
│ │ │ │ ├── tag_red.png
│ │ │ │ ├── tick.png
│ │ │ │ ├── user_identity.gif
│ │ │ │ └── user_identity_plus.gif
│ │ │ └── js
│ │ │ │ ├── bootstrap.min.js
│ │ │ │ ├── jquery.event.drag-2.2.js
│ │ │ │ ├── slick.core.js
│ │ │ │ ├── slick.dataview.js
│ │ │ │ └── slick.grid.js
│ │ ├── templates
│ │ │ └── viewer.mako
│ │ └── utilities.py
│ ├── unoconv
│ │ ├── __init__.py
│ │ ├── export.py
│ │ ├── render.py
│ │ └── settings.py
│ ├── utils.py
│ ├── video
│ │ ├── __init__.py
│ │ ├── render.py
│ │ └── templates
│ │ │ └── viewer.mako
│ └── zip
│ │ ├── __init__.py
│ │ ├── render.py
│ │ └── templates
│ │ └── viewer.mako
├── providers
│ ├── __init__.py
│ ├── http
│ │ ├── __init__.py
│ │ ├── provider.py
│ │ └── settings.py
│ └── osf
│ │ ├── __init__.py
│ │ ├── provider.py
│ │ └── settings.py
├── server
│ ├── __init__.py
│ ├── app.py
│ ├── handlers
│ │ ├── __init__.py
│ │ ├── core.py
│ │ ├── export.py
│ │ ├── exporters.py
│ │ ├── render.py
│ │ ├── renderers.py
│ │ └── status.py
│ ├── settings.py
│ └── static
│ │ ├── css
│ │ ├── bootstrap.min.css
│ │ ├── default.css
│ │ └── mfr.css
│ │ ├── images
│ │ ├── cos_logo.png
│ │ ├── loading.png
│ │ └── vid-thumbnail.png
│ │ └── js
│ │ ├── bootstrap.min.js
│ │ ├── jquery-1.11.3.js
│ │ ├── jquery-1.11.3.min.js
│ │ ├── mfr.child.hypothesis.js
│ │ ├── mfr.child.js
│ │ └── mfr.js
├── settings.py
└── version.py
├── readthedocs.yml
├── requirements.txt
├── setup.cfg
├── setup.py
├── supportedextensions.md
├── tasks.py
└── tests
├── __init__.py
├── core
├── test_remote_logging.py
└── test_utils.py
├── documentation
└── test_entrypoints.py
├── extensions
├── __init__.py
├── audio
│ ├── __init__.py
│ └── test_renderer.py
├── codepygments
│ ├── __init__.py
│ ├── files
│ │ ├── encodings
│ │ │ ├── complex.utf16.txt
│ │ │ ├── complex.utf8.txt
│ │ │ ├── iso-8859-looks-like-utf16.txt
│ │ │ ├── simple.cp1252.txt
│ │ │ ├── simple.utf16.txt
│ │ │ └── simple.utf8.txt
│ │ ├── invalid.xml
│ │ └── test.xml
│ └── test_renderer.py
├── docx
│ ├── __init__.py
│ ├── files
│ │ ├── invalid.docx
│ │ └── test.docx
│ └── test_renderer.py
├── image
│ ├── __init__.py
│ ├── files
│ │ ├── invalid.jpg
│ │ ├── test.bmp
│ │ ├── test.jpeg
│ │ ├── test.jpg
│ │ ├── test.png
│ │ ├── test.psd
│ │ ├── test_ratio.jpg
│ │ └── test_transparency.png
│ ├── test_exporter.py
│ └── test_renderer.py
├── ipynb
│ ├── __init__.py
│ ├── files
│ │ ├── invalid_json.ipynb
│ │ ├── no_metadata.ipynb
│ │ └── test.ipynb
│ └── test_renderer.py
├── jamovi
│ ├── __init__.py
│ ├── files
│ │ ├── contains-malicious-script.omv
│ │ ├── data-archive-version-is-too-old.omv
│ │ ├── no-data-archive-version-in-manifest.omv
│ │ ├── no-index_html.omv
│ │ ├── no-manifest.omv
│ │ ├── not-a-zip-file.omv
│ │ ├── ok-new-manifest.omv
│ │ ├── ok-old-manifest.omv
│ │ └── ok-with-image.omv
│ └── test_renderer.py
├── jasp
│ ├── __init__.py
│ ├── files
│ │ ├── contains-malicious-script.jasp
│ │ ├── data-archive-version-is-too-old.jasp
│ │ ├── no-data-archive-version-in-manifest.jasp
│ │ ├── no-index_html.jasp
│ │ ├── no-manifest.jasp
│ │ ├── not-a-zip-file.jasp
│ │ ├── ok-new-manifest.jasp
│ │ └── ok-old-manifest.jasp
│ └── test_renderer.py
├── jsc3d
│ ├── __init__.py
│ └── test_renderer.py
├── md
│ ├── __init__.py
│ ├── files
│ │ ├── invalid.md
│ │ └── test.md
│ └── test_renderer.py
├── pdb
│ ├── __init__.py
│ └── test_renderer.py
├── pdf
│ ├── __init__.py
│ ├── files
│ │ ├── invalid.tif
│ │ ├── test.tif
│ │ ├── test_broken.tif
│ │ ├── test_multipage.tif
│ │ └── test_ratio.tif
│ ├── test_exporter.py
│ └── test_renderer.py
├── rst
│ ├── __init__.py
│ ├── files
│ │ ├── invalid.rst
│ │ └── test.rst
│ └── test_renderer.py
├── tabular
│ ├── __init__.py
│ ├── files
│ │ ├── invalid.csv
│ │ ├── invalid.dta
│ │ ├── invalid.tsv
│ │ ├── invalid.xlsx
│ │ ├── invalidVer70.mat
│ │ ├── invalidVer73.mat
│ │ ├── test.csv
│ │ ├── test.dta
│ │ ├── test.tsv
│ │ ├── test.xlsx
│ │ ├── testVer70.mat
│ │ └── testVer73.mat
│ ├── test_mat_tools.py
│ ├── test_panda_tools.py
│ ├── test_renderer.py
│ ├── test_utilities.py
│ └── test_xlsx_tools.py
├── video
│ ├── __init__.py
│ └── test_renderer.py
└── zip
│ ├── __init__.py
│ ├── files
│ ├── empty.zip
│ └── test.zip
│ └── test_renderer.py
├── server
├── __init__.py
└── handlers
│ ├── __init__.py
│ ├── test_cors.py
│ ├── test_exporters.py
│ ├── test_query_params.py
│ ├── test_render.py
│ ├── test_renderers.py
│ └── test_status.py
└── utils.py
/.dockerignore:
--------------------------------------------------------------------------------
1 | .git
2 | *.pyc
3 | **/*.pyc
4 | Dockerfile
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS generated files
2 | ######################
3 | .DS_Store
4 | .DS_Store?
5 | ._*
6 | .Spotlight-V100
7 | .Trashes
8 | Icon?
9 | ehthumbs.db
10 | Thumbs.db
11 | *.swp
12 | *~
13 |
14 | # R
15 | ######################
16 | .Rhistory
17 |
18 | # Python
19 | ######################
20 | *.py[cod]
21 | **/*.pyc
22 | .mypy_cache
23 |
24 | # C extensions
25 | ######################
26 | *.so
27 |
28 | # Packages
29 | ######################
30 | *.egg
31 | *.egg-info
32 | dist
33 | /build
34 | eggs
35 | parts
36 | bin
37 | var
38 | sdist
39 | develop-eggs
40 | .installed.cfg
41 | lib
42 | lib64
43 | __pycache__
44 | .idea
45 | .hg
46 | .hgignore
47 | .konchrc
48 | .env
49 |
50 | # Installer logs
51 | ######################
52 | pip-log.txt
53 |
54 | # Unit test / coverage reports
55 | ######################
56 | .coverage
57 | .tox
58 | nosetests.xml
59 |
60 | # Translations
61 | ######################
62 | *.mo
63 |
64 | # Mr Developer
65 | ######################
66 | .mr.developer.cfg
67 | .project
68 | .pydevproject
69 |
70 | # Sphinx
71 | ######################
72 | docs/_build
73 | README.html
74 |
75 | # Player files
76 | ######################
77 | player/files/*
78 | player/mfr_config_local.py
79 | player/static/mfr/*
80 |
81 | # Misc
82 | ######################
83 | !.gitkeep
84 | .cache
85 |
86 | # Node Modules
87 | ######################
88 | node_modules/
89 |
90 | # Asynchronous HTTP
91 | ######################
92 | /src/
93 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.6-slim-buster
2 |
3 | # ensure unoconv can locate the uno library
4 | ENV PYTHONPATH /usr/lib/python3/dist-packages
5 |
6 | RUN usermod -d /home www-data \
7 | && chown www-data:www-data /home \
8 | # -slim images strip man dirs, but java won't install unless this dir exists.
9 | && mkdir -p /usr/share/man/man1 \
10 | && apt-get update \
11 | # HACK: work around bug in install java (dep of libreoffice)
12 | && apt-get install -y ca-certificates-java \
13 | # mfr dependencies
14 | && apt-get install -y \
15 | git \
16 | make \
17 | gcc \
18 | build-essential \
19 | gfortran \
20 | r-base \
21 | libblas-dev \
22 | libevent-dev \
23 | libfreetype6-dev \
24 | libjpeg-dev \
25 | libpng-dev \
26 | libtiff5-dev \
27 | libxml2-dev \
28 | libxslt1-dev \
29 | zlib1g-dev \
30 | gnupg2 \
31 | # convert .step to jsc3d-compatible format
32 | freecad \
33 | # pspp dependencies
34 | pspp \
35 | # unoconv dependencies
36 | libreoffice \
37 | # grab gosu for easy step-down from root
38 | gosu \
39 | && apt-get clean \
40 | && apt-get autoremove -y \
41 | && rm -rf /var/lib/apt/lists/*
42 |
43 | RUN mkdir -p /code
44 | WORKDIR /code
45 |
46 | RUN pip install -U pip==18.1
47 | RUN pip install setuptools==37.0.0
48 | RUN pip install unoconv==0.8.2
49 |
50 | COPY ./requirements.txt /code/
51 |
52 | RUN pip install --no-cache-dir -r ./requirements.txt
53 |
54 | # Copy the rest of the code over
55 | COPY ./ /code/
56 |
57 | ARG GIT_COMMIT=
58 | ENV GIT_COMMIT ${GIT_COMMIT}
59 |
60 | RUN python setup.py develop
61 |
62 | EXPOSE 7778
63 |
64 | CMD ["gosu", "www-data", "invoke", "server"]
65 |
--------------------------------------------------------------------------------
/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
9 |
10 |
15 |
16 |
17 |
18 | ## Ticket
19 |
20 |
21 |
22 | ## Purpose
23 |
24 |
25 |
26 | ## Changes
27 |
28 |
29 |
30 | ## Side effects
31 |
32 |
33 |
34 | ## QA Notes
35 |
36 |
37 |
38 | ## Deployment Notes
39 |
40 |
41 |
--------------------------------------------------------------------------------
/constraints.txt:
--------------------------------------------------------------------------------
1 | ## Constraints file for resolving conflicts across packages. Used to resolve issues with sub-dependencies of an actual requirement.
2 | ## (eg when python-coveralls indirectly requires a version of requests)
3 | ## "Constraints files are requirements files that only control which version of a requirement is installed, not whether it is installed or not."
4 | ## See https://pip-python3.readthedocs.org/en/latest/user_guide.html#constraints-files
5 |
6 | # Newer version of requests throw an error when using the version of chardet we pin to; this causes issues for python-coveralls
7 | requests==2.14.2
8 |
--------------------------------------------------------------------------------
/dev-requirements.txt:
--------------------------------------------------------------------------------
1 | -r requirements.txt
2 |
3 | # aiohttpretty disabled due to no usage in MFR, re-enable when needed
4 | # git+https://github.com/centerforopenscience/aiohttpretty.git@0.1.0#egg=aiohttpretty
5 |
6 | beautifulsoup4
7 | colorlog==2.5.0
8 | coveralls
9 | flake8==3.0.4
10 | ipdb
11 | mccabe
12 | pydevd==0.0.6
13 | pyflakes
14 | pytest==2.8.2
15 | pytest-cov==2.2.0
16 | pyzmq==14.4.1
17 |
--------------------------------------------------------------------------------
/doc-requirements.txt:
--------------------------------------------------------------------------------
1 | sphinx-rtd-theme
2 | sphinx
3 | sphinx-autobuild
4 |
--------------------------------------------------------------------------------
/docs/_templates/side-primary.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 | HTML file renderer for Python
9 |
10 |
11 | Useful Links
12 |
16 |
17 |
--------------------------------------------------------------------------------
/docs/_templates/side-secondary.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 | HTML file renderer for Python
10 |
11 |
12 |
13 | Useful Links
14 |
18 |
--------------------------------------------------------------------------------
/docs/_themes/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 | *.pyo
3 | .DS_Store
--------------------------------------------------------------------------------
/docs/_themes/kr/layout.html:
--------------------------------------------------------------------------------
1 |
2 | {%- extends "basic/layout.html" %}
3 | {%- block extrahead %}
4 | {{ super() }}
5 | {% if theme_touch_icon %}
6 |
7 | {% endif %}
8 |
9 | {% endblock %}
10 | {%- block relbar2 %}{% endblock %}
11 | {%- block footer %}
12 |
15 |
16 |
17 |
18 |
19 |
20 | {%- endblock %}
21 |
--------------------------------------------------------------------------------
/docs/_themes/kr/relations.html:
--------------------------------------------------------------------------------
1 |
2 | Related Topics
3 |
21 |
--------------------------------------------------------------------------------
/docs/_themes/kr/static/small_flask.css:
--------------------------------------------------------------------------------
1 | /*
2 | * small_flask.css_t
3 | * ~~~~~~~~~~~~~~~~~
4 | *
5 | * :copyright: Copyright 2010 by Armin Ronacher.
6 | * :license: Flask Design License, see LICENSE for details.
7 | */
8 |
9 | body {
10 | margin: 0;
11 | padding: 20px 30px;
12 | }
13 |
14 | div.documentwrapper {
15 | float: none;
16 | background: white;
17 | }
18 |
19 | div.sphinxsidebar {
20 | display: block;
21 | float: none;
22 | width: 102.5%;
23 | margin: 50px -30px -20px -30px;
24 | padding: 10px 20px;
25 | background: #333;
26 | color: white;
27 | }
28 |
29 | div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
30 | div.sphinxsidebar h3 a {
31 | color: white;
32 | }
33 |
34 | div.sphinxsidebar a {
35 | color: #aaa;
36 | }
37 |
38 | div.sphinxsidebar p.logo {
39 | display: none;
40 | }
41 |
42 | div.document {
43 | width: 100%;
44 | margin: 0;
45 | }
46 |
47 | div.related {
48 | display: block;
49 | margin: 0;
50 | padding: 10px 0 20px 0;
51 | }
52 |
53 | div.related ul,
54 | div.related ul li {
55 | margin: 0;
56 | padding: 0;
57 | }
58 |
59 | div.footer {
60 | display: none;
61 | }
62 |
63 | div.bodywrapper {
64 | margin: 0;
65 | }
66 |
67 | div.body {
68 | min-height: 0;
69 | padding: 0;
70 | }
71 |
72 | .rtd_doc_footer {
73 | display: none;
74 | }
75 |
76 | .document {
77 | width: auto;
78 | }
79 |
80 | .footer {
81 | width: auto;
82 | }
83 |
84 | .footer {
85 | width: auto;
86 | }
87 |
88 | .github {
89 | display: none;
90 | }
--------------------------------------------------------------------------------
/docs/_themes/kr/theme.conf:
--------------------------------------------------------------------------------
1 | [theme]
2 | inherit = basic
3 | stylesheet = flasky.css
4 | pygments_style = flask_theme_support.FlaskyStyle
5 |
6 | [options]
7 | touch_icon =
--------------------------------------------------------------------------------
/docs/_themes/kr_small/layout.html:
--------------------------------------------------------------------------------
1 |
2 | {% extends "basic/layout.html" %}
3 | {% block header %}
4 | {{ super() }}
5 | {% if pagename == 'index' %}
6 |
7 | {% endif %}
8 | {% endblock %}
9 | {% block footer %}
10 | {% if pagename == 'index' %}
11 |
12 | {% endif %}
13 | {% endblock %}
14 | {# do not display relbars #}
15 | {% block relbar1 %}{% endblock %}
16 | {% block relbar2 %}
17 | {% if theme_github_fork %}
18 |
19 |
21 |
22 | {% endif %}
23 | {% endblock %}
24 | {% block sidebar1 %}{% endblock %}
25 | {% block sidebar2 %}{% endblock %}
26 |
--------------------------------------------------------------------------------
/docs/_themes/kr_small/theme.conf:
--------------------------------------------------------------------------------
1 | [theme]
2 | inherit = basic
3 | stylesheet = flasky.css
4 | nosidebar = true
5 | pygments_style = flask_theme_support.FlaskyStyle
6 |
7 | [options]
8 | index_logo = ''
9 | index_logo_height = 120px
10 | github_fork = ''
--------------------------------------------------------------------------------
/docs/authors.rst:
--------------------------------------------------------------------------------
1 | .. include:: ../AUTHORS.rst
--------------------------------------------------------------------------------
/docs/changelog.rst:
--------------------------------------------------------------------------------
1 | Change Log
2 | ==========
3 |
4 | .. include:: ../CHANGELOG
5 | :literal:
6 |
--------------------------------------------------------------------------------
/docs/code.rst:
--------------------------------------------------------------------------------
1 | Code
2 | ====
3 |
4 | .. toctree::
5 | :maxdepth: 2
6 |
7 | core
8 | extensions
9 | providers
10 | server
11 |
--------------------------------------------------------------------------------
/docs/contributing.rst:
--------------------------------------------------------------------------------
1 | .. include:: ../CONTRIBUTING.rst
--------------------------------------------------------------------------------
/docs/core.rst:
--------------------------------------------------------------------------------
1 | Core
2 | ====
3 |
4 | mfr.core.exceptions
5 | -------------------
6 |
7 | .. automodule:: mfr.core.exceptions
8 |
9 | mfr.core.extension
10 | ------------------
11 |
12 | .. automodule:: mfr.core.extension
13 |
14 | mfr.core.provider
15 | -----------------
16 |
17 | .. automodule:: mfr.core.provider
18 |
19 | mfr.core.utils
20 | -----------------
21 |
22 | .. automodule:: mfr.core.utils
23 |
--------------------------------------------------------------------------------
/docs/extensions.rst:
--------------------------------------------------------------------------------
1 | Extensions
2 | ==========
3 |
4 | AudioRenderer
5 | -------------
6 |
7 | .. autoclass:: mfr.extensions.audio.AudioRenderer
8 |
9 | CodePygmentsRenderer
10 | --------------------
11 |
12 | .. autoclass:: mfr.extensions.codepygments.CodePygmentsRenderer
13 |
14 | DocxRenderer
15 | ------------
16 |
17 | .. autoclass:: mfr.extensions.docx.DocxRenderer
18 |
19 | ImageExporter
20 | -------------
21 |
22 | .. autoclass:: mfr.extensions.image.ImageExporter
23 |
24 | ImageRenderer
25 | -------------
26 |
27 | .. autoclass:: mfr.extensions.image.ImageRenderer
28 |
29 | IpynbRenderer
30 | -------------
31 |
32 | .. autoclass:: mfr.extensions.ipynb.IpynbRenderer
33 |
34 | PdbRenderer
35 | -----------
36 | **Note**: This module requires jquery on the page in which it is loaded.
37 |
38 | .. autoclass:: mfr.extensions.pdb.PdbRenderer
39 |
40 | PdfRenderer
41 | -----------
42 |
43 | .. autoclass:: mfr.extensions.pdf.PdfRenderer
44 |
45 | RstRenderer
46 | -----------
47 |
48 | .. autoclass:: mfr.extensions.rst.RstRenderer
49 |
50 | TabularRenderer
51 | ---------------
52 |
53 | .. autoclass:: mfr.extensions.tabular.TabularRenderer
54 |
55 | VideoRenderer
56 | -------------
57 |
58 | .. autoclass:: mfr.extensions.video.VideoRenderer
59 |
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. title:: Modular File Renderer
2 |
3 | mfr: HTML file renderer for Python
4 | ==================================
5 |
6 | Release v\ |version|. (:ref:`Installation `)
7 |
8 | **mfr** (short for "modular file renderer") is a Python package for rendering files to HTML.
9 |
10 |
11 | Ready to dive in?
12 | -----------------
13 |
14 | Go to the :ref:`Quickstart tutorial `, or see the :ref:`Overview ` to understand its architecture.
15 |
16 |
17 |
18 | Guide
19 | -----
20 |
21 | .. toctree::
22 | :maxdepth: 2
23 |
24 | install
25 | quickstart
26 | overview
27 | integrations
28 | code
29 |
30 | Project info
31 | ------------
32 |
33 | .. toctree::
34 | :maxdepth: 1
35 |
36 | contributing
37 | authors
38 | changelog
39 | license
40 |
--------------------------------------------------------------------------------
/docs/install.rst:
--------------------------------------------------------------------------------
1 | .. _install:
2 |
3 | Installation
4 | ============
5 |
6 | mfr is actively developed on Github_.
7 |
8 | You can clone the public repo: ::
9 |
10 | git clone https://github.com/CenterForOpenScience/modular-file-renderer.git
11 |
12 | Or download one of the following:
13 |
14 | * tarball_
15 | * zipball_
16 |
17 | Make sure that you have installed `pspp `_ and are using python 3.5 or greater.
18 |
19 | Install the versions of ``setuptools`` and ``invoke`` found in the requirements.txt file:
20 |
21 | .. code-block:: bash
22 |
23 | pip install setuptools==37.0.0
24 | pip install invoke==0.13.0
25 |
26 | Install requirements:
27 |
28 | .. code-block:: bash
29 |
30 | invoke install
31 |
32 | Or for some nicities (like tests):
33 |
34 | .. code-block:: bash
35 |
36 | invoke install --develop
37 |
38 | Start the server:
39 |
40 | .. note
41 |
42 | The server is extremely tenacious thanks to stevedore and tornado
43 | Syntax errors in the :mod:`mfr.providers` will not crash the server
44 | In debug mode the server will automatically reload
45 |
46 | .. code-block:: bash
47 |
48 | invoke server
49 |
50 | .. _Github: https://github.com/CenterForOpenScience/modular-file-renderer
51 | .. _tarball: https://github.com/CenterForOpenScience/modular-file-renderer/tarball/master
52 | .. _zipball: https://github.com/CenterForOpenScience/modular-file-renderer/zipball/master
53 |
54 |
--------------------------------------------------------------------------------
/docs/license.rst:
--------------------------------------------------------------------------------
1 | License
2 | =======
3 |
4 | .. include:: ../LICENSE
5 | :literal:
6 |
--------------------------------------------------------------------------------
/docs/providers.rst:
--------------------------------------------------------------------------------
1 | Providers
2 | =========
3 |
4 | mfr.providers.http
5 | ------------------
6 |
7 | .. autoclass:: mfr.providers.http.HttpProvider
8 |
9 | mfr.providers.osf
10 | -----------------
11 |
12 | .. autoclass:: mfr.providers.osf.OsfProvider
13 |
--------------------------------------------------------------------------------
/docs/server.rst:
--------------------------------------------------------------------------------
1 | Server
2 | ======
3 |
4 | mfr.server.app
5 | --------------
6 |
7 | .. automodule:: mfr.server.app
8 |
9 | mfr.server.handlers
10 | -------------------
11 |
12 | .. automodule:: mfr.server.handlers.core
13 |
14 | .. automodule:: mfr.server.handlers.export
15 |
16 | .. automodule:: mfr.server.handlers.render
17 |
18 | .. automodule:: mfr.server.handlers.status
19 |
20 |
--------------------------------------------------------------------------------
/mfr/__init__.py:
--------------------------------------------------------------------------------
1 | # This is a namespace package, don't put any functional code in here besides the
2 | # declare_namespace call, or it will disappear on install. See:
3 | # https://setuptools.readthedocs.io/en/latest/setuptools.html#namespace-packages
4 | __import__('pkg_resources').declare_namespace(__name__)
5 |
--------------------------------------------------------------------------------
/mfr/core/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/core/__init__.py
--------------------------------------------------------------------------------
/mfr/extensions/__init__.py:
--------------------------------------------------------------------------------
1 | __import__('pkg_resources').declare_namespace(__name__)
2 |
--------------------------------------------------------------------------------
/mfr/extensions/audio/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import AudioRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/audio/render.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from mako.lookup import TemplateLookup
4 |
5 | from mfr.core import extension
6 | from mfr.extensions.utils import escape_url_for_template
7 |
8 |
9 | class AudioRenderer(extension.BaseRenderer):
10 |
11 | TEMPLATE = TemplateLookup(
12 | directories=[
13 | os.path.join(os.path.dirname(__file__), 'templates')
14 | ]).get_template('viewer.mako')
15 |
16 | def render(self):
17 | safe_url = escape_url_for_template(self.url)
18 | return self.TEMPLATE.render(base=self.assets_url, url=safe_url)
19 |
20 | @property
21 | def file_required(self):
22 | return False
23 |
24 | @property
25 | def cache_result(self):
26 | return False
27 |
--------------------------------------------------------------------------------
/mfr/extensions/audio/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 | Your browser does not support the audio tag.
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/mfr/extensions/codepygments/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import CodePygmentsRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/codepygments/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 | config = settings.child('CODEPYGMENTS_EXTENSION_CONFIG')
4 |
5 | MAX_SIZE = int(config.get('MAX_SIZE', 204800)) # 200kb
6 |
7 | lexer_lib = {
8 | '.gdt': 'xml',
9 | '.pzfx': 'xml',
10 | '.cmdi': 'xml',
11 | '.rm5': 'xml',
12 | '.eaf': 'xml',
13 | '.qsf': 'json',
14 | '.psyexp': 'html',
15 | '.umbrella': 'json',
16 | '.jst': 'js',
17 | '.ijm': 'java',
18 | '.csl': 'xml',
19 | '.lss': 'xml'
20 | }
21 |
--------------------------------------------------------------------------------
/mfr/extensions/codepygments/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ${body}
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/mfr/extensions/docx/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import DocxRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/docx/render.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import pydocx.export
4 | from mako.lookup import TemplateLookup
5 |
6 | from mfr.core import extension
7 |
8 |
9 | class DocxRenderer(extension.BaseRenderer):
10 |
11 | TEMPLATE = TemplateLookup(
12 | directories=[
13 | os.path.join(os.path.dirname(__file__), 'templates')
14 | ]).get_template('viewer.mako')
15 |
16 | # Workaround to remove default stylesheet and inlined styles
17 | # see: https://github.com/CenterForOpenScience/pydocx/issues/102
18 | class _PyDocXHTMLExporter(pydocx.export.PyDocXHTMLExporter):
19 |
20 | def style(self):
21 | return ''
22 |
23 | def indent(self, text, *args, **kwargs):
24 | return text
25 |
26 | def __init__(self, *args, **kwargs):
27 | super().__init__(*args, **kwargs)
28 | self.metrics.add('pydocx_version', pydocx.__version__)
29 |
30 | def render(self):
31 | body = self._PyDocXHTMLExporter(self.file_path).parsed
32 | return self.TEMPLATE.render(base=self.assets_url, body=body)
33 |
34 | @property
35 | def file_required(self):
36 | return True
37 |
38 | @property
39 | def cache_result(self):
40 | return True
41 |
--------------------------------------------------------------------------------
/mfr/extensions/docx/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 | ${body}
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/mfr/extensions/image/__init__.py:
--------------------------------------------------------------------------------
1 | from .export import ImageExporter # noqa
2 | from .render import ImageRenderer # noqa
3 |
--------------------------------------------------------------------------------
/mfr/extensions/image/exceptions.py:
--------------------------------------------------------------------------------
1 | from mfr.core.exceptions import ExporterError
2 |
3 |
4 | class PillowImageError(ExporterError):
5 | """The Image related errors raised from a :class:`mfr.extentions.image`
6 | and relating to the Pillow Library should inherit from PillowImageError
7 | """
8 |
9 | __TYPE = 'image_pillow'
10 |
11 | def __init__(self, message, *args, export_format: str='', detected_format: str='',
12 | original_exception: Exception=None, **kwargs):
13 | super().__init__(message, *args, exporter_class='image', **kwargs)
14 |
15 | self.export_format = export_format
16 | self.detected_format = detected_format
17 | self.original_exception = self._format_original_exception(original_exception)
18 |
19 | self.attr_stack.append([self.__TYPE, {
20 | 'export_format': self.export_format,
21 | 'detected_format': self.detected_format,
22 | 'original_exception': self.original_exception,
23 | }])
24 |
--------------------------------------------------------------------------------
/mfr/extensions/image/render.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import furl
4 | from mako.lookup import TemplateLookup
5 |
6 | from mfr.core import extension
7 | from mfr.extensions.image import settings
8 | from mfr.extensions.utils import munge_url_for_localdev, escape_url_for_template
9 |
10 |
11 | class ImageRenderer(extension.BaseRenderer):
12 |
13 | TEMPLATE = TemplateLookup(
14 | directories=[
15 | os.path.join(os.path.dirname(__file__), 'templates')
16 | ]).get_template('viewer.mako')
17 |
18 | def render(self):
19 | self.metrics.add('needs_export', False)
20 | if self.metadata.ext in settings.EXPORT_EXCLUSIONS:
21 | download_url = munge_url_for_localdev(self.url)
22 | safe_url = escape_url_for_template(download_url.geturl())
23 | return self.TEMPLATE.render(base=self.assets_url, url=safe_url)
24 |
25 | exported_url = furl.furl(self.export_url)
26 | if settings.EXPORT_MAXIMUM_SIZE and settings.EXPORT_TYPE:
27 | exported_url.args['format'] = '{}.{}'.format(settings.EXPORT_MAXIMUM_SIZE, settings.EXPORT_TYPE)
28 | elif settings.EXPORT_TYPE:
29 | exported_url.args['format'] = settings.EXPORT_TYPE
30 | else:
31 | download_url = munge_url_for_localdev(self.url)
32 | safe_url = escape_url_for_template(download_url.geturl())
33 | return self.TEMPLATE.render(base=self.assets_url, url=safe_url)
34 |
35 | self.metrics.add('needs_export', True)
36 | safe_url = escape_url_for_template(exported_url.url)
37 | return self.TEMPLATE.render(base=self.assets_url, url=safe_url)
38 |
39 | @property
40 | def file_required(self):
41 | return False
42 |
43 | @property
44 | def cache_result(self):
45 | return False
46 |
--------------------------------------------------------------------------------
/mfr/extensions/image/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 | config = settings.child('IMAGE_EXTENSION_CONFIG')
4 |
5 | EXPORT_TYPE = config.get('EXPORT_TYPE', 'jpeg')
6 | EXPORT_MAXIMUM_SIZE = config.get('EXPORT_MAXIMUM_SIZE', '2400x2400')
7 | EXPORT_EXCLUSIONS = config.get('EXPORT_EXCLUSIONS', '.gif .ico').split(' ')
8 | EXPORT_BACKGROUND_COLOR = config.get('EXPORT_BACKGROUND_COLOR', 'white')
9 |
--------------------------------------------------------------------------------
/mfr/extensions/image/static/images/question-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/image/static/images/question-circle.png
--------------------------------------------------------------------------------
/mfr/extensions/ipynb/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import IpynbRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/ipynb/exceptions.py:
--------------------------------------------------------------------------------
1 | from mfr.core.exceptions import RendererError
2 |
3 |
4 | class InvalidFormatError(RendererError):
5 |
6 | __TYPE = 'ipynb_invalid_format'
7 |
8 | def __init__(self, message, *args, code: int=400, download_url: str='',
9 | original_exception: Exception=None, **kwargs):
10 | super().__init__(message, *args, code=code, renderer_class='ipynb', **kwargs)
11 |
12 | self.download_url = download_url,
13 | self.original_exception = self._format_original_exception(original_exception)
14 |
15 | self.attr_stack.append([self.__TYPE, {
16 | 'download_url': self.download_url,
17 | 'original_exception': self.original_exception,
18 | }])
19 |
--------------------------------------------------------------------------------
/mfr/extensions/ipynb/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | ${body | n}
8 |
9 |
10 |
11 |
12 |
13 |
38 |
--------------------------------------------------------------------------------
/mfr/extensions/jamovi/README.md:
--------------------------------------------------------------------------------
1 | # jamovi .omv file renderer
2 |
3 | `.omv` is the native file format for the free and open source [jamovi statistical spreadsheet](https://www.jamovi.org). An `.omv` file is a 'compound' file format, containing data, analyses, and results.
4 |
5 | `.omv` files created by recent versions of jamovi contain an `index.html` file which represents the results of the analyses performed. The jamovi `.omv` file renderer extracts the contents of `index.html` from the archive and replaces image paths from the archive with equivalent data URIs. This then serves as the rendered content.
6 |
--------------------------------------------------------------------------------
/mfr/extensions/jamovi/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import JamoviRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/jamovi/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 | ${body}
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/mfr/extensions/jasp/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import JASPRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/jasp/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 | ${body}
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/mfr/extensions/jsc3d/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import JSC3DRenderer # noqa
2 | from .export import JSC3DExporter # noqa
3 |
--------------------------------------------------------------------------------
/mfr/extensions/jsc3d/freecad_converter.py:
--------------------------------------------------------------------------------
1 | import sys
2 |
3 | import Mesh
4 | import Part
5 | import FreeCAD
6 |
7 | # This file is run by Freecads own version of python to do step file conversion
8 | # The exporter will shell out to Freecad and provide the path to this file
9 |
10 | in_fn, out_fn = sys.argv[2], sys.argv[3]
11 |
12 | try:
13 | Part.open(in_fn)
14 | except:
15 | sys.exit(1)
16 |
17 | o = [FreeCAD.getDocument("Unnamed").findObjects()[0]]
18 | Mesh.export(o, out_fn)
19 |
--------------------------------------------------------------------------------
/mfr/extensions/jsc3d/render.py:
--------------------------------------------------------------------------------
1 | """3D renderer module """
2 | # Uses jsc3d: https://github.com/humu2009/jsc3d/tree/master/jsc3d
3 | import os
4 |
5 | import furl
6 | from mako.lookup import TemplateLookup
7 |
8 | from mfr.core import extension
9 | from mfr.extensions.jsc3d import settings
10 | from mfr.extensions.utils import munge_url_for_localdev, escape_url_for_template
11 |
12 |
13 | class JSC3DRenderer(extension.BaseRenderer):
14 |
15 | TEMPLATE = TemplateLookup(
16 | directories=[
17 | os.path.join(os.path.dirname(__file__), 'templates')
18 | ]).get_template('viewer.mako')
19 |
20 | def render(self):
21 | self.metrics.add('needs_export', False)
22 | if self.metadata.ext in settings.EXPORT_EXCLUSIONS:
23 | download_url = munge_url_for_localdev(self.metadata.download_url)
24 | safe_url = escape_url_for_template(download_url.geturl())
25 | return self.TEMPLATE.render(
26 | base=self.assets_url,
27 | url=safe_url,
28 | ext=self.metadata.ext.lower(),
29 | )
30 |
31 | exported_url = furl.furl(self.export_url)
32 | exported_url.args['format'] = settings.EXPORT_TYPE
33 | self.metrics.add('needs_export', True)
34 | safe_url = escape_url_for_template(exported_url.url)
35 | return self.TEMPLATE.render(
36 | base=self.assets_url,
37 | url=safe_url,
38 | ext=settings.EXPORT_TYPE,
39 | )
40 |
41 | @property
42 | def file_required(self):
43 | return False
44 |
45 | @property
46 | def cache_result(self):
47 | return False
48 |
--------------------------------------------------------------------------------
/mfr/extensions/jsc3d/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 | config = settings.child('JSC3D_EXTENSION_CONFIG')
4 |
5 | FREECAD_BIN = config.get('FREECAD_BIN', '/usr/bin/freecadcmd')
6 | CONVERSION_SCRIPT = config.get('FREECAD_CONVERT_SCRIPT', '/code/mfr/extensions/jsc3d/freecad_converter.py')
7 | TIMEOUT = int(config.get('FREECAD_TIMEOUT', 30)) # In seconds
8 | EXPORT_TYPE = config.get('EXPORT_TYPE', '.stl')
9 | EXPORT_EXCLUSIONS = config.get('EXPORT_EXCLUSIONS', '.3ds .stl .obj .ctm').split(' ')
10 |
--------------------------------------------------------------------------------
/mfr/extensions/jsc3d/static/images/question-circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/jsc3d/static/images/question-circle.png
--------------------------------------------------------------------------------
/mfr/extensions/md/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import MdRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/md/render.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import markdown
4 | from markdown.extensions import Extension
5 |
6 | from mako.lookup import TemplateLookup
7 |
8 | from mfr.core import extension
9 |
10 |
11 | class EscapeHtml(Extension):
12 | def extendMarkdown(self, md, md_globals):
13 | del md.preprocessors['html_block']
14 | del md.inlinePatterns['html']
15 |
16 |
17 | class MdRenderer(extension.BaseRenderer):
18 |
19 | TEMPLATE = TemplateLookup(
20 | directories=[
21 | os.path.join(os.path.dirname(__file__), 'templates')
22 | ]).get_template('viewer.mako')
23 |
24 | def __init__(self, *args, **kwargs):
25 | super().__init__(*args, **kwargs)
26 | self.metrics.add('markdown_version', markdown.version)
27 |
28 | def render(self):
29 | """Render a markdown file to html."""
30 | with open(self.file_path, 'r') as fp:
31 | body = markdown.markdown(fp.read(), extensions=[EscapeHtml()])
32 | return self.TEMPLATE.render(base=self.assets_url, body=body)
33 |
34 | @property
35 | def file_required(self):
36 | return True
37 |
38 | @property
39 | def cache_result(self):
40 | return True
41 |
--------------------------------------------------------------------------------
/mfr/extensions/md/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ${body}
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/mfr/extensions/pdb/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import PdbRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/pdb/render.py:
--------------------------------------------------------------------------------
1 | """Molecule renderer module """
2 | import os
3 | import json
4 |
5 | from mako.lookup import TemplateLookup
6 |
7 | from mfr.core import extension
8 | from mfr.extensions.pdb import settings
9 | from mfr.extensions.utils import munge_url_for_localdev, escape_url_for_template
10 |
11 |
12 | class PdbRenderer(extension.BaseRenderer):
13 |
14 | TEMPLATE = TemplateLookup(
15 | directories=[
16 | os.path.join(os.path.dirname(__file__), 'templates')
17 | ]).get_template('viewer.mako')
18 |
19 | def render(self):
20 | download_url = munge_url_for_localdev(self.metadata.download_url)
21 | safe_url = escape_url_for_template(download_url.geturl())
22 | return self.TEMPLATE.render(
23 | base=self.assets_url,
24 | url=safe_url,
25 | options=json.dumps(settings.OPTIONS),
26 | )
27 |
28 | @property
29 | def file_required(self):
30 | return False
31 |
32 | @property
33 | def cache_result(self):
34 | return False
35 |
--------------------------------------------------------------------------------
/mfr/extensions/pdb/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 | config = settings.child('PDB_EXTENSION_CONFIG')
4 |
5 | OPTIONS = config.get_object('OPTIONS', {
6 | 'width': 'auto',
7 | 'height': '400',
8 | 'antialias': True,
9 | 'outline': True,
10 | 'quality': 'medium',
11 | 'fog': False
12 | })
13 |
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_diagonals-thick_18_b81900_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_diagonals-thick_18_b81900_40x40.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_diagonals-thick_20_666666_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_diagonals-thick_20_666666_40x40.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_flat_10_000000_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_flat_10_000000_40x100.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_glass_100_f6f6f6_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_glass_100_f6f6f6_1x400.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_glass_100_fdf5ce_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_glass_100_fdf5ce_1x400.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_glass_65_ffffff_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_glass_65_ffffff_1x400.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_gloss-wave_35_f6a828_500x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_gloss-wave_35_f6a828_500x100.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_highlight-soft_100_eeeeee_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_highlight-soft_100_eeeeee_1x100.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-bg_highlight-soft_75_ffe45c_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-bg_highlight-soft_75_ffe45c_1x100.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-icons_228ef1_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-icons_228ef1_256x240.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-icons_ef8c08_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-icons_ef8c08_256x240.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-icons_ffd27a_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-icons_ffd27a_256x240.png
--------------------------------------------------------------------------------
/mfr/extensions/pdb/static/css/ui-icons_ffffff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdb/static/css/ui-icons_ffffff_256x240.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import PdfRenderer # noqa
2 | from .export import PdfExporter # noqa
3 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/exceptions.py:
--------------------------------------------------------------------------------
1 | from mfr.core.exceptions import ExporterError
2 |
3 |
4 | class PillowImageError(ExporterError):
5 | """The Image related errors raised from a :class:`mfr.extentions.pdf`
6 | and relating to the Pillow Library should inherit from PillowImageError
7 | """
8 |
9 | __TYPE = 'pdf_pillow'
10 |
11 | def __init__(self, message, *args, export_format: str='', detected_format: str='',
12 | original_exception: Exception=None, **kwargs):
13 | super().__init__(message, *args, exporter_class='image', **kwargs)
14 |
15 | self.export_format = export_format
16 | self.detected_format = detected_format
17 | self.original_exception = self._format_original_exception(original_exception)
18 |
19 | self.attr_stack.append([self.__TYPE, {
20 | 'export_format': self.export_format,
21 | 'detected_format': self.detected_format,
22 | 'original_exception': self.original_exception,
23 | }])
24 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 |
4 | config = settings.child('PDF_EXTENSION_CONFIG')
5 |
6 | EXPORT_TYPE = config.get('EXPORT_TYPE', 'pdf')
7 | assert EXPORT_TYPE # mandatory config
8 | EXPORT_MAXIMUM_SIZE = config.get('EXPORT_MAXIMUM_SIZE', '1200x1200')
9 |
10 | ENABLE_HYPOTHESIS = config.get_bool('ENABLE_HYPOTHESIS', True)
11 |
12 | # supports multiple files in the form of a space separated string
13 | EXPORT_SUPPORTED = config.get('EXPORT_SUPPORTED', '.tiff .tif').split(' ')
14 | EXPORT_MAX_PAGES = int(config.get('EXPORT_MAX_PAGES', 40))
15 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/images/leftarrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/images/leftarrow.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/images/rightarrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/images/rightarrow.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78ms-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78ms-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/78ms-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/78ms-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/83pv-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/83pv-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/90ms-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/90ms-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/90ms-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/90ms-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/90msp-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/90msp-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/90msp-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/90msp-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/90pv-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/90pv-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/90pv-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/90pv-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Add-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Add-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Add-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Add-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Add-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Add-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Add-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Add-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-0.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-0.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-1.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-1.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-3.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-3.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-4.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-4.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-5.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-5.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-6.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-6.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-UCS2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-CNS1-UCS2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-0.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-0.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-1.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-1.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-3.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-3.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-4.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-4.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-5.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-5.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-UCS2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-GB1-UCS2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-0.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-0.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-1.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-1.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-3.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-3.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-4.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-4.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-5.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-5.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-6.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-6.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-UCS2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Japan1-UCS2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-0.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-0.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-1.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-1.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-UCS2.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Adobe-Korea1-UCS2.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/B5pc-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/B5pc-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/B5pc-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/B5pc-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/CNS-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/CNS-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/CNS-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/CNS-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/CNS1-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/CNS1-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/CNS1-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/CNS1-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/CNS2-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/CNS2-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/CNS2-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/CNS2-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/ETHK-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/ETHK-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/ETHK-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/ETHK-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/ETen-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/ETen-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/ETen-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/ETen-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/ETenms-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/ETenms-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/ETenms-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/ETenms-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Ext-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Ext-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Ext-RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Ext-RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Ext-RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Ext-RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Ext-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Ext-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GB-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GB-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GB-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GB-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GB-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GB-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GB-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GB-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBK-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBK-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBK-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBK-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBK2K-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBK2K-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBK2K-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBK2K-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBKp-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBKp-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBKp-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBKp-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBT-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBT-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBT-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBT-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBT-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBT-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBT-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBT-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBTpc-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBTpc-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBTpc-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBTpc-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBpc-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBpc-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/GBpc-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/GBpc-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKdla-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKdla-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKdla-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKdla-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKdlb-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKdlb-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKdlb-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKdlb-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKgccs-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKgccs-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKgccs-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKgccs-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKm314-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKm314-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKm314-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKm314-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKm471-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKm471-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKm471-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKm471-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKscs-B5-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKscs-B5-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/HKscs-B5-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/HKscs-B5-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Hankaku.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Hankaku.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Hiragana.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Hiragana.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSC-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSC-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSC-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSC-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSC-Johab-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSC-Johab-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSC-Johab-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSC-Johab-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-HW-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-HW-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-HW-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-HW-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSCms-UHC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSCpc-EUC-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSCpc-EUC-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/KSCpc-EUC-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/KSCpc-EUC-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Katakana.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Katakana.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/NWP-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/NWP-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/NWP-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/NWP-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/RKSJ-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/RKSJ-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/RKSJ-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/RKSJ-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/Roman.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/Roman.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UCS2-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UCS2-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UCS2-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UCS2-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF16-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF16-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF16-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF16-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF8-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF8-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF8-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniCNS-UTF8-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UCS2-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UCS2-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UCS2-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UCS2-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF16-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF16-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF16-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF16-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF8-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF8-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF8-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniGB-UTF8-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-HW-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-HW-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-HW-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-HW-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UCS2-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF16-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF16-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF16-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF16-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF8-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF8-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF8-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS-UTF8-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF16-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF16-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF16-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF16-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF8-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF8-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF8-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJIS2004-UTF8-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISPro-UCS2-HW-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISPro-UCS2-HW-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISPro-UCS2-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISPro-UCS2-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISPro-UTF8-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISPro-UTF8-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISX0213-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISX0213-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISX0213-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISX0213-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISX02132004-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISX02132004-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniJISX02132004-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniJISX02132004-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UCS2-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UCS2-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UCS2-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UCS2-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF16-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF16-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF16-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF16-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF32-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF32-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF32-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF32-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF8-H.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF8-H.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF8-V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/UniKS-UTF8-V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/V.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/V.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/cmaps/WP-Symbol.bcmap:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/cmaps/WP-Symbol.bcmap
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/compressed.tracemonkey-pldi-09.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/compressed.tracemonkey-pldi-09.pdf
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-check.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-comment.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-insert.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-key.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-newparagraph.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-noicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-note.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
14 |
21 |
28 |
35 |
42 |
43 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/annotation-paragraph.svg:
--------------------------------------------------------------------------------
1 |
2 |
7 |
13 |
16 |
17 |
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-next-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-next-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-next-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-next-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-next.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-next@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-next@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-previous-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-previous-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-previous-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-previous-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-previous.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-previous.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/findbarButton-previous@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/findbarButton-previous@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/grab.cur:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/grab.cur
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/grabbing.cur:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/grabbing.cur
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/loading-icon.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/loading-icon.gif
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/loading-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/loading-small.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/loading-small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/loading-small@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-documentProperties.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-documentProperties.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-documentProperties@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-documentProperties@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-firstPage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-firstPage.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-firstPage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-firstPage@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-handTool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-handTool.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-handTool@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-handTool@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-lastPage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-lastPage.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-lastPage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-lastPage@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCcw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCcw.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCcw@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCcw@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCw.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCw@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/secondaryToolbarButton-rotateCw@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/shadow.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/texture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/texture.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-bookmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-bookmark.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-bookmark@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-bookmark@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-download.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-download@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-download@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-menuArrows.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-menuArrows.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-menuArrows@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-menuArrows@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-openFile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-openFile.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-openFile@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-openFile@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageDown@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-pageUp@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-presentationMode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-presentationMode.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-presentationMode@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-presentationMode@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-print.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-print.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-print@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-print@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-search.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-search@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-search@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-secondaryToolbarToggle@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-sidebarToggle@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewAttachments.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewAttachments.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewAttachments@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewAttachments@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline-rtl.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline-rtl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline-rtl@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewOutline@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewThumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewThumbnail.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-viewThumbnail@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-viewThumbnail@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-zoomIn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-zoomIn.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-zoomIn@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-zoomIn@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-zoomOut.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-zoomOut.png
--------------------------------------------------------------------------------
/mfr/extensions/pdf/static/web/images/toolbarButton-zoomOut@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/pdf/static/web/images/toolbarButton-zoomOut@2x.png
--------------------------------------------------------------------------------
/mfr/extensions/rst/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import RstRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/rst/render.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import docutils
4 | from docutils.core import publish_parts
5 |
6 | from mako.lookup import TemplateLookup
7 |
8 | from mfr.core import extension
9 |
10 |
11 | class RstRenderer(extension.BaseRenderer):
12 |
13 | TEMPLATE = TemplateLookup(
14 | directories=[
15 | os.path.join(os.path.dirname(__file__), 'templates')
16 | ]).get_template('viewer.mako')
17 |
18 | def __init__(self, *args, **kwargs):
19 | super().__init__(*args, **kwargs)
20 | self.metrics.add('docutils_version', docutils.__version__)
21 |
22 | def render(self):
23 | with open(self.file_path, 'r') as fp:
24 | body = publish_parts(fp.read(), writer_name='html')['html_body']
25 | return self.TEMPLATE.render(base=self.assets_url, body=body)
26 |
27 | @property
28 | def file_required(self):
29 | return True
30 |
31 | @property
32 | def cache_result(self):
33 | return True
34 |
--------------------------------------------------------------------------------
/mfr/extensions/rst/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ${body}
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/mfr/extensions/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 | config = settings.child('EXTENSION_CONFIG')
4 |
5 | # LOCAL_DEVELOPMENT must be set to true for extensions that produce a waterbutler URL in the
6 | # TEMPLATE to render, when using local docker development environment. Call will be coming from
7 | # browser instead of docker container.
8 |
9 | LOCAL_DEVELOPMENT = config.get_bool('LOCAL_DEVELOPMENT', False)
10 | DOCKER_LOCAL_HOST = config.get('DOCKER_LOCAL_HOST', '192.168.168.167')
11 | LOCAL_HOST = config.get('LOCAL_HOST', 'localhost')
12 |
--------------------------------------------------------------------------------
/mfr/extensions/svg/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import SvgRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/svg/render.py:
--------------------------------------------------------------------------------
1 | """SVG Image renderer module."""
2 | import os
3 |
4 | from mako.lookup import TemplateLookup
5 |
6 | from mfr.core import extension
7 | from mfr.extensions.utils import escape_url_for_template
8 |
9 |
10 | class SvgRenderer(extension.BaseRenderer):
11 |
12 | TEMPLATE = TemplateLookup(
13 | directories=[
14 | os.path.join(os.path.dirname(__file__), 'templates')
15 | ]).get_template('viewer.mako')
16 |
17 | def render(self):
18 | safe_url = escape_url_for_template(self.url)
19 | return self.TEMPLATE.render(base=self.assets_url, url=safe_url)
20 |
21 | @property
22 | def file_required(self):
23 | return False
24 |
25 | @property
26 | def cache_result(self):
27 | return False
28 |
--------------------------------------------------------------------------------
/mfr/extensions/svg/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
--------------------------------------------------------------------------------
/mfr/extensions/tabular/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import TabularRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/tabular/compat.py:
--------------------------------------------------------------------------------
1 | from __future__ import division
2 |
3 | range = range
4 | string_types = (str,)
5 | unicode = str
6 | basestring = (str, bytes)
7 |
--------------------------------------------------------------------------------
/mfr/extensions/tabular/libs/__init__.py:
--------------------------------------------------------------------------------
1 | """Imports a function from the correct library. This structure allows the
2 | function name to be passed without initializing its module and without breaking
3 | if the module's requirements are not met. """
4 |
5 |
6 | def csv_stdlib():
7 | from ..libs.stdlib_tools import csv_stdlib
8 | return csv_stdlib
9 |
10 |
11 | def csv_pandas():
12 | from ..libs.panda_tools import csv_pandas
13 | return csv_pandas
14 |
15 |
16 | def tsv_pandas():
17 | from ..libs.panda_tools import tsv_pandas
18 | return tsv_pandas
19 |
20 |
21 | def dta_pandas():
22 | from ..libs.panda_tools import dta_pandas
23 | return dta_pandas
24 |
25 |
26 | def sav_stdlib():
27 | from ..libs.stdlib_tools import sav_stdlib
28 | return sav_stdlib
29 |
30 | def sav_pandas():
31 | from ..libs.panda_tools import sav_pandas
32 | return sav_pandas
33 |
34 |
35 | def xlsx_xlrd():
36 | from ..libs.xlrd_tools import xlsx_xlrd
37 | return xlsx_xlrd
38 |
39 | def mat_h5py_scipy():
40 | from ..libs.h5py_scipy_tools import mat_h5py_scipy
41 | return mat_h5py_scipy
42 |
--------------------------------------------------------------------------------
/mfr/extensions/tabular/libs/ezodf_tools.py:
--------------------------------------------------------------------------------
1 | """ This library works for some ods files but not others. Because it doesn't
2 | work consistently, we have disabled this for the moment."""
3 |
4 | import ezodf
5 | from collections import OrderedDict
6 | from ..utilities import data_population, header_population
7 |
8 |
9 | def ods_ezodf(fp):
10 | """Read and convert a ods file to JSON format using the ezodf library
11 | :param fp: File pointer object
12 | :return: tuple of table headers and data
13 | """
14 |
15 | workbook = ezodf.opendoc(fp.name)
16 | sheets = OrderedDict()
17 |
18 | for sheet in workbook.sheets:
19 | list_data = [[cell.value for cell in row] for row in sheet.rows()]
20 |
21 | header = header_population(list_data[0])
22 | data = data_population(list_data)
23 | sheets[str(sheet)] = (header, data)
24 |
25 | return sheets
26 |
--------------------------------------------------------------------------------
/mfr/extensions/tabular/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 | from mfr.extensions.tabular import libs
3 |
4 |
5 | config = settings.child('TABULAR_EXTENSION_CONFIG')
6 |
7 | MAX_FILE_SIZE = int(config.get('MAX_FILE_SIZE', 10 * 1024 * 1024)) # 10Mb
8 | MAX_SIZE = int(config.get('MAX_SIZE', 10000)) # max number of rows or columns allowed.
9 | TABLE_WIDTH = int(config.get('TABLE_WIDTH', 700))
10 | TABLE_HEIGHT = int(config.get('TABLE_HEIGHT', 600))
11 |
12 | LIBS = config.get_object('LIBS', {
13 | '.csv': [libs.csv_stdlib],
14 | '.tsv': [libs.csv_stdlib],
15 | '.gsheet': [libs.xlsx_xlrd],
16 | '.xlsx': [libs.xlsx_xlrd],
17 | '.xls': [libs.xlsx_xlrd],
18 | '.dta': [libs.dta_pandas],
19 | '.sav': [libs.sav_stdlib],
20 | '.mat': [libs.mat_h5py_scipy],
21 | # '.ods': [libs.ods_ezodf],
22 | })
23 |
24 | SMALL_TABLE = config.get_object('SMALL_TABLE', {
25 | 'enableCellNavigation': True,
26 | 'enableColumnReorder': False,
27 | 'forceFitColumns': True,
28 | 'syncColumnCellResize': True,
29 | 'multiColumnSort': True,
30 | })
31 |
32 | BIG_TABLE = config.get_object('BIG_TABLE', {
33 | 'enableCellNavigation': True,
34 | 'enableColumnReorder': False,
35 | 'syncColumnCellResize': True,
36 | 'multiColumnSort': True,
37 | })
38 |
39 | PSPP_CONVERT_BIN = config.get('PSPP_CONVERT_BIN', '/usr/bin/pspp-convert')
40 | PSPP_CONVERT_TIMEOUT = int(config.get('PSPP_CONVERT_TIMEOUT', 30)) # In seconds
41 |
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/actions.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/actions.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/ajax-loader-small.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/ajax-loader-small.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/arrow_redo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/arrow_redo.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/arrow_right_peppermint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/arrow_right_peppermint.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/arrow_right_spearmint.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/arrow_right_spearmint.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/arrow_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/arrow_undo.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/bullet_blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/bullet_blue.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/bullet_star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/bullet_star.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/bullet_toggle_minus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/bullet_toggle_minus.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/bullet_toggle_plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/bullet_toggle_plus.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/calendar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/calendar.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/collapse.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/collapse.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/comment_yellow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/comment_yellow.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/down.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/down.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/drag-handle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/drag-handle.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/editor-helper-bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/editor-helper-bg.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/expand.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/expand.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/header-bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/header-bg.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/header-columns-bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/header-columns-bg.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/header-columns-over-bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/header-columns-over-bg.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/help.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/help.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/info.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/info.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/listview.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/listview.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/pencil.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/pencil.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/row-over-bg.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/row-over-bg.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/sort-asc.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/sort-asc.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/sort-asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/sort-asc.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/sort-desc.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/sort-desc.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/sort-desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/sort-desc.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/stripes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/stripes.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/tag_red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/tag_red.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/tick.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/tick.png
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/user_identity.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/user_identity.gif
--------------------------------------------------------------------------------
/mfr/extensions/tabular/static/images/user_identity_plus.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/extensions/tabular/static/images/user_identity_plus.gif
--------------------------------------------------------------------------------
/mfr/extensions/unoconv/__init__.py:
--------------------------------------------------------------------------------
1 | from .export import UnoconvExporter # noqa
2 | from .render import UnoconvRenderer # noqa
3 |
--------------------------------------------------------------------------------
/mfr/extensions/unoconv/export.py:
--------------------------------------------------------------------------------
1 | from http import HTTPStatus
2 | from os.path import basename, splitext
3 | from subprocess import run, CalledProcessError
4 |
5 | from mfr.core.extension import BaseExporter
6 | from mfr.core.exceptions import SubprocessError
7 | from mfr.extensions.unoconv.settings import (PORT,
8 | ADDRESS,
9 | UNOCONV_BIN,
10 | UNOCONV_TIMEOUT)
11 |
12 |
13 | class UnoconvExporter(BaseExporter):
14 |
15 | def export(self):
16 | try:
17 | run([
18 | UNOCONV_BIN,
19 | '-n',
20 | '-c', 'socket,host={},port={};urp;StarOffice.ComponentContext'.format(ADDRESS, PORT),
21 | '-f', self.format,
22 | '-o', self.output_file_path,
23 | '-vvv',
24 | self.source_file_path
25 | ], check=True, timeout=UNOCONV_TIMEOUT)
26 | except CalledProcessError as err:
27 | name, extension = splitext(basename(self.source_file_path))
28 | raise SubprocessError(
29 | 'Unable to export the file in the requested format, please try again later.',
30 | process='unoconv',
31 | cmd=str(err.cmd),
32 | returncode=err.returncode,
33 | path=str(self.source_file_path),
34 | code=HTTPStatus.BAD_REQUEST,
35 | extension=extension or '',
36 | exporter_class='unoconv',
37 | )
38 |
--------------------------------------------------------------------------------
/mfr/extensions/unoconv/settings.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from mfr import settings
4 |
5 |
6 | config = settings.child('UNOCONV_EXTENSION_CONFIG')
7 |
8 | UNOCONV_BIN = config.get('UNOCONV_BIN', '/usr/local/bin/unoconv')
9 | UNOCONV_TIMEOUT = int(config.get('UNOCONV_TIMEOUT', 60))
10 |
11 | ADDRESS = config.get('SERVER', os.environ.get('UNOCONV_PORT_2002_TCP_ADDR', '127.0.0.1'))
12 | PORT = config.get('PORT', os.environ.get('UNOCONV_PORT_2002_TCP_PORT', '2002'))
13 |
14 | DEFAULT_RENDER = {'renderer': '.pdf', 'format': 'pdf'}
15 |
16 | RENDER_MAP = config.get_object('RENDER_MAP', {
17 | # 'csv': {'renderer': '.xlsx', 'format': 'xlsx'},
18 | # 'ppt': {'renderer': '.pdf', 'format': 'pdf'},
19 | # 'pptx': {'renderer': '.pdf', 'format': 'pdf'},
20 | })
21 |
--------------------------------------------------------------------------------
/mfr/extensions/video/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import VideoRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/video/render.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from mako.lookup import TemplateLookup
4 |
5 | from mfr.core import extension
6 | from mfr.extensions.utils import munge_url_for_localdev, escape_url_for_template
7 |
8 |
9 | class VideoRenderer(extension.BaseRenderer):
10 |
11 | TEMPLATE = TemplateLookup(
12 | directories=[
13 | os.path.join(os.path.dirname(__file__), 'templates')
14 | ]).get_template('viewer.mako')
15 |
16 | def render(self):
17 | download_url = munge_url_for_localdev(self.metadata.download_url)
18 | safe_url = escape_url_for_template(download_url.geturl())
19 | return self.TEMPLATE.render(url=safe_url)
20 |
21 | @property
22 | def file_required(self):
23 | return False
24 |
25 | @property
26 | def cache_result(self):
27 | return False
28 |
--------------------------------------------------------------------------------
/mfr/extensions/video/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 | Your browser does not support the video tag.
12 |
13 |
14 |
15 |
16 |
19 |
--------------------------------------------------------------------------------
/mfr/extensions/zip/__init__.py:
--------------------------------------------------------------------------------
1 | from .render import ZipRenderer # noqa
2 |
--------------------------------------------------------------------------------
/mfr/extensions/zip/render.py:
--------------------------------------------------------------------------------
1 | import os
2 | import zipfile
3 |
4 | import markupsafe
5 | from mako.lookup import TemplateLookup
6 |
7 | from mfr.core import extension
8 | from mfr.core.utils import sizeof_fmt
9 |
10 |
11 | class ZipRenderer(extension.BaseRenderer):
12 |
13 | TEMPLATE = TemplateLookup(
14 | directories=[
15 | os.path.join(os.path.dirname(__file__), 'templates')
16 | ]).get_template('viewer.mako')
17 |
18 | def render(self):
19 | zip_file = zipfile.ZipFile(self.file_path, 'r')
20 |
21 | filelist = [{'name': markupsafe.escape(file.filename),
22 | 'size': sizeof_fmt(int(file.file_size)),
23 | 'date': "%d-%02d-%02d %02d:%02d:%02d" % file.date_time[:6]} for file in zip_file.filelist
24 | if not file.filename.startswith('__MACOSX')]
25 |
26 | message = '' if filelist else 'This zip file is empty.'
27 |
28 | return self.TEMPLATE.render(zipped_filenames=filelist, message=message)
29 |
30 | @property
31 | def file_required(self):
32 | return True
33 |
34 | @property
35 | def cache_result(self):
36 | return True
37 |
--------------------------------------------------------------------------------
/mfr/extensions/zip/templates/viewer.mako:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Zip File:
7 |
8 |
9 | Download the .zip file to view the contents.
10 |
11 | ${message}
12 |
13 |
14 | File Name
15 | Modified
16 | Size
17 |
18 |
19 | % for file in zipped_filenames:
20 |
21 | ${file['name']}
22 | ${file['date']}
23 | ${file['size']}
24 |
25 | % endfor
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/mfr/providers/__init__.py:
--------------------------------------------------------------------------------
1 | __import__("pkg_resources").declare_namespace(__name__)
2 |
--------------------------------------------------------------------------------
/mfr/providers/http/__init__.py:
--------------------------------------------------------------------------------
1 | from .provider import HttpProvider # noqa
2 |
--------------------------------------------------------------------------------
/mfr/providers/http/provider.py:
--------------------------------------------------------------------------------
1 | import os
2 | import hashlib
3 | import logging
4 | import mimetypes
5 | from urllib.parse import urlparse
6 |
7 | import aiohttp
8 |
9 | from waterbutler.core import streams
10 |
11 | from mfr.core import provider
12 | from mfr.core import exceptions
13 |
14 | logger = logging.getLogger(__name__)
15 |
16 |
17 | class HttpProvider(provider.BaseProvider):
18 | """Basic MFR provider. Infers file metadata (extension, type) from the url. Downloads by
19 | issuing a GET to the url.
20 | """
21 |
22 | NAME = 'http'
23 |
24 | async def metadata(self):
25 | path = urlparse(self.url).path
26 | name, ext = os.path.splitext(os.path.split(path)[-1])
27 | content_type, _ = mimetypes.guess_type(self.url)
28 | unique_key = hashlib.sha256(self.url.encode('utf-8')).hexdigest()
29 | return provider.ProviderMetadata(name, ext, content_type, unique_key, self.url)
30 |
31 | async def download(self):
32 | response = await aiohttp.request('GET', self.url)
33 | if response.status >= 400:
34 | err_resp = await response.read()
35 | logger.error('Unable to download file: ({}) {}'.format(response.status, err_resp.decode('utf-8')))
36 | raise exceptions.DownloadError(
37 | 'Unable to download the requested file, please try again later.',
38 | download_url=self.url,
39 | response=await response.text(),
40 | code=response.status,
41 | provider='http',
42 | )
43 | return streams.ResponseStreamReader(response)
44 |
--------------------------------------------------------------------------------
/mfr/providers/http/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 |
4 | config = settings.child('HTTP_PROVIDER_CONFIG')
5 |
--------------------------------------------------------------------------------
/mfr/providers/osf/__init__.py:
--------------------------------------------------------------------------------
1 | from .provider import OsfProvider # noqa
2 |
--------------------------------------------------------------------------------
/mfr/providers/osf/settings.py:
--------------------------------------------------------------------------------
1 | from mfr import settings
2 |
3 |
4 | config = settings.child('OSF_PROVIDER_CONFIG')
5 |
6 | MFR_IDENTIFYING_HEADER = config.get('MFR_IDENTIFYING_HEADER', 'X-Cos-Mfr-Render-Request')
7 | MFR_ACTION_HEADER = config.get('MFR_ACTION_HEADER', 'X-Cos-Mfr-Request-Action')
8 |
--------------------------------------------------------------------------------
/mfr/server/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/server/__init__.py
--------------------------------------------------------------------------------
/mfr/server/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/server/handlers/__init__.py
--------------------------------------------------------------------------------
/mfr/server/handlers/exporters.py:
--------------------------------------------------------------------------------
1 | import pkg_resources
2 | import tornado.web
3 |
4 |
5 | class ExportersHandler(tornado.web.RequestHandler):
6 |
7 | def get(self):
8 | """List available exporters"""
9 |
10 | exporters = {}
11 | for ep in pkg_resources.iter_entry_points(group='mfr.exporters'):
12 | exporters.update({ep.name: ep.load().__name__})
13 |
14 | self.write({
15 | 'exporters': exporters,
16 | })
17 |
--------------------------------------------------------------------------------
/mfr/server/handlers/renderers.py:
--------------------------------------------------------------------------------
1 | import pkg_resources
2 | import tornado.web
3 |
4 |
5 | class RenderersHandler(tornado.web.RequestHandler):
6 |
7 | def get(self):
8 | """List available renderers"""
9 |
10 | renderers = {}
11 | for ep in pkg_resources.iter_entry_points(group='mfr.renderers'):
12 | renderers.update({ep.name: ep.load().__name__})
13 |
14 | self.write({
15 | 'renderers': renderers,
16 | })
17 |
--------------------------------------------------------------------------------
/mfr/server/handlers/status.py:
--------------------------------------------------------------------------------
1 | import tornado.web
2 |
3 | from mfr.version import __version__
4 |
5 |
6 | class StatusHandler(tornado.web.RequestHandler):
7 |
8 | def get(self):
9 | """List information about modular-file-renderer status"""
10 | self.write({
11 | 'status': 'up',
12 | 'version': __version__
13 | })
14 |
--------------------------------------------------------------------------------
/mfr/server/static/css/mfr.css:
--------------------------------------------------------------------------------
1 | .mfr-logo-spin {
2 | -webkit-animation: mfr-spin 3s infinite linear, mfr-opacity 3s infinite linear;
3 | -moz-animation: mfr-spin 3s infinite linear mfr-opacity 3s infinite linear;
4 | animation: mfr-spin 3s infinite linear, mfr-opacity 3s infinite linear;
5 | position: absolute;
6 | top: 0;
7 | left: 50%;
8 | z-index: -1;
9 | }
10 | @-moz-keyframes mfr-spin {
11 | from {
12 | -moz-transform: rotate(0deg);
13 | }
14 | to {
15 | -moz-transform: rotate(360deg);
16 | }
17 | }
18 | @-webkit-keyframes mfr-spin {
19 | from {
20 | -webkit-transform: rotate(0deg);
21 | }
22 | to {
23 | -webkit-transform: rotate(360deg);
24 | }
25 | }
26 | @keyframes mfr-spin {
27 | from {
28 | -webkit-transform: rotate(0deg);
29 | transform:rotate(0deg);
30 | }
31 | to {
32 | -webkit-transform: rotate(360deg);
33 | transform:rotate(360deg);
34 | }
35 | }
36 | @-moz-keyframes mfr-opacity {
37 | 0% {
38 | opacity : 0.1
39 | }
40 | 50% {
41 | opacity: 1
42 | }
43 | 100% {
44 | opacity: 0.1
45 | }
46 | }
47 | @-webkit-keyframes mfr-opacity {
48 | 0% {
49 | opacity : 0.1
50 | }
51 | 50% {
52 | opacity: 1
53 | }
54 | 100% {
55 | opacity: 0.1
56 | }
57 | }
58 | @keyframes mfr-opacity {
59 | 0% {
60 | opacity : 0.1
61 | }
62 | 50% {
63 | opacity: 1
64 | }
65 | 100% {
66 | opacity: 0.1
67 | }
68 | }
69 |
70 | .embed-responsive-pdf {
71 | padding-bottom: 95%;
72 | }
--------------------------------------------------------------------------------
/mfr/server/static/images/cos_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/server/static/images/cos_logo.png
--------------------------------------------------------------------------------
/mfr/server/static/images/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/server/static/images/loading.png
--------------------------------------------------------------------------------
/mfr/server/static/images/vid-thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/mfr/server/static/images/vid-thumbnail.png
--------------------------------------------------------------------------------
/mfr/server/static/js/mfr.child.js:
--------------------------------------------------------------------------------
1 | ;(function() {
2 | 'use strict';
3 |
4 | window.pymChild = new pym.Child();
5 |
6 | window.addEventListener('load', function () {
7 | window.pymChild.sendHeight();
8 |
9 | var anchors = document.getElementsByTagName('a');
10 | Array.prototype.slice.call(anchors).forEach(function (el) {
11 | el.addEventListener('click', function (e) {
12 | if (this.href !== undefined &&
13 | this.href !== "" &&
14 | this.href[0] !== '#') {
15 | e.preventDefault();
16 | window.pymChild.sendMessage('location', this.href);
17 | }
18 | });
19 | });
20 | });
21 |
22 | window.addEventListener('resize', function () {
23 | window.pymChild.sendHeight();
24 | });
25 |
26 | window.pymChild.onMessage('resize', function () {
27 | window.pymChild.sendHeight();
28 | });
29 | })();
30 |
--------------------------------------------------------------------------------
/mfr/version.py:
--------------------------------------------------------------------------------
1 | __version__ = '24.0.0'
2 |
--------------------------------------------------------------------------------
/readthedocs.yml:
--------------------------------------------------------------------------------
1 | requirements_file: doc-requirements.txt
2 | python:
3 | setup_py_install: true
4 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | aiohttp==0.18.4
2 | chardet==2.3.0
3 | furl==0.4.2
4 | humanfriendly==2.1
5 | invoke==0.13.0
6 | mako==1.0.1
7 | raven==5.27.0
8 | setuptools==37.0.0
9 | stevedore==1.2.0
10 | tornado==4.3
11 |
12 | # WaterButler
13 | git+https://github.com/CenterForOpenScience/waterbutler.git@0.38.6#egg=waterbutler
14 | agent==0.1.2
15 | google-auth==1.4.1
16 |
17 | # CodePygments
18 | Pygments==2.12.0
19 |
20 | # Docx
21 | #git+https://github.com/jsocol/bleach.git
22 | pydocx==0.7.0
23 |
24 | # Image
25 | olefile==0.44
26 | Pillow==4.3.0
27 | psd-tools==1.4
28 |
29 | # IPython
30 | ipython==5.2.2
31 | nbconvert==4.2.0
32 | nbformat==4.1.0
33 | traitlets==4.2.2
34 | jsonschema==2.4.0
35 | jinja2==2.10.1
36 | mistune==0.8.1
37 |
38 | # Pdf
39 | reportlab==3.6.5
40 |
41 | # Pptx
42 | # python-pptx==0.5.7
43 |
44 | # Rst
45 | docutils==0.12
46 |
47 | # Tabular
48 | pandas==0.25.1
49 | xlrd==1.0.0
50 | h5py==2.7.0
51 | scipy==0.19.1
52 |
53 | # Md
54 | markdown==2.6.2
55 |
56 | certifi==2021.5.30
57 |
--------------------------------------------------------------------------------
/setup.cfg:
--------------------------------------------------------------------------------
1 | # E501: Line too long
2 | # E127: continuation line over-indented for visual indent
3 | # E128: continuation line under-indented for visual indent
4 | # E265: block comment should start with #
5 | # E301: expected 1 blank line, found 0
6 | # E302: expected 2 blank lines, found 0
7 | # F403: unable to detect undefined names
8 | [flake8]
9 | ignore = E501,E127,E128,E265,E301,E302,F403,E731
10 | max-line-length = 100
11 | exclude = .ropeproject,tests/*,src/*,env,venv,node_modules/*
12 |
13 | [pytest]
14 | norecursedirs = .* build CVS _darcs {arch} *.egg venv node_modules/*
15 |
--------------------------------------------------------------------------------
/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/__init__.py
--------------------------------------------------------------------------------
/tests/core/test_utils.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | import pkg_resources
3 |
4 | from mfr.core import utils as mfr_utils
5 |
6 |
7 | class TestGetRendererName:
8 |
9 | def test_get_renderer_name_explicit_assertions(self):
10 | assert mfr_utils.get_renderer_name('.jpg') == 'ImageRenderer'
11 | assert mfr_utils.get_renderer_name('.txt') == 'CodePygmentsRenderer'
12 | assert mfr_utils.get_renderer_name('.xlsx') == 'TabularRenderer'
13 | assert mfr_utils.get_renderer_name('.odt') == 'UnoconvRenderer'
14 | assert mfr_utils.get_renderer_name('.pdf') == 'PdfRenderer'
15 |
16 | def test_get_renderer_name(self):
17 | entry_points = pkg_resources.iter_entry_points(group='mfr.renderers')
18 | for ep in entry_points:
19 | expected = ep.attrs[0]
20 | assert mfr_utils.get_renderer_name(ep.name) == expected
21 |
22 | def test_get_renderer_name_no_entry_point(self):
23 | assert mfr_utils.get_renderer_name('jpg') == '' # extensions must begin with a period
24 |
25 |
26 | class TestGetExporterName:
27 |
28 | def test_get_exporter_name_explicit_assertions(self):
29 | assert mfr_utils.get_exporter_name('.jpg') == 'ImageExporter'
30 | assert mfr_utils.get_exporter_name('.odt') == 'UnoconvExporter'
31 |
32 | def test_get_exporter_name(self):
33 | entry_points = pkg_resources.iter_entry_points(group='mfr.exporters')
34 | for ep in entry_points:
35 | expected = ep.attrs[0]
36 | assert mfr_utils.get_exporter_name(ep.name) == expected
37 |
38 | def test_get_exporter_name_no_entry_point(self):
39 | assert mfr_utils.get_exporter_name('jpg') == '' # extensions must begin with a period
40 |
--------------------------------------------------------------------------------
/tests/documentation/test_entrypoints.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | import pytest
4 | import pkg_resources
5 |
6 |
7 | class TestEntryPoints:
8 |
9 | def test_entry_points(self):
10 |
11 | parent_dir = os.pardir
12 | readme_path = os.path.join(os.path.dirname((parent_dir)), 'supportedextensions.md')
13 | with open(readme_path, 'r') as file:
14 | readme_ext = [line.strip()[2:] for line in file if '*' in line]
15 | for ep in pkg_resources.iter_entry_points(group='mfr.renderers'):
16 | if ep.name != 'none':
17 | assert ep.name in readme_ext
18 |
--------------------------------------------------------------------------------
/tests/extensions/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/audio/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/audio/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/audio/test_renderer.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | from mfr.core.provider import ProviderMetadata
4 |
5 | from mfr.extensions.audio import AudioRenderer
6 |
7 |
8 | @pytest.fixture
9 | def metadata():
10 | return ProviderMetadata('test', '.mp3', 'text/plain', '1234', 'http://wb.osf.io/file/test.mp3?token=1234')
11 |
12 |
13 | @pytest.fixture
14 | def file_path():
15 | return '/tmp/test.mp3'
16 |
17 |
18 | @pytest.fixture
19 | def url():
20 | return 'http://osf.io/file/test.mp3'
21 |
22 |
23 | @pytest.fixture
24 | def assets_url():
25 | return 'http://mfr.osf.io/assets'
26 |
27 |
28 | @pytest.fixture
29 | def export_url():
30 | return 'http://mfr.osf.io/export?url=' + url()
31 |
32 |
33 | @pytest.fixture
34 | def renderer(metadata, file_path, url, assets_url, export_url):
35 | return AudioRenderer(metadata, file_path, url, assets_url, export_url)
36 |
37 |
38 | class TestAudioRenderer:
39 |
40 | def test_render_audio(self, renderer, url):
41 | body = renderer.render()
42 | assert '' in body
43 | assert 'src="{}"'.format(url) in body
44 |
45 | def test_render_audio_file_required(self, renderer):
46 | assert renderer.file_required is False
47 |
48 | def test_render_audio_cache_result(self, renderer):
49 | assert renderer.cache_result is False
50 |
--------------------------------------------------------------------------------
/tests/extensions/codepygments/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/codepygments/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/encodings/complex.utf16.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/codepygments/files/encodings/complex.utf16.txt
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/encodings/complex.utf8.txt:
--------------------------------------------------------------------------------
1 | Héllö!
2 | แป็ด
3 |
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/encodings/iso-8859-looks-like-utf16.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/codepygments/files/encodings/iso-8859-looks-like-utf16.txt
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/encodings/simple.cp1252.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/codepygments/files/encodings/simple.cp1252.txt
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/encodings/simple.utf16.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/codepygments/files/encodings/simple.utf16.txt
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/encodings/simple.utf8.txt:
--------------------------------------------------------------------------------
1 | Héllö!
2 |
--------------------------------------------------------------------------------
/tests/extensions/codepygments/files/invalid.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/codepygments/files/invalid.xml
--------------------------------------------------------------------------------
/tests/extensions/docx/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/docx/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/docx/files/test.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/docx/files/test.docx
--------------------------------------------------------------------------------
/tests/extensions/image/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/image/files/test.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test.bmp
--------------------------------------------------------------------------------
/tests/extensions/image/files/test.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test.jpeg
--------------------------------------------------------------------------------
/tests/extensions/image/files/test.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test.jpg
--------------------------------------------------------------------------------
/tests/extensions/image/files/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test.png
--------------------------------------------------------------------------------
/tests/extensions/image/files/test.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test.psd
--------------------------------------------------------------------------------
/tests/extensions/image/files/test_ratio.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test_ratio.jpg
--------------------------------------------------------------------------------
/tests/extensions/image/files/test_transparency.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/image/files/test_transparency.png
--------------------------------------------------------------------------------
/tests/extensions/ipynb/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/ipynb/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/jamovi/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/contains-malicious-script.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/contains-malicious-script.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/data-archive-version-is-too-old.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/data-archive-version-is-too-old.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/no-data-archive-version-in-manifest.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/no-data-archive-version-in-manifest.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/no-index_html.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/no-index_html.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/no-manifest.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/no-manifest.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/not-a-zip-file.omv:
--------------------------------------------------------------------------------
1 | this really isn't a zip file
2 |
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/ok-new-manifest.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/ok-new-manifest.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/ok-old-manifest.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/ok-old-manifest.omv
--------------------------------------------------------------------------------
/tests/extensions/jamovi/files/ok-with-image.omv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jamovi/files/ok-with-image.omv
--------------------------------------------------------------------------------
/tests/extensions/jasp/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/contains-malicious-script.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/contains-malicious-script.jasp
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/data-archive-version-is-too-old.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/data-archive-version-is-too-old.jasp
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/no-data-archive-version-in-manifest.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/no-data-archive-version-in-manifest.jasp
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/no-index_html.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/no-index_html.jasp
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/no-manifest.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/no-manifest.jasp
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/not-a-zip-file.jasp:
--------------------------------------------------------------------------------
1 | this really isn't a zip file
2 |
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/ok-new-manifest.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/ok-new-manifest.jasp
--------------------------------------------------------------------------------
/tests/extensions/jasp/files/ok-old-manifest.jasp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jasp/files/ok-old-manifest.jasp
--------------------------------------------------------------------------------
/tests/extensions/jsc3d/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/jsc3d/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/jsc3d/test_renderer.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | from mfr.core.provider import ProviderMetadata
4 |
5 | from mfr.extensions.jsc3d import JSC3DRenderer
6 |
7 |
8 | @pytest.fixture
9 | def metadata():
10 | return ProviderMetadata('test', '.stl', 'text/plain', '1234', 'http://wb.osf.io/file/test.stl?token=1234')
11 |
12 |
13 | @pytest.fixture
14 | def file_path():
15 | return '/tmp/test.stl'
16 |
17 |
18 | @pytest.fixture
19 | def url():
20 | return 'http://osf.io/file/test.stl'
21 |
22 |
23 | @pytest.fixture
24 | def assets_url():
25 | return 'http://mfr.osf.io/assets'
26 |
27 |
28 | @pytest.fixture
29 | def export_url():
30 | return 'http://mfr.osf.io/export?url=' + url()
31 |
32 |
33 | @pytest.fixture
34 | def renderer(metadata, file_path, url, assets_url, export_url):
35 | return JSC3DRenderer(metadata, file_path, url, assets_url, export_url)
36 |
37 |
38 | class TestJSC3DRenderer:
39 |
40 | def test_render_stl(self, renderer):
41 | body = renderer.render()
42 | assert ' ' in body
43 | assert 'viewer.init();' in body
44 |
--------------------------------------------------------------------------------
/tests/extensions/md/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/md/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/md/files/invalid.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/md/files/invalid.md
--------------------------------------------------------------------------------
/tests/extensions/md/files/test.md:
--------------------------------------------------------------------------------
1 | Heading
2 | =======
3 |
4 | Sub-heading
5 | -----------
6 |
7 | ### Another deeper heading
8 |
9 | Paragraphs are separated
10 | by a blank line.
11 |
12 | Leave 2 spaces at the end of a line to do a
13 | line break
14 |
15 | Text attributes *italic*, **bold**,
16 | `monospace`.
17 |
18 | A [link](http://example.com).
19 | [28]
20 |
21 | Shopping list:
22 |
23 | * apples
24 | * oranges
25 | * pears
26 |
27 | Numbered list:
28 |
29 | 1. apples
30 | 2. oranges
31 | 3. pears
32 |
33 | The rain---not the reign---in
34 | Spain.
35 |
36 |
39 |
--------------------------------------------------------------------------------
/tests/extensions/pdb/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdb/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/pdb/test_renderer.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | from mfr.core.provider import ProviderMetadata
4 |
5 | from mfr.extensions.pdb import PdbRenderer
6 |
7 |
8 | @pytest.fixture
9 | def metadata():
10 | return ProviderMetadata('test', '.pdb', 'text/plain', '1234', 'http://wb.osf.io/file/test.pdb?token=1234')
11 |
12 |
13 | @pytest.fixture
14 | def file_path():
15 | return '/tmp/test.pdb'
16 |
17 |
18 | @pytest.fixture
19 | def url():
20 | return 'http://osf.io/file/test.pdb'
21 |
22 |
23 | @pytest.fixture
24 | def assets_url():
25 | return 'http://mfr.osf.io/assets'
26 |
27 |
28 | @pytest.fixture
29 | def export_url():
30 | return 'http://mfr.osf.io/export?url=' + url()
31 |
32 |
33 | @pytest.fixture
34 | def renderer(metadata, file_path, url, assets_url, export_url):
35 | return PdbRenderer(metadata, file_path, url, assets_url, export_url)
36 |
37 |
38 | class TestPdbRenderer:
39 |
40 | def test_render_pdb(self, renderer):
41 | body = renderer.render()
42 | assert '
' in body
43 |
--------------------------------------------------------------------------------
/tests/extensions/pdf/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdf/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/pdf/files/invalid.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdf/files/invalid.tif
--------------------------------------------------------------------------------
/tests/extensions/pdf/files/test.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdf/files/test.tif
--------------------------------------------------------------------------------
/tests/extensions/pdf/files/test_broken.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdf/files/test_broken.tif
--------------------------------------------------------------------------------
/tests/extensions/pdf/files/test_multipage.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdf/files/test_multipage.tif
--------------------------------------------------------------------------------
/tests/extensions/pdf/files/test_ratio.tif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/pdf/files/test_ratio.tif
--------------------------------------------------------------------------------
/tests/extensions/rst/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/rst/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/rst/files/invalid.rst:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/rst/files/invalid.rst
--------------------------------------------------------------------------------
/tests/extensions/rst/files/test.rst:
--------------------------------------------------------------------------------
1 | ****
2 | Test
3 | ****
4 |
5 |
8 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/invalid.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/files/invalid.csv
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/invalid.dta:
--------------------------------------------------------------------------------
1 | ,id,target,gender,likely_discriminated,promoted,responsible,compensated,would_apply,chances,attractive_employer,put_off_similar_jobs,work,work_experience,studies,age
2 | 0,159.0,Erik,male,4.0,4.0,4.0,1.0,6.0,6.0,1.0,1.0,studier,mattlig,Psykologi,22.0
3 | 1,97.0,Maria,male,5.0,4.0,6.0,4.0,4.0,4.0,2.0,1.0,studier,stor,Elektroteknik,25.0
4 | 2,56.0,Erik,male,1.0,4.0,1.0,1.0,5.0,1.0,4.0,1.0,studier,lite,Medicin,23.0
5 | 3,205.0,Maria,male,1.0,4.0,7.0,1.0,7.0,1.0,4.0,1.0,studier,mattlig,ekonomi och ledarskap,25.0
6 | 4,206.0,Erik,male,1.0,1.0,1.0,1.0,7.0,4.0,4.0,1.0,studier,mattlig,miljö,25.0
7 | 5,210.0,Erik,male,1.0,1.0,1.0,1.0,7.0,4.0,4.0,1.0,arbete,mattlig, ,34.0
8 | 6,151.0,Maria,male,1.0,4.0,2.0,1.0,7.0,4.0,4.0,1.0,studier,mattlig,Strat komm,24.0
9 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/invalid.tsv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/files/invalid.tsv
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/invalidVer70.mat:
--------------------------------------------------------------------------------
1 | one,two,three
2 | à,b,c
3 | 1,2,3
4 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/invalidVer73.mat:
--------------------------------------------------------------------------------
1 | one,two,three
2 | à,b,c
3 | 1,2,3
4 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/test.csv:
--------------------------------------------------------------------------------
1 | one,two,three
2 | à,b,c
3 | 1,2,3
4 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/test.dta:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/files/test.dta
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/test.tsv:
--------------------------------------------------------------------------------
1 | one two three
2 | a b c
3 | 1 2 3
4 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/test.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/files/test.xlsx
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/testVer70.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/files/testVer70.mat
--------------------------------------------------------------------------------
/tests/extensions/tabular/files/testVer73.mat:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/tabular/files/testVer73.mat
--------------------------------------------------------------------------------
/tests/extensions/tabular/test_mat_tools.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from mfr.extensions.tabular.libs import mat_h5py_scipy
4 |
5 | BASE = os.path.dirname(os.path.abspath(__file__))
6 |
7 |
8 | class TestTabularMatTools:
9 |
10 | def test_mat_73(self):
11 | with open(os.path.join(BASE, 'files', 'testVer73.mat')) as fp:
12 | # The two test functions are basically exactly the same. That is because
13 | # there are different types of mat files. The only way to tell them apart is to
14 | # try and load them.
15 | sheets = mat_h5py_scipy()(fp)
16 |
17 | sheet = sheets.popitem()[1]
18 | assert sheet == ([{'id': 1, 'name': 1, 'field': 1, 'sortable': True}], [{1: 1.0}])
19 |
20 | def test_mat_70(self):
21 | with open(os.path.join(BASE, 'files', 'testVer70.mat')) as fp:
22 | # The two test functions are basically exactly the same. That is because
23 | # there are different types of mat files. The only way to tell them apart is to
24 | # try and load them.
25 | sheets = mat_h5py_scipy()(fp)
26 |
27 | sheet = sheets.popitem()[1]
28 | assert sheet == ([{'id': 1, 'name': 1, 'field': 1, 'sortable': True}], [{1: 1.0}])
29 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/test_utilities.py:
--------------------------------------------------------------------------------
1 | from mfr.extensions.tabular import utilities
2 |
3 |
4 | class TestTabularUtilities:
5 |
6 | def test_header_population_returns_list_of_dicts(self):
7 | fake_headers = ['one', 'two', 'three']
8 | populated = utilities.header_population(fake_headers)
9 | assert type(populated) == list
10 | assert type(populated[0]) == dict
11 | assert len(populated) == 3
12 |
13 | def test_data_population_returns_list_of_dicts(self):
14 | fake_headers = ['one', 'two', 'three']
15 | fake_data = [['a', 'b', 'c'], ['1', '2', '3']]
16 | populated = utilities.data_population(fake_data, fake_headers)
17 | assert type(populated) == list
18 | assert type(populated[0]) == dict
19 | assert len(populated) == 2
20 |
21 | def test_data_population_without_headers(self):
22 | fake_data = [['one', 'two', 'three'], ['a', 'b', 'c'], ['1', '2', '3']]
23 | populated = utilities.data_population(fake_data)
24 | assert type(populated) == list
25 | assert type(populated[0]) == dict
26 | assert len(populated) == 3
27 |
--------------------------------------------------------------------------------
/tests/extensions/tabular/test_xlsx_tools.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | from mfr.extensions.tabular.libs import xlrd_tools
4 |
5 | BASE = os.path.dirname(os.path.abspath(__file__))
6 |
7 |
8 | class TestTabularPandaTools:
9 |
10 | def test_xlsx_xlrd(self):
11 | with open(os.path.join(BASE, 'files', 'test.xlsx')) as fp:
12 | sheets = xlrd_tools.xlsx_xlrd(fp)
13 |
14 | sheet = sheets.popitem()[1]
15 | assert sheet[0][0] == {'field': 'one', 'id': 'one', 'name': 'one', 'sortable': True}
16 | assert sheet[0][1] == {'field': 'two', 'id': 'two', 'name': 'two', 'sortable': True}
17 | assert sheet[0][2] == {'field': 'three', 'id': 'three', 'name': 'three', 'sortable': True}
18 | assert sheet[1][0] == {'one': 'a', 'two': 'b', 'three': 'c'}
19 | assert sheet[1][1] == {'one': 1.0, 'two': 2.0, 'three': 3.0}
20 | assert sheet[1][2] == {'one': u'wierd\\x97', 'two': u'char\\x98','three': u'set\\x99'}
21 |
--------------------------------------------------------------------------------
/tests/extensions/video/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/video/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/video/test_renderer.py:
--------------------------------------------------------------------------------
1 | import pytest
2 |
3 | from mfr.core.provider import ProviderMetadata
4 | from mfr.extensions.video import VideoRenderer
5 |
6 |
7 | @pytest.fixture
8 | def metadata():
9 | return ProviderMetadata('test', '.mp4', 'text/plain', '1234',
10 | 'http://wb.osf.io/file/test.mp4?token=1234')
11 |
12 |
13 | @pytest.fixture
14 | def file_path():
15 | return '/tmp/test.mp4'
16 |
17 |
18 | @pytest.fixture
19 | def url():
20 | return 'http://osf.io/file/test.mp4'
21 |
22 |
23 | @pytest.fixture
24 | def assets_url():
25 | return 'http://mfr.osf.io/assets'
26 |
27 |
28 | @pytest.fixture
29 | def export_url():
30 | return 'http://mfr.osf.io/export?url=' + url()
31 |
32 |
33 | @pytest.fixture
34 | def renderer(metadata, file_path, url, assets_url, export_url):
35 | return VideoRenderer(metadata, file_path, url, assets_url, export_url)
36 |
37 |
38 | class TestVideoRenderer:
39 |
40 | def test_render_video(self, renderer, url):
41 | body = renderer.render()
42 | assert 'body{margin:0;padding:0;}' in ''.join(body.split())
45 |
46 | def test_render_video_file_required(self, renderer):
47 | assert renderer.file_required is False
48 |
49 | def test_render_video_cache_result(self, renderer):
50 | assert renderer.cache_result is False
51 |
--------------------------------------------------------------------------------
/tests/extensions/zip/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/zip/__init__.py
--------------------------------------------------------------------------------
/tests/extensions/zip/files/empty.zip:
--------------------------------------------------------------------------------
1 | PK
--------------------------------------------------------------------------------
/tests/extensions/zip/files/test.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/extensions/zip/files/test.zip
--------------------------------------------------------------------------------
/tests/server/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/server/__init__.py
--------------------------------------------------------------------------------
/tests/server/handlers/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CenterForOpenScience/modular-file-renderer/a7ef407b3f9a22f7f25232f1b292ddf040b6eded/tests/server/handlers/__init__.py
--------------------------------------------------------------------------------
/tests/server/handlers/test_exporters.py:
--------------------------------------------------------------------------------
1 | import json
2 |
3 | import pkg_resources
4 | from tornado import testing
5 |
6 | from tests import utils
7 |
8 |
9 | class TestExportersHandler(utils.HandlerTestCase):
10 |
11 | @testing.gen_test
12 | def test_get_status(self):
13 | resp = yield self.http_client.fetch(self.get_url('/exporters'))
14 |
15 | exporters = {}
16 | for ep in pkg_resources.iter_entry_points(group='mfr.exporters'):
17 | exporters.update({ep.name: ep.load().__name__})
18 |
19 | data = json.loads(resp.body.decode('utf-8'))
20 | assert resp.code == 200
21 | assert data['exporters'] == exporters
22 |
--------------------------------------------------------------------------------
/tests/server/handlers/test_query_params.py:
--------------------------------------------------------------------------------
1 | from http import HTTPStatus
2 |
3 | import pytest
4 | from tornado import testing
5 | from tornado.httpclient import HTTPError
6 |
7 | from tests import utils
8 |
9 |
10 | class TestRenderHandler(utils.HandlerTestCase):
11 |
12 | @testing.gen_test
13 | def test_format_url(self):
14 |
15 | with pytest.raises(HTTPError) as e:
16 | yield self.http_client.fetch(self.get_url('/export'), method='GET')
17 | assert e.value.message == 'Bad Request'
18 | assert e.value.code == HTTPStatus.BAD_REQUEST
19 |
20 | with pytest.raises(HTTPError) as e:
21 | yield self.http_client.fetch(self.get_url('/export?format=pdf'), method='GET')
22 | assert e.value.message == 'Bad Request'
23 | assert e.value.code == HTTPStatus.BAD_REQUEST
24 |
25 | with pytest.raises(HTTPError) as e:
26 | yield self.http_client.fetch(self.get_url('/export?url=http://test.com'), method='GET')
27 | assert e.value.message == 'Bad Request'
28 | assert e.value.code == HTTPStatus.BAD_REQUEST
29 |
--------------------------------------------------------------------------------
/tests/server/handlers/test_render.py:
--------------------------------------------------------------------------------
1 | from tests import utils
2 | from tornado import testing
3 |
4 |
5 | class TestRenderHandler(utils.HandlerTestCase):
6 |
7 | @testing.gen_test
8 | def test_options_skips_prepare(self):
9 | # Would crash b/c lack of mocks
10 | yield self.http_client.fetch(
11 | self.get_url('/render'),
12 | method='OPTIONS'
13 | )
14 |
--------------------------------------------------------------------------------
/tests/server/handlers/test_renderers.py:
--------------------------------------------------------------------------------
1 | import json
2 |
3 | import pkg_resources
4 | from tornado import testing
5 |
6 | from tests import utils
7 |
8 |
9 | class TestRenderersHandler(utils.HandlerTestCase):
10 |
11 | @testing.gen_test
12 | def test_get_status(self):
13 | resp = yield self.http_client.fetch(self.get_url('/renderers'))
14 |
15 | renderers = {}
16 | for ep in pkg_resources.iter_entry_points(group='mfr.renderers'):
17 | renderers.update({ep.name: ep.load().__name__})
18 |
19 | data = json.loads(resp.body.decode('utf-8'))
20 | assert resp.code == 200
21 | assert data['renderers'] == renderers
22 |
--------------------------------------------------------------------------------
/tests/server/handlers/test_status.py:
--------------------------------------------------------------------------------
1 | import json
2 | from http import HTTPStatus
3 |
4 | from tornado import testing
5 |
6 | from mfr.version import __version__
7 |
8 | from tests import utils
9 |
10 |
11 | class TestStatusHandler(utils.HandlerTestCase):
12 | @testing.gen_test
13 | def test_get_status(self):
14 | resp = yield self.http_client.fetch(self.get_url('/status'))
15 |
16 | data = json.loads(resp.body.decode('utf-8'))
17 | assert resp.code == HTTPStatus.OK
18 | assert data['status'] == 'up'
19 | assert data['version'] == __version__
20 |
--------------------------------------------------------------------------------
/tests/utils.py:
--------------------------------------------------------------------------------
1 | import pytest
2 | from unittest import mock
3 |
4 | from tornado import testing
5 | from tornado.platform.asyncio import AsyncIOMainLoop
6 |
7 | from mfr.server.app import make_app
8 | from mfr.core.provider import BaseProvider
9 |
10 |
11 | class MockCoroutine(mock.Mock):
12 | async def __call__(self, *args, **kwargs):
13 | return super().__call__(*args, **kwargs)
14 |
15 |
16 | class FakeProvider(BaseProvider):
17 | pass
18 |
19 |
20 | class HandlerTestCase(testing.AsyncHTTPTestCase):
21 |
22 | def setUp(self):
23 | super().setUp()
24 | # identity_future = asyncio.Future()
25 | # identity_future.set_result({
26 | # 'auth': {},
27 | # 'credentials': {},
28 | # 'settings': {},
29 | # })
30 | # self.mock_identity = mock.Mock()
31 | # self.mock_identity.return_value = identity_future
32 | # self.identity_patcher = mock.patch('waterbutler.server.handlers.core.auth_handler.fetch', self.mock_identity)
33 |
34 | # self.mock_provider = MockProvider1({}, {}, {})
35 | # self.mock_make_provider = mock.Mock(return_value=self.mock_provider)
36 | # self.make_provider_patcher = mock.patch('waterbutler.core.utils.make_provider', self.mock_make_provider)
37 |
38 | # self.identity_patcher.start()
39 | # self.make_provider_patcher.start()
40 |
41 | def tearDown(self):
42 | super().tearDown()
43 | # self.identity_patcher.stop()
44 | # self.make_provider_patcher.stop()
45 |
46 | def get_app(self):
47 | return make_app(debug=False)
48 |
49 | def get_new_ioloop(self):
50 | return AsyncIOMainLoop()
51 |
--------------------------------------------------------------------------------