├── simulator ├── __init__.py ├── simulator │ ├── __init__.py │ └── models │ │ ├── __init__.py │ │ ├── stationary_object.py │ │ └── orbit.py ├── pyproject.toml ├── imports │ └── cities.csv ├── main.py └── Dockerfile ├── cache_handler ├── __init__.py ├── pyproject.toml ├── Dockerfile ├── data_translator.py └── cache_handler.py ├── web_app ├── demo │ ├── __init__.py │ ├── database │ │ ├── __init__.py │ │ └── models.py │ ├── db_operations.py │ └── data_translator.py ├── static │ ├── assets │ │ ├── libs │ │ │ ├── foundation-sites │ │ │ │ ├── scss │ │ │ │ │ ├── components │ │ │ │ │ │ ├── _flex-video.scss │ │ │ │ │ │ ├── _menu-icon.scss │ │ │ │ │ │ ├── _float.scss │ │ │ │ │ │ ├── _sticky.scss │ │ │ │ │ │ ├── _progress-bar.scss │ │ │ │ │ │ ├── _badge.scss │ │ │ │ │ │ ├── _label.scss │ │ │ │ │ │ ├── _thumbnail.scss │ │ │ │ │ │ ├── _dropdown.scss │ │ │ │ │ │ ├── _title-bar.scss │ │ │ │ │ │ └── _responsive-embed.scss │ │ │ │ │ ├── util │ │ │ │ │ │ ├── _util.scss │ │ │ │ │ │ ├── _direction.scss │ │ │ │ │ │ ├── _selector.scss │ │ │ │ │ │ ├── _typography.scss │ │ │ │ │ │ └── _math.scss │ │ │ │ │ ├── typography │ │ │ │ │ │ ├── _alignment.scss │ │ │ │ │ │ ├── _typography.scss │ │ │ │ │ │ └── _helpers.scss │ │ │ │ │ ├── prototype │ │ │ │ │ │ ├── _box.scss │ │ │ │ │ │ ├── _arrow.scss │ │ │ │ │ │ ├── _border-box.scss │ │ │ │ │ │ ├── _border-none.scss │ │ │ │ │ │ ├── _rotate.scss │ │ │ │ │ │ ├── _shadow.scss │ │ │ │ │ │ ├── _display.scss │ │ │ │ │ │ ├── _text-decoration.scss │ │ │ │ │ │ ├── _text-transformation.scss │ │ │ │ │ │ ├── _rounded.scss │ │ │ │ │ │ ├── _bordered.scss │ │ │ │ │ │ ├── _sizing.scss │ │ │ │ │ │ ├── _prototype.scss │ │ │ │ │ │ ├── _overflow.scss │ │ │ │ │ │ └── _text-utilities.scss │ │ │ │ │ ├── grid │ │ │ │ │ │ ├── _size.scss │ │ │ │ │ │ ├── _grid.scss │ │ │ │ │ │ ├── _layout.scss │ │ │ │ │ │ └── _position.scss │ │ │ │ │ ├── forms │ │ │ │ │ │ ├── _help-text.scss │ │ │ │ │ │ ├── _forms.scss │ │ │ │ │ │ ├── _checkbox.scss │ │ │ │ │ │ ├── _fieldset.scss │ │ │ │ │ │ ├── _label.scss │ │ │ │ │ │ ├── _progress.scss │ │ │ │ │ │ └── _select.scss │ │ │ │ │ └── xy-grid │ │ │ │ │ │ ├── _position.scss │ │ │ │ │ │ ├── _grid.scss │ │ │ │ │ │ ├── _layout.scss │ │ │ │ │ │ ├── _xy-grid.scss │ │ │ │ │ │ ├── _gutters.scss │ │ │ │ │ │ └── _collapse.scss │ │ │ │ ├── assets │ │ │ │ │ ├── foundation.scss │ │ │ │ │ ├── foundation-prototype.scss │ │ │ │ │ ├── foundation-rtl.scss │ │ │ │ │ └── foundation-float.scss │ │ │ │ ├── _vendor │ │ │ │ │ ├── normalize-scss │ │ │ │ │ │ └── sass │ │ │ │ │ │ │ ├── _normalize.scss │ │ │ │ │ │ │ └── normalize │ │ │ │ │ │ │ ├── _import-now.scss │ │ │ │ │ │ │ ├── _variables.scss │ │ │ │ │ │ │ └── _vertical-rhythm.scss │ │ │ │ │ └── sassy-lists │ │ │ │ │ │ └── stylesheets │ │ │ │ │ │ ├── helpers │ │ │ │ │ │ ├── _true.scss │ │ │ │ │ │ └── _missing-dependencies.scss │ │ │ │ │ │ └── functions │ │ │ │ │ │ ├── _to-list.scss │ │ │ │ │ │ ├── _contain.scss │ │ │ │ │ │ ├── _remove.scss │ │ │ │ │ │ ├── _purge.scss │ │ │ │ │ │ └── _replace.scss │ │ │ │ ├── docslink.sh │ │ │ │ ├── js │ │ │ │ │ ├── entries │ │ │ │ │ │ ├── plugins │ │ │ │ │ │ │ ├── foundation.util.box.js │ │ │ │ │ │ │ ├── foundation.abide.js │ │ │ │ │ │ │ ├── foundation.tabs.js │ │ │ │ │ │ │ ├── foundation.util.nest.js │ │ │ │ │ │ │ ├── foundation.orbit.js │ │ │ │ │ │ │ ├── foundation.reveal.js │ │ │ │ │ │ │ ├── foundation.util.timer.js │ │ │ │ │ │ │ ├── foundation.slider.js │ │ │ │ │ │ │ ├── foundation.sticky.js │ │ │ │ │ │ │ ├── foundation.tooltip.js │ │ │ │ │ │ │ ├── foundation.util.touch.js │ │ │ │ │ │ │ ├── foundation.magellan.js │ │ │ │ │ │ │ ├── foundation.toggler.js │ │ │ │ │ │ │ ├── foundation.util.keyboard.js │ │ │ │ │ │ │ ├── foundation.accordion.js │ │ │ │ │ │ │ ├── foundation.drilldown.js │ │ │ │ │ │ │ ├── foundation.dropdown.js │ │ │ │ │ │ │ ├── foundation.equalizer.js │ │ │ │ │ │ │ ├── foundation.offcanvas.js │ │ │ │ │ │ │ ├── foundation.interchange.js │ │ │ │ │ │ │ ├── foundation.dropdownMenu.js │ │ │ │ │ │ │ ├── foundation.smoothScroll.js │ │ │ │ │ │ │ ├── foundation.util.motion.js │ │ │ │ │ │ │ ├── foundation.util.triggers.js │ │ │ │ │ │ │ ├── foundation.accordionMenu.js │ │ │ │ │ │ │ ├── foundation.util.imageLoader.js │ │ │ │ │ │ │ ├── foundation.responsiveMenu.js │ │ │ │ │ │ │ ├── foundation.responsiveToggle.js │ │ │ │ │ │ │ ├── foundation.util.mediaQuery.js │ │ │ │ │ │ │ ├── foundation.responsiveAccordionTabs.js │ │ │ │ │ │ │ └── foundation.core.js │ │ │ │ │ │ └── foundation-plugins.js │ │ │ │ │ ├── foundation.util.imageLoader.js │ │ │ │ │ ├── foundation.util.timer.js │ │ │ │ │ ├── foundation.util.core.js │ │ │ │ │ ├── foundation.plugin.js │ │ │ │ │ └── foundation.util.nest.js │ │ │ │ ├── customizer │ │ │ │ │ ├── essential.json │ │ │ │ │ └── complete.json │ │ │ │ ├── webpack.config.js │ │ │ │ ├── dist │ │ │ │ │ └── js │ │ │ │ │ │ └── plugins │ │ │ │ │ │ ├── foundation.util.timerAndImageLoader.min.js │ │ │ │ │ │ ├── foundation.util.imageLoader.min.js │ │ │ │ │ │ ├── foundation.util.timer.min.js │ │ │ │ │ │ ├── foundation.util.nest.min.js │ │ │ │ │ │ ├── foundation.util.motion.min.js │ │ │ │ │ │ └── foundation.util.keyboard.min.js │ │ │ │ ├── browserstack.json │ │ │ │ └── LICENSE │ │ │ ├── motion-ui │ │ │ │ ├── motion-ui.scss │ │ │ │ ├── src │ │ │ │ │ ├── util │ │ │ │ │ │ ├── _unit.scss │ │ │ │ │ │ ├── _animation.scss │ │ │ │ │ │ ├── _args.scss │ │ │ │ │ │ ├── _selector.scss │ │ │ │ │ │ ├── _transition.scss │ │ │ │ │ │ └── _series.scss │ │ │ │ │ ├── effects │ │ │ │ │ │ ├── _zoom.scss │ │ │ │ │ │ ├── _wiggle.scss │ │ │ │ │ │ ├── _shake.scss │ │ │ │ │ │ ├── _fade.scss │ │ │ │ │ │ ├── _spin.scss │ │ │ │ │ │ ├── _slide.scss │ │ │ │ │ │ └── _hinge.scss │ │ │ │ │ ├── motion-ui.scss │ │ │ │ │ ├── transitions │ │ │ │ │ │ ├── _fade.scss │ │ │ │ │ │ ├── _zoom.scss │ │ │ │ │ │ ├── _spin.scss │ │ │ │ │ │ ├── _slide.scss │ │ │ │ │ │ └── _hinge.scss │ │ │ │ │ └── _settings.scss │ │ │ │ ├── bower.json │ │ │ │ ├── composer.json │ │ │ │ ├── docs │ │ │ │ │ ├── readme.md │ │ │ │ │ ├── javascript.md │ │ │ │ │ ├── wow.md │ │ │ │ │ ├── configuration.md │ │ │ │ │ ├── installation.md │ │ │ │ │ └── classes.md │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── package.js │ │ │ │ ├── meteor-README.md │ │ │ │ ├── dist │ │ │ │ │ └── motion-ui.min.js │ │ │ │ └── package.json │ │ │ └── fontello │ │ │ │ ├── font │ │ │ │ ├── fontello.eot │ │ │ │ ├── fontello.ttf │ │ │ │ ├── fontello.woff │ │ │ │ └── fontello.woff2 │ │ │ │ ├── LICENSE.txt │ │ │ │ └── css │ │ │ │ └── animation.css │ │ ├── img │ │ │ └── favicon.png │ │ └── fonts │ │ │ ├── PTM55FT.ttf │ │ │ ├── Roboto │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-Thin.ttf │ │ │ ├── Roboto-Black.ttf │ │ │ ├── Roboto-Italic.ttf │ │ │ ├── Roboto-Light.ttf │ │ │ ├── Roboto-Medium.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ ├── Roboto-BlackItalic.ttf │ │ │ ├── Roboto-BoldItalic.ttf │ │ │ ├── Roboto-LightItalic.ttf │ │ │ ├── Roboto-ThinItalic.ttf │ │ │ └── Roboto-MediumItalic.ttf │ │ │ └── Encode_Sans_Semi_Condensed │ │ │ ├── EncodeSansSemiCondensed-Bold.ttf │ │ │ ├── EncodeSansSemiCondensed-Thin.ttf │ │ │ ├── EncodeSansSemiCondensed-Black.ttf │ │ │ ├── EncodeSansSemiCondensed-Light.ttf │ │ │ ├── EncodeSansSemiCondensed-Medium.ttf │ │ │ ├── EncodeSansSemiCondensed-Regular.ttf │ │ │ ├── EncodeSansSemiCondensed-ExtraBold.ttf │ │ │ ├── EncodeSansSemiCondensed-SemiBold.ttf │ │ │ └── EncodeSansSemiCondensed-ExtraLight.ttf │ ├── css │ │ └── style.css │ └── js │ │ └── transmission.js ├── start.sh ├── pyproject.toml ├── resources │ └── latencyParser.py └── Dockerfile ├── memgraph ├── requirements.txt └── Dockerfile ├── blog_post ├── images │ ├── cities.png │ ├── spacex_logo.jpg │ ├── starlink_model.png │ ├── demo_screenshot.png │ ├── london_new_york.png │ ├── satellite_id_482.png │ ├── london_visible_from.png │ ├── starlink_satellite.jpg │ ├── satellite_connection.png │ └── satellite_id_482_connected_to.png └── blog-post-hooks.md ├── .vscode └── settings.json ├── .gitattributes ├── .github └── workflows │ └── deploy.yml ├── docker-compose-remote.yml ├── README.md └── .gitignore /simulator/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cache_handler/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web_app/demo/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /simulator/simulator/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /memgraph/requirements.txt: -------------------------------------------------------------------------------- 1 | kafka-python==2.0.2 2 | -------------------------------------------------------------------------------- /blog_post/images/cities.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/cities.png -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_flex-video.scss: -------------------------------------------------------------------------------- 1 | @import 'responsive-embed'; 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.linting.flake8Enabled": true, 3 | "python.linting.enabled": true 4 | } -------------------------------------------------------------------------------- /blog_post/images/spacex_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/spacex_logo.jpg -------------------------------------------------------------------------------- /blog_post/images/starlink_model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/starlink_model.png -------------------------------------------------------------------------------- /blog_post/images/demo_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/demo_screenshot.png -------------------------------------------------------------------------------- /blog_post/images/london_new_york.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/london_new_york.png -------------------------------------------------------------------------------- /blog_post/images/satellite_id_482.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/satellite_id_482.png -------------------------------------------------------------------------------- /web_app/static/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/img/favicon.png -------------------------------------------------------------------------------- /blog_post/images/london_visible_from.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/london_visible_from.png -------------------------------------------------------------------------------- /blog_post/images/starlink_satellite.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/starlink_satellite.jpg -------------------------------------------------------------------------------- /web_app/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export FLASK_APP=app.py 4 | export FLASK_ENV=development 5 | python3 -m flask run --host 0.0.0.0 -------------------------------------------------------------------------------- /web_app/static/assets/fonts/PTM55FT.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/PTM55FT.ttf -------------------------------------------------------------------------------- /blog_post/images/satellite_connection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/satellite_connection.png -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/assets/foundation.scss: -------------------------------------------------------------------------------- 1 | @import '../scss/foundation'; 2 | 3 | @include foundation-everything; 4 | -------------------------------------------------------------------------------- /blog_post/images/satellite_id_482_connected_to.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/blog_post/images/satellite_id_482_connected_to.png -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Thin.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Black.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Italic.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Light.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Medium.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/motion-ui.scss: -------------------------------------------------------------------------------- 1 | @import "src/motion-ui"; 2 | 3 | @include motion-ui-transitions; 4 | @include motion-ui-animations; 5 | -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/fontello/font/fontello.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/libs/fontello/font/fontello.eot -------------------------------------------------------------------------------- /web_app/static/assets/libs/fontello/font/fontello.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/libs/fontello/font/fontello.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/fontello/font/fontello.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/libs/fontello/font/fontello.woff -------------------------------------------------------------------------------- /web_app/static/assets/libs/fontello/font/fontello.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/libs/fontello/font/fontello.woff2 -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-BlackItalic.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Roboto/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Roboto/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/assets/foundation-prototype.scss: -------------------------------------------------------------------------------- 1 | @import '../scss/foundation'; 2 | 3 | @include foundation-everything($prototype: true); 4 | -------------------------------------------------------------------------------- /simulator/simulator/models/__init__.py: -------------------------------------------------------------------------------- 1 | from simulator.models.city import City 2 | from simulator.models.moving_object import MovingObject 3 | from simulator.models.orbit import Orbit -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/assets/foundation-rtl.scss: -------------------------------------------------------------------------------- 1 | $global-text-direction: rtl; 2 | 3 | @import '../scss/foundation'; 4 | 5 | @include foundation-everything; 6 | -------------------------------------------------------------------------------- /web_app/demo/database/__init__.py: -------------------------------------------------------------------------------- 1 | from demo.database.memgraph import Memgraph # noqa: F401, F402, F403 2 | from demo.database.models import Node, Relationship # noqa: F401, F402, F403 3 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/assets/foundation-float.scss: -------------------------------------------------------------------------------- 1 | $global-flexbox: false; 2 | 3 | @import '../scss/foundation'; 4 | 5 | @include foundation-everything($flex: false); 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/normalize-scss/sass/_normalize.scss: -------------------------------------------------------------------------------- 1 | @import 'normalize/variables'; 2 | @import 'normalize/vertical-rhythm'; 3 | @import 'normalize/normalize-mixin'; 4 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/docslink.sh: -------------------------------------------------------------------------------- 1 | # Clones the foundation-docs repo and links it to NPM locally 2 | git clone https://github.com/zurb/foundation-docs 3 | npm link ./foundation-docs 4 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.box.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | import { Box } from '../../foundation.util.box'; 3 | 4 | Foundation.Box = Box; 5 | -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Bold.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Thin.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Black.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Light.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Medium.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-Regular.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.abide.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Abide } from '../../foundation.abide'; 4 | Foundation.plugin(Abide, 'Abide'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.tabs.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Tabs } from '../../foundation.tabs'; 4 | Foundation.plugin(Tabs, 'Tabs'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.nest.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Nest } from '../../foundation.util.nest'; 4 | 5 | Foundation.Nest = Nest; 6 | -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-ExtraBold.ttf -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-SemiBold.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.orbit.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Orbit } from '../../foundation.orbit'; 4 | Foundation.plugin(Orbit, 'Orbit'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.reveal.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Reveal } from '../../foundation.reveal'; 4 | Foundation.plugin(Reveal, 'Reveal'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.timer.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Timer } from '../../foundation.util.timer'; 4 | 5 | Foundation.Timer = Timer; 6 | -------------------------------------------------------------------------------- /web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/memgraph/starlink/HEAD/web_app/static/assets/fonts/Encode_Sans_Semi_Condensed/EncodeSansSemiCondensed-ExtraLight.ttf -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.slider.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Slider } from '../../foundation.slider'; 4 | Foundation.plugin(Slider, 'Slider'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.sticky.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Sticky } from '../../foundation.sticky'; 4 | Foundation.plugin(Sticky, 'Sticky'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.tooltip.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Tooltip } from '../../foundation.tooltip'; 4 | Foundation.plugin(Tooltip, 'Tooltip'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.touch.js: -------------------------------------------------------------------------------- 1 | import $ from 'jquery'; 2 | 3 | import { Touch } from '../../foundation.util.touch'; 4 | 5 | Touch.init($); 6 | 7 | window.Foundation.Touch = Touch; 8 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.magellan.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Magellan } from '../../foundation.magellan'; 4 | Foundation.plugin(Magellan, 'Magellan'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.toggler.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Toggler } from '../../foundation.toggler'; 4 | Foundation.plugin(Toggler, 'Toggler'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.keyboard.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | import { Keyboard } from '../../foundation.util.keyboard'; 3 | 4 | Foundation.Keyboard = Keyboard; 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.accordion.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Accordion } from '../../foundation.accordion'; 4 | Foundation.plugin(Accordion, 'Accordion'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.drilldown.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Drilldown } from '../../foundation.drilldown'; 4 | Foundation.plugin(Drilldown, 'Drilldown'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.dropdown.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Dropdown } from '../../foundation.dropdown'; 4 | Foundation.plugin(Dropdown, 'Dropdown'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.equalizer.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Equalizer } from '../../foundation.equalizer'; 4 | Foundation.plugin(Equalizer, 'Equalizer'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.offcanvas.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { OffCanvas } from '../../foundation.offcanvas'; 4 | Foundation.plugin(OffCanvas, 'OffCanvas'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.interchange.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { Interchange } from '../../foundation.interchange'; 4 | Foundation.plugin(Interchange, 'Interchange'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.dropdownMenu.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { DropdownMenu } from '../../foundation.dropdownMenu'; 4 | Foundation.plugin(DropdownMenu, 'DropdownMenu'); 5 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.smoothScroll.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { SmoothScroll } from '../../foundation.smoothScroll'; 4 | Foundation.plugin(SmoothScroll, 'SmoothScroll'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.motion.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | import { Motion, Move } from '../../foundation.util.motion'; 3 | 4 | Foundation.Motion = Motion; 5 | Foundation.Move = Move; 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.triggers.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | import $ from 'jquery'; 3 | 4 | import { Triggers } from '../../foundation.util.triggers'; 5 | Triggers.init($, Foundation); 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.accordionMenu.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { AccordionMenu } from '../../foundation.accordionMenu'; 4 | Foundation.plugin(AccordionMenu, 'AccordionMenu'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.imageLoader.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { onImagesLoaded } from '../../foundation.util.imageLoader'; 4 | 5 | Foundation.onImagesLoaded = onImagesLoaded; 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/customizer/essential.json: -------------------------------------------------------------------------------- 1 | { 2 | "modules": [ 3 | "typography", 4 | "xy_grid", 5 | "flex_classes", 6 | "forms", 7 | "button", 8 | "callout", 9 | "reveal" 10 | ], 11 | "variables": {} 12 | } 13 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.responsiveMenu.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { ResponsiveMenu } from '../../foundation.responsiveMenu'; 4 | Foundation.plugin(ResponsiveMenu, 'ResponsiveMenu'); 5 | 6 | -------------------------------------------------------------------------------- /memgraph/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM memgraph/memgraph:2.2.1 2 | 3 | USER root 4 | 5 | # Install pip packages 6 | COPY requirements.txt ./ 7 | RUN pip3 install -r requirements.txt 8 | 9 | # Copy the local query modules 10 | COPY transformations/ /transformations 11 | 12 | USER memgraph 13 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.responsiveToggle.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { ResponsiveToggle } from '../../foundation.responsiveToggle'; 4 | Foundation.plugin(ResponsiveToggle, 'ResponsiveToggle'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.util.mediaQuery.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | import { MediaQuery } from '../../foundation.util.mediaQuery'; 3 | 4 | Foundation.MediaQuery = MediaQuery; 5 | Foundation.MediaQuery._init(); 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_menu-icon.scss: -------------------------------------------------------------------------------- 1 | @mixin foundation-menu-icon { 2 | .menu-icon { 3 | @include hamburger($color: $titlebar-icon-color, $color-hover: $titlebar-icon-color-hover); 4 | } 5 | 6 | .menu-icon.dark { 7 | @include hamburger; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.responsiveAccordionTabs.js: -------------------------------------------------------------------------------- 1 | import { Foundation } from './foundation.core'; 2 | 3 | import { ResponsiveAccordionTabs } from '../../foundation.responsiveAccordionTabs'; 4 | Foundation.plugin(ResponsiveAccordionTabs, 'ResponsiveAccordionTabs'); 5 | 6 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/util/_unit.scss: -------------------------------------------------------------------------------- 1 | /// Removes the unit (e.g. px, em, rem) from a value, returning the number only. 2 | /// @param {Number} $num - Number to strip unit from. 3 | /// @return {Number} The same number, sans unit. 4 | /// @access private 5 | @function strip-unit($num) { 6 | @return $num / ($num * 0 + 1); 7 | } 8 | -------------------------------------------------------------------------------- /cache_handler/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "data_handler" 3 | version = "0.1.0" 4 | description = "" 5 | authors = [] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.7" 9 | redis = "^3.5.3" 10 | neo4j = "^1.7.4" 11 | gqlalchemy = "^1.2.0" 12 | 13 | [build-system] 14 | requires = ["poetry>=0.12"] 15 | build-backend = "poetry.masonry.api" 16 | -------------------------------------------------------------------------------- /web_app/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "web_app" 3 | version = "0.1.0" 4 | description = "" 5 | authors = [""] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.7" 9 | neo4j = "^1.7.4" 10 | flask = "^1.1.2" 11 | Flask-Caching = "^1.9.0" 12 | pymgclient = "^0.1.0" 13 | redis = "^3.5.3" 14 | 15 | [build-system] 16 | requires = ["poetry>=0.12"] 17 | build-backend = "poetry.masonry.api" 18 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/util/_util.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | @import 'math'; 6 | @import 'unit'; 7 | @import 'value'; 8 | @import 'direction'; 9 | @import 'color'; 10 | @import 'selector'; 11 | @import 'flex'; 12 | @import 'breakpoint'; 13 | @import 'mixins'; 14 | @import 'typography'; 15 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/normalize-scss/sass/normalize/_import-now.scss: -------------------------------------------------------------------------------- 1 | // Import Now 2 | // 3 | // If you import this module directly, it will immediately output all the CSS 4 | // needed to normalize default HTML elements across all browsers. 5 | // 6 | // ``` 7 | // @import "normalize/import-now"; 8 | // ``` 9 | 10 | @import '../normalize'; 11 | @include normalize(); 12 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/helpers/_true.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Returns truthiness of `$value`. 3 | /// 4 | /// @access private 5 | /// 6 | /// @param {*} $value - value to check 7 | /// 8 | /// @return {Bool} 9 | /// 10 | 11 | @function sl-is-true($value) { 12 | @return if($value == null, false, $value and $value != null and $value != '' and $value != ()); 13 | } 14 | -------------------------------------------------------------------------------- /simulator/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "simulator" 3 | version = "0.1.0" 4 | description = "" 5 | authors = [] 6 | 7 | [tool.poetry.dependencies] 8 | python = "^3.7" 9 | docopt = "^0.6.2" 10 | neo4j = "^1.7.4" 11 | numpy = "^1.19.1" 12 | skyfield = "^1.25" 13 | gqlalchemy = "^1.0.6" 14 | kafka-python = "^2.0.2" 15 | 16 | [build-system] 17 | requires = ["poetry>=0.12"] 18 | build-backend = "poetry.masonry.api" 19 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/util/_animation.scss: -------------------------------------------------------------------------------- 1 | /// Creates a keyframe from one or more effect functions and assigns it to the element by adding the `animation-name` property. 2 | /// @param {Function} $effects... - One or more effect functions to build the keyframe with. 3 | @mixin mui-animation($args...) { 4 | $name: map-get(-mui-process-args($args...), name); 5 | @include mui-keyframes($name, $args...); 6 | animation-name: unquote($name); 7 | } 8 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/util/_args.scss: -------------------------------------------------------------------------------- 1 | /// Processes a series of keyframe function arguments. 2 | /// @access private 3 | @function -mui-process-args($args...) { 4 | @if length($args) == 1 { 5 | $arg: nth($args, 1); 6 | 7 | @if type-of($arg) == 'string' { 8 | @return call($arg); 9 | } @else if type-of($arg) == 'map' { 10 | @return $arg; 11 | } 12 | } 13 | 14 | @return -mui-keyframe-combine($args...); 15 | } 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set the default behavior, in case people don't have core.autocrlf set. 2 | * text=auto 3 | 4 | # Explicitly declare text files you want to always be normalized and converted 5 | # to native line endings on checkout. 6 | *.c text 7 | *.h text 8 | 9 | # Declare files that will always have CRLF line endings on checkout. 10 | *.sln text eol=crlf 11 | 12 | # Denote all files that are truly binary and should not be modified. 13 | *.png binary 14 | *.jpg binary -------------------------------------------------------------------------------- /web_app/static/css/style.css: -------------------------------------------------------------------------------- 1 | #map { 2 | background: #E6E6E6; 3 | } 4 | 5 | .city-icon { 6 | border-radius: 50%; 7 | background: #1EB76D; 8 | border: 3px solid #FFFFFF; 9 | box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.20); 10 | } 11 | 12 | .select2-selection__rendered { 13 | line-height: 31px !important; 14 | } 15 | 16 | .select2-container .select2-selection--single { 17 | height: 35px !important; 18 | } 19 | 20 | .select2-selection__arrow { 21 | height: 34px !important; 22 | } -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_float.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group float 7 | //// 8 | 9 | @mixin foundation-float-classes { 10 | .float-left { 11 | float: left !important; 12 | } 13 | 14 | .float-right { 15 | float: right !important; 16 | } 17 | 18 | .float-center { 19 | display: block; 20 | margin-right: auto; 21 | margin-left: auto; 22 | } 23 | 24 | .clearfix { 25 | @include clearfix; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_zoom.scss: -------------------------------------------------------------------------------- 1 | /// Creates a scaling transition. A scale of `1` means the element is the same size. Larger numbers make the element bigger, while numbers less than 1 make the element smaller. 2 | /// @param {Number} $from [1.5] - Size to start at. 3 | /// @param {Number} $to [1] - Size to end at. 4 | @function zoom( 5 | $from: 0, 6 | $to: 1 7 | ) { 8 | $keyframes: ( 9 | name: 'scale-#{$to}-to-#{$from}', 10 | 0: (transform: scale($from)), 11 | 100: (transform: scale($to)), 12 | ); 13 | 14 | @return $keyframes; 15 | } 16 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_wiggle.scss: -------------------------------------------------------------------------------- 1 | /// Creates a wiggling animation. 2 | /// @param {Number} $intensity [7deg] - Intensity of the wiggle. Can be any CSS angle unit. 3 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 4 | @function wiggle($intensity: 7deg) { 5 | $keyframes: ( 6 | name: 'wiggle-#{$intensity}', 7 | (40, 50, 60): (transform: rotate($intensity)), 8 | (35, 45, 55, 65): (transform: rotate(-$intensity)), 9 | (0, 30, 70, 100): (transform: rotate(0)), 10 | ); 11 | 12 | @return $keyframes; 13 | } 14 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "motion-ui", 3 | "version": "1.2.2", 4 | "authors": [ 5 | "ZURB " 6 | ], 7 | "description": "Sass library for creating transitions and animations.", 8 | "main": [ 9 | "dist/motion-ui.css", 10 | "dist/motion-ui.js" 11 | ], 12 | "keywords": [ 13 | "Sass", 14 | "motion" 15 | ], 16 | "license": "MIT", 17 | "ignore": [ 18 | "**/.*", 19 | "_build", 20 | "node_modules", 21 | "bower_components", 22 | "docs/src", 23 | "test" 24 | ], 25 | "dependencies": { 26 | "jquery": ">=2.2.0" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_shake.scss: -------------------------------------------------------------------------------- 1 | /// Creates a shaking animation. 2 | /// @param {Percentage} $intensity [7%] - Intensity of the shake, as a percentage value. 3 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 4 | @function shake($intensity: 7%) { 5 | $right: (0, 10, 20, 30, 40, 50, 60, 70, 80, 90); 6 | $left: (5, 15, 25, 35, 45, 55, 65, 75, 85, 95); 7 | 8 | $keyframes: ( 9 | name: 'shake-#{($intensity / 1%)}', 10 | $right: (transform: translateX($intensity)), 11 | $left: (transform: translateX(-$intensity)), 12 | ); 13 | 14 | @return $keyframes; 15 | } 16 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/typography/_alignment.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | @mixin foundation-text-alignment { 6 | @each $size in $breakpoint-classes { 7 | @include breakpoint($size) { 8 | @each $align in (left, right, center, justify) { 9 | @if $size != $-zf-zero-breakpoint { 10 | .#{$size}-text-#{$align} { 11 | text-align: $align; 12 | } 13 | } 14 | @else { 15 | .text-#{$align} { 16 | text-align: $align; 17 | } 18 | } 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /web_app/static/js/transmission.js: -------------------------------------------------------------------------------- 1 | function transmission_time(sp_markers) { 2 | let total_transmission_time = 0; 3 | 4 | for (sp of sp_markers) { 5 | total_transmission_time += sp[3]; 6 | } 7 | return `${Math.round((total_transmission_time * 1000 + Number.EPSILON) * 100) / 100} ms`; 8 | } 9 | 10 | function optical_time(opticalPaths, city1, city2) { 11 | 12 | for (op of opticalPaths) { 13 | const city1Found = (city1 == op[0] || city1 == op[1]); 14 | const city2Found = (city2 == op[0] || city2 == op[1]); 15 | 16 | if (city1Found && city2Found) return `${op[2]} ms`; 17 | } 18 | return 'No data found for selected cities.'; 19 | } -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/typography/_typography.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group typography 7 | //// 8 | 9 | // Base typography styles (tags only) 10 | @import 'base'; 11 | 12 | // Typography helper classes (classes only) 13 | @import 'helpers'; 14 | 15 | // Text alignment classes 16 | @import 'alignment'; 17 | 18 | // Print styles 19 | @import 'print'; 20 | 21 | @mixin foundation-typography { 22 | @include foundation-typography-base; 23 | @include foundation-typography-helpers; 24 | @include foundation-text-alignment; 25 | @include foundation-print-styles; 26 | } 27 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: './js/entries/all.js', 3 | output: { 4 | path: './_build/assets/js/', 5 | filename: 'foundation.js' 6 | }, 7 | externals: { 8 | jquery: 'jQuery' 9 | }, 10 | module: { 11 | loaders: [ 12 | ], 13 | rules: [ 14 | // JS LOADER 15 | // Reference: https://github.com/babel/babel-loader 16 | // Transpile .js files using babel-loader 17 | // Compiles ES6 and ES7 into ES5 code 18 | { 19 | test: /\.js$/, 20 | use: [ 21 | { 22 | loader: 'babel-loader', 23 | } 24 | ], 25 | } 26 | ] 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zurb/motion-ui", 3 | "description": "Sass library for creating transitions and animations.", 4 | "version": "1.2.2", 5 | "keywords": [ 6 | "css", 7 | "sass", 8 | "motion", 9 | "animation" 10 | ], 11 | "homepage": "http://foundation.zurb.com", 12 | "authors": [ 13 | { 14 | "name": "ZURB, Inc.", 15 | "homepage": "http://zurb.com", 16 | "email": "foundation@zurb.com" 17 | } 18 | ], 19 | "support": { 20 | "email": "foundation@zurb.com", 21 | "issues": "https://github.com/zurb/motion-ui/issues", 22 | "forum": "http://foundation.zurb.com/forum" 23 | }, 24 | "license": "MIT" 25 | } 26 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/docs/readme.md: -------------------------------------------------------------------------------- 1 | # Motion UI Documentation 2 | 3 | ### [Installation](installation.md) 4 | 5 | Installing Motion UI. 6 | 7 | ### [Transitions](transitions.md) 8 | 9 | Using CSS transitions to show and hide components. 10 | 11 | ### [Animations](animations.md) 12 | 13 | Using CSS animations to add effects. 14 | 15 | ### [CSS Classes](classes.md) 16 | 17 | Using the library's pre-made CSS classes. 18 | 19 | ### [JavaScript](javascript.md) 20 | 21 | Using the JavaScript plugin to transition elements in and out. 22 | 23 | ### [Configuration](configuration.md) 24 | 25 | Customizing Motion UI. 26 | 27 | ### [WOW.js](wow.md) 28 | 29 | Using Motion UI with WOW.js. 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_box.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-box 7 | //// 8 | 9 | /// Box Mixin: Easily create a square, rectangle or a circle 10 | /// @param {Number} $width[] Width of the box 11 | /// @param {Number} $height[$width] Height of the box, defaults to `$width` to easily make a square 12 | /// @param {Boolean} $circle[false] Makes the box a circle, by default `false`. 13 | @mixin box( 14 | $width, 15 | $height: $width, 16 | $circle: false 17 | ) { 18 | width: $width; 19 | height: $height; 20 | @if $circle { 21 | border-radius: 50% !important; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/grid/_size.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Set the width of a grid column. 10 | /// 11 | /// @param {Number|List} $width [$grid-column-count] - Width to make the column. You can pass in any value accepted by the `grid-column()` function, such as `6`, `50%`, or `1 of 2`. 12 | @mixin grid-column-size( 13 | $columns: $grid-column-count 14 | ) { 15 | width: grid-column($columns); 16 | } 17 | 18 | /// Shorthand for `grid-column-size()`. 19 | /// @alias grid-column-size 20 | @mixin grid-col-size( 21 | $columns: $grid-column-count 22 | ) { 23 | @include grid-column-size($columns); 24 | } 25 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/functions/_to-list.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Casts `$value` into a list. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-to-list 5 | /// 6 | /// @param {*} $value - value to cast to list 7 | /// @param {String} $separator [space] - separator to use 8 | /// 9 | /// @example 10 | /// sl-to-list(a b c, comma) 11 | /// // a, b, c 12 | /// 13 | /// @return {List} 14 | /// 15 | 16 | @function sl-to-list($value, $separator: list-separator($value)) { 17 | @return join((), $value, $separator); 18 | } 19 | 20 | /// 21 | /// @requires sl-to-list 22 | /// @alias sl-to-list 23 | /// 24 | 25 | @function sl-listify($value) { 26 | @return sl-to-list($value); 27 | } 28 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/motion-ui.scss: -------------------------------------------------------------------------------- 1 | // Motion UI by ZURB 2 | // foundation.zurb.com/motion-ui 3 | // Licensed under MIT Open Source 4 | 5 | @import 'settings'; 6 | 7 | @import 'util/animation'; 8 | @import 'util/args'; 9 | @import 'util/keyframe'; 10 | @import 'util/selector'; 11 | @import 'util/series'; 12 | @import 'util/transition'; 13 | @import 'util/unit'; 14 | 15 | @import 'effects/fade'; 16 | @import 'effects/hinge'; 17 | @import 'effects/spin'; 18 | @import 'effects/zoom'; 19 | @import 'effects/shake'; 20 | @import 'effects/slide'; 21 | @import 'effects/wiggle'; 22 | 23 | @import 'transitions/fade'; 24 | @import 'transitions/hinge'; 25 | @import 'transitions/zoom'; 26 | @import 'transitions/slide'; 27 | @import 'transitions/spin'; 28 | 29 | @import 'classes'; 30 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_sticky.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | @mixin foundation-sticky { 6 | .sticky-container { 7 | position: relative; 8 | } 9 | 10 | .sticky { 11 | position: relative; 12 | z-index: 0; 13 | transform: translate3d(0, 0, 0); 14 | } 15 | 16 | .sticky.is-stuck { 17 | position: fixed; 18 | z-index: 5; 19 | width: 100%; 20 | 21 | &.is-at-top { 22 | top: 0; 23 | } 24 | 25 | &.is-at-bottom { 26 | bottom: 0; 27 | } 28 | } 29 | 30 | .sticky.is-anchored { 31 | position: relative; 32 | right: auto; 33 | left: auto; 34 | 35 | &.is-at-bottom { 36 | bottom: 0; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v1 13 | - name: Deploy 14 | working-directory: . 15 | env: 16 | AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} 17 | AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 18 | AWS_DEFAULT_REGION: eu-west-1 19 | GIT_BRANCH: ${{ github.ref }} 20 | run: | 21 | aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID 22 | aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY 23 | export GIT_BRANCH=${GITHUB_REF##*/} 24 | if [ $GIT_BRANCH == "master" ]; then 25 | ./deploy production 26 | fi 27 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_help-text.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Default color for help text. 10 | /// @type Color 11 | $helptext-color: $black !default; 12 | 13 | /// Default font size for help text. 14 | /// @type Number 15 | $helptext-font-size: rem-calc(13) !default; 16 | 17 | /// Default font style for help text. 18 | /// @type Keyword 19 | $helptext-font-style: italic !default; 20 | 21 | @mixin foundation-form-helptext { 22 | .help-text { 23 | $margin-top: ($form-spacing * 0.5) * -1; 24 | 25 | margin-top: $margin-top; 26 | font-size: $helptext-font-size; 27 | font-style: $helptext-font-style; 28 | color: $helptext-color; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/functions/_contain.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Returns whether `$list` contains `$value`. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-contain 5 | /// 6 | /// @param {List} $list - list to check 7 | /// @param {*} $value - value to look for 8 | /// 9 | /// @example 10 | /// sl-contain(a b c, a) 11 | /// // true 12 | /// 13 | /// @example 14 | /// sl-contain(a b c, z) 15 | /// // false 16 | /// 17 | /// @return {Bool} 18 | /// 19 | 20 | @function sl-contain($list, $value) { 21 | @return not not index($list, $value); 22 | } 23 | 24 | /// 25 | /// @requires sl-contain 26 | /// @alias sl-contain 27 | /// 28 | 29 | @function sl-include($list, $value) { 30 | @return sl-contain($list, $value); 31 | } 32 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/plugins/foundation.core.js: -------------------------------------------------------------------------------- 1 | import $ from 'jquery'; 2 | 3 | import { Foundation } from '../../foundation.core'; 4 | Foundation.addToJquery($); 5 | 6 | // These are now separated out, but historically were a part of this module, 7 | // and since this is here for backwards compatibility we include them in 8 | // this entry. 9 | import {rtl, GetYoDigits, transitionend} from '../../foundation.util.core'; 10 | Foundation.rtl = rtl; 11 | Foundation.GetYoDigits = GetYoDigits; 12 | Foundation.transitionend = transitionend; 13 | 14 | // Every plugin depends on plugin now, we can include that on the core for the 15 | // script inclusion path. 16 | 17 | import { Plugin } from '../../foundation.plugin'; 18 | Foundation.Plugin = Plugin; 19 | 20 | 21 | window.Foundation = Foundation; 22 | -------------------------------------------------------------------------------- /simulator/imports/cities.csv: -------------------------------------------------------------------------------- 1 | id,latitude,longitude,altitude,name 2 | 0,40.730610,-73.935242,0,New York 3 | 1,45.815399,15.966568,0,Zagreb 4 | 2,35.689487,139.691711,0,Tokyo 5 | 3,-33.868820,151.209290,0,Sydney 6 | 4,34.052235,-118.243683,0,Los Angeles 7 | 5,55.755825,37.617298,0,Moscow 8 | 6,-26.204444,28.045556,0,Johannesburg 9 | 7,28.644800,77.216721,0,New Delhi 10 | 8,31.224361, 121.469170,0,Shanghai 11 | 9,-23.533773, -46.625290,0,Sao Paulo 12 | 10,19.432608, -99.133209,0,Mexico City 13 | 11,30.033333, 31.233334,0,Cairo 14 | 12,23.777176, 90.399452,0,Dhaka 15 | 13,-34.603722, -58.381592,0,Buenos Aires 16 | 14,41.015137, 28.979530,0,Istanbul 17 | 16,-6.200000, 106.816666,0,Jakarta 18 | 17,37.532600, 127.024612,0,Seoul 19 | 18,51.509865, -0.118092,0,London 20 | 19,64.128288, -21.827774,0,Reykjavik 21 | 20,29.749907, -95.358421,0,Houston 22 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_fade.scss: -------------------------------------------------------------------------------- 1 | /// Creates a fading animation. 2 | /// @param {Number} $from [0] - Opacity to start at. 3 | /// @param {Number} $to [1] - Opacity to end at. 4 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 5 | @function fade( 6 | $from: 0, 7 | $to: 1 8 | ) { 9 | $type: type-of($from); 10 | $keyframes: (); 11 | 12 | @if $type == 'string' { 13 | @if $from == in { 14 | $from: 0; 15 | $to: 1; 16 | } @else if $from == out { 17 | $from: 1; 18 | $to: 0; 19 | } 20 | } 21 | 22 | $fromName: $from * 100; 23 | $toName: $to * 100; 24 | 25 | $keyframes: ( 26 | name: 'fade-#{$fromName}-to-#{$toName}', 27 | 0: (opacity: $from), 28 | 100: (opacity: $to), 29 | ); 30 | 31 | @return $keyframes; 32 | } 33 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/functions/_remove.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Removes value(s) `$value` from `$list`. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-remove 5 | /// 6 | /// @requires sl-replace 7 | /// 8 | /// @param {List} $list - list to update 9 | /// @param {*} $value - value to remove 10 | /// 11 | /// @example 12 | /// sl-remove(a b c, a) 13 | /// // b c 14 | /// 15 | /// @return {List} 16 | /// 17 | 18 | @function sl-remove($list, $value) { 19 | $_: sl-missing-dependencies('sl-replace'); 20 | 21 | @return sl-replace($list, $value, null); 22 | } 23 | 24 | /// 25 | /// @requires sl-remove 26 | /// @alias sl-remove 27 | /// 28 | 29 | @function sl-without($list, $value) { 30 | @return sl-remove($list, $value); 31 | } 32 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/helpers/_missing-dependencies.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Checks whether `$functions` exist in global scope. 3 | /// 4 | /// @access private 5 | /// 6 | /// @param {ArgList} $functions - list of functions to check for 7 | /// 8 | /// @return {Bool} Whether or not there are missing dependencies 9 | /// 10 | 11 | @function sl-missing-dependencies($functions...) { 12 | $missing-dependencies: (); 13 | 14 | @each $function in $functions { 15 | @if not function-exists($function) { 16 | $missing-dependencies: append($missing-dependencies, $function, comma); 17 | } 18 | } 19 | 20 | @if length($missing-dependencies) > 0 { 21 | @error 'Unmet dependencies! The following functions are required: #{$missing-dependencies}.'; 22 | } 23 | 24 | @return length($missing-dependencies) > 0; 25 | } 26 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/fontello/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Font license info 2 | 3 | 4 | ## MFG Labs 5 | 6 | Copyright (C) 2012 by Daniel Bruce 7 | 8 | Author: MFG Labs 9 | License: SIL (http://scripts.sil.org/OFL) 10 | Homepage: http://www.mfglabs.com/ 11 | 12 | 13 | ## Entypo 14 | 15 | Copyright (C) 2012 by Daniel Bruce 16 | 17 | Author: Daniel Bruce 18 | License: SIL (http://scripts.sil.org/OFL) 19 | Homepage: http://www.entypo.com 20 | 21 | 22 | ## Font Awesome 23 | 24 | Copyright (C) 2016 by Dave Gandy 25 | 26 | Author: Dave Gandy 27 | License: SIL () 28 | Homepage: http://fortawesome.github.com/Font-Awesome/ 29 | 30 | 31 | ## Elusive 32 | 33 | Copyright (C) 2013 by Aristeides Stathopoulos 34 | 35 | Author: Aristeides Stathopoulos 36 | License: SIL (http://scripts.sil.org/OFL) 37 | Homepage: http://aristeides.com/ 38 | 39 | 40 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_spin.scss: -------------------------------------------------------------------------------- 1 | /// Creates a spinning animation. 2 | /// @param {Keyword} $direction [cw] - Direction to spin. Should be `cw` (clockwise) or `ccw` (counterclockwise). 3 | /// @param {Number} $amount [360deg] - Amount to spin. Can be any CSS angle unit. 4 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 5 | @function spin( 6 | $state: in, 7 | $direction: cw, 8 | $amount: 1turn 9 | ) { 10 | $start: 0; 11 | $end: 0; 12 | 13 | @if $state == in { 14 | $start: if($direction == ccw, $amount, $amount * -1); 15 | $end: 0; 16 | } @else { 17 | $start: 0; 18 | $end: if($direction == ccw, $amount * -1, $amount); 19 | } 20 | 21 | $keyframes: ( 22 | name: 'spin-#{$direction}-#{$amount}', 23 | 0: (transform: rotate($start)), 24 | 100: (transform: rotate($end)), 25 | ); 26 | 27 | @return $keyframes; 28 | } 29 | -------------------------------------------------------------------------------- /simulator/main.py: -------------------------------------------------------------------------------- 1 | """ 2 | simulator 3 | 4 | Usage: 5 | main.py start 6 | main.py -h | --help 7 | 8 | Arguments: 9 | -h --help Shows this screen. 10 | NAME Any random string 11 | """ 12 | 13 | import re 14 | import sys 15 | import logging 16 | from typing import Dict, Any 17 | 18 | logging.basicConfig(format='%(asctime)-15s [%(levelname)s]: %(message)s') 19 | logger = logging.getLogger('simulator') 20 | logger.setLevel(logging.INFO) 21 | 22 | def my_handler(type, value, tb): 23 | logger.exception("Uncaught exception: {0}".format(str(value))) 24 | 25 | 26 | def _start() -> None: 27 | from simulator import starlink 28 | starlink.run() 29 | 30 | def main(args: Dict[str, Any]) -> None: 31 | if args['start']: 32 | return _start() 33 | 34 | 35 | if __name__ == '__main__': 36 | sys.excepthook = my_handler 37 | from docopt import docopt 38 | args = docopt(__doc__) 39 | main(args) 40 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_forms.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Global spacing for form elements. 10 | /// @type Number 11 | $form-spacing: rem-calc(16) !default; 12 | 13 | @import 'text'; 14 | @import 'checkbox'; 15 | @import 'label'; 16 | @import 'help-text'; 17 | @import 'input-group'; 18 | @import 'fieldset'; 19 | @import 'select'; 20 | @import 'range'; 21 | @import 'progress'; 22 | @import 'meter'; 23 | @import 'error'; 24 | 25 | @mixin foundation-forms { 26 | @include foundation-form-text; 27 | @include foundation-form-checkbox; 28 | @include foundation-form-label; 29 | @include foundation-form-helptext; 30 | @include foundation-form-prepostfix; 31 | @include foundation-form-fieldset; 32 | @include foundation-form-select; 33 | @include foundation-form-error; 34 | } 35 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/dist/js/plugins/foundation.util.timerAndImageLoader.min.js: -------------------------------------------------------------------------------- 1 | "use strict";!function(t){function e(t,e,i){var a,s,n=this,r=e.duration,o=Object.keys(t.data())[0]||"timer",u=-1;this.isPaused=!1,this.restart=function(){u=-1,clearTimeout(s),this.start()},this.start=function(){this.isPaused=!1,clearTimeout(s),u=u<=0?r:u,t.data("paused",!1),a=Date.now(),s=setTimeout(function(){e.infinite&&n.restart(),i&&"function"==typeof i&&i()},u),t.trigger("timerstart.zf."+o)},this.pause=function(){this.isPaused=!0,clearTimeout(s),t.data("paused",!0);var e=Date.now();u-=e-a,t.trigger("timerpaused.zf."+o)}}function i(e,i){function a(){s--,0===s&&i()}var s=e.length;0===s&&i(),e.each(function(){if(this.complete||4===this.readyState||"complete"===this.readyState)a();else{var e=t(this).attr("src");t(this).attr("src",e+(e.indexOf("?")>=0?"&":"?")+(new Date).getTime()),t(this).one("load",function(){a()})}})}Foundation.Timer=e,Foundation.onImagesLoaded=i}(jQuery); -------------------------------------------------------------------------------- /web_app/resources/latencyParser.py: -------------------------------------------------------------------------------- 1 | import csv 2 | 3 | 4 | readFromFile = open("latenciesTables.txt", "r") 5 | lines = readFromFile.readlines() 6 | cleanLines = [] 7 | 8 | for line in lines: 9 | newLine = line.split("\t") 10 | newLine.pop() 11 | cleanLines.append(newLine) 12 | 13 | 14 | with open("latencies.csv", mode="w", newline='') as latencies: 15 | latency_writer = csv.writer(latencies, delimiter=",") 16 | header = ["Source", "Destination", "Latency"] 17 | latency_writer.writerow(header) 18 | for i in range(1, len(cleanLines)): 19 | for j in range(1, len(cleanLines[i])): 20 | source = cleanLines[i][0] 21 | destination = cleanLines[0][j] 22 | latency = cleanLines[i][j] 23 | if(source != destination): 24 | latency = latency[:-2] 25 | builder = [source, destination, latency] 26 | latency_writer.writerow(builder) 27 | print("success") 28 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/functions/_purge.scss: -------------------------------------------------------------------------------- 1 | /// Removes all false and null values from `$list`. 2 | /// 3 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-purge 4 | /// 5 | /// @requires sl-is-true 6 | /// @requires sl-to-list 7 | /// 8 | /// @param {List} $list - list to purge 9 | /// 10 | /// @example 11 | /// sl-purge(null a false b) 12 | /// // a b 13 | /// 14 | /// @return {List} 15 | /// 16 | 17 | @function sl-purge($list) { 18 | $_: sl-missing-dependencies('sl-is-true', 'sl-to-list'); 19 | 20 | $result: (); 21 | 22 | @each $item in $list { 23 | @if sl-is-true($item) { 24 | $result: append($result, $item, list-separator($list)); 25 | } 26 | } 27 | 28 | @return sl-to-list($result); 29 | } 30 | 31 | /// 32 | /// @requires sl-purge 33 | /// @alias sl-purge 34 | /// 35 | 36 | @function sl-clean($list) { 37 | @return sl-purge($list); 38 | } 39 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_arrow.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-arrow 7 | //// 8 | 9 | /// Map containing all the `arrow` direction 10 | /// @type Map 11 | $prototype-arrow-directions: ( 12 | down, 13 | up, 14 | right, 15 | left 16 | ) !default; 17 | 18 | /// Width of the Arrow, `0.4375rem` by default. 19 | /// @type Number 20 | $prototype-arrow-size: 0.4375rem; 21 | 22 | /// Color of the Arrow, `$black` by default. 23 | /// @type Color 24 | $prototype-arrow-color: $black; 25 | 26 | @mixin foundation-prototype-arrow { 27 | @each $prototype-arrow-direction in $prototype-arrow-directions { 28 | .arrow-#{$prototype-arrow-direction} { 29 | @include css-triangle( 30 | $prototype-arrow-size, 31 | $prototype-arrow-color, 32 | $prototype-arrow-direction 33 | ); 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_border-box.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-border-box 7 | //// 8 | 9 | /// Responsive breakpoints for border box. 10 | /// @type Boolean 11 | $prototype-border-box-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Border box utility 14 | @mixin border-box { 15 | box-sizing: border-box !important; 16 | } 17 | 18 | @mixin foundation-prototype-border-box { 19 | .border-box { 20 | @include border-box; 21 | } 22 | 23 | @if ($prototype-border-box-breakpoints) { 24 | // Loop through Responsive Breakpoints 25 | @each $size in $breakpoint-classes { 26 | @include breakpoint($size) { 27 | @if $size != $-zf-zero-breakpoint { 28 | .#{$size}-border-box { 29 | @include border-box; 30 | } 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_border-none.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-border-none 7 | //// 8 | 9 | /// Responsive breakpoints for border none. 10 | /// @type Boolean 11 | $prototype-border-none-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Border none utility 14 | @mixin border-none { 15 | border: none !important; 16 | } 17 | 18 | @mixin foundation-prototype-border-none { 19 | .border-none { 20 | @include border-none; 21 | } 22 | 23 | @if ($prototype-border-none-breakpoints) { 24 | // Loop through Responsive Breakpoints 25 | @each $size in $breakpoint-classes { 26 | @include breakpoint($size) { 27 | @if $size != $-zf-zero-breakpoint { 28 | .#{$size}-border-none { 29 | @include border-none; 30 | } 31 | } 32 | } 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_rotate.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-rotate 7 | //// 8 | 9 | /// Rotate Mixin: Rotate an element to a certain deg 10 | /// @param {Number} $deg[] Degree of rotation 11 | @mixin rotate($deg) { 12 | transform:rotate($deg + deg); 13 | } 14 | 15 | /// RotateX Mixin: Rotate an element to a certain deg on X-Axis 16 | /// @param {Number} $deg[] Degree of rotation 17 | @mixin rotateX($deg) { 18 | transform:rotateX($deg + deg); 19 | } 20 | 21 | /// RotateY Mixin: Rotate an element to a certain deg on Y-Axis 22 | /// @param {Number} $deg[] Degree of rotation 23 | @mixin rotateY($deg) { 24 | transform:rotateY($deg + deg); 25 | } 26 | 27 | /// RotateZ Mixin: Rotate an element to a certain deg on Z-Axis 28 | /// @param {Number} $deg[] Degree of rotation 29 | @mixin rotateZ($deg) { 30 | transform:rotateZ($deg + deg); 31 | } -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/browserstack.json: -------------------------------------------------------------------------------- 1 | { 2 | "username": "rafibenkual1", 3 | "key": "t42z8wSsqUfpumsyRcyV", 4 | "test_path": "test/javascript/index.html", 5 | "test_framework": "mocha", 6 | "browsers": [ 7 | { 8 | "browser": "chrome", 9 | "browser_version": "latest", 10 | "os": "OS X", 11 | "os_version": "Sierra" 12 | }, 13 | { 14 | "browser": "firefox", 15 | "browser_version": "latest", 16 | "os": "Windows", 17 | "os_version": "7" 18 | }, 19 | { 20 | "browser": "ie", 21 | "browser_version": "latest", 22 | "os": "Windows", 23 | "os_version": "10" 24 | }, 25 | { 26 | "browser": "safari", 27 | "browser_version": "latest", 28 | "os": "OS X", 29 | "os_version": "Yosemite" 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/util/_direction.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | /// Returns the opposite direction of $dir 10 | /// 11 | /// @param {Keyword} $dir - Used direction between "top", "right", "bottom" and "left". 12 | /// @return {Keyword} Opposite direction of $dir 13 | @function direction-opposite( 14 | $dir 15 | ) { 16 | $dirs: (top, right, bottom, left); 17 | $place: index($dirs, $dir); 18 | 19 | @if $place == null { 20 | @error 'direction-opposite: Invalid $dir parameter, expected a value from "#{$dirs}", found "#{$dir}".'; 21 | @return null; 22 | } 23 | 24 | // Calcul the opposite place in a circle, with a starting index of 1 25 | $length: length($dirs); 26 | $demi: $length / 2; 27 | $opposite-place: (($place + $demi - 1) % $length) + 1; 28 | 29 | @return nth($dirs, $opposite-place); 30 | } 31 | 32 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_checkbox.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | @mixin foundation-form-checkbox { 10 | [type='file'], 11 | [type='checkbox'], 12 | [type='radio'] { 13 | margin: 0 0 $form-spacing; 14 | } 15 | 16 | // Styles for input/label siblings 17 | [type='checkbox'] + label, 18 | [type='radio'] + label { 19 | display: inline-block; 20 | vertical-align: baseline; 21 | 22 | margin-#{$global-left}: $form-spacing * 0.5; 23 | margin-#{$global-right}: $form-spacing; 24 | margin-bottom: 0; 25 | 26 | &[for] { 27 | cursor: pointer; 28 | } 29 | } 30 | 31 | // Styles for inputs inside labels 32 | label > [type='checkbox'], 33 | label > [type='radio'] { 34 | margin-#{$global-right}: $form-spacing * 0.5; 35 | } 36 | 37 | // Normalize file input width 38 | [type='file'] { 39 | width: 100%; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/util/_selector.scss: -------------------------------------------------------------------------------- 1 | /// Builds a selector for a motion class, using the settings defined in the `$motion-ui-classes` and `$motion-ui-states` maps. 2 | /// @param {String|List} $states - One or more strings that correlate to a state. 3 | /// @param {Boolean} $active - Defines if the selector is for the setup or active class. 4 | /// @return {String} A selector that can be interpolated into your Sass code. 5 | /// @access private 6 | @function -mui-build-selector($states, $active: false) { 7 | $return: ''; 8 | $chain: map-get($motion-ui-classes, chain); 9 | $prefix: map-get($motion-ui-classes, prefix); 10 | $suffix: map-get($motion-ui-classes, active); 11 | 12 | @each $sel in $states { 13 | $return: $return + if($chain, '&.', '#{&}-') + $prefix + $sel; 14 | 15 | @if $active { 16 | $return: $return + if($chain, '.', '#{&}-') + $prefix + $sel + $suffix; 17 | } 18 | 19 | $return: $return + ', '; 20 | } 21 | 22 | @return str-slice($return, 1, -3); 23 | } 24 | -------------------------------------------------------------------------------- /simulator/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7 2 | 3 | # Keeps Python from generating .pyc files in the container 4 | ENV PYTHONDONTWRITEBYTECODE 1 5 | 6 | # Turns off buffering for easier container logging 7 | ENV PYTHONUNBUFFERED 1 8 | 9 | # Install CMake for gqlalchemy 10 | RUN apt-get update && \ 11 | apt-get --yes install cmake && \ 12 | rm -rf /var/lib/apt/lists/* 13 | 14 | # Install poetry 15 | RUN pip install -U pip \ 16 | && curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python 17 | ENV PATH="${PATH}:/root/.poetry/bin" 18 | 19 | # Install dos2unix 20 | RUN apt-get update && \ 21 | apt-get install -y dos2unix 22 | 23 | WORKDIR /app 24 | COPY poetry.lock pyproject.toml /app/ 25 | 26 | RUN poetry config virtualenvs.create false && \ 27 | poetry install --no-interaction --no-ansi 28 | 29 | COPY ./wait-for-it.sh /wait-for-it.sh 30 | RUN chmod +x /wait-for-it.sh 31 | RUN dos2unix /wait-for-it.sh 32 | 33 | COPY . /app 34 | 35 | EXPOSE 3001 36 | 37 | ENTRYPOINT [ "poetry", "run" ] -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/xy-grid/_position.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Offsets a column to the right/bottom by `$n` columns. 10 | /// 11 | /// @param {Number|List} $n - Size to offset by. You can pass in any value accepted by the `zf-cell()` mixin, such as `6`, `50%`, or `1 of 2`. 12 | /// @param {Boolean} $vertical [false] Sets the direction of the offset. If set to true will apply margin-top instead. 13 | @mixin xy-cell-offset( 14 | $n, 15 | $gutters: $grid-margin-gutters, 16 | $gutter-type: margin, 17 | $breakpoint: $-zf-zero-breakpoint, 18 | $vertical: false 19 | ) { 20 | $direction: if($vertical, 'top', $global-left); 21 | 22 | @include -zf-breakpoint-value($breakpoint, $gutters) { 23 | $gutter: rem-calc($-zf-bp-value) / 2; 24 | $size: if($gutter-type == 'margin', calc(#{xy-cell-size($n)} + #{$gutter}), #{xy-cell-size($n)}); 25 | 26 | margin-#{$direction}: #{$size}; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /cache_handler/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7 2 | 3 | # Keeps Python from generating .pyc files in the container 4 | ENV PYTHONDONTWRITEBYTECODE 1 5 | 6 | # Turns off buffering for easier container logging 7 | ENV PYTHONUNBUFFERED 1 8 | 9 | RUN apt-get update && \ 10 | apt-get --yes install cmake 11 | 12 | # Install poetry 13 | RUN pip install -U pip \ 14 | && curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python 15 | ENV PATH="${PATH}:/root/.poetry/bin" 16 | 17 | RUN pip install pympler 18 | 19 | # Install mgclient 20 | RUN git clone https://github.com/memgraph/mgclient.git /mgclient && \ 21 | cd mgclient && \ 22 | git checkout 5ae69ea4774e9b525a2be0c9fc25fb83490f13bb && \ 23 | mkdir build && \ 24 | cd build && \ 25 | cmake .. && \ 26 | make && \ 27 | make install 28 | 29 | WORKDIR /app 30 | COPY poetry.lock pyproject.toml /app/ 31 | 32 | RUN poetry config virtualenvs.create false && \ 33 | poetry install --no-interaction --no-ansi 34 | 35 | COPY . /app 36 | 37 | ENTRYPOINT [ "poetry", "run" ] -------------------------------------------------------------------------------- /simulator/simulator/models/stationary_object.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import List 3 | 4 | 5 | @dataclass 6 | class StationaryObject: 7 | id: int 8 | x: float 9 | y: float 10 | z: float 11 | eci_x_positions: List 12 | eci_y_positions: List 13 | eci_z_positions: List 14 | 15 | def __post_init__(self): 16 | self.current_position = 0 17 | self.positions_lenght = len(self.eci_x_positions) 18 | 19 | self.eci_x = self.eci_x_positions[self.current_position] 20 | self.eci_y = self.eci_y_positions[self.current_position] 21 | self.eci_z = self.eci_z_positions[self.current_position] 22 | 23 | def update_position(self) -> None: 24 | self.current_position += 1 25 | if self.current_position == self.positions_lenght: 26 | self.current_position = 0 27 | 28 | self.eci_x = self.eci_x_positions[self.current_position] 29 | self.eci_y = self.eci_y_positions[self.current_position] 30 | self.eci_z = self.eci_z_positions[self.current_position] 31 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/customizer/complete.json: -------------------------------------------------------------------------------- 1 | { 2 | "modules": [ 3 | "xy_grid", 4 | "flex_classes", 5 | "typography", 6 | "button", 7 | "forms", 8 | "abide", 9 | "accordion", 10 | "accordion_menu", 11 | "badge", 12 | "breadcrumbs", 13 | "button_group", 14 | "card", 15 | "callout", 16 | "close_button", 17 | "menu", 18 | "menu_icon", 19 | "drilldown_menu", 20 | "dropdown", 21 | "dropdown_menu", 22 | "equalizer", 23 | "responsive_embed", 24 | "interchange", 25 | "label", 26 | "magellan", 27 | "media_object", 28 | "off_canvas", 29 | "orbit", 30 | "pagination", 31 | "progress_bar", 32 | "responsive_menu", 33 | "responsive_toggle", 34 | "reveal", 35 | "slider", 36 | "sticky", 37 | "switch", 38 | "table", 39 | "tabs", 40 | "thumbnail", 41 | "title_bar", 42 | "toggler", 43 | "tooltip", 44 | "top_bar", 45 | "visibility", 46 | "responsive_accordion_tabs", 47 | "float" 48 | ] 49 | } 50 | -------------------------------------------------------------------------------- /web_app/demo/db_operations.py: -------------------------------------------------------------------------------- 1 | import collections 2 | from typing import Any, Dict, List 3 | from demo.database.memgraph import Memgraph 4 | 5 | 6 | def import_all_cities(db: Memgraph) -> Dict[str, Any]: 7 | command = "MATCH (n:City) RETURN n;" 8 | return db.execute_and_fetch(command) 9 | 10 | 11 | def import_satellites_and_relationships(tx: Any, arguments: Dict[str, Any]) -> Dict[str, Any]: 12 | results = {} 13 | 14 | command = "MATCH (s1:Satellite)-[r]-(s2:Satellite) RETURN r, s1, s2;" 15 | results["relationships"] = tx.run(command) 16 | 17 | return results 18 | 19 | 20 | def import_data(tx: Any, arguments: Dict[str, Any]) -> Dict[str, Any]: 21 | results = {} 22 | 23 | command = "MATCH p=(c1:City { id: '" + str(arguments["city_one"]) + \ 24 | "'})-[rs *wShortest (e, n | e.transmission_time) total_transmission_time]-(c2:City { id: '" + str( 25 | arguments["city_two"]) + "'}) WHERE ALL(x IN nodes(p)[1..-1] WHERE (x:Satellite)) RETURN nodes(p), rs;" 26 | results["shortest_path"] = tx.run(command) 27 | 28 | return results -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/transitions/_fade.scss: -------------------------------------------------------------------------------- 1 | /// Creates a fade transition by adjusting the opacity of the element. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Number} $from [0] - Opacity to start at. Must be a number between 0 and 1. 4 | /// @param {Number} $to [1] - Opacity to end on. 5 | /// @param {Keyword} $duration [null] - Length (speed) of the transition. 6 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 7 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 8 | @mixin mui-fade( 9 | $state: in, 10 | $from: 0, 11 | $to: 1, 12 | $duration: null, 13 | $timing: null, 14 | $delay: null 15 | ) { 16 | $fade: fade($from, $to); 17 | 18 | @include transition-start($state) { 19 | @include transition-basics($duration, $timing, $delay); 20 | @include -mui-keyframe-get($fade, 0); 21 | 22 | transition-property: opacity; 23 | } 24 | 25 | @include transition-end($state) { 26 | @include -mui-keyframe-get($fade, 100); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/xy-grid/_grid.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Creates a max width container, designed to house your grid content. 10 | /// 11 | /// @param {Number} $width [$grid-container] - a width to limit the container to. 12 | @mixin xy-grid-container( 13 | $width: $grid-container, 14 | $padding: $grid-container-padding 15 | ) { 16 | @include xy-gutters($gutters: $padding, $gutter-type: padding); 17 | 18 | max-width: $width; 19 | margin: 0 auto; 20 | } 21 | 22 | /// Creates a container for your flex cells. 23 | /// 24 | /// @param {Keyword} $direction [horizontal] - Either horizontal or vertical direction of cells within. 25 | /// @param {Boolean} $wrap [true] - If the cells within should wrap or not. 26 | @mixin xy-grid( 27 | $direction: horizontal, 28 | $wrap: true 29 | ) { 30 | $direction: if($direction == 'horizontal', row, column); 31 | $wrap: if($wrap, wrap, nowrap); 32 | 33 | display: flex; 34 | flex-flow: $direction $wrap; 35 | } 36 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/dist/js/plugins/foundation.util.imageLoader.min.js: -------------------------------------------------------------------------------- 1 | !function(n){function t(o){if(e[o])return e[o].exports;var r=e[o]={i:o,l:!1,exports:{}};return n[o].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var e={};t.m=n,t.c=e,t.d=function(n,e,o){t.o(n,e)||Object.defineProperty(n,e,{configurable:!1,enumerable:!0,get:o})},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p="",t(t.s=86)}({0:function(n,t){n.exports=jQuery},1:function(n,t){n.exports={Foundation:window.Foundation}},86:function(n,t,e){n.exports=e(87)},87:function(n,t,e){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=e(1),r=(e.n(o),e(88));o.Foundation.onImagesLoaded=r.a},88:function(n,t,e){"use strict";function o(n,t){function e(){0===--o&&t()}var o=n.length;0===o&&t(),n.each(function(){if(this.complete&&void 0!==this.naturalWidth)e();else{var n=new Image,t="load.zf.images error.zf.images";i()(n).one(t,function n(o){i()(this).off(t,n),e()}),n.src=i()(this).attr("src")}})}e.d(t,"a",function(){return o});var r=e(0),i=e.n(r)}}); -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/util/_selector.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | /// Generates a selector with every text input type. You can also filter the list to only output a subset of those selectors. 10 | /// 11 | /// @param {List|Keyword} $types [()] - A list of text input types to use. Leave blank to use all of them. 12 | /// @param {Keyword} $modifier [''] - A modifier to be applied to each text input type (e.g. a class or a pseudo-class). Leave blank to ignore. 13 | @function text-inputs($types: (), $modifier: '') { 14 | $return: (); 15 | 16 | $all-types: 17 | text 18 | password 19 | date 20 | datetime 21 | datetime-local 22 | month 23 | week 24 | email 25 | number 26 | search 27 | tel 28 | time 29 | url 30 | color; 31 | 32 | @if not has-value($types) { 33 | $types: $all-types; 34 | } 35 | 36 | @each $type in $types { 37 | $return: append($return, unquote('[type=\'#{$type}\']#{$modifier}'), comma); 38 | } 39 | 40 | @return $return; 41 | } 42 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2017 ZURB, inc. 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/README.md: -------------------------------------------------------------------------------- 1 | # Motion UI 2 | 3 | [![CDNJS](https://img.shields.io/cdnjs/v/motion-ui.svg)](https://cdnjs.com/libraries/motion-ui/) 4 | 5 | A Sass library for creating CSS transitions and animations from your friends at [ZURB](http://zurb.com). Originally integrated into [Foundation for Apps](http://foundation.zurb.com/apps), the code is now a standalone library, soon to be used by [Foundation for Sites](http://foundation.zurb.com/sites) and Foundation for Apps. 6 | 7 | ## Installation 8 | 9 | - On npm: `npm install motion-ui` 10 | - On Bower: `bower install motion-ui` 11 | 12 | ## Demos 13 | 14 | [View live demos on the ZURB Playground.](http://zurb.com/playground/motion-ui) 15 | 16 | ## Documentation 17 | 18 | [View the documentation here.](docs) 19 | 20 | ## Develop Locally 21 | 22 | ``` 23 | git clone https://github.com/zurb/motion-ui 24 | cd motion-ui 25 | npm install 26 | ``` 27 | 28 | - Run `npm start` to compile test Sass/JS files, and to build the documentation. 29 | - **To make changes to the documentation, edit the files under `docs/src`. 30 | - Run `npm test` to run the unit tests. 31 | - Run `npm start dist` to compile distribution files. 32 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/util/_typography.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | $-zf-font-stack: ( 10 | 'georgia': (Georgia, "URW Bookman L", serif), 11 | 'helvetica': (Helvetica, Arial, "Nimbus Sans L", sans-serif), 12 | 'lucida-grande': ("Lucida Grande", "Lucida Sans Unicode", "Bitstream Vera Sans", sans-serif), 13 | 'monospace': ("Courier New", Courier, "Nimbus Sans L", monospace), 14 | 'system': (-apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif), 15 | 'verdana': (Verdana, Geneva, "DejaVu Sans", sans-serif), 16 | ); 17 | 18 | /// Return a font stack list from a map. Equivalent to `map-safe-get($name, $-zf-font-stack)`. 19 | /// 20 | /// @param {String} $stack - Name of the font stack. 21 | /// @param {Map} $map [$-zf-font-stack] - Map of font stacks to retrieve a list from. 22 | /// 23 | /// @returns {List} Found font stack. 24 | @function font-stack($stack, $map: $-zf-font-stack) { 25 | @return map-safe-get($map, $stack); 26 | } 27 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011-2017 ZURB, inc. 2 | 3 | MIT License 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining 6 | a copy of this software and associated documentation files (the 7 | "Software"), to deal in the Software without restriction, including 8 | without limitation the rights to use, copy, modify, merge, publish, 9 | distribute, sublicense, and/or sell copies of the Software, and to 10 | permit persons to whom the Software is furnished to do so, subject to 11 | the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /blog_post/blog-post-hooks.md: -------------------------------------------------------------------------------- 1 | # Blog Post Hooks 2 | ## Hook 1 3 | SpaceX is sending hundreds of satellites into Earth's orbit to form the biggest satellite constellation in history.We visualized this network and demonstrated how to use a Graph Database for low latency routing.Visit our post and find out more! 4 | 5 | ## Hook 2 6 | SpaceX is developing Starlink, a low latency internet system in form of a satellite constellation. We have prepared an interactive simulation of their endeavour if you want to find out more about the project.You can look it up on our blog post! 7 | 8 | ## Hook 3 9 | Learn how Graph Databases can be used for low latency routing in satellite internet constellations like Starlink.Visit our blog post to play around with the graph data yourself or try out our interactive Starlink simulation. 10 | 11 | ## Hook 4 12 | Real-time optimal routing in large networks can be very resource-consuming and ineffective.Visit our post and find out how an in-memory Graph Database can be used for low latency routing in satellite internet constellations like Starlink. 13 | 14 | ## Musk Tweet (in progress) 15 | Tried to make a Starlink simulation. What do you think? \[Grinning face emoticon]\[Rocket emoticon] -------------------------------------------------------------------------------- /cache_handler/data_translator.py: -------------------------------------------------------------------------------- 1 | import time 2 | import json 3 | import logging 4 | from typing import Any, Dict, Iterator 5 | 6 | 7 | logger = logging.getLogger("cache") 8 | 9 | 10 | def json_relationships_satellites(relationships: Iterator[Dict[str, Any]]) -> "JSON": 11 | start_time = time.time() 12 | 13 | json_relationships = [] 14 | json_satellites = {} 15 | sat_ids = set() 16 | for rel in relationships: 17 | r = rel["r"] 18 | s1 = rel["s1"] 19 | s2 = rel["s2"] 20 | print(rel) 21 | json_relationships.append([s1.x, s1.y, s2.x, s2.y, r.transmission_time]) 22 | 23 | if not s1.id in sat_ids: 24 | json_satellites[s1.id] = [ 25 | s1.x, 26 | s1.y, 27 | ] 28 | sat_ids.add(s1.id) 29 | if not s2.id in sat_ids: 30 | json_satellites[s2.id] = [ 31 | s2.x, 32 | s2.y, 33 | ] 34 | sat_ids.add(s2.id) 35 | 36 | logger.info( 37 | f"Relationship and Satellite JSON created in {time.time() - start_time} seconds." 38 | ) 39 | return json.dumps(json_relationships), json.dumps(json_satellites) 40 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/sassy-lists/stylesheets/functions/_replace.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// Replaces `$old` by `$new` in `$list`. 3 | /// 4 | /// @ignore Documentation: http://at-import.github.io/SassyLists/documentation/#function-sl-replace 5 | /// 6 | /// @requires sl-is-true 7 | /// @requires sl-purge 8 | /// @requires sl-to-list 9 | /// 10 | /// @param {List} $list - list to update 11 | /// @param {*} $old - value to replace 12 | /// @param {*} $value - new value for $old 13 | /// 14 | /// @example 15 | /// sl-replace(a b c, b, z) 16 | /// // a z c 17 | /// 18 | /// @example 19 | /// sl-replace(a b c, y, z) 20 | /// // a b c 21 | /// 22 | /// @return {List} 23 | /// 24 | 25 | @function sl-replace($list, $old, $value) { 26 | $_: sl-missing-dependencies('sl-is-true', 'sl-purge', 'sl-to-list'); 27 | 28 | $running: true; 29 | 30 | @while $running { 31 | $index: index($list, $old); 32 | 33 | @if not $index { 34 | $running: false; 35 | } 36 | 37 | @else { 38 | $list: set-nth($list, $index, $value); 39 | } 40 | 41 | } 42 | 43 | $list: if(sl-is-true($value), $list, sl-purge($list)); 44 | 45 | @return sl-to-list($list); 46 | } 47 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_slide.scss: -------------------------------------------------------------------------------- 1 | /// Creates a sliding animation. 2 | /// @param {Keyword} $state [in] - Whether to move to (`in`) or from (`out`) the element's default position. 3 | /// @param {Keyword} $direction [up] - Direction to move. Can be `up`, `down`, `left`, or `right`. 4 | /// @param {Number} $amount [100%] - Distance to move. Can be any CSS length unit. 5 | /// @return {Map} A keyframes map that can be used with the `generate-keyframes()` mixin. 6 | @function slide( 7 | $state: in, 8 | $direction: up, 9 | $amount: 100% 10 | ) { 11 | $from: $amount; 12 | $to: 0; 13 | $func: 'translateY'; 14 | 15 | @if $direction == left or $direction == right { 16 | $func: 'translateX'; 17 | } 18 | 19 | @if $state == out { 20 | $from: 0; 21 | $to: $amount; 22 | } 23 | 24 | @if $direction == down or $direction == right { 25 | @if $state == in { 26 | $from: -$from; 27 | } 28 | } @else { 29 | @if $state == out { 30 | $to: -$to; 31 | } 32 | } 33 | 34 | $keyframes: ( 35 | name: 'slide-#{$state}-#{$direction}-#{strip-unit($amount)}', 36 | 0: (transform: '#{$func}(#{$from})'), 37 | 100: (transform: '#{$func}(#{$to})'), 38 | ); 39 | 40 | @return $keyframes; 41 | } 42 | -------------------------------------------------------------------------------- /web_app/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.7 2 | 3 | # Keeps Python from generating .pyc files in the container 4 | ENV PYTHONDONTWRITEBYTECODE 1 5 | 6 | # Turns off buffering for easier container logging 7 | ENV PYTHONUNBUFFERED 1 8 | 9 | RUN apt-get update && \ 10 | apt-get --yes install cmake 11 | 12 | # Install poetry 13 | RUN pip install -U pip \ 14 | && curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python 15 | ENV PATH="${PATH}:/root/.poetry/bin" 16 | 17 | # Install mgclient 18 | RUN git clone https://github.com/memgraph/mgclient.git /mgclient && \ 19 | cd mgclient && \ 20 | git checkout 5ae69ea4774e9b525a2be0c9fc25fb83490f13bb && \ 21 | mkdir build && \ 22 | cd build && \ 23 | cmake .. && \ 24 | make && \ 25 | make install 26 | 27 | # Install dos2unix 28 | RUN apt-get update && \ 29 | apt-get install -y dos2unix 30 | 31 | RUN pip install --user flask-compress 32 | 33 | WORKDIR /app 34 | COPY poetry.lock pyproject.toml /app/ 35 | 36 | RUN poetry config virtualenvs.create false && \ 37 | poetry install --no-interaction --no-ansi 38 | 39 | COPY . /app 40 | EXPOSE 5001 41 | 42 | ADD start.sh / 43 | RUN chmod +x /start.sh 44 | RUN dos2unix /start.sh 45 | 46 | ENTRYPOINT [ "poetry", "run" ] 47 | CMD ["/start.sh"] -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_shadow.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-shadow 7 | //// 8 | 9 | /// Responsive breakpoints for shadow utility. 10 | /// @type Boolean 11 | $prototype-shadow-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default value for `prototype-box-shadow` 14 | /// @type Number 15 | $prototype-box-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 16 | 0 2px 10px 0 rgba(0,0,0,.12) !default; 17 | 18 | /// Shadow Utility: Adds a light box shadow to an element by default. 19 | /// @param {Number} $shadow [$prototype-box-shadow] Box Shadow of a component 20 | @mixin shadow( 21 | $shadow: $prototype-box-shadow 22 | ) { 23 | box-shadow: $shadow; 24 | } 25 | 26 | @mixin foundation-prototype-shadow { 27 | .shadow { 28 | @include shadow; 29 | } 30 | 31 | @if ($prototype-shadow-breakpoints) { 32 | // Loop through Responsive Breakpoints 33 | @each $size in $breakpoint-classes { 34 | @include breakpoint($size) { 35 | @if $size != $-zf-zero-breakpoint { 36 | .#{$size}-shadow { 37 | @include shadow; 38 | } 39 | } 40 | } 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_fieldset.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Default border around custom fieldsets. 10 | /// @type Border 11 | $fieldset-border: 1px solid $medium-gray !default; 12 | 13 | /// Default padding inside custom fieldsets. 14 | /// @type Number 15 | $fieldset-padding: rem-calc(20) !default; 16 | 17 | /// Default margin around custom fieldsets. 18 | /// @type Number 19 | $fieldset-margin: rem-calc(18 0) !default; 20 | 21 | /// Default padding between the legend text and fieldset border. 22 | /// @type Number 23 | $legend-padding: rem-calc(0 3) !default; 24 | 25 | @mixin fieldset { 26 | margin: $fieldset-margin; 27 | padding: $fieldset-padding; 28 | border: $fieldset-border; 29 | 30 | legend { 31 | // Covers up the fieldset's border to create artificial padding 32 | margin: 0; 33 | margin-#{$global-left}: rem-calc(-3); 34 | padding: $legend-padding; 35 | } 36 | } 37 | 38 | @mixin foundation-form-fieldset { 39 | fieldset { 40 | margin: 0; 41 | padding: 0; 42 | border: 0; 43 | } 44 | 45 | legend { 46 | max-width: 100%; 47 | margin-bottom: $form-spacing * 0.5; 48 | } 49 | 50 | .fieldset { 51 | @include fieldset; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_label.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Color for form labels. 10 | /// @type Color 11 | $form-label-color: $black !default; 12 | 13 | /// Font size for form labels. 14 | /// @type Number 15 | $form-label-font-size: rem-calc(14) !default; 16 | 17 | /// Font weight for form labels. 18 | /// @type Keyword 19 | $form-label-font-weight: $global-weight-normal !default; 20 | 21 | /// Line height for form labels. The higher the number, the more space between the label and its input field. 22 | /// @type Number 23 | $form-label-line-height: 1.8 !default; 24 | 25 | @mixin form-label { 26 | display: block; 27 | margin: 0; 28 | 29 | font-size: $form-label-font-size; 30 | font-weight: $form-label-font-weight; 31 | line-height: $form-label-line-height; 32 | color: $form-label-color; 33 | } 34 | 35 | @mixin form-label-middle { 36 | $input-border-width: get-border-value($input-border, width); 37 | 38 | margin: 0 0 $form-spacing; 39 | padding: ($form-spacing / 2 + rem-calc($input-border-width)) 0; 40 | } 41 | 42 | @mixin foundation-form-label { 43 | label { 44 | @include form-label; 45 | 46 | &.middle { 47 | @include form-label-middle; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'zurb:motion-ui', 3 | version: '1.2.2', 4 | summary: 'Sass library for creating transitions and animations', 5 | git: 'https://github.com/zurb/motion-ui.git', 6 | documentation: 'meteor-README.md' 7 | }); 8 | 9 | Package.onUse(function(api) { 10 | api.versionsFrom('1.2.1'); 11 | api.imply('fourseven:scss@3.4.1'); 12 | api.use(['ecmascript', 'jquery', 'fourseven:scss@3.4.1'], 'client'); 13 | api.addFiles('dist/motion-ui.js', 'client'); 14 | api.addFiles([ 15 | 'src/_settings.scss', 16 | 'src/util/_animation.scss', 17 | 'src/util/_args.scss', 18 | 'src/util/_keyframe.scss', 19 | 'src/util/_selector.scss', 20 | 'src/util/_series.scss', 21 | 'src/util/_transition.scss', 22 | 'src/util/_unit.scss', 23 | 'src/effects/_fade.scss', 24 | 'src/effects/_hinge.scss', 25 | 'src/effects/_spin.scss', 26 | 'src/effects/_zoom.scss', 27 | 'src/effects/_shake.scss', 28 | 'src/effects/_slide.scss', 29 | 'src/effects/_wiggle.scss', 30 | 'src/transitions/_fade.scss', 31 | 'src/transitions/_hinge.scss', 32 | 'src/transitions/_zoom.scss', 33 | 'src/transitions/_slide.scss', 34 | 'src/transitions/_spin.scss', 35 | 'src/_classes.scss', 36 | 'src/motion-ui.scss' 37 | ], 'client', {isImport: true}); 38 | }); 39 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/dist/js/plugins/foundation.util.timer.min.js: -------------------------------------------------------------------------------- 1 | !function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=101)}({0:function(t,e){t.exports=jQuery},1:function(t,e){t.exports={Foundation:window.Foundation}},101:function(t,e,n){t.exports=n(102)},102:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),i=(n.n(r),n(103));r.Foundation.Timer=i.a},103:function(t,e,n){"use strict";function r(t,e,n){var r,i,o=this,u=e.duration,a=Object.keys(t.data())[0]||"timer",s=-1;this.isPaused=!1,this.restart=function(){s=-1,clearTimeout(i),this.start()},this.start=function(){this.isPaused=!1,clearTimeout(i),s=s<=0?u:s,t.data("paused",!1),r=Date.now(),i=setTimeout(function(){e.infinite&&o.restart(),n&&"function"==typeof n&&n()},s),t.trigger("timerstart.zf."+a)},this.pause=function(){this.isPaused=!0,clearTimeout(i),t.data("paused",!0);var e=Date.now();s-=e-r,t.trigger("timerpaused.zf."+a)}}n.d(e,"a",function(){return r});var i=n(0);n.n(i)}}); -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/docs/javascript.md: -------------------------------------------------------------------------------- 1 | # JavaScript 2 | 3 | Motion UI includes a small JavaScript library that can play transitions, although this specific library is not required to take advantage of Motion UI's CSS. Animating in reveals a hidden element, while animating out hides a visible element. 4 | 5 | The library is available on `window.MotionUI`, or can imported with a module system. 6 | 7 | ## Usage 8 | 9 | The `MotionUI` object has two methods: `animateIn()` and `animateOut()`. Both functions take three parameters: 10 | 11 | - `element`: a DOM element to animate. 12 | - `animation`: a transition class to use. 13 | - `cb` (optional): a callback to run when the transition finishes. Within the callback, the value of `this` is the DOM element that was transitioned. 14 | 15 | Here's an example: 16 | 17 | ```js 18 | var $elem = $('[data-animate]'); 19 | 20 | MotionUI.animateIn($elem, 'slide-in', function() { 21 | console.log('Transition finished!'); 22 | }); 23 | ``` 24 | 25 | What about animations? Those can be triggered just by adding the animation class to an element. Here are examples with plain JavaScript and with jQuery: 26 | 27 | ```js 28 | // Plain JavaScript (IE10+) 29 | document.querySelector('.animating-thing').classList.add('wiggle'); 30 | 31 | // jQuery 32 | $('.animating-thing').addClass('wiggle'); 33 | ``` 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_display.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-display 7 | //// 8 | 9 | /// Responsive breakpoints for display classes 10 | /// @type Boolean 11 | $prototype-display-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `display` classes 14 | /// @type Map 15 | $prototype-display: ( 16 | inline, 17 | inline-block, 18 | block, 19 | table, 20 | table-cell 21 | ) !default; 22 | 23 | /// Display classes, by default coming through a map `$prototype-display` 24 | /// @param {String} $display [] Display classes 25 | @mixin display($display) { 26 | display: $display !important; 27 | } 28 | 29 | @mixin foundation-prototype-display { 30 | @each $display in $prototype-display { 31 | .display-#{$display} { 32 | @include display($display); 33 | } 34 | } 35 | 36 | @if ($prototype-display-breakpoints) { 37 | // Loop through Responsive Breakpoints 38 | @each $size in $breakpoint-classes { 39 | @include breakpoint($size) { 40 | @each $display in $prototype-display { 41 | @if $size != $-zf-zero-breakpoint { 42 | .#{$size}-display-#{$display} { 43 | @include display($display); 44 | } 45 | } 46 | } 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/foundation.util.imageLoader.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import $ from 'jquery'; 4 | 5 | /** 6 | * Runs a callback function when images are fully loaded. 7 | * @param {Object} images - Image(s) to check if loaded. 8 | * @param {Func} callback - Function to execute when image is fully loaded. 9 | */ 10 | function onImagesLoaded(images, callback){ 11 | var self = this, 12 | unloaded = images.length; 13 | 14 | if (unloaded === 0) { 15 | callback(); 16 | } 17 | 18 | images.each(function(){ 19 | // Check if image is loaded 20 | if (this.complete && this.naturalWidth !== undefined) { 21 | singleImageLoaded(); 22 | } 23 | else { 24 | // If the above check failed, simulate loading on detached element. 25 | var image = new Image(); 26 | // Still count image as loaded if it finalizes with an error. 27 | var events = "load.zf.images error.zf.images"; 28 | $(image).one(events, function me(event){ 29 | // Unbind the event listeners. We're using 'one' but only one of the two events will have fired. 30 | $(this).off(events, me); 31 | singleImageLoaded(); 32 | }); 33 | image.src = $(this).attr('src'); 34 | } 35 | }); 36 | 37 | function singleImageLoaded() { 38 | unloaded--; 39 | if (unloaded === 0) { 40 | callback(); 41 | } 42 | } 43 | } 44 | 45 | export { onImagesLoaded }; 46 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/xy-grid/_layout.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Sizes child elements so that `$n` number of items appear on each row. 10 | /// 11 | /// @param {Number} $n - Number of elements to display per row. 12 | /// @param {String} $selector ['.cell'] - Selector(s) to use for child elements. 13 | /// @param {Boolean} $gutter-output [true] - Whether or not to output gutters 14 | /// @param {Number|Map} $gutters [$grid-margin-gutters] - Map or single value for gutters. 15 | /// @param {Keyword} $gutter-type [margin] - Type of gutter to output. Accepts `margin` or `padding`. 16 | /// @param {List} $gutter-position [right left] - The position to apply gutters to. Accepts `top`, `bottom`, `left`, `right` in any combination. 17 | /// @param {Boolean} $vertical [false] - Set to true to output vertical (height) styles rather than widths. 18 | @mixin xy-grid-layout( 19 | $n, 20 | $selector: '.cell', 21 | $gutter-output: true, 22 | $gutters: $grid-margin-gutters, 23 | $gutter-type: margin, 24 | $gutter-position: right left, 25 | $breakpoint: $-zf-zero-breakpoint, 26 | $vertical: false 27 | ) { 28 | $size: percentage(1/$n); 29 | 30 | & > #{$selector} { 31 | @include xy-cell($size, $gutter-output, $gutters, $gutter-type, $gutter-position, $breakpoint, $vertical); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/docs/wow.md: -------------------------------------------------------------------------------- 1 | # WOW.js Integration 2 | 3 | Motion UI can be paired with [WOW.js](http://mynameismatthieu.com/WOW/) to trigger animations as elements scroll into view. **[Here's a CodePen that illustrates the concepts below](http://codepen.io/gakimball/pen/WrKRRy)**. 4 | 5 | To start, load the JavaScript for WOW.js. The quickest way to do this is by loading from a CDN: 6 | 7 | ```html 8 | 9 | ``` 10 | 11 | Next, in your main JavaScript file, initialize WOW: 12 | 13 | ```js 14 | var wow = new WOW(); 15 | wow.init(); 16 | ``` 17 | 18 | Lastly, we need animation classes to add to elements. Because Motion UI is a transition-focused library, there aren't many animation classes that come out of the box. The built-in animation classes are `.wiggle`, `.shake`, `.spin-cw`, and `.spin-ccw`. However, creating out own animation class using any of the transition effects is easy, using Motion UI's Sass mixins. 19 | 20 | Here's a basic fade class. Refer to the [documentation on animations](animations.md) to learn more about how animations are built. 21 | 22 | ```scss 23 | .animate-fade-in { 24 | @include mui-animation(fade); 25 | } 26 | ``` 27 | 28 | Now we can apply this class to any element. We also add the class `.wow`, so WOW knows which elements to target as the page scrolls. 29 | 30 | ```html 31 | 32 | ``` 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_text-decoration.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-text-decoration 7 | //// 8 | 9 | /// Responsive breakpoints for text decoration classes 10 | /// @type Boolean 11 | $prototype-decoration-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `text-decoration` classes 14 | /// @type Map 15 | $prototype-text-decoration: ( 16 | overline, 17 | underline, 18 | line-through, 19 | ) !default; 20 | 21 | /// Text Decoration, by default coming through a map `$prototype-text-decoration` 22 | /// @param {String} $decoration [] Text Decoration 23 | @mixin text-decoration($decoration) { 24 | text-decoration: $decoration !important; 25 | } 26 | 27 | @mixin foundation-prototype-text-decoration { 28 | @each $decoration in $prototype-text-decoration { 29 | .text-#{$decoration} { 30 | @include text-decoration($decoration); 31 | } 32 | } 33 | 34 | @if ($prototype-decoration-breakpoints) { 35 | // Loop through Responsive Breakpoints 36 | @each $size in $breakpoint-classes { 37 | @include breakpoint($size) { 38 | @each $decoration in $prototype-text-decoration { 39 | @if $size != $-zf-zero-breakpoint { 40 | .#{$size}-text-#{$decoration} { 41 | @include text-decoration($decoration); 42 | } 43 | } 44 | } 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/meteor-README.md: -------------------------------------------------------------------------------- 1 | ## Motion-UI for Meteor 2 | 3 | You can use only Sass version with this package. If you need compiled .css version just copy .css and .js files from `dist` folder and add them to your Meteor project. 4 | 5 | ### Installation 6 | 7 | ```bash 8 | $ meteor add zurb:motion-ui 9 | ``` 10 | 11 | ### Sass Usage 12 | 13 | In your main .scss file in the Meteor project `@import` the library: 14 | 15 | ```css 16 | @import '{zurb:motion-ui}/src/motion-ui'; 17 | ``` 18 | 19 | Autoprefixer is required to use this library. The library uses unprefixed transition and animation properties, which are then prefixed by Autoprefixer. You can use one of two packages (they will be no autoincluded): 20 | 21 | - [juliancwirko:postcss](https://atmospherejs.com/juliancwirko/postcss) (Autoprefixer is just a PostCSS plugin) 22 | - [seba:minifiers-autoprefixer](https://atmospherejs.com/seba/minifiers-autoprefixer) 23 | 24 | The library includes two mixins which export all of the default CSS for the framework. This includes: 25 | 26 | - Transitions for slide, fade, hinge, scale, and spin 27 | - Animation classes for spinning, shaking, and wiggling 28 | - Modifier classes for transition/animation speed, timing, and delay 29 | 30 | ```css 31 | @include motion-ui-transitions; 32 | @include motion-ui-animations; 33 | ``` 34 | 35 | You can also use special mixins. You'll find more documentation here: [Motion-UI docs](https://github.com/zurb/motion-ui/tree/master/docs) All besides installation details should work the same. -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/entries/foundation-plugins.js: -------------------------------------------------------------------------------- 1 | import { Abide } from '../foundation.abide'; 2 | import { Accordion } from '../foundation.accordion'; 3 | import { AccordionMenu } from '../foundation.accordionMenu'; 4 | import { Drilldown } from '../foundation.drilldown'; 5 | import { Dropdown } from '../foundation.dropdown'; 6 | import { DropdownMenu } from '../foundation.dropdownMenu'; 7 | import { Equalizer } from '../foundation.equalizer'; 8 | import { Interchange } from '../foundation.interchange'; 9 | import { Magellan } from '../foundation.magellan'; 10 | import { OffCanvas } from '../foundation.offcanvas'; 11 | import { Orbit } from '../foundation.orbit'; 12 | import { ResponsiveMenu } from '../foundation.responsiveMenu'; 13 | import { ResponsiveToggle } from '../foundation.responsiveToggle'; 14 | import { Reveal } from '../foundation.reveal'; 15 | import { Slider } from '../foundation.slider'; 16 | import { SmoothScroll } from '../foundation.smoothScroll'; 17 | import { Sticky } from '../foundation.sticky'; 18 | import { Tabs } from '../foundation.tabs'; 19 | import { Toggler } from '../foundation.toggler'; 20 | import { Tooltip } from '../foundation.tooltip'; 21 | import { ResponsiveAccordionTabs } from '../foundation.responsiveAccordionTabs'; 22 | 23 | export { 24 | Abide, Accordion, AccordionMenu, Drilldown, Dropdown, DropdownMenu, Equalizer, Interchange, Magellan, OffCanvas, Orbit, ResponsiveMenu, ResponsiveToggle, Reveal, Slider, SmoothScroll, Sticky, Tabs, Toggler, Tooltip, ResponsiveAccordionTabs 25 | } 26 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/normalize-scss/sass/normalize/_variables.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Variables 3 | // 4 | // You can override the default values by setting the variables in your Sass 5 | // before importing the normalize-scss library. 6 | 7 | // The font size set on the root html element. 8 | $base-font-size: 16px !default; 9 | 10 | // The base line height determines the basic unit of vertical rhythm. 11 | $base-line-height: 24px !default; 12 | 13 | // The length unit in which to output vertical rhythm values. 14 | // Supported values: px, em, rem. 15 | $base-unit: 'em' !default; 16 | 17 | // The default font family. 18 | $base-font-family: sans-serif !default; 19 | 20 | // The font sizes for h1-h6. 21 | $h1-font-size: 2 * $base-font-size !default; 22 | $h2-font-size: 1.5 * $base-font-size !default; 23 | $h3-font-size: 1.17 * $base-font-size !default; 24 | $h4-font-size: 1 * $base-font-size !default; 25 | $h5-font-size: 0.83 * $base-font-size !default; 26 | $h6-font-size: 0.67 * $base-font-size !default; 27 | 28 | // The amount lists and blockquotes are indented. 29 | $indent-amount: 40px !default; 30 | 31 | // The following variable controls whether normalize-scss will output 32 | // font-sizes, line-heights and block-level top/bottom margins that form a basic 33 | // vertical rhythm on the page, which differs from the original Normalize.css. 34 | // However, changing any of the variables above will cause 35 | // $normalize-vertical-rhythm to be automatically set to true. 36 | $normalize-vertical-rhythm: false !default; 37 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/transitions/_zoom.scss: -------------------------------------------------------------------------------- 1 | /// Creates a scaling transition. A scale of `1` means the element is the same size. Larger numbers make the element bigger, while numbers less than 1 make the element smaller. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Number} $from [1.5] - Size to start at. 4 | /// @param {Number} $from [1] - Size to end at. 5 | /// @param {Boolean} $fade [true] - Set to `true` to fade the element in or out simultaneously. 6 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 7 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 8 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 9 | @mixin mui-zoom( 10 | $state: in, 11 | $from: 1.5, 12 | $to: 1, 13 | $fade: map-get($motion-ui-settings, scale-and-fade), 14 | $duration: null, 15 | $timing: null, 16 | $delay: null 17 | ) { 18 | $scale: zoom($from, $to); 19 | 20 | @include transition-start($state) { 21 | @include transition-basics($duration, $timing, $delay); 22 | @include -mui-keyframe-get($scale, 0); 23 | 24 | @if $fade { 25 | transition-property: transform, opacity; 26 | opacity: if($state == in, 0, 1); 27 | } @else { 28 | transition-property: transform, opacity; 29 | } 30 | } 31 | 32 | @include transition-end($state) { 33 | @include -mui-keyframe-get($scale, 100); 34 | 35 | @if $fade { 36 | opacity: if($state == in, 1, 0); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/foundation.util.timer.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import $ from 'jquery'; 4 | 5 | function Timer(elem, options, cb) { 6 | var _this = this, 7 | duration = options.duration,//options is an object for easily adding features later. 8 | nameSpace = Object.keys(elem.data())[0] || 'timer', 9 | remain = -1, 10 | start, 11 | timer; 12 | 13 | this.isPaused = false; 14 | 15 | this.restart = function() { 16 | remain = -1; 17 | clearTimeout(timer); 18 | this.start(); 19 | } 20 | 21 | this.start = function() { 22 | this.isPaused = false; 23 | // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. 24 | clearTimeout(timer); 25 | remain = remain <= 0 ? duration : remain; 26 | elem.data('paused', false); 27 | start = Date.now(); 28 | timer = setTimeout(function(){ 29 | if(options.infinite){ 30 | _this.restart();//rerun the timer. 31 | } 32 | if (cb && typeof cb === 'function') { cb(); } 33 | }, remain); 34 | elem.trigger(`timerstart.zf.${nameSpace}`); 35 | } 36 | 37 | this.pause = function() { 38 | this.isPaused = true; 39 | //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. 40 | clearTimeout(timer); 41 | elem.data('paused', true); 42 | var end = Date.now(); 43 | remain = remain - (end - start); 44 | elem.trigger(`timerpaused.zf.${nameSpace}`); 45 | } 46 | } 47 | 48 | export {Timer}; 49 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/grid/_grid.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// The maximum width of a row. 10 | /// @type Number 11 | $grid-row-width: $global-width !default; 12 | 13 | /// The default column count of a grid. Changing this value affects the logic of the grid mixins, and the number of CSS classes output. 14 | /// @type Number 15 | $grid-column-count: 12 !default; 16 | 17 | /// The amount of space between columns at different screen sizes. To use just one size, set the variable to a number instead of a map. 18 | /// @type Map | Length 19 | /// @since 6.1.0 20 | $grid-column-gutter: ( 21 | small: 20px, 22 | medium: 30px, 23 | ) !default; 24 | 25 | /// If `true`, the last column in a row will align to the opposite edge of the row. 26 | /// @type Boolean 27 | $grid-column-align-edge: true !default; 28 | 29 | /// Selector used for an alias of column (with @extend). If `false`, no alias is created. 30 | /// @type String 31 | $grid-column-alias: 'columns' !default; 32 | 33 | /// The highest number of `.x-up` classes available when using the block grid CSS. 34 | /// @type Number 35 | $block-grid-max: 8 !default; 36 | 37 | // Internal value to store the end column float direction 38 | $-zf-end-float: if($grid-column-align-edge, $global-right, $global-left); 39 | 40 | @import 'row'; 41 | @import 'column'; 42 | @import 'size'; 43 | @import 'position'; 44 | @import 'gutter'; 45 | @import 'classes'; 46 | @import 'layout'; 47 | 48 | @import 'flex-grid'; 49 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_text-transformation.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-text-transformation 7 | //// 8 | 9 | /// Responsive breakpoints for text transformation classes 10 | /// @type Boolean 11 | $prototype-transformation-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `text-transformation` classes 14 | /// @type Map 15 | $prototype-text-transformation: ( 16 | lowercase, 17 | uppercase, 18 | capitalize 19 | ) !default; 20 | 21 | /// Text Transformation, by default coming through a map `$prototype-text-transformation` 22 | /// @param {String} $transformation [] Text Transformation 23 | @mixin text-transform($transformation) { 24 | text-transform: $transformation !important; 25 | } 26 | 27 | @mixin foundation-prototype-text-transformation { 28 | @each $transformation in $prototype-text-transformation { 29 | .text-#{$transformation} { 30 | @include text-transform($transformation); 31 | } 32 | } 33 | 34 | @if ($prototype-transformation-breakpoints) { 35 | // Loop through Responsive Breakpoints 36 | @each $size in $breakpoint-classes { 37 | @include breakpoint($size) { 38 | @each $transformation in $prototype-text-transformation { 39 | @if $size != $-zf-zero-breakpoint { 40 | .#{$size}-text-#{$transformation} { 41 | @include text-transform($transformation); 42 | } 43 | } 44 | } 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/transitions/_spin.scss: -------------------------------------------------------------------------------- 1 | /// Creates a spinning transition by rotating the element. The `turn` unit is used to specify how far to rotate. `1turn` is equal to a 360-degree spin. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Boolean} $direction [cw] - Direction to spin. Should be `cw` (clockwise) or `ccw` (counterclockwise). 4 | /// @param {Number} $amount [0.75turn] - Amount to element the element. 5 | /// @param {Boolean} $fade [false] - Set to `true` to fade the element in or out simultaneously. 6 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 7 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 8 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 9 | @mixin mui-spin( 10 | $state: in, 11 | $direction: cw, 12 | $amount: 0.75turn, 13 | $fade: map-get($motion-ui-settings, spin-and-fade), 14 | $duration: null, 15 | $timing: null, 16 | $delay: null 17 | ) { 18 | $spin: spin($state, $direction, $amount); 19 | 20 | @include transition-start($state) { 21 | @include transition-basics($duration, $timing, $delay); 22 | @include -mui-keyframe-get($spin, 0); 23 | 24 | @if $fade { 25 | transition-property: transform, opacity; 26 | opacity: if($state == in, 0, 1); 27 | } @else { 28 | transition-property: transform, opacity; 29 | } 30 | } 31 | 32 | @include transition-end($state) { 33 | @include -mui-keyframe-get($spin, 100); 34 | 35 | @if $fade { 36 | opacity: if($state == in, 1, 0); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/transitions/_slide.scss: -------------------------------------------------------------------------------- 1 | /// Creates a sliding transition by translating the element horizontally or vertically. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $direction [left] - Direction to slide to. Can be `up`, `right`, `down`, or `left`. 4 | /// @param {Length} $amount [100%] - Length of the slide as a percentage value. 5 | /// @param {Boolean} $fade [false] - Set to `true` to fade the element in or out simultaneously. 6 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 7 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 8 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 9 | @mixin mui-slide ( 10 | $state: in, 11 | $direction: left, 12 | $amount: 100%, 13 | $fade: map-get($motion-ui-settings, slide-and-fade), 14 | $duration: null, 15 | $timing: null, 16 | $delay: null 17 | ) { 18 | $slide: slide($state, $direction, $amount); 19 | 20 | // CSS Output 21 | @include transition-start($state) { 22 | @include transition-basics($duration, $timing, $delay); 23 | @include -mui-keyframe-get($slide, 0); 24 | 25 | @if $fade { 26 | transition-property: transform, opacity; 27 | opacity: if($state == in, 0, 1); 28 | } @else { 29 | transition-property: transform, opacity; 30 | } 31 | 32 | backface-visibility: hidden; 33 | } 34 | 35 | @include transition-end($state) { 36 | @include -mui-keyframe-get($slide, 100); 37 | 38 | @if $fade { 39 | opacity: if($state == in, 1, 0); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_progress-bar.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | /// Adds styles for a progress bar container. 6 | @mixin progress-container { 7 | height: $progress-height; 8 | margin-bottom: $progress-margin-bottom; 9 | border-radius: $progress-radius; 10 | background-color: $progress-background; 11 | } 12 | 13 | /// Adds styles for the inner meter of a progress bar. 14 | @mixin progress-meter { 15 | position: relative; 16 | display: block; 17 | width: 0%; 18 | height: 100%; 19 | background-color: $progress-meter-background; 20 | 21 | @if has-value($progress-radius) { 22 | border-radius: $global-radius; 23 | } 24 | } 25 | 26 | /// Adds styles for text in the progress meter. 27 | @mixin progress-meter-text { 28 | @include absolute-center; 29 | position: absolute; 30 | margin: 0; 31 | font-size: 0.75rem; 32 | font-weight: bold; 33 | color: $white; 34 | white-space: nowrap; 35 | 36 | @if has-value($progress-radius) { 37 | border-radius: $progress-radius; 38 | } 39 | } 40 | 41 | @mixin foundation-progress-bar { 42 | // Progress bar 43 | .progress { 44 | @include progress-container; 45 | 46 | @each $name, $color in $foundation-palette { 47 | &.#{$name} { 48 | .progress-meter { 49 | background-color: $color; 50 | } 51 | } 52 | } 53 | } 54 | 55 | // Inner meter 56 | .progress-meter { 57 | @include progress-meter; 58 | } 59 | 60 | // Inner meter text 61 | .progress-meter-text { 62 | @include progress-meter-text; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/xy-grid/_xy-grid.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Enables the XY grid. 10 | /// @type Boolean 11 | $xy-grid: true !default; 12 | 13 | /// The maximum width of a grid container. 14 | /// @type Number 15 | $grid-container: $global-width !default; 16 | 17 | /// The number of columns used in the grid. 18 | /// @type Number 19 | $grid-columns: 12 !default; 20 | 21 | /// The amount of margin between cells at different screen sizes when using the margin grid. To use just one size, set the variable to a number instead of a map. 22 | /// @type Map | Length 23 | $grid-margin-gutters: ( 24 | small: 20px, 25 | medium: 30px 26 | ) !default; 27 | 28 | /// The amount of padding in cells at different screen sizes when using the padding grid. To use just one size, set the variable to a number instead of a map. 29 | /// @type Map | Length 30 | $grid-padding-gutters: $grid-margin-gutters !default; 31 | 32 | /// The amount of padding to use when padding the grid-container. 33 | /// @type Map | Length 34 | $grid-container-padding: $grid-padding-gutters !default; 35 | 36 | /// The maximum width to apply to a grid container 37 | /// @type Number 38 | $grid-container-max: $global-width !default; 39 | 40 | /// The maximum number of cells in an XY block grid. 41 | /// @type Number 42 | $xy-block-grid-max: 8 !default; 43 | 44 | @import 'gutters'; 45 | @import 'grid'; 46 | @import 'cell'; 47 | @import 'frame'; 48 | @import 'position'; 49 | @import 'layout'; 50 | @import 'collapse'; 51 | @import 'classes'; 52 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/util/_transition.scss: -------------------------------------------------------------------------------- 1 | /// Applies basic transition settings to an element. 2 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 3 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 4 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 5 | @mixin transition-basics( 6 | $duration: null, 7 | $timing: null, 8 | $delay: null 9 | ) { 10 | @include -motion-ui-defaults; 11 | transition-duration: $duration; 12 | transition-timing-function: $timing; 13 | transition-delay: $delay; 14 | } 15 | 16 | /// Wraps the content in the setup class for a transition. 17 | /// @param {Keyword} $dir - State to setup for transition. 18 | @mixin transition-start($dir) { 19 | $selector: -mui-build-selector(map-get($motion-ui-states, $dir)); 20 | 21 | @at-root { 22 | #{$selector} { 23 | @content; 24 | } 25 | } 26 | } 27 | 28 | /// Wraps the content in the active class for a transition. 29 | /// @param {Keyword} $dir - State to activate a transition on. 30 | @mixin transition-end($dir) { 31 | $selector: -mui-build-selector(map-get($motion-ui-states, $dir), true); 32 | 33 | @at-root { 34 | #{$selector} { 35 | @content; 36 | } 37 | } 38 | } 39 | 40 | /// Adds styles for a stagger animation, which can be used with Angular's `ng-repeat`. 41 | /// @param {Duration} $delay-amount - Amount of time in seconds or milliseconds to add between each item's animation. 42 | @mixin stagger($delay-amount) { 43 | transition-delay: $delay-amount; 44 | transition-duration: 0; // Prevent accidental CSS inheritance 45 | } 46 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_badge.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group badge 7 | //// 8 | 9 | /// Default background color for badges. 10 | /// @type Color 11 | $badge-background: $primary-color !default; 12 | 13 | /// Default text color for badges. 14 | /// @type Color 15 | $badge-color: $white !default; 16 | 17 | /// Alternate text color for badges. 18 | /// @type Color 19 | $badge-color-alt: $black !default; 20 | 21 | /// Coloring classes. A map of classes to output in your CSS, like `.secondary`, `.success`, and so on. 22 | /// @type Map 23 | $badge-palette: $foundation-palette !default; 24 | 25 | /// Default padding inside badges. 26 | /// @type Number 27 | $badge-padding: 0.3em !default; 28 | 29 | /// Minimum width of a badge. 30 | /// @type Number 31 | $badge-minwidth: 2.1em !default; 32 | 33 | /// Default font size for badges. 34 | /// @type Number 35 | $badge-font-size: 0.6rem !default; 36 | 37 | /// Generates the base styles for a badge. 38 | @mixin badge { 39 | display: inline-block; 40 | min-width: $badge-minwidth; 41 | padding: $badge-padding; 42 | 43 | border-radius: 50%; 44 | 45 | font-size: $badge-font-size; 46 | text-align: center; 47 | } 48 | 49 | @mixin foundation-badge { 50 | .badge { 51 | @include badge; 52 | 53 | background: $badge-background; 54 | color: $badge-color; 55 | 56 | @each $name, $color in $badge-palette { 57 | &.#{$name} { 58 | background: $color; 59 | color: color-pick-contrast($color, ($badge-color, $badge-color-alt)); 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/foundation.util.core.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import $ from 'jquery'; 4 | 5 | // Core Foundation Utilities, utilized in a number of places. 6 | 7 | /** 8 | * Returns a boolean for RTL support 9 | */ 10 | function rtl() { 11 | return $('html').attr('dir') === 'rtl'; 12 | } 13 | 14 | /** 15 | * returns a random base-36 uid with namespacing 16 | * @function 17 | * @param {Number} length - number of random base-36 digits desired. Increase for more random strings. 18 | * @param {String} namespace - name of plugin to be incorporated in uid, optional. 19 | * @default {String} '' - if no plugin name is provided, nothing is appended to the uid. 20 | * @returns {String} - unique id 21 | */ 22 | function GetYoDigits(length, namespace){ 23 | length = length || 6; 24 | return Math.round((Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))).toString(36).slice(1) + (namespace ? `-${namespace}` : ''); 25 | } 26 | 27 | function transitionend($elem){ 28 | var transitions = { 29 | 'transition': 'transitionend', 30 | 'WebkitTransition': 'webkitTransitionEnd', 31 | 'MozTransition': 'transitionend', 32 | 'OTransition': 'otransitionend' 33 | }; 34 | var elem = document.createElement('div'), 35 | end; 36 | 37 | for (var t in transitions){ 38 | if (typeof elem.style[t] !== 'undefined'){ 39 | end = transitions[t]; 40 | } 41 | } 42 | if(end){ 43 | return end; 44 | }else{ 45 | end = setTimeout(function(){ 46 | $elem.triggerHandler('transitionend', [$elem]); 47 | }, 1); 48 | return 'transitionend'; 49 | } 50 | } 51 | 52 | export {rtl, GetYoDigits, transitionend}; 53 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_label.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group label 7 | //// 8 | 9 | /// Default background color for labels. 10 | /// @type Color 11 | $label-background: $primary-color !default; 12 | 13 | /// Default text color for labels. 14 | /// @type Color 15 | $label-color: $white !default; 16 | 17 | /// Alternate text color for labels. 18 | /// @type Color 19 | $label-color-alt: $black !default; 20 | 21 | /// Coloring classes. A map of classes to output in your CSS, like `.secondary`, `.success`, and so on. 22 | /// @type Map 23 | $label-palette: $foundation-palette !default; 24 | 25 | /// Default font size for labels. 26 | /// @type Number 27 | $label-font-size: 0.8rem !default; 28 | 29 | /// Default padding inside labels. 30 | /// @type Number 31 | $label-padding: 0.33333rem 0.5rem !default; 32 | 33 | /// Default radius of labels. 34 | /// @type Number 35 | $label-radius: $global-radius !default; 36 | 37 | /// Generates base styles for a label. 38 | @mixin label { 39 | display: inline-block; 40 | padding: $label-padding; 41 | 42 | border-radius: $label-radius; 43 | 44 | font-size: $label-font-size; 45 | line-height: 1; 46 | white-space: nowrap; 47 | cursor: default; 48 | } 49 | 50 | @mixin foundation-label { 51 | .label { 52 | @include label; 53 | 54 | background: $label-background; 55 | color: $label-color; 56 | 57 | @each $name, $color in $label-palette { 58 | &.#{$name} { 59 | background: $color; 60 | color: color-pick-contrast($color, ($label-color, $label-color-alt)); 61 | } 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/dist/motion-ui.min.js: -------------------------------------------------------------------------------- 1 | !function(n,e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?module.exports=e(require("jquery")):n.MotionUI=e(n.jQuery)}(this,function(n){"use strict";function e(e,a,r,u){function s(){e||a.hide(),m(),u&&u.apply(a)}function m(){a[0].style.transitionDuration=0,a.removeClass(d+" "+c+" "+r)}if(a=n(a).eq(0),a.length){if(null===o)return e?a.show():a.hide(),void u();var d=e?i[0]:i[1],c=e?t[0]:t[1];m(),a.addClass(r),a.css("transition","none"),requestAnimationFrame(function(){a.addClass(d),e&&a.show()}),requestAnimationFrame(function(){a[0].offsetWidth,a.css("transition",""),a.addClass(c)}),a.one("transitionend",s)}}!function(){Date.now||(Date.now=function(){return(new Date).getTime()});for(var n=["webkit","moz"],e=0;e1&&void 0!==arguments[1]?arguments[1]:"zf";e.attr("role","menubar");var t=e.find("li").attr({role:"menuitem"}),r="is-"+n+"-submenu",a=r+"-item",i="is-"+n+"-submenu-parent",s="accordion"!==n;t.each(function(){var e=u()(this),t=e.children("ul");t.length&&(e.addClass(i),t.addClass("submenu "+r).attr({"data-submenu":""}),s&&(e.attr({"aria-haspopup":!0,"aria-label":e.children("a:first").text()}),"drilldown"===n&&e.attr({"aria-expanded":!1})),t.addClass("submenu "+r).attr({"data-submenu":"",role:"menu"}),"drilldown"===n&&t.attr({"aria-hidden":!0})),e.parent("[data-submenu]").length&&e.addClass("is-submenu-item "+a)})},Burn:function(e,n){var t="is-"+n+"-submenu",r=t+"-item",u="is-"+n+"-submenu-parent";e.find(">li, .menu, .menu > li").removeClass(t+" "+r+" "+u+" is-submenu-item submenu is-active").removeAttr("data-submenu").css("display","")}}},98:function(e,n,t){e.exports=t(99)},99:function(e,n,t){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=t(1),u=(t.n(r),t(100));r.Foundation.Nest=u.a}}); -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/xy-grid/_gutters.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Create gutters for a cell/container. 10 | /// 11 | /// @param {Number|Map} $gutters [$grid-margin-gutters] - Map or single value for gutters. 12 | /// @param {Keyword} $gutter-type [margin] - Type of gutter to output. Accepts either margin or padding. 13 | /// @param {List} $gutter-position [right left] - The position to apply gutters to. Accepts `top`, `bottom`, `left`, `right` in any combination. 14 | /// @param {Boolean} $negative [false] - Whether to apply the gutter as a negative value. Commonly used for nested grids. 15 | @mixin xy-gutters( 16 | $gutters: $grid-margin-gutters, 17 | $gutter-type: margin, 18 | $gutter-position: right left, 19 | $negative: false 20 | ) { 21 | $operator: if($negative, '-', ''); 22 | 23 | // If we have declared negative gutters, force type to `margin. 24 | $gutter-type: if($negative, 'margin', $gutter-type); 25 | 26 | // Output our margin gutters. 27 | @if (type-of($gutters) == 'map') { 28 | @include -zf-breakpoint-value(auto, $gutters) { 29 | $gutter: rem-calc($-zf-bp-value) / 2; 30 | 31 | // Loop through each gutter position 32 | @each $value in $gutter-position { 33 | #{$gutter-type}-#{$value}: unquote("#{$operator}#{$gutter}"); 34 | } 35 | } 36 | } 37 | @elseif (type-of($gutters) == 'number') { 38 | $gutter: rem-calc($gutters) / 2; 39 | 40 | // Loop through each gutter position 41 | @each $value in $gutter-position { 42 | #{$gutter-type}-#{$value}: unquote("#{$operator}#{$gutter}"); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_bordered.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-bordered 7 | //// 8 | 9 | /// Responsive breakpoints for bordered utility. 10 | /// @type Boolean 11 | $prototype-bordered-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default value for `prototype-border-width` 14 | /// @type Number 15 | $prototype-border-width: rem-calc(1) !default; 16 | 17 | /// Default value for `prototype-border-type` 18 | /// @type String 19 | $prototype-border-type: solid !default; 20 | 21 | /// Default value for `prototype-border-color` defaulted to `medium-gray` 22 | /// @type Color 23 | $prototype-border-color: $medium-gray !default; 24 | 25 | /// Bordered Utility: Adds a light border to an element by default. 26 | /// @param {Number} $width [$prototype-border-width] Width of the border 27 | /// @param {String} $type [$prototype-border-type] Type of the border 28 | /// @param {Color} $color [$prototype-border-color] Color of the border 29 | @mixin bordered( 30 | $width: $prototype-border-width, 31 | $type: $prototype-border-type, 32 | $color: $prototype-border-color 33 | ) { 34 | border: $width $type $color; 35 | } 36 | 37 | @mixin foundation-prototype-bordered { 38 | .bordered { 39 | @include bordered; 40 | } 41 | 42 | @if ($prototype-bordered-breakpoints) { 43 | // Loop through Responsive Breakpoints 44 | @each $size in $breakpoint-classes { 45 | @include breakpoint($size) { 46 | @if $size != $-zf-zero-breakpoint { 47 | .#{$size}-bordered { 48 | @include bordered; 49 | } 50 | } 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /docker-compose-remote.yml: -------------------------------------------------------------------------------- 1 | #For connectiong to a remote Memgraph DB instance 2 | 3 | version: '3' 4 | services: 5 | # memgraph: 6 | # image: "memgraph" 7 | # ports: 8 | # - "7687:7687" 9 | simulator: 10 | build: ./simulator 11 | volumes: 12 | - ./simulator:/app 13 | ports: 14 | - "3000:3000" 15 | environment: 16 | MG_HOST: "34.248.115.177" 17 | MG_PORT: 9000 18 | MG_USERNAME: "userWrite" 19 | MG_PASSWORD: "starwriteitlink91$$2" 20 | TLE_FILE_PATH: "imports/tle_3" 21 | CITIES_FILE_PATH: "imports/cities.csv" 22 | DB_UPDATE_TIME: 0.2 23 | EDGE_ORBITS_CONNECTED: 'false' 24 | ORBIT_ENDS_CONNECTED: 'false' 25 | SAT_PROCESSING_DELAY: 0.010 26 | RELAY_PROCESSING_DELAY: 0.012 27 | VIEW_ANGLE: 70 28 | command: python main.py start 29 | # command: /wait-for-it.sh memgraph:7687 -- python main.py start 30 | # depends_on: 31 | # - memgraph 32 | web: 33 | build: ./web_app 34 | volumes: 35 | - ./web_app:/app 36 | ports: 37 | - "5000:5000" 38 | environment: 39 | MG_HOST: "34.248.115.177" 40 | MG_PORT: 9000 41 | MG_USERNAME: "userReadonly" 42 | MG_PASSWORD: "starlinkreadit" 43 | OPTICAL_FILE_PATH: "resources/latencies.csv" 44 | depends_on: 45 | - simulator 46 | redis: 47 | image: "redis" 48 | ports: 49 | - 6379:6379 50 | cache_handler: 51 | build: 52 | context: ./cache_handler 53 | volumes: 54 | - ./cache_handler:/app 55 | environment: 56 | MG_HOST: memgraph 57 | MG_PORT: 7687 58 | REDIS_HOST: redis 59 | REDIS_PORT: "6379" 60 | REDIS_PASSWORD: "" 61 | DB_FETCH_TIME: "0.1" 62 | command: python cache_handler.py 63 | depends_on: 64 | - redis 65 | - memgraph -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/foundation.plugin.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import $ from 'jquery'; 4 | import { GetYoDigits } from './foundation.util.core'; 5 | 6 | // Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST 7 | // {function} _setup (replaces previous constructor), 8 | // {function} _destroy (replaces previous destroy) 9 | class Plugin { 10 | 11 | constructor(element, options) { 12 | this._setup(element, options); 13 | var pluginName = getPluginName(this); 14 | this.uuid = GetYoDigits(6, pluginName); 15 | 16 | if(!this.$element.attr(`data-${pluginName}`)){ this.$element.attr(`data-${pluginName}`, this.uuid); } 17 | if(!this.$element.data('zfPlugin')){ this.$element.data('zfPlugin', this); } 18 | /** 19 | * Fires when the plugin has initialized. 20 | * @event Plugin#init 21 | */ 22 | this.$element.trigger(`init.zf.${pluginName}`); 23 | } 24 | 25 | destroy() { 26 | this._destroy(); 27 | var pluginName = getPluginName(this); 28 | this.$element.removeAttr(`data-${pluginName}`).removeData('zfPlugin') 29 | /** 30 | * Fires when the plugin has been destroyed. 31 | * @event Plugin#destroyed 32 | */ 33 | .trigger(`destroyed.zf.${pluginName}`); 34 | for(var prop in this){ 35 | this[prop] = null;//clean up script to prep for garbage collection. 36 | } 37 | } 38 | } 39 | 40 | // Convert PascalCase to kebab-case 41 | // Thank you: http://stackoverflow.com/a/8955580 42 | function hyphenate(str) { 43 | return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 44 | } 45 | 46 | function getPluginName(obj) { 47 | if(typeof(obj.constructor.name) !== 'undefined') { 48 | return hyphenate(obj.constructor.name); 49 | } else { 50 | return hyphenate(obj.className); 51 | } 52 | } 53 | 54 | export {Plugin}; 55 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_sizing.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-sizing 7 | //// 8 | 9 | /// Responsive breakpoints for spacing classes (margin and padding) 10 | /// @type Boolean 11 | $prototype-sizing-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `sizing` classes 14 | /// @type Map 15 | $prototype-sizing: ( 16 | width, 17 | height 18 | ) !default; 19 | 20 | /// Map containing all the sizes. 21 | /// @type Map 22 | $prototype-sizes: ( 23 | 25: 25%, 24 | 50: 50%, 25 | 75: 75%, 26 | 100: 100% 27 | ) !default; 28 | 29 | /// Max Width 100 utility. 30 | @mixin max-width-100 { 31 | max-width: 100% !important; 32 | } 33 | 34 | /// Max Height 100 utility. 35 | @mixin max-height-100 { 36 | max-height: 100% !important; 37 | } 38 | 39 | @mixin foundation-prototype-sizing { 40 | // Element Sizing 41 | @each $sizing in $prototype-sizing { 42 | @each $length, $percentage in $prototype-sizes { 43 | .#{$sizing}-#{$length} { 44 | #{$sizing}: $percentage !important; 45 | } 46 | } 47 | } 48 | 49 | // Max width & height 50 | .max-width-100 { 51 | @include max-width-100; 52 | } 53 | .max-height-100 { 54 | @include max-height-100; 55 | } 56 | 57 | @if ($prototype-sizing-breakpoints) { 58 | // Loop through Responsive Breakpoints 59 | @each $size in $breakpoint-classes { 60 | @include breakpoint($size) { 61 | @if $size != $-zf-zero-breakpoint { 62 | @each $sizing in $prototype-sizing { 63 | @each $length, $percentage in $prototype-sizes { 64 | .#{$size}-#{$sizing}-#{$length} { 65 | #{$sizing}: $percentage !important; 66 | } 67 | } 68 | } 69 | } 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/docs/configuration.md: -------------------------------------------------------------------------------- 1 | # Configuration 2 | 3 | Motion UI has six variables which store all of the library's settings. Each is a map of keys and values. 4 | 5 | ## States 6 | 7 | ```scss 8 | $motion-ui-states: ( 9 | in: 'enter', 10 | out: 'leave', 11 | ); 12 | ``` 13 | 14 | Motion UI defines two motion states: `in` and `out`, which create classes with the words `enter` and `leave` respectively. 15 | 16 | ## Classes 17 | 18 | ```scss 19 | $motion-ui-classes: ( 20 | chain: true, 21 | prefix: 'mui-', 22 | active: '-active', 23 | ); 24 | ``` 25 | 26 | Different animation libraries have different ways of writing classes, but most libraries require a setup class, as well as an active class to trigger a transition or animation. 27 | 28 | The default configuration outputs classes like this: 29 | 30 | ```css 31 | .fade-in.mui-enter {} 32 | .fade-in.mui-enter.mui-enter-active {} 33 | ``` 34 | 35 | Set the `chain` property of `$motion-ui-classes` to `false` to create classes like this: 36 | 37 | ```css 38 | .fade-in-mui-enter {} 39 | .fade-in-mui-enter.fade-in-mui-enter-active {} 40 | ``` 41 | 42 | The class output can also be fine-tuned with the `prefix` and `active` properties. 43 | 44 | ## Animation Defaults 45 | 46 | The maps `$motion-ui-speeds`, `$motion-ui-delays`, and `$motion-ui-easings` define terms for animation speeds, delays, and timing functions. For example, the `default` speed of animations is 500ms, while `slow` is 750ms, and `fast` is 250ms. 47 | 48 | ## Other Settings 49 | 50 | Miscellaneous settings are in the `$motion-ui-settings` map. These settings define if animations include a fade, and what class to use for triggering an animation queue. 51 | 52 | ```scss 53 | $motion-ui-settings: ( 54 | slide-and-fade: false, 55 | hinge-and-fade: true, 56 | scale-and-fade: true, 57 | spin-and-fade: true, 58 | activate-queue-class: 'is-animating' 59 | ); 60 | ``` 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/transitions/_hinge.scss: -------------------------------------------------------------------------------- 1 | /// Creates a hinge transition by rotating the element. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $from [left] - Edge of the element to rotate from. Can be `top`, `right`, `bottom`, or `left`. 4 | /// @param {Keyword} $axis [edge] - Axis of the element to rotate on. Can be `edge` or `center`. 5 | /// @param {Length} $perspective [2000px] - Perceived distance between the viewer and the element. A higher number will make the rotation effect more pronounced. 6 | /// @param {Keyword} $turn-origin [from-back] - Side of the element to start the rotation from. Can be `from-back` or `from-front`. 7 | /// @param {Boolean} $fade [true] - Set to `true` to fade the element in or out simultaneously. 8 | /// @param {Duration} $duration [null] - Length (speed) of the transition. 9 | /// @param {Keyword|Function} $timing [null] - Easing of the transition. 10 | /// @param {Duration} $delay [null] - Delay in seconds or milliseconds before the transition starts. 11 | @mixin mui-hinge ( 12 | $state: in, 13 | $from: left, 14 | $axis: edge, 15 | $perspective: 2000px, 16 | $turn-origin: from-back, 17 | $fade: map-get($motion-ui-settings, hinge-and-fade), 18 | $duration: null, 19 | $timing: null, 20 | $delay: null 21 | ) { 22 | $hinge: hinge($state, $from, $axis, $perspective, $turn-origin); 23 | 24 | @include transition-start($state) { 25 | @include transition-basics($duration, $timing, $delay); 26 | @include -mui-keyframe-get($hinge, 0); 27 | 28 | @if $fade { 29 | transition-property: transform, opacity; 30 | opacity: if($state == in, 0, 1); 31 | } @else { 32 | transition-property: transform, opacity; 33 | } 34 | } 35 | 36 | @include transition-end($state) { 37 | @include -mui-keyframe-get($hinge, 100); 38 | 39 | @if $fade { 40 | opacity: if($state == in, 1, 0); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_dropdown.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group dropdown 7 | //// 8 | 9 | /// Padding for dropdown panes. 10 | /// @type List 11 | $dropdown-padding: 1rem !default; 12 | 13 | /// Background for dropdown panes. 14 | /// @type Color 15 | $dropdown-background: $body-background !default; 16 | 17 | /// Border for dropdown panes. 18 | /// @type List 19 | $dropdown-border: 1px solid $medium-gray !default; 20 | 21 | /// Font size for dropdown panes. 22 | /// @type List 23 | $dropdown-font-size: 1rem !default; 24 | 25 | /// Width for dropdown panes. 26 | /// @type Number 27 | $dropdown-width: 300px !default; 28 | 29 | /// Border radius dropdown panes. 30 | /// @type Number 31 | $dropdown-radius: $global-radius !default; 32 | 33 | /// Sizes for dropdown panes. Each size is a CSS class you can apply. 34 | /// @type Map 35 | $dropdown-sizes: ( 36 | tiny: 100px, 37 | small: 200px, 38 | large: 400px, 39 | ) !default; 40 | 41 | /// Applies styles for a basic dropdown. 42 | @mixin dropdown-container { 43 | position: absolute; 44 | z-index: 10; 45 | 46 | width: $dropdown-width; 47 | padding: $dropdown-padding; 48 | 49 | visibility: hidden; 50 | display: none; 51 | border: $dropdown-border; 52 | border-radius: $dropdown-radius; 53 | background-color: $dropdown-background; 54 | 55 | font-size: $dropdown-font-size; 56 | 57 | 58 | // Allow an intermittent state to do positioning before making visible. 59 | &.is-opening { 60 | display: block; 61 | } 62 | 63 | &.is-open { 64 | visibility: visible; 65 | display: block; 66 | } 67 | } 68 | 69 | @mixin foundation-dropdown { 70 | .dropdown-pane { 71 | @include dropdown-container; 72 | } 73 | 74 | @each $name, $size in $dropdown-sizes { 75 | .dropdown-pane.#{$name} { 76 | width: $size; 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/docs/installation.md: -------------------------------------------------------------------------------- 1 | # Getting Started 2 | 3 | ## Installation 4 | 5 | Install Motion UI with npm or Bower. 6 | 7 | ```bash 8 | npm install motion-ui --save 9 | bower install motion-ui --save 10 | ``` 11 | 12 | ## Sass Usage 13 | 14 | To import the Sass files into a project, add the load path `[modules_folder]/motion-ui/src` to your Sass configuration, then `@import` the library: 15 | 16 | ```scss 17 | @import 'motion-ui'; 18 | ``` 19 | 20 | **[Autoprefixer](https://github.com/postcss/autoprefixer) is required to use this library.** The library uses unprefixed `transition` and `animation` properties, which are then prefixed by Autoprefixer. 21 | 22 | The library includes two mixins which export all of the [default CSS](classes.md) for the framework. This includes: 23 | 24 | - Transitions for slide, fade, hinge, scale, and spin 25 | - Animation classes for spinning, shaking, and wiggling 26 | - Modifier classes for transition/animation speed, timing, and delay 27 | 28 | ```scss 29 | @include motion-ui-transitions; 30 | @include motion-ui-animations; 31 | ``` 32 | 33 | ## CSS Usage 34 | 35 | The package files also include these pre-made classes as a standalone CSS file, in minified and unminified flavors. 36 | 37 | - **Uncompressed:** `[modules_folder]/motion-ui/dist/motion-ui.css` 38 | - **Compressed:** `[modules_folder]/motion-ui/dist/motion-ui.min.css` 39 | 40 | ## JavaScript Usage 41 | 42 | The package includes a small JavaScript library to help you transition elements in and out using Motion UI classes. It can be referenced as a browser global or a CommonJS/AMD package. Like the CSS, there's uncompressed and compressed versions included. 43 | 44 | - **Uncompressed:** `[modules_folder]/motion-ui/dist/motion-ui.js` 45 | - **Compressed:** `[modules_folder]/motion-ui/dist/motion-ui.min.js` 46 | 47 | Refer to the full [JavaScript documentation](javascript.md) to learn more about how the JS library works. 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/dist/js/plugins/foundation.util.motion.min.js: -------------------------------------------------------------------------------- 1 | !function(n){function t(e){if(i[e])return i[e].exports;var o=i[e]={i:e,l:!1,exports:{}};return n[e].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var i={};t.m=n,t.c=i,t.d=function(n,i,e){t.o(n,i)||Object.defineProperty(n,i,{configurable:!1,enumerable:!0,get:e})},t.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(i,"a",i),i},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p="",t(t.s=95)}({0:function(n,t){n.exports=jQuery},1:function(n,t){n.exports={Foundation:window.Foundation}},3:function(n,t){n.exports={rtl:window.Foundation.rtl,GetYoDigits:window.Foundation.GetYoDigits,transitionend:window.Foundation.transitionend}},95:function(n,t,i){n.exports=i(96)},96:function(n,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var e=i(1),o=(i.n(e),i(97));e.Foundation.Motion=o.a,e.Foundation.Move=o.b},97:function(n,t,i){"use strict";function e(n,t,i){function e(u){a||(a=u),r=u-a,i.apply(t),r None: 20 | self.moving_objects.append(moving_object) 21 | 22 | def update_moving_object_positions(self) -> None: 23 | for moving_object in self.moving_objects: 24 | moving_object.current_position += 1 25 | if (moving_object.current_position == moving_object.positions_lenght): 26 | moving_object.current_position = 0 27 | 28 | moving_object.updatePosition() 29 | 30 | def update_laser_connections(self, orbits_dict_by_id: Dict[id, Orbit]) -> None: 31 | for moving_object in self.moving_objects: 32 | moving_object.update_laser_up(orbits_dict_by_id) 33 | moving_object.update_laser_down(orbits_dict_by_id) 34 | 35 | def update_laser_distances(self, moving_objects_dict_by_id: Dict[id, MovingObject]) -> None: 36 | for moving_object in self.moving_objects: 37 | moving_object.update_laser_left_right(moving_objects_dict_by_id) 38 | 39 | @staticmethod 40 | def update_orbits(orbits_dict_by_id: Dict[id, Orbit], moving_objects_dict_by_id: Dict[id, MovingObject]) -> None: 41 | for orbit_id in orbits_dict_by_id.keys(): 42 | orbits_dict_by_id[orbit_id].update_moving_object_positions() 43 | 44 | for orbit_id in orbits_dict_by_id.keys(): 45 | orbits_dict_by_id[orbit_id].update_laser_connections( 46 | orbits_dict_by_id) 47 | orbits_dict_by_id[orbit_id].update_laser_distances( 48 | moving_objects_dict_by_id) 49 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/docs/classes.md: -------------------------------------------------------------------------------- 1 | # CSS Classes 2 | 3 | The Sass mixins are the heart of Motion UI, but the library also includes many pre-made CSS classes to get you up and running faster. 4 | 5 | ## Defaults 6 | 7 | The pre-made classes all use these transition/animation defaults: 8 | 9 | - **Speed:** 500ms 10 | - **Timing:** Linear 11 | - **Delay:** 0s 12 | 13 | These defaults can be changed by modifying the [Motion UI settings](configuration.md); 14 | 15 | ## Transition Classes 16 | 17 | - **Slide:** 18 | - `.slide-in-down` 19 | - `.slide-in-left` 20 | - `.slide-in-up` 21 | - `.slide-in-right` 22 | - `.slide-out-down` 23 | - `.slide-out-left` 24 | - `.slide-out-up` 25 | - `.slide-out-right` 26 | - **Fade:** 27 | - `.fade-in` 28 | - `.fade-out` 29 | - **Hinge:** 30 | - `.hinge-in-from-top` 31 | - `.hinge-in-from-right` 32 | - `.hinge-in-from-bottom` 33 | - `.hinge-in-from-left` 34 | - `.hinge-in-from-middle-x` 35 | - `.hinge-in-from-middle-y` 36 | - `.hinge-out-from-top` 37 | - `.hinge-out-from-right` 38 | - `.hinge-out-from-bottom` 39 | - `.hinge-out-from-left` 40 | - `.hinge-out-from-middle-x` 41 | - `.hinge-out-from-middle-y` 42 | - **Scale:** 43 | - `.scale-in-up` 44 | - `.scale-in-down` 45 | - `.scale-out-up` 46 | - `.scale-out-down` 47 | - **Spin:** 48 | - `.spin-in` 49 | - `.spin-out` 50 | - `.spin-in-ccw` 51 | - `.spin-out-ccw` 52 | 53 | ## Animation Classes 54 | 55 | - `.shake`: shakes the element horizontally. 56 | - `.wiggle`: rotates the element back and forth. 57 | - `.spin-cw`: rotates the element once. 58 | - `.spin-ccw`: rotates the element once, counterclockwise. 59 | 60 | ## Modifier Classes 61 | 62 | Modifiers work with both transitions and animations. 63 | 64 | - **Speed:** 65 | - `.slow` (750ms) 66 | - `.fast` (250ms) 67 | - **Timing:** 68 | - `.linear` 69 | - `.ease` 70 | - `.ease-in` 71 | - `.ease-out` 72 | - `.ease-in-out` 73 | - `.bounce-in` 74 | - `.bounce-out` 75 | - `.bounce-in-out` 76 | - **Delay:** 77 | - `.short-delay` (300ms) 78 | - `.long-delay` (700ms) 79 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /cache_handler/cache_handler.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import time 4 | import redis 5 | import logging 6 | import data_translator 7 | from time import sleep 8 | from typing import Dict, Any 9 | from gqlalchemy import Memgraph 10 | 11 | 12 | DB_FETCH_TIME = float(os.getenv('DB_FETCH_TIME', '0.5')) 13 | MEMGRAPH_IP = os.getenv('MEMGRAPH_IP', 'memgraph') 14 | MEMGRAPH_PORT = os.getenv('MEMGRAPH_PORT', '7687') 15 | REDIS_HOST = os.getenv('REDIS_HOST', 'redis') 16 | REDIS_PORT = int(os.getenv('REDIS_PORT', '6379')) 17 | 18 | logging.basicConfig(format='%(asctime)-15s [%(levelname)s]: %(message)s') 19 | logger = logging.getLogger('cache') 20 | logger.setLevel(logging.INFO) 21 | 22 | # Wait for Redis and Memgraph to start 23 | time.sleep(5) 24 | 25 | r = redis.StrictRedis(host=REDIS_HOST, port=REDIS_PORT, 26 | charset="utf-8", decode_responses=True) 27 | 28 | def connect_to_memgraph(memgraph_ip, memgraph_port): 29 | memgraph = Memgraph(host=memgraph_ip, port=int(memgraph_port)) 30 | while(True): 31 | try: 32 | if (memgraph._get_cached_connection().is_active()): 33 | return memgraph 34 | except: 35 | logger.info("Memgraph probably isn't running.") 36 | sleep(1) 37 | 38 | db = connect_to_memgraph(MEMGRAPH_IP, MEMGRAPH_PORT) 39 | results = {} 40 | 41 | 42 | while(True): 43 | start_time = time.time() 44 | 45 | results["relationships"] = list(db.execute_and_fetch( 46 | "MATCH (s1:Satellite)-[r]-(s2:Satellite) RETURN r, s1, s2;")) 47 | while len(results["relationships"]) == 0: 48 | results["relationships"] = list(db.execute_and_fetch( 49 | "MATCH (s1:Satellite)-[r]-(s2:Satellite) RETURN r, s1, s2;")) 50 | time.sleep(1) 51 | 52 | json_relationships, json_satellites = data_translator.json_relationships_satellites( 53 | results["relationships"]) 54 | 55 | r.set('json_relationships', json_relationships) 56 | r.set('json_satellites', json_satellites) 57 | 58 | logger.info(f'Saved to cache in {time.time() - start_time} seconds.') 59 | time.sleep(DB_FETCH_TIME) 60 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/util/_series.scss: -------------------------------------------------------------------------------- 1 | $-mui-queue: (); 2 | 3 | /// Pauses the animation on an element by default, and then plays it when an active class is added to a parent. Also sets the fill mode of the animation to `both`. This pauses the element at the first frame of the animation, and holds it in place at the end. 4 | /// @access private 5 | %animated-element { 6 | animation-play-state: paused; 7 | animation-fill-mode: both; 8 | 9 | .#{map-get($motion-ui-settings, activate-queue-class)} & { 10 | animation-play-state: running; 11 | } 12 | } 13 | 14 | /// Creates a new animation queue. 15 | /// @param {Duration} $delay [0s] - Delay in seconds or milliseconds to place at the front of the animation queue. 16 | @mixin mui-series($delay: 0s) { 17 | $-mui-queue: () !global; 18 | 19 | @if $delay > 0 { 20 | $item: ($delay, 0s); 21 | $-mui-queue: append($-mui-queue, $item) !global; 22 | } 23 | 24 | @content; 25 | } 26 | 27 | /// Adds an animation to an animation queue. Only use this mixin inside of `mui-series()`. 28 | /// @param {Duration} $duration [1s] - Length of the animation. 29 | /// @param {Duration} $gap [0s] - Amount of time to pause before playing the animation after this one. Use a negative value to make the next effect overlap with the current one. 30 | /// @param {Function} $keyframes... - One or more effect functions to build the keyframe with. 31 | @mixin mui-queue( 32 | $duration: 1s, 33 | $gap: 0s, 34 | $keyframes... 35 | ) { 36 | // Build the animation 37 | $kf: -mui-process-args($keyframes...); 38 | 39 | // Calculate the delay for this animation based on how long the previous ones take 40 | $actual-delay: 0s; 41 | @each $anim in $-mui-queue { 42 | $actual-delay: $actual-delay + nth($anim, 1) + nth($anim, 2); 43 | } 44 | 45 | // Append this animation's length and gap to the end of the queue 46 | $item: ($duration, $gap); 47 | $-mui-queue: append($-mui-queue, $item) !global; 48 | 49 | // CSS output 50 | @extend %animated-element; 51 | @include mui-animation($kf); 52 | animation-duration: $duration; 53 | animation-delay: $actual-delay; 54 | } 55 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "_args": [ 3 | [ 4 | "motion-ui@1.2.3", 5 | "/Users/minime/Desktop/Memgraph/design" 6 | ] 7 | ], 8 | "_from": "motion-ui@1.2.3", 9 | "_id": "motion-ui@1.2.3", 10 | "_inBundle": false, 11 | "_integrity": "sha1-n34X8NZqFenuVJAj5vPeETmi4WY=", 12 | "_location": "/motion-ui", 13 | "_phantomChildren": {}, 14 | "_requested": { 15 | "type": "version", 16 | "registry": true, 17 | "raw": "motion-ui@1.2.3", 18 | "name": "motion-ui", 19 | "escapedName": "motion-ui", 20 | "rawSpec": "1.2.3", 21 | "saveSpec": null, 22 | "fetchSpec": "1.2.3" 23 | }, 24 | "_requiredBy": [ 25 | "#DEV:/" 26 | ], 27 | "_resolved": "https://registry.npmjs.org/motion-ui/-/motion-ui-1.2.3.tgz", 28 | "_spec": "1.2.3", 29 | "_where": "/Users/minime/Desktop/Memgraph/design", 30 | "author": { 31 | "name": "ZURB", 32 | "email": "foundation@zurb.com" 33 | }, 34 | "bugs": { 35 | "url": "https://github.com/zurb/motion-ui/issues" 36 | }, 37 | "dependencies": { 38 | "jquery": ">=2.2.0" 39 | }, 40 | "description": "Sass library for creating transitions and animations.", 41 | "devDependencies": { 42 | "gulp": "^3.9.0", 43 | "gulp-autoprefixer": "^3.0.2", 44 | "gulp-load-plugins": "^1.0.0-rc.1", 45 | "gulp-minify-css": "^1.2.1", 46 | "gulp-rename": "^1.2.2", 47 | "gulp-sass": "3.1.0", 48 | "gulp-scss-lint": "^0.3.6", 49 | "gulp-uglify": "^1.4.1", 50 | "gulp-umd": "^0.2.0", 51 | "handlebars": "^4.0.3", 52 | "mocha": "^2.3.3", 53 | "rimraf": "^2.4.3", 54 | "run-sequence": "^1.1.4", 55 | "sass-true": "^2.0.2", 56 | "supercollider": "^1.0.0" 57 | }, 58 | "homepage": "http://zurb.com/playground/motion-ui", 59 | "keywords": [ 60 | "Sass", 61 | "motion" 62 | ], 63 | "license": "MIT", 64 | "main": "dist/motion-ui.js", 65 | "name": "motion-ui", 66 | "repository": { 67 | "type": "git", 68 | "url": "git+https://github.com/zurb/motion-ui.git" 69 | }, 70 | "scripts": { 71 | "start": "gulp", 72 | "test": "mocha" 73 | }, 74 | "version": "1.2.3" 75 | } 76 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_title-bar.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group title-bar 7 | //// 8 | 9 | /// Background color of a title bar. 10 | /// @type Color 11 | $titlebar-background: $black !default; 12 | 13 | /// Color of text inside a title bar. 14 | /// @type Color 15 | $titlebar-color: $white !default; 16 | 17 | /// Padding inside a title bar. 18 | /// @type Length 19 | $titlebar-padding: 0.5rem !default; 20 | 21 | /// Font weight of text inside a title bar. 22 | /// @type Weight 23 | $titlebar-text-font-weight: bold !default; 24 | 25 | /// Color of menu icons inside a title bar. 26 | /// @type Color 27 | $titlebar-icon-color: $white !default; 28 | 29 | /// Color of menu icons inside a title bar on hover. 30 | /// @type Color 31 | $titlebar-icon-color-hover: $medium-gray !default; 32 | 33 | /// Spacing between the menu icon and text inside a title bar. 34 | /// @type Length 35 | $titlebar-icon-spacing: 0.25rem !default; 36 | 37 | @mixin foundation-title-bar { 38 | .title-bar { 39 | padding: $titlebar-padding; 40 | background: $titlebar-background; 41 | color: $titlebar-color; 42 | 43 | @if $global-flexbox { 44 | display: flex; 45 | justify-content: flex-start; 46 | align-items: center; 47 | } 48 | @else { 49 | @include clearfix; 50 | } 51 | 52 | .menu-icon { 53 | margin-#{$global-left}: $titlebar-icon-spacing; 54 | margin-#{$global-right}: $titlebar-icon-spacing; 55 | } 56 | } 57 | 58 | @if $global-flexbox { 59 | .title-bar-left, 60 | .title-bar-right { 61 | flex: 1 1 0px; // sass-lint:disable-line zero-unit 62 | } 63 | 64 | .title-bar-right { 65 | text-align: right; 66 | } 67 | } 68 | @else { 69 | .title-bar-left { 70 | float: left; 71 | } 72 | 73 | .title-bar-right { 74 | float: right; 75 | text-align: right; 76 | } 77 | } 78 | 79 | .title-bar-title { 80 | display: inline-block; 81 | vertical-align: middle; 82 | font-weight: $titlebar-text-font-weight; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_prototype.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype 7 | //// 8 | 9 | // Relational Mixins 10 | @import 'relation'; 11 | 12 | // Box Mixin 13 | @import 'box'; 14 | 15 | // Rotate Mixin 16 | @import 'rotate'; 17 | 18 | // Text utilities 19 | @import 'text-utilities'; 20 | 21 | // Text transformation classes 22 | @import 'text-transformation'; 23 | 24 | // Text Decoration classes 25 | @import 'text-decoration'; 26 | 27 | // Font Styling 28 | @import 'font-styling'; 29 | 30 | // List Style type 31 | @import 'list-style-type'; 32 | 33 | // Rounded Utility 34 | @import 'rounded'; 35 | 36 | // Bordered Utility 37 | @import 'bordered'; 38 | 39 | // Shadow Utility 40 | @import 'shadow'; 41 | 42 | // Arrow Utility 43 | @import 'arrow'; 44 | 45 | // Separator Utility 46 | @import 'separator'; 47 | 48 | // Overflow helper classes 49 | @import 'overflow'; 50 | 51 | // Display classes 52 | @import 'display'; 53 | 54 | // Position Helpers 55 | @import 'position'; 56 | 57 | // Border box 58 | @import 'border-box'; 59 | 60 | // Border none Utilty 61 | @import 'border-none'; 62 | 63 | // Sizing Utilities 64 | @import 'sizing'; 65 | 66 | // Spacing Utilities 67 | @import 'spacing'; 68 | 69 | @mixin foundation-prototype-classes { 70 | @include foundation-prototype-text-utilities; 71 | @include foundation-prototype-text-transformation; 72 | @include foundation-prototype-text-decoration; 73 | @include foundation-prototype-font-styling; 74 | @include foundation-prototype-list-style-type; 75 | @include foundation-prototype-rounded; 76 | @include foundation-prototype-bordered; 77 | @include foundation-prototype-shadow; 78 | @include foundation-prototype-arrow; 79 | @include foundation-prototype-separator; 80 | @include foundation-prototype-overflow; 81 | @include foundation-prototype-display; 82 | @include foundation-prototype-position; 83 | @include foundation-prototype-border-box; 84 | @include foundation-prototype-border-none; 85 | @include foundation-prototype-sizing; 86 | @include foundation-prototype-spacing; 87 | } 88 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/components/_responsive-embed.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group responsive-embed 7 | //// 8 | 9 | /// Margin below a responsive embed container. 10 | /// @type Number 11 | $responsive-embed-margin-bottom: rem-calc(16) !default; 12 | 13 | /// Aspect ratios used to determine padding-bottom of responsive embed containers. 14 | /// @type Map 15 | $responsive-embed-ratios: ( 16 | default: 4 by 3, 17 | widescreen: 16 by 9, 18 | ) !default; 19 | 20 | // WARNING: Will be removed in version 6.4 21 | $responsive-embed-ratio: default; 22 | 23 | /// Creates a responsive embed container. 24 | /// @param {String|List} $ratio [default] - Ratio of the container. Can be a key from the `$responsive-embed-ratios` map or a list formatted as `x by y`. 25 | @mixin responsive-embed($ratio: default) { 26 | @if type-of($ratio) == 'string' { 27 | $ratio: map-get($responsive-embed-ratios, $ratio); 28 | } 29 | position: relative; 30 | height: 0; 31 | margin-bottom: $responsive-embed-margin-bottom; 32 | padding-bottom: ratio-to-percentage($ratio); 33 | overflow: hidden; 34 | 35 | iframe, 36 | object, 37 | embed, 38 | video { 39 | position: absolute; 40 | top: 0; 41 | #{$global-left}: 0; 42 | width: 100%; 43 | height: 100%; 44 | } 45 | } 46 | 47 | @mixin foundation-responsive-embed { 48 | .responsive-embed, 49 | .flex-video { 50 | @include responsive-embed($ratio: default); 51 | 52 | $ratios: map-remove($responsive-embed-ratios,default); 53 | 54 | @each $name, $ratio in $ratios { 55 | &.#{$name} { 56 | padding-bottom: ratio-to-percentage($ratio); 57 | } 58 | } 59 | } 60 | } 61 | 62 | @mixin foundation-flex-video { 63 | @warn 'This mixin is being replaced by foundation-responsive-embed(). foundation-flex-video() will be removed in Foundation 6.4.'; 64 | @include foundation-responsive-embed; 65 | } 66 | 67 | @mixin flex-video($ratio: $responsive-embed-ratio) { 68 | @warn 'This mixin is being replaced by responsive-embed(). flex-video() will be removed in Foundation 6.4.'; 69 | @include responsive-embed($ratio); 70 | } 71 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/_vendor/normalize-scss/sass/normalize/_vertical-rhythm.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Vertical Rhythm 3 | // 4 | // This is the minimal amount of code needed to create vertical rhythm in our 5 | // CSS. If you are looking for a robust solution, look at the excellent Typey 6 | // library. @see https://github.com/jptaranto/typey 7 | 8 | @function normalize-rhythm($value, $relative-to: $base-font-size, $unit: $base-unit) { 9 | @if unit($value) != px { 10 | @error "The normalize vertical-rhythm module only supports px inputs. The typey library is better."; 11 | } 12 | @if $unit == rem { 13 | @return ($value / $base-font-size) * 1rem; 14 | } 15 | @else if $unit == em { 16 | @return ($value / $relative-to) * 1em; 17 | } 18 | @else { // $unit == px 19 | @return $value; 20 | } 21 | } 22 | 23 | @mixin normalize-font-size($value, $relative-to: $base-font-size) { 24 | @if unit($value) != 'px' { 25 | @error "normalize-font-size() only supports px inputs. The typey library is better."; 26 | } 27 | font-size: normalize-rhythm($value, $relative-to); 28 | } 29 | 30 | @mixin normalize-rhythm($property, $values, $relative-to: $base-font-size) { 31 | $value-list: $values; 32 | $sep: space; 33 | @if type-of($values) == 'list' { 34 | $sep: list-separator($values); 35 | } 36 | @else { 37 | $value-list: append((), $values); 38 | } 39 | 40 | $normalized-values: (); 41 | @each $value in $value-list { 42 | @if unitless($value) and $value != 0 { 43 | $value: $value * normalize-rhythm($base-line-height, $relative-to); 44 | } 45 | $normalized-values: append($normalized-values, $value, $sep); 46 | } 47 | #{$property}: $normalized-values; 48 | } 49 | 50 | @mixin normalize-margin($values, $relative-to: $base-font-size) { 51 | @include normalize-rhythm(margin, $values, $relative-to); 52 | } 53 | 54 | @mixin normalize-line-height($font-size, $min-line-padding: 2px) { 55 | $lines: ceil($font-size / $base-line-height); 56 | // If lines are cramped include some extra leading. 57 | @if ($lines * $base-line-height - $font-size) < ($min-line-padding * 2) { 58 | $lines: $lines + 1; 59 | } 60 | @include normalize-rhythm(line-height, $lines, $font-size); 61 | } 62 | -------------------------------------------------------------------------------- /web_app/demo/data_translator.py: -------------------------------------------------------------------------------- 1 | import csv 2 | import time 3 | import json 4 | import logging 5 | from pathlib import Path 6 | from typing import Any, List 7 | from demo.database import Memgraph 8 | from demo.db_operations import import_all_cities 9 | 10 | 11 | logger = logging.getLogger('web') 12 | 13 | 14 | def json_cities(db: Memgraph) -> "JSON": 15 | start_time = time.time() 16 | 17 | json_cities = {} 18 | cities = list(import_all_cities(db)) 19 | while len(cities) == 0: 20 | time.sleep(1) 21 | cities = list(import_all_cities(db)) 22 | 23 | for city in cities: 24 | c = city['n'] 25 | json_cities[c.properties['id']] = [ 26 | c.properties['x'], c.properties['y'], c.properties['name']] 27 | 28 | logger.info(f'City JSON created in {time.time() - start_time} seconds.') 29 | return json.dumps(json_cities) 30 | 31 | 32 | def json_optical_paths(file_path: str) -> "JSON": 33 | start_time = time.time() 34 | 35 | json_optical_paths = [] 36 | with file_path.open() as f: 37 | reader = csv.DictReader(f, delimiter=',') 38 | for row in reader: 39 | json_optical_paths.append([ 40 | row["Source"], 41 | row["Destination"], 42 | row["Latency"]]) 43 | 44 | logger.info( 45 | f'Optical path JSON created in {time.time() - start_time} seconds.') 46 | return json.dumps(json_optical_paths) 47 | 48 | 49 | def json_shortest_path(shortest_path: Any) -> "JSON": 50 | start_time = time.time() 51 | 52 | json_shortest_path = [] 53 | sp_list = list(shortest_path) 54 | if(sp_list == []): 55 | return 0 56 | 57 | sp_relationships = sp_list[0]['rs'] 58 | 59 | for r in sp_relationships: 60 | first_label = 0 61 | if "City" in r.nodes[0]._labels: 62 | first_label = 1 63 | json_shortest_path.append([int(r.nodes[0]['id']), 64 | int(r.nodes[1]['id']), 65 | first_label, 66 | r['transmission_time']]) 67 | 68 | logger.info( 69 | f'Shortest path JSON created in {time.time() - start_time} seconds.') 70 | return json.dumps(json_shortest_path) 71 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/fontello/css/animation.css: -------------------------------------------------------------------------------- 1 | /* 2 | Animation example, for spinners 3 | */ 4 | .animate-spin { 5 | -moz-animation: spin 2s infinite linear; 6 | -o-animation: spin 2s infinite linear; 7 | -webkit-animation: spin 2s infinite linear; 8 | animation: spin 2s infinite linear; 9 | display: inline-block; 10 | } 11 | @-moz-keyframes spin { 12 | 0% { 13 | -moz-transform: rotate(0deg); 14 | -o-transform: rotate(0deg); 15 | -webkit-transform: rotate(0deg); 16 | transform: rotate(0deg); 17 | } 18 | 19 | 100% { 20 | -moz-transform: rotate(359deg); 21 | -o-transform: rotate(359deg); 22 | -webkit-transform: rotate(359deg); 23 | transform: rotate(359deg); 24 | } 25 | } 26 | @-webkit-keyframes spin { 27 | 0% { 28 | -moz-transform: rotate(0deg); 29 | -o-transform: rotate(0deg); 30 | -webkit-transform: rotate(0deg); 31 | transform: rotate(0deg); 32 | } 33 | 34 | 100% { 35 | -moz-transform: rotate(359deg); 36 | -o-transform: rotate(359deg); 37 | -webkit-transform: rotate(359deg); 38 | transform: rotate(359deg); 39 | } 40 | } 41 | @-o-keyframes spin { 42 | 0% { 43 | -moz-transform: rotate(0deg); 44 | -o-transform: rotate(0deg); 45 | -webkit-transform: rotate(0deg); 46 | transform: rotate(0deg); 47 | } 48 | 49 | 100% { 50 | -moz-transform: rotate(359deg); 51 | -o-transform: rotate(359deg); 52 | -webkit-transform: rotate(359deg); 53 | transform: rotate(359deg); 54 | } 55 | } 56 | @-ms-keyframes spin { 57 | 0% { 58 | -moz-transform: rotate(0deg); 59 | -o-transform: rotate(0deg); 60 | -webkit-transform: rotate(0deg); 61 | transform: rotate(0deg); 62 | } 63 | 64 | 100% { 65 | -moz-transform: rotate(359deg); 66 | -o-transform: rotate(359deg); 67 | -webkit-transform: rotate(359deg); 68 | transform: rotate(359deg); 69 | } 70 | } 71 | @keyframes spin { 72 | 0% { 73 | -moz-transform: rotate(0deg); 74 | -o-transform: rotate(0deg); 75 | -webkit-transform: rotate(0deg); 76 | transform: rotate(0deg); 77 | } 78 | 79 | 100% { 80 | -moz-transform: rotate(359deg); 81 | -o-transform: rotate(359deg); 82 | -webkit-transform: rotate(359deg); 83 | transform: rotate(359deg); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Starlink Demo 2 | === 3 | 4 | This demo application simulates and visualizes the Starlink internet constellation. It also demonstrates how **MemgraphDB** can be used to find the shortest routing path in such networks.
5 | To find out more about the subject, read the accompanying [blog post](https://github.com/memgraph/starlink/blob/master/blog_post/blog-post.md). 6 | 7 |
8 |

9 | 10 |

11 |
12 | 13 | > [!NOTE] 14 | > We no longer host the Starlink Simulator app on `http://starlink.memgraph.com/`. You can still check out this project to learn how to build an app with Memgraph. 15 | 16 | ## Prerequisites 17 | 18 | Before you can run the application, you need to have the following tools installed: 19 | * [Docker](https://docs.docker.com/get-docker/) 20 | * [Docker Compose](https://docs.docker.com/compose/install/) 21 | 22 | After you installed Docker you need to download the [Memgraph image](https://memgraph.com/download) for Docker and [load it](https://docs.memgraph.com/memgraph/quick-start#docker-installation).
23 | The container with the image should be stopped before attempting to build and run the app. 24 | 25 | ## Start the app 26 | 27 | First, position yourself in the root folder of the project. Build the Docker image and run the application with the following commands: 28 | ``` 29 | docker-compose build 30 | docker-compose up 31 | ``` 32 | If everything was successful you can open it in your browser. The app will be listening on: http://localhost:5001/. 33 | 34 | ## Project structure 35 | 36 | The app is divided into three separate modules: 37 | * **memgraph** - the database where all the positions of satellites and cities are stored and updated. 38 | * **simulator** - a Python program that utilizes the Skyfield package to calculate satellite positions in orbit. Those positions are then stored in the Memgraph database. 39 | * **web_app** - a client-server app that fetches data from the database and renders it. 40 | 41 | ## Technologies used 42 | 43 | * Python 3.7 44 | * MemgraphDB 2.2.1 45 | * Apache Kafka 46 | * Poetry 47 | * Skyfield 48 | * Flask 49 | * Leaflet 50 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/typography/_helpers.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group typography-helpers 7 | //// 8 | 9 | /// Default font size for lead paragraphs. 10 | /// @type Number 11 | $lead-font-size: $global-font-size * 1.25 !default; 12 | 13 | /// Default line height for lead paragraphs. 14 | /// @type String 15 | $lead-lineheight: 1.6 !default; 16 | 17 | /// Default line height for subheaders. 18 | /// @type Number 19 | $subheader-lineheight: 1.4 !default; 20 | 21 | /// Default font color for subheaders. 22 | /// @type Color 23 | $subheader-color: $dark-gray !default; 24 | 25 | /// Default font weight for subheaders. 26 | /// @type String 27 | $subheader-font-weight: $global-weight-normal !default; 28 | 29 | /// Default top margin for subhheaders. 30 | /// @type Number 31 | $subheader-margin-top: 0.2rem !default; 32 | 33 | /// Default bottom margin for subheaders. 34 | /// @type Number 35 | $subheader-margin-bottom: 0.5rem !default; 36 | 37 | /// Default font size for statistic numbers. 38 | /// @type Number 39 | $stat-font-size: 2.5rem !default; 40 | 41 | @mixin foundation-typography-helpers { 42 | // Use to create a subheading under a main header 43 | // Make sure you pair the two elements in a

element, like this: 44 | //
45 | //

Heading

46 | //

Subheading

47 | //
48 | .subheader { 49 | margin-top: $subheader-margin-top; 50 | margin-bottom: $subheader-margin-bottom; 51 | 52 | font-weight: $subheader-font-weight; 53 | line-height: $subheader-lineheight; 54 | color: $subheader-color; 55 | } 56 | 57 | // Use to style an introductory lead, deck, blurb, etc. 58 | .lead { 59 | font-size: $lead-font-size; 60 | line-height: $lead-lineheight; 61 | } 62 | 63 | // Use to style a large number to display a statistic 64 | .stat { 65 | font-size: $stat-font-size; 66 | line-height: 1; 67 | 68 | p + & { 69 | margin-top: -1rem; 70 | } 71 | } 72 | 73 | ul, ol { 74 | // Use to remove numbers from ordered list & bullets from unordered list 75 | &.no-bullet { 76 | margin-#{$global-left}: 0; 77 | list-style: none; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/js/foundation.util.nest.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import $ from 'jquery'; 4 | 5 | const Nest = { 6 | Feather(menu, type = 'zf') { 7 | menu.attr('role', 'menubar'); 8 | 9 | var items = menu.find('li').attr({'role': 'menuitem'}), 10 | subMenuClass = `is-${type}-submenu`, 11 | subItemClass = `${subMenuClass}-item`, 12 | hasSubClass = `is-${type}-submenu-parent`, 13 | applyAria = (type !== 'accordion'); // Accordions handle their own ARIA attriutes. 14 | 15 | items.each(function() { 16 | var $item = $(this), 17 | $sub = $item.children('ul'); 18 | 19 | if ($sub.length) { 20 | $item.addClass(hasSubClass); 21 | $sub.addClass(`submenu ${subMenuClass}`).attr({'data-submenu': ''}); 22 | if(applyAria) { 23 | $item.attr({ 24 | 'aria-haspopup': true, 25 | 'aria-label': $item.children('a:first').text() 26 | }); 27 | // Note: Drilldowns behave differently in how they hide, and so need 28 | // additional attributes. We should look if this possibly over-generalized 29 | // utility (Nest) is appropriate when we rework menus in 6.4 30 | if(type === 'drilldown') { 31 | $item.attr({'aria-expanded': false}); 32 | } 33 | } 34 | $sub 35 | .addClass(`submenu ${subMenuClass}`) 36 | .attr({ 37 | 'data-submenu': '', 38 | 'role': 'menu' 39 | }); 40 | if(type === 'drilldown') { 41 | $sub.attr({'aria-hidden': true}); 42 | } 43 | } 44 | 45 | if ($item.parent('[data-submenu]').length) { 46 | $item.addClass(`is-submenu-item ${subItemClass}`); 47 | } 48 | }); 49 | 50 | return; 51 | }, 52 | 53 | Burn(menu, type) { 54 | var //items = menu.find('li'), 55 | subMenuClass = `is-${type}-submenu`, 56 | subItemClass = `${subMenuClass}-item`, 57 | hasSubClass = `is-${type}-submenu-parent`; 58 | 59 | menu 60 | .find('>li, .menu, .menu > li') 61 | .removeClass(`${subMenuClass} ${subItemClass} ${hasSubClass} is-submenu-item submenu is-active`) 62 | .removeAttr('data-submenu').css('display', ''); 63 | 64 | } 65 | } 66 | 67 | export {Nest}; 68 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/util/_math.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group functions 7 | //// 8 | 9 | /// Finds the greatest common divisor of two integers. 10 | /// 11 | /// @param {Number} $a - First number to compare. 12 | /// @param {Number} $b - Second number to compare. 13 | /// 14 | /// @returns {Number} The greatest common divisor. 15 | @function gcd($a, $b) { 16 | // From: http://rosettacode.org/wiki/Greatest_common_divisor#JavaScript 17 | @if ($b != 0) { 18 | @return gcd($b, $a % $b); 19 | } 20 | @else { 21 | @return abs($a); 22 | } 23 | } 24 | 25 | /// Handles decimal exponents by trying to convert them into a fraction and then use a nth-root-algorithm for parts of the calculation 26 | /// 27 | /// @param {Number} $base - The base number. 28 | /// @param {Number} $exponent - The exponent. 29 | /// 30 | /// @returns {Number} The product of the exponentiation. 31 | @function pow($base, $exponent, $prec: 16) { 32 | @if (floor($exponent) != $exponent) { 33 | $prec2 : pow(10, $prec); 34 | $exponent: round($exponent * $prec2); 35 | $denominator: gcd($exponent, $prec2); 36 | @return nth-root(pow($base, $exponent / $denominator), $prec2 / $denominator, $prec); 37 | } 38 | 39 | $value: $base; 40 | @if $exponent > 1 { 41 | @for $i from 2 through $exponent { 42 | $value: $value * $base; 43 | } 44 | } 45 | @else if $exponent < 1 { 46 | @for $i from 0 through -$exponent { 47 | $value: $value / $base; 48 | } 49 | } 50 | 51 | @return $value; 52 | } 53 | 54 | @function nth-root($num, $n: 2, $prec: 12) { 55 | // From: http://rosettacode.org/wiki/Nth_root#JavaScript 56 | $x: 1; 57 | 58 | @for $i from 0 through $prec { 59 | $x: 1 / $n * (($n - 1) * $x + ($num / pow($x, $n - 1))); 60 | } 61 | 62 | @return $x; 63 | } 64 | 65 | /// Calculates the height as a percentage of the width for a given ratio. 66 | /// @param {List} $ratio - Ratio to use to calculate the height, formatted as `x by y`. 67 | /// @return {Number} A percentage value for the height relative to the width of a responsive container. 68 | @function ratio-to-percentage($ratio) { 69 | $w: nth($ratio, 1); 70 | $h: nth($ratio, 3); 71 | @return $h / $w * 100%; 72 | } 73 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_overflow.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-overflow 7 | //// 8 | 9 | /// Responsive breakpoints for overflow helper classes 10 | /// @type Boolean 11 | $prototype-overflow-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Map containing all the `overflow` classes 14 | /// @type Map 15 | $prototype-overflow: ( 16 | visible, 17 | hidden, 18 | scroll 19 | ) !default; 20 | 21 | /// Overflow classes, by default coming through a map `$prototype-overflow` 22 | /// @param {String} $overflow [] Overflow classes 23 | @mixin overflow($overflow) { 24 | overflow: $overflow !important; 25 | } 26 | 27 | /// Overflow classes on horizontal axis, by default coming through a map `$prototype-overflow` 28 | /// @param {String} $overflow [] Overflow classes (horizontal axis) 29 | @mixin overflow-x($overflow) { 30 | overflow-x: $overflow !important; 31 | } 32 | 33 | /// Overflow classes on vertical axis, by default coming through a map `$prototype-overflow` 34 | /// @param {String} $overflow [] Overflow classes (vertical axis) 35 | @mixin overflow-y($overflow) { 36 | overflow-y: $overflow !important; 37 | } 38 | 39 | @mixin foundation-prototype-overflow { 40 | @each $overflow in $prototype-overflow { 41 | .overflow-#{$overflow} { 42 | @include overflow($overflow); 43 | } 44 | .overflow-x-#{$overflow} { 45 | @include overflow-x($overflow); 46 | } 47 | .overflow-y-#{$overflow} { 48 | @include overflow-y($overflow); 49 | } 50 | } 51 | 52 | @if ($prototype-overflow-breakpoints) { 53 | // Loop through Responsive Breakpoints 54 | @each $size in $breakpoint-classes { 55 | @include breakpoint($size) { 56 | @each $overflow in $prototype-overflow { 57 | @if $size != $-zf-zero-breakpoint { 58 | .#{$size}-overflow-#{$overflow} { 59 | @include overflow($overflow); 60 | } 61 | .#{$size}-overflow-x-#{$overflow} { 62 | @include overflow-x($overflow); 63 | } 64 | .#{$size}-overflow-y-#{$overflow} { 65 | @include overflow-y($overflow); 66 | } 67 | } 68 | } 69 | } 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/prototype/_text-utilities.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group prototype-text-utilities 7 | //// 8 | 9 | /// Responsive breakpoints for text utilities 10 | /// @type Boolean 11 | $prototype-utilities-breakpoints: $global-prototype-breakpoints !default; 12 | 13 | /// Default Value for `text-overflow` variable 14 | /// @type String 15 | $prototype-text-overflow: ellipsis !default; 16 | 17 | /// Image Replacement utility. `text-hide` 18 | @mixin text-hide { 19 | font: 0/0 a !important; 20 | color: transparent !important; 21 | text-shadow: none !important; 22 | background-color: transparent !important; 23 | border: 0 !important; 24 | } 25 | 26 | /// Truncating the text, elipsis by default. 27 | /// @param {String} $overflow [$prototype-text-overflow] Text Truncate 28 | @mixin text-truncate( 29 | $overflow: $prototype-text-overflow 30 | ) { 31 | max-width: 100% !important; 32 | overflow: hidden !important; 33 | text-overflow: $overflow; 34 | white-space: nowrap !important; 35 | } 36 | 37 | /// No wrapping of the text. `text-nowrap` 38 | @mixin text-nowrap { 39 | white-space: nowrap !important; 40 | } 41 | 42 | /// Wrapping of the text. `text-wrap` 43 | @mixin text-wrap { 44 | word-wrap: break-word !important; 45 | } 46 | 47 | @mixin foundation-prototype-text-utilities { 48 | .text-hide { 49 | @include text-hide; 50 | } 51 | 52 | .text-truncate { 53 | @include text-truncate; 54 | } 55 | 56 | .text-nowrap { 57 | @include text-nowrap; 58 | } 59 | 60 | .text-wrap { 61 | @include text-wrap; 62 | } 63 | 64 | @if ($prototype-utilities-breakpoints) { 65 | // Loop through Responsive Breakpoints 66 | @each $size in $breakpoint-classes { 67 | @include breakpoint($size) { 68 | @if $size != $-zf-zero-breakpoint { 69 | .#{$size}-text-hide { 70 | @include text-hide; 71 | } 72 | 73 | .#{$size}-text-truncate { 74 | @include text-truncate; 75 | } 76 | 77 | .#{$size}-text-nowrap { 78 | @include text-nowrap; 79 | } 80 | 81 | .#{$size}-text-wrap { 82 | @include text-wrap; 83 | } 84 | } 85 | } 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/xy-grid/_collapse.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group xy-grid 7 | //// 8 | 9 | /// Collapses the grid a cells within it. 10 | /// 11 | /// @param {String} $selector [.cell] - The child element to remove the gutter from. 12 | /// @param {Keyword} $gutter-type [margin] - The type of gutter to remove. 13 | /// @param {List} $gutter-position [right left] - The positions to remove gutters from. Accepts `top`, `bottom`, `left`, `right` in any combination. 14 | @mixin xy-grid-collapse( 15 | $selector: '.cell', 16 | $gutter-type: margin, 17 | $gutter-position: right left, 18 | $min-breakpoint: $-zf-zero-breakpoint 19 | ) { 20 | // First, lets negate any margins on the top level 21 | @if ($gutter-type == 'margin') { 22 | 23 | @include breakpoint($min-breakpoint) { 24 | @each $value in $gutter-position { 25 | margin-#{$value}: 0; 26 | } 27 | 28 | > #{$selector} { 29 | @each $value in $gutter-position { 30 | margin-#{$value}: 0; 31 | } 32 | } 33 | } 34 | 35 | $excluded-bps: -zf-breakpoints-less-than($min-breakpoint); 36 | 37 | // Output new widths to not include gutters 38 | @each $bp in $breakpoint-classes { 39 | @if(sl-contain($excluded-bps, $bp)) { 40 | @include breakpoint($min-breakpoint) { 41 | @for $i from 1 through $grid-columns { 42 | // Sizing (percentage) 43 | > .#{$bp}-#{$i} { 44 | @include xy-cell-static($i, $gutter-output: false, $gutter-type: padding); 45 | } 46 | } 47 | } 48 | } @else { 49 | @include breakpoint($bp) { 50 | @for $i from 1 through $grid-columns { 51 | // Sizing (percentage) 52 | > .#{$bp}-#{$i} { 53 | @include xy-cell-static($i, $gutter-output: false, $gutter-type: padding); 54 | } 55 | } 56 | } 57 | } 58 | } 59 | } 60 | @else { 61 | 62 | @include breakpoint($min-breakpoint) { 63 | @each $value in $gutter-position { 64 | margin-#{$value}: 0; 65 | } 66 | 67 | > #{$selector} { 68 | @each $value in $gutter-position { 69 | padding-#{$value}: 0; 70 | } 71 | } 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/grid/_layout.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Sizes child elements so that `$n` number of items appear on each row. 10 | /// 11 | /// @param {Number} $n - Number of elements to display per row. 12 | /// @param {String} $selector ['.column'] - Selector(s) to use for child elements. 13 | /// @param {Number|List} $gutter 14 | /// The gutter to apply to child elements. Accepts multiple values: 15 | /// - $grid-column-gutter will use the values in the $grid-column-gutter map, including breakpoint sizes. 16 | /// - A fixed numeric value will apply this gutter to all breakpoints. 17 | @mixin grid-layout( 18 | $n, 19 | $selector: '.column', 20 | $gutter: null 21 | ) { 22 | & > #{$selector} { 23 | float: $global-left; 24 | width: percentage(1/$n); 25 | 26 | // If a $gutter value is passed 27 | @if($gutter) { 28 | // Gutters 29 | @if type-of($gutter) == 'map' { 30 | @each $breakpoint, $value in $gutter { 31 | $padding: rem-calc($value) / 2; 32 | 33 | @include breakpoint($breakpoint) { 34 | padding-right: $padding; 35 | padding-left: $padding; 36 | } 37 | } 38 | } 39 | @else if type-of($gutter) == 'number' and strip-unit($gutter) > 0 { 40 | $padding: rem-calc($gutter) / 2; 41 | padding-right: $padding; 42 | padding-left: $padding; 43 | } 44 | } 45 | 46 | &:nth-of-type(1n) { 47 | clear: none; 48 | } 49 | 50 | &:nth-of-type(#{$n}n+1) { 51 | clear: both; 52 | } 53 | 54 | &:last-child { 55 | float: $global-left; 56 | } 57 | } 58 | } 59 | 60 | /// Adds extra CSS to block grid children so the last items in the row center automatically. Apply this to the columns, not the row. 61 | /// 62 | /// @param {Number} $n - Number of items that appear in each row. 63 | @mixin grid-layout-center-last($n) { 64 | @for $i from 1 to $n { 65 | @if $i == 1 { 66 | &:nth-child(#{$n}n+1):last-child { 67 | margin-left: (100 - 100/$n * $i) / 2 * 1%; 68 | } 69 | } 70 | @else { 71 | &:nth-child(#{$n}n+1):nth-last-child(#{$i}) { 72 | margin-left: (100 - 100/$n * $i) / 2 * 1%; 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/effects/_hinge.scss: -------------------------------------------------------------------------------- 1 | /// Creates a hinge effect by rotating the element. 2 | /// @param {Keyword} $state [in] - State to transition to. 3 | /// @param {Keyword} $from [left] - Edge of the element to rotate from. Can be `top`, `right`, `bottom`, or `left`. 4 | /// @param {Keyword} $axis [edge] - Axis of the element to rotate on. Can be `edge` or `center`. 5 | /// @param {Number} $perspective [2000px] - Perceived distance between the viewer and the element. A higher number will make the rotation effect more pronounced. 6 | /// @param {Keyword} $turn-origin [from-back] - Side of the element to start the rotation from. Can be `from-back` or `from-front`. 7 | @function hinge ( 8 | $state: in, 9 | $from: left, 10 | $axis: edge, 11 | $perspective: 2000px, 12 | $turn-origin: from-back 13 | ) { 14 | // Rotation directions when hinging from back vs. front 15 | $rotation-amount: 90deg; 16 | $rotations-back: ( 17 | top: rotateX($rotation-amount * -1), 18 | right: rotateY($rotation-amount * -1), 19 | bottom: rotateX($rotation-amount), 20 | left: rotateY($rotation-amount), 21 | ); 22 | $rotations-from: ( 23 | top: rotateX($rotation-amount), 24 | right: rotateY($rotation-amount), 25 | bottom: rotateX($rotation-amount * -1), 26 | left: rotateY($rotation-amount * -1), 27 | ); 28 | 29 | // Rotation origin 30 | $rotation: ''; 31 | @if $turn-origin == from-front { 32 | $rotation: map-get($rotations-from, $from); 33 | } @else if $turn-origin == from-back { 34 | $rotation: map-get($rotations-back, $from); 35 | } @else { 36 | @warn '$turn-origin must be either "from-back" or "from-front"'; 37 | } 38 | 39 | // Start and end state 40 | $start: ''; 41 | $end: ''; 42 | @if $state == in { 43 | $start: perspective($perspective) $rotation; 44 | $end: perspective($perspective) rotate(0deg); 45 | } @else { 46 | $start: perspective($perspective) rotate(0deg); 47 | $end: perspective($perspective) $rotation; 48 | } 49 | 50 | // Turn axis 51 | $origin: ''; 52 | @if $axis == edge { 53 | $origin: $from; 54 | } @else { 55 | $origin: center; 56 | } 57 | 58 | $keyframes: ( 59 | name: 'hinge-#{$state}-#{$from}-#{$axis}-#{$turn-origin}', 60 | 0: (transform: $start, transform-origin: $origin), 61 | 100: (transform: $end), 62 | ); 63 | 64 | @return $keyframes; 65 | } 66 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_progress.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group progress-bar 7 | //// 8 | 9 | /// Height of a progress bar. 10 | /// @type Number 11 | $progress-height: 1rem !default; 12 | 13 | /// Background color of a progress bar. 14 | /// @type Color 15 | $progress-background: $medium-gray !default; 16 | 17 | /// Bottom margin of a progress bar. 18 | /// @type Number 19 | $progress-margin-bottom: $global-margin !default; 20 | 21 | /// Default color of a progress bar's meter. 22 | /// @type Color 23 | $progress-meter-background: $primary-color !default; 24 | 25 | /// Default radius of a progress bar. 26 | /// @type Number 27 | $progress-radius: $global-radius !default; 28 | 29 | @mixin foundation-progress-element { 30 | progress { 31 | display: block; 32 | width: 100%; 33 | height: $progress-height; 34 | margin-bottom: $progress-margin-bottom; 35 | 36 | appearance: none; 37 | 38 | @if hasvalue($progress-radius) { 39 | border-radius: $progress-radius; 40 | } 41 | 42 | // For Firefox 43 | border: 0; 44 | background: $progress-background; 45 | 46 | &::-webkit-progress-bar { 47 | background: $progress-background; 48 | 49 | @if hasvalue($progress-radius) { 50 | border-radius: $progress-radius; 51 | } 52 | } 53 | 54 | &::-webkit-progress-value { 55 | background: $progress-meter-background; 56 | 57 | @if hasvalue($progress-radius) { 58 | border-radius: $progress-radius; 59 | } 60 | } 61 | 62 | &::-moz-progress-bar { 63 | background: $progress-meter-background; 64 | 65 | @if hasvalue($progress-radius) { 66 | border-radius: $progress-radius; 67 | } 68 | } 69 | 70 | @each $name, $color in $foundation-palette { 71 | &.#{$name} { 72 | // Internet Explorer sets the fill with color 73 | color: $color; 74 | 75 | &::-webkit-progress-value { 76 | background: $color; 77 | } 78 | 79 | &::-moz-progress-bar { 80 | background: $color; 81 | } 82 | } 83 | } 84 | 85 | // For IE and Edge 86 | &::-ms-fill { 87 | @if hasvalue($progress-radius) { 88 | border-radius: $progress-radius; 89 | } 90 | 91 | border: 0; 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/dist/js/plugins/foundation.util.keyboard.min.js: -------------------------------------------------------------------------------- 1 | !function(n){function e(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return n[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var t={};e.m=n,e.c=t,e.d=function(n,t,o){e.o(n,t)||Object.defineProperty(n,t,{configurable:!1,enumerable:!0,get:o})},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},e.p="",e(e.s=89)}({0:function(n,e){n.exports=jQuery},1:function(n,e){n.exports={Foundation:window.Foundation}},3:function(n,e){n.exports={rtl:window.Foundation.rtl,GetYoDigits:window.Foundation.GetYoDigits,transitionend:window.Foundation.transitionend}},89:function(n,e,t){n.exports=t(90)},90:function(n,e,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o=t(1),r=(t.n(o),t(91));o.Foundation.Keyboard=r.a},91:function(n,e,t){"use strict";function o(n){return!!n&&n.find("a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]").filter(function(){return!(!a()(this).is(":visible")||a()(this).attr("tabindex")<0)})}function r(n){var e=d[n.which||n.keyCode]||String.fromCharCode(n.which).toUpperCase();return e=e.replace(/\W+/,""),n.shiftKey&&(e="SHIFT_"+e),n.ctrlKey&&(e="CTRL_"+e),n.altKey&&(e="ALT_"+e),e=e.replace(/_$/,"")}t.d(e,"a",function(){return c});var i=t(0),a=t.n(i),u=t(3),d=(t.n(u),{9:"TAB",13:"ENTER",27:"ESCAPE",32:"SPACE",35:"END",36:"HOME",37:"ARROW_LEFT",38:"ARROW_UP",39:"ARROW_RIGHT",40:"ARROW_DOWN"}),f={},c={keys:function(n){var e={};for(var t in n)e[n[t]]=n[t];return e}(d),parseKey:r,handleKey:function(n,e,t){var o,r,i,d=f[e],c=this.parseKey(n);if(!d)return console.warn("Component not defined!");if(o=void 0===d.ltr?d:Object(u.rtl)()?a.a.extend({},d.ltr,d.rtl):a.a.extend({},d.rtl,d.ltr),r=o[c],(i=t[r])&&"function"==typeof i){var s=i.apply();(t.handled||"function"==typeof t.handled)&&t.handled(s)}else(t.unhandled||"function"==typeof t.unhandled)&&t.unhandled()},findFocusable:o,register:function(n,e){f[n]=e},trapFocus:function(n){var e=o(n),t=e.eq(0),i=e.eq(-1);n.on("keydown.zf.trapfocus",function(n){n.target===i[0]&&"TAB"===r(n)?(n.preventDefault(),t.focus()):n.target===t[0]&&"SHIFT_TAB"===r(n)&&(n.preventDefault(),i.focus())})},releaseFocus:function(n){n.off("keydown.zf.trapfocus")}}}}); -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/forms/_select.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group forms 7 | //// 8 | 9 | /// Background color for select menus. 10 | /// @type Color 11 | $select-background: $white !default; 12 | 13 | /// Color of the dropdown triangle inside select menus. Set to `transparent` to remove it entirely. 14 | /// @type Color 15 | $select-triangle-color: $dark-gray !default; 16 | 17 | /// Default radius for select menus. 18 | /// @type Color 19 | $select-radius: $global-radius !default; 20 | 21 | @mixin form-select { 22 | $height: ($input-font-size * unitless-calc($input-line-height)) + (get-side($input-padding, 'top') + get-side($input-padding, 'bottom')) - rem-calc(1); 23 | 24 | height: $height; 25 | margin: 0 0 $form-spacing; 26 | padding: $input-padding; 27 | 28 | appearance: none; 29 | border: $input-border; 30 | border-radius: $select-radius; 31 | background-color: $select-background; 32 | 33 | font-family: $input-font-family; 34 | font-size: $input-font-size; 35 | font-weight: $input-font-weight; 36 | line-height: $input-line-height; 37 | color: $input-color; 38 | 39 | @if $select-triangle-color != transparent { 40 | @include background-triangle($select-triangle-color); 41 | background-origin: content-box; 42 | background-position: $global-right (-$form-spacing) center; 43 | background-repeat: no-repeat; 44 | background-size: 9px 6px; 45 | 46 | padding-#{$global-right}: ($form-spacing * 1.5); 47 | } 48 | 49 | @if has-value($input-transition) { 50 | transition: $input-transition; 51 | } 52 | 53 | // Focus state 54 | &:focus { 55 | outline: none; 56 | border: $input-border-focus; 57 | background-color: $input-background-focus; 58 | box-shadow: $input-shadow-focus; 59 | 60 | @if has-value($input-transition) { 61 | transition: $input-transition; 62 | } 63 | } 64 | 65 | // Disabled state 66 | &:disabled { 67 | background-color: $input-background-disabled; 68 | cursor: $input-cursor-disabled; 69 | } 70 | 71 | // Hide the dropdown arrow shown in newer IE versions 72 | &::-ms-expand { 73 | display: none; 74 | } 75 | 76 | &[multiple] { 77 | height: auto; 78 | background-image: none; 79 | } 80 | } 81 | 82 | @mixin foundation-form-select { 83 | select { 84 | @include form-select; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /web_app/demo/database/models.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict, Iterable, Set, Tuple 2 | 3 | 4 | class GraphObject(): 5 | def __init__(self, 6 | object_id: Any, 7 | properties: Dict[str, Any] = None): 8 | self._id = object_id 9 | self._properties = properties or dict() 10 | 11 | @property 12 | def id(self) -> Any: 13 | return self._id 14 | 15 | @property 16 | def properties(self) -> Dict[str, Any]: 17 | return self._properties 18 | 19 | def __str__(self) -> str: 20 | return '' 21 | 22 | def __repr__(self) -> str: 23 | return str(self) 24 | 25 | 26 | class Node(GraphObject): 27 | def __init__(self, 28 | node_id: Any, 29 | labels: Iterable[str] = None, 30 | properties: Dict[str, Any] = None): 31 | super().__init__(node_id, properties) 32 | self._labels = set(labels) if labels else set() 33 | 34 | @property 35 | def labels(self) -> Set[str]: 36 | return self._labels 37 | 38 | def __str__(self) -> str: 39 | return ''.join(( 40 | '')) 45 | 46 | 47 | class Relationship(GraphObject): 48 | def __init__(self, 49 | rel_id: Any, 50 | rel_type: str, 51 | start_node: Node, 52 | end_node: Node, 53 | properties: Dict[str, Any] = None): 54 | super().__init__(rel_id, properties) 55 | self._type = rel_type 56 | self._start_node = start_node 57 | self._end_node = end_node 58 | 59 | @property 60 | def type(self) -> str: 61 | return self._type 62 | 63 | @property 64 | def end_node(self) -> Node: 65 | return self._start_node 66 | 67 | @property 68 | def start_node(self) -> Node: 69 | return self._end_node 70 | 71 | @property 72 | def nodes(self) -> Tuple[Node, Node]: 73 | return (self.start_node, self.end_node) 74 | 75 | def __str__(self) -> str: 76 | return ''.join(( 77 | '')) 83 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/motion-ui/src/_settings.scss: -------------------------------------------------------------------------------- 1 | /// Format for CSS classes created with Motion UI. 2 | /// @type Map 3 | /// @prop {Boolean} append [true] - Defines if selectors are chained to the selector (`.class.enter`), or appended as a new class (`.class-enter`). 4 | /// @prop {String} prefix ['mui-'] - Prefix to add before the state of a class. Enter an empty string to use no prefix. 5 | /// @prop {String} prefix ['-active'] - Suffix to add to the active state class. 6 | $motion-ui-classes: ( 7 | chain: true, 8 | prefix: 'mui-', 9 | active: '-active', 10 | ) !default; 11 | 12 | /// State names to reference when writing motion classes. To use multiple class names for one state, enter a list of strings instead of one string. 13 | /// @type Map 14 | $motion-ui-states: ( 15 | in: 'enter', 16 | out: 'leave', 17 | ) !default; 18 | 19 | /// Default speed that transitions and animations play at, along with values for modifier classes to change the speed. 20 | /// @type Map 21 | $motion-ui-speeds: ( 22 | default: 500ms, 23 | slow: 750ms, 24 | fast: 250ms, 25 | ) !default; 26 | 27 | /// Default delay to add before motion, along with values for modifier classes to change the delay. 28 | /// @type Map 29 | $motion-ui-delays: ( 30 | default: 0, 31 | short: 300ms, 32 | long: 700ms, 33 | ) !default; 34 | 35 | /// Default easing for transitions and animations, along with values for modifier classes to change the easing. 36 | /// @type Map 37 | $motion-ui-easings: ( 38 | default: linear, 39 | linear: linear, 40 | ease: ease, 41 | ease-in: ease-in, 42 | ease-out: ease-out, 43 | ease-in-out: ease-in-out, 44 | bounce-in: cubic-bezier(0.485, 0.155, 0.24, 1.245), 45 | bounce-out: cubic-bezier(0.485, 0.155, 0.515, 0.845), 46 | bounce-in-out: cubic-bezier(0.76, -0.245, 0.24, 1.245), 47 | ) !default; 48 | 49 | /// Miscellaneous settings related to Motion UI. 50 | /// @type Map 51 | /// @prop {Boolean} slide-and-fade [false] - Defines if slide motions should also fade in/out. 52 | /// @prop {Boolean} slide-and-fade [true] - Defines if hinge motions should also fade in/out. 53 | /// @prop {Boolean} slide-and-fade [true] - Defines if scale motions should also fade in/out. 54 | /// @prop {Boolean} slide-and-fade [true] - Defines if spin motions should also fade in/out. 55 | $motion-ui-settings: ( 56 | slide-and-fade: false, 57 | hinge-and-fade: true, 58 | scale-and-fade: true, 59 | spin-and-fade: true, 60 | activate-queue-class: 'is-animating', 61 | ) !default; 62 | -------------------------------------------------------------------------------- /web_app/static/assets/libs/foundation-sites/scss/grid/_position.scss: -------------------------------------------------------------------------------- 1 | // Foundation for Sites by ZURB 2 | // foundation.zurb.com 3 | // Licensed under MIT Open Source 4 | 5 | //// 6 | /// @group grid 7 | //// 8 | 9 | /// Reposition a column. 10 | /// 11 | /// @param {Number|Keyword} $position - Direction and amount to move. The column will move equal to the width of the column count specified. A positive number will push the column to the right, while a negative number will pull it to the left. Set to center to center the column. 12 | @mixin grid-column-position($position) { 13 | @if type-of($position) == 'number' { 14 | $offset: percentage($position / $grid-column-count); 15 | 16 | position: relative; 17 | #{$global-left}: $offset; 18 | } 19 | @else if $position == center { 20 | &, &:last-child:not(:first-child) { 21 | float: none; 22 | clear: both; 23 | } 24 | margin-right: auto; 25 | margin-left: auto; 26 | } 27 | @else { 28 | @warn 'Wrong syntax for grid-column-position(). Enter a positive or negative number, or center.'; 29 | } 30 | } 31 | 32 | /// Reset a position definition. 33 | @mixin grid-column-unposition { 34 | position: static; 35 | float: $global-left; 36 | margin-right: 0; 37 | margin-left: 0; 38 | } 39 | 40 | /// Offsets a column to the right by `$n` columns. 41 | /// @param {Number|List} $n - Width to offset by. You can pass in any value accepted by the `grid-column()` mixin, such as `6`, `50%`, or `1 of 2`. 42 | @mixin grid-column-offset($n) { 43 | margin-#{$global-left}: grid-column($n); 44 | } 45 | 46 | /// Disable the default behavior of the last column in a row aligning to the opposite edge. 47 | @mixin grid-column-end { 48 | // This extra specificity is required for the property to be applied 49 | &:last-child:last-child { 50 | float: $global-left; 51 | } 52 | } 53 | 54 | /// Shorthand for `grid-column-position()`. 55 | /// @alias grid-column-position 56 | @mixin grid-col-pos($position) { 57 | @include grid-column-position($position); 58 | } 59 | 60 | /// Shorthand for `grid-column-unposition()`. 61 | /// @alias grid-column-unposition 62 | @mixin grid-col-unpos { 63 | @include grid-column-unposition; 64 | } 65 | 66 | /// Shorthand for `grid-column-offset()`. 67 | /// @alias grid-column-offset 68 | @mixin grid-col-off($n) { 69 | @include grid-column-offset($n); 70 | } 71 | 72 | /// Shorthand for `grid-column-end()`. 73 | /// @alias grid-column-end 74 | @mixin grid-col-end { 75 | @include grid-column-end; 76 | } 77 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | downloads/ 14 | eggs/ 15 | .eggs/ 16 | lib/ 17 | lib64/ 18 | parts/ 19 | sdist/ 20 | var/ 21 | wheels/ 22 | pip-wheel-metadata/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .benchmarks 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | .DS_Store 131 | starlink_workspace.code-workspace 132 | --------------------------------------------------------------------------------