diff --git a/PKG-INFO b/PKG-INFO index 088f0db7..291df32b 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,115 +1,115 @@ Metadata-Version: 2.1 Name: swh.web -Version: 0.0.186 +Version: 0.0.187 Summary: Software Heritage Web UI Home-page: https://forge.softwareheritage.org/diffusion/DWUI/ Author: Software Heritage developers Author-email: swh-devel@inria.fr License: UNKNOWN -Project-URL: Bug Reports, https://forge.softwareheritage.org/maniphest Project-URL: Funding, https://www.softwareheritage.org/donate Project-URL: Source, https://forge.softwareheritage.org/source/swh-web +Project-URL: Bug Reports, https://forge.softwareheritage.org/maniphest Description: # swh-web This repository holds the development of Software Heritage web applications: * swh-web API (https://archive.softwareheritage.org/api): enables to query the content of the archive through HTTP requests and get responses in JSON or YAML. * swh-web browse (https://archive.softwareheritage.org/browse): graphical interface that eases the navigation in the archive. Documentation about how to use these components but also the details of their URI schemes can be found in the docs folder. The produced HTML documentation can be read and browsed at https://docs.softwareheritage.org/devel/swh-web/index.html. ## Technical details Those applications are powered by: * [Django Web Framework](https://www.djangoproject.com/) on the backend side with the following extensions enabled: * [django-rest-framework](http://www.django-rest-framework.org/) * [django-webpack-loader](https://github.com/owais/django-webpack-loader) * [django-js-reverse](http://django-js-reverse.readthedocs.io/en/latest/) * [webpack](https://webpack.js.org/) on the frontend side for better static assets management, including: * assets dependencies management and retrieval through [yarn](https://yarnpkg.com/en/) * linting of custom javascript code (through [eslint](https://eslint.org/)) and stylesheets (through [stylelint](https://stylelint.io/)) * use of [es6](http://es6-features.org) syntax and advanced javascript feature like [async/await](https://javascript.info/async-await) or [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) thanks to [babel](https://babeljs.io/) (es6 to es5 transpiler and polyfills provider) * assets minification (using [UglifyJS](https://github.com/mishoo/UglifyJS2) and [cssnano](http://cssnano.co/)) but also dead code elimination for production use ## How to build and run ### Requirements First you will need [Python 3](https://www.python.org) and a complete [swh development environment](https://forge.softwareheritage.org/source/swh-environment/) installed. To run the backend, you need to have the following Python 3 modules installed: * beautifulsoup4 * django >= 1.10.7 * djangorestframework >= 3.4.0 * django_webpack_loader * django_js_reverse * docutils * file_magic >= 0.3.0 * htmlmin * lxml * pygments * pypandoc * python-dateutil * pyyaml * requests To compile the frontend assets, you need to have [nodejs](https://nodejs.org/en/) >= 8.x and [yarn](https://yarnpkg.com/en/) installed. If you are on Debian stretch, you can easily install an up to date nodejs from the stretch-backports repository while packages for yarn can be installed by following [these instructions](https://yarnpkg.com/en/docs/install#debian-stable). Once you have installed nodejs, issue the following command in the root directory of swh-web in order to retrieve all the frontend dependencies: ``` $ yarn install ``` Please note that the static assets bundles generated by webpack are not stored in the git repository. Follow the instructions below in order to generate them in order to be able to run the frontend part of the web applications. ### Make targets Below is the list of available make targets that can be executed from the root directory of swh-web in order to build and/or execute the web applications under various configurations: * **run-django-webpack-devserver**: Compile and serve not optimized (without mignification and dead code elimination) frontend static assets using [webpack-dev-server](https://github.com/webpack/webpack-dev-server) and run django server with development settings. This is the recommended target to use when developing swh-web as it enables automatic reloading of backend and frontend part of the applications when modifying source files (*.py, *.js, *.css, *.html). * **run-django-webpack-dev**: Compile not optimized (no minification, no dead code elimination) frontend static assets using webpack and run django server with development settings. This is the recommended target when one only wants to develop the backend side of the application. * **run-django-webpack-prod**: Compile optimized (with minification and dead code elimination) frontend static assets using webpack and run django server with production settings. This is useful to test the applications in production mode (with the difference that static assets are served by django). Production settings notably enable advanced django caching and you will need to have [memcached](https://memcached.org/) installed for that feature to work. * **run-django-server-dev**: Run the django server with development settings but without compiling frontend static assets through webpack. * **run-django-server-prod**: Run the django server with production settings but without compiling frontend static assets through webpack. * **run-gunicorn-server**: Run the web applications with production settings in a [gunicorn](http://gunicorn.org/) worker as they will be in real production environment. Once one of these targets executed, the web applications can be executed by pointing your browser to http://localhost:5004. ### Npm/Yarn targets Below is a list of available yarn targets in order to only execute the frontend static assets compilation (no web server will be executed): * **build-dev**: compile not optimized (without mignification and dead code elimination) frontend static assets and store the results in the `swh/web/static` folder. * **build**: compile optimized (with mignification and dead code elimination) frontend static assets and store the results in the `swh/web/static` folder. **The build target must be executed prior performing the Debian packaging of swh-web** in order for the package to contain the optimized assets dedicated to production environment. To execute these targets, issue the following commmand: ``` $ yarn ``` Platform: UNKNOWN Classifier: Programming Language :: Python :: 3 Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+) Classifier: Operating System :: OS Independent Classifier: Development Status :: 5 - Production/Stable Classifier: Framework :: Django Description-Content-Type: text/markdown Provides-Extra: testing diff --git a/swh.web.egg-info/PKG-INFO b/swh.web.egg-info/PKG-INFO index 088f0db7..291df32b 100644 --- a/swh.web.egg-info/PKG-INFO +++ b/swh.web.egg-info/PKG-INFO @@ -1,115 +1,115 @@ Metadata-Version: 2.1 Name: swh.web -Version: 0.0.186 +Version: 0.0.187 Summary: Software Heritage Web UI Home-page: https://forge.softwareheritage.org/diffusion/DWUI/ Author: Software Heritage developers Author-email: swh-devel@inria.fr License: UNKNOWN -Project-URL: Bug Reports, https://forge.softwareheritage.org/maniphest Project-URL: Funding, https://www.softwareheritage.org/donate Project-URL: Source, https://forge.softwareheritage.org/source/swh-web +Project-URL: Bug Reports, https://forge.softwareheritage.org/maniphest Description: # swh-web This repository holds the development of Software Heritage web applications: * swh-web API (https://archive.softwareheritage.org/api): enables to query the content of the archive through HTTP requests and get responses in JSON or YAML. * swh-web browse (https://archive.softwareheritage.org/browse): graphical interface that eases the navigation in the archive. Documentation about how to use these components but also the details of their URI schemes can be found in the docs folder. The produced HTML documentation can be read and browsed at https://docs.softwareheritage.org/devel/swh-web/index.html. ## Technical details Those applications are powered by: * [Django Web Framework](https://www.djangoproject.com/) on the backend side with the following extensions enabled: * [django-rest-framework](http://www.django-rest-framework.org/) * [django-webpack-loader](https://github.com/owais/django-webpack-loader) * [django-js-reverse](http://django-js-reverse.readthedocs.io/en/latest/) * [webpack](https://webpack.js.org/) on the frontend side for better static assets management, including: * assets dependencies management and retrieval through [yarn](https://yarnpkg.com/en/) * linting of custom javascript code (through [eslint](https://eslint.org/)) and stylesheets (through [stylelint](https://stylelint.io/)) * use of [es6](http://es6-features.org) syntax and advanced javascript feature like [async/await](https://javascript.info/async-await) or [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) thanks to [babel](https://babeljs.io/) (es6 to es5 transpiler and polyfills provider) * assets minification (using [UglifyJS](https://github.com/mishoo/UglifyJS2) and [cssnano](http://cssnano.co/)) but also dead code elimination for production use ## How to build and run ### Requirements First you will need [Python 3](https://www.python.org) and a complete [swh development environment](https://forge.softwareheritage.org/source/swh-environment/) installed. To run the backend, you need to have the following Python 3 modules installed: * beautifulsoup4 * django >= 1.10.7 * djangorestframework >= 3.4.0 * django_webpack_loader * django_js_reverse * docutils * file_magic >= 0.3.0 * htmlmin * lxml * pygments * pypandoc * python-dateutil * pyyaml * requests To compile the frontend assets, you need to have [nodejs](https://nodejs.org/en/) >= 8.x and [yarn](https://yarnpkg.com/en/) installed. If you are on Debian stretch, you can easily install an up to date nodejs from the stretch-backports repository while packages for yarn can be installed by following [these instructions](https://yarnpkg.com/en/docs/install#debian-stable). Once you have installed nodejs, issue the following command in the root directory of swh-web in order to retrieve all the frontend dependencies: ``` $ yarn install ``` Please note that the static assets bundles generated by webpack are not stored in the git repository. Follow the instructions below in order to generate them in order to be able to run the frontend part of the web applications. ### Make targets Below is the list of available make targets that can be executed from the root directory of swh-web in order to build and/or execute the web applications under various configurations: * **run-django-webpack-devserver**: Compile and serve not optimized (without mignification and dead code elimination) frontend static assets using [webpack-dev-server](https://github.com/webpack/webpack-dev-server) and run django server with development settings. This is the recommended target to use when developing swh-web as it enables automatic reloading of backend and frontend part of the applications when modifying source files (*.py, *.js, *.css, *.html). * **run-django-webpack-dev**: Compile not optimized (no minification, no dead code elimination) frontend static assets using webpack and run django server with development settings. This is the recommended target when one only wants to develop the backend side of the application. * **run-django-webpack-prod**: Compile optimized (with minification and dead code elimination) frontend static assets using webpack and run django server with production settings. This is useful to test the applications in production mode (with the difference that static assets are served by django). Production settings notably enable advanced django caching and you will need to have [memcached](https://memcached.org/) installed for that feature to work. * **run-django-server-dev**: Run the django server with development settings but without compiling frontend static assets through webpack. * **run-django-server-prod**: Run the django server with production settings but without compiling frontend static assets through webpack. * **run-gunicorn-server**: Run the web applications with production settings in a [gunicorn](http://gunicorn.org/) worker as they will be in real production environment. Once one of these targets executed, the web applications can be executed by pointing your browser to http://localhost:5004. ### Npm/Yarn targets Below is a list of available yarn targets in order to only execute the frontend static assets compilation (no web server will be executed): * **build-dev**: compile not optimized (without mignification and dead code elimination) frontend static assets and store the results in the `swh/web/static` folder. * **build**: compile optimized (with mignification and dead code elimination) frontend static assets and store the results in the `swh/web/static` folder. **The build target must be executed prior performing the Debian packaging of swh-web** in order for the package to contain the optimized assets dedicated to production environment. To execute these targets, issue the following commmand: ``` $ yarn ``` Platform: UNKNOWN Classifier: Programming Language :: Python :: 3 Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+) Classifier: Operating System :: OS Independent Classifier: Development Status :: 5 - Production/Stable Classifier: Framework :: Django Description-Content-Type: text/markdown Provides-Extra: testing diff --git a/swh.web.egg-info/SOURCES.txt b/swh.web.egg-info/SOURCES.txt index e0313a7e..f1c7cb9e 100644 --- a/swh.web.egg-info/SOURCES.txt +++ b/swh.web.egg-info/SOURCES.txt @@ -1,1566 +1,1566 @@ MANIFEST.in Makefile README.md package.json pytest.ini requirements-swh.txt requirements-test.txt requirements.txt setup.py tox.ini version.txt yarn.lock swh/__init__.py swh.web.egg-info/PKG-INFO swh.web.egg-info/SOURCES.txt swh.web.egg-info/dependency_links.txt swh.web.egg-info/requires.txt swh.web.egg-info/top_level.txt swh/web/__init__.py swh/web/config.py swh/web/doc_config.py swh/web/manage.py swh/web/urls.py swh/web/wsgi.py swh/web/admin/__init__.py swh/web/admin/adminurls.py swh/web/admin/deposit.py swh/web/admin/origin_save.py swh/web/admin/urls.py swh/web/api/__init__.py swh/web/api/apidoc.py swh/web/api/apiresponse.py swh/web/api/apiurls.py swh/web/api/renderers.py swh/web/api/urls.py swh/web/api/utils.py swh/web/api/views/__init__.py swh/web/api/views/content.py swh/web/api/views/directory.py swh/web/api/views/identifiers.py swh/web/api/views/origin.py swh/web/api/views/origin_save.py swh/web/api/views/person.py swh/web/api/views/release.py swh/web/api/views/revision.py swh/web/api/views/snapshot.py swh/web/api/views/stat.py swh/web/api/views/utils.py swh/web/api/views/vault.py swh/web/assets/config/.bootstraprc swh/web/assets/config/.eslintignore swh/web/assets/config/.eslintrc swh/web/assets/config/bootstrap-pre-customize.scss swh/web/assets/config/webpack.config.development.js swh/web/assets/config/webpack.config.production.js swh/web/assets/config/webpack-plugins/fix-swh-source-maps-webpack-plugin.js swh/web/assets/config/webpack-plugins/generate-weblabels-webpack-plugin/README.md swh/web/assets/config/webpack-plugins/generate-weblabels-webpack-plugin/index.js swh/web/assets/config/webpack-plugins/generate-weblabels-webpack-plugin/jslicenses.ejs swh/web/assets/config/webpack-plugins/generate-weblabels-webpack-plugin/plugin-options-schema.json swh/web/assets/config/webpack-plugins/generate-weblabels-webpack-plugin/spdx-licenses-mapping.js swh/web/assets/src/bundles/admin/deposit.js swh/web/assets/src/bundles/admin/index.js swh/web/assets/src/bundles/admin/origin-save.js swh/web/assets/src/bundles/browse/breadcrumbs.css swh/web/assets/src/bundles/browse/browse-utils.js swh/web/assets/src/bundles/browse/browse.css swh/web/assets/src/bundles/browse/content.css swh/web/assets/src/bundles/browse/index.js swh/web/assets/src/bundles/browse/origin-save.js swh/web/assets/src/bundles/browse/origin-search.js swh/web/assets/src/bundles/browse/snapshot-navigation.css swh/web/assets/src/bundles/browse/snapshot-navigation.js swh/web/assets/src/bundles/browse/swh-ids-utils.js swh/web/assets/src/bundles/origin/index.js swh/web/assets/src/bundles/origin/visits-calendar.js swh/web/assets/src/bundles/origin/visits-histogram.js swh/web/assets/src/bundles/origin/visits-reporting.css swh/web/assets/src/bundles/origin/visits-reporting.js swh/web/assets/src/bundles/revision/diff-utils.js swh/web/assets/src/bundles/revision/index.js swh/web/assets/src/bundles/revision/log-utils.js swh/web/assets/src/bundles/revision/revision.css swh/web/assets/src/bundles/vault/index.js swh/web/assets/src/bundles/vault/vault-create-tasks.js swh/web/assets/src/bundles/vault/vault-ui.js swh/web/assets/src/bundles/vault/vault.css swh/web/assets/src/bundles/vendors/datatables.css swh/web/assets/src/bundles/vendors/index.js swh/web/assets/src/bundles/vendors/octicons.css swh/web/assets/src/bundles/webapp/breadcrumbs.css swh/web/assets/src/bundles/webapp/code-highlighting.js swh/web/assets/src/bundles/webapp/index.js swh/web/assets/src/bundles/webapp/pdf-rendering.js swh/web/assets/src/bundles/webapp/readme-rendering.js swh/web/assets/src/bundles/webapp/webapp-utils.js swh/web/assets/src/bundles/webapp/webapp.css swh/web/assets/src/thirdparty/highlightjs-line-numbers/LICENSE swh/web/assets/src/thirdparty/highlightjs-line-numbers/highlightjs-line-numbers.js swh/web/assets/src/thirdparty/jquery.tabSlideOut/LICENSE swh/web/assets/src/thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.css swh/web/assets/src/thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.js swh/web/assets/src/utils/functions.js swh/web/assets/src/utils/heaps-permute.js swh/web/assets/src/utils/highlightjs.css swh/web/assets/src/utils/highlightjs.js swh/web/assets/src/utils/org.css swh/web/assets/src/utils/org.js swh/web/assets/src/utils/showdown.css swh/web/assets/src/utils/showdown.js swh/web/browse/__init__.py swh/web/browse/browseurls.py swh/web/browse/identifiers.py swh/web/browse/urls.py swh/web/browse/utils.py swh/web/browse/views/__init__.py swh/web/browse/views/content.py swh/web/browse/views/directory.py swh/web/browse/views/origin.py swh/web/browse/views/origin_save.py swh/web/browse/views/person.py swh/web/browse/views/release.py swh/web/browse/views/revision.py swh/web/browse/views/snapshot.py swh/web/browse/views/utils/__init__.py swh/web/browse/views/utils/snapshot_context.py swh/web/common/__init__.py swh/web/common/apps.py swh/web/common/converters.py swh/web/common/exc.py swh/web/common/highlightjs.py swh/web/common/middlewares.py swh/web/common/models.py swh/web/common/origin_save.py swh/web/common/origin_visits.py swh/web/common/query.py swh/web/common/service.py swh/web/common/swh_templatetags.py swh/web/common/throttling.py swh/web/common/urlsindex.py swh/web/common/utils.py swh/web/common/migrations/0001_initial.py swh/web/common/migrations/0002_saveoriginrequest_visit_date.py swh/web/common/migrations/0003_saveoriginrequest_loading_task_status.py swh/web/common/migrations/0004_auto_20190204_1324.py swh/web/common/migrations/__init__.py swh/web/misc/__init__.py swh/web/misc/coverage.py swh/web/settings/__init__.py swh/web/settings/common.py swh/web/settings/development.py swh/web/settings/production.py swh/web/settings/tests.py swh/web/static/robots.txt swh/web/static/webpack-stats.json -swh/web/static/css/browse.0155e1c4ec3c61116485.css -swh/web/static/css/browse.0155e1c4ec3c61116485.css.map +swh/web/static/css/browse.d42fd2a4ef72b319809e.css +swh/web/static/css/browse.d42fd2a4ef72b319809e.css.map swh/web/static/css/highlightjs.1a675cc7a0e71b352ce6.css swh/web/static/css/highlightjs.1a675cc7a0e71b352ce6.css.map swh/web/static/css/org.89a71cc53d6a42e6ef63.css swh/web/static/css/org.89a71cc53d6a42e6ef63.css.map swh/web/static/css/origin.30424ccf028081f6d9e0.css swh/web/static/css/origin.30424ccf028081f6d9e0.css.map swh/web/static/css/revision.137ebee82babf5bbd93f.css swh/web/static/css/revision.137ebee82babf5bbd93f.css.map swh/web/static/css/showdown.2537a0e817f2ff31f388.css swh/web/static/css/showdown.2537a0e817f2ff31f388.css.map swh/web/static/css/vault.6f9a4c81f627548dfe23.css swh/web/static/css/vault.6f9a4c81f627548dfe23.css.map swh/web/static/css/vendors.46c81de170c32a146929.css swh/web/static/css/vendors.46c81de170c32a146929.css.map -swh/web/static/css/webapp.773849227335c2943634.css -swh/web/static/css/webapp.773849227335c2943634.css.map +swh/web/static/css/webapp.2a1b3e79ae4151309979.css +swh/web/static/css/webapp.2a1b3e79ae4151309979.css.map swh/web/static/fonts/alegreya-latin-400.woff swh/web/static/fonts/alegreya-latin-400.woff2 swh/web/static/fonts/alegreya-latin-400italic.woff swh/web/static/fonts/alegreya-latin-400italic.woff2 swh/web/static/fonts/alegreya-latin-500.woff swh/web/static/fonts/alegreya-latin-500.woff2 swh/web/static/fonts/alegreya-latin-500italic.woff swh/web/static/fonts/alegreya-latin-500italic.woff2 swh/web/static/fonts/alegreya-latin-700.woff swh/web/static/fonts/alegreya-latin-700.woff2 swh/web/static/fonts/alegreya-latin-700italic.woff swh/web/static/fonts/alegreya-latin-700italic.woff2 swh/web/static/fonts/alegreya-latin-800.woff swh/web/static/fonts/alegreya-latin-800.woff2 swh/web/static/fonts/alegreya-latin-800italic.woff swh/web/static/fonts/alegreya-latin-800italic.woff2 swh/web/static/fonts/alegreya-latin-900.woff swh/web/static/fonts/alegreya-latin-900.woff2 swh/web/static/fonts/alegreya-latin-900italic.woff swh/web/static/fonts/alegreya-latin-900italic.woff2 swh/web/static/fonts/alegreya-sans-latin-100.woff swh/web/static/fonts/alegreya-sans-latin-100.woff2 swh/web/static/fonts/alegreya-sans-latin-100italic.woff swh/web/static/fonts/alegreya-sans-latin-100italic.woff2 swh/web/static/fonts/alegreya-sans-latin-300.woff swh/web/static/fonts/alegreya-sans-latin-300.woff2 swh/web/static/fonts/alegreya-sans-latin-300italic.woff swh/web/static/fonts/alegreya-sans-latin-300italic.woff2 swh/web/static/fonts/alegreya-sans-latin-400.woff swh/web/static/fonts/alegreya-sans-latin-400.woff2 swh/web/static/fonts/alegreya-sans-latin-400italic.woff swh/web/static/fonts/alegreya-sans-latin-400italic.woff2 swh/web/static/fonts/alegreya-sans-latin-500.woff swh/web/static/fonts/alegreya-sans-latin-500.woff2 swh/web/static/fonts/alegreya-sans-latin-500italic.woff swh/web/static/fonts/alegreya-sans-latin-500italic.woff2 swh/web/static/fonts/alegreya-sans-latin-700.woff swh/web/static/fonts/alegreya-sans-latin-700.woff2 swh/web/static/fonts/alegreya-sans-latin-700italic.woff swh/web/static/fonts/alegreya-sans-latin-700italic.woff2 swh/web/static/fonts/alegreya-sans-latin-800.woff swh/web/static/fonts/alegreya-sans-latin-800.woff2 swh/web/static/fonts/alegreya-sans-latin-800italic.woff swh/web/static/fonts/alegreya-sans-latin-800italic.woff2 swh/web/static/fonts/alegreya-sans-latin-900.woff swh/web/static/fonts/alegreya-sans-latin-900.woff2 swh/web/static/fonts/alegreya-sans-latin-900italic.woff swh/web/static/fonts/alegreya-sans-latin-900italic.woff2 swh/web/static/fonts/fontawesome-webfont.eot swh/web/static/fonts/fontawesome-webfont.svg swh/web/static/fonts/fontawesome-webfont.ttf swh/web/static/fonts/fontawesome-webfont.woff swh/web/static/fonts/fontawesome-webfont.woff2 swh/web/static/fonts/git-commit.svg swh/web/static/fonts/open-iconic.eot swh/web/static/fonts/open-iconic.otf swh/web/static/fonts/open-iconic.svg swh/web/static/fonts/open-iconic.ttf swh/web/static/fonts/open-iconic.woff swh/web/static/img/arrow-up-small.png swh/web/static/img/swh-api.png swh/web/static/img/swh-browse.png swh/web/static/img/swh-logo.png swh/web/static/img/swh-logo.svg swh/web/static/img/swh-spinner-small.gif swh/web/static/img/swh-spinner.gif swh/web/static/img/swh-vault.png swh/web/static/img/icons/swh-logo-32x32.png swh/web/static/img/icons/swh-logo-archive-180x180.png swh/web/static/img/icons/swh-logo-archive-192x192.png swh/web/static/img/icons/swh-logo-archive-270x270.png swh/web/static/img/logos/debian.png swh/web/static/img/logos/framagit.png swh/web/static/img/logos/github.png swh/web/static/img/logos/gitlab.svg swh/web/static/img/logos/gitorious.png swh/web/static/img/logos/gnu.png swh/web/static/img/logos/googlecode.png swh/web/static/img/logos/hal.png swh/web/static/img/logos/inria.jpg swh/web/static/img/logos/pypi.svg swh/web/static/js/admin.ffe32df0e0b6f773ca10.js swh/web/static/js/admin.ffe32df0e0b6f773ca10.js.map -swh/web/static/js/browse.0155e1c4ec3c61116485.js -swh/web/static/js/browse.0155e1c4ec3c61116485.js.map +swh/web/static/js/browse.d42fd2a4ef72b319809e.js +swh/web/static/js/browse.d42fd2a4ef72b319809e.js.map swh/web/static/js/highlightjs.1a675cc7a0e71b352ce6.js swh/web/static/js/highlightjs.1a675cc7a0e71b352ce6.js.map swh/web/static/js/org.89a71cc53d6a42e6ef63.js swh/web/static/js/org.89a71cc53d6a42e6ef63.js.map swh/web/static/js/origin.30424ccf028081f6d9e0.js swh/web/static/js/origin.30424ccf028081f6d9e0.js.map swh/web/static/js/pdf.worker.min.js swh/web/static/js/pdfjs.0cef959393cb0239753c.js swh/web/static/js/pdfjs.0cef959393cb0239753c.js.map swh/web/static/js/revision.137ebee82babf5bbd93f.js swh/web/static/js/revision.137ebee82babf5bbd93f.js.map swh/web/static/js/showdown.2537a0e817f2ff31f388.js swh/web/static/js/showdown.2537a0e817f2ff31f388.js.map swh/web/static/js/vault.6f9a4c81f627548dfe23.js swh/web/static/js/vault.6f9a4c81f627548dfe23.js.map swh/web/static/js/vendors.46c81de170c32a146929.js swh/web/static/js/vendors.46c81de170c32a146929.js.map -swh/web/static/js/webapp.773849227335c2943634.js -swh/web/static/js/webapp.773849227335c2943634.js.map +swh/web/static/js/webapp.2a1b3e79ae4151309979.js +swh/web/static/js/webapp.2a1b3e79ae4151309979.js.map swh/web/static/jssources/LICENSE.txt swh/web/static/jssources/jslicenses.json swh/web/static/jssources/@babel/polyfill/LICENSE.txt swh/web/static/jssources/@babel/polyfill/lib/index.js swh/web/static/jssources/@babel/runtime-corejs2/LICENSE.txt swh/web/static/jssources/@babel/runtime-corejs2/core-js/get-iterator.js swh/web/static/jssources/@babel/runtime-corejs2/core-js/parse-int.js swh/web/static/jssources/@babel/runtime-corejs2/core-js/promise.js swh/web/static/jssources/@babel/runtime-corejs2/core-js/array/is-array.js swh/web/static/jssources/@babel/runtime-corejs2/core-js/json/stringify.js swh/web/static/jssources/@babel/runtime-corejs2/helpers/asyncToGenerator.js swh/web/static/jssources/@babel/runtime-corejs2/regenerator/index.js swh/web/static/jssources/admin-lte/LICENSE.txt swh/web/static/jssources/admin-lte/dist/js/adminlte.js swh/web/static/jssources/bootstrap/LICENSE.txt swh/web/static/jssources/bootstrap-year-calendar-bs4/LICENSE.txt swh/web/static/jssources/bootstrap-year-calendar-bs4/js/bootstrap-year-calendar.js swh/web/static/jssources/bootstrap/js/dist/alert.js swh/web/static/jssources/bootstrap/js/dist/button.js swh/web/static/jssources/bootstrap/js/dist/carousel.js swh/web/static/jssources/bootstrap/js/dist/collapse.js swh/web/static/jssources/bootstrap/js/dist/dropdown.js swh/web/static/jssources/bootstrap/js/dist/modal.js swh/web/static/jssources/bootstrap/js/dist/popover.js swh/web/static/jssources/bootstrap/js/dist/scrollspy.js swh/web/static/jssources/bootstrap/js/dist/tab.js swh/web/static/jssources/bootstrap/js/dist/tooltip.js swh/web/static/jssources/bootstrap/js/dist/util.js swh/web/static/jssources/clipboard/dist/clipboard.js swh/web/static/jssources/core-js/LICENSE.txt swh/web/static/jssources/core-js/es6/index.js swh/web/static/jssources/core-js/fn/array/includes.js swh/web/static/jssources/core-js/fn/object/entries.js swh/web/static/jssources/core-js/fn/object/get-own-property-descriptors.js swh/web/static/jssources/core-js/fn/object/values.js swh/web/static/jssources/core-js/fn/promise/finally.js swh/web/static/jssources/core-js/fn/string/pad-end.js swh/web/static/jssources/core-js/fn/string/pad-start.js swh/web/static/jssources/core-js/fn/symbol/async-iterator.js swh/web/static/jssources/core-js/library/fn/get-iterator.js swh/web/static/jssources/core-js/library/fn/parse-int.js swh/web/static/jssources/core-js/library/fn/promise.js swh/web/static/jssources/core-js/library/fn/array/is-array.js swh/web/static/jssources/core-js/library/fn/json/stringify.js swh/web/static/jssources/core-js/library/modules/_a-function.js swh/web/static/jssources/core-js/library/modules/_add-to-unscopables.js swh/web/static/jssources/core-js/library/modules/_an-instance.js swh/web/static/jssources/core-js/library/modules/_an-object.js swh/web/static/jssources/core-js/library/modules/_array-includes.js swh/web/static/jssources/core-js/library/modules/_classof.js swh/web/static/jssources/core-js/library/modules/_cof.js swh/web/static/jssources/core-js/library/modules/_core.js swh/web/static/jssources/core-js/library/modules/_ctx.js swh/web/static/jssources/core-js/library/modules/_defined.js swh/web/static/jssources/core-js/library/modules/_descriptors.js swh/web/static/jssources/core-js/library/modules/_dom-create.js swh/web/static/jssources/core-js/library/modules/_enum-bug-keys.js swh/web/static/jssources/core-js/library/modules/_export.js swh/web/static/jssources/core-js/library/modules/_fails.js swh/web/static/jssources/core-js/library/modules/_for-of.js swh/web/static/jssources/core-js/library/modules/_global.js swh/web/static/jssources/core-js/library/modules/_has.js swh/web/static/jssources/core-js/library/modules/_hide.js swh/web/static/jssources/core-js/library/modules/_html.js swh/web/static/jssources/core-js/library/modules/_ie8-dom-define.js swh/web/static/jssources/core-js/library/modules/_invoke.js swh/web/static/jssources/core-js/library/modules/_iobject.js swh/web/static/jssources/core-js/library/modules/_is-array-iter.js swh/web/static/jssources/core-js/library/modules/_is-array.js swh/web/static/jssources/core-js/library/modules/_is-object.js swh/web/static/jssources/core-js/library/modules/_iter-call.js swh/web/static/jssources/core-js/library/modules/_iter-create.js swh/web/static/jssources/core-js/library/modules/_iter-define.js swh/web/static/jssources/core-js/library/modules/_iter-detect.js swh/web/static/jssources/core-js/library/modules/_iter-step.js swh/web/static/jssources/core-js/library/modules/_iterators.js swh/web/static/jssources/core-js/library/modules/_library.js swh/web/static/jssources/core-js/library/modules/_microtask.js swh/web/static/jssources/core-js/library/modules/_new-promise-capability.js swh/web/static/jssources/core-js/library/modules/_object-create.js swh/web/static/jssources/core-js/library/modules/_object-dp.js swh/web/static/jssources/core-js/library/modules/_object-dps.js swh/web/static/jssources/core-js/library/modules/_object-gpo.js swh/web/static/jssources/core-js/library/modules/_object-keys-internal.js swh/web/static/jssources/core-js/library/modules/_object-keys.js swh/web/static/jssources/core-js/library/modules/_parse-int.js swh/web/static/jssources/core-js/library/modules/_perform.js swh/web/static/jssources/core-js/library/modules/_promise-resolve.js swh/web/static/jssources/core-js/library/modules/_property-desc.js swh/web/static/jssources/core-js/library/modules/_redefine-all.js swh/web/static/jssources/core-js/library/modules/_redefine.js swh/web/static/jssources/core-js/library/modules/_set-species.js swh/web/static/jssources/core-js/library/modules/_set-to-string-tag.js swh/web/static/jssources/core-js/library/modules/_shared-key.js swh/web/static/jssources/core-js/library/modules/_shared.js swh/web/static/jssources/core-js/library/modules/_species-constructor.js swh/web/static/jssources/core-js/library/modules/_string-at.js swh/web/static/jssources/core-js/library/modules/_string-trim.js swh/web/static/jssources/core-js/library/modules/_string-ws.js swh/web/static/jssources/core-js/library/modules/_task.js swh/web/static/jssources/core-js/library/modules/_to-absolute-index.js swh/web/static/jssources/core-js/library/modules/_to-integer.js swh/web/static/jssources/core-js/library/modules/_to-iobject.js swh/web/static/jssources/core-js/library/modules/_to-length.js swh/web/static/jssources/core-js/library/modules/_to-object.js swh/web/static/jssources/core-js/library/modules/_to-primitive.js swh/web/static/jssources/core-js/library/modules/_uid.js swh/web/static/jssources/core-js/library/modules/_user-agent.js swh/web/static/jssources/core-js/library/modules/_wks.js swh/web/static/jssources/core-js/library/modules/core.get-iterator-method.js swh/web/static/jssources/core-js/library/modules/core.get-iterator.js swh/web/static/jssources/core-js/library/modules/es6.array.is-array.js swh/web/static/jssources/core-js/library/modules/es6.array.iterator.js swh/web/static/jssources/core-js/library/modules/es6.object.to-string.js swh/web/static/jssources/core-js/library/modules/es6.parse-int.js swh/web/static/jssources/core-js/library/modules/es6.promise.js swh/web/static/jssources/core-js/library/modules/es6.string.iterator.js swh/web/static/jssources/core-js/library/modules/es7.promise.finally.js swh/web/static/jssources/core-js/library/modules/es7.promise.try.js swh/web/static/jssources/core-js/library/modules/web.dom.iterable.js swh/web/static/jssources/core-js/modules/_a-function.js swh/web/static/jssources/core-js/modules/_a-number-value.js swh/web/static/jssources/core-js/modules/_add-to-unscopables.js swh/web/static/jssources/core-js/modules/_advance-string-index.js swh/web/static/jssources/core-js/modules/_an-instance.js swh/web/static/jssources/core-js/modules/_an-object.js swh/web/static/jssources/core-js/modules/_array-copy-within.js swh/web/static/jssources/core-js/modules/_array-fill.js swh/web/static/jssources/core-js/modules/_array-includes.js swh/web/static/jssources/core-js/modules/_array-methods.js swh/web/static/jssources/core-js/modules/_array-reduce.js swh/web/static/jssources/core-js/modules/_array-species-constructor.js swh/web/static/jssources/core-js/modules/_array-species-create.js swh/web/static/jssources/core-js/modules/_bind.js swh/web/static/jssources/core-js/modules/_classof.js swh/web/static/jssources/core-js/modules/_cof.js swh/web/static/jssources/core-js/modules/_collection-strong.js swh/web/static/jssources/core-js/modules/_collection-weak.js swh/web/static/jssources/core-js/modules/_collection.js swh/web/static/jssources/core-js/modules/_core.js swh/web/static/jssources/core-js/modules/_create-property.js swh/web/static/jssources/core-js/modules/_ctx.js swh/web/static/jssources/core-js/modules/_date-to-iso-string.js swh/web/static/jssources/core-js/modules/_date-to-primitive.js swh/web/static/jssources/core-js/modules/_defined.js swh/web/static/jssources/core-js/modules/_descriptors.js swh/web/static/jssources/core-js/modules/_dom-create.js swh/web/static/jssources/core-js/modules/_enum-bug-keys.js swh/web/static/jssources/core-js/modules/_enum-keys.js swh/web/static/jssources/core-js/modules/_export.js swh/web/static/jssources/core-js/modules/_fails-is-regexp.js swh/web/static/jssources/core-js/modules/_fails.js swh/web/static/jssources/core-js/modules/_fix-re-wks.js swh/web/static/jssources/core-js/modules/_flags.js swh/web/static/jssources/core-js/modules/_for-of.js swh/web/static/jssources/core-js/modules/_function-to-string.js swh/web/static/jssources/core-js/modules/_global.js swh/web/static/jssources/core-js/modules/_has.js swh/web/static/jssources/core-js/modules/_hide.js swh/web/static/jssources/core-js/modules/_html.js swh/web/static/jssources/core-js/modules/_ie8-dom-define.js swh/web/static/jssources/core-js/modules/_inherit-if-required.js swh/web/static/jssources/core-js/modules/_invoke.js swh/web/static/jssources/core-js/modules/_iobject.js swh/web/static/jssources/core-js/modules/_is-array-iter.js swh/web/static/jssources/core-js/modules/_is-array.js swh/web/static/jssources/core-js/modules/_is-integer.js swh/web/static/jssources/core-js/modules/_is-object.js swh/web/static/jssources/core-js/modules/_is-regexp.js swh/web/static/jssources/core-js/modules/_iter-call.js swh/web/static/jssources/core-js/modules/_iter-create.js swh/web/static/jssources/core-js/modules/_iter-define.js swh/web/static/jssources/core-js/modules/_iter-detect.js swh/web/static/jssources/core-js/modules/_iter-step.js swh/web/static/jssources/core-js/modules/_iterators.js swh/web/static/jssources/core-js/modules/_library.js swh/web/static/jssources/core-js/modules/_math-expm1.js swh/web/static/jssources/core-js/modules/_math-fround.js swh/web/static/jssources/core-js/modules/_math-log1p.js swh/web/static/jssources/core-js/modules/_math-sign.js swh/web/static/jssources/core-js/modules/_meta.js swh/web/static/jssources/core-js/modules/_microtask.js swh/web/static/jssources/core-js/modules/_new-promise-capability.js swh/web/static/jssources/core-js/modules/_object-assign.js swh/web/static/jssources/core-js/modules/_object-create.js swh/web/static/jssources/core-js/modules/_object-dp.js swh/web/static/jssources/core-js/modules/_object-dps.js swh/web/static/jssources/core-js/modules/_object-gopd.js swh/web/static/jssources/core-js/modules/_object-gopn-ext.js swh/web/static/jssources/core-js/modules/_object-gopn.js swh/web/static/jssources/core-js/modules/_object-gops.js swh/web/static/jssources/core-js/modules/_object-gpo.js swh/web/static/jssources/core-js/modules/_object-keys-internal.js swh/web/static/jssources/core-js/modules/_object-keys.js swh/web/static/jssources/core-js/modules/_object-pie.js swh/web/static/jssources/core-js/modules/_object-sap.js swh/web/static/jssources/core-js/modules/_object-to-array.js swh/web/static/jssources/core-js/modules/_own-keys.js swh/web/static/jssources/core-js/modules/_parse-float.js swh/web/static/jssources/core-js/modules/_parse-int.js swh/web/static/jssources/core-js/modules/_perform.js swh/web/static/jssources/core-js/modules/_promise-resolve.js swh/web/static/jssources/core-js/modules/_property-desc.js swh/web/static/jssources/core-js/modules/_redefine-all.js swh/web/static/jssources/core-js/modules/_redefine.js swh/web/static/jssources/core-js/modules/_regexp-exec-abstract.js swh/web/static/jssources/core-js/modules/_regexp-exec.js swh/web/static/jssources/core-js/modules/_same-value.js swh/web/static/jssources/core-js/modules/_set-proto.js swh/web/static/jssources/core-js/modules/_set-species.js swh/web/static/jssources/core-js/modules/_set-to-string-tag.js swh/web/static/jssources/core-js/modules/_shared-key.js swh/web/static/jssources/core-js/modules/_shared.js swh/web/static/jssources/core-js/modules/_species-constructor.js swh/web/static/jssources/core-js/modules/_strict-method.js swh/web/static/jssources/core-js/modules/_string-at.js swh/web/static/jssources/core-js/modules/_string-context.js swh/web/static/jssources/core-js/modules/_string-html.js swh/web/static/jssources/core-js/modules/_string-pad.js swh/web/static/jssources/core-js/modules/_string-repeat.js swh/web/static/jssources/core-js/modules/_string-trim.js swh/web/static/jssources/core-js/modules/_string-ws.js swh/web/static/jssources/core-js/modules/_task.js swh/web/static/jssources/core-js/modules/_to-absolute-index.js swh/web/static/jssources/core-js/modules/_to-index.js swh/web/static/jssources/core-js/modules/_to-integer.js swh/web/static/jssources/core-js/modules/_to-iobject.js swh/web/static/jssources/core-js/modules/_to-length.js swh/web/static/jssources/core-js/modules/_to-object.js swh/web/static/jssources/core-js/modules/_to-primitive.js swh/web/static/jssources/core-js/modules/_typed-array.js swh/web/static/jssources/core-js/modules/_typed-buffer.js swh/web/static/jssources/core-js/modules/_typed.js swh/web/static/jssources/core-js/modules/_uid.js swh/web/static/jssources/core-js/modules/_user-agent.js swh/web/static/jssources/core-js/modules/_validate-collection.js swh/web/static/jssources/core-js/modules/_wks-define.js swh/web/static/jssources/core-js/modules/_wks-ext.js swh/web/static/jssources/core-js/modules/_wks.js swh/web/static/jssources/core-js/modules/core.get-iterator-method.js swh/web/static/jssources/core-js/modules/es6.array.copy-within.js swh/web/static/jssources/core-js/modules/es6.array.every.js swh/web/static/jssources/core-js/modules/es6.array.fill.js swh/web/static/jssources/core-js/modules/es6.array.filter.js swh/web/static/jssources/core-js/modules/es6.array.find-index.js swh/web/static/jssources/core-js/modules/es6.array.find.js swh/web/static/jssources/core-js/modules/es6.array.for-each.js swh/web/static/jssources/core-js/modules/es6.array.from.js swh/web/static/jssources/core-js/modules/es6.array.index-of.js swh/web/static/jssources/core-js/modules/es6.array.is-array.js swh/web/static/jssources/core-js/modules/es6.array.iterator.js swh/web/static/jssources/core-js/modules/es6.array.join.js swh/web/static/jssources/core-js/modules/es6.array.last-index-of.js swh/web/static/jssources/core-js/modules/es6.array.map.js swh/web/static/jssources/core-js/modules/es6.array.of.js swh/web/static/jssources/core-js/modules/es6.array.reduce-right.js swh/web/static/jssources/core-js/modules/es6.array.reduce.js swh/web/static/jssources/core-js/modules/es6.array.slice.js swh/web/static/jssources/core-js/modules/es6.array.some.js swh/web/static/jssources/core-js/modules/es6.array.sort.js swh/web/static/jssources/core-js/modules/es6.array.species.js swh/web/static/jssources/core-js/modules/es6.date.now.js swh/web/static/jssources/core-js/modules/es6.date.to-iso-string.js swh/web/static/jssources/core-js/modules/es6.date.to-json.js swh/web/static/jssources/core-js/modules/es6.date.to-primitive.js swh/web/static/jssources/core-js/modules/es6.date.to-string.js swh/web/static/jssources/core-js/modules/es6.function.bind.js swh/web/static/jssources/core-js/modules/es6.function.has-instance.js swh/web/static/jssources/core-js/modules/es6.function.name.js swh/web/static/jssources/core-js/modules/es6.map.js swh/web/static/jssources/core-js/modules/es6.math.acosh.js swh/web/static/jssources/core-js/modules/es6.math.asinh.js swh/web/static/jssources/core-js/modules/es6.math.atanh.js swh/web/static/jssources/core-js/modules/es6.math.cbrt.js swh/web/static/jssources/core-js/modules/es6.math.clz32.js swh/web/static/jssources/core-js/modules/es6.math.cosh.js swh/web/static/jssources/core-js/modules/es6.math.expm1.js swh/web/static/jssources/core-js/modules/es6.math.fround.js swh/web/static/jssources/core-js/modules/es6.math.hypot.js swh/web/static/jssources/core-js/modules/es6.math.imul.js swh/web/static/jssources/core-js/modules/es6.math.log10.js swh/web/static/jssources/core-js/modules/es6.math.log1p.js swh/web/static/jssources/core-js/modules/es6.math.log2.js swh/web/static/jssources/core-js/modules/es6.math.sign.js swh/web/static/jssources/core-js/modules/es6.math.sinh.js swh/web/static/jssources/core-js/modules/es6.math.tanh.js swh/web/static/jssources/core-js/modules/es6.math.trunc.js swh/web/static/jssources/core-js/modules/es6.number.constructor.js swh/web/static/jssources/core-js/modules/es6.number.epsilon.js swh/web/static/jssources/core-js/modules/es6.number.is-finite.js swh/web/static/jssources/core-js/modules/es6.number.is-integer.js swh/web/static/jssources/core-js/modules/es6.number.is-nan.js swh/web/static/jssources/core-js/modules/es6.number.is-safe-integer.js swh/web/static/jssources/core-js/modules/es6.number.max-safe-integer.js swh/web/static/jssources/core-js/modules/es6.number.min-safe-integer.js swh/web/static/jssources/core-js/modules/es6.number.parse-float.js swh/web/static/jssources/core-js/modules/es6.number.parse-int.js swh/web/static/jssources/core-js/modules/es6.number.to-fixed.js swh/web/static/jssources/core-js/modules/es6.number.to-precision.js swh/web/static/jssources/core-js/modules/es6.object.assign.js swh/web/static/jssources/core-js/modules/es6.object.create.js swh/web/static/jssources/core-js/modules/es6.object.define-properties.js swh/web/static/jssources/core-js/modules/es6.object.define-property.js swh/web/static/jssources/core-js/modules/es6.object.freeze.js swh/web/static/jssources/core-js/modules/es6.object.get-own-property-descriptor.js swh/web/static/jssources/core-js/modules/es6.object.get-own-property-names.js swh/web/static/jssources/core-js/modules/es6.object.get-prototype-of.js swh/web/static/jssources/core-js/modules/es6.object.is-extensible.js swh/web/static/jssources/core-js/modules/es6.object.is-frozen.js swh/web/static/jssources/core-js/modules/es6.object.is-sealed.js swh/web/static/jssources/core-js/modules/es6.object.is.js swh/web/static/jssources/core-js/modules/es6.object.keys.js swh/web/static/jssources/core-js/modules/es6.object.prevent-extensions.js swh/web/static/jssources/core-js/modules/es6.object.seal.js swh/web/static/jssources/core-js/modules/es6.object.set-prototype-of.js swh/web/static/jssources/core-js/modules/es6.object.to-string.js swh/web/static/jssources/core-js/modules/es6.parse-float.js swh/web/static/jssources/core-js/modules/es6.parse-int.js swh/web/static/jssources/core-js/modules/es6.promise.js swh/web/static/jssources/core-js/modules/es6.reflect.apply.js swh/web/static/jssources/core-js/modules/es6.reflect.construct.js swh/web/static/jssources/core-js/modules/es6.reflect.define-property.js swh/web/static/jssources/core-js/modules/es6.reflect.delete-property.js swh/web/static/jssources/core-js/modules/es6.reflect.enumerate.js swh/web/static/jssources/core-js/modules/es6.reflect.get-own-property-descriptor.js swh/web/static/jssources/core-js/modules/es6.reflect.get-prototype-of.js swh/web/static/jssources/core-js/modules/es6.reflect.get.js swh/web/static/jssources/core-js/modules/es6.reflect.has.js swh/web/static/jssources/core-js/modules/es6.reflect.is-extensible.js swh/web/static/jssources/core-js/modules/es6.reflect.own-keys.js swh/web/static/jssources/core-js/modules/es6.reflect.prevent-extensions.js swh/web/static/jssources/core-js/modules/es6.reflect.set-prototype-of.js swh/web/static/jssources/core-js/modules/es6.reflect.set.js swh/web/static/jssources/core-js/modules/es6.regexp.constructor.js swh/web/static/jssources/core-js/modules/es6.regexp.exec.js swh/web/static/jssources/core-js/modules/es6.regexp.flags.js swh/web/static/jssources/core-js/modules/es6.regexp.match.js swh/web/static/jssources/core-js/modules/es6.regexp.replace.js swh/web/static/jssources/core-js/modules/es6.regexp.search.js swh/web/static/jssources/core-js/modules/es6.regexp.split.js swh/web/static/jssources/core-js/modules/es6.regexp.to-string.js swh/web/static/jssources/core-js/modules/es6.set.js swh/web/static/jssources/core-js/modules/es6.string.anchor.js swh/web/static/jssources/core-js/modules/es6.string.big.js swh/web/static/jssources/core-js/modules/es6.string.blink.js swh/web/static/jssources/core-js/modules/es6.string.bold.js swh/web/static/jssources/core-js/modules/es6.string.code-point-at.js swh/web/static/jssources/core-js/modules/es6.string.ends-with.js swh/web/static/jssources/core-js/modules/es6.string.fixed.js swh/web/static/jssources/core-js/modules/es6.string.fontcolor.js swh/web/static/jssources/core-js/modules/es6.string.fontsize.js swh/web/static/jssources/core-js/modules/es6.string.from-code-point.js swh/web/static/jssources/core-js/modules/es6.string.includes.js swh/web/static/jssources/core-js/modules/es6.string.italics.js swh/web/static/jssources/core-js/modules/es6.string.iterator.js swh/web/static/jssources/core-js/modules/es6.string.link.js swh/web/static/jssources/core-js/modules/es6.string.raw.js swh/web/static/jssources/core-js/modules/es6.string.repeat.js swh/web/static/jssources/core-js/modules/es6.string.small.js swh/web/static/jssources/core-js/modules/es6.string.starts-with.js swh/web/static/jssources/core-js/modules/es6.string.strike.js swh/web/static/jssources/core-js/modules/es6.string.sub.js swh/web/static/jssources/core-js/modules/es6.string.sup.js swh/web/static/jssources/core-js/modules/es6.string.trim.js swh/web/static/jssources/core-js/modules/es6.symbol.js swh/web/static/jssources/core-js/modules/es6.typed.array-buffer.js swh/web/static/jssources/core-js/modules/es6.typed.data-view.js swh/web/static/jssources/core-js/modules/es6.typed.float32-array.js swh/web/static/jssources/core-js/modules/es6.typed.float64-array.js swh/web/static/jssources/core-js/modules/es6.typed.int16-array.js swh/web/static/jssources/core-js/modules/es6.typed.int32-array.js swh/web/static/jssources/core-js/modules/es6.typed.int8-array.js swh/web/static/jssources/core-js/modules/es6.typed.uint16-array.js swh/web/static/jssources/core-js/modules/es6.typed.uint32-array.js swh/web/static/jssources/core-js/modules/es6.typed.uint8-array.js swh/web/static/jssources/core-js/modules/es6.typed.uint8-clamped-array.js swh/web/static/jssources/core-js/modules/es6.weak-map.js swh/web/static/jssources/core-js/modules/es6.weak-set.js swh/web/static/jssources/core-js/modules/es7.array.includes.js swh/web/static/jssources/core-js/modules/es7.object.entries.js swh/web/static/jssources/core-js/modules/es7.object.get-own-property-descriptors.js swh/web/static/jssources/core-js/modules/es7.object.values.js swh/web/static/jssources/core-js/modules/es7.promise.finally.js swh/web/static/jssources/core-js/modules/es7.string.pad-end.js swh/web/static/jssources/core-js/modules/es7.string.pad-start.js swh/web/static/jssources/core-js/modules/es7.symbol.async-iterator.js swh/web/static/jssources/core-js/modules/web.dom.iterable.js swh/web/static/jssources/core-js/modules/web.immediate.js swh/web/static/jssources/core-js/modules/web.timers.js swh/web/static/jssources/core-js/web/index.js swh/web/static/jssources/d3/LICENSE.txt swh/web/static/jssources/d3/index.js swh/web/static/jssources/d3-array/LICENSE.txt swh/web/static/jssources/d3-array/src/array.js swh/web/static/jssources/d3-array/src/ascending.js swh/web/static/jssources/d3-array/src/bisect.js swh/web/static/jssources/d3-array/src/bisector.js swh/web/static/jssources/d3-array/src/constant.js swh/web/static/jssources/d3-array/src/cross.js swh/web/static/jssources/d3-array/src/descending.js swh/web/static/jssources/d3-array/src/deviation.js swh/web/static/jssources/d3-array/src/extent.js swh/web/static/jssources/d3-array/src/histogram.js swh/web/static/jssources/d3-array/src/identity.js swh/web/static/jssources/d3-array/src/index.js swh/web/static/jssources/d3-array/src/max.js swh/web/static/jssources/d3-array/src/mean.js swh/web/static/jssources/d3-array/src/median.js swh/web/static/jssources/d3-array/src/merge.js swh/web/static/jssources/d3-array/src/min.js swh/web/static/jssources/d3-array/src/number.js swh/web/static/jssources/d3-array/src/pairs.js swh/web/static/jssources/d3-array/src/permute.js swh/web/static/jssources/d3-array/src/quantile.js swh/web/static/jssources/d3-array/src/range.js swh/web/static/jssources/d3-array/src/scan.js swh/web/static/jssources/d3-array/src/shuffle.js swh/web/static/jssources/d3-array/src/sum.js swh/web/static/jssources/d3-array/src/ticks.js swh/web/static/jssources/d3-array/src/transpose.js swh/web/static/jssources/d3-array/src/variance.js swh/web/static/jssources/d3-array/src/zip.js swh/web/static/jssources/d3-array/src/threshold/freedmanDiaconis.js swh/web/static/jssources/d3-array/src/threshold/scott.js swh/web/static/jssources/d3-array/src/threshold/sturges.js swh/web/static/jssources/d3-axis/LICENSE.txt swh/web/static/jssources/d3-axis/src/array.js swh/web/static/jssources/d3-axis/src/axis.js swh/web/static/jssources/d3-axis/src/identity.js swh/web/static/jssources/d3-axis/src/index.js swh/web/static/jssources/d3-brush/LICENSE.txt swh/web/static/jssources/d3-brush/src/brush.js swh/web/static/jssources/d3-brush/src/constant.js swh/web/static/jssources/d3-brush/src/event.js swh/web/static/jssources/d3-brush/src/index.js swh/web/static/jssources/d3-brush/src/noevent.js swh/web/static/jssources/d3-chord/LICENSE.txt swh/web/static/jssources/d3-chord/src/array.js swh/web/static/jssources/d3-chord/src/chord.js swh/web/static/jssources/d3-chord/src/constant.js swh/web/static/jssources/d3-chord/src/index.js swh/web/static/jssources/d3-chord/src/math.js swh/web/static/jssources/d3-chord/src/ribbon.js swh/web/static/jssources/d3-collection/LICENSE.txt swh/web/static/jssources/d3-collection/src/entries.js swh/web/static/jssources/d3-collection/src/index.js swh/web/static/jssources/d3-collection/src/keys.js swh/web/static/jssources/d3-collection/src/map.js swh/web/static/jssources/d3-collection/src/nest.js swh/web/static/jssources/d3-collection/src/set.js swh/web/static/jssources/d3-collection/src/values.js swh/web/static/jssources/d3-color/LICENSE.txt swh/web/static/jssources/d3-color/src/color.js swh/web/static/jssources/d3-color/src/cubehelix.js swh/web/static/jssources/d3-color/src/define.js swh/web/static/jssources/d3-color/src/index.js swh/web/static/jssources/d3-color/src/lab.js swh/web/static/jssources/d3-color/src/math.js swh/web/static/jssources/d3-contour/LICENSE.txt swh/web/static/jssources/d3-contour/src/area.js swh/web/static/jssources/d3-contour/src/array.js swh/web/static/jssources/d3-contour/src/ascending.js swh/web/static/jssources/d3-contour/src/blur.js swh/web/static/jssources/d3-contour/src/constant.js swh/web/static/jssources/d3-contour/src/contains.js swh/web/static/jssources/d3-contour/src/contours.js swh/web/static/jssources/d3-contour/src/density.js swh/web/static/jssources/d3-contour/src/index.js swh/web/static/jssources/d3-contour/src/noop.js swh/web/static/jssources/d3-dispatch/LICENSE.txt swh/web/static/jssources/d3-dispatch/src/dispatch.js swh/web/static/jssources/d3-dispatch/src/index.js swh/web/static/jssources/d3-drag/LICENSE.txt swh/web/static/jssources/d3-drag/src/constant.js swh/web/static/jssources/d3-drag/src/drag.js swh/web/static/jssources/d3-drag/src/event.js swh/web/static/jssources/d3-drag/src/index.js swh/web/static/jssources/d3-drag/src/nodrag.js swh/web/static/jssources/d3-drag/src/noevent.js swh/web/static/jssources/d3-dsv/LICENSE.txt swh/web/static/jssources/d3-dsv/src/autoType.js swh/web/static/jssources/d3-dsv/src/csv.js swh/web/static/jssources/d3-dsv/src/dsv.js swh/web/static/jssources/d3-dsv/src/index.js swh/web/static/jssources/d3-dsv/src/tsv.js swh/web/static/jssources/d3-ease/LICENSE.txt swh/web/static/jssources/d3-ease/src/back.js swh/web/static/jssources/d3-ease/src/bounce.js swh/web/static/jssources/d3-ease/src/circle.js swh/web/static/jssources/d3-ease/src/cubic.js swh/web/static/jssources/d3-ease/src/elastic.js swh/web/static/jssources/d3-ease/src/exp.js swh/web/static/jssources/d3-ease/src/index.js swh/web/static/jssources/d3-ease/src/linear.js swh/web/static/jssources/d3-ease/src/poly.js swh/web/static/jssources/d3-ease/src/quad.js swh/web/static/jssources/d3-ease/src/sin.js swh/web/static/jssources/d3-fetch/LICENSE.txt swh/web/static/jssources/d3-fetch/src/blob.js swh/web/static/jssources/d3-fetch/src/buffer.js swh/web/static/jssources/d3-fetch/src/dsv.js swh/web/static/jssources/d3-fetch/src/image.js swh/web/static/jssources/d3-fetch/src/index.js swh/web/static/jssources/d3-fetch/src/json.js swh/web/static/jssources/d3-fetch/src/text.js swh/web/static/jssources/d3-fetch/src/xml.js swh/web/static/jssources/d3-force/LICENSE.txt swh/web/static/jssources/d3-force/src/center.js swh/web/static/jssources/d3-force/src/collide.js swh/web/static/jssources/d3-force/src/constant.js swh/web/static/jssources/d3-force/src/index.js swh/web/static/jssources/d3-force/src/jiggle.js swh/web/static/jssources/d3-force/src/link.js swh/web/static/jssources/d3-force/src/manyBody.js swh/web/static/jssources/d3-force/src/radial.js swh/web/static/jssources/d3-force/src/simulation.js swh/web/static/jssources/d3-force/src/x.js swh/web/static/jssources/d3-force/src/y.js swh/web/static/jssources/d3-format/LICENSE.txt swh/web/static/jssources/d3-format/src/defaultLocale.js swh/web/static/jssources/d3-format/src/exponent.js swh/web/static/jssources/d3-format/src/formatDecimal.js swh/web/static/jssources/d3-format/src/formatGroup.js swh/web/static/jssources/d3-format/src/formatNumerals.js swh/web/static/jssources/d3-format/src/formatPrefixAuto.js swh/web/static/jssources/d3-format/src/formatRounded.js swh/web/static/jssources/d3-format/src/formatSpecifier.js swh/web/static/jssources/d3-format/src/formatTrim.js swh/web/static/jssources/d3-format/src/formatTypes.js swh/web/static/jssources/d3-format/src/identity.js swh/web/static/jssources/d3-format/src/index.js swh/web/static/jssources/d3-format/src/locale.js swh/web/static/jssources/d3-format/src/precisionFixed.js swh/web/static/jssources/d3-format/src/precisionPrefix.js swh/web/static/jssources/d3-format/src/precisionRound.js swh/web/static/jssources/d3-geo/LICENSE.txt swh/web/static/jssources/d3-geo/src/adder.js swh/web/static/jssources/d3-geo/src/area.js swh/web/static/jssources/d3-geo/src/bounds.js swh/web/static/jssources/d3-geo/src/cartesian.js swh/web/static/jssources/d3-geo/src/centroid.js swh/web/static/jssources/d3-geo/src/circle.js swh/web/static/jssources/d3-geo/src/compose.js swh/web/static/jssources/d3-geo/src/constant.js swh/web/static/jssources/d3-geo/src/contains.js swh/web/static/jssources/d3-geo/src/distance.js swh/web/static/jssources/d3-geo/src/graticule.js swh/web/static/jssources/d3-geo/src/identity.js swh/web/static/jssources/d3-geo/src/index.js swh/web/static/jssources/d3-geo/src/interpolate.js swh/web/static/jssources/d3-geo/src/length.js swh/web/static/jssources/d3-geo/src/math.js swh/web/static/jssources/d3-geo/src/noop.js swh/web/static/jssources/d3-geo/src/pointEqual.js swh/web/static/jssources/d3-geo/src/polygonContains.js swh/web/static/jssources/d3-geo/src/rotation.js swh/web/static/jssources/d3-geo/src/stream.js swh/web/static/jssources/d3-geo/src/transform.js swh/web/static/jssources/d3-geo/src/clip/antimeridian.js swh/web/static/jssources/d3-geo/src/clip/buffer.js swh/web/static/jssources/d3-geo/src/clip/circle.js swh/web/static/jssources/d3-geo/src/clip/extent.js swh/web/static/jssources/d3-geo/src/clip/index.js swh/web/static/jssources/d3-geo/src/clip/line.js swh/web/static/jssources/d3-geo/src/clip/rectangle.js swh/web/static/jssources/d3-geo/src/clip/rejoin.js swh/web/static/jssources/d3-geo/src/path/area.js swh/web/static/jssources/d3-geo/src/path/bounds.js swh/web/static/jssources/d3-geo/src/path/centroid.js swh/web/static/jssources/d3-geo/src/path/context.js swh/web/static/jssources/d3-geo/src/path/index.js swh/web/static/jssources/d3-geo/src/path/measure.js swh/web/static/jssources/d3-geo/src/path/string.js swh/web/static/jssources/d3-geo/src/projection/albers.js swh/web/static/jssources/d3-geo/src/projection/albersUsa.js swh/web/static/jssources/d3-geo/src/projection/azimuthal.js swh/web/static/jssources/d3-geo/src/projection/azimuthalEqualArea.js swh/web/static/jssources/d3-geo/src/projection/azimuthalEquidistant.js swh/web/static/jssources/d3-geo/src/projection/conic.js swh/web/static/jssources/d3-geo/src/projection/conicConformal.js swh/web/static/jssources/d3-geo/src/projection/conicEqualArea.js swh/web/static/jssources/d3-geo/src/projection/conicEquidistant.js swh/web/static/jssources/d3-geo/src/projection/cylindricalEqualArea.js swh/web/static/jssources/d3-geo/src/projection/equalEarth.js swh/web/static/jssources/d3-geo/src/projection/equirectangular.js swh/web/static/jssources/d3-geo/src/projection/fit.js swh/web/static/jssources/d3-geo/src/projection/gnomonic.js swh/web/static/jssources/d3-geo/src/projection/identity.js swh/web/static/jssources/d3-geo/src/projection/index.js swh/web/static/jssources/d3-geo/src/projection/mercator.js swh/web/static/jssources/d3-geo/src/projection/naturalEarth1.js swh/web/static/jssources/d3-geo/src/projection/orthographic.js swh/web/static/jssources/d3-geo/src/projection/resample.js swh/web/static/jssources/d3-geo/src/projection/stereographic.js swh/web/static/jssources/d3-geo/src/projection/transverseMercator.js swh/web/static/jssources/d3-hierarchy/LICENSE.txt swh/web/static/jssources/d3-hierarchy/src/accessors.js swh/web/static/jssources/d3-hierarchy/src/array.js swh/web/static/jssources/d3-hierarchy/src/cluster.js swh/web/static/jssources/d3-hierarchy/src/constant.js swh/web/static/jssources/d3-hierarchy/src/index.js swh/web/static/jssources/d3-hierarchy/src/partition.js swh/web/static/jssources/d3-hierarchy/src/stratify.js swh/web/static/jssources/d3-hierarchy/src/tree.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/ancestors.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/count.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/descendants.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/each.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/eachAfter.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/eachBefore.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/index.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/leaves.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/links.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/path.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/sort.js swh/web/static/jssources/d3-hierarchy/src/hierarchy/sum.js swh/web/static/jssources/d3-hierarchy/src/pack/enclose.js swh/web/static/jssources/d3-hierarchy/src/pack/index.js swh/web/static/jssources/d3-hierarchy/src/pack/siblings.js swh/web/static/jssources/d3-hierarchy/src/treemap/binary.js swh/web/static/jssources/d3-hierarchy/src/treemap/dice.js swh/web/static/jssources/d3-hierarchy/src/treemap/index.js swh/web/static/jssources/d3-hierarchy/src/treemap/resquarify.js swh/web/static/jssources/d3-hierarchy/src/treemap/round.js swh/web/static/jssources/d3-hierarchy/src/treemap/slice.js swh/web/static/jssources/d3-hierarchy/src/treemap/sliceDice.js swh/web/static/jssources/d3-hierarchy/src/treemap/squarify.js swh/web/static/jssources/d3-interpolate/LICENSE.txt swh/web/static/jssources/d3-interpolate/src/array.js swh/web/static/jssources/d3-interpolate/src/basis.js swh/web/static/jssources/d3-interpolate/src/basisClosed.js swh/web/static/jssources/d3-interpolate/src/color.js swh/web/static/jssources/d3-interpolate/src/constant.js swh/web/static/jssources/d3-interpolate/src/cubehelix.js swh/web/static/jssources/d3-interpolate/src/date.js swh/web/static/jssources/d3-interpolate/src/discrete.js swh/web/static/jssources/d3-interpolate/src/hcl.js swh/web/static/jssources/d3-interpolate/src/hsl.js swh/web/static/jssources/d3-interpolate/src/hue.js swh/web/static/jssources/d3-interpolate/src/index.js swh/web/static/jssources/d3-interpolate/src/lab.js swh/web/static/jssources/d3-interpolate/src/number.js swh/web/static/jssources/d3-interpolate/src/object.js swh/web/static/jssources/d3-interpolate/src/piecewise.js swh/web/static/jssources/d3-interpolate/src/quantize.js swh/web/static/jssources/d3-interpolate/src/rgb.js swh/web/static/jssources/d3-interpolate/src/round.js swh/web/static/jssources/d3-interpolate/src/string.js swh/web/static/jssources/d3-interpolate/src/value.js swh/web/static/jssources/d3-interpolate/src/zoom.js swh/web/static/jssources/d3-interpolate/src/transform/decompose.js swh/web/static/jssources/d3-interpolate/src/transform/index.js swh/web/static/jssources/d3-interpolate/src/transform/parse.js swh/web/static/jssources/d3-path/LICENSE.txt swh/web/static/jssources/d3-path/src/index.js swh/web/static/jssources/d3-path/src/path.js swh/web/static/jssources/d3-polygon/LICENSE.txt swh/web/static/jssources/d3-polygon/src/area.js swh/web/static/jssources/d3-polygon/src/centroid.js swh/web/static/jssources/d3-polygon/src/contains.js swh/web/static/jssources/d3-polygon/src/cross.js swh/web/static/jssources/d3-polygon/src/hull.js swh/web/static/jssources/d3-polygon/src/index.js swh/web/static/jssources/d3-polygon/src/length.js swh/web/static/jssources/d3-quadtree/LICENSE.txt swh/web/static/jssources/d3-quadtree/src/add.js swh/web/static/jssources/d3-quadtree/src/cover.js swh/web/static/jssources/d3-quadtree/src/data.js swh/web/static/jssources/d3-quadtree/src/extent.js swh/web/static/jssources/d3-quadtree/src/find.js swh/web/static/jssources/d3-quadtree/src/index.js swh/web/static/jssources/d3-quadtree/src/quad.js swh/web/static/jssources/d3-quadtree/src/quadtree.js swh/web/static/jssources/d3-quadtree/src/remove.js swh/web/static/jssources/d3-quadtree/src/root.js swh/web/static/jssources/d3-quadtree/src/size.js swh/web/static/jssources/d3-quadtree/src/visit.js swh/web/static/jssources/d3-quadtree/src/visitAfter.js swh/web/static/jssources/d3-quadtree/src/x.js swh/web/static/jssources/d3-quadtree/src/y.js swh/web/static/jssources/d3-random/LICENSE.txt swh/web/static/jssources/d3-random/src/bates.js swh/web/static/jssources/d3-random/src/defaultSource.js swh/web/static/jssources/d3-random/src/exponential.js swh/web/static/jssources/d3-random/src/index.js swh/web/static/jssources/d3-random/src/irwinHall.js swh/web/static/jssources/d3-random/src/logNormal.js swh/web/static/jssources/d3-random/src/normal.js swh/web/static/jssources/d3-random/src/uniform.js swh/web/static/jssources/d3-scale/LICENSE.txt swh/web/static/jssources/d3-scale-chromatic/LICENSE.txt swh/web/static/jssources/d3-scale-chromatic/src/colors.js swh/web/static/jssources/d3-scale-chromatic/src/index.js swh/web/static/jssources/d3-scale-chromatic/src/ramp.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Accent.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Dark2.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Paired.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Pastel1.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Pastel2.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Set1.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Set2.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/Set3.js swh/web/static/jssources/d3-scale-chromatic/src/categorical/category10.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/BrBG.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/PRGn.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/PiYG.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/PuOr.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/RdBu.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/RdGy.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/RdYlBu.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/RdYlGn.js swh/web/static/jssources/d3-scale-chromatic/src/diverging/Spectral.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/BuGn.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/BuPu.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/GnBu.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/OrRd.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/PuBu.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/PuBuGn.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/PuRd.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/RdPu.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/YlGn.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/YlGnBu.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/YlOrBr.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/YlOrRd.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/cubehelix.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/rainbow.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/sinebow.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-multi/viridis.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-single/Blues.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-single/Greens.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-single/Greys.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-single/Oranges.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-single/Purples.js swh/web/static/jssources/d3-scale-chromatic/src/sequential-single/Reds.js swh/web/static/jssources/d3-scale/src/array.js swh/web/static/jssources/d3-scale/src/band.js swh/web/static/jssources/d3-scale/src/constant.js swh/web/static/jssources/d3-scale/src/continuous.js swh/web/static/jssources/d3-scale/src/diverging.js swh/web/static/jssources/d3-scale/src/identity.js swh/web/static/jssources/d3-scale/src/index.js swh/web/static/jssources/d3-scale/src/init.js swh/web/static/jssources/d3-scale/src/linear.js swh/web/static/jssources/d3-scale/src/log.js swh/web/static/jssources/d3-scale/src/nice.js swh/web/static/jssources/d3-scale/src/number.js swh/web/static/jssources/d3-scale/src/ordinal.js swh/web/static/jssources/d3-scale/src/pow.js swh/web/static/jssources/d3-scale/src/quantile.js swh/web/static/jssources/d3-scale/src/quantize.js swh/web/static/jssources/d3-scale/src/sequential.js swh/web/static/jssources/d3-scale/src/sequentialQuantile.js swh/web/static/jssources/d3-scale/src/symlog.js swh/web/static/jssources/d3-scale/src/threshold.js swh/web/static/jssources/d3-scale/src/tickFormat.js swh/web/static/jssources/d3-scale/src/time.js swh/web/static/jssources/d3-scale/src/utcTime.js swh/web/static/jssources/d3-selection/LICENSE.txt swh/web/static/jssources/d3-selection/src/constant.js swh/web/static/jssources/d3-selection/src/create.js swh/web/static/jssources/d3-selection/src/creator.js swh/web/static/jssources/d3-selection/src/index.js swh/web/static/jssources/d3-selection/src/local.js swh/web/static/jssources/d3-selection/src/matcher.js swh/web/static/jssources/d3-selection/src/mouse.js swh/web/static/jssources/d3-selection/src/namespace.js swh/web/static/jssources/d3-selection/src/namespaces.js swh/web/static/jssources/d3-selection/src/point.js swh/web/static/jssources/d3-selection/src/select.js swh/web/static/jssources/d3-selection/src/selectAll.js swh/web/static/jssources/d3-selection/src/selector.js swh/web/static/jssources/d3-selection/src/selectorAll.js swh/web/static/jssources/d3-selection/src/sourceEvent.js swh/web/static/jssources/d3-selection/src/touch.js swh/web/static/jssources/d3-selection/src/touches.js swh/web/static/jssources/d3-selection/src/window.js swh/web/static/jssources/d3-selection/src/selection/append.js swh/web/static/jssources/d3-selection/src/selection/attr.js swh/web/static/jssources/d3-selection/src/selection/call.js swh/web/static/jssources/d3-selection/src/selection/classed.js swh/web/static/jssources/d3-selection/src/selection/clone.js swh/web/static/jssources/d3-selection/src/selection/data.js swh/web/static/jssources/d3-selection/src/selection/datum.js swh/web/static/jssources/d3-selection/src/selection/dispatch.js swh/web/static/jssources/d3-selection/src/selection/each.js swh/web/static/jssources/d3-selection/src/selection/empty.js swh/web/static/jssources/d3-selection/src/selection/enter.js swh/web/static/jssources/d3-selection/src/selection/exit.js swh/web/static/jssources/d3-selection/src/selection/filter.js swh/web/static/jssources/d3-selection/src/selection/html.js swh/web/static/jssources/d3-selection/src/selection/index.js swh/web/static/jssources/d3-selection/src/selection/insert.js swh/web/static/jssources/d3-selection/src/selection/join.js swh/web/static/jssources/d3-selection/src/selection/lower.js swh/web/static/jssources/d3-selection/src/selection/merge.js swh/web/static/jssources/d3-selection/src/selection/node.js swh/web/static/jssources/d3-selection/src/selection/nodes.js swh/web/static/jssources/d3-selection/src/selection/on.js swh/web/static/jssources/d3-selection/src/selection/order.js swh/web/static/jssources/d3-selection/src/selection/property.js swh/web/static/jssources/d3-selection/src/selection/raise.js swh/web/static/jssources/d3-selection/src/selection/remove.js swh/web/static/jssources/d3-selection/src/selection/select.js swh/web/static/jssources/d3-selection/src/selection/selectAll.js swh/web/static/jssources/d3-selection/src/selection/size.js swh/web/static/jssources/d3-selection/src/selection/sort.js swh/web/static/jssources/d3-selection/src/selection/sparse.js swh/web/static/jssources/d3-selection/src/selection/style.js swh/web/static/jssources/d3-selection/src/selection/text.js swh/web/static/jssources/d3-shape/LICENSE.txt swh/web/static/jssources/d3-shape/src/arc.js swh/web/static/jssources/d3-shape/src/area.js swh/web/static/jssources/d3-shape/src/areaRadial.js swh/web/static/jssources/d3-shape/src/array.js swh/web/static/jssources/d3-shape/src/constant.js swh/web/static/jssources/d3-shape/src/descending.js swh/web/static/jssources/d3-shape/src/identity.js swh/web/static/jssources/d3-shape/src/index.js swh/web/static/jssources/d3-shape/src/line.js swh/web/static/jssources/d3-shape/src/lineRadial.js swh/web/static/jssources/d3-shape/src/math.js swh/web/static/jssources/d3-shape/src/noop.js swh/web/static/jssources/d3-shape/src/pie.js swh/web/static/jssources/d3-shape/src/point.js swh/web/static/jssources/d3-shape/src/pointRadial.js swh/web/static/jssources/d3-shape/src/stack.js swh/web/static/jssources/d3-shape/src/symbol.js swh/web/static/jssources/d3-shape/src/curve/basis.js swh/web/static/jssources/d3-shape/src/curve/basisClosed.js swh/web/static/jssources/d3-shape/src/curve/basisOpen.js swh/web/static/jssources/d3-shape/src/curve/bundle.js swh/web/static/jssources/d3-shape/src/curve/cardinal.js swh/web/static/jssources/d3-shape/src/curve/cardinalClosed.js swh/web/static/jssources/d3-shape/src/curve/cardinalOpen.js swh/web/static/jssources/d3-shape/src/curve/catmullRom.js swh/web/static/jssources/d3-shape/src/curve/catmullRomClosed.js swh/web/static/jssources/d3-shape/src/curve/catmullRomOpen.js swh/web/static/jssources/d3-shape/src/curve/linear.js swh/web/static/jssources/d3-shape/src/curve/linearClosed.js swh/web/static/jssources/d3-shape/src/curve/monotone.js swh/web/static/jssources/d3-shape/src/curve/natural.js swh/web/static/jssources/d3-shape/src/curve/radial.js swh/web/static/jssources/d3-shape/src/curve/step.js swh/web/static/jssources/d3-shape/src/link/index.js swh/web/static/jssources/d3-shape/src/offset/diverging.js swh/web/static/jssources/d3-shape/src/offset/expand.js swh/web/static/jssources/d3-shape/src/offset/none.js swh/web/static/jssources/d3-shape/src/offset/silhouette.js swh/web/static/jssources/d3-shape/src/offset/wiggle.js swh/web/static/jssources/d3-shape/src/order/appearance.js swh/web/static/jssources/d3-shape/src/order/ascending.js swh/web/static/jssources/d3-shape/src/order/descending.js swh/web/static/jssources/d3-shape/src/order/insideOut.js swh/web/static/jssources/d3-shape/src/order/none.js swh/web/static/jssources/d3-shape/src/order/reverse.js swh/web/static/jssources/d3-shape/src/symbol/circle.js swh/web/static/jssources/d3-shape/src/symbol/cross.js swh/web/static/jssources/d3-shape/src/symbol/diamond.js swh/web/static/jssources/d3-shape/src/symbol/square.js swh/web/static/jssources/d3-shape/src/symbol/star.js swh/web/static/jssources/d3-shape/src/symbol/triangle.js swh/web/static/jssources/d3-shape/src/symbol/wye.js swh/web/static/jssources/d3-time/LICENSE.txt swh/web/static/jssources/d3-time-format/LICENSE.txt swh/web/static/jssources/d3-time-format/src/defaultLocale.js swh/web/static/jssources/d3-time-format/src/index.js swh/web/static/jssources/d3-time-format/src/isoFormat.js swh/web/static/jssources/d3-time-format/src/isoParse.js swh/web/static/jssources/d3-time-format/src/locale.js swh/web/static/jssources/d3-time/src/day.js swh/web/static/jssources/d3-time/src/duration.js swh/web/static/jssources/d3-time/src/hour.js swh/web/static/jssources/d3-time/src/index.js swh/web/static/jssources/d3-time/src/interval.js swh/web/static/jssources/d3-time/src/millisecond.js swh/web/static/jssources/d3-time/src/minute.js swh/web/static/jssources/d3-time/src/month.js swh/web/static/jssources/d3-time/src/second.js swh/web/static/jssources/d3-time/src/utcDay.js swh/web/static/jssources/d3-time/src/utcHour.js swh/web/static/jssources/d3-time/src/utcMinute.js swh/web/static/jssources/d3-time/src/utcMonth.js swh/web/static/jssources/d3-time/src/utcWeek.js swh/web/static/jssources/d3-time/src/utcYear.js swh/web/static/jssources/d3-time/src/week.js swh/web/static/jssources/d3-time/src/year.js swh/web/static/jssources/d3-timer/LICENSE.txt swh/web/static/jssources/d3-timer/src/index.js swh/web/static/jssources/d3-timer/src/interval.js swh/web/static/jssources/d3-timer/src/timeout.js swh/web/static/jssources/d3-timer/src/timer.js swh/web/static/jssources/d3-transition/LICENSE.txt swh/web/static/jssources/d3-transition/src/active.js swh/web/static/jssources/d3-transition/src/index.js swh/web/static/jssources/d3-transition/src/interrupt.js swh/web/static/jssources/d3-transition/src/selection/index.js swh/web/static/jssources/d3-transition/src/selection/interrupt.js swh/web/static/jssources/d3-transition/src/selection/transition.js swh/web/static/jssources/d3-transition/src/transition/attr.js swh/web/static/jssources/d3-transition/src/transition/attrTween.js swh/web/static/jssources/d3-transition/src/transition/delay.js swh/web/static/jssources/d3-transition/src/transition/duration.js swh/web/static/jssources/d3-transition/src/transition/ease.js swh/web/static/jssources/d3-transition/src/transition/end.js swh/web/static/jssources/d3-transition/src/transition/filter.js swh/web/static/jssources/d3-transition/src/transition/index.js swh/web/static/jssources/d3-transition/src/transition/interpolate.js swh/web/static/jssources/d3-transition/src/transition/merge.js swh/web/static/jssources/d3-transition/src/transition/on.js swh/web/static/jssources/d3-transition/src/transition/remove.js swh/web/static/jssources/d3-transition/src/transition/schedule.js swh/web/static/jssources/d3-transition/src/transition/select.js swh/web/static/jssources/d3-transition/src/transition/selectAll.js swh/web/static/jssources/d3-transition/src/transition/selection.js swh/web/static/jssources/d3-transition/src/transition/style.js swh/web/static/jssources/d3-transition/src/transition/styleTween.js swh/web/static/jssources/d3-transition/src/transition/text.js swh/web/static/jssources/d3-transition/src/transition/transition.js swh/web/static/jssources/d3-transition/src/transition/tween.js swh/web/static/jssources/d3-voronoi/LICENSE.txt swh/web/static/jssources/d3-voronoi/src/Beach.js swh/web/static/jssources/d3-voronoi/src/Cell.js swh/web/static/jssources/d3-voronoi/src/Circle.js swh/web/static/jssources/d3-voronoi/src/Diagram.js swh/web/static/jssources/d3-voronoi/src/Edge.js swh/web/static/jssources/d3-voronoi/src/RedBlackTree.js swh/web/static/jssources/d3-voronoi/src/constant.js swh/web/static/jssources/d3-voronoi/src/index.js swh/web/static/jssources/d3-voronoi/src/point.js swh/web/static/jssources/d3-voronoi/src/voronoi.js swh/web/static/jssources/d3-zoom/LICENSE.txt swh/web/static/jssources/d3-zoom/src/constant.js swh/web/static/jssources/d3-zoom/src/event.js swh/web/static/jssources/d3-zoom/src/index.js swh/web/static/jssources/d3-zoom/src/noevent.js swh/web/static/jssources/d3-zoom/src/transform.js swh/web/static/jssources/d3-zoom/src/zoom.js swh/web/static/jssources/d3/dist/package.js swh/web/static/jssources/datatables.net/License.txt swh/web/static/jssources/datatables.net-bs4/js/dataTables.bootstrap4.js swh/web/static/jssources/datatables.net/js/jquery.dataTables.js swh/web/static/jssources/highlight.js/LICENSE.txt swh/web/static/jssources/highlight.js/lib/highlight.js swh/web/static/jssources/highlight.js/lib/index.js swh/web/static/jssources/highlight.js/lib/languages/1c.js swh/web/static/jssources/highlight.js/lib/languages/abnf.js swh/web/static/jssources/highlight.js/lib/languages/accesslog.js swh/web/static/jssources/highlight.js/lib/languages/actionscript.js swh/web/static/jssources/highlight.js/lib/languages/ada.js swh/web/static/jssources/highlight.js/lib/languages/angelscript.js swh/web/static/jssources/highlight.js/lib/languages/apache.js swh/web/static/jssources/highlight.js/lib/languages/applescript.js swh/web/static/jssources/highlight.js/lib/languages/arcade.js swh/web/static/jssources/highlight.js/lib/languages/arduino.js swh/web/static/jssources/highlight.js/lib/languages/armasm.js swh/web/static/jssources/highlight.js/lib/languages/asciidoc.js swh/web/static/jssources/highlight.js/lib/languages/aspectj.js swh/web/static/jssources/highlight.js/lib/languages/autohotkey.js swh/web/static/jssources/highlight.js/lib/languages/autoit.js swh/web/static/jssources/highlight.js/lib/languages/avrasm.js swh/web/static/jssources/highlight.js/lib/languages/awk.js swh/web/static/jssources/highlight.js/lib/languages/axapta.js swh/web/static/jssources/highlight.js/lib/languages/bash.js swh/web/static/jssources/highlight.js/lib/languages/basic.js swh/web/static/jssources/highlight.js/lib/languages/bnf.js swh/web/static/jssources/highlight.js/lib/languages/brainfuck.js swh/web/static/jssources/highlight.js/lib/languages/cal.js swh/web/static/jssources/highlight.js/lib/languages/capnproto.js swh/web/static/jssources/highlight.js/lib/languages/ceylon.js swh/web/static/jssources/highlight.js/lib/languages/clean.js swh/web/static/jssources/highlight.js/lib/languages/clojure-repl.js swh/web/static/jssources/highlight.js/lib/languages/clojure.js swh/web/static/jssources/highlight.js/lib/languages/cmake.js swh/web/static/jssources/highlight.js/lib/languages/coffeescript.js swh/web/static/jssources/highlight.js/lib/languages/coq.js swh/web/static/jssources/highlight.js/lib/languages/cos.js swh/web/static/jssources/highlight.js/lib/languages/cpp.js swh/web/static/jssources/highlight.js/lib/languages/crmsh.js swh/web/static/jssources/highlight.js/lib/languages/crystal.js swh/web/static/jssources/highlight.js/lib/languages/cs.js swh/web/static/jssources/highlight.js/lib/languages/csp.js swh/web/static/jssources/highlight.js/lib/languages/css.js swh/web/static/jssources/highlight.js/lib/languages/d.js swh/web/static/jssources/highlight.js/lib/languages/dart.js swh/web/static/jssources/highlight.js/lib/languages/delphi.js swh/web/static/jssources/highlight.js/lib/languages/diff.js swh/web/static/jssources/highlight.js/lib/languages/django.js swh/web/static/jssources/highlight.js/lib/languages/dns.js swh/web/static/jssources/highlight.js/lib/languages/dockerfile.js swh/web/static/jssources/highlight.js/lib/languages/dos.js swh/web/static/jssources/highlight.js/lib/languages/dsconfig.js swh/web/static/jssources/highlight.js/lib/languages/dts.js swh/web/static/jssources/highlight.js/lib/languages/dust.js swh/web/static/jssources/highlight.js/lib/languages/ebnf.js swh/web/static/jssources/highlight.js/lib/languages/elixir.js swh/web/static/jssources/highlight.js/lib/languages/elm.js swh/web/static/jssources/highlight.js/lib/languages/erb.js swh/web/static/jssources/highlight.js/lib/languages/erlang-repl.js swh/web/static/jssources/highlight.js/lib/languages/erlang.js swh/web/static/jssources/highlight.js/lib/languages/excel.js swh/web/static/jssources/highlight.js/lib/languages/fix.js swh/web/static/jssources/highlight.js/lib/languages/flix.js swh/web/static/jssources/highlight.js/lib/languages/fortran.js swh/web/static/jssources/highlight.js/lib/languages/fsharp.js swh/web/static/jssources/highlight.js/lib/languages/gams.js swh/web/static/jssources/highlight.js/lib/languages/gauss.js swh/web/static/jssources/highlight.js/lib/languages/gcode.js swh/web/static/jssources/highlight.js/lib/languages/gherkin.js swh/web/static/jssources/highlight.js/lib/languages/glsl.js swh/web/static/jssources/highlight.js/lib/languages/gml.js swh/web/static/jssources/highlight.js/lib/languages/go.js swh/web/static/jssources/highlight.js/lib/languages/golo.js swh/web/static/jssources/highlight.js/lib/languages/gradle.js swh/web/static/jssources/highlight.js/lib/languages/groovy.js swh/web/static/jssources/highlight.js/lib/languages/haml.js swh/web/static/jssources/highlight.js/lib/languages/handlebars.js swh/web/static/jssources/highlight.js/lib/languages/haskell.js swh/web/static/jssources/highlight.js/lib/languages/haxe.js swh/web/static/jssources/highlight.js/lib/languages/hsp.js swh/web/static/jssources/highlight.js/lib/languages/htmlbars.js swh/web/static/jssources/highlight.js/lib/languages/http.js swh/web/static/jssources/highlight.js/lib/languages/hy.js swh/web/static/jssources/highlight.js/lib/languages/inform7.js swh/web/static/jssources/highlight.js/lib/languages/ini.js swh/web/static/jssources/highlight.js/lib/languages/irpf90.js swh/web/static/jssources/highlight.js/lib/languages/isbl.js swh/web/static/jssources/highlight.js/lib/languages/java.js swh/web/static/jssources/highlight.js/lib/languages/javascript.js swh/web/static/jssources/highlight.js/lib/languages/jboss-cli.js swh/web/static/jssources/highlight.js/lib/languages/json.js swh/web/static/jssources/highlight.js/lib/languages/julia-repl.js swh/web/static/jssources/highlight.js/lib/languages/julia.js swh/web/static/jssources/highlight.js/lib/languages/kotlin.js swh/web/static/jssources/highlight.js/lib/languages/lasso.js swh/web/static/jssources/highlight.js/lib/languages/ldif.js swh/web/static/jssources/highlight.js/lib/languages/leaf.js swh/web/static/jssources/highlight.js/lib/languages/less.js swh/web/static/jssources/highlight.js/lib/languages/lisp.js swh/web/static/jssources/highlight.js/lib/languages/livecodeserver.js swh/web/static/jssources/highlight.js/lib/languages/livescript.js swh/web/static/jssources/highlight.js/lib/languages/llvm.js swh/web/static/jssources/highlight.js/lib/languages/lsl.js swh/web/static/jssources/highlight.js/lib/languages/lua.js swh/web/static/jssources/highlight.js/lib/languages/makefile.js swh/web/static/jssources/highlight.js/lib/languages/markdown.js swh/web/static/jssources/highlight.js/lib/languages/mathematica.js swh/web/static/jssources/highlight.js/lib/languages/matlab.js swh/web/static/jssources/highlight.js/lib/languages/maxima.js swh/web/static/jssources/highlight.js/lib/languages/mel.js swh/web/static/jssources/highlight.js/lib/languages/mercury.js swh/web/static/jssources/highlight.js/lib/languages/mipsasm.js swh/web/static/jssources/highlight.js/lib/languages/mizar.js swh/web/static/jssources/highlight.js/lib/languages/mojolicious.js swh/web/static/jssources/highlight.js/lib/languages/monkey.js swh/web/static/jssources/highlight.js/lib/languages/moonscript.js swh/web/static/jssources/highlight.js/lib/languages/n1ql.js swh/web/static/jssources/highlight.js/lib/languages/nginx.js swh/web/static/jssources/highlight.js/lib/languages/nimrod.js swh/web/static/jssources/highlight.js/lib/languages/nix.js swh/web/static/jssources/highlight.js/lib/languages/nsis.js swh/web/static/jssources/highlight.js/lib/languages/objectivec.js swh/web/static/jssources/highlight.js/lib/languages/ocaml.js swh/web/static/jssources/highlight.js/lib/languages/openscad.js swh/web/static/jssources/highlight.js/lib/languages/oxygene.js swh/web/static/jssources/highlight.js/lib/languages/parser3.js swh/web/static/jssources/highlight.js/lib/languages/perl.js swh/web/static/jssources/highlight.js/lib/languages/pf.js swh/web/static/jssources/highlight.js/lib/languages/pgsql.js swh/web/static/jssources/highlight.js/lib/languages/php.js swh/web/static/jssources/highlight.js/lib/languages/plaintext.js swh/web/static/jssources/highlight.js/lib/languages/pony.js swh/web/static/jssources/highlight.js/lib/languages/powershell.js swh/web/static/jssources/highlight.js/lib/languages/processing.js swh/web/static/jssources/highlight.js/lib/languages/profile.js swh/web/static/jssources/highlight.js/lib/languages/prolog.js swh/web/static/jssources/highlight.js/lib/languages/properties.js swh/web/static/jssources/highlight.js/lib/languages/protobuf.js swh/web/static/jssources/highlight.js/lib/languages/puppet.js swh/web/static/jssources/highlight.js/lib/languages/purebasic.js swh/web/static/jssources/highlight.js/lib/languages/python.js swh/web/static/jssources/highlight.js/lib/languages/q.js swh/web/static/jssources/highlight.js/lib/languages/qml.js swh/web/static/jssources/highlight.js/lib/languages/r.js swh/web/static/jssources/highlight.js/lib/languages/reasonml.js swh/web/static/jssources/highlight.js/lib/languages/rib.js swh/web/static/jssources/highlight.js/lib/languages/roboconf.js swh/web/static/jssources/highlight.js/lib/languages/routeros.js swh/web/static/jssources/highlight.js/lib/languages/rsl.js swh/web/static/jssources/highlight.js/lib/languages/ruby.js swh/web/static/jssources/highlight.js/lib/languages/ruleslanguage.js swh/web/static/jssources/highlight.js/lib/languages/rust.js swh/web/static/jssources/highlight.js/lib/languages/sas.js swh/web/static/jssources/highlight.js/lib/languages/scala.js swh/web/static/jssources/highlight.js/lib/languages/scheme.js swh/web/static/jssources/highlight.js/lib/languages/scilab.js swh/web/static/jssources/highlight.js/lib/languages/scss.js swh/web/static/jssources/highlight.js/lib/languages/shell.js swh/web/static/jssources/highlight.js/lib/languages/smali.js swh/web/static/jssources/highlight.js/lib/languages/smalltalk.js swh/web/static/jssources/highlight.js/lib/languages/sml.js swh/web/static/jssources/highlight.js/lib/languages/sqf.js swh/web/static/jssources/highlight.js/lib/languages/sql.js swh/web/static/jssources/highlight.js/lib/languages/stan.js swh/web/static/jssources/highlight.js/lib/languages/stata.js swh/web/static/jssources/highlight.js/lib/languages/step21.js swh/web/static/jssources/highlight.js/lib/languages/stylus.js swh/web/static/jssources/highlight.js/lib/languages/subunit.js swh/web/static/jssources/highlight.js/lib/languages/swift.js swh/web/static/jssources/highlight.js/lib/languages/taggerscript.js swh/web/static/jssources/highlight.js/lib/languages/tap.js swh/web/static/jssources/highlight.js/lib/languages/tcl.js swh/web/static/jssources/highlight.js/lib/languages/tex.js swh/web/static/jssources/highlight.js/lib/languages/thrift.js swh/web/static/jssources/highlight.js/lib/languages/tp.js swh/web/static/jssources/highlight.js/lib/languages/twig.js swh/web/static/jssources/highlight.js/lib/languages/typescript.js swh/web/static/jssources/highlight.js/lib/languages/vala.js swh/web/static/jssources/highlight.js/lib/languages/vbnet.js swh/web/static/jssources/highlight.js/lib/languages/vbscript-html.js swh/web/static/jssources/highlight.js/lib/languages/vbscript.js swh/web/static/jssources/highlight.js/lib/languages/verilog.js swh/web/static/jssources/highlight.js/lib/languages/vhdl.js swh/web/static/jssources/highlight.js/lib/languages/vim.js swh/web/static/jssources/highlight.js/lib/languages/x86asm.js swh/web/static/jssources/highlight.js/lib/languages/xl.js swh/web/static/jssources/highlight.js/lib/languages/xml.js swh/web/static/jssources/highlight.js/lib/languages/xquery.js swh/web/static/jssources/highlight.js/lib/languages/yaml.js swh/web/static/jssources/highlight.js/lib/languages/zephir.js swh/web/static/jssources/iframe-resizer/LICENSE.txt swh/web/static/jssources/iframe-resizer/index.js swh/web/static/jssources/iframe-resizer/js/iframeResizer.contentWindow.js swh/web/static/jssources/iframe-resizer/js/iframeResizer.js swh/web/static/jssources/iframe-resizer/js/index.js swh/web/static/jssources/jquery/LICENSE.txt swh/web/static/jssources/jquery/dist/jquery.js swh/web/static/jssources/js-cookie/LICENSE.txt swh/web/static/jssources/js-cookie/src/js.cookie.js swh/web/static/jssources/object-fit-images/license.txt swh/web/static/jssources/object-fit-images/dist/ofi.common-js.js swh/web/static/jssources/org/LICENSE.txt swh/web/static/jssources/org/lib/org.js swh/web/static/jssources/org/lib/org/lexer.js swh/web/static/jssources/org/lib/org/node.js swh/web/static/jssources/org/lib/org/parser.js swh/web/static/jssources/org/lib/org/stream.js swh/web/static/jssources/org/lib/org/converter/converter.js swh/web/static/jssources/org/lib/org/converter/html.js swh/web/static/jssources/pdfjs-dist/LICENSE.txt swh/web/static/jssources/pdfjs-dist/build/pdf.js swh/web/static/jssources/pdfjs-dist/build/pdf.worker.js swh/web/static/jssources/popper.js/dist/esm/popper.js swh/web/static/jssources/regenerator-runtime/runtime-module.js swh/web/static/jssources/regenerator-runtime/runtime.js swh/web/static/jssources/showdown/license.txt swh/web/static/jssources/showdown/dist/showdown.js swh/web/static/jssources/swh/web/assets/src/bundles/admin/deposit.js swh/web/static/jssources/swh/web/assets/src/bundles/admin/index.js swh/web/static/jssources/swh/web/assets/src/bundles/admin/origin-save.js swh/web/static/jssources/swh/web/assets/src/bundles/browse/browse-utils.js swh/web/static/jssources/swh/web/assets/src/bundles/browse/index.js swh/web/static/jssources/swh/web/assets/src/bundles/browse/origin-save.js swh/web/static/jssources/swh/web/assets/src/bundles/browse/origin-search.js swh/web/static/jssources/swh/web/assets/src/bundles/browse/snapshot-navigation.js swh/web/static/jssources/swh/web/assets/src/bundles/browse/swh-ids-utils.js swh/web/static/jssources/swh/web/assets/src/bundles/origin/index.js swh/web/static/jssources/swh/web/assets/src/bundles/origin/visits-calendar.js swh/web/static/jssources/swh/web/assets/src/bundles/origin/visits-histogram.js swh/web/static/jssources/swh/web/assets/src/bundles/origin/visits-reporting.js swh/web/static/jssources/swh/web/assets/src/bundles/revision/diff-utils.js swh/web/static/jssources/swh/web/assets/src/bundles/revision/index.js swh/web/static/jssources/swh/web/assets/src/bundles/revision/log-utils.js swh/web/static/jssources/swh/web/assets/src/bundles/vault/index.js swh/web/static/jssources/swh/web/assets/src/bundles/vault/vault-create-tasks.js swh/web/static/jssources/swh/web/assets/src/bundles/vault/vault-ui.js swh/web/static/jssources/swh/web/assets/src/bundles/vendors/index.js swh/web/static/jssources/swh/web/assets/src/bundles/webapp/code-highlighting.js swh/web/static/jssources/swh/web/assets/src/bundles/webapp/index.js swh/web/static/jssources/swh/web/assets/src/bundles/webapp/pdf-rendering.js swh/web/static/jssources/swh/web/assets/src/bundles/webapp/readme-rendering.js swh/web/static/jssources/swh/web/assets/src/bundles/webapp/webapp-utils.js swh/web/static/jssources/swh/web/assets/src/thirdparty/highlightjs-line-numbers/LICENSE.txt swh/web/static/jssources/swh/web/assets/src/thirdparty/highlightjs-line-numbers/highlightjs-line-numbers.js swh/web/static/jssources/swh/web/assets/src/thirdparty/jquery.tabSlideOut/LICENSE.txt swh/web/static/jssources/swh/web/assets/src/thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.js swh/web/static/jssources/swh/web/assets/src/utils/functions.js swh/web/static/jssources/swh/web/assets/src/utils/heaps-permute.js swh/web/static/jssources/swh/web/assets/src/utils/highlightjs.js swh/web/static/jssources/swh/web/assets/src/utils/org.js swh/web/static/jssources/swh/web/assets/src/utils/showdown.js swh/web/static/jssources/url-search-params-polyfill/LICENSE.txt swh/web/static/jssources/url-search-params-polyfill/index.js swh/web/static/jssources/validate.js/LICENSE.txt swh/web/static/jssources/validate.js/validate.js swh/web/static/jssources/waypoints/licenses.txt.txt swh/web/static/jssources/waypoints/lib/jquery.waypoints.js swh/web/static/jssources/whatwg-fetch/LICENSE.txt swh/web/static/jssources/whatwg-fetch/dist/fetch.umd.js swh/web/static/xml/swh-opensearch.xml swh/web/templates/coverage.html swh/web/templates/error.html swh/web/templates/homepage.html swh/web/templates/jslicenses.html swh/web/templates/layout.html swh/web/templates/login.html swh/web/templates/logout.html swh/web/templates/admin/deposit.html swh/web/templates/admin/origin-save.html swh/web/templates/api/api.html swh/web/templates/api/apidoc.html swh/web/templates/api/endpoints.html swh/web/templates/browse/branches.html swh/web/templates/browse/browse.html swh/web/templates/browse/content.html swh/web/templates/browse/directory.html swh/web/templates/browse/help.html swh/web/templates/browse/layout.html swh/web/templates/browse/origin-save.html swh/web/templates/browse/origin-visits.html swh/web/templates/browse/person.html swh/web/templates/browse/release.html swh/web/templates/browse/releases.html swh/web/templates/browse/revision-log.html swh/web/templates/browse/revision.html swh/web/templates/browse/search.html swh/web/templates/browse/vault-ui.html swh/web/templates/includes/apidoc-header.html swh/web/templates/includes/apidoc-header.md swh/web/templates/includes/breadcrumbs.html swh/web/templates/includes/content-display.html swh/web/templates/includes/directory-display.html swh/web/templates/includes/empty-snapshot.html swh/web/templates/includes/global-modals.html swh/web/templates/includes/http-error.html swh/web/templates/includes/readme-display.html swh/web/templates/includes/show-metadata.html swh/web/templates/includes/show-swh-ids.html swh/web/templates/includes/snapshot-context.html swh/web/templates/includes/take-new-snapshot.html swh/web/templates/includes/top-navigation.html swh/web/templates/includes/vault-create-tasks.html swh/web/tests/__init__.py swh/web/tests/conftest.py swh/web/tests/data.py swh/web/tests/strategies.py swh/web/tests/testcase.py swh/web/tests/admin/__init__.py swh/web/tests/admin/test_origin_save.py swh/web/tests/api/__init__.py swh/web/tests/api/test_api_lookup.py swh/web/tests/api/test_apidoc.py swh/web/tests/api/test_apiresponse.py swh/web/tests/api/test_utils.py swh/web/tests/api/views/__init__.py swh/web/tests/api/views/test_content.py swh/web/tests/api/views/test_directory.py swh/web/tests/api/views/test_identifiers.py swh/web/tests/api/views/test_origin.py swh/web/tests/api/views/test_origin_save.py swh/web/tests/api/views/test_person.py swh/web/tests/api/views/test_release.py swh/web/tests/api/views/test_revision.py swh/web/tests/api/views/test_snapshot.py swh/web/tests/api/views/test_stat.py swh/web/tests/api/views/test_vault.py swh/web/tests/browse/__init__.py swh/web/tests/browse/test_utils.py swh/web/tests/browse/views/__init__.py swh/web/tests/browse/views/test_content.py swh/web/tests/browse/views/test_directory.py swh/web/tests/browse/views/test_identifiers.py swh/web/tests/browse/views/test_origin.py swh/web/tests/browse/views/test_origin_save.py swh/web/tests/browse/views/test_person.py swh/web/tests/browse/views/test_release.py swh/web/tests/browse/views/test_revision.py swh/web/tests/common/__init__.py swh/web/tests/common/test_converters.py swh/web/tests/common/test_highlightjs.py swh/web/tests/common/test_origin_visits.py swh/web/tests/common/test_query.py swh/web/tests/common/test_service.py swh/web/tests/common/test_templatetags.py swh/web/tests/common/test_throttling.py swh/web/tests/common/test_utils.py swh/web/tests/resources/repos/highlightjs-line-numbers.js.zip swh/web/tests/resources/repos/highlightjs-line-numbers.js_visit2.zip swh/web/tests/resources/repos/libtess2.zip swh/web/tests/resources/repos/repo_with_submodules.tgz \ No newline at end of file diff --git a/swh/web/assets/src/bundles/browse/origin-save.js b/swh/web/assets/src/bundles/browse/origin-save.js index 73292262..bc1766e3 100644 --- a/swh/web/assets/src/bundles/browse/origin-save.js +++ b/swh/web/assets/src/bundles/browse/origin-save.js @@ -1,267 +1,270 @@ /** * Copyright (C) 2018-2019 The Software Heritage developers * See the AUTHORS file at the top-level directory of this distribution * License: GNU Affero General Public License version 3, or any later version * See top-level LICENSE file for more information */ import {handleFetchError, csrfPost, isGitRepoUrl, removeUrlFragment} from 'utils/functions'; import {validate} from 'validate.js'; let saveRequestsTable; function originSaveRequest(originType, originUrl, acceptedCallback, pendingCallback, errorCallback) { let addSaveOriginRequestUrl = Urls.browse_origin_save_request(originType, originUrl); let grecaptchaData = {}; if (swh.webapp.isReCaptchaActivated()) { grecaptchaData['g-recaptcha-response'] = grecaptcha.getResponse(); } let headers = { 'Accept': 'application/json', 'Content-Type': 'application/json' }; let body = JSON.stringify(grecaptchaData); $('.swh-processing-save-request').css('display', 'block'); csrfPost(addSaveOriginRequestUrl, headers, body) .then(handleFetchError) .then(response => response.json()) .then(data => { $('.swh-processing-save-request').css('display', 'none'); if (data.save_request_status === 'accepted') { acceptedCallback(); } else { pendingCallback(); } if (swh.webapp.isReCaptchaActivated()) { grecaptcha.reset(); } }) .catch(response => { $('.swh-processing-save-request').css('display', 'none'); if (response.status === 403) { errorCallback(); } if (swh.webapp.isReCaptchaActivated()) { grecaptcha.reset(); } }); } export function initOriginSave() { $(document).ready(() => { $.fn.dataTable.ext.errMode = 'none'; fetch(Urls.browse_origin_save_types_list()) .then(response => response.json()) .then(data => { for (let originType of data) { $('#swh-input-origin-type').append(``); } }); saveRequestsTable = $('#swh-origin-save-requests') .on('error.dt', (e, settings, techNote, message) => { $('#swh-origin-save-request-list-error').text('An error occurred while retrieving the save requests list'); console.log(message); }) .DataTable({ serverSide: true, ajax: Urls.browse_origin_save_requests_list('all'), columns: [ { data: 'save_request_date', name: 'request_date', render: (data, type, row) => { if (type === 'display') { let date = new Date(data); return date.toLocaleString(); } return data; } }, { data: 'origin_type', name: 'origin_type' }, { data: 'origin_url', name: 'origin_url', render: (data, type, row) => { if (type === 'display') { return `${data}`; } return data; } }, { data: 'save_request_status', name: 'status' }, { data: 'save_task_status', name: 'loading_task_status', render: (data, type, row) => { if (data === 'succeed') { let browseOriginUrl = Urls.browse_origin(row.origin_url); if (row.visit_date) { browseOriginUrl += `visit/${row.visit_date}/`; } return `${data}`; } return data; } } ], scrollY: '50vh', scrollCollapse: true, order: [[0, 'desc']] }); $('#swh-origin-save-requests-list-tab').on('shown.bs.tab', () => { saveRequestsTable.draw(); window.location.hash = '#requests'; }); $('#swh-origin-save-request-create-tab').on('shown.bs.tab', () => { removeUrlFragment(); }); let saveRequestAcceptedAlert = ``; let saveRequestPendingAlert = ``; let saveRequestRejectedAlert = ``; $('#swh-save-origin-form').submit(event => { event.preventDefault(); event.stopPropagation(); $('.alert').alert('close'); if (event.target.checkValidity()) { $(event.target).removeClass('was-validated'); let originType = $('#swh-input-origin-type').val(); let originUrl = $('#swh-input-origin-url').val(); originSaveRequest(originType, originUrl, () => $('#swh-origin-save-request-status').html(saveRequestAcceptedAlert), () => $('#swh-origin-save-request-status').html(saveRequestPendingAlert), () => { $('#swh-origin-save-request-status').css('color', 'red'); $('#swh-origin-save-request-status').html(saveRequestRejectedAlert); }); } else { $(event.target).addClass('was-validated'); } }); $('#swh-show-origin-save-requests-list').on('click', (event) => { event.preventDefault(); $('.nav-tabs a[href="#swh-origin-save-requests-list"]').tab('show'); }); $('#swh-input-origin-url').on('input', function(event) { let originUrl = $(this).val().trim(); $(this).val(originUrl); $('#swh-input-origin-type option').each(function() { let val = $(this).val(); if (val && originUrl.includes(val)) { $(this).prop('selected', true); } }); }); if (window.location.hash === '#requests') { $('.nav-tabs a[href="#swh-origin-save-requests-list"]').tab('show'); } }); } export function validateSaveOriginUrl(input) { - let validUrl = validate({website: input.value}, { + let originUrl = input.value.trim(); + let validUrl = validate({website: originUrl}, { website: { url: { schemes: ['http', 'https', 'svn', 'git'] } } }) === undefined; let originType = $('#swh-input-origin-type').val(); if (originType === 'git' && validUrl) { // additional checks for well known code hosting providers - let githubIdx = input.value.indexOf('://github.com'); - let gitlabIdx = input.value.indexOf('://gitlab.'); - let gitSfIdx = input.value.indexOf('://git.code.sf.net'); - let bitbucketIdx = input.value.indexOf('://bitbucket.org'); + let githubIdx = originUrl.indexOf('://github.com'); + let gitlabIdx = originUrl.indexOf('://gitlab.'); + let gitSfIdx = originUrl.indexOf('://git.code.sf.net'); + let bitbucketIdx = originUrl.indexOf('://bitbucket.org'); if (githubIdx !== -1 && githubIdx <= 5) { - validUrl = isGitRepoUrl(input.value, 'github.com'); + validUrl = isGitRepoUrl(originUrl, 'github.com'); } else if (gitlabIdx !== -1 && gitlabIdx <= 5) { let startIdx = gitlabIdx + 3; - let idx = input.value.indexOf('/', startIdx); + let idx = originUrl.indexOf('/', startIdx); if (idx !== -1) { - let gitlabDomain = input.value.substr(startIdx, idx - startIdx); + let gitlabDomain = originUrl.substr(startIdx, idx - startIdx); // GitLab repo url needs to be suffixed by '.git' in order to be successfully loaded - validUrl = isGitRepoUrl(input.value, gitlabDomain) && input.value.endsWith('.git'); + // This is due to a bug in dulwich < 0.19.11. + // TODO: remove this check once dulwich >= 0.19.11 is used in production + validUrl = isGitRepoUrl(originUrl, gitlabDomain) && originUrl.endsWith('.git'); } else { validUrl = false; } } else if (gitSfIdx !== -1 && gitSfIdx <= 5) { - validUrl = isGitRepoUrl(input.value, 'git.code.sf.net/p'); + validUrl = isGitRepoUrl(originUrl, 'git.code.sf.net/p'); } else if (bitbucketIdx !== -1 && bitbucketIdx <= 5) { - validUrl = isGitRepoUrl(input.value, 'bitbucket.org'); + validUrl = isGitRepoUrl(originUrl, 'bitbucket.org'); } } if (validUrl) { input.setCustomValidity(''); } else { input.setCustomValidity('The origin url is not valid or does not reference a code repository'); } } export function initTakeNewSnapshot() { let newSnapshotRequestAcceptedAlert = ``; let newSnapshotRequestPendingAlert = ``; let newSnapshotRequestRejectedAlert = ``; $(document).ready(() => { $('#swh-take-new-snapshot-form').submit(event => { event.preventDefault(); event.stopPropagation(); let originType = $('#swh-input-origin-type').val(); let originUrl = $('#swh-input-origin-url').val(); originSaveRequest(originType, originUrl, () => $('#swh-take-new-snapshot-request-status').html(newSnapshotRequestAcceptedAlert), () => $('#swh-take-new-snapshot-request-status').html(newSnapshotRequestPendingAlert), () => { $('#swh-take-new-snapshot-request-status').css('color', 'red'); $('#swh-take-new-snapshot-request-status').html(newSnapshotRequestRejectedAlert); }); }); }); } diff --git a/swh/web/assets/src/bundles/webapp/code-highlighting.js b/swh/web/assets/src/bundles/webapp/code-highlighting.js index 32cb81d2..b5461c3a 100644 --- a/swh/web/assets/src/bundles/webapp/code-highlighting.js +++ b/swh/web/assets/src/bundles/webapp/code-highlighting.js @@ -1,111 +1,111 @@ /** * Copyright (C) 2018 The Software Heritage developers * See the AUTHORS file at the top-level directory of this distribution * License: GNU Affero General Public License version 3, or any later version * See top-level LICENSE file for more information */ import {removeUrlFragment} from 'utils/functions'; export async function highlightCode(showLineNumbers = true) { await import(/* webpackChunkName: "highlightjs" */ 'utils/highlightjs'); // keep track of the first highlighted line let firstHighlightedLine = null; // highlighting color let lineHighlightColor = 'rgb(193, 255, 193)'; // function to highlight a line function highlightLine(i) { let lineTd = $(`.hljs-ln-line[data-line-number="${i}"]`); lineTd.css('background-color', lineHighlightColor); return lineTd; } // function to reset highlighting function resetHighlightedLines() { firstHighlightedLine = null; $('.hljs-ln-line[data-line-number]').css('background-color', 'inherit'); } function scrollToLine(lineDomElt) { if ($(lineDomElt).closest('.swh-content').length > 0) { $('html, body').animate({ scrollTop: $(lineDomElt).offset().top - 70 }, 500); } } // function to highlight lines based on a url fragment // in the form '#Lx' or '#Lx-Ly' function parseUrlFragmentForLinesToHighlight() { let lines = []; let linesRegexp = new RegExp(/L(\d+)/g); let line = linesRegexp.exec(window.location.hash); while (line) { lines.push(parseInt(line[1])); line = linesRegexp.exec(window.location.hash); } resetHighlightedLines(); if (lines.length === 1) { firstHighlightedLine = parseInt(lines[0]); scrollToLine(highlightLine(lines[0])); } else if (lines[0] < lines[lines.length - 1]) { firstHighlightedLine = parseInt(lines[0]); scrollToLine(highlightLine(lines[0])); for (let i = lines[0] + 1; i <= lines[lines.length - 1]; ++i) { highlightLine(i); } } } $(document).ready(() => { // highlight code and add line numbers $('code').each((i, block) => { hljs.highlightBlock(block); if (showLineNumbers) { hljs.lineNumbersBlock(block); } }); if (!showLineNumbers) { return; } // click handler to dynamically highlight line(s) // when the user clicks on a line number (lines range // can also be highlighted while holding the shift key) $('body').click(evt => { if (evt.target.classList.contains('hljs-ln-n')) { let line = parseInt($(evt.target).data('line-number')); if (evt.shiftKey && firstHighlightedLine && line > firstHighlightedLine) { let firstLine = firstHighlightedLine; resetHighlightedLines(); for (let i = firstLine; i <= line; ++i) { highlightLine(i); } firstHighlightedLine = firstLine; window.location.hash = `#L${firstLine}-L${line}`; } else { resetHighlightedLines(); highlightLine(line); window.location.hash = `#L${line}`; scrollToLine(evt.target); } - } else if ($(evt.target).closest('.hljs').length) { + } else if ($(evt.target).closest('.hljs-ln').length) { resetHighlightedLines(); removeUrlFragment(); } }); // update lines highlighting when the url fragment changes $(window).on('hashchange', () => parseUrlFragmentForLinesToHighlight()); // schedule lines highlighting if any as hljs.lineNumbersBlock() is async setTimeout(() => { parseUrlFragmentForLinesToHighlight(); }); }); } diff --git a/swh/web/common/service.py b/swh/web/common/service.py index b6edba53..95f5f1ca 100644 --- a/swh/web/common/service.py +++ b/swh/web/common/service.py @@ -1,1056 +1,1056 @@ # Copyright (C) 2015-2019 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU Affero General Public License version 3, or any later version # See top-level LICENSE file for more information import os from collections import defaultdict from swh.model import hashutil from swh.storage.algos import revisions_walker from swh.web.common import converters from swh.web.common import query from swh.web.common.exc import NotFoundExc from swh.web.common.origin_visits import get_origin_visit from swh.web import config storage = config.storage() vault = config.vault() idx_storage = config.indexer_storage() MAX_LIMIT = 50 # Top limit the users can ask for def _first_element(l): """Returns the first element in the provided list or None if it is empty or None""" return next(iter(l or []), None) def lookup_multiple_hashes(hashes): """Lookup the passed hashes in a single DB connection, using batch processing. Args: An array of {filename: X, sha1: Y}, string X, hex sha1 string Y. Returns: The same array with elements updated with elem['found'] = true if the hash is present in storage, elem['found'] = false if not. """ hashlist = [hashutil.hash_to_bytes(elem['sha1']) for elem in hashes] content_missing = storage.content_missing_per_sha1(hashlist) missing = [hashutil.hash_to_hex(x) for x in content_missing] for x in hashes: x.update({'found': True}) for h in hashes: if h['sha1'] in missing: h['found'] = False return hashes def lookup_expression(expression, last_sha1, per_page): """Lookup expression in raw content. Args: expression (str): An expression to lookup through raw indexed content last_sha1 (str): Last sha1 seen per_page (int): Number of results per page Yields: ctags whose content match the expression """ limit = min(per_page, MAX_LIMIT) ctags = idx_storage.content_ctags_search(expression, last_sha1=last_sha1, limit=limit) for ctag in ctags: ctag = converters.from_swh(ctag, hashess={'id'}) ctag['sha1'] = ctag['id'] ctag.pop('id') yield ctag def lookup_hash(q): """Checks if the storage contains a given content checksum Args: query string of the form Returns: Dict with key found containing the hash info if the hash is present, None if not. """ algo, hash = query.parse_hash(q) found = storage.content_find({algo: hash}) return {'found': converters.from_content(found), 'algo': algo} def search_hash(q): """Checks if the storage contains a given content checksum Args: query string of the form Returns: Dict with key found to True or False, according to whether the checksum is present or not """ algo, hash = query.parse_hash(q) found = storage.content_find({algo: hash}) return {'found': found is not None} def _lookup_content_sha1(q): """Given a possible input, query for the content's sha1. Args: q: query string of the form Returns: binary sha1 if found or None """ algo, hash = query.parse_hash(q) if algo != 'sha1': hashes = storage.content_find({algo: hash}) if not hashes: return None return hashes['sha1'] return hash def lookup_content_ctags(q): """Return ctags information from a specified content. Args: q: query string of the form Yields: ctags information (dict) list if the content is found. """ sha1 = _lookup_content_sha1(q) if not sha1: return None ctags = list(idx_storage.content_ctags_get([sha1])) if not ctags: return None for ctag in ctags: yield converters.from_swh(ctag, hashess={'id'}) def lookup_content_filetype(q): """Return filetype information from a specified content. Args: q: query string of the form Yields: filetype information (dict) list if the content is found. """ sha1 = _lookup_content_sha1(q) if not sha1: return None filetype = _first_element(list(idx_storage.content_mimetype_get([sha1]))) if not filetype: return None return converters.from_filetype(filetype) def lookup_content_language(q): """Return language information from a specified content. Args: q: query string of the form Yields: language information (dict) list if the content is found. """ sha1 = _lookup_content_sha1(q) if not sha1: return None lang = _first_element(list(idx_storage.content_language_get([sha1]))) if not lang: return None return converters.from_swh(lang, hashess={'id'}) def lookup_content_license(q): """Return license information from a specified content. Args: q: query string of the form Yields: license information (dict) list if the content is found. """ sha1 = _lookup_content_sha1(q) if not sha1: return None lic = _first_element(idx_storage.content_fossology_license_get([sha1])) if not lic: return None return converters.from_swh({'id': sha1, 'facts': lic[sha1]}, hashess={'id'}) def lookup_origin(origin): """Return information about the origin matching dict origin. Args: origin: origin's dict with keys either 'id' or ('type' AND 'url') Returns: origin information as dict. """ origin_info = storage.origin_get(origin) if not origin_info: if 'id' in origin and origin['id']: msg = 'Origin with id %s not found!' % origin['id'] else: msg = 'Origin with type %s and url %s not found!' % \ (origin['type'], origin['url']) raise NotFoundExc(msg) return converters.from_origin(origin_info) def lookup_origins(origin_from=1, origin_count=100): """Get list of archived software origins in a paginated way. Origins are sorted by id before returning them Args: origin_from (int): The minimum id of the origins to return origin_count (int): The maximum number of origins to return Yields: origins information as dicts """ origins = storage.origin_get_range(origin_from, origin_count) return map(converters.from_origin, origins) def search_origin(url_pattern, offset=0, limit=50, regexp=False, with_visit=False): """Search for origins whose urls contain a provided string pattern or match a provided regular expression. Args: url_pattern: the string pattern to search for in origin urls offset: number of found origins to skip before returning results limit: the maximum number of found origins to return Returns: list of origin information as dict. """ origins = storage.origin_search(url_pattern, offset, limit, regexp, with_visit) return map(converters.from_origin, origins) def search_origin_metadata(fulltext, limit=50): """Search for origins whose metadata match a provided string pattern. Args: fulltext: the string pattern to search for in origin metadata offset: number of found origins to skip before returning results limit: the maximum number of found origins to return Returns: list of origin metadata as dict. """ matches = idx_storage.origin_intrinsic_metadata_search_fulltext( conjunction=[fulltext], limit=limit) results = [] for match in matches: match['from_revision'] = hashutil.hash_to_hex(match['from_revision']) result = converters.from_origin( - storage.origin_get({'id': match.pop('origin_id')})) + storage.origin_get({'id': match.pop('id')})) result['metadata'] = match results.append(result) return results def lookup_person(person_id): """Return information about the person with id person_id. Args: person_id as string Returns: person information as dict. Raises: NotFoundExc if there is no person with the provided id. """ person = _first_element(storage.person_get([int(person_id)])) if not person: raise NotFoundExc('Person with id %s not found' % person_id) return converters.from_person(person) def _to_sha1_bin(sha1_hex): _, sha1_git_bin = query.parse_hash_with_algorithms_or_throws( sha1_hex, ['sha1'], # HACK: sha1_git really 'Only sha1_git is supported.') return sha1_git_bin def _check_directory_exists(sha1_git, sha1_git_bin): if len(list(storage.directory_missing([sha1_git_bin]))): raise NotFoundExc('Directory with sha1_git %s not found' % sha1_git) def lookup_directory(sha1_git): """Return information about the directory with id sha1_git. Args: sha1_git as string Returns: directory information as dict. """ empty_dir_sha1 = '4b825dc642cb6eb9a060e54bf8d69288fbee4904' if sha1_git == empty_dir_sha1: return [] sha1_git_bin = _to_sha1_bin(sha1_git) _check_directory_exists(sha1_git, sha1_git_bin) directory_entries = storage.directory_ls(sha1_git_bin) return map(converters.from_directory_entry, directory_entries) def lookup_directory_with_path(sha1_git, path_string): """Return directory information for entry with path path_string w.r.t. root directory pointed by directory_sha1_git Args: - directory_sha1_git: sha1_git corresponding to the directory to which we append paths to (hopefully) find the entry - the relative path to the entry starting from the directory pointed by directory_sha1_git Raises: NotFoundExc if the directory entry is not found """ sha1_git_bin = _to_sha1_bin(sha1_git) _check_directory_exists(sha1_git, sha1_git_bin) paths = path_string.strip(os.path.sep).split(os.path.sep) queried_dir = storage.directory_entry_get_by_path( sha1_git_bin, list(map(lambda p: p.encode('utf-8'), paths))) if not queried_dir: raise NotFoundExc(('Directory entry with path %s from %s not found') % (path_string, sha1_git)) return converters.from_directory_entry(queried_dir) def lookup_release(release_sha1_git): """Return information about the release with sha1 release_sha1_git. Args: release_sha1_git: The release's sha1 as hexadecimal Returns: Release information as dict. Raises: ValueError if the identifier provided is not of sha1 nature. """ sha1_git_bin = _to_sha1_bin(release_sha1_git) release = _first_element(storage.release_get([sha1_git_bin])) if not release: raise NotFoundExc('Release with sha1_git %s not found.' % release_sha1_git) return converters.from_release(release) def lookup_release_multiple(sha1_git_list): """Return information about the revisions identified with their sha1_git identifiers. Args: sha1_git_list: A list of revision sha1_git identifiers Returns: Release information as dict. Raises: ValueError if the identifier provided is not of sha1 nature. """ sha1_bin_list = (_to_sha1_bin(sha1_git) for sha1_git in sha1_git_list) releases = storage.release_get(sha1_bin_list) or [] return (converters.from_release(r) for r in releases) def lookup_revision(rev_sha1_git): """Return information about the revision with sha1 revision_sha1_git. Args: revision_sha1_git: The revision's sha1 as hexadecimal Returns: Revision information as dict. Raises: ValueError if the identifier provided is not of sha1 nature. NotFoundExc if there is no revision with the provided sha1_git. """ sha1_git_bin = _to_sha1_bin(rev_sha1_git) revision = _first_element(storage.revision_get([sha1_git_bin])) if not revision: raise NotFoundExc('Revision with sha1_git %s not found.' % rev_sha1_git) return converters.from_revision(revision) def lookup_revision_multiple(sha1_git_list): """Return information about the revisions identified with their sha1_git identifiers. Args: sha1_git_list: A list of revision sha1_git identifiers Returns: Generator of revisions information as dict. Raises: ValueError if the identifier provided is not of sha1 nature. """ sha1_bin_list = (_to_sha1_bin(sha1_git) for sha1_git in sha1_git_list) revisions = storage.revision_get(sha1_bin_list) or [] return (converters.from_revision(r) for r in revisions) def lookup_revision_message(rev_sha1_git): """Return the raw message of the revision with sha1 revision_sha1_git. Args: revision_sha1_git: The revision's sha1 as hexadecimal Returns: Decoded revision message as dict {'message': } Raises: ValueError if the identifier provided is not of sha1 nature. NotFoundExc if the revision is not found, or if it has no message """ sha1_git_bin = _to_sha1_bin(rev_sha1_git) revision = _first_element(storage.revision_get([sha1_git_bin])) if not revision: raise NotFoundExc('Revision with sha1_git %s not found.' % rev_sha1_git) if 'message' not in revision: raise NotFoundExc('No message for revision with sha1_git %s.' % rev_sha1_git) res = {'message': revision['message']} return res def _lookup_revision_id_by(origin_id, branch_name, timestamp): def _get_snapshot_branch(snapshot, branch_name): snapshot = lookup_snapshot(visit['snapshot'], branches_from=branch_name, branches_count=10) branch = None if branch_name in snapshot['branches']: branch = snapshot['branches'][branch_name] return branch visit = get_origin_visit({'id': origin_id}, visit_ts=timestamp) branch = _get_snapshot_branch(visit['snapshot'], branch_name) rev_id = None if branch and branch['target_type'] == 'revision': rev_id = branch['target'] elif branch and branch['target_type'] == 'alias': branch = _get_snapshot_branch(visit['snapshot'], branch['target']) if branch and branch['target_type'] == 'revision': rev_id = branch['target'] if not rev_id: raise NotFoundExc('Revision for origin %s and branch %s not found.' % (origin_id, branch_name)) return rev_id def lookup_revision_by(origin_id, branch_name='HEAD', timestamp=None): """Lookup revision by origin id, snapshot branch name and visit timestamp. If branch_name is not provided, lookup using 'HEAD' as default. If timestamp is not provided, use the most recent. Args: origin_id (int): origin of the revision branch_name (str): snapshot branch name timestamp (str/int): origin visit time frame Returns: dict: The revision matching the criterions Raises: NotFoundExc if no revision corresponds to the criterion """ rev_id = _lookup_revision_id_by(origin_id, branch_name, timestamp) return lookup_revision(rev_id) def lookup_revision_log(rev_sha1_git, limit): """Lookup revision log by revision id. Args: rev_sha1_git (str): The revision's sha1 as hexadecimal limit (int): the maximum number of revisions returned Returns: list: Revision log as list of revision dicts Raises: ValueError: if the identifier provided is not of sha1 nature. NotFoundExc: if there is no revision with the provided sha1_git. """ lookup_revision(rev_sha1_git) sha1_git_bin = _to_sha1_bin(rev_sha1_git) revision_entries = storage.revision_log([sha1_git_bin], limit) return map(converters.from_revision, revision_entries) def lookup_revision_log_by(origin_id, branch_name, timestamp, limit): """Lookup revision by origin id, snapshot branch name and visit timestamp. Args: origin_id (int): origin of the revision branch_name (str): snapshot branch timestamp (str/int): origin visit time frame limit (int): the maximum number of revisions returned Returns: list: Revision log as list of revision dicts Raises: NotFoundExc: if no revision corresponds to the criterion """ rev_id = _lookup_revision_id_by(origin_id, branch_name, timestamp) return lookup_revision_log(rev_id, limit) def lookup_revision_with_context_by(origin_id, branch_name, timestamp, sha1_git, limit=100): """Return information about revision sha1_git, limited to the sub-graph of all transitive parents of sha1_git_root. sha1_git_root being resolved through the lookup of a revision by origin_id, branch_name and ts. In other words, sha1_git is an ancestor of sha1_git_root. Args: - origin_id: origin of the revision. - branch_name: revision's branch. - timestamp: revision's time frame. - sha1_git: one of sha1_git_root's ancestors. - limit: limit the lookup to 100 revisions back. Returns: Pair of (root_revision, revision). Information on sha1_git if it is an ancestor of sha1_git_root including children leading to sha1_git_root Raises: - BadInputExc in case of unknown algo_hash or bad hash. - NotFoundExc if either revision is not found or if sha1_git is not an ancestor of sha1_git_root. """ rev_root_id = _lookup_revision_id_by(origin_id, branch_name, timestamp) rev_root_id_bin = hashutil.hash_to_bytes(rev_root_id) rev_root = _first_element(storage.revision_get([rev_root_id_bin])) return (converters.from_revision(rev_root), lookup_revision_with_context(rev_root, sha1_git, limit)) def lookup_revision_with_context(sha1_git_root, sha1_git, limit=100): """Return information about revision sha1_git, limited to the sub-graph of all transitive parents of sha1_git_root. In other words, sha1_git is an ancestor of sha1_git_root. Args: sha1_git_root: latest revision. The type is either a sha1 (as an hex string) or a non converted dict. sha1_git: one of sha1_git_root's ancestors limit: limit the lookup to 100 revisions back Returns: Information on sha1_git if it is an ancestor of sha1_git_root including children leading to sha1_git_root Raises: BadInputExc in case of unknown algo_hash or bad hash NotFoundExc if either revision is not found or if sha1_git is not an ancestor of sha1_git_root """ sha1_git_bin = _to_sha1_bin(sha1_git) revision = _first_element(storage.revision_get([sha1_git_bin])) if not revision: raise NotFoundExc('Revision %s not found' % sha1_git) if isinstance(sha1_git_root, str): sha1_git_root_bin = _to_sha1_bin(sha1_git_root) revision_root = _first_element(storage.revision_get([sha1_git_root_bin])) # noqa if not revision_root: raise NotFoundExc('Revision root %s not found' % sha1_git_root) else: sha1_git_root_bin = sha1_git_root['id'] revision_log = storage.revision_log([sha1_git_root_bin], limit) parents = {} children = defaultdict(list) for rev in revision_log: rev_id = rev['id'] parents[rev_id] = [] for parent_id in rev['parents']: parents[rev_id].append(parent_id) children[parent_id].append(rev_id) if revision['id'] not in parents: raise NotFoundExc('Revision %s is not an ancestor of %s' % (sha1_git, sha1_git_root)) revision['children'] = children[revision['id']] return converters.from_revision(revision) def lookup_directory_with_revision(sha1_git, dir_path=None, with_data=False): """Return information on directory pointed by revision with sha1_git. If dir_path is not provided, display top level directory. Otherwise, display the directory pointed by dir_path (if it exists). Args: sha1_git: revision's hash. dir_path: optional directory pointed to by that revision. with_data: boolean that indicates to retrieve the raw data if the path resolves to a content. Default to False (for the api) Returns: Information on the directory pointed to by that revision. Raises: BadInputExc in case of unknown algo_hash or bad hash. NotFoundExc either if the revision is not found or the path referenced does not exist. NotImplementedError in case of dir_path exists but do not reference a type 'dir' or 'file'. """ sha1_git_bin = _to_sha1_bin(sha1_git) revision = _first_element(storage.revision_get([sha1_git_bin])) if not revision: raise NotFoundExc('Revision %s not found' % sha1_git) dir_sha1_git_bin = revision['directory'] if dir_path: paths = dir_path.strip(os.path.sep).split(os.path.sep) entity = storage.directory_entry_get_by_path( dir_sha1_git_bin, list(map(lambda p: p.encode('utf-8'), paths))) if not entity: raise NotFoundExc( "Directory or File '%s' pointed to by revision %s not found" % (dir_path, sha1_git)) else: entity = {'type': 'dir', 'target': dir_sha1_git_bin} if entity['type'] == 'dir': directory_entries = storage.directory_ls(entity['target']) or [] return {'type': 'dir', 'path': '.' if not dir_path else dir_path, 'revision': sha1_git, 'content': list(map(converters.from_directory_entry, directory_entries))} elif entity['type'] == 'file': # content content = storage.content_find({'sha1_git': entity['target']}) if with_data: c = _first_element(storage.content_get([content['sha1']])) content['data'] = c['data'] return {'type': 'file', 'path': '.' if not dir_path else dir_path, 'revision': sha1_git, 'content': converters.from_content(content)} elif entity['type'] == 'rev': # revision revision = next(storage.revision_get([entity['target']])) return {'type': 'rev', 'path': '.' if not dir_path else dir_path, 'revision': sha1_git, 'content': converters.from_revision(revision)} else: raise NotImplementedError('Entity of type %s not implemented.' % entity['type']) def lookup_content(q): """Lookup the content designed by q. Args: q: The release's sha1 as hexadecimal Raises: NotFoundExc if the requested content is not found """ algo, hash = query.parse_hash(q) c = storage.content_find({algo: hash}) if not c: raise NotFoundExc('Content with %s checksum equals to %s not found!' % (algo, hashutil.hash_to_hex(hash))) return converters.from_content(c) def lookup_content_raw(q): """Lookup the content defined by q. Args: q: query string of the form Returns: dict with 'sha1' and 'data' keys. data representing its raw data decoded. Raises: NotFoundExc if the requested content is not found or if the content bytes are not available in the storage """ c = lookup_content(q) content_sha1_bytes = hashutil.hash_to_bytes(c['checksums']['sha1']) content = _first_element(storage.content_get([content_sha1_bytes])) if not content: algo, hash = query.parse_hash(q) raise NotFoundExc('Bytes of content with %s checksum equals to %s ' 'are not available!' % (algo, hashutil.hash_to_hex(hash))) return converters.from_content(content) def stat_counters(): """Return the stat counters for Software Heritage Returns: A dict mapping textual labels to integer values. """ return storage.stat_counters() def _lookup_origin_visits(origin_id, last_visit=None, limit=10): """Yields the origin origin_ids' visits. Args: origin_id (int): origin to list visits for last_visit (int): last visit to lookup from limit (int): Number of elements max to display Yields: Dictionaries of origin_visit for that origin """ limit = min(limit, MAX_LIMIT) yield from storage.origin_visit_get( origin_id, last_visit=last_visit, limit=limit) def lookup_origin_visits(origin_id, last_visit=None, per_page=10): """Yields the origin origin_ids' visits. Args: origin_id: origin to list visits for Yields: Dictionaries of origin_visit for that origin """ lookup_origin({'id': origin_id}) visits = _lookup_origin_visits(origin_id, last_visit=last_visit, limit=per_page) for visit in visits: yield converters.from_origin_visit(visit) def lookup_origin_visit(origin_id, visit_id): """Return information about visit visit_id with origin origin_id. Args: origin_id: origin concerned by the visit visit_id: the visit identifier to lookup Yields: The dict origin_visit concerned """ visit = storage.origin_visit_get_by(origin_id, visit_id) if not visit: raise NotFoundExc('Origin with id %s or its visit ' 'with id %s not found!' % (origin_id, visit_id)) return converters.from_origin_visit(visit) def lookup_snapshot_size(snapshot_id): """Count the number of branches in the snapshot with the given id Args: snapshot_id (str): sha1 identifier of the snapshot Returns: dict: A dict whose keys are the target types of branches and values their corresponding amount """ snapshot_id_bin = _to_sha1_bin(snapshot_id) snapshot_size = storage.snapshot_count_branches(snapshot_id_bin) if 'revision' not in snapshot_size: snapshot_size['revision'] = 0 if 'release' not in snapshot_size: snapshot_size['release'] = 0 return snapshot_size def lookup_snapshot(snapshot_id, branches_from='', branches_count=1000, target_types=None): """Return information about a snapshot, aka the list of named branches found during a specific visit of an origin. Args: snapshot_id (str): sha1 identifier of the snapshot branches_from (str): optional parameter used to skip branches whose name is lesser than it before returning them branches_count (int): optional parameter used to restrain the amount of returned branches target_types (list): optional parameter used to filter the target types of branch to return (possible values that can be contained in that list are `'content', 'directory', 'revision', 'release', 'snapshot', 'alias'`) Returns: A dict filled with the snapshot content. """ snapshot_id_bin = _to_sha1_bin(snapshot_id) snapshot = storage.snapshot_get_branches(snapshot_id_bin, branches_from.encode(), branches_count, target_types) if not snapshot: raise NotFoundExc('Snapshot with id %s not found!' % snapshot_id) return converters.from_snapshot(snapshot) def lookup_latest_origin_snapshot(origin_id, allowed_statuses=None): """Return information about the latest snapshot of an origin. .. warning:: At most 1000 branches contained in the snapshot will be returned for performance reasons. Args: origin_id: integer identifier of the origin allowed_statuses: list of visit statuses considered to find the latest snapshot for the visit. For instance, ``allowed_statuses=['full']`` will only consider visits that have successfully run to completion. Returns: A dict filled with the snapshot content. """ snapshot = storage.snapshot_get_latest(origin_id, allowed_statuses) return converters.from_snapshot(snapshot) def lookup_revision_through(revision, limit=100): """Retrieve a revision from the criterion stored in revision dictionary. Args: revision: Dictionary of criterion to lookup the revision with. Here are the supported combination of possible values: - origin_id, branch_name, ts, sha1_git - origin_id, branch_name, ts - sha1_git_root, sha1_git - sha1_git Returns: None if the revision is not found or the actual revision. """ if 'origin_id' in revision and \ 'branch_name' in revision and \ 'ts' in revision and \ 'sha1_git' in revision: return lookup_revision_with_context_by(revision['origin_id'], revision['branch_name'], revision['ts'], revision['sha1_git'], limit) if 'origin_id' in revision and \ 'branch_name' in revision and \ 'ts' in revision: return lookup_revision_by(revision['origin_id'], revision['branch_name'], revision['ts']) if 'sha1_git_root' in revision and \ 'sha1_git' in revision: return lookup_revision_with_context(revision['sha1_git_root'], revision['sha1_git'], limit) if 'sha1_git' in revision: return lookup_revision(revision['sha1_git']) # this should not happen raise NotImplementedError('Should not happen!') def lookup_directory_through_revision(revision, path=None, limit=100, with_data=False): """Retrieve the directory information from the revision. Args: revision: dictionary of criterion representing a revision to lookup path: directory's path to lookup. limit: optional query parameter to limit the revisions log (default to 100). For now, note that this limit could impede the transitivity conclusion about sha1_git not being an ancestor of. with_data: indicate to retrieve the content's raw data if path resolves to a content. Returns: The directory pointing to by the revision criterions at path. """ rev = lookup_revision_through(revision, limit) if not rev: raise NotFoundExc('Revision with criterion %s not found!' % revision) return (rev['id'], lookup_directory_with_revision(rev['id'], path, with_data)) def vault_cook(obj_type, obj_id, email=None): """Cook a vault bundle. """ return vault.cook(obj_type, obj_id, email=email) def vault_fetch(obj_type, obj_id): """Fetch a vault bundle. """ return vault.fetch(obj_type, obj_id) def vault_progress(obj_type, obj_id): """Get the current progress of a vault bundle. """ return vault.progress(obj_type, obj_id) def diff_revision(rev_id): """Get the list of file changes (insertion / deletion / modification / renaming) for a particular revision. """ rev_sha1_git_bin = _to_sha1_bin(rev_id) changes = storage.diff_revision(rev_sha1_git_bin, track_renaming=True) for change in changes: change['from'] = converters.from_directory_entry(change['from']) change['to'] = converters.from_directory_entry(change['to']) if change['from_path']: change['from_path'] = change['from_path'].decode('utf-8') if change['to_path']: change['to_path'] = change['to_path'].decode('utf-8') return changes class _RevisionsWalkerProxy(object): """ Proxy class wrapping a revisions walker iterator from swh-storage and performing needed conversions. """ def __init__(self, rev_walker_type, rev_start, *args, **kwargs): rev_start_bin = hashutil.hash_to_bytes(rev_start) self.revisions_walker = \ revisions_walker.get_revisions_walker(rev_walker_type, storage, rev_start_bin, *args, **kwargs) def export_state(self): return self.revisions_walker.export_state() def __next__(self): return converters.from_revision(next(self.revisions_walker)) def __iter__(self): return self def get_revisions_walker(rev_walker_type, rev_start, *args, **kwargs): """ Utility function to instantiate a revisions walker of a given type, see :mod:`swh.storage.algos.revisions_walker`. Args: rev_walker_type (str): the type of revisions walker to return, possible values are: ``committer_date``, ``dfs``, ``dfs_post``, ``bfs`` and ``path`` rev_start (str): hexadecimal representation of a revision identifier args (list): position arguments to pass to the revisions walker constructor kwargs (dict): keyword arguments to pass to the revisions walker constructor """ # first check if the provided revision is valid lookup_revision(rev_start) return _RevisionsWalkerProxy(rev_walker_type, rev_start, *args, **kwargs) diff --git a/swh/web/static/css/browse.0155e1c4ec3c61116485.css b/swh/web/static/css/browse.d42fd2a4ef72b319809e.css similarity index 99% rename from swh/web/static/css/browse.0155e1c4ec3c61116485.css rename to swh/web/static/css/browse.d42fd2a4ef72b319809e.css index c44698e2..fe12f733 100644 --- a/swh/web/static/css/browse.0155e1c4ec3c61116485.css +++ b/swh/web/static/css/browse.d42fd2a4ef72b319809e.css @@ -1,2 +1,2 @@ .swh-browse-nav li a{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.scrollable-menu{max-height:180px;overflow-x:hidden}.swh-corner-ribbon{width:200px;background:#fecd1b;color:#e20026;position:absolute;text-align:center;line-height:50px;letter-spacing:1px;-webkit-box-shadow:0 0 3px rgba(0,0,0,.3);-moz-box-shadow:0 0 3px rgba(0,0,0,.3);box-shadow:0 0 3px rgba(0,0,0,.3);top:55px;right:-50px;left:auto;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg);z-index:2000}.swh-loading{display:none;text-align:center;margin-top:10px}.swh-loading.show{display:block}.swh-metadata-table-row{border-top:1px solid #ddd!important}.swh-metadata-table-key{min-width:200px;max-width:200px;width:200px}.swh-metadata-table-value pre{white-space:pre-wrap}.swh-table-cell-text-overflow{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.swh-directory-table{margin-bottom:0}.swh-directory-table td{border-top:1px solid #ddd!important}.swh-title-color{color:#e20026}.swh-log-entry-message{min-width:440px;max-width:440px;width:440px}.swh-popover{max-height:50vh;max-width:80vw;overflow-y:auto;overflow-x:auto;padding:0 1.4em 0 0}.swh-search-pagination{margin-top:5px}.ui-slideouttab-panel{z-index:30000}#swh-identifiers{width:70vw;top:0;border:1px solid #e20026}#swh-identifiers .handle{background-color:#e20026;border:1px solid #e20026;color:#fff;padding-top:.1em;padding-bottom:.1em}#swh-identifiers-content{height:100%;overflow:auto}.swh-empty-snapshot{white-space:pre-line}td.swh-branch-name{max-width:300px}td.swh-branch-message{min-width:500px;max-width:500px}td.swh-branch-date{min-width:250px}td.swh-branch-date a,td.swh-branch-message a,td.swh-branch-name a,td.swh-release-date a,td.swh-release-message a,td.swh-release-name a,tr.swh-directory-entry a,tr.swh-search-result-entry a{text-decoration:none}.swh-browse-bread-crumbs{font-size:inherit;vertical-align:text-top;margin-bottom:1px}.swh-browse-bread-crumbs li:nth-child(n+2):before{content:"";display:inline-block;margin:0 2px}.swh-content{background-image:none;background-color:#fff;padding:0}.swh-content pre,.swh-content pre code{margin:0;padding:0}.swh-browse-top-navigation{min-height:43px;padding:4px 5px 0}.swh-branches-releases{min-width:200px}.swh-branches-switch,.swh-releases-switch{padding:5px 15px!important}li.swh-branch:hover,li.swh-release:hover{background-color:#e8e8e8}.nav a,.swh-branch a,.swh-release a{outline:none}.swh-branch a:hover,.swh-release a:hover{text-decoration:none}.swh-origin-visit-details,.swh-snapshot-details{text-align:center}.swh-origin-visit-details ul,.swh-snapshot-details ul{list-style:none;margin:0;padding:0}.swh-origin-visit-details li,.swh-snapshot-details li{display:inline-block;vertical-align:middle;margin-left:10px;margin-right:10px}.ui-slideouttab-handle,.ui-slideouttab-panel{background-color:#fff;padding:.4em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.ui-slideouttab-panel{display:block;position:fixed;border:2px solid grey}.ui-slideouttab-ready{-webkit-transition:-webkit-transform .5s ease 0s;transition:-webkit-transform .5s ease 0s;-o-transition:-o-transform .5s ease 0s;-moz-transition:transform .5s ease 0s,-moz-transform .5s ease 0s;transition:transform .5s ease 0s;transition:transform .5s ease 0s,-webkit-transform .5s ease 0s,-moz-transform .5s ease 0s,-o-transform .5s ease 0s}@media print{.ui-slideouttab-panel{display:none}}.ui-slideouttab-handle{display:block;position:absolute;cursor:pointer;color:#fff;background-color:grey}.ui-slideouttab-handle-image{-webkit-transform:rotate(0);-moz-transform:rotate(0);-o-transform:rotate(0);transform:rotate(0)}.ui-slideouttab-right{right:0;-webkit-transform:translateX(100%);-moz-transform:translateX(100%);-o-transform:translateX(100%);transform:translateX(100%);border-right:none}.ui-slideouttab-right.ui-slideouttab-open{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.ui-slideouttab-right .ui-slideouttab-handle{-webkit-transform-origin:0 0;-moz-transform-origin:0 0;-o-transform-origin:0 0;transform-origin:0 0;-webkit-transform:rotate(-90deg) translate(-100%,-100%);-moz-transform:rotate(-90deg) translate(-100%,-100%);-o-transform:rotate(-90deg) translate(-100%,-100%);transform:rotate(-90deg) translate(-100%,-100%)}.ui-slideouttab-right .ui-slideouttab-handle-reverse{-webkit-transform-origin:0 100%;-moz-transform-origin:0 100%;-o-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.ui-slideouttab-left{left:0;-webkit-transform:translateX(-100%);-moz-transform:translateX(-100%);-o-transform:translateX(-100%);transform:translateX(-100%);border-left:none}.ui-slideouttab-left.ui-slideouttab-open{-webkit-transform:translateX(0);-moz-transform:translateX(0);-o-transform:translateX(0);transform:translateX(0)}.ui-slideouttab-left .ui-slideouttab-handle{-webkit-transform-origin:100% 0;-moz-transform-origin:100% 0;-o-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.ui-slideouttab-left .ui-slideouttab-handle-reverse{-webkit-transform-origin:100% 100%;-moz-transform-origin:100% 100%;-o-transform-origin:100% 100%;transform-origin:100% 100%;-webkit-transform:rotate(-90deg) translate(100%,100%);-moz-transform:rotate(-90deg) translate(100%,100%);-o-transform:rotate(-90deg) translate(100%,100%);transform:rotate(-90deg) translate(100%,100%)}.ui-slideouttab-top{top:0;-webkit-transform:translateY(-100%);-moz-transform:translateY(-100%);-o-transform:translateY(-100%);transform:translateY(-100%);border-top:none}.ui-slideouttab-top.ui-slideouttab-open{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.ui-slideouttab-bottom{bottom:0;-webkit-transform:translateY(100%);-moz-transform:translateY(100%);-o-transform:translateY(100%);transform:translateY(100%);border-bottom:none}.ui-slideouttab-bottom.ui-slideouttab-open{-webkit-transform:translateY(0);-moz-transform:translateY(0);-o-transform:translateY(0);transform:translateY(0)}.ui-slideouttab-left .ui-slideouttab-handle>.fa-icon,.ui-slideouttab-right .ui-slideouttab-handle>.fa-icon{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.ui-slideouttab-handle>.fa-icon{margin-left:.5em}.ui-slideouttab-left .ui-slideouttab-handle-rounded,.ui-slideouttab-top .ui-slideouttab-handle-rounded{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.ui-slideouttab-bottom .ui-slideouttab-handle-rounded,.ui-slideouttab-right .ui-slideouttab-handle-rounded{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0} -/*# sourceMappingURL=browse.0155e1c4ec3c61116485.css.map */ \ No newline at end of file +/*# sourceMappingURL=browse.d42fd2a4ef72b319809e.css.map */ \ No newline at end of file diff --git a/swh/web/static/css/browse.0155e1c4ec3c61116485.css.map b/swh/web/static/css/browse.d42fd2a4ef72b319809e.css.map similarity index 98% rename from swh/web/static/css/browse.0155e1c4ec3c61116485.css.map rename to swh/web/static/css/browse.d42fd2a4ef72b319809e.css.map index 1a4a411b..57c72f96 100644 --- a/swh/web/static/css/browse.0155e1c4ec3c61116485.css.map +++ b/swh/web/static/css/browse.d42fd2a4ef72b319809e.css.map @@ -1 +1 @@ -{"version":3,"sources":["browse.css","breadcrumbs.css","content.css","snapshot-navigation.css","jquery.tabSlideOut.css"],"names":[],"mappings":"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","file":"browse.0155e1c4ec3c61116485.css","sourcesContent":["/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-browse-nav li a {\n border-radius: 4px;\n}\n\n.scrollable-menu {\n max-height: 180px;\n overflow-x: hidden;\n}\n\n.swh-corner-ribbon {\n width: 200px;\n background: #fecd1b;\n color: #e20026;\n position: absolute;\n text-align: center;\n line-height: 50px;\n letter-spacing: 1px;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);\n top: 55px;\n right: -50px;\n left: auto;\n transform: rotate(45deg);\n z-index: 2000;\n}\n\n.swh-loading {\n display: none;\n text-align: center;\n margin-top: 10px;\n}\n\n.swh-loading.show {\n display: block;\n}\n\n.swh-metadata-table-row {\n border-top: 1px solid #ddd !important;\n}\n\n.swh-metadata-table-key {\n min-width: 200px;\n max-width: 200px;\n width: 200px;\n}\n\n.swh-metadata-table-value pre {\n white-space: pre-wrap;\n}\n\n.swh-table-cell-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.swh-directory-table {\n margin-bottom: 0;\n}\n\n.swh-directory-table td {\n border-top: 1px solid #ddd !important;\n}\n\n.swh-title-color {\n color: #e20026;\n}\n\n.swh-log-entry-message {\n min-width: 440px;\n max-width: 440px;\n width: 440px;\n}\n\n.swh-popover {\n max-height: 50vh;\n max-width: 80vw;\n overflow-y: auto;\n overflow-x: auto;\n padding: 0;\n padding-right: 1.4em;\n}\n\n.swh-search-pagination {\n margin-top: 5px;\n}\n\n.ui-slideouttab-panel {\n z-index: 30000;\n}\n\n#swh-identifiers {\n width: 70vw;\n top: 0;\n border: 1px solid #e20026;\n}\n\n#swh-identifiers .handle {\n background-color: #e20026;\n border: 1px solid #e20026;\n color: white;\n padding-top: 0.1em;\n padding-bottom: 0.1em;\n}\n\n#swh-identifiers-content {\n height: 100%;\n overflow: auto;\n}\n\n.swh-empty-snapshot {\n white-space: pre-line;\n}\n\ntd.swh-branch-name {\n max-width: 300px;\n}\n\ntd.swh-branch-message {\n min-width: 500px;\n max-width: 500px;\n}\n\ntd.swh-branch-date {\n min-width: 250px;\n}\n\ntd.swh-branch-name a,\ntd.swh-branch-message a,\ntd.swh-branch-date a {\n text-decoration: none;\n}\n\ntd.swh-release-name a,\ntd.swh-release-message a,\ntd.swh-release-date a {\n text-decoration: none;\n}\n\ntr.swh-directory-entry a,\ntr.swh-search-result-entry a {\n text-decoration: none;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-browse-bread-crumbs {\n font-size: inherit;\n vertical-align: text-top;\n margin-bottom: 1px;\n}\n\n.swh-browse-bread-crumbs li:nth-child(n+2)::before {\n content: \"\";\n display: inline-block;\n margin: 0 2px;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-content {\n background-image: none;\n background-color: white;\n padding: 0;\n}\n\n.swh-content pre,\n.swh-content pre code {\n margin: 0;\n padding: 0;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-browse-top-navigation {\n min-height: 43px;\n padding: 4px 5px 0 5px;\n}\n\n.swh-branches-releases {\n min-width: 200px;\n}\n\n.swh-branches-switch,\n.swh-releases-switch {\n padding: 5px 15px !important;\n}\n\nli.swh-branch:hover,\nli.swh-release:hover {\n background-color: #e8e8e8;\n}\n\n.nav a,\n.swh-branch a,\n.swh-release a {\n outline: none;\n}\n\n.swh-branch a:hover,\n.swh-release a:hover {\n text-decoration: none;\n}\n\n.swh-origin-visit-details,\n.swh-snapshot-details {\n text-align: center;\n}\n\n.swh-origin-visit-details ul,\n.swh-snapshot-details ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.swh-origin-visit-details li,\n.swh-snapshot-details li {\n display: inline-block;\n vertical-align: middle;\n margin-left: 10px;\n margin-right: 10px;\n}\n","/*\n tabSlideOUt v2.4\n\n By Michael Fielding\n License: GPL v3.0\n*/\n\n.ui-slideouttab-panel,\n.ui-slideouttab-handle {\n background-color: white;\n padding: 0.4em;\n box-sizing: border-box;\n}\n\n.ui-slideouttab-panel {\n display: block;\n position: fixed;\n border: 2px solid grey;\n}\n\n/* This class is added after the tabs are initialised, otherwise the user sees the\n tabs slide out of the way when the page is initialised. */\n.ui-slideouttab-ready {\n transition: transform 0.5s ease 0s;\n}\n\n/* Hide tabs and panels when printed. */\n@media print {\n .ui-slideouttab-panel {\n display: none;\n }\n}\n\n/* Tab handles */\n.ui-slideouttab-handle {\n display: block;\n position: absolute;\n cursor: pointer;\n color: white;\n background-color: grey;\n}\n\n.ui-slideouttab-handle-image {\n transform: rotate(0);\n}\n\n/* Right */\n.ui-slideouttab-right {\n right: 0;\n transform: translateX(100%);\n border-right: none;\n}\n\n.ui-slideouttab-right.ui-slideouttab-open {\n transform: translateX(0%);\n}\n\n.ui-slideouttab-right .ui-slideouttab-handle {\n transform-origin: 0% 0%;\n transform: rotate(-90deg) translate(-100%, -100%);\n}\n\n.ui-slideouttab-right .ui-slideouttab-handle-reverse {\n transform-origin: 0% 100%;\n transform: rotate(-90deg);\n}\n\n/* Left */\n.ui-slideouttab-left {\n left: 0;\n transform: translateX(-100%);\n border-left: none;\n}\n\n.ui-slideouttab-left.ui-slideouttab-open {\n transform: translateX(0%);\n}\n\n.ui-slideouttab-left .ui-slideouttab-handle {\n transform-origin: 100% 0%;\n transform: rotate(-90deg);\n}\n\n.ui-slideouttab-left .ui-slideouttab-handle-reverse {\n transform-origin: 100% 100%;\n transform: rotate(-90deg) translate(100%, 100%);\n}\n\n/* Top */\n.ui-slideouttab-top {\n top: 0;\n transform: translateY(-100%);\n border-top: none;\n}\n\n.ui-slideouttab-top.ui-slideouttab-open {\n transform: translateY(0%);\n}\n\n/* Bottom */\n.ui-slideouttab-bottom {\n bottom: 0;\n transform: translateY(100%);\n border-bottom: none;\n}\n\n.ui-slideouttab-bottom.ui-slideouttab-open {\n transform: translateY(0%);\n}\n\n/* turn font awesome icon in a tab upright */\n.ui-slideouttab-left .ui-slideouttab-handle > .fa-icon,\n.ui-slideouttab-right .ui-slideouttab-handle > .fa-icon {\n transform: rotate(90deg);\n}\n\n.ui-slideouttab-handle > .fa-icon {\n margin-left: 0.5em;\n}\n\n/* apply rounded corners if handle has the -rounded class */\n.ui-slideouttab-top .ui-slideouttab-handle-rounded,\n.ui-slideouttab-left .ui-slideouttab-handle-rounded {\n border-radius: 0 0 4px 4px;\n}\n\n.ui-slideouttab-right .ui-slideouttab-handle-rounded,\n.ui-slideouttab-bottom .ui-slideouttab-handle-rounded {\n border-radius: 4px 4px 0 0;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["browse.css","breadcrumbs.css","content.css","snapshot-navigation.css","jquery.tabSlideOut.css"],"names":[],"mappings":"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","file":"browse.d42fd2a4ef72b319809e.css","sourcesContent":["/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-browse-nav li a {\n border-radius: 4px;\n}\n\n.scrollable-menu {\n max-height: 180px;\n overflow-x: hidden;\n}\n\n.swh-corner-ribbon {\n width: 200px;\n background: #fecd1b;\n color: #e20026;\n position: absolute;\n text-align: center;\n line-height: 50px;\n letter-spacing: 1px;\n box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);\n top: 55px;\n right: -50px;\n left: auto;\n transform: rotate(45deg);\n z-index: 2000;\n}\n\n.swh-loading {\n display: none;\n text-align: center;\n margin-top: 10px;\n}\n\n.swh-loading.show {\n display: block;\n}\n\n.swh-metadata-table-row {\n border-top: 1px solid #ddd !important;\n}\n\n.swh-metadata-table-key {\n min-width: 200px;\n max-width: 200px;\n width: 200px;\n}\n\n.swh-metadata-table-value pre {\n white-space: pre-wrap;\n}\n\n.swh-table-cell-text-overflow {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.swh-directory-table {\n margin-bottom: 0;\n}\n\n.swh-directory-table td {\n border-top: 1px solid #ddd !important;\n}\n\n.swh-title-color {\n color: #e20026;\n}\n\n.swh-log-entry-message {\n min-width: 440px;\n max-width: 440px;\n width: 440px;\n}\n\n.swh-popover {\n max-height: 50vh;\n max-width: 80vw;\n overflow-y: auto;\n overflow-x: auto;\n padding: 0;\n padding-right: 1.4em;\n}\n\n.swh-search-pagination {\n margin-top: 5px;\n}\n\n.ui-slideouttab-panel {\n z-index: 30000;\n}\n\n#swh-identifiers {\n width: 70vw;\n top: 0;\n border: 1px solid #e20026;\n}\n\n#swh-identifiers .handle {\n background-color: #e20026;\n border: 1px solid #e20026;\n color: white;\n padding-top: 0.1em;\n padding-bottom: 0.1em;\n}\n\n#swh-identifiers-content {\n height: 100%;\n overflow: auto;\n}\n\n.swh-empty-snapshot {\n white-space: pre-line;\n}\n\ntd.swh-branch-name {\n max-width: 300px;\n}\n\ntd.swh-branch-message {\n min-width: 500px;\n max-width: 500px;\n}\n\ntd.swh-branch-date {\n min-width: 250px;\n}\n\ntd.swh-branch-name a,\ntd.swh-branch-message a,\ntd.swh-branch-date a {\n text-decoration: none;\n}\n\ntd.swh-release-name a,\ntd.swh-release-message a,\ntd.swh-release-date a {\n text-decoration: none;\n}\n\ntr.swh-directory-entry a,\ntr.swh-search-result-entry a {\n text-decoration: none;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-browse-bread-crumbs {\n font-size: inherit;\n vertical-align: text-top;\n margin-bottom: 1px;\n}\n\n.swh-browse-bread-crumbs li:nth-child(n+2)::before {\n content: \"\";\n display: inline-block;\n margin: 0 2px;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-content {\n background-image: none;\n background-color: white;\n padding: 0;\n}\n\n.swh-content pre,\n.swh-content pre code {\n margin: 0;\n padding: 0;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.swh-browse-top-navigation {\n min-height: 43px;\n padding: 4px 5px 0 5px;\n}\n\n.swh-branches-releases {\n min-width: 200px;\n}\n\n.swh-branches-switch,\n.swh-releases-switch {\n padding: 5px 15px !important;\n}\n\nli.swh-branch:hover,\nli.swh-release:hover {\n background-color: #e8e8e8;\n}\n\n.nav a,\n.swh-branch a,\n.swh-release a {\n outline: none;\n}\n\n.swh-branch a:hover,\n.swh-release a:hover {\n text-decoration: none;\n}\n\n.swh-origin-visit-details,\n.swh-snapshot-details {\n text-align: center;\n}\n\n.swh-origin-visit-details ul,\n.swh-snapshot-details ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.swh-origin-visit-details li,\n.swh-snapshot-details li {\n display: inline-block;\n vertical-align: middle;\n margin-left: 10px;\n margin-right: 10px;\n}\n","/*\n tabSlideOUt v2.4\n\n By Michael Fielding\n License: GPL v3.0\n*/\n\n.ui-slideouttab-panel,\n.ui-slideouttab-handle {\n background-color: white;\n padding: 0.4em;\n box-sizing: border-box;\n}\n\n.ui-slideouttab-panel {\n display: block;\n position: fixed;\n border: 2px solid grey;\n}\n\n/* This class is added after the tabs are initialised, otherwise the user sees the\n tabs slide out of the way when the page is initialised. */\n.ui-slideouttab-ready {\n transition: transform 0.5s ease 0s;\n}\n\n/* Hide tabs and panels when printed. */\n@media print {\n .ui-slideouttab-panel {\n display: none;\n }\n}\n\n/* Tab handles */\n.ui-slideouttab-handle {\n display: block;\n position: absolute;\n cursor: pointer;\n color: white;\n background-color: grey;\n}\n\n.ui-slideouttab-handle-image {\n transform: rotate(0);\n}\n\n/* Right */\n.ui-slideouttab-right {\n right: 0;\n transform: translateX(100%);\n border-right: none;\n}\n\n.ui-slideouttab-right.ui-slideouttab-open {\n transform: translateX(0%);\n}\n\n.ui-slideouttab-right .ui-slideouttab-handle {\n transform-origin: 0% 0%;\n transform: rotate(-90deg) translate(-100%, -100%);\n}\n\n.ui-slideouttab-right .ui-slideouttab-handle-reverse {\n transform-origin: 0% 100%;\n transform: rotate(-90deg);\n}\n\n/* Left */\n.ui-slideouttab-left {\n left: 0;\n transform: translateX(-100%);\n border-left: none;\n}\n\n.ui-slideouttab-left.ui-slideouttab-open {\n transform: translateX(0%);\n}\n\n.ui-slideouttab-left .ui-slideouttab-handle {\n transform-origin: 100% 0%;\n transform: rotate(-90deg);\n}\n\n.ui-slideouttab-left .ui-slideouttab-handle-reverse {\n transform-origin: 100% 100%;\n transform: rotate(-90deg) translate(100%, 100%);\n}\n\n/* Top */\n.ui-slideouttab-top {\n top: 0;\n transform: translateY(-100%);\n border-top: none;\n}\n\n.ui-slideouttab-top.ui-slideouttab-open {\n transform: translateY(0%);\n}\n\n/* Bottom */\n.ui-slideouttab-bottom {\n bottom: 0;\n transform: translateY(100%);\n border-bottom: none;\n}\n\n.ui-slideouttab-bottom.ui-slideouttab-open {\n transform: translateY(0%);\n}\n\n/* turn font awesome icon in a tab upright */\n.ui-slideouttab-left .ui-slideouttab-handle > .fa-icon,\n.ui-slideouttab-right .ui-slideouttab-handle > .fa-icon {\n transform: rotate(90deg);\n}\n\n.ui-slideouttab-handle > .fa-icon {\n margin-left: 0.5em;\n}\n\n/* apply rounded corners if handle has the -rounded class */\n.ui-slideouttab-top .ui-slideouttab-handle-rounded,\n.ui-slideouttab-left .ui-slideouttab-handle-rounded {\n border-radius: 0 0 4px 4px;\n}\n\n.ui-slideouttab-right .ui-slideouttab-handle-rounded,\n.ui-slideouttab-bottom .ui-slideouttab-handle-rounded {\n border-radius: 4px 4px 0 0;\n}\n"]} \ No newline at end of file diff --git a/swh/web/static/css/webapp.773849227335c2943634.css b/swh/web/static/css/webapp.2a1b3e79ae4151309979.css similarity index 99% rename from swh/web/static/css/webapp.773849227335c2943634.css rename to swh/web/static/css/webapp.2a1b3e79ae4151309979.css index 941f4db2..235629b8 100644 --- a/swh/web/static/css/webapp.773849227335c2943634.css +++ b/swh/web/static/css/webapp.2a1b3e79ae4151309979.css @@ -1,2 +1,2 @@ html{height:100%;overflow-x:hidden}body{min-height:100%;margin:0;position:relative;padding-bottom:120px}a{border-bottom-style:none;outline:none}code{background-color:#f9f2f4}pre code{background-color:transparent}footer{background-color:#262626;color:#fff;font-size:.8rem;position:absolute;bottom:0;width:100%;padding-top:20px;padding-bottom:20px}footer a,footer a:visited{color:#fecd1b}footer a:hover{text-decoration:underline}.link-color{color:#fecd1b}pre{background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:9.5px;font-size:.8rem}.btn.active{background-color:#e7e7e7}.card{margin-bottom:5px!important;overflow-x:auto}.navbar-brand{padding:5px;margin-right:0}.table{margin-bottom:0}.swh-table thead{background-color:#f2f4f5;border-top:1px solid rgba(0,0,0,.2);font-weight:400}.swh-table-striped th{border-top:none}.swh-table-striped tbody tr:nth-child(2n){background-color:#f2f4f5}.swh-table-striped tbody tr:nth-child(odd){background-color:#fff}.swh-web-app-link a{text-decoration:none;outline:none;border:none}.swh-web-app-link:hover{background-color:#efeff2}.table>thead>tr>th{border-top:none;border-bottom:1px solid #e20026}.table>tbody>tr>td{border-style:none}.sitename .first-word,.sitename .second-word{color:rgba(0,0,0,.75);font-weight:400;font-size:1.2rem}.sitename .first-word{font-family:Alegreya Sans,sans-serif}.sitename .second-word{font-family:Alegreya,serif}.swh-counter{font-size:150%}.swh-http-error{margin:0 auto;text-align:center}.swh-http-error-head{color:#2d353c;font-size:30px}.swh-http-error-code{bottom:60%;color:#2d353c;font-size:96px;line-height:80px;margin-bottom:10px!important}.swh-http-error-desc{font-size:12px;color:#647788;text-align:center}.swh-http-error-desc pre{display:inline-block;text-align:left;max-width:800px;white-space:pre-wrap}.popover{max-width:100%;z-index:2000}.modal{text-align:center;padding:0!important}.modal:before{content:"";height:100%;margin-right:-4px}.modal-dialog,.modal:before{display:inline-block;vertical-align:middle}.modal-dialog{text-align:left}.dropdown-submenu{position:relative}.dropdown-submenu .dropdown-menu{top:0;left:-100%;margin-top:-5px;margin-left:-2px}.dropdown-item:focus,.dropdown-item:hover{background-color:rgba(0,0,0,.1)}a.dropdown-left:before{content:"\f0d9";font-family:FontAwesome;display:block;width:20px;height:20px;float:left;margin-left:0}#swh-navbar{border-style:none none solid;border-bottom-width:5px;-webkit-border-image:-webkit-gradient(linear,left top,right top,from(#e20026),to(#fecd1b)) 1 1 1 1;-webkit-border-image:-webkit-linear-gradient(left,#e20026,#fecd1b) 1 1 1 1;-moz-border-image:-moz-linear-gradient(left,#e20026 0,#fecd1b 100%) 1 1 1 1;-o-border-image:-o-linear-gradient(left,#e20026 0,#fecd1b 100%) 1 1 1 1;border-image:-webkit-gradient(linear,left top,right top,from(#e20026),to(#fecd1b)) 1 1 1 1;border-image:linear-gradient(90deg,#e20026 0,#fecd1b) 1 1 1 1;width:100%;padding:5px;margin-bottom:10px;margin-top:30px;-webkit-box-pack:normal;-webkit-justify-content:normal;-moz-box-pack:normal;justify-content:normal;-webkit-flex-wrap:nowrap;flex-wrap:nowrap;height:72px;overflow:hidden}#back-to-top{display:initial;position:fixed;bottom:30px;right:30px;z-index:10}#back-to-top a img{display:block;width:32px;height:32px;-webkit-background-size:32px 32px;-moz-background-size:32px 32px;background-size:32px 32px;text-indent:-999px;overflow:hidden}.swh-top-bar{direction:ltr;height:30px;position:fixed;top:0;left:0;width:100%;z-index:99999;background-color:#262626;color:#fff;text-align:center;font-size:14px}.swh-top-bar ul{margin-top:4px;padding-left:0;white-space:nowrap}.swh-top-bar li{display:inline-block;margin-left:10px;margin-right:10px}.swh-top-bar a,.swh-top-bar a:visited{color:#fff}.swh-top-bar a.swh-current-site,.swh-top-bar a.swh-current-site:visited{color:#fecd1b}.swh-position-right{position:absolute;right:0}.swh-donate-link{border:1px solid #fecd1b;background-color:#e20026;color:#fff!important;padding:3px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.swh-navbar-content h4{padding-top:7px}.swh-navbar-content .bread-crumbs{display:block;margin-left:-40px}.swh-navbar-content .bread-crumbs li.bc-no-root{padding-top:7px}.main-sidebar{margin-top:30px}.content-wrapper{background:none}.brand-image{max-height:40px}.brand-link{padding-top:18.5px;padding-bottom:18px;padding-left:4px;border-bottom:5px solid #e20026!important}.navbar-header a,ul.dropdown-menu a,ul.nav-sidebar a,ul.navbar-nav a{border-bottom-style:none;color:#323232}.swh-sidebar .nav-link.active{color:#323232!important;background-color:#e7e7e7!important}.swh-image-error{width:80px;height:auto}@media (max-width:600px){.swh-image-error{width:40px;height:auto}.swh-navbar-content h4{font-size:1rem}}.form-check-label{padding-top:4px}.swh-id-option{display:inline-block;margin-right:5px}.nav-pills .nav-link:not(.active):hover{color:rgba(0,0,0,.55)}.swh-heading-color{color:#e20026!important}.sidebar-mini.sidebar-collapse .main-sidebar:hover{width:4.6rem}.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text,.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel>.info{visibility:hidden!important}.main-sidebar .brand-text,.sidebar .nav-link p,.sidebar .user-panel .info{-webkit-transition:none;-o-transition:none;-moz-transition:none;transition:none}.sidebar-mini.sidebar-mini.sidebar-collapse .sidebar{padding-right:0}.swh-words-logo{position:absolute;top:0;left:0;width:73px;height:73px;text-align:center;font-size:10pt;color:rgba(0,0,0,.75)}.swh-words-logo:hover{text-decoration:none}.swh-words-logo-swh{line-height:1;padding-top:13px;visibility:hidden}hr.swh-faded-line{border:0;height:1px;background-image:-webkit-gradient(linear,right top,left top,from(#f0f0f0),color-stop(#8c8b8b),to(#f0f0f0));background-image:-webkit-linear-gradient(right,#f0f0f0,#8c8b8b,#f0f0f0);background-image:-moz-linear-gradient(right,#f0f0f0,#8c8b8b,#f0f0f0);background-image:-o-linear-gradient(right,#f0f0f0,#8c8b8b,#f0f0f0);background-image:linear-gradient(270deg,#f0f0f0,#8c8b8b,#f0f0f0)}.swh-readme-txt pre{background:none;border:none}.swh-coverage-col{padding-left:10px;padding-right:10px}.swh-coverage{height:-webkit-calc(65px + 1em);height:-moz-calc(65px + 1em);height:calc(65px + 1em);padding-top:.3rem;border:none}.swh-coverage a{text-decoration:none}.swh-coverage-logo{display:block;width:100%;height:50px;margin-left:auto;margin-right:auto;-o-object-fit:contain;object-fit:contain;font-family:"object-fit: contain;"}.swh-coverage-list{width:100%;height:320px;border:none}tr.swh-tr-hover-highlight{cursor:pointer}tr.swh-tr-hover-highlight:hover td{background:#ededed}tr.swh-api-doc-route a{text-decoration:none}.bread-crumbs{display:inline-block;overflow:hidden;color:rgba(0,0,0,.55)}.bread-crumbs ul{list-style-type:none;height:100%}.bread-crumbs li{float:left;list-style-type:none}.bread-crumbs a{color:rgba(0,0,0,.75);border-bottom-style:none}.bread-crumbs a:hover{color:rgba(0,0,0,.85);text-decoration:underline} -/*# sourceMappingURL=webapp.773849227335c2943634.css.map */ \ No newline at end of file +/*# sourceMappingURL=webapp.2a1b3e79ae4151309979.css.map */ \ No newline at end of file diff --git a/swh/web/static/css/webapp.773849227335c2943634.css.map b/swh/web/static/css/webapp.2a1b3e79ae4151309979.css.map similarity index 99% rename from swh/web/static/css/webapp.773849227335c2943634.css.map rename to swh/web/static/css/webapp.2a1b3e79ae4151309979.css.map index b9cd29b9..536bc617 100644 --- a/swh/web/static/css/webapp.773849227335c2943634.css.map +++ b/swh/web/static/css/webapp.2a1b3e79ae4151309979.css.map @@ -1 +1 @@ -{"version":3,"sources":["webapp.css","breadcrumbs.css"],"names":[],"mappings":"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","file":"webapp.773849227335c2943634.css","sourcesContent":["/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nhtml {\n height: 100%;\n overflow-x: hidden;\n}\n\nbody {\n min-height: 100%;\n margin: 0;\n position: relative;\n padding-bottom: 120px;\n}\n\na {\n border-bottom-style: none;\n outline: none;\n}\n\ncode {\n background-color: #f9f2f4;\n}\n\npre code {\n background-color: transparent;\n}\n\nfooter {\n background-color: #262626;\n color: #fff;\n font-size: 0.8rem;\n position: absolute;\n bottom: 0;\n width: 100%;\n padding-top: 20px;\n padding-bottom: 20px;\n}\n\nfooter a,\nfooter a:visited {\n color: #fecd1b;\n}\n\nfooter a:hover {\n text-decoration: underline;\n}\n\n.link-color {\n color: #fecd1b;\n}\n\npre {\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 9.5px;\n font-size: 0.8rem;\n}\n\n.btn.active {\n background-color: #e7e7e7;\n}\n\n.card {\n margin-bottom: 5px !important;\n overflow-x: auto;\n}\n\n.navbar-brand {\n padding: 5px;\n margin-right: 0;\n}\n\n.table {\n margin-bottom: 0;\n}\n\n.swh-table thead {\n background-color: #f2f4f5;\n border-top: 1px solid rgba(0, 0, 0, 0.2);\n font-weight: normal;\n}\n\n.swh-table-striped th {\n border-top: none;\n}\n\n.swh-table-striped tbody tr:nth-child(even) {\n background-color: #f2f4f5;\n}\n\n.swh-table-striped tbody tr:nth-child(odd) {\n background-color: #fff;\n}\n\n.swh-web-app-link a {\n text-decoration: none;\n outline: none;\n border: none;\n}\n\n.swh-web-app-link:hover {\n background-color: #efeff2;\n}\n\n.table > thead > tr > th {\n border-top: none;\n border-bottom: 1px solid #e20026;\n}\n\n.table > tbody > tr > td {\n border-style: none;\n}\n\n.sitename .first-word,\n.sitename .second-word {\n color: rgba(0, 0, 0, 0.75);\n font-weight: normal;\n font-size: 1.2rem;\n}\n\n.sitename .first-word {\n font-family: 'Alegreya Sans', sans-serif;\n}\n\n.sitename .second-word {\n font-family: 'Alegreya', serif;\n}\n\n.swh-counter {\n font-size: 150%;\n}\n\n.swh-http-error {\n margin: 0 auto;\n text-align: center;\n}\n\n.swh-http-error-head {\n color: #2d353c;\n font-size: 30px;\n}\n\n.swh-http-error-code {\n bottom: 60%;\n color: #2d353c;\n font-size: 96px;\n line-height: 80px;\n margin-bottom: 10px !important;\n}\n\n.swh-http-error-desc {\n font-size: 12px;\n color: #647788;\n text-align: center;\n}\n\n.swh-http-error-desc pre {\n display: inline-block;\n text-align: left;\n max-width: 800px;\n white-space: pre-wrap;\n}\n\n.popover {\n max-width: 100%;\n z-index: 2000;\n}\n\n.modal {\n text-align: center;\n padding: 0 !important;\n}\n\n.modal::before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n margin-right: -4px;\n}\n\n.modal-dialog {\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n}\n\n.dropdown-submenu {\n position: relative;\n}\n\n.dropdown-submenu .dropdown-menu {\n top: 0;\n left: -100%;\n margin-top: -5px;\n margin-left: -2px;\n}\n\n.dropdown-item:hover,\n.dropdown-item:focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\na.dropdown-left::before {\n content: \"\\f0d9\";\n font-family: 'FontAwesome';\n display: block;\n width: 20px;\n height: 20px;\n float: left;\n margin-left: 0;\n}\n\n#swh-navbar {\n border-top-style: none;\n border-left-style: none;\n border-right-style: none;\n border-bottom-style: solid;\n border-bottom-width: 5px;\n border-image: linear-gradient(to right, rgb(226, 0, 38) 0%, rgb(254, 205, 27) 100%) 1 1 1 1;\n width: 100%;\n padding: 5px;\n margin-bottom: 10px;\n margin-top: 30px;\n justify-content: normal;\n flex-wrap: nowrap;\n height: 72px;\n overflow: hidden;\n}\n\n#back-to-top {\n display: initial;\n position: fixed;\n bottom: 30px;\n right: 30px;\n z-index: 10;\n}\n\n#back-to-top a img {\n display: block;\n width: 32px;\n height: 32px;\n background-size: 32px 32px;\n text-indent: -999px;\n overflow: hidden;\n}\n\n.swh-top-bar {\n direction: ltr;\n height: 30px;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 99999;\n background-color: #262626;\n color: #fff;\n text-align: center;\n font-size: 14px;\n}\n\n.swh-top-bar ul {\n margin-top: 4px;\n padding-left: 0;\n white-space: nowrap;\n}\n\n.swh-top-bar li {\n display: inline-block;\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.swh-top-bar a,\n.swh-top-bar a:visited {\n color: white;\n}\n\n.swh-top-bar a.swh-current-site,\n.swh-top-bar a.swh-current-site:visited {\n color: #fecd1b;\n}\n\n.swh-position-right {\n position: absolute;\n right: 0;\n}\n\n.swh-donate-link {\n border: 1px solid #fecd1b;\n background-color: #e20026;\n color: white !important;\n padding: 3px;\n border-radius: 3px;\n}\n\n.swh-navbar-content h4 {\n padding-top: 7px;\n}\n\n.swh-navbar-content .bread-crumbs {\n display: block;\n margin-left: -40px;\n}\n\n.swh-navbar-content .bread-crumbs li.bc-no-root {\n padding-top: 7px;\n}\n\n.main-sidebar {\n margin-top: 30px;\n}\n\n.content-wrapper {\n background: none;\n}\n\n.brand-image {\n max-height: 40px;\n}\n\n.brand-link {\n padding-top: 18.5px;\n padding-bottom: 18px;\n padding-left: 4px;\n border-bottom: 5px solid #e20026 !important;\n}\n\n.navbar-header a,\nul.dropdown-menu a,\nul.navbar-nav a,\nul.nav-sidebar a {\n border-bottom-style: none;\n color: #323232;\n}\n\n.swh-sidebar .nav-link.active {\n color: #323232 !important;\n background-color: #e7e7e7 !important;\n}\n\n.swh-image-error {\n width: 80px;\n height: auto;\n}\n\n@media (max-width: 600px) {\n .swh-image-error {\n width: 40px;\n height: auto;\n }\n\n .swh-navbar-content h4 {\n font-size: 1rem;\n }\n}\n\n.form-check-label {\n padding-top: 4px;\n}\n\n.swh-id-option {\n display: inline-block;\n margin-right: 5px;\n}\n\n.nav-pills .nav-link:not(.active):hover {\n color: rgba(0, 0, 0, 0.55);\n}\n\n.swh-heading-color {\n color: #e20026 !important;\n}\n\n.sidebar-mini.sidebar-collapse .main-sidebar:hover {\n width: 4.6rem;\n}\n\n.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel > .info,\n.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,\n.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text {\n visibility: hidden !important;\n}\n\n.sidebar .nav-link p,\n.main-sidebar .brand-text,\n.sidebar .user-panel .info {\n transition: none;\n}\n\n.sidebar-mini.sidebar-mini.sidebar-collapse .sidebar {\n padding-right: 0;\n}\n\n.swh-words-logo {\n position: absolute;\n top: 0;\n left: 0;\n width: 73px;\n height: 73px;\n text-align: center;\n font-size: 10pt;\n color: rgba(0, 0, 0, 0.75);\n}\n\n.swh-words-logo:hover {\n text-decoration: none;\n}\n\n.swh-words-logo-swh {\n line-height: 1;\n padding-top: 13px;\n visibility: hidden;\n}\n\nhr.swh-faded-line {\n border: 0;\n height: 1px;\n background-image: linear-gradient(to left, #f0f0f0, #8c8b8b, #f0f0f0);\n}\n\n.swh-readme-txt pre {\n background: none;\n border: none;\n}\n\n.swh-coverage-col {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.swh-coverage {\n height: calc(65px + 1em);\n padding-top: 0.3rem;\n border: none;\n}\n\n.swh-coverage a {\n text-decoration: none;\n}\n\n.swh-coverage-logo {\n display: block;\n width: 100%;\n height: 50px;\n margin-left: auto;\n margin-right: auto;\n object-fit: contain;\n\n /* polyfill for old browsers, see https://github.com/bfred-it/object-fit-images */\n font-family: 'object-fit: contain;';\n}\n\n.swh-coverage-list {\n width: 100%;\n height: 320px;\n border: none;\n}\n\ntr.swh-tr-hover-highlight {\n cursor: pointer;\n}\n\ntr.swh-tr-hover-highlight:hover td {\n background: #ededed;\n}\n\ntr.swh-api-doc-route a {\n text-decoration: none;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.bread-crumbs {\n display: inline-block;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.55);\n}\n\n.bread-crumbs ul {\n list-style-type: none;\n height: 100%;\n}\n\n.bread-crumbs li {\n float: left;\n list-style-type: none;\n}\n\n.bread-crumbs a {\n color: rgba(0, 0, 0, 0.75);\n border-bottom-style: none;\n}\n\n.bread-crumbs a:hover {\n color: rgba(0, 0, 0, 0.85);\n text-decoration: underline;\n}\n"]} \ No newline at end of file +{"version":3,"sources":["webapp.css","breadcrumbs.css"],"names":[],"mappings":"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","file":"webapp.2a1b3e79ae4151309979.css","sourcesContent":["/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nhtml {\n height: 100%;\n overflow-x: hidden;\n}\n\nbody {\n min-height: 100%;\n margin: 0;\n position: relative;\n padding-bottom: 120px;\n}\n\na {\n border-bottom-style: none;\n outline: none;\n}\n\ncode {\n background-color: #f9f2f4;\n}\n\npre code {\n background-color: transparent;\n}\n\nfooter {\n background-color: #262626;\n color: #fff;\n font-size: 0.8rem;\n position: absolute;\n bottom: 0;\n width: 100%;\n padding-top: 20px;\n padding-bottom: 20px;\n}\n\nfooter a,\nfooter a:visited {\n color: #fecd1b;\n}\n\nfooter a:hover {\n text-decoration: underline;\n}\n\n.link-color {\n color: #fecd1b;\n}\n\npre {\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 9.5px;\n font-size: 0.8rem;\n}\n\n.btn.active {\n background-color: #e7e7e7;\n}\n\n.card {\n margin-bottom: 5px !important;\n overflow-x: auto;\n}\n\n.navbar-brand {\n padding: 5px;\n margin-right: 0;\n}\n\n.table {\n margin-bottom: 0;\n}\n\n.swh-table thead {\n background-color: #f2f4f5;\n border-top: 1px solid rgba(0, 0, 0, 0.2);\n font-weight: normal;\n}\n\n.swh-table-striped th {\n border-top: none;\n}\n\n.swh-table-striped tbody tr:nth-child(even) {\n background-color: #f2f4f5;\n}\n\n.swh-table-striped tbody tr:nth-child(odd) {\n background-color: #fff;\n}\n\n.swh-web-app-link a {\n text-decoration: none;\n outline: none;\n border: none;\n}\n\n.swh-web-app-link:hover {\n background-color: #efeff2;\n}\n\n.table > thead > tr > th {\n border-top: none;\n border-bottom: 1px solid #e20026;\n}\n\n.table > tbody > tr > td {\n border-style: none;\n}\n\n.sitename .first-word,\n.sitename .second-word {\n color: rgba(0, 0, 0, 0.75);\n font-weight: normal;\n font-size: 1.2rem;\n}\n\n.sitename .first-word {\n font-family: 'Alegreya Sans', sans-serif;\n}\n\n.sitename .second-word {\n font-family: 'Alegreya', serif;\n}\n\n.swh-counter {\n font-size: 150%;\n}\n\n.swh-http-error {\n margin: 0 auto;\n text-align: center;\n}\n\n.swh-http-error-head {\n color: #2d353c;\n font-size: 30px;\n}\n\n.swh-http-error-code {\n bottom: 60%;\n color: #2d353c;\n font-size: 96px;\n line-height: 80px;\n margin-bottom: 10px !important;\n}\n\n.swh-http-error-desc {\n font-size: 12px;\n color: #647788;\n text-align: center;\n}\n\n.swh-http-error-desc pre {\n display: inline-block;\n text-align: left;\n max-width: 800px;\n white-space: pre-wrap;\n}\n\n.popover {\n max-width: 100%;\n z-index: 2000;\n}\n\n.modal {\n text-align: center;\n padding: 0 !important;\n}\n\n.modal::before {\n content: '';\n display: inline-block;\n height: 100%;\n vertical-align: middle;\n margin-right: -4px;\n}\n\n.modal-dialog {\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n}\n\n.dropdown-submenu {\n position: relative;\n}\n\n.dropdown-submenu .dropdown-menu {\n top: 0;\n left: -100%;\n margin-top: -5px;\n margin-left: -2px;\n}\n\n.dropdown-item:hover,\n.dropdown-item:focus {\n background-color: rgba(0, 0, 0, 0.1);\n}\n\na.dropdown-left::before {\n content: \"\\f0d9\";\n font-family: 'FontAwesome';\n display: block;\n width: 20px;\n height: 20px;\n float: left;\n margin-left: 0;\n}\n\n#swh-navbar {\n border-top-style: none;\n border-left-style: none;\n border-right-style: none;\n border-bottom-style: solid;\n border-bottom-width: 5px;\n border-image: linear-gradient(to right, rgb(226, 0, 38) 0%, rgb(254, 205, 27) 100%) 1 1 1 1;\n width: 100%;\n padding: 5px;\n margin-bottom: 10px;\n margin-top: 30px;\n justify-content: normal;\n flex-wrap: nowrap;\n height: 72px;\n overflow: hidden;\n}\n\n#back-to-top {\n display: initial;\n position: fixed;\n bottom: 30px;\n right: 30px;\n z-index: 10;\n}\n\n#back-to-top a img {\n display: block;\n width: 32px;\n height: 32px;\n background-size: 32px 32px;\n text-indent: -999px;\n overflow: hidden;\n}\n\n.swh-top-bar {\n direction: ltr;\n height: 30px;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n z-index: 99999;\n background-color: #262626;\n color: #fff;\n text-align: center;\n font-size: 14px;\n}\n\n.swh-top-bar ul {\n margin-top: 4px;\n padding-left: 0;\n white-space: nowrap;\n}\n\n.swh-top-bar li {\n display: inline-block;\n margin-left: 10px;\n margin-right: 10px;\n}\n\n.swh-top-bar a,\n.swh-top-bar a:visited {\n color: white;\n}\n\n.swh-top-bar a.swh-current-site,\n.swh-top-bar a.swh-current-site:visited {\n color: #fecd1b;\n}\n\n.swh-position-right {\n position: absolute;\n right: 0;\n}\n\n.swh-donate-link {\n border: 1px solid #fecd1b;\n background-color: #e20026;\n color: white !important;\n padding: 3px;\n border-radius: 3px;\n}\n\n.swh-navbar-content h4 {\n padding-top: 7px;\n}\n\n.swh-navbar-content .bread-crumbs {\n display: block;\n margin-left: -40px;\n}\n\n.swh-navbar-content .bread-crumbs li.bc-no-root {\n padding-top: 7px;\n}\n\n.main-sidebar {\n margin-top: 30px;\n}\n\n.content-wrapper {\n background: none;\n}\n\n.brand-image {\n max-height: 40px;\n}\n\n.brand-link {\n padding-top: 18.5px;\n padding-bottom: 18px;\n padding-left: 4px;\n border-bottom: 5px solid #e20026 !important;\n}\n\n.navbar-header a,\nul.dropdown-menu a,\nul.navbar-nav a,\nul.nav-sidebar a {\n border-bottom-style: none;\n color: #323232;\n}\n\n.swh-sidebar .nav-link.active {\n color: #323232 !important;\n background-color: #e7e7e7 !important;\n}\n\n.swh-image-error {\n width: 80px;\n height: auto;\n}\n\n@media (max-width: 600px) {\n .swh-image-error {\n width: 40px;\n height: auto;\n }\n\n .swh-navbar-content h4 {\n font-size: 1rem;\n }\n}\n\n.form-check-label {\n padding-top: 4px;\n}\n\n.swh-id-option {\n display: inline-block;\n margin-right: 5px;\n}\n\n.nav-pills .nav-link:not(.active):hover {\n color: rgba(0, 0, 0, 0.55);\n}\n\n.swh-heading-color {\n color: #e20026 !important;\n}\n\n.sidebar-mini.sidebar-collapse .main-sidebar:hover {\n width: 4.6rem;\n}\n\n.sidebar-mini.sidebar-collapse .main-sidebar:hover .user-panel > .info,\n.sidebar-mini.sidebar-collapse .main-sidebar:hover .nav-sidebar .nav-link p,\n.sidebar-mini.sidebar-collapse .main-sidebar:hover .brand-text {\n visibility: hidden !important;\n}\n\n.sidebar .nav-link p,\n.main-sidebar .brand-text,\n.sidebar .user-panel .info {\n transition: none;\n}\n\n.sidebar-mini.sidebar-mini.sidebar-collapse .sidebar {\n padding-right: 0;\n}\n\n.swh-words-logo {\n position: absolute;\n top: 0;\n left: 0;\n width: 73px;\n height: 73px;\n text-align: center;\n font-size: 10pt;\n color: rgba(0, 0, 0, 0.75);\n}\n\n.swh-words-logo:hover {\n text-decoration: none;\n}\n\n.swh-words-logo-swh {\n line-height: 1;\n padding-top: 13px;\n visibility: hidden;\n}\n\nhr.swh-faded-line {\n border: 0;\n height: 1px;\n background-image: linear-gradient(to left, #f0f0f0, #8c8b8b, #f0f0f0);\n}\n\n.swh-readme-txt pre {\n background: none;\n border: none;\n}\n\n.swh-coverage-col {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.swh-coverage {\n height: calc(65px + 1em);\n padding-top: 0.3rem;\n border: none;\n}\n\n.swh-coverage a {\n text-decoration: none;\n}\n\n.swh-coverage-logo {\n display: block;\n width: 100%;\n height: 50px;\n margin-left: auto;\n margin-right: auto;\n object-fit: contain;\n\n /* polyfill for old browsers, see https://github.com/bfred-it/object-fit-images */\n font-family: 'object-fit: contain;';\n}\n\n.swh-coverage-list {\n width: 100%;\n height: 320px;\n border: none;\n}\n\ntr.swh-tr-hover-highlight {\n cursor: pointer;\n}\n\ntr.swh-tr-hover-highlight:hover td {\n background: #ededed;\n}\n\ntr.swh-api-doc-route a {\n text-decoration: none;\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n.bread-crumbs {\n display: inline-block;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.55);\n}\n\n.bread-crumbs ul {\n list-style-type: none;\n height: 100%;\n}\n\n.bread-crumbs li {\n float: left;\n list-style-type: none;\n}\n\n.bread-crumbs a {\n color: rgba(0, 0, 0, 0.75);\n border-bottom-style: none;\n}\n\n.bread-crumbs a:hover {\n color: rgba(0, 0, 0, 0.85);\n text-decoration: underline;\n}\n"]} \ No newline at end of file diff --git a/swh/web/static/js/browse.0155e1c4ec3c61116485.js.map b/swh/web/static/js/browse.0155e1c4ec3c61116485.js.map deleted file mode 100644 index 0aeb71c4..00000000 --- a/swh/web/static/js/browse.0155e1c4ec3c61116485.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://swh.browse/webpack/universalModuleDefinition","webpack://swh.browse/webpack/bootstrap","webpack://swh.browse/./node_modules/core-js/library/modules/_to-length.js","webpack://swh.browse/./node_modules/core-js/library/modules/_html.js","webpack://swh.browse/./node_modules/core-js/library/modules/_classof.js","webpack://swh.browse/./swh/web/assets/src/utils/functions.js","webpack://swh.browse/./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack://swh.browse/./node_modules/core-js/library/modules/_to-primitive.js","webpack://swh.browse/./node_modules/core-js/library/modules/_wks.js","webpack://swh.browse/./node_modules/core-js/library/modules/_core.js","webpack://swh.browse/./node_modules/core-js/library/fn/json/stringify.js","webpack://swh.browse/./node_modules/core-js/library/fn/parse-int.js","webpack://swh.browse/./node_modules/core-js/library/modules/es6.parse-int.js","webpack://swh.browse/./node_modules/core-js/library/modules/_parse-int.js","webpack://swh.browse/./node_modules/core-js/library/modules/_string-trim.js","webpack://swh.browse/./node_modules/core-js/library/modules/web.dom.iterable.js","webpack://swh.browse/./node_modules/core-js/library/modules/es6.array.iterator.js","webpack://swh.browse/./node_modules/core-js/library/modules/_add-to-unscopables.js","webpack://swh.browse/./node_modules/core-js/library/modules/_iter-step.js","webpack://swh.browse/./node_modules/core-js/library/modules/_iobject.js","webpack://swh.browse/./node_modules/core-js/library/modules/_redefine.js","webpack://swh.browse/./node_modules/core-js/library/modules/_iter-create.js","webpack://swh.browse/./node_modules/core-js/library/modules/_object-create.js","webpack://swh.browse/./node_modules/core-js/library/modules/_object-dps.js","webpack://swh.browse/./node_modules/core-js/library/modules/_object-keys.js","webpack://swh.browse/./node_modules/core-js/library/modules/_object-keys-internal.js","webpack://swh.browse/./node_modules/core-js/library/modules/_array-includes.js","webpack://swh.browse/./node_modules/core-js/library/modules/_to-absolute-index.js","webpack://swh.browse/./node_modules/core-js/library/modules/_object-gpo.js","webpack://swh.browse/./node_modules/core-js/library/modules/_to-object.js","webpack://swh.browse/./node_modules/core-js/library/modules/es6.string.iterator.js","webpack://swh.browse/./node_modules/core-js/library/modules/_string-at.js","webpack://swh.browse/./node_modules/core-js/library/modules/core.get-iterator-method.js","webpack://swh.browse/./node_modules/core-js/library/modules/_an-object.js","webpack://swh.browse/./node_modules/core-js/library/modules/_hide.js","webpack://swh.browse/./node_modules/core-js/library/modules/_export.js","webpack://swh.browse/./node_modules/core-js/library/modules/_descriptors.js","webpack://swh.browse/./node_modules/core-js/library/modules/_is-object.js","webpack://swh.browse/./node_modules/core-js/library/modules/_iterators.js","webpack://swh.browse/./node_modules/core-js/library/modules/_has.js","webpack://swh.browse/./node_modules/@babel/runtime-corejs2/core-js/parse-int.js","webpack://swh.browse/./node_modules/core-js/library/modules/_object-dp.js","webpack://swh.browse/./node_modules/core-js/library/modules/_defined.js","webpack://swh.browse/./node_modules/clipboard/dist/clipboard.js","webpack://swh.browse/./swh/web/assets/src/bundles/browse/snapshot-navigation.js","webpack://swh.browse/./swh/web/assets/src/bundles/browse/origin-search.js","webpack://swh.browse/./node_modules/core-js/library/modules/_ctx.js","webpack://swh.browse/./swh/web/assets/src/bundles/browse/browse-utils.js","webpack://swh.browse/./swh/web/assets/src/bundles/browse/swh-ids-utils.js","webpack://swh.browse/./swh/web/assets/src/bundles/browse/origin-save.js","webpack://swh.browse/(webpack)/buildin/amd-define.js","webpack://swh.browse/./node_modules/core-js/library/modules/_a-function.js","webpack://swh.browse/./node_modules/core-js/library/modules/_fails.js","webpack://swh.browse/./node_modules/core-js/library/modules/_cof.js","webpack://swh.browse/./node_modules/core-js/library/modules/_dom-create.js","webpack://swh.browse/./node_modules/core-js/library/modules/_to-iobject.js","webpack://swh.browse/./node_modules/core-js/library/modules/_to-integer.js","webpack://swh.browse/./node_modules/core-js/library/modules/_shared-key.js","webpack://swh.browse/./node_modules/@babel/runtime-corejs2/core-js/json/stringify.js","webpack://swh.browse/./swh/web/assets/src/utils/heaps-permute.js","webpack://swh.browse/./node_modules/@babel/runtime-corejs2/core-js/get-iterator.js","webpack://swh.browse/./node_modules/@babel/runtime-corejs2/core-js/array/is-array.js","webpack://swh.browse/./node_modules/validate.js/validate.js","webpack://swh.browse/./node_modules/core-js/library/modules/_library.js","webpack://swh.browse/./node_modules/core-js/library/modules/_set-to-string-tag.js","webpack://swh.browse/./swh/web/assets/src/bundles/browse/index.js","webpack://swh.browse/./swh/web/assets/src/thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.js","webpack://swh.browse/./node_modules/core-js/library/fn/get-iterator.js","webpack://swh.browse/./node_modules/core-js/library/modules/core.get-iterator.js","webpack://swh.browse/./node_modules/core-js/library/fn/array/is-array.js","webpack://swh.browse/./node_modules/core-js/library/modules/es6.array.is-array.js","webpack://swh.browse/./node_modules/core-js/library/modules/_is-array.js","webpack://swh.browse/(webpack)/buildin/module.js","webpack://swh.browse/./node_modules/core-js/library/modules/_property-desc.js","webpack://swh.browse/./node_modules/core-js/library/modules/_global.js","webpack://swh.browse/./node_modules/core-js/library/modules/_string-ws.js","webpack://swh.browse/./node_modules/core-js/library/modules/_iter-define.js","webpack://swh.browse/./node_modules/core-js/library/modules/_shared.js","webpack://swh.browse/./node_modules/core-js/library/modules/_uid.js","webpack://swh.browse/./node_modules/core-js/library/modules/_enum-bug-keys.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","toInteger","min","Math","it","document","documentElement","cof","TAG","ARG","arguments","O","T","B","undefined","e","tryGet","callee","handleFetchError","response","ok","handleFetchErrors","responses","length","staticAsset","asset","__STATIC__","csrfPost","url","headers","body","Cookies","fetch","credentials","method","isGitRepoUrl","domain","RegExp","test","removeUrlFragment","history","replaceState","title","location","pathname","search","__webpack_exports__","a","isObject","S","fn","val","toString","valueOf","TypeError","store","uid","USE_SYMBOL","core","version","__e","$JSON","JSON","stringify","apply","parseInt","$export","$parseInt","G","F","$trim","trim","ws","hex","str","radix","string","String","defined","fails","spaces","space","ltrim","rtrim","exporter","KEY","exec","ALIAS","exp","FORCE","P","TYPE","replace","global","hide","Iterators","TO_STRING_TAG","DOMIterables","split","NAME","Collection","proto","Array","addToUnscopables","step","toIObject","iterated","kind","this","_t","_i","_k","index","Arguments","done","propertyIsEnumerable","descriptor","setToStringTag","IteratorPrototype","Constructor","next","anObject","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","style","display","appendChild","src","contentWindow","open","write","lt","close","Properties","result","dP","getKeys","defineProperties","keys","f","$keys","has","arrayIndexOf","names","push","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","max","toObject","ObjectProto","getPrototypeOf","constructor","$at","point","TO_STRING","that","pos","b","charCodeAt","charAt","slice","classof","ITERATOR","getIteratorMethod","createDesc","ctx","type","source","own","out","IS_FORCED","IS_GLOBAL","IS_STATIC","IS_PROTO","IS_BIND","IS_WRAP","W","expProto","target","C","Function","virtual","R","U","IE8_DOM_DEFINE","toPrimitive","Attributes","_typeof","iterator","obj","_createClass","props","configurable","writable","protoProps","staticProps","_clipboardAction2","_interopRequireDefault","_tinyEmitter2","_goodListener2","default","Clipboard","_Emitter","trigger","options","instance","_classCallCheck","_this","self","ReferenceError","_possibleConstructorReturn","__proto__","resolveOptions","listenClick","subClass","superClass","setPrototypeOf","_inherits","action","defaultAction","defaultTarget","text","defaultText","container","_this2","listener","onClick","delegateTarget","currentTarget","clipboardAction","emitter","getAttributeValue","selector","querySelector","destroy","actions","support","queryCommandSupported","forEach","suffix","element","attribute","hasAttribute","getAttribute","_select","_select2","ClipboardAction","initSelection","selectedText","selectFake","selectTarget","isRTL","removeFake","fakeHandlerCallback","fakeHandler","addEventListener","fakeElem","createElement","fontSize","border","padding","margin","position","yPosition","pageYOffset","scrollTop","top","setAttribute","copyText","removeEventListener","removeChild","succeeded","execCommand","err","handleResult","emit","clearSelection","focus","getSelection","removeAllRanges","set","_action","Error","nodeType","_target","nodeName","isReadOnly","select","setSelectionRange","removeAttribute","selection","range","createRange","selectNodeContents","addRange","E","on","callback","once","off","_","data","evtArr","len","evts","liveEvents","is","delegate","node","listenNode","nodeList","listenNodeList","listenSelector","HTMLElement","closest","_delegate","useCapture","listenerFn","elements","querySelectorAll","map","DOCUMENT_NODE_TYPE","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","parentNode","initSnapshotNavigation","snapshotContext","branch","setBranchesTabActive","$","removeClass","addClass","setReleasesTabActive","ready","click","stopPropagation","dropdownResized","dropdownWidth","width","initOriginSearch","originPatterns","utils_heaps_permute__WEBPACK_IMPORTED_MODULE_0__","utils_functions__WEBPACK_IMPORTED_MODULE_1__","perPage","limit","offset","currentData","inSearch","fixTableRowsStyle","setTimeout","removeAttr","clearOriginSearchResultsTable","remove","populateOriginSearchResultsTable","localOffset","show","table","_loop","elem","browseUrl","Urls","browse_origin","tableRow","id","append","latestSnapshotUrl","browse_origin_latest_snapshot","then","json","originId","children","prop","swh","webapp","initTableRowLinks","scrollTo","searchOrigins","patterns","searchOffset","baseSearchUrl","api_origin_metadata_search","patternsArray","patternsPermut","heapsPermute","join","regex","browse_origin_search","searchUrl","catch","status","statusText","submit","event","preventDefault","withVisit","withContent","searchMetadata","queryParameters","encodeURIComponent","hasClass","urlParams","URLSearchParams","query","resolvePidUrl","api_resolve_swh_pid","browse_url","startsWith","reason","doSearch","aFunction","toggle","css","blur","popover","boundary","html","template","content","attr","sanitize","parents","swhIdObjectTypeToggled","tab","swhIdOptionOriginToggled","swhIdElt","find","originPart","currentSwhId","setIdLinesPart","elt","lines","linesPart","linesRegexp","line","hash","_babel_runtime_corejs2_core_js_parse_int__WEBPACK_IMPORTED_MODULE_0___default","swhIdOptionLinesToggled","ClipboardJS","swhId","origin","innerWidth","tabSlideOptions","tabLocation","innerHeight","tabSlideOut","saveRequestsTable","originSaveRequest","originType","originUrl","acceptedCallback","pendingCallback","errorCallback","addSaveOriginRequestUrl","browse_origin_save_request","grecaptchaData","isReCaptchaActivated","grecaptcha","getResponse","_babel_runtime_corejs2_core_js_json_stringify__WEBPACK_IMPORTED_MODULE_2___default","Accept","Content-Type","save_request_status","reset","initOriginSave","dataTable","ext","errMode","browse_origin_save_types_list","_iterator","_isArray","_babel_runtime_corejs2_core_js_array_is_array__WEBPACK_IMPORTED_MODULE_1___default","_babel_runtime_corejs2_core_js_get_iterator__WEBPACK_IMPORTED_MODULE_0___default","_ref","settings","techNote","message","console","log","DataTable","serverSide","ajax","browse_origin_save_requests_list","columns","render","row","Date","toLocaleString","browseOriginUrl","origin_url","visit_date","scrollY","scrollCollapse","order","draw","alert","checkValidity","each","includes","validateSaveOriginUrl","input","validUrl","validate","website","schemes","githubIdx","indexOf","gitlabIdx","gitSfIdx","bitbucketIdx","startIdx","idx","gitlabDomain","substr","endsWith","setCustomValidity","initTakeNewSnapshot","IObject","ceil","floor","isNaN","shared","swap","array","pos1","pos2","temp","output","attributes","constraints","v","extend","results","runValidations","some","isPromise","error","processValidationResults","major","minor","patch","metadata","format","isEmpty","Promise","EMPTY_STRING_REGEXP","validatorName","validators","validator","validatorOptions","isDomElement","isJqueryElement","collectFormValues","getDeepObjectValue","globalOptions","errors","pruneEmptyErrors","expandMultipleErrors","convertErrorMessages","formatters","async","WrapErrors","wrapErrors","cleanAttributes","resolve","reject","waitForResults","single","fullMessages","reduce","memo","args","isNumber","isFunction","isInteger","isBoolean","isDate","isDefined","isString","jquery","isArray","vals","FORMAT_REGEXP","m0","m1","m2","prettify","parseFloat","round","toFixed","toLowerCase","stringifyValue","isHash","contains","unique","filter","forEachKeyInKeypath","keypath","escape","form","j","inputs","option","values","item","sanitizeFormValue","checked","multiple","selected","_val","selectedIndex","nullify","capitalize","toUpperCase","ret","msg","errorInfo","groupErrorsByAttribute","list","flattenErrorsToArray","whitelist","whitelistCreator","last","cleanRecursive","w","ow","buildObjectWhitelist","exposeModule","warn","presence","allowEmpty","maximum","minimum","tokenizer","wrongLength","count","tooShort","tooLong","notValid","numericality","checks","greaterThan","greaterThanOrEqualTo","equalTo","lessThan","lessThanOrEqualTo","divisibleBy","strict","pattern","onlyInteger","noStrings","notInteger","odd","notOdd","even","notEven","datetime","parse","earliest","NaN","latest","dateOnly","tooEarly","date","tooLate","match","flags","inclusion","within","exclusion","email","PATTERN","equality","otherValue","comparator","v1","v2","allowLocal","tld","detailed","flat","grouped","constraint","sort","def","tag","stat","_snapshot_navigation__WEBPACK_IMPORTED_MODULE_4__","_origin_search__WEBPACK_IMPORTED_MODULE_5__","_browse_utils__WEBPACK_IMPORTED_MODULE_6__","__WEBPACK_IMPORT_KEY__","_swh_ids_utils__WEBPACK_IMPORTED_MODULE_7__","_origin_save__WEBPACK_IMPORTED_MODULE_8__","jQuery","callerSettings","heightAsString","outerHeight","calculatePanelSize","available","height","edge","otherOffset","panel","isOpen","tabHandle","hoverTimeout","offsetReverse","handleOffset","handleOffsetReverse","bounceDistance","bounceTimes","bounceSpeed","tabImage","tabImageHeight","tabImageWidth","onLoadSlideOut","clickScreenToClose","clickScreenToCloseFilters","onOpen","onClose","handle","toggleButton","imageHeight","imageWidth","img","Image","naturalHeight","naturalWidth","background","panelOffsetFrom","handleOffsetFrom","borderWidth","resize","bottom","right","left","moveIn","moveOut","clicked","timer","hover","animate","bounceIn","bounceOut","getIterator","iterFn","arg","webpackPolyfill","deprecate","paths","bitmap","__g","LIBRARY","redefine","$iterCreate","BUGGY","returnThis","Base","DEFAULT","IS_SET","FORCED","methods","getMethod","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","copyright","px","random","concat"],"mappings":"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","file":"js/browse.0155e1c4ec3c61116485.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"browse\"] = factory();\n\telse\n\t\troot[\"swh\"] = root[\"swh\"] || {}, root[\"swh\"][\"browse\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 750);\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n// utility functions\n\nexport function handleFetchError(response) {\n if (!response.ok) {\n throw response;\n }\n return response;\n}\n\nexport function handleFetchErrors(responses) {\n for (let i = 0; i < responses.length; ++i) {\n if (!responses[i].ok) {\n throw responses[i];\n }\n }\n return responses;\n}\n\nexport function staticAsset(asset) {\n return `${__STATIC__}${asset}`;\n}\n\nexport function csrfPost(url, headers = {}, body = null) {\n headers['X-CSRFToken'] = Cookies.get('csrftoken');\n return fetch(url, {\n credentials: 'include',\n headers: headers,\n method: 'POST',\n body: body\n });\n}\n\nexport function isGitRepoUrl(url, domain) {\n let endOfPattern = '\\\\/[\\\\w\\\\.-]+\\\\/?(?!=.git)(?:\\\\.git(?:\\\\/?|\\\\#[\\\\w\\\\.\\\\-_]+)?)?$';\n let pattern = `(?:git|https?|git@)(?:\\\\:\\\\/\\\\/)?${domain}[/|:][A-Za-z0-9-]+?` + endOfPattern;\n let re = new RegExp(pattern);\n return re.test(url);\n};\n\nexport function removeUrlFragment() {\n history.replaceState('', document.title, window.location.pathname + window.location.search);\n}\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var core = module.exports = { version: '2.6.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","var core = require('../../modules/_core');\nvar $JSON = core.JSON || (core.JSON = { stringify: JSON.stringify });\nmodule.exports = function stringify(it) { // eslint-disable-line no-unused-vars\n return $JSON.stringify.apply($JSON, arguments);\n};\n","require('../modules/es6.parse-int');\nmodule.exports = require('../modules/_core').parseInt;\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","require('./es6.array.iterator');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar TO_STRING_TAG = require('./_wks')('toStringTag');\n\nvar DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +\n 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +\n 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +\n 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +\n 'TextTrackList,TouchList').split(',');\n\nfor (var i = 0; i < DOMIterables.length; i++) {\n var NAME = DOMIterables[i];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = Iterators.Array;\n}\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","module.exports = function () { /* empty */ };\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","module.exports = require('./_hide');\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = {};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = require(\"core-js/library/fn/parse-int\");","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","/*!\n * clipboard.js v2.0.4\n * https://zenorocha.github.io/clipboard.js\n * \n * Licensed MIT © Zeno Rocha\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clipboardAction = __webpack_require__(1);\n\nvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\nvar _tinyEmitter = __webpack_require__(3);\n\nvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\nvar _goodListener = __webpack_require__(4);\n\nvar _goodListener2 = _interopRequireDefault(_goodListener);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\nvar Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: 'defaultText',\n\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n}(_tinyEmitter2.default);\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\n\nfunction getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n\nmodule.exports = Clipboard;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _select = __webpack_require__(2);\n\nvar _select2 = _interopRequireDefault(_select);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Inner class which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n */\nvar ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n\n /**\n * Decides which selection strategy is going to be applied based\n * on the existence of `text` and `target` properties.\n */\n\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n\n /**\n * Creates a fake textarea element, sets its value from `text` property,\n * and makes a selection on it.\n */\n\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n\n /**\n * Only removes the fake element after another click event, that way\n * a user can hit `Ctrl+C` to copy because selection still exists.\n */\n\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n\n /**\n * Selects the content from element passed on `target` property.\n */\n\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n\n /**\n * Executes the copy operation based on the current selection.\n */\n\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n\n /**\n * Fires an event based on the copy operation result.\n * @param {Boolean} succeeded\n */\n\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n\n /**\n * Moves focus away from `target` and back to the trigger, removes current selection.\n */\n\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n\n /**\n * Sets the `action` to be performed which can be either 'copy' or 'cut'.\n * @param {String} action\n */\n\n }, {\n key: 'destroy',\n\n\n /**\n * Destroy lifecycle.\n */\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n }\n\n /**\n * Gets the `action` property.\n * @return {String}\n */\n ,\n get: function get() {\n return this._action;\n }\n\n /**\n * Sets the `target` property using an element\n * that will be have its content copied.\n * @param {Element} target\n */\n\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n }\n\n /**\n * Gets the `target` property.\n * @return {String|HTMLElement}\n */\n ,\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n}();\n\nmodule.exports = ClipboardAction;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(5);\nvar delegate = __webpack_require__(6);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(7);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ })\n/******/ ]);\n});","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nexport function initSnapshotNavigation(snapshotContext, branch) {\n\n function setBranchesTabActive() {\n $('.swh-releases-switch').removeClass('active');\n $('.swh-branches-switch').addClass('active');\n $('#swh-tab-releases').removeClass('active');\n $('#swh-tab-branches').addClass('active');\n }\n\n function setReleasesTabActive() {\n $('.swh-branches-switch').removeClass('active');\n $('.swh-releases-switch').addClass('active');\n $('#swh-tab-branches').removeClass('active');\n $('#swh-tab-releases').addClass('active');\n }\n\n $(document).ready(() => {\n $('.dropdown-menu a.swh-branches-switch').click(e => {\n setBranchesTabActive();\n e.stopPropagation();\n });\n\n $('.dropdown-menu a.swh-releases-switch').click(e => {\n setReleasesTabActive();\n e.stopPropagation();\n });\n\n let dropdownResized = false;\n\n // hack to resize the branches/releases dropdown content,\n // taking icons into account, in order to make the whole names readable\n $('#swh-branches-releases-dd').on('show.bs.dropdown', () => {\n if (dropdownResized) return;\n let dropdownWidth = $('.swh-branches-releases').width();\n $('.swh-branches-releases').width(dropdownWidth + 25);\n dropdownResized = true;\n });\n\n if (snapshotContext) {\n if (branch) {\n setBranchesTabActive();\n } else {\n setReleasesTabActive();\n }\n }\n\n });\n\n}\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nimport {heapsPermute} from 'utils/heaps-permute';\nimport {handleFetchError} from 'utils/functions';\n\nlet originPatterns;\nlet perPage = 100;\nlet limit = perPage * 2;\nlet offset = 0;\nlet currentData = null;\nlet inSearch = false;\n\nfunction fixTableRowsStyle() {\n setTimeout(() => {\n $('#origin-search-results tbody tr').removeAttr('style');\n });\n}\n\nfunction clearOriginSearchResultsTable() {\n $('#origin-search-results tbody tr').remove();\n}\n\nfunction populateOriginSearchResultsTable(data, offset) {\n let localOffset = offset % limit;\n if (data.length > 0) {\n $('#swh-origin-search-results').show();\n $('#swh-no-result').hide();\n clearOriginSearchResultsTable();\n let table = $('#origin-search-results tbody');\n for (let i = localOffset; i < localOffset + perPage && i < data.length; ++i) {\n let elem = data[i];\n let browseUrl = Urls.browse_origin(elem.url);\n let tableRow = ``;\n tableRow += `${elem.type}`;\n tableRow += `${elem.url}`;\n tableRow += ``;\n tableRow += '';\n table.append(tableRow);\n // get async latest visit snapshot and update visit status icon\n let latestSnapshotUrl = Urls.browse_origin_latest_snapshot(elem.id);\n fetch(latestSnapshotUrl)\n .then(response => response.json())\n .then(data => {\n let originId = elem.id;\n $(`#visit-status-origin-${originId}`).children().remove();\n if (data) {\n $(`#visit-status-origin-${originId}`).append('');\n } else {\n $(`#visit-status-origin-${originId}`).append('');\n if ($('#swh-filter-empty-visits').prop('checked')) {\n $(`#origin-${originId}`).remove();\n }\n }\n });\n }\n fixTableRowsStyle();\n swh.webapp.initTableRowLinks('tr.swh-search-result-entry');\n } else {\n $('#swh-origin-search-results').hide();\n $('#swh-no-result').text('No origins matching the search criteria were found.');\n $('#swh-no-result').show();\n }\n if (data.length - localOffset < perPage ||\n (data.length < limit && (localOffset + perPage) === data.length)) {\n $('#origins-next-results-button').addClass('disabled');\n } else {\n $('#origins-next-results-button').removeClass('disabled');\n }\n if (offset > 0) {\n $('#origins-prev-results-button').removeClass('disabled');\n } else {\n $('#origins-prev-results-button').addClass('disabled');\n }\n inSearch = false;\n setTimeout(() => {\n window.scrollTo(0, 0);\n });\n}\n\nfunction escapeStringRegexp(str) {\n let matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\n return str.replace(matchOperatorsRe, '\\\\\\\\\\\\$&');\n}\n\nfunction searchOrigins(patterns, limit, searchOffset, offset) {\n let baseSearchUrl;\n let searchMetadata = $('#swh-search-origin-metadata').prop('checked');\n if (searchMetadata) {\n baseSearchUrl = Urls.api_origin_metadata_search() + `?fulltext=${patterns}`;\n } else {\n originPatterns = patterns;\n let patternsArray = patterns.trim().replace(/\\s+/g, ' ').split(' ');\n for (let i = 0; i < patternsArray.length; ++i) {\n patternsArray[i] = escapeStringRegexp(patternsArray[i]);\n }\n let patternsPermut = [];\n heapsPermute(patternsArray, p => patternsPermut.push(p.join('.*')));\n let regex = patternsPermut.join('|');\n baseSearchUrl = Urls.browse_origin_search(regex) + `?regexp=true`;\n }\n\n let withVisit = $('#swh-search-origins-with-visit').prop('checked');\n let searchUrl = baseSearchUrl + `&limit=${limit}&offset=${searchOffset}&with_visit=${withVisit}`;\n\n clearOriginSearchResultsTable();\n $('.swh-loading').addClass('show');\n fetch(searchUrl)\n .then(handleFetchError)\n .then(response => response.json())\n .then(data => {\n currentData = data;\n $('.swh-loading').removeClass('show');\n populateOriginSearchResultsTable(data, offset);\n })\n .catch(response => {\n $('.swh-loading').removeClass('show');\n inSearch = false;\n $('#swh-origin-search-results').hide();\n $('#swh-no-result').text(`Error ${response.status}: ${response.statusText}`);\n $('#swh-no-result').show();\n });\n}\n\nfunction doSearch() {\n $('#swh-no-result').hide();\n let patterns = $('#origins-url-patterns').val();\n offset = 0;\n inSearch = true;\n // first try to resolve a swh persistent identifier\n let resolvePidUrl = Urls.api_resolve_swh_pid(patterns);\n fetch(resolvePidUrl)\n .then(handleFetchError)\n .then(response => response.json())\n .then(data => {\n // pid has been successfully resolved,\n // so redirect to browse page\n window.location = data.browse_url;\n })\n .catch(response => {\n // pid resolving failed\n if (patterns.startsWith('swh:')) {\n // display a useful error message if the input\n // looks like a swh pid\n response.json().then(data => {\n $('#swh-origin-search-results').hide();\n $('.swh-search-pagination').hide();\n $('#swh-no-result').text(data.reason);\n $('#swh-no-result').show();\n });\n } else {\n // otherwise, proceed with origins search\n $('#swh-origin-search-results').show();\n $('.swh-search-pagination').show();\n searchOrigins(patterns, limit, offset, offset);\n }\n });\n}\n\nexport function initOriginSearch() {\n $(document).ready(() => {\n $('#swh-search-origins').submit(event => {\n event.preventDefault();\n let patterns = $('#origins-url-patterns').val().trim();\n let withVisit = $('#swh-search-origins-with-visit').prop('checked');\n let withContent = $('#swh-filter-empty-visits').prop('checked');\n let searchMetadata = $('#swh-search-origin-metadata').prop('checked');\n let queryParameters = '?q=' + encodeURIComponent(patterns);\n if (withVisit) {\n queryParameters += '&with_visit';\n }\n if (withContent) {\n queryParameters += '&with_content';\n }\n if (searchMetadata) {\n queryParameters += '&search_metadata';\n }\n // Update the url, triggering page reload and effective search\n window.location.search = queryParameters;\n });\n\n $('#origins-next-results-button').click(event => {\n if ($('#origins-next-results-button').hasClass('disabled') || inSearch) {\n return;\n }\n inSearch = true;\n offset += perPage;\n if (!currentData || (offset >= limit && offset % limit === 0)) {\n searchOrigins(originPatterns, limit, offset, offset);\n } else {\n populateOriginSearchResultsTable(currentData, offset);\n }\n event.preventDefault();\n });\n\n $('#origins-prev-results-button').click(event => {\n if ($('#origins-prev-results-button').hasClass('disabled') || inSearch) {\n return;\n }\n inSearch = true;\n offset -= perPage;\n if (!currentData || (offset > 0 && (offset + perPage) % limit === 0)) {\n searchOrigins(originPatterns, limit, (offset + perPage) - limit, offset);\n } else {\n populateOriginSearchResultsTable(currentData, offset);\n }\n event.preventDefault();\n });\n\n $(document).on('shown.bs.tab', 'a[data-toggle=\"tab\"]', e => {\n if (e.currentTarget.text.trim() === 'Search') {\n fixTableRowsStyle();\n }\n });\n\n let urlParams = new URLSearchParams(window.location.search);\n let query = urlParams.get('q');\n let withVisit = urlParams.has('with_visit');\n let withContent = urlParams.has('with_content');\n let searchMetadata = urlParams.has('search_metadata');\n if (query) {\n $('#origins-url-patterns').val(query);\n $('#swh-search-origins-with-visit').prop('checked', withVisit);\n $('#swh-search-origins-with-content').prop('checked', withContent);\n $('#swh-search-origin-metadata').prop('checked', searchMetadata);\n doSearch();\n }\n });\n}\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n$(document).ready(() => {\n\n $('.dropdown-submenu a.dropdown-item').on('click', e => {\n $(e.target).next('div').toggle();\n if ($(e.target).next('div').css('display') !== 'none') {\n $(e.target).focus();\n } else {\n $(e.target).blur();\n }\n e.stopPropagation();\n e.preventDefault();\n });\n\n $('.swh-popover-toggler').popover({\n boundary: 'viewport',\n container: 'body',\n html: true,\n template: `
\n
\n

\n
\n
`,\n content: function() {\n var content = $(this).attr('data-popover-content');\n return $(content).children('.popover-body').remove().html();\n },\n title: function() {\n var title = $(this).attr('data-popover-content');\n return $(title).children('.popover-heading').html();\n },\n offset: '50vh',\n sanitize: false\n });\n\n $('.swh-vault-menu a.dropdown-item').on('click', e => {\n $('.swh-popover-toggler').popover('hide');\n });\n\n $('.swh-popover-toggler').on('show.bs.popover', (e) => {\n $(`.swh-popover-toggler:not(#${e.currentTarget.id})`).popover('hide');\n $('.swh-vault-menu .dropdown-menu').hide();\n });\n\n $('.swh-actions-dropdown').on('hide.bs.dropdown', () => {\n $('.swh-vault-menu .dropdown-menu').hide();\n $('.swh-popover-toggler').popover('hide');\n });\n\n $('body').on('click', e => {\n if ($(e.target).parents('.swh-popover').length) {\n e.stopPropagation();\n }\n });\n\n});\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nimport ClipboardJS from 'clipboard';\nimport 'thirdparty/jquery.tabSlideOut/jquery.tabSlideOut';\nimport 'thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.css';\n\nexport function swhIdObjectTypeToggled(event) {\n event.preventDefault();\n $(event.target).tab('show');\n}\n\nexport function swhIdOptionOriginToggled(event) {\n event.stopPropagation();\n let swhIdElt = $(event.target).closest('.swh-id-ui').find('.swh-id');\n let originPart = ';origin=' + $(event.target).data('swh-origin');\n let currentSwhId = swhIdElt.text();\n if ($(event.target).prop('checked')) {\n currentSwhId += originPart;\n } else {\n currentSwhId = currentSwhId.replace(originPart, '');\n }\n swhIdElt.text(currentSwhId);\n swhIdElt.attr('href', '/' + currentSwhId + '/');\n}\n\nfunction setIdLinesPart(elt) {\n let swhIdElt = $(elt).closest('.swh-id-ui').find('.swh-id');\n let currentSwhId = swhIdElt.text();\n let lines = [];\n let linesPart = ';lines=';\n let linesRegexp = new RegExp(/L(\\d+)/g);\n let line = linesRegexp.exec(window.location.hash);\n while (line) {\n lines.push(parseInt(line[1]));\n line = linesRegexp.exec(window.location.hash);\n }\n if (lines.length > 0) {\n linesPart += lines[0];\n }\n if (lines.length > 1) {\n linesPart += '-' + lines[1];\n }\n if ($(elt).prop('checked')) {\n currentSwhId = currentSwhId.replace(/;lines=\\d+-*\\d*/g, '');\n currentSwhId += linesPart;\n } else {\n currentSwhId = currentSwhId.replace(linesPart, '');\n }\n swhIdElt.text(currentSwhId);\n swhIdElt.attr('href', '/' + currentSwhId + '/');\n}\n\nexport function swhIdOptionLinesToggled(event) {\n event.stopPropagation();\n if (!window.location.hash) {\n return;\n }\n setIdLinesPart(event.target);\n}\n\n$(document).ready(() => {\n new ClipboardJS('.btn-swh-id-copy', {\n text: trigger => {\n let swhId = $(trigger).closest('.swh-id-ui').find('.swh-id').text();\n return swhId;\n }\n });\n\n new ClipboardJS('.btn-swh-id-url-copy', {\n text: trigger => {\n let swhId = $(trigger).closest('.swh-id-ui').find('.swh-id').text();\n return window.location.origin + '/' + swhId + '/';\n }\n });\n\n if (window.innerWidth * 0.7 > 1000) {\n $('#swh-identifiers').css('width', '1000px');\n }\n\n let tabSlideOptions = {\n tabLocation: 'right'\n };\n // ensure tab scrolling on small screens\n if (window.innerHeight < 600 || window.innerWidth < 500) {\n tabSlideOptions['otherOffset'] = '20px';\n }\n\n // initiate the sliding identifiers tab\n $('#swh-identifiers').tabSlideOut(tabSlideOptions);\n\n // set the tab visible once the close animation is terminated\n setTimeout(() => {\n $('#swh-identifiers').css('visibility', 'visible');\n $('.swh-id-option-origin').trigger('click');\n $('.swh-id-option-lines').trigger('click');\n });\n\n $(window).on('hashchange', () => {\n setIdLinesPart('.swh-id-option-lines');\n });\n\n});\n","/**\n * Copyright (C) 2018-2019 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nimport {handleFetchError, csrfPost, isGitRepoUrl, removeUrlFragment} from 'utils/functions';\nimport {validate} from 'validate.js';\n\nlet saveRequestsTable;\n\nfunction originSaveRequest(originType, originUrl,\n acceptedCallback, pendingCallback, errorCallback) {\n let addSaveOriginRequestUrl = Urls.browse_origin_save_request(originType, originUrl);\n let grecaptchaData = {};\n if (swh.webapp.isReCaptchaActivated()) {\n grecaptchaData['g-recaptcha-response'] = grecaptcha.getResponse();\n }\n let headers = {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n };\n let body = JSON.stringify(grecaptchaData);\n $('.swh-processing-save-request').css('display', 'block');\n csrfPost(addSaveOriginRequestUrl, headers, body)\n .then(handleFetchError)\n .then(response => response.json())\n .then(data => {\n $('.swh-processing-save-request').css('display', 'none');\n if (data.save_request_status === 'accepted') {\n acceptedCallback();\n } else {\n pendingCallback();\n }\n if (swh.webapp.isReCaptchaActivated()) {\n grecaptcha.reset();\n }\n })\n .catch(response => {\n $('.swh-processing-save-request').css('display', 'none');\n if (response.status === 403) {\n errorCallback();\n }\n if (swh.webapp.isReCaptchaActivated()) {\n grecaptcha.reset();\n }\n });\n}\n\nexport function initOriginSave() {\n\n $(document).ready(() => {\n\n $.fn.dataTable.ext.errMode = 'none';\n\n fetch(Urls.browse_origin_save_types_list())\n .then(response => response.json())\n .then(data => {\n for (let originType of data) {\n $('#swh-input-origin-type').append(``);\n }\n });\n\n saveRequestsTable = $('#swh-origin-save-requests')\n .on('error.dt', (e, settings, techNote, message) => {\n $('#swh-origin-save-request-list-error').text('An error occurred while retrieving the save requests list');\n console.log(message);\n })\n .DataTable({\n serverSide: true,\n ajax: Urls.browse_origin_save_requests_list('all'),\n columns: [\n {\n data: 'save_request_date',\n name: 'request_date',\n render: (data, type, row) => {\n if (type === 'display') {\n let date = new Date(data);\n return date.toLocaleString();\n }\n return data;\n }\n },\n {\n data: 'origin_type',\n name: 'origin_type'\n\n },\n {\n data: 'origin_url',\n name: 'origin_url',\n render: (data, type, row) => {\n if (type === 'display') {\n return `${data}`;\n }\n return data;\n }\n },\n {\n data: 'save_request_status',\n name: 'status'\n },\n {\n data: 'save_task_status',\n name: 'loading_task_status',\n render: (data, type, row) => {\n if (data === 'succeed') {\n let browseOriginUrl = Urls.browse_origin(row.origin_url);\n if (row.visit_date) {\n browseOriginUrl += `visit/${row.visit_date}/`;\n }\n return `${data}`;\n }\n return data;\n }\n }\n ],\n scrollY: '50vh',\n scrollCollapse: true,\n order: [[0, 'desc']]\n });\n\n $('#swh-origin-save-requests-list-tab').on('shown.bs.tab', () => {\n saveRequestsTable.draw();\n window.location.hash = '#requests';\n });\n\n $('#swh-origin-save-request-create-tab').on('shown.bs.tab', () => {\n removeUrlFragment();\n });\n\n let saveRequestAcceptedAlert =\n `
\n The \"save code now\" request has been accepted and will be processed as soon as possible.\n
`;\n\n let saveRequestPendingAlert =\n `
\n The \"save code now\" request has been put in pending state and may be accepted for processing after manual review.\n
`;\n\n let saveRequestRejectedAlert =\n `
\n The \"save code now\" request has been rejected because the reCAPTCHA could not be validated or the provided origin url is blacklisted.\n
`;\n\n $('#swh-save-origin-form').submit(event => {\n event.preventDefault();\n event.stopPropagation();\n $('.alert').alert('close');\n if (event.target.checkValidity()) {\n $(event.target).removeClass('was-validated');\n let originType = $('#swh-input-origin-type').val();\n let originUrl = $('#swh-input-origin-url').val();\n\n originSaveRequest(originType, originUrl,\n () => $('#swh-origin-save-request-status').html(saveRequestAcceptedAlert),\n () => $('#swh-origin-save-request-status').html(saveRequestPendingAlert),\n () => {\n $('#swh-origin-save-request-status').css('color', 'red');\n $('#swh-origin-save-request-status').html(saveRequestRejectedAlert);\n });\n } else {\n $(event.target).addClass('was-validated');\n }\n });\n\n $('#swh-show-origin-save-requests-list').on('click', (event) => {\n event.preventDefault();\n $('.nav-tabs a[href=\"#swh-origin-save-requests-list\"]').tab('show');\n });\n\n $('#swh-input-origin-url').on('input', function(event) {\n let originUrl = $(this).val().trim();\n $(this).val(originUrl);\n $('#swh-input-origin-type option').each(function() {\n let val = $(this).val();\n if (val && originUrl.includes(val)) {\n $(this).prop('selected', true);\n }\n });\n });\n\n if (window.location.hash === '#requests') {\n $('.nav-tabs a[href=\"#swh-origin-save-requests-list\"]').tab('show');\n }\n\n });\n\n}\n\nexport function validateSaveOriginUrl(input) {\n let validUrl = validate({website: input.value}, {\n website: {\n url: {\n schemes: ['http', 'https', 'svn', 'git']\n }\n }\n }) === undefined;\n let originType = $('#swh-input-origin-type').val();\n if (originType === 'git' && validUrl) {\n // additional checks for well known code hosting providers\n let githubIdx = input.value.indexOf('://github.com');\n let gitlabIdx = input.value.indexOf('://gitlab.');\n let gitSfIdx = input.value.indexOf('://git.code.sf.net');\n let bitbucketIdx = input.value.indexOf('://bitbucket.org');\n if (githubIdx !== -1 && githubIdx <= 5) {\n validUrl = isGitRepoUrl(input.value, 'github.com');\n } else if (gitlabIdx !== -1 && gitlabIdx <= 5) {\n let startIdx = gitlabIdx + 3;\n let idx = input.value.indexOf('/', startIdx);\n if (idx !== -1) {\n let gitlabDomain = input.value.substr(startIdx, idx - startIdx);\n // GitLab repo url needs to be suffixed by '.git' in order to be successfully loaded\n validUrl = isGitRepoUrl(input.value, gitlabDomain) && input.value.endsWith('.git');\n } else {\n validUrl = false;\n }\n } else if (gitSfIdx !== -1 && gitSfIdx <= 5) {\n validUrl = isGitRepoUrl(input.value, 'git.code.sf.net/p');\n } else if (bitbucketIdx !== -1 && bitbucketIdx <= 5) {\n validUrl = isGitRepoUrl(input.value, 'bitbucket.org');\n }\n }\n if (validUrl) {\n input.setCustomValidity('');\n } else {\n input.setCustomValidity('The origin url is not valid or does not reference a code repository');\n }\n}\n\nexport function initTakeNewSnapshot() {\n\n let newSnapshotRequestAcceptedAlert =\n `
\n The \"take new snapshot\" request has been accepted and will be processed as soon as possible.\n
`;\n\n let newSnapshotRequestPendingAlert =\n `
\n The \"take new snapshot\" request has been put in pending state and may be accepted for processing after manual review.\n
`;\n\n let newSnapshotRequestRejectedAlert =\n `
\n The \"take new snapshot\" request has been rejected because the reCAPTCHA could not be validated.\n
`;\n\n $(document).ready(() => {\n $('#swh-take-new-snapshot-form').submit(event => {\n event.preventDefault();\n event.stopPropagation();\n\n let originType = $('#swh-input-origin-type').val();\n let originUrl = $('#swh-input-origin-url').val();\n\n originSaveRequest(originType, originUrl,\n () => $('#swh-take-new-snapshot-request-status').html(newSnapshotRequestAcceptedAlert),\n () => $('#swh-take-new-snapshot-request-status').html(newSnapshotRequestPendingAlert),\n () => {\n $('#swh-take-new-snapshot-request-status').css('color', 'red');\n $('#swh-take-new-snapshot-request-status').html(newSnapshotRequestRejectedAlert);\n });\n });\n });\n}\n","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","module.exports = require(\"core-js/library/fn/json/stringify\");","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n// http://dsernst.com/2014/12/14/heaps-permutation-algorithm-in-javascript/\n\nfunction swap(array, pos1, pos2) {\n let temp = array[pos1];\n array[pos1] = array[pos2];\n array[pos2] = temp;\n}\n\nexport function heapsPermute(array, output, n) {\n n = n || array.length; // set n default to array.length\n if (n === 1) {\n output(array);\n } else {\n for (let i = 1; i <= n; i += 1) {\n heapsPermute(array, output, n - 1);\n let j;\n if (n % 2) {\n j = 1;\n } else {\n j = i;\n }\n swap(array, j - 1, n - 1); // -1 to account for javascript zero-indexing\n }\n }\n}\n","module.exports = require(\"core-js/library/fn/get-iterator\");","module.exports = require(\"core-js/library/fn/array/is-array\");","/*!\n * validate.js 0.12.0\n *\n * (c) 2013-2017 Nicklas Ansman, 2013 Wrapp\n * Validate.js may be freely distributed under the MIT license.\n * For all details and documentation:\n * http://validatejs.org/\n */\n\n(function(exports, module, define) {\n \"use strict\";\n\n // The main function that calls the validators specified by the constraints.\n // The options are the following:\n // - format (string) - An option that controls how the returned value is formatted\n // * flat - Returns a flat array of just the error messages\n // * grouped - Returns the messages grouped by attribute (default)\n // * detailed - Returns an array of the raw validation data\n // - fullMessages (boolean) - If `true` (default) the attribute name is prepended to the error.\n //\n // Please note that the options are also passed to each validator.\n var validate = function(attributes, constraints, options) {\n options = v.extend({}, v.options, options);\n\n var results = v.runValidations(attributes, constraints, options)\n , attr\n , validator;\n\n if (results.some(function(r) { return v.isPromise(r.error); })) {\n throw new Error(\"Use validate.async if you want support for promises\");\n }\n return validate.processValidationResults(results, options);\n };\n\n var v = validate;\n\n // Copies over attributes from one or more sources to a single destination.\n // Very much similar to underscore's extend.\n // The first argument is the target object and the remaining arguments will be\n // used as sources.\n v.extend = function(obj) {\n [].slice.call(arguments, 1).forEach(function(source) {\n for (var attr in source) {\n obj[attr] = source[attr];\n }\n });\n return obj;\n };\n\n v.extend(validate, {\n // This is the version of the library as a semver.\n // The toString function will allow it to be coerced into a string\n version: {\n major: 0,\n minor: 12,\n patch: 0,\n metadata: null,\n toString: function() {\n var version = v.format(\"%{major}.%{minor}.%{patch}\", v.version);\n if (!v.isEmpty(v.version.metadata)) {\n version += \"+\" + v.version.metadata;\n }\n return version;\n }\n },\n\n // Below is the dependencies that are used in validate.js\n\n // The constructor of the Promise implementation.\n // If you are using Q.js, RSVP or any other A+ compatible implementation\n // override this attribute to be the constructor of that promise.\n // Since jQuery promises aren't A+ compatible they won't work.\n Promise: typeof Promise !== \"undefined\" ? Promise : /* istanbul ignore next */ null,\n\n EMPTY_STRING_REGEXP: /^\\s*$/,\n\n // Runs the validators specified by the constraints object.\n // Will return an array of the format:\n // [{attribute: \"\", error: \"\"}, ...]\n runValidations: function(attributes, constraints, options) {\n var results = []\n , attr\n , validatorName\n , value\n , validators\n , validator\n , validatorOptions\n , error;\n\n if (v.isDomElement(attributes) || v.isJqueryElement(attributes)) {\n attributes = v.collectFormValues(attributes);\n }\n\n // Loops through each constraints, finds the correct validator and run it.\n for (attr in constraints) {\n value = v.getDeepObjectValue(attributes, attr);\n // This allows the constraints for an attribute to be a function.\n // The function will be called with the value, attribute name, the complete dict of\n // attributes as well as the options and constraints passed in.\n // This is useful when you want to have different\n // validations depending on the attribute value.\n validators = v.result(constraints[attr], value, attributes, attr, options, constraints);\n\n for (validatorName in validators) {\n validator = v.validators[validatorName];\n\n if (!validator) {\n error = v.format(\"Unknown validator %{name}\", {name: validatorName});\n throw new Error(error);\n }\n\n validatorOptions = validators[validatorName];\n // This allows the options to be a function. The function will be\n // called with the value, attribute name, the complete dict of\n // attributes as well as the options and constraints passed in.\n // This is useful when you want to have different\n // validations depending on the attribute value.\n validatorOptions = v.result(validatorOptions, value, attributes, attr, options, constraints);\n if (!validatorOptions) {\n continue;\n }\n results.push({\n attribute: attr,\n value: value,\n validator: validatorName,\n globalOptions: options,\n attributes: attributes,\n options: validatorOptions,\n error: validator.call(validator,\n value,\n validatorOptions,\n attr,\n attributes,\n options)\n });\n }\n }\n\n return results;\n },\n\n // Takes the output from runValidations and converts it to the correct\n // output format.\n processValidationResults: function(errors, options) {\n errors = v.pruneEmptyErrors(errors, options);\n errors = v.expandMultipleErrors(errors, options);\n errors = v.convertErrorMessages(errors, options);\n\n var format = options.format || \"grouped\";\n\n if (typeof v.formatters[format] === 'function') {\n errors = v.formatters[format](errors);\n } else {\n throw new Error(v.format(\"Unknown format %{format}\", options));\n }\n\n return v.isEmpty(errors) ? undefined : errors;\n },\n\n // Runs the validations with support for promises.\n // This function will return a promise that is settled when all the\n // validation promises have been completed.\n // It can be called even if no validations returned a promise.\n async: function(attributes, constraints, options) {\n options = v.extend({}, v.async.options, options);\n\n var WrapErrors = options.wrapErrors || function(errors) {\n return errors;\n };\n\n // Removes unknown attributes\n if (options.cleanAttributes !== false) {\n attributes = v.cleanAttributes(attributes, constraints);\n }\n\n var results = v.runValidations(attributes, constraints, options);\n\n return new v.Promise(function(resolve, reject) {\n v.waitForResults(results).then(function() {\n var errors = v.processValidationResults(results, options);\n if (errors) {\n reject(new WrapErrors(errors, options, attributes, constraints));\n } else {\n resolve(attributes);\n }\n }, function(err) {\n reject(err);\n });\n });\n },\n\n single: function(value, constraints, options) {\n options = v.extend({}, v.single.options, options, {\n format: \"flat\",\n fullMessages: false\n });\n return v({single: value}, {single: constraints}, options);\n },\n\n // Returns a promise that is resolved when all promises in the results array\n // are settled. The promise returned from this function is always resolved,\n // never rejected.\n // This function modifies the input argument, it replaces the promises\n // with the value returned from the promise.\n waitForResults: function(results) {\n // Create a sequence of all the results starting with a resolved promise.\n return results.reduce(function(memo, result) {\n // If this result isn't a promise skip it in the sequence.\n if (!v.isPromise(result.error)) {\n return memo;\n }\n\n return memo.then(function() {\n return result.error.then(function(error) {\n result.error = error || null;\n });\n });\n }, new v.Promise(function(r) { r(); })); // A resolved promise\n },\n\n // If the given argument is a call: function the and: function return the value\n // otherwise just return the value. Additional arguments will be passed as\n // arguments to the function.\n // Example:\n // ```\n // result('foo') // 'foo'\n // result(Math.max, 1, 2) // 2\n // ```\n result: function(value) {\n var args = [].slice.call(arguments, 1);\n if (typeof value === 'function') {\n value = value.apply(null, args);\n }\n return value;\n },\n\n // Checks if the value is a number. This function does not consider NaN a\n // number like many other `isNumber` functions do.\n isNumber: function(value) {\n return typeof value === 'number' && !isNaN(value);\n },\n\n // Returns false if the object is not a function\n isFunction: function(value) {\n return typeof value === 'function';\n },\n\n // A simple check to verify that the value is an integer. Uses `isNumber`\n // and a simple modulo check.\n isInteger: function(value) {\n return v.isNumber(value) && value % 1 === 0;\n },\n\n // Checks if the value is a boolean\n isBoolean: function(value) {\n return typeof value === 'boolean';\n },\n\n // Uses the `Object` function to check if the given argument is an object.\n isObject: function(obj) {\n return obj === Object(obj);\n },\n\n // Simply checks if the object is an instance of a date\n isDate: function(obj) {\n return obj instanceof Date;\n },\n\n // Returns false if the object is `null` of `undefined`\n isDefined: function(obj) {\n return obj !== null && obj !== undefined;\n },\n\n // Checks if the given argument is a promise. Anything with a `then`\n // function is considered a promise.\n isPromise: function(p) {\n return !!p && v.isFunction(p.then);\n },\n\n isJqueryElement: function(o) {\n return o && v.isString(o.jquery);\n },\n\n isDomElement: function(o) {\n if (!o) {\n return false;\n }\n\n if (!o.querySelectorAll || !o.querySelector) {\n return false;\n }\n\n if (v.isObject(document) && o === document) {\n return true;\n }\n\n // http://stackoverflow.com/a/384380/699304\n /* istanbul ignore else */\n if (typeof HTMLElement === \"object\") {\n return o instanceof HTMLElement;\n } else {\n return o &&\n typeof o === \"object\" &&\n o !== null &&\n o.nodeType === 1 &&\n typeof o.nodeName === \"string\";\n }\n },\n\n isEmpty: function(value) {\n var attr;\n\n // Null and undefined are empty\n if (!v.isDefined(value)) {\n return true;\n }\n\n // functions are non empty\n if (v.isFunction(value)) {\n return false;\n }\n\n // Whitespace only strings are empty\n if (v.isString(value)) {\n return v.EMPTY_STRING_REGEXP.test(value);\n }\n\n // For arrays we use the length property\n if (v.isArray(value)) {\n return value.length === 0;\n }\n\n // Dates have no attributes but aren't empty\n if (v.isDate(value)) {\n return false;\n }\n\n // If we find at least one property we consider it non empty\n if (v.isObject(value)) {\n for (attr in value) {\n return false;\n }\n return true;\n }\n\n return false;\n },\n\n // Formats the specified strings with the given values like so:\n // ```\n // format(\"Foo: %{foo}\", {foo: \"bar\"}) // \"Foo bar\"\n // ```\n // If you want to write %{...} without having it replaced simply\n // prefix it with % like this `Foo: %%{foo}` and it will be returned\n // as `\"Foo: %{foo}\"`\n format: v.extend(function(str, vals) {\n if (!v.isString(str)) {\n return str;\n }\n return str.replace(v.format.FORMAT_REGEXP, function(m0, m1, m2) {\n if (m1 === '%') {\n return \"%{\" + m2 + \"}\";\n } else {\n return String(vals[m2]);\n }\n });\n }, {\n // Finds %{key} style patterns in the given string\n FORMAT_REGEXP: /(%?)%\\{([^\\}]+)\\}/g\n }),\n\n // \"Prettifies\" the given string.\n // Prettifying means replacing [.\\_-] with spaces as well as splitting\n // camel case words.\n prettify: function(str) {\n if (v.isNumber(str)) {\n // If there are more than 2 decimals round it to two\n if ((str * 100) % 1 === 0) {\n return \"\" + str;\n } else {\n return parseFloat(Math.round(str * 100) / 100).toFixed(2);\n }\n }\n\n if (v.isArray(str)) {\n return str.map(function(s) { return v.prettify(s); }).join(\", \");\n }\n\n if (v.isObject(str)) {\n return str.toString();\n }\n\n // Ensure the string is actually a string\n str = \"\" + str;\n\n return str\n // Splits keys separated by periods\n .replace(/([^\\s])\\.([^\\s])/g, '$1 $2')\n // Removes backslashes\n .replace(/\\\\+/g, '')\n // Replaces - and - with space\n .replace(/[_-]/g, ' ')\n // Splits camel cased words\n .replace(/([a-z])([A-Z])/g, function(m0, m1, m2) {\n return \"\" + m1 + \" \" + m2.toLowerCase();\n })\n .toLowerCase();\n },\n\n stringifyValue: function(value, options) {\n var prettify = options && options.prettify || v.prettify;\n return prettify(value);\n },\n\n isString: function(value) {\n return typeof value === 'string';\n },\n\n isArray: function(value) {\n return {}.toString.call(value) === '[object Array]';\n },\n\n // Checks if the object is a hash, which is equivalent to an object that\n // is neither an array nor a function.\n isHash: function(value) {\n return v.isObject(value) && !v.isArray(value) && !v.isFunction(value);\n },\n\n contains: function(obj, value) {\n if (!v.isDefined(obj)) {\n return false;\n }\n if (v.isArray(obj)) {\n return obj.indexOf(value) !== -1;\n }\n return value in obj;\n },\n\n unique: function(array) {\n if (!v.isArray(array)) {\n return array;\n }\n return array.filter(function(el, index, array) {\n return array.indexOf(el) == index;\n });\n },\n\n forEachKeyInKeypath: function(object, keypath, callback) {\n if (!v.isString(keypath)) {\n return undefined;\n }\n\n var key = \"\"\n , i\n , escape = false;\n\n for (i = 0; i < keypath.length; ++i) {\n switch (keypath[i]) {\n case '.':\n if (escape) {\n escape = false;\n key += '.';\n } else {\n object = callback(object, key, false);\n key = \"\";\n }\n break;\n\n case '\\\\':\n if (escape) {\n escape = false;\n key += '\\\\';\n } else {\n escape = true;\n }\n break;\n\n default:\n escape = false;\n key += keypath[i];\n break;\n }\n }\n\n return callback(object, key, true);\n },\n\n getDeepObjectValue: function(obj, keypath) {\n if (!v.isObject(obj)) {\n return undefined;\n }\n\n return v.forEachKeyInKeypath(obj, keypath, function(obj, key) {\n if (v.isObject(obj)) {\n return obj[key];\n }\n });\n },\n\n // This returns an object with all the values of the form.\n // It uses the input name as key and the value as value\n // So for example this:\n // \n // would return:\n // {email: \"foo@bar.com\"}\n collectFormValues: function(form, options) {\n var values = {}\n , i\n , j\n , input\n , inputs\n , option\n , value;\n\n if (v.isJqueryElement(form)) {\n form = form[0];\n }\n\n if (!form) {\n return values;\n }\n\n options = options || {};\n\n inputs = form.querySelectorAll(\"input[name], textarea[name]\");\n for (i = 0; i < inputs.length; ++i) {\n input = inputs.item(i);\n\n if (v.isDefined(input.getAttribute(\"data-ignored\"))) {\n continue;\n }\n\n name = input.name.replace(/\\./g, \"\\\\\\\\.\");\n value = v.sanitizeFormValue(input.value, options);\n if (input.type === \"number\") {\n value = value ? +value : null;\n } else if (input.type === \"checkbox\") {\n if (input.attributes.value) {\n if (!input.checked) {\n value = values[name] || null;\n }\n } else {\n value = input.checked;\n }\n } else if (input.type === \"radio\") {\n if (!input.checked) {\n value = values[name] || null;\n }\n }\n values[name] = value;\n }\n\n inputs = form.querySelectorAll(\"select[name]\");\n for (i = 0; i < inputs.length; ++i) {\n input = inputs.item(i);\n if (v.isDefined(input.getAttribute(\"data-ignored\"))) {\n continue;\n }\n\n if (input.multiple) {\n value = [];\n for (j in input.options) {\n option = input.options[j];\n if (option && option.selected) {\n value.push(v.sanitizeFormValue(option.value, options));\n }\n }\n } else {\n var _val = typeof input.options[input.selectedIndex] !== 'undefined' ? input.options[input.selectedIndex].value : '';\n value = v.sanitizeFormValue(_val, options);\n }\n values[input.name] = value;\n }\n\n return values;\n },\n\n sanitizeFormValue: function(value, options) {\n if (options.trim && v.isString(value)) {\n value = value.trim();\n }\n\n if (options.nullify !== false && value === \"\") {\n return null;\n }\n return value;\n },\n\n capitalize: function(str) {\n if (!v.isString(str)) {\n return str;\n }\n return str[0].toUpperCase() + str.slice(1);\n },\n\n // Remove all errors who's error attribute is empty (null or undefined)\n pruneEmptyErrors: function(errors) {\n return errors.filter(function(error) {\n return !v.isEmpty(error.error);\n });\n },\n\n // In\n // [{error: [\"err1\", \"err2\"], ...}]\n // Out\n // [{error: \"err1\", ...}, {error: \"err2\", ...}]\n //\n // All attributes in an error with multiple messages are duplicated\n // when expanding the errors.\n expandMultipleErrors: function(errors) {\n var ret = [];\n errors.forEach(function(error) {\n // Removes errors without a message\n if (v.isArray(error.error)) {\n error.error.forEach(function(msg) {\n ret.push(v.extend({}, error, {error: msg}));\n });\n } else {\n ret.push(error);\n }\n });\n return ret;\n },\n\n // Converts the error mesages by prepending the attribute name unless the\n // message is prefixed by ^\n convertErrorMessages: function(errors, options) {\n options = options || {};\n\n var ret = []\n , prettify = options.prettify || v.prettify;\n errors.forEach(function(errorInfo) {\n var error = v.result(errorInfo.error,\n errorInfo.value,\n errorInfo.attribute,\n errorInfo.options,\n errorInfo.attributes,\n errorInfo.globalOptions);\n\n if (!v.isString(error)) {\n ret.push(errorInfo);\n return;\n }\n\n if (error[0] === '^') {\n error = error.slice(1);\n } else if (options.fullMessages !== false) {\n error = v.capitalize(prettify(errorInfo.attribute)) + \" \" + error;\n }\n error = error.replace(/\\\\\\^/g, \"^\");\n error = v.format(error, {\n value: v.stringifyValue(errorInfo.value, options)\n });\n ret.push(v.extend({}, errorInfo, {error: error}));\n });\n return ret;\n },\n\n // In:\n // [{attribute: \"\", ...}]\n // Out:\n // {\"\": [{attribute: \"\", ...}]}\n groupErrorsByAttribute: function(errors) {\n var ret = {};\n errors.forEach(function(error) {\n var list = ret[error.attribute];\n if (list) {\n list.push(error);\n } else {\n ret[error.attribute] = [error];\n }\n });\n return ret;\n },\n\n // In:\n // [{error: \"\", ...}, {error: \"\", ...}]\n // Out:\n // [\"\", \"\"]\n flattenErrorsToArray: function(errors) {\n return errors\n .map(function(error) { return error.error; })\n .filter(function(value, index, self) {\n return self.indexOf(value) === index;\n });\n },\n\n cleanAttributes: function(attributes, whitelist) {\n function whitelistCreator(obj, key, last) {\n if (v.isObject(obj[key])) {\n return obj[key];\n }\n return (obj[key] = last ? true : {});\n }\n\n function buildObjectWhitelist(whitelist) {\n var ow = {}\n , lastObject\n , attr;\n for (attr in whitelist) {\n if (!whitelist[attr]) {\n continue;\n }\n v.forEachKeyInKeypath(ow, attr, whitelistCreator);\n }\n return ow;\n }\n\n function cleanRecursive(attributes, whitelist) {\n if (!v.isObject(attributes)) {\n return attributes;\n }\n\n var ret = v.extend({}, attributes)\n , w\n , attribute;\n\n for (attribute in attributes) {\n w = whitelist[attribute];\n\n if (v.isObject(w)) {\n ret[attribute] = cleanRecursive(ret[attribute], w);\n } else if (!w) {\n delete ret[attribute];\n }\n }\n return ret;\n }\n\n if (!v.isObject(whitelist) || !v.isObject(attributes)) {\n return {};\n }\n\n whitelist = buildObjectWhitelist(whitelist);\n return cleanRecursive(attributes, whitelist);\n },\n\n exposeModule: function(validate, root, exports, module, define) {\n if (exports) {\n if (module && module.exports) {\n exports = module.exports = validate;\n }\n exports.validate = validate;\n } else {\n root.validate = validate;\n if (validate.isFunction(define) && define.amd) {\n define([], function () { return validate; });\n }\n }\n },\n\n warn: function(msg) {\n if (typeof console !== \"undefined\" && console.warn) {\n console.warn(\"[validate.js] \" + msg);\n }\n },\n\n error: function(msg) {\n if (typeof console !== \"undefined\" && console.error) {\n console.error(\"[validate.js] \" + msg);\n }\n }\n });\n\n validate.validators = {\n // Presence validates that the value isn't empty\n presence: function(value, options) {\n options = v.extend({}, this.options, options);\n if (options.allowEmpty !== false ? !v.isDefined(value) : v.isEmpty(value)) {\n return options.message || this.message || \"can't be blank\";\n }\n },\n length: function(value, options, attribute) {\n // Empty values are allowed\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var is = options.is\n , maximum = options.maximum\n , minimum = options.minimum\n , tokenizer = options.tokenizer || function(val) { return val; }\n , err\n , errors = [];\n\n value = tokenizer(value);\n var length = value.length;\n if(!v.isNumber(length)) {\n v.error(v.format(\"Attribute %{attr} has a non numeric value for `length`\", {attr: attribute}));\n return options.message || this.notValid || \"has an incorrect length\";\n }\n\n // Is checks\n if (v.isNumber(is) && length !== is) {\n err = options.wrongLength ||\n this.wrongLength ||\n \"is the wrong length (should be %{count} characters)\";\n errors.push(v.format(err, {count: is}));\n }\n\n if (v.isNumber(minimum) && length < minimum) {\n err = options.tooShort ||\n this.tooShort ||\n \"is too short (minimum is %{count} characters)\";\n errors.push(v.format(err, {count: minimum}));\n }\n\n if (v.isNumber(maximum) && length > maximum) {\n err = options.tooLong ||\n this.tooLong ||\n \"is too long (maximum is %{count} characters)\";\n errors.push(v.format(err, {count: maximum}));\n }\n\n if (errors.length > 0) {\n return options.message || errors;\n }\n },\n numericality: function(value, options, attribute, attributes, globalOptions) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var errors = []\n , name\n , count\n , checks = {\n greaterThan: function(v, c) { return v > c; },\n greaterThanOrEqualTo: function(v, c) { return v >= c; },\n equalTo: function(v, c) { return v === c; },\n lessThan: function(v, c) { return v < c; },\n lessThanOrEqualTo: function(v, c) { return v <= c; },\n divisibleBy: function(v, c) { return v % c === 0; }\n }\n , prettify = options.prettify ||\n (globalOptions && globalOptions.prettify) ||\n v.prettify;\n\n // Strict will check that it is a valid looking number\n if (v.isString(value) && options.strict) {\n var pattern = \"^-?(0|[1-9]\\\\d*)\";\n if (!options.onlyInteger) {\n pattern += \"(\\\\.\\\\d+)?\";\n }\n pattern += \"$\";\n\n if (!(new RegExp(pattern).test(value))) {\n return options.message ||\n options.notValid ||\n this.notValid ||\n this.message ||\n \"must be a valid number\";\n }\n }\n\n // Coerce the value to a number unless we're being strict.\n if (options.noStrings !== true && v.isString(value) && !v.isEmpty(value)) {\n value = +value;\n }\n\n // If it's not a number we shouldn't continue since it will compare it.\n if (!v.isNumber(value)) {\n return options.message ||\n options.notValid ||\n this.notValid ||\n this.message ||\n \"is not a number\";\n }\n\n // Same logic as above, sort of. Don't bother with comparisons if this\n // doesn't pass.\n if (options.onlyInteger && !v.isInteger(value)) {\n return options.message ||\n options.notInteger ||\n this.notInteger ||\n this.message ||\n \"must be an integer\";\n }\n\n for (name in checks) {\n count = options[name];\n if (v.isNumber(count) && !checks[name](value, count)) {\n // This picks the default message if specified\n // For example the greaterThan check uses the message from\n // this.notGreaterThan so we capitalize the name and prepend \"not\"\n var key = \"not\" + v.capitalize(name);\n var msg = options[key] ||\n this[key] ||\n this.message ||\n \"must be %{type} %{count}\";\n\n errors.push(v.format(msg, {\n count: count,\n type: prettify(name)\n }));\n }\n }\n\n if (options.odd && value % 2 !== 1) {\n errors.push(options.notOdd ||\n this.notOdd ||\n this.message ||\n \"must be odd\");\n }\n if (options.even && value % 2 !== 0) {\n errors.push(options.notEven ||\n this.notEven ||\n this.message ||\n \"must be even\");\n }\n\n if (errors.length) {\n return options.message || errors;\n }\n },\n datetime: v.extend(function(value, options) {\n if (!v.isFunction(this.parse) || !v.isFunction(this.format)) {\n throw new Error(\"Both the parse and format functions needs to be set to use the datetime/date validator\");\n }\n\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var err\n , errors = []\n , earliest = options.earliest ? this.parse(options.earliest, options) : NaN\n , latest = options.latest ? this.parse(options.latest, options) : NaN;\n\n value = this.parse(value, options);\n\n // 86400000 is the number of milliseconds in a day, this is used to remove\n // the time from the date\n if (isNaN(value) || options.dateOnly && value % 86400000 !== 0) {\n err = options.notValid ||\n options.message ||\n this.notValid ||\n \"must be a valid date\";\n return v.format(err, {value: arguments[0]});\n }\n\n if (!isNaN(earliest) && value < earliest) {\n err = options.tooEarly ||\n options.message ||\n this.tooEarly ||\n \"must be no earlier than %{date}\";\n err = v.format(err, {\n value: this.format(value, options),\n date: this.format(earliest, options)\n });\n errors.push(err);\n }\n\n if (!isNaN(latest) && value > latest) {\n err = options.tooLate ||\n options.message ||\n this.tooLate ||\n \"must be no later than %{date}\";\n err = v.format(err, {\n date: this.format(latest, options),\n value: this.format(value, options)\n });\n errors.push(err);\n }\n\n if (errors.length) {\n return v.unique(errors);\n }\n }, {\n parse: null,\n format: null\n }),\n date: function(value, options) {\n options = v.extend({}, options, {dateOnly: true});\n return v.validators.datetime.call(v.validators.datetime, value, options);\n },\n format: function(value, options) {\n if (v.isString(options) || (options instanceof RegExp)) {\n options = {pattern: options};\n }\n\n options = v.extend({}, this.options, options);\n\n var message = options.message || this.message || \"is invalid\"\n , pattern = options.pattern\n , match;\n\n // Empty values are allowed\n if (!v.isDefined(value)) {\n return;\n }\n if (!v.isString(value)) {\n return message;\n }\n\n if (v.isString(pattern)) {\n pattern = new RegExp(options.pattern, options.flags);\n }\n match = pattern.exec(value);\n if (!match || match[0].length != value.length) {\n return message;\n }\n },\n inclusion: function(value, options) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (v.isArray(options)) {\n options = {within: options};\n }\n options = v.extend({}, this.options, options);\n if (v.contains(options.within, value)) {\n return;\n }\n var message = options.message ||\n this.message ||\n \"^%{value} is not included in the list\";\n return v.format(message, {value: value});\n },\n exclusion: function(value, options) {\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (v.isArray(options)) {\n options = {within: options};\n }\n options = v.extend({}, this.options, options);\n if (!v.contains(options.within, value)) {\n return;\n }\n var message = options.message || this.message || \"^%{value} is restricted\";\n return v.format(message, {value: value});\n },\n email: v.extend(function(value, options) {\n options = v.extend({}, this.options, options);\n var message = options.message || this.message || \"is not a valid email\";\n // Empty values are fine\n if (!v.isDefined(value)) {\n return;\n }\n if (!v.isString(value)) {\n return message;\n }\n if (!this.PATTERN.exec(value)) {\n return message;\n }\n }, {\n PATTERN: /^[a-z0-9\\u007F-\\uffff!#$%&'*+\\/=?^_`{|}~-]+(?:\\.[a-z0-9\\u007F-\\uffff!#$%&'*+\\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z]{2,}$/i\n }),\n equality: function(value, options, attribute, attributes, globalOptions) {\n if (!v.isDefined(value)) {\n return;\n }\n\n if (v.isString(options)) {\n options = {attribute: options};\n }\n options = v.extend({}, this.options, options);\n var message = options.message ||\n this.message ||\n \"is not equal to %{attribute}\";\n\n if (v.isEmpty(options.attribute) || !v.isString(options.attribute)) {\n throw new Error(\"The attribute must be a non empty string\");\n }\n\n var otherValue = v.getDeepObjectValue(attributes, options.attribute)\n , comparator = options.comparator || function(v1, v2) {\n return v1 === v2;\n }\n , prettify = options.prettify ||\n (globalOptions && globalOptions.prettify) ||\n v.prettify;\n\n if (!comparator(value, otherValue, options, attribute, attributes)) {\n return v.format(message, {attribute: prettify(options.attribute)});\n }\n },\n\n // A URL validator that is used to validate URLs with the ability to\n // restrict schemes and some domains.\n url: function(value, options) {\n if (!v.isDefined(value)) {\n return;\n }\n\n options = v.extend({}, this.options, options);\n\n var message = options.message || this.message || \"is not a valid url\"\n , schemes = options.schemes || this.schemes || ['http', 'https']\n , allowLocal = options.allowLocal || this.allowLocal || false;\n\n if (!v.isString(value)) {\n return message;\n }\n\n // https://gist.github.com/dperini/729294\n var regex =\n \"^\" +\n // protocol identifier\n \"(?:(?:\" + schemes.join(\"|\") + \")://)\" +\n // user:pass authentication\n \"(?:\\\\S+(?::\\\\S*)?@)?\" +\n \"(?:\";\n\n var tld = \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\";\n\n if (allowLocal) {\n tld += \"?\";\n } else {\n regex +=\n // IP address exclusion\n // private & local networks\n \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" +\n \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" +\n \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\";\n }\n\n regex +=\n // IP address dotted notation octets\n // excludes loopback network 0.0.0.0\n // excludes reserved space >= 224.0.0.0\n // excludes network & broacast addresses\n // (first & last IP address of each class)\n \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" +\n \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" +\n \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" +\n \"|\" +\n // host name\n \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\" +\n // domain name\n \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\" +\n tld +\n \")\" +\n // port number\n \"(?::\\\\d{2,5})?\" +\n // resource path\n \"(?:[/?#]\\\\S*)?\" +\n \"$\";\n\n var PATTERN = new RegExp(regex, 'i');\n if (!PATTERN.exec(value)) {\n return message;\n }\n }\n };\n\n validate.formatters = {\n detailed: function(errors) {return errors;},\n flat: v.flattenErrorsToArray,\n grouped: function(errors) {\n var attr;\n\n errors = v.groupErrorsByAttribute(errors);\n for (attr in errors) {\n errors[attr] = v.flattenErrorsToArray(errors[attr]);\n }\n return errors;\n },\n constraint: function(errors) {\n var attr;\n errors = v.groupErrorsByAttribute(errors);\n for (attr in errors) {\n errors[attr] = errors[attr].map(function(result) {\n return result.validator;\n }).sort();\n }\n return errors;\n }\n };\n\n validate.exposeModule(validate, this, exports, module, define);\n}).call(this,\n typeof exports !== 'undefined' ? /* istanbul ignore next */ exports : null,\n typeof module !== 'undefined' ? /* istanbul ignore next */ module : null,\n typeof define !== 'undefined' ? /* istanbul ignore next */ define : null);\n","module.exports = true;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","/**\n * Copyright (C) 2018 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n// main bundle for the swh-web/browse application\n\nimport './browse.css';\nimport './breadcrumbs.css';\nimport './content.css';\nimport './snapshot-navigation.css';\n\nexport * from './snapshot-navigation';\nexport * from './origin-search';\nexport * from './browse-utils';\nexport * from './swh-ids-utils';\nexport * from './origin-save';\n","/*\n tabSlideOUt v2.4\n\n Originally by William Paoli: http://code.google.com/p/tab-slide-out\n Maintained by Michael Fielding: https://github.com/hawk-ip/jquery.tabSlideOut.js\n License: GPL v3.0\n\n To use this you need an element for the tab panel content ('panel'), and inside it an element for the\n tab which will stick out from the window edge and be clickable ('handle'). By default the selector\n for handles is '.handle'.\n\n example HTML:\n\n
Click meHello World
\n\n example JavaScript (puts the tab on the right, and opens it on hover rather than click):\n\n $('#my-tab').tabSlideOut( {'tabLocation':'right','action':'hover'} );\n\n Style the tab panel and handle using CSS. Add the class ui-slideouttab-handle-rounded to handles to give them\n rounded outer corners.\n\n You can use some methods to programmatically interact with tabs. Methods except 'isOpen' are chainable.\n\n $('#my-tab').tabSlideOut('isOpen'); // return true or false\n $('#my-tab').tabSlideOut('open'); // opens it\n $('#my-tab').tabSlideOut('close'); // closes it\n $('#my-tab').tabSlideOut('toggle'); // toggles it\n $('#my-tab').tabSlideOut('bounce'); // bounces the tab\n\n You can also send JQuery events to initiate actions:\n\n $('#my-tab').trigger('open'); // opens it\n $('#my-tab').trigger('close'); // closes it\n $('#my-tab').trigger('toggle'); // toggles it\n $('#my-tab').trigger('bounce'); // bounces the tab\n\n Three events are defined and can be caught when tabs open and close:\n\n $(document).on('slideouttabopen slideouttabclose slideouttabbounce',function(event){\n var $panel = $(event.target);\n var eventType = event.type;\n // your code here\n });\n\n Features are demonstrated on the related demo page.\n*/\n(function($) {\n $.fn.tabSlideOut = function(callerSettings) {\n\n /**\n * @param node Element to get the height of.\n * @return string e.g. '123px'\n */\n function heightAsString(node) {\n return parseInt(node.outerHeight() + 1, 10) + 'px';\n }\n\n /*\n * Get the width of the given border, in pixels.\n *\n * @param node element\n * @param string edge\n * @returns int\n */\n function borderWidth(element, edge) {\n return parseInt(element.css('border-' + edge + '-width'), 10);\n }\n\n /**\n * Return the desired height of the panel to maintain both offsets.\n */\n function calculatePanelSize() {\n var available = $(window).height();\n if (edge === 'top' || edge === 'bottom') {\n available = $(window).width();\n }\n return available - parseInt(settings.otherOffset) - parseInt(settings.offset);\n }\n\n var panel = this;\n\n /**\n * True if the tab is open.\n *\n * @returns boolean\n */\n function isOpen() {\n return panel.hasClass('ui-slideouttab-open');\n }\n\n if (typeof callerSettings === 'string') {\n // param is a string, use command mode\n switch (callerSettings) {\n case 'open':\n this.trigger('open');\n return this;\n case 'close':\n this.trigger('close');\n return this;\n case 'isOpen':\n return isOpen();\n case 'toggle':\n this.trigger('toggle');\n return this;\n case 'bounce':\n this.trigger('bounce');\n return this;\n default:\n throw new Error('Invalid tabSlideOut command');\n }\n } else {\n // param is an object, it's initialisation mode\n var settings = $.extend({\n tabLocation: 'left', // left, right, top or bottom\n tabHandle: '.handle', // JQuery selector for the tab, can use any JQuery selector\n action: 'click', // action which will open the panel, e.g. 'hover'\n hoverTimeout: 5000, // ms to keep tab open after no longer hovered - only if action = 'hover'\n offset: '200px', // panel dist from top or left (bottom or right if offsetReverse is true)\n offsetReverse: false, // if true, panel is offset from right or bottom of window instead of left or top\n otherOffset: null, // if set, panel size is also set to maintain this dist from bottom or right of view port (top or left if offsetReverse)\n handleOffset: null, // e.g. '10px'. If null, detects panel border to align handle nicely on edge\n handleOffsetReverse: false, // if true, handle is offset from right or bottom of panel instead of left or top\n bounceDistance: '50px', // how far bounce event will move everything\n bounceTimes: 4, // how many bounces when 'bounce' is called\n bounceSpeed: 300, // time to animate bounces\n tabImage: null, // optional image to show in the tab\n tabImageHeight: null, // optional IE8 and lower only, else autodetected size\n tabImageWidth: null, // optional IE8 and lower only, else autodetected size\n onLoadSlideOut: false, // slide out after DOM load\n clickScreenToClose: true, // close tab when somewhere outside the tab is clicked\n clickScreenToCloseFilters: ['.ui-slideouttab-panel'], // if click target or parents match any of these, click won't close this tab\n onOpen: function() {}, // handler called after opening\n onClose: function() {} // handler called after closing\n }, callerSettings || {});\n\n var edge = settings.tabLocation;\n var handle = settings.tabHandle = $(settings.tabHandle, panel);\n\n panel.addClass('ui-slideouttab-panel')\n .addClass('ui-slideouttab-' + edge);\n if (settings.offsetReverse) {\n panel.addClass('ui-slideouttab-panel-reverse');\n }\n handle.addClass('ui-slideouttab-handle'); // need this to find it later\n if (settings.handleOffsetReverse) {\n handle.addClass('ui-slideouttab-handle-reverse');\n }\n settings.toggleButton = $(settings.toggleButton);\n\n // apply an image to the tab if one is defined\n if (settings.tabImage !== null) {\n var imageHeight = 0;\n var imageWidth = 0;\n if (settings.tabImageHeight !== null && settings.tabImageWidth !== null) {\n imageHeight = settings.tabImageHeight;\n imageWidth = settings.tabImageWidth;\n } else {\n var img = new Image();\n img.src = settings.tabImage;\n imageHeight = img.naturalHeight;\n imageWidth = img.naturalWidth;\n }\n\n handle.addClass('ui-slideouttab-handle-image');\n handle.css({\n 'background': 'url(' + settings.tabImage + ') no-repeat',\n 'width': imageWidth,\n 'height': imageHeight\n });\n }\n\n // determine whether panel and handle are positioned from top, bottom, left, or right\n if (edge === 'top' || edge === 'bottom') {\n settings.panelOffsetFrom =\n settings.offsetReverse ? 'right' : 'left';\n settings.handleOffsetFrom =\n settings.handleOffsetReverse ? 'right' : 'left';\n } else {\n settings.panelOffsetFrom =\n settings.offsetReverse ? 'bottom' : 'top';\n settings.handleOffsetFrom =\n settings.handleOffsetReverse ? 'bottom' : 'top';\n }\n\n /* autodetect the correct offset for the handle using appropriate panel border */\n if (settings.handleOffset === null) {\n settings.handleOffset = '-' + borderWidth(panel, settings.handleOffsetFrom) + 'px';\n }\n\n if (edge === 'top' || edge === 'bottom') {\n /* set left or right edges */\n panel.css(settings.panelOffsetFrom, settings.offset);\n handle.css(settings.handleOffsetFrom, settings.handleOffset);\n\n // possibly drive the panel size\n if (settings.otherOffset !== null) {\n panel.css('width', calculatePanelSize() + 'px');\n // install resize handler\n $(window).resize(function() {\n panel.css('width', calculatePanelSize() + 'px');\n });\n }\n\n if (edge === 'top') {\n handle.css({'bottom': '-' + heightAsString(handle)});\n } else {\n handle.css({'top': '-' + heightAsString(handle)});\n }\n } else {\n /* set top or bottom edge */\n panel.css(settings.panelOffsetFrom, settings.offset);\n handle.css(settings.handleOffsetFrom, settings.handleOffset);\n\n // possibly drive the panel size\n if (settings.otherOffset !== null) {\n panel.css('height', calculatePanelSize() + 'px');\n // install resize handler\n $(window).resize(function() {\n panel.css('height', calculatePanelSize() + 'px');\n });\n }\n\n if (edge === 'left') {\n handle.css({'right': '0'});\n } else {\n handle.css({'left': '0'});\n }\n }\n\n handle.click(function(event) {\n event.preventDefault();\n });\n settings.toggleButton.click(function(event) {\n event.preventDefault();\n });\n\n // now everything is set up, add the class which enables CSS tab animation\n panel.addClass('ui-slideouttab-ready');\n\n var close = function() {\n panel.removeClass('ui-slideouttab-open').trigger('slideouttabclose');\n settings.onClose();\n };\n\n var open = function() {\n panel.addClass('ui-slideouttab-open').trigger('slideouttabopen');\n settings.onOpen();\n };\n\n var toggle = function() {\n if (isOpen()) {\n close();\n } else {\n open();\n }\n };\n\n // animate the tab in and out when 'bounced'\n var moveIn = [];\n moveIn[edge] = '-=' + settings.bounceDistance;\n var moveOut = [];\n moveOut[edge] = '+=' + settings.bounceDistance;\n\n var bounceIn = function() {\n var temp = panel;\n for (var i = 0; i < settings.bounceTimes; i++) {\n temp = temp.animate(moveIn, settings.bounceSpeed)\n .animate(moveOut, settings.bounceSpeed);\n }\n panel.trigger('slideouttabbounce');\n };\n\n var bounceOut = function() {\n var temp = panel;\n for (var i = 0; i < settings.bounceTimes; i++) {\n temp = temp.animate(moveOut, settings.bounceSpeed)\n .animate(moveIn, settings.bounceSpeed);\n }\n panel.trigger('slideouttabbounce');\n };\n\n // handle clicks in rest of document to close tabs if they're open\n if (settings.clickScreenToClose) {\n // install a click handler to close tab if anywhere outside the tab is clicked,\n // that isn't filtered out by the configured filters\n $(document).click(function(event) {\n // first check the tab is open and the click isn't inside it\n if (isOpen() && !panel[0].contains(event.target)) {\n // something other than this panel was clicked\n var clicked = $(event.target);\n\n // check to see if any filters return true\n for (var i = 0; i < settings.clickScreenToCloseFilters.length; i++) {\n var filter = settings.clickScreenToCloseFilters[i];\n if (typeof filter === 'string') {\n // checked clicked element itself, and all parents\n if (clicked.is(filter) || clicked.parents().is(filter)) {\n return; // don't close the tab\n }\n } else if (typeof filter === 'function') {\n // call custom filter\n if (filter.call(panel, event)) {\n return;\n } // don't close the tab\n }\n }\n\n // we haven't returned true from any filter, so close the tab\n close();\n }\n });\n };\n\n // choose which type of action to bind\n if (settings.action === 'click') {\n handle.click(function(event) {\n toggle();\n });\n } else if (settings.action === 'hover') {\n var timer = null;\n panel.hover(\n function() {\n if (!isOpen()) {\n open();\n }\n timer = null; // eliminate the timer, ensure we don't close now\n },\n function() {\n if (isOpen() && timer === null) {\n timer = setTimeout(function() {\n if (timer) {\n close();\n }\n timer = null;\n }, settings.hoverTimeout);\n }\n });\n\n handle.click(function(event) {\n if (isOpen()) {\n close();\n }\n });\n }\n\n if (settings.onLoadSlideOut) {\n open();\n setTimeout(open, 500);\n }\n\n // custom event handlers -------\n panel.on('open', function(event) {\n if (!isOpen()) {\n open();\n }\n });\n panel.on('close', function(event) {\n if (isOpen()) {\n close();\n }\n });\n panel.on('toggle', function(event) {\n toggle();\n });\n panel.on('bounce', function(event) {\n if (isOpen()) {\n bounceIn();\n } else {\n bounceOut();\n }\n });\n\n }\n return this;\n };\n})(jQuery);\n","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n","var anObject = require('./_an-object');\nvar get = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function (it) {\n var iterFn = get(it);\n if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!');\n return anObject(iterFn.call(it));\n};\n","require('../../modules/es6.array.is-array');\nmodule.exports = require('../../modules/_core').Array.isArray;\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n"],"sourceRoot":""} \ No newline at end of file diff --git a/swh/web/static/js/browse.0155e1c4ec3c61116485.js b/swh/web/static/js/browse.d42fd2a4ef72b319809e.js similarity index 94% rename from swh/web/static/js/browse.0155e1c4ec3c61116485.js rename to swh/web/static/js/browse.d42fd2a4ef72b319809e.js index c8706914..dba1e1c9 100644 --- a/swh/web/static/js/browse.0155e1c4ec3c61116485.js +++ b/swh/web/static/js/browse.d42fd2a4ef72b319809e.js @@ -1,18 +1,18 @@ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.browse=e():(t.swh=t.swh||{},t.swh.browse=e())}(window,function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/static/",n(n.s=750)}({104:function(t,e,n){var r=n(61),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},105:function(t,e,n){var r=n(8).document;t.exports=r&&r.documentElement},106:function(t,e,n){var r=n(50),i=n(12)("toStringTag"),o="Arguments"==r(function(){return arguments}());t.exports=function(t){var e,n,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?n:o?r(e):"Object"==(s=r(e))&&"function"==typeof e.callee?"Arguments":s}},11:function(t,e,n){"use strict";function r(t){if(!t.ok)throw t;return t}function i(t){for(var e=0;e>>0||(s.test(n)?16:10))}:r},158:function(t,e,n){var r=n(30),i=n(42),o=n(49),s=n(90),a="["+s+"]",u=RegExp("^"+a+a+"*"),c=RegExp(a+a+"*$"),l=function(t,e,n){var i={},a=o(function(){return!!s[t]()||"​…"!="​…"[t]()}),u=i[t]=a?e(f):s[t];n&&(i[n]=u),r(r.P+r.F*a,"String",i)},f=l.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};t.exports=l},159:function(t,e,n){n(160);for(var r=n(8),i=n(26),o=n(38),s=n(12)("toStringTag"),a="CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,TextTrackList,TouchList".split(","),u=0;u=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},161:function(t,e){t.exports=function(){}},162:function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},163:function(t,e,n){var r=n(50);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},164:function(t,e,n){t.exports=n(26)},165:function(t,e,n){"use strict";var r=n(166),i=n(77),o=n(69),s={};n(26)(s,n(12)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(s,{next:i(1,n)}),o(t,e+" Iterator")}},166:function(t,e,n){var r=n(21),i=n(167),o=n(94),s=n(62)("IE_PROTO"),a=function(){},u=function(){var t,e=n(58)("iframe"),r=o.length;for(e.style.display="none",n(105).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("