├── .gitignore ├── compass ├── resources │ └── views │ │ ├── .gitkeep │ │ ├── share.blade.php │ │ ├── auth │ │ └── error.blade.php │ │ ├── share-expired.blade.php │ │ ├── layouts │ │ ├── master.blade.php │ │ ├── share.blade.php │ │ └── map.blade.php │ │ ├── index.blade.php │ │ ├── partials │ │ ├── logged-in.blade.php │ │ └── calendar.blade.php │ │ ├── dashboard.blade.php │ │ └── map.blade.php ├── app │ ├── Console │ │ ├── Commands │ │ │ ├── .gitkeep │ │ │ ├── GenerateKey.php │ │ │ ├── TestTrip.php │ │ │ └── CleanFile.php │ │ └── Kernel.php │ ├── Events │ │ └── Event.php │ ├── Listeners │ │ └── Listener.php │ ├── Providers │ │ ├── AppServiceProvider.php │ │ └── EventServiceProvider.php │ ├── Http │ │ ├── Middleware │ │ │ └── ExampleMiddleware.php │ │ ├── routes.php │ │ └── Controllers │ │ │ └── Share.php │ ├── Jobs │ │ ├── Job.php │ │ ├── TripStarted.php │ │ └── NotifyOfNewLocations.php │ └── Exceptions │ │ └── Handler.php ├── database │ ├── migrations │ │ ├── .gitkeep │ │ ├── 2017_05_21_093158_add_ping_urls.php │ │ ├── 2015_12_28_221004_micropub.php │ │ ├── 2019_05_12_123107_shares.php │ │ ├── 2015_10_16_171131_create_failed_jobs_table.php │ │ ├── 2017_07_10_231240_database_settings.php │ │ ├── 2018_01_28_224119_cache_last_location.php │ │ └── 2000_00_00_000000_setup.php │ ├── seeds │ │ └── DatabaseSeeder.php │ ├── factories │ │ └── ModelFactory.php │ └── schema.sql ├── public │ ├── assets │ │ ├── highcharts │ │ │ ├── api │ │ │ │ ├── css │ │ │ │ │ ├── ref.css │ │ │ │ │ ├── font-awesome.css │ │ │ │ │ └── jquery-ui.css │ │ │ │ ├── js │ │ │ │ │ ├── ref.js │ │ │ │ │ ├── jquery.min.js │ │ │ │ │ └── jquery-ui.min.js │ │ │ │ ├── images │ │ │ │ │ ├── Highcharts.svg │ │ │ │ │ ├── splash.svg │ │ │ │ │ ├── sprite.png │ │ │ │ │ ├── favicon-160x160.png │ │ │ │ │ ├── favicon-16x16.png │ │ │ │ │ ├── favicon-192x192.png │ │ │ │ │ ├── favicon-32x32.png │ │ │ │ │ ├── favicon-96x96.png │ │ │ │ │ ├── apple-touch-icon-114x114.png │ │ │ │ │ ├── apple-touch-icon-120x120.png │ │ │ │ │ ├── apple-touch-icon-144x144.png │ │ │ │ │ ├── apple-touch-icon-152x152.png │ │ │ │ │ ├── apple-touch-icon-180x180.png │ │ │ │ │ ├── apple-touch-icon-57x57.png │ │ │ │ │ ├── apple-touch-icon-60x60.png │ │ │ │ │ ├── apple-touch-icon-72x72.png │ │ │ │ │ └── apple-touch-icon-76x76.png │ │ │ │ └── fonts │ │ │ │ │ └── fontawesome-webfont.woff │ │ │ ├── graphics │ │ │ │ ├── skies.jpg │ │ │ │ ├── snow.png │ │ │ │ ├── sun.png │ │ │ │ └── meteogram-symbols-30px.png │ │ │ ├── gfx │ │ │ │ └── vml-radial-gradient.png │ │ │ └── js │ │ │ │ ├── modules │ │ │ │ ├── no-data-to-display.js │ │ │ │ ├── funnel.js │ │ │ │ ├── solid-gauge.js │ │ │ │ ├── broken-axis.js │ │ │ │ ├── offline-exporting.js │ │ │ │ └── no-data-to-display.src.js │ │ │ │ └── themes │ │ │ │ ├── grid-light.js │ │ │ │ ├── skies.js │ │ │ │ ├── sand-signika.js │ │ │ │ ├── grid.js │ │ │ │ └── dark-unica.js │ │ ├── map-pin-end.png │ │ ├── map-pin-start.png │ │ ├── leaflet-0.7.3 │ │ │ └── images │ │ │ │ ├── layers.png │ │ │ │ ├── layers-2x.png │ │ │ │ ├── marker-icon.png │ │ │ │ ├── marker-icon-2x.png │ │ │ │ └── marker-shadow.png │ │ ├── font-awesome-4.4.0 │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ └── HELP-US-OUT.txt │ │ ├── semantic │ │ │ ├── themes │ │ │ │ ├── basic │ │ │ │ │ └── assets │ │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── icons.eot │ │ │ │ │ │ ├── icons.ttf │ │ │ │ │ │ └── icons.woff │ │ │ │ ├── default │ │ │ │ │ └── assets │ │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── icons.eot │ │ │ │ │ │ ├── icons.ttf │ │ │ │ │ │ ├── icons.woff │ │ │ │ │ │ └── icons.woff2 │ │ │ │ │ │ └── images │ │ │ │ │ │ └── flags.png │ │ │ │ └── github │ │ │ │ │ └── assets │ │ │ │ │ └── fonts │ │ │ │ │ ├── octicons.ttf │ │ │ │ │ ├── octicons.woff │ │ │ │ │ └── octicons-local.ttf │ │ │ └── components │ │ │ │ ├── reset.min.css │ │ │ │ ├── flag.min.css │ │ │ │ ├── sticky.min.css │ │ │ │ ├── reset.css │ │ │ │ ├── transition.min.css │ │ │ │ ├── flag.css │ │ │ │ ├── tab.min.css │ │ │ │ ├── rail.min.css │ │ │ │ ├── breadcrumb.min.css │ │ │ │ ├── nag.min.css │ │ │ │ ├── sticky.css │ │ │ │ ├── site.min.css │ │ │ │ ├── container.min.css │ │ │ │ ├── embed.min.css │ │ │ │ ├── shape.min.css │ │ │ │ ├── transition.css │ │ │ │ ├── tab.css │ │ │ │ ├── ad.min.css │ │ │ │ ├── rating.min.css │ │ │ │ ├── dimmer.min.css │ │ │ │ ├── breadcrumb.css │ │ │ │ ├── comment.min.css │ │ │ │ ├── rail.css │ │ │ │ ├── accordion.min.css │ │ │ │ ├── divider.min.css │ │ │ │ ├── nag.css │ │ │ │ ├── site.css │ │ │ │ ├── loader.min.css │ │ │ │ ├── image.min.css │ │ │ │ ├── container.css │ │ │ │ ├── feed.min.css │ │ │ │ ├── embed.css │ │ │ │ ├── shape.css │ │ │ │ ├── popup.min.css │ │ │ │ ├── dimmer.css │ │ │ │ ├── rating.css │ │ │ │ ├── rating.min.js │ │ │ │ ├── reveal.min.css │ │ │ │ ├── ad.css │ │ │ │ └── search.min.css │ │ ├── share-map.css │ │ ├── compass.svg │ │ ├── speed.js │ │ ├── map.css │ │ ├── extensions.js │ │ ├── styles.css │ │ ├── events.js │ │ ├── battery.js │ │ └── share.js │ ├── .htaccess │ └── index.php ├── storage │ ├── app │ │ └── .gitignore │ ├── gps │ │ └── .gitignore │ ├── logs │ │ └── .gitignore │ └── framework │ │ ├── cache │ │ └── .gitignore │ │ ├── sessions │ │ └── .gitignore │ │ └── views │ │ └── .gitignore ├── .gitignore ├── tests │ ├── ExampleTest.php │ └── TestCase.php ├── server.php ├── phpunit.xml ├── composer.json ├── artisan ├── readme.md ├── .env.example └── bootstrap │ └── app.php ├── screenshot-mapview.jpg └── CONTRIBUTING.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /compass/resources/views/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/app/Console/Commands/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/database/migrations/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/css/ref.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/js/ref.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /compass/storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /compass/storage/gps/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /compass/storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/css/font-awesome.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/css/jquery-ui.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/Highcharts.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/splash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/sprite.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/js/jquery.min.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /compass/.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | .env 3 | .DS_Store 4 | data/ 5 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/favicon-160x160.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/favicon-16x16.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/favicon-192x192.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/favicon-32x32.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/favicon-96x96.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/js/jquery-ui.min.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /compass/storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /compass/storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-57x57.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-60x60.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-72x72.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/api/images/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenshot-mapview.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/screenshot-mapview.jpg -------------------------------------------------------------------------------- /compass/public/assets/map-pin-end.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/map-pin-end.png -------------------------------------------------------------------------------- /compass/public/assets/map-pin-start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/map-pin-start.png -------------------------------------------------------------------------------- /compass/public/assets/highcharts/graphics/skies.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/highcharts/graphics/skies.jpg -------------------------------------------------------------------------------- /compass/public/assets/highcharts/graphics/snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/highcharts/graphics/snow.png -------------------------------------------------------------------------------- /compass/public/assets/highcharts/graphics/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/highcharts/graphics/sun.png -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | By submitting code to this project, you agree to irrevocably release it under the same license as this project. See README.md for more details. -------------------------------------------------------------------------------- /compass/public/assets/leaflet-0.7.3/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/leaflet-0.7.3/images/layers.png -------------------------------------------------------------------------------- /compass/public/assets/leaflet-0.7.3/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/leaflet-0.7.3/images/layers-2x.png -------------------------------------------------------------------------------- /compass/public/assets/leaflet-0.7.3/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/leaflet-0.7.3/images/marker-icon.png -------------------------------------------------------------------------------- /compass/public/assets/highcharts/gfx/vml-radial-gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/highcharts/gfx/vml-radial-gradient.png -------------------------------------------------------------------------------- /compass/public/assets/leaflet-0.7.3/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/leaflet-0.7.3/images/marker-icon-2x.png -------------------------------------------------------------------------------- /compass/public/assets/leaflet-0.7.3/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/leaflet-0.7.3/images/marker-shadow.png -------------------------------------------------------------------------------- /compass/public/assets/font-awesome-4.4.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/font-awesome-4.4.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/basic/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/basic/assets/fonts/icons.eot -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/basic/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/basic/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /compass/public/assets/highcharts/graphics/meteogram-symbols-30px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/highcharts/graphics/meteogram-symbols-30px.png -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/basic/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/basic/assets/fonts/icons.woff -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/default/assets/fonts/icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/default/assets/fonts/icons.eot -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/default/assets/fonts/icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/default/assets/fonts/icons.ttf -------------------------------------------------------------------------------- /compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/default/assets/fonts/icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/default/assets/fonts/icons.woff -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/default/assets/fonts/icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/default/assets/fonts/icons.woff2 -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/default/assets/images/flags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/default/assets/images/flags.png -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/github/assets/fonts/octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/github/assets/fonts/octicons.ttf -------------------------------------------------------------------------------- /compass/public/assets/semantic/themes/github/assets/fonts/octicons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/semantic/themes/github/assets/fonts/octicons.woff -------------------------------------------------------------------------------- /compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronpk/Compass/main/compass/public/assets/font-awesome-4.4.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /compass/app/Events/Event.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | @endsection 10 | -------------------------------------------------------------------------------- /compass/resources/views/auth/error.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | 3 | @section('content') 4 | 5 |
6 |

Something went wrong

7 |

{{ $error }}

8 |
9 | 10 | @endsection 11 | -------------------------------------------------------------------------------- /compass/app/Listeners/Listener.php: -------------------------------------------------------------------------------- 1 | 6 | This shared link has expired. 7 | 8 | 9 | @endsection 10 | -------------------------------------------------------------------------------- /compass/public/assets/share-map.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | } 4 | #map { 5 | height: 100%; 6 | } 7 | 8 | /* Move the map zoom controls away from the Compass logo */ 9 | .leaflet-top .leaflet-control-zoom { 10 | margin-top: 60px; 11 | margin-left: 26px; 12 | } 13 | -------------------------------------------------------------------------------- /compass/tests/ExampleTest.php: -------------------------------------------------------------------------------- 1 | visit('/') 13 | ->see('Lumen.'); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /compass/tests/TestCase.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes... 9 | RewriteRule ^(.*)/$ /$1 [L,R=301] 10 | 11 | # Handle Front Controller... 12 | RewriteCond %{REQUEST_FILENAME} !-d 13 | RewriteCond %{REQUEST_FILENAME} !-f 14 | RewriteRule ^ index.php [L] 15 | 16 | -------------------------------------------------------------------------------- /compass/database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call('UserTableSeeder'); 18 | 19 | Model::reguard(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/reset.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Reset 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */*,:after,:before{box-sizing:inherit}html{box-sizing:border-box}input[type=text],input[type=email],input[type=search],input[type=password]{-webkit-appearance:none;-moz-appearance:none} -------------------------------------------------------------------------------- /compass/app/Http/Middleware/ExampleMiddleware.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /compass/app/Console/Commands/GenerateKey.php: -------------------------------------------------------------------------------- 1 | line('Below is a random string you can use for APP_KEY in the .env file'); 13 | $this->info($key); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /compass/app/Providers/EventServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 16 | 'App\Listeners\EventListener', 17 | ], 18 | ]; 19 | } 20 | -------------------------------------------------------------------------------- /compass/resources/views/layouts/master.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Compass 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | @yield('content') 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /compass/resources/views/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | 3 | @section('content') 4 | 5 |
6 | 7 | 8 | 9 | 10 | 16 | 17 |
18 | 19 | @endsection 20 | -------------------------------------------------------------------------------- /compass/database/migrations/2017_05_21_093158_add_ping_urls.php: -------------------------------------------------------------------------------- 1 | string('ping_urls', 1024); 17 | }); 18 | } 19 | 20 | /** 21 | * Reverse the migrations. 22 | * 23 | * @return void 24 | */ 25 | public function down() 26 | { 27 | // 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/flag.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Flag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */i.flag:not(.icon){display:inline-block;width:16px;height:11px;line-height:11px;vertical-align:baseline;margin:0 .5em 0 0;text-decoration:inherit;speak:none;font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.flag:not(.icon):before{display:inline-block;content:'';background:url(../themes/default/assets/images/flags.png) no-repeat;width:16px;height:11px} -------------------------------------------------------------------------------- /compass/resources/views/partials/logged-in.blade.php: -------------------------------------------------------------------------------- 1 | 20 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/sticky.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Sticky 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.sticky{position:static;-webkit-transition:none;transition:none;z-index:800}.ui.sticky.bound{position:absolute;left:auto;right:auto}.ui.sticky.fixed{position:fixed;left:auto;right:auto}.ui.sticky.bound.top,.ui.sticky.fixed.top{top:0;bottom:auto}.ui.sticky.bound.bottom,.ui.sticky.fixed.bottom{top:auto;bottom:0}.ui.native.sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky} -------------------------------------------------------------------------------- /compass/database/migrations/2015_12_28_221004_micropub.php: -------------------------------------------------------------------------------- 1 | string('micropub_endpoint', 255); 17 | $table->string('micropub_token', 1024); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | * 24 | * @return void 25 | */ 26 | public function down() 27 | { 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /compass/database/factories/ModelFactory.php: -------------------------------------------------------------------------------- 1 | define(App\User::class, function ($faker) { 15 | return [ 16 | 'name' => $faker->name, 17 | 'email' => $faker->email, 18 | 'password' => str_random(10), 19 | 'remember_token' => str_random(10), 20 | ]; 21 | }); 22 | -------------------------------------------------------------------------------- /compass/app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->unsignedInteger('database_id'); 18 | $table->datetime('expires_at')->nullable(); 19 | $table->string('token', 30); 20 | $table->datetime('created_at'); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::drop('shares'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /compass/database/migrations/2015_10_16_171131_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->text('connection'); 18 | $table->text('queue'); 19 | $table->longText('payload'); 20 | $table->timestamp('failed_at'); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::drop('failed_jobs'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /compass/app/Jobs/Job.php: -------------------------------------------------------------------------------- 1 | string('timezone', 100)->default('UTC'); 17 | $table->boolean('metric')->default(true); 18 | }); 19 | } 20 | 21 | /** 22 | * Reverse the migrations. 23 | * 24 | * @return void 25 | */ 26 | public function down() 27 | { 28 | Schema::table('databases', function (Blueprint $table) { 29 | $table->dropColumn('timezone'); 30 | $table->dropColumn('metric'); 31 | }); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/transition.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Transition 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.transition{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animating.transition{-webkit-backface-visibility:hidden;backface-visibility:hidden;visibility:visible!important}.loading.transition{position:absolute;top:-99999px;left:-99999px}.hidden.transition{display:none;visibility:hidden}.visible.transition{display:block!important;visibility:visible!important}.disabled.transition{-webkit-animation-play-state:paused;animation-play-state:paused}.looping.transition{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite} -------------------------------------------------------------------------------- /compass/phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | ./tests/ 15 | 16 | 17 | 18 | 19 | app/ 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /compass/public/index.php: -------------------------------------------------------------------------------- 1 | run(); 29 | -------------------------------------------------------------------------------- /compass/database/migrations/2018_01_28_224119_cache_last_location.php: -------------------------------------------------------------------------------- 1 | longtext('last_location')->nullable(); 17 | $table->datetime('last_location_date')->nullable(); 18 | $table->longtext('current_trip')->nullable(); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::table('databases', function (Blueprint $table) { 30 | $table->dropColumn('last_location'); 31 | $table->dropColumn('last_location_date'); 32 | $table->dropColumn('current_trip'); 33 | }); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /compass/app/Console/Commands/TestTrip.php: -------------------------------------------------------------------------------- 1 | where('write_token','=','test')->first(); 17 | $loc = json_decode('{"properties":{"end":"2015-12-28T23:20:14Z","start":"2015-12-28T22:45:22Z","mode":"bicycle","distance":6439.4875686883,"end-coordinates":[-122.67617024493,45.549965919969],"start-coordinates":[-122.63860439893,45.522223161576],"duration":2092.7059409618,"type":"trip","timestamp":"2015-12-28T23:20:14Z"},"stopped_automatically":true,"type":"Feature","geometry":{"type":"Point","coordinates":[-122.67617024493,45.549965919969]}}', true); 18 | $this->dispatch((new TripComplete($db->id, $loc))->onQueue('compass')); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /compass/resources/views/layouts/share.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Compass 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | @yield('content') 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/flag.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Flag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Flag 15 | *******************************/ 16 | 17 | i.flag:not(.icon) { 18 | display: inline-block; 19 | width: 16px; 20 | height: 11px; 21 | line-height: 11px; 22 | vertical-align: baseline; 23 | margin: 0em 0.5em 0em 0em; 24 | text-decoration: inherit; 25 | speak: none; 26 | font-smoothing: antialiased; 27 | -webkit-backface-visibility: hidden; 28 | backface-visibility: hidden; 29 | } 30 | 31 | /* Sprite */ 32 | i.flag:not(.icon):before { 33 | display: inline-block; 34 | content: ''; 35 | background: url("../themes/default/assets/images/flags.png") no-repeat 0px 0px; 36 | width: 16px; 37 | height: 11px; 38 | } 39 | 40 | 41 | /******************************* 42 | Site Overrides 43 | *******************************/ 44 | 45 | -------------------------------------------------------------------------------- /compass/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "p3k/compass", 3 | "description": "Compass is a GPS tracking server that stores data in flat files.", 4 | "keywords": ["p3k", "gps"], 5 | "license": "MIT", 6 | "type": "project", 7 | "require": { 8 | "php": ">=5.5.9", 9 | "laravel/lumen-framework": "5.1.*", 10 | "vlucas/phpdotenv": "~1.0", 11 | "p3k/quartz-db": "0.1.*", 12 | "indieauth/client": "0.2.*", 13 | "guzzlehttp/guzzle":"~6.0", 14 | "illuminate/redis": "^5.1", 15 | "p3k/multipart": "*", 16 | "p3k/utils": ">=1.1.1", 17 | "p3k/timezone": "^0.1.0" 18 | }, 19 | "require-dev": { 20 | "phpunit/phpunit": "~4.0", 21 | "fzaninotto/faker": "~1.0" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "App\\": "app/" 26 | }, 27 | "classmap": [ 28 | "database/" 29 | ] 30 | }, 31 | "autoload-dev": { 32 | "classmap": [ 33 | "tests/" 34 | ] 35 | }, 36 | "config": { 37 | "preferred-install": "dist" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/tab.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Tab 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading.segment:before,.ui.tab.loading:before{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.tab.loading.segment:after,.ui.tab.loading:after{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent} -------------------------------------------------------------------------------- /compass/public/assets/speed.js: -------------------------------------------------------------------------------- 1 | function speedSeries(response) { 2 | 3 | var data = response.linestring; 4 | 5 | var system = { 6 | label: 'mph', 7 | multiplier: 2.23694 8 | }; 9 | 10 | if(document.getElementById('is-metric').value == true) { 11 | system.label = 'km/h'; 12 | system.multiplier = 3.6; 13 | } 14 | 15 | var series = { 16 | name: "Speed", 17 | yAxis: 1, 18 | tooltip: { 19 | animation: true, 20 | pointFormatter: function(){ 21 | moveMarkerToPosition(this); 22 | return ''+this.y+system.label+''; 23 | } 24 | }, 25 | lineWidth: 1, 26 | color: '#a8a8a8', 27 | marker: { 28 | enabled: true, 29 | radius: 1, 30 | symbol: 'circle', 31 | fillColor: '#a8a8a8' 32 | }, 33 | turboThreshold: 0, 34 | data: [] 35 | }; 36 | 37 | series.data = data.properties.map(function(d,i){ 38 | return { 39 | x: new Date(d.unixtime*1000), 40 | y: ('speed' in d && d.speed >= 0 ? Math.round(d.speed * system.multiplier) : null), 41 | location: data.coordinates[i] 42 | } 43 | }); 44 | 45 | return [series]; 46 | } 47 | -------------------------------------------------------------------------------- /compass/app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | make( 32 | 'Illuminate\Contracts\Console\Kernel' 33 | ); 34 | 35 | exit($kernel->handle(new ArgvInput, new ConsoleOutput)); 36 | -------------------------------------------------------------------------------- /compass/public/assets/map.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | } 4 | 5 | #map { 6 | height: calc(100% - 160px); 7 | } 8 | 9 | #calendar { 10 | z-index: 100; 11 | width: 200px; 12 | height: calc(100% - 240px); 13 | position: absolute; 14 | top: 60px; 15 | right: 10px; 16 | border: 3px #888 solid; 17 | background: white; 18 | font-size: 12px; 19 | line-height: 18px; 20 | } 21 | #calendar #controls { 22 | position: absolute; 23 | top: 0; 24 | padding: 3px; 25 | background: white; 26 | } 27 | #calendar .scroll { 28 | overflow: scroll; 29 | height: 100%; 30 | } 31 | 32 | table.calendar { 33 | width: 100%; 34 | margin-bottom: 10px; 35 | } 36 | .calendar th, .calendar td { 37 | text-align: center; 38 | width: 14%; 39 | } 40 | .calendar td a { 41 | display: block; 42 | text-decoration: none; 43 | color: black; 44 | } 45 | .calendar td a:hover, .calendar td a.selected:hover { 46 | background: #999; 47 | color: white; 48 | } 49 | .calendar td a.selected { 50 | background: #6699ff; 51 | } 52 | 53 | #battery-chart, #events-chart { 54 | width: 100%; 55 | } 56 | 57 | 58 | /* Move the map zoom controls away from the Compass logo */ 59 | .leaflet-top .leaflet-control-zoom { 60 | margin-top: 60px; 61 | margin-left: 26px; 62 | } 63 | -------------------------------------------------------------------------------- /compass/resources/views/layouts/map.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Compass 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | @yield('content') 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /compass/resources/views/dashboard.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master') 2 | 3 | @section('content') 4 | 5 | @include('partials/logged-in') 6 | 7 |
8 | 9 |

Databases

10 | 29 | 30 |
31 | 40 | @endsection 41 | -------------------------------------------------------------------------------- /compass/app/Http/routes.php: -------------------------------------------------------------------------------- 1 | get('/', 'Controller@index'); 4 | 5 | $app->get('/s/{token:[A-Za-z0-9]+}', 'Share@view'); 6 | $app->get('/share/current.json', 'Share@current_location'); 7 | $app->get('/share/history.json', 'Share@history'); 8 | 9 | $app->post('/auth/start', 'IndieAuth@start'); 10 | $app->get('/auth/callback', 'IndieAuth@callback'); 11 | $app->get('/auth/github', 'IndieAuth@github'); 12 | $app->get('/auth/logout', 'IndieAuth@logout'); 13 | 14 | $app->get('/map/{name:[A-Za-z0-9]+}', 'Controller@map'); 15 | $app->get('/settings/{name:[A-Za-z0-9]+}', 'Controller@settings'); 16 | $app->post('/settings/{name:[A-Za-z0-9]+}', 'Controller@updateSettings'); 17 | $app->post('/settings/{name:[A-Za-z0-9]+}/auth/start', 'Controller@micropubStart'); 18 | $app->get('/settings/{name:[A-Za-z0-9]+}/auth/callback', 'Controller@micropubCallback'); 19 | $app->get('/settings/{name:[A-Za-z0-9]+}/auth/remove', 'Controller@removeMicropub'); 20 | $app->post('/database/create', 'Controller@createDatabase'); 21 | 22 | $app->get('/api/query', 'Api@query'); 23 | $app->get('/api/last', 'Api@last'); 24 | $app->get('/api/trip', 'Api@trip'); 25 | $app->get('/api/find-from-localtime', 'LocalTime@find'); 26 | $app->get('/api/input', 'Api@account'); 27 | $app->post('/api/input', 'Api@input'); 28 | $app->post('/api/trip-complete', 'Api@trip_complete'); 29 | $app->post('/api/share', 'Api@share'); 30 | -------------------------------------------------------------------------------- /compass/app/Console/Commands/CleanFile.php: -------------------------------------------------------------------------------- 1 | argument('in'); 15 | $out = $this->argument('out'); 16 | 17 | $fp = @fopen($in, 'r'); 18 | $outf = @fopen($out, 'w'); 19 | if($fp && $outf) { 20 | 21 | $last = false; 22 | while(($line = fgets($fp)) !== false) { 23 | $cur = new DateTime(substr($line, 0, 26), new DateTimeZone('UTC')); 24 | 25 | if(!$last) { 26 | $last = new DateTime(substr($line, 0, 26), new DateTimeZone('UTC')); 27 | fwrite($outf, $line); 28 | } else { 29 | if((double)$cur->format('U.u') > (double)$last->format('U.u')) { 30 | fwrite($outf, $line); 31 | $last = new DateTime(substr($line, 0, 26), new DateTimeZone('UTC')); 32 | } else { 33 | Log::info("Discarding line"); 34 | } 35 | } 36 | } 37 | fclose($fp); 38 | fclose($outf); 39 | 40 | } else { 41 | Log::error("Could not find input file"); 42 | } 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /compass/app/Jobs/TripStarted.php: -------------------------------------------------------------------------------- 1 | _dbid = $dbid; 19 | } 20 | 21 | public function handle() { 22 | $db = DB::table('databases')->where('id','=',$this->_dbid)->first(); 23 | 24 | $urls = preg_split('/\s+/', $db->ping_urls); 25 | 26 | $trip = [ 27 | 'trip' => json_decode($db->current_trip, true) 28 | ]; 29 | $trip = json_encode($trip, JSON_UNESCAPED_SLASHES); 30 | 31 | foreach($urls as $url) { 32 | if(trim($url)) { 33 | $ch = curl_init($url); 34 | curl_setopt($ch, CURLOPT_POST, true); 35 | curl_setopt($ch, CURLOPT_HTTPHEADER, [ 36 | 'Content-Type: application/json', 37 | 'Authorization: Bearer '.$db->read_token, 38 | 'Compass-Url: '.env('BASE_URL').'api/trip?token='.$db->read_token 39 | ]); 40 | curl_setopt($ch, CURLOPT_POSTFIELDS, $trip); 41 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 42 | curl_exec($ch); 43 | Log::info("Notifying ".$url." of a new trip"); 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/modules/no-data-to-display.js: -------------------------------------------------------------------------------- 1 | /* 2 | Highcharts JS v4.1.8 (2015-08-20) 3 | Plugin for displaying a message when there is no data visible in chart. 4 | 5 | (c) 2010-2014 Highsoft AS 6 | Author: Oystein Moseng 7 | 8 | License: www.highcharts.com/license 9 | */ 10 | (function(c){function i(){return!!this.points.length}function e(){this.hasData()?this.hideNoData():this.showNoData()}var f=c.seriesTypes,d=c.Chart.prototype,g=c.getOptions(),h=c.extend,j=c.each;h(g.lang,{noData:"No data to display"});g.noData={position:{x:0,y:0,align:"center",verticalAlign:"middle"},attr:{},style:{fontWeight:"bold",fontSize:"12px",color:"#60606a"}};j(["pie","gauge","waterfall","bubble"],function(a){if(f[a])f[a].prototype.hasData=i});c.Series.prototype.hasData=function(){return this.visible&& 11 | this.dataMax!==void 0&&this.dataMin!==void 0};d.showNoData=function(a){var b=this.options,a=a||b.lang.noData,b=b.noData;if(!this.noDataLabel)this.noDataLabel=this.renderer.label(a,0,0,null,null,null,b.useHTML,null,"no-data").attr(b.attr).css(b.style).add(),this.noDataLabel.align(h(this.noDataLabel.getBBox(),b.position),!1,"plotBox")};d.hideNoData=function(){if(this.noDataLabel)this.noDataLabel=this.noDataLabel.destroy()};d.hasData=function(){for(var a=this.series,b=a.length;b--;)if(a[b].hasData()&& 12 | !a[b].options.isInternal)return!0;return!1};d.callbacks.push(function(a){c.addEvent(a,"load",e);c.addEvent(a,"redraw",e)})})(Highcharts); 13 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/nag.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Nag 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:999;min-height:0;width:100%;margin:0;padding:.75em 1em;background:#555;box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1rem;text-align:center;color:rgba(0,0,0,.87);border-radius:0 0 .2307em .2307em;-webkit-transition:.2s background ease;transition:.2s background ease}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#FFF}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position:absolute;top:50%;right:1em;font-size:1em;margin:-.5em 0 0;color:#FFF;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.ui.nag:hover{background:#555;opacity:1}.ui.nag .close:hover{opacity:1}.ui.overlay.nag{position:absolute;display:block}.ui.fixed.nag{position:fixed}.ui.bottom.nag,.ui.bottom.nags{border-radius:.2307em .2307em 0 0;top:auto;bottom:0}.ui.inverted.nag,.ui.inverted.nags .nag{background-color:#F3F4F5;color:rgba(0,0,0,.85)}.ui.inverted.nag .close,.ui.inverted.nag .title,.ui.inverted.nags .nag .close,.ui.inverted.nags .nag .title{color:rgba(0,0,0,.4)}.ui.nags .nag{border-radius:0!important}.ui.nags .nag:last-child{border-radius:0 0 .2307em .2307em}.ui.bottom.nags .nag:last-child{border-radius:.2307em .2307em 0 0} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/sticky.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Sticky 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Sticky 15 | *******************************/ 16 | 17 | .ui.sticky { 18 | position: static; 19 | -webkit-transition: none; 20 | transition: none; 21 | z-index: 800; 22 | } 23 | 24 | 25 | /******************************* 26 | States 27 | *******************************/ 28 | 29 | 30 | /* Bound */ 31 | .ui.sticky.bound { 32 | position: absolute; 33 | left: auto; 34 | right: auto; 35 | } 36 | 37 | /* Fixed */ 38 | .ui.sticky.fixed { 39 | position: fixed; 40 | left: auto; 41 | right: auto; 42 | } 43 | 44 | /* Bound/Fixed Position */ 45 | .ui.sticky.bound.top, 46 | .ui.sticky.fixed.top { 47 | top: 0px; 48 | bottom: auto; 49 | } 50 | .ui.sticky.bound.bottom, 51 | .ui.sticky.fixed.bottom { 52 | top: auto; 53 | bottom: 0px; 54 | } 55 | 56 | 57 | /******************************* 58 | Types 59 | *******************************/ 60 | 61 | .ui.native.sticky { 62 | position: -webkit-sticky; 63 | position: -moz-sticky; 64 | position: -ms-sticky; 65 | position: -o-sticky; 66 | position: sticky; 67 | } 68 | 69 | 70 | /******************************* 71 | Site Overrides 72 | *******************************/ 73 | 74 | -------------------------------------------------------------------------------- /compass/public/assets/extensions.js: -------------------------------------------------------------------------------- 1 | Array.prototype.clean = function(deleteValue) { 2 | for (var i = 0; i < this.length; i++) { 3 | if (this[i] == deleteValue) { 4 | this.splice(i, 1); 5 | i--; 6 | } 7 | } 8 | return this; 9 | }; 10 | 11 | /* 12 | Array.findRanges 13 | 14 | Turns this: 15 | 16 | ["a","a","a","b","b","c","c","c","c","c","a","a","c"] 17 | 18 | into this: 19 | 20 | { 21 | "a":[ 22 | { 23 | "from":0, 24 | "to":2 25 | }, 26 | { 27 | "from":10, 28 | "to":11 29 | } 30 | ], 31 | "b":[ 32 | { 33 | "from":3, 34 | "to":4 35 | } 36 | ], 37 | "c":[ 38 | { 39 | "from":5, 40 | "to":9 41 | }, 42 | { 43 | "from":12, 44 | "to":12 45 | } 46 | ] 47 | } 48 | 49 | */ 50 | 51 | Array.prototype.findRanges = function() { 52 | var buckets = {}; 53 | for(var i = 0; i < this.length; i++) { 54 | if(!(this[i] in buckets)) { 55 | buckets[this[i]] = [{ 56 | from: i, 57 | to: i 58 | }] 59 | } else { 60 | var last = buckets[this[i]][ buckets[this[i]].length-1 ]; 61 | if(i == last.to + 1) { 62 | last.to = i; 63 | } else { 64 | buckets[this[i]].push({ 65 | from: i, 66 | to: i 67 | }) 68 | } 69 | } 70 | } 71 | return buckets; 72 | }; 73 | 74 | Object.values = function(obj){ return Object.keys(obj).map(function(key){return obj[key]}) }; 75 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/themes/grid-light.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Grid-light theme for Highcharts JS 3 | * @author Torstein Honsi 4 | */ 5 | 6 | // Load the fonts 7 | Highcharts.createElement('link', { 8 | href: '//fonts.googleapis.com/css?family=Dosis:400,600', 9 | rel: 'stylesheet', 10 | type: 'text/css' 11 | }, null, document.getElementsByTagName('head')[0]); 12 | 13 | Highcharts.theme = { 14 | colors: ["#7cb5ec", "#f7a35c", "#90ee7e", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", 15 | "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], 16 | chart: { 17 | backgroundColor: null, 18 | style: { 19 | fontFamily: "Dosis, sans-serif" 20 | } 21 | }, 22 | title: { 23 | style: { 24 | fontSize: '16px', 25 | fontWeight: 'bold', 26 | textTransform: 'uppercase' 27 | } 28 | }, 29 | tooltip: { 30 | borderWidth: 0, 31 | backgroundColor: 'rgba(219,219,216,0.8)', 32 | shadow: false 33 | }, 34 | legend: { 35 | itemStyle: { 36 | fontWeight: 'bold', 37 | fontSize: '13px' 38 | } 39 | }, 40 | xAxis: { 41 | gridLineWidth: 1, 42 | labels: { 43 | style: { 44 | fontSize: '12px' 45 | } 46 | } 47 | }, 48 | yAxis: { 49 | minorTickInterval: 'auto', 50 | title: { 51 | style: { 52 | textTransform: 'uppercase' 53 | } 54 | }, 55 | labels: { 56 | style: { 57 | fontSize: '12px' 58 | } 59 | } 60 | }, 61 | plotOptions: { 62 | candlestick: { 63 | lineColor: '#404048' 64 | } 65 | }, 66 | 67 | 68 | // General 69 | background2: '#F0F0EA' 70 | 71 | }; 72 | 73 | // Apply the theme 74 | Highcharts.setOptions(Highcharts.theme); 75 | -------------------------------------------------------------------------------- /compass/readme.md: -------------------------------------------------------------------------------- 1 | ## Lumen PHP Framework 2 | 3 | [![Build Status](https://travis-ci.org/laravel/lumen-framework.svg)](https://travis-ci.org/laravel/lumen-framework) 4 | [![Total Downloads](https://poser.pugx.org/laravel/lumen-framework/d/total.svg)](https://packagist.org/packages/laravel/lumen-framework) 5 | [![Latest Stable Version](https://poser.pugx.org/laravel/lumen-framework/v/stable.svg)](https://packagist.org/packages/laravel/lumen-framework) 6 | [![Latest Unstable Version](https://poser.pugx.org/laravel/lumen-framework/v/unstable.svg)](https://packagist.org/packages/laravel/lumen-framework) 7 | [![License](https://poser.pugx.org/laravel/lumen-framework/license.svg)](https://packagist.org/packages/laravel/lumen-framework) 8 | 9 | Laravel Lumen is a stunningly fast PHP micro-framework for building web applications with expressive, elegant syntax. We believe development must be an enjoyable, creative experience to be truly fulfilling. Lumen attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as routing, database abstraction, queueing, and caching. 10 | 11 | ## Official Documentation 12 | 13 | Documentation for the framework can be found on the [Lumen website](http://lumen.laravel.com/docs). 14 | 15 | ## Security Vulnerabilities 16 | 17 | If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell at taylor@laravel.com. All security vulnerabilities will be promptly addressed. 18 | 19 | ### License 20 | 21 | The Lumen framework is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT) 22 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/site.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Site 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */body,html{height:100%}html{font-size:13px}body{margin:0;padding:0;overflow-x:visible;min-width:320px;background:#FFF;font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:13px;line-height:1.4285em;color:rgba(0,0,0,.87);font-smoothing:antialiased}h1,h2,h3,h4,h5{font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;line-height:1.2857em;margin:calc(2rem - .14285em) 0 1rem;font-weight:700;padding:0}h1{min-height:1rem;font-size:2.25em}h2{font-size:1.714rem}h3{font-size:1.28rem}h4{font-size:1.071rem}h5{font-size:1rem}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,p:last-child{margin-bottom:0}p{margin:0 0 1em;line-height:1.4285em}a{color:#4078C0;text-decoration:none}a:hover{color:#4078C0;text-decoration:underline}::-webkit-selection{background-color:#CCE2FF;color:rgba(0,0,0,.87)}::-moz-selection{background-color:#CCE2FF;color:rgba(0,0,0,.87)}::selection{background-color:#CCE2FF;color:rgba(0,0,0,.87)}input::-webkit-selection,textarea::-webkit-selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.87)}input::-moz-selection,textarea::-moz-selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.87)}input::selection,textarea::selection{background-color:rgba(100,100,100,.4);color:rgba(0,0,0,.87)} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/container.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Container 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.container{display:block;max-width:100%!important}@media only screen and (max-width:687px){.ui.container{width:auto!important;margin-left:1em!important;margin-right:1em!important}.ui.grid.container,.ui.relaxed.grid.container,.ui.very.relaxed.grid.container{width:auto!important}}@media only screen and (min-width:688px) and (max-width:687px){.ui.container{width:632px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(632px + 2rem)!important}.ui.relaxed.grid.container{width:calc(632px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(632px + 5rem)!important}}@media only screen and (min-width:688px){.ui.container{width:619px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(619px + 2rem)!important}.ui.relaxed.grid.container{width:calc(619px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(619px + 5rem)!important}}.ui.text.container{font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;max-width:700px!important;line-height:1.5;font-size:1.15384615rem}.ui.fluid.container{width:100%}.ui[class*="left aligned"].container{text-align:left}.ui[class*="center aligned"].container{text-align:center}.ui[class*="right aligned"].container{text-align:right}.ui.justified.container{text-align:justify;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto} -------------------------------------------------------------------------------- /compass/database/migrations/2000_00_00_000000_setup.php: -------------------------------------------------------------------------------- 1 | increments('id'); 17 | $table->string('name', 100); 18 | $table->string('read_token', 255); 19 | $table->string('write_token', 255); 20 | $table->unsignedInteger('created_by'); 21 | $table->datetime('created_at'); 22 | $table->unique(['read_token','write_token']); 23 | }); 24 | 25 | Schema::create('users', function (Blueprint $table) { 26 | $table->increments('id'); 27 | $table->string('url', 255); 28 | $table->datetime('created_at')->nullable(); 29 | $table->datetime('last_login')->nullable(); 30 | }); 31 | 32 | Schema::create('database_users', function (Blueprint $table) { 33 | $table->unsignedInteger('database_id'); 34 | $table->unsignedInteger('user_id'); 35 | $table->datetime('created_at')->nullable(); 36 | $table->primary(['database_id','user_id']); 37 | }); 38 | } 39 | 40 | /** 41 | * Reverse the migrations. 42 | * 43 | * @return void 44 | */ 45 | public function down() 46 | { 47 | Schema::drop('users'); 48 | Schema::drop('databases'); 49 | Schema::drop('database_users'); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /compass/public/assets/styles.css: -------------------------------------------------------------------------------- 1 | 2 | .splash { 3 | width: 500px; 4 | margin: 60px auto 0 auto; 5 | border-radius: 6px; 6 | } 7 | 8 | .splash .logo { 9 | width: 200px; 10 | margin: 0 auto; 11 | } 12 | 13 | .splash .login { 14 | width: 300px; 15 | margin: 0 auto; 16 | } 17 | .splash .login input { 18 | width: 200px; 19 | } 20 | 21 | 22 | 23 | .dashboard { 24 | max-width: 500px; 25 | margin: 60px auto 0 auto; 26 | padding: 0 10px; 27 | } 28 | .dashboard .show-api-endpoint { 29 | font-weight: normal; 30 | } 31 | 32 | .databases { 33 | list-style-type: none; 34 | margin: 0; 35 | padding: 0; 36 | } 37 | .databases li { 38 | margin: 0; 39 | padding: 0; 40 | margin-bottom: 20px; 41 | } 42 | .databases .db { 43 | font-size: 22px; 44 | } 45 | .databases a { 46 | text-decoration: none; 47 | } 48 | 49 | .databases .error { 50 | padding: 6px 10px; 51 | color: #a94442; 52 | background-color: #f2dede; 53 | border: 1px #ebccd1 solid; 54 | border-radius: 4px; 55 | margin-bottom: 4px; 56 | } 57 | 58 | .users { 59 | list-style-type: none; 60 | margin: 0; 61 | padding: 0; 62 | } 63 | .users li { 64 | margin: 0; 65 | padding: 0; 66 | margin-bottom: 10px; 67 | position: relative; 68 | } 69 | .users .remove-user { 70 | left: -18px; 71 | text-decoration: none; 72 | font-size: 22px; 73 | position: absolute; 74 | padding-right: 12px; 75 | } 76 | 77 | .hidden { 78 | display: none; 79 | } 80 | 81 | #daterange { 82 | z-index: 100; 83 | width: 40vw; 84 | position: absolute; 85 | top: 60px; 86 | left: 60px; 87 | border: 3px #aaa solid; 88 | border-radius: 4px; 89 | background: white; 90 | } 91 | #daterange .in { 92 | margin: 4px; 93 | } 94 | -------------------------------------------------------------------------------- /compass/app/Jobs/NotifyOfNewLocations.php: -------------------------------------------------------------------------------- 1 | _dbid = $dbid; 16 | } 17 | 18 | public function handle() { 19 | $db = DB::table('databases')->where('id','=',$this->_dbid)->first(); 20 | $urls = preg_split('/\s+/', $db->ping_urls); 21 | 22 | $location = [ 23 | 'location' => json_decode($db->last_location, true) 24 | ]; 25 | 26 | if($db->current_trip) 27 | $location['trip'] = json_decode($db->current_trip, true); 28 | 29 | $location = json_encode($location, JSON_UNESCAPED_SLASHES); 30 | 31 | foreach($urls as $url) { 32 | if(trim($url)) { 33 | $ch = curl_init($url); 34 | curl_setopt($ch, CURLOPT_POST, true); 35 | curl_setopt($ch, CURLOPT_HTTPHEADER, [ 36 | 'Content-Type: application/json', 37 | 'Authorization: Bearer '.$db->read_token, 38 | 'Compass-Url: '.env('BASE_URL').'api/last?token='.$db->read_token.'&geocode=1' 39 | ]); 40 | curl_setopt($ch, CURLOPT_POSTFIELDS, $location); 41 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 42 | $response = curl_exec($ch); 43 | $timestamp = ''; 44 | if($db->last_location) { 45 | $timestamp = json_decode($db->last_location)->properties->timestamp; 46 | } 47 | Log::info("Notifying ".$url." with current location: ".$timestamp); 48 | Log::info($response); 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /compass/database/schema.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `database_users` ( 2 | `database_id` int(11) unsigned NOT NULL, 3 | `user_id` int(11) NOT NULL DEFAULT '0', 4 | `created_at` datetime DEFAULT NULL, 5 | PRIMARY KEY (`database_id`,`user_id`) 6 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 | 8 | CREATE TABLE `databases` ( 9 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 10 | `name` varchar(100) DEFAULT NULL, 11 | `read_token` varchar(255) DEFAULT NULL, 12 | `write_token` varchar(255) DEFAULT NULL, 13 | `created_by` int(11) DEFAULT NULL, 14 | `created_at` datetime DEFAULT NULL, 15 | `micropub_endpoint` varchar(255) NOT NULL, 16 | `micropub_token` varchar(1024) NOT NULL, 17 | `ping_urls` varchar(1024) NOT NULL, 18 | `timezone` varchar(100) NOT NULL DEFAULT 'UTC', 19 | `metric` boolean NOT NULL DEFAULT 1, 20 | PRIMARY KEY (`id`), 21 | KEY `read_token` (`read_token`), 22 | KEY `write_token` (`write_token`) 23 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 24 | 25 | CREATE TABLE `failed_jobs` ( 26 | `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 27 | `connection` text COLLATE utf8_unicode_ci NOT NULL, 28 | `queue` text COLLATE utf8_unicode_ci NOT NULL, 29 | `payload` longtext COLLATE utf8_unicode_ci NOT NULL, 30 | `failed_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 31 | PRIMARY KEY (`id`) 32 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 33 | 34 | CREATE TABLE `migrations` ( 35 | `migration` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 36 | `batch` int(11) NOT NULL 37 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 38 | 39 | CREATE TABLE `users` ( 40 | `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 41 | `url` varchar(255) NOT NULL DEFAULT '', 42 | `created_at` datetime DEFAULT NULL, 43 | `last_login` datetime DEFAULT NULL, 44 | PRIMARY KEY (`id`) 45 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 46 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/embed.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Video 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.embed{position:relative;max-width:100%;height:0;overflow:hidden;background:#DCDDDE;padding-bottom:56.25%}.ui.embed embed,.ui.embed iframe,.ui.embed object{position:absolute;border:none;width:100%;height:100%;top:0;left:0;margin:0;padding:0}.ui.embed>.embed{display:none}.ui.embed>.placeholder{position:absolute;cursor:pointer;top:0;left:0;display:block;width:100%;height:100%;background-color:radial-gradient(transparent 45%,rgba(0,0,0,.3))}.ui.embed>.icon{cursor:pointer;position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.ui.embed>.icon:after{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;content:'';background:-webkit-radial-gradient(transparent 45%,rgba(0,0,0,.3));background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:.5;-webkit-transition:opacity .5s ease;transition:opacity .5s ease}.ui.embed>.icon:before{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#FFF;font-size:6rem;text-shadow:0 2px 10px rgba(34,36,38,.2);-webkit-transition:opacity .5s ease,color .5s ease;transition:opacity .5s ease,color .5s ease;z-index:10}.ui.embed .icon:hover:after{background:-webkit-radial-gradient(transparent 45%,rgba(0,0,0,.3));background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:1}.ui.embed .icon:hover:before{color:#FFF}.ui.active.embed>.icon,.ui.active.embed>.placeholder{display:none}.ui.active.embed>.embed{display:block}.ui.square.embed{padding-bottom:100%}.ui[class*="4:3"].embed{padding-bottom:75%}.ui[class*="16:9"].embed{padding-bottom:56.25%}.ui[class*="21:9"].embed{padding-bottom:42.85714286%} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/shape.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Shape 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.shape{position:relative;vertical-align:top;display:inline-block;-webkit-perspective:2000px;perspective:2000px;-webkit-transition:-webkit-transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out}.ui.shape .sides{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.ui.shape .side{opacity:1;width:100%;margin:0!important;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none}.ui.shape .side *{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.ui.cube.shape .side{min-width:15em;height:15em;padding:2em;background-color:#E6E6E6;color:rgba(0,0,0,.87);box-shadow:0 0 2px rgba(0,0,0,.3)}.ui.cube.shape .side>.content{width:100%;height:100%;display:table;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.cube.shape .side>.content>div{display:table-cell;vertical-align:middle;font-size:2em}.ui.text.shape.animating .sides{position:static}.ui.text.shape .side{white-space:nowrap}.ui.text.shape .side>*{white-space:normal}.ui.loading.shape{position:absolute;top:-9999px;left:-9999px}.ui.shape .animating.side{position:absolute;top:0;left:0;display:block;z-index:100}.ui.shape .hidden.side{opacity:.6}.ui.shape.animating .sides{position:absolute;-webkit-transition:-webkit-transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out}.ui.shape.animating .side{-webkit-transition:opacity .6s ease-in-out;transition:opacity .6s ease-in-out}.ui.shape .active.side{display:block} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/transition.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Transition 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Transitions 15 | *******************************/ 16 | 17 | .transition { 18 | -webkit-animation-iteration-count: 1; 19 | animation-iteration-count: 1; 20 | -webkit-animation-duration: 300ms; 21 | animation-duration: 300ms; 22 | -webkit-animation-timing-function: ease; 23 | animation-timing-function: ease; 24 | -webkit-animation-fill-mode: both; 25 | animation-fill-mode: both; 26 | } 27 | 28 | 29 | /******************************* 30 | States 31 | *******************************/ 32 | 33 | 34 | /* Animating */ 35 | .animating.transition { 36 | -webkit-backface-visibility: hidden; 37 | backface-visibility: hidden; 38 | visibility: visible !important; 39 | } 40 | 41 | /* Loading */ 42 | .loading.transition { 43 | position: absolute; 44 | top: -99999px; 45 | left: -99999px; 46 | } 47 | 48 | /* Hidden */ 49 | .hidden.transition { 50 | display: none; 51 | visibility: hidden; 52 | } 53 | 54 | /* Visible */ 55 | .visible.transition { 56 | display: block !important; 57 | visibility: visible !important; 58 | 59 | /* backface-visibility: @backfaceVisibility; 60 | transform: @use3DAcceleration;*/ 61 | } 62 | /* Disabled */ 63 | .disabled.transition { 64 | -webkit-animation-play-state: paused; 65 | animation-play-state: paused; 66 | } 67 | 68 | 69 | /******************************* 70 | Variations 71 | *******************************/ 72 | 73 | .looping.transition { 74 | -webkit-animation-iteration-count: infinite; 75 | animation-iteration-count: infinite; 76 | } 77 | 78 | 79 | /******************************* 80 | Site Overrides 81 | *******************************/ 82 | 83 | -------------------------------------------------------------------------------- /compass/.env.example: -------------------------------------------------------------------------------- 1 | # Where you've installed Compass 2 | BASE_URL=https://compass.example.com/ 3 | 4 | # Atlas is used for geocoding trips. 5 | # You can use mine or install your own. 6 | # Source code: https://github.com/aaronpk/Atlas 7 | ATLAS_BASE=https://atlas.p3k.io/ 8 | 9 | # This is where the location data will be saved, MAKE SURE PATH ENDS WITH / 10 | # Compass will create a folder for each "database" you create after you log in. 11 | # Make sure the web server or PHP process can write here. 12 | STORAGE_DIR=/var/compass/data/ 13 | 14 | # Set APP_KEY to a 32 character string. This is used to encrypt session data. 15 | # You can generate a string using the command `php artisan key:generate` 16 | APP_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 17 | 18 | # Define your database connection 19 | DB_CONNECTION=mysql 20 | DB_HOST=localhost 21 | DB_PORT=3306 22 | DB_DATABASE=compass 23 | DB_USERNAME=compass 24 | DB_PASSWORD=secret 25 | 26 | # Cookie driver is probably fine. Alternate options: 27 | # https://lumen.laravel.com/docs/5.1/session 28 | SESSION_DRIVER=cookie 29 | SESSION_LIFETIME=500000 30 | 31 | # Processing trips is done on a job queue. If using the database queue, 32 | # you'll need to create the jobs table. See details in the readme. 33 | QUEUE_DRIVER=database 34 | # QUEUE_DRIVER=redis 35 | 36 | CACHE_DRIVER=redis 37 | 38 | # This is how Compass signs users in. You can leave it set to the default, and 39 | # you'll be redirected there to authenticate as your domain name. 40 | # You can also run your own instance, or even point it to your own website 41 | # if it supports the IndieAuth protocol https://indieweb.org/indieauth-for-login 42 | DEFAULT_AUTH_ENDPOINT=https://indieauth.com/auth 43 | 44 | # If this is true, then anyone can create accounts. If false, then only existing 45 | # users in the users table will be able to log in. You can add your own domain name 46 | # to the users table to allow yourself to log in the first time. 47 | ALLOW_NEW_USERS=false 48 | 49 | APP_ENV=local 50 | APP_DEBUG=false 51 | 52 | APP_LOCALE=en 53 | APP_FALLBACK_LOCALE=en 54 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/tab.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Tab 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | UI Tabs 15 | *******************************/ 16 | 17 | .ui.tab { 18 | display: none; 19 | } 20 | 21 | 22 | /******************************* 23 | States 24 | *******************************/ 25 | 26 | 27 | /*-------------------- 28 | Active 29 | ---------------------*/ 30 | 31 | .ui.tab.active, 32 | .ui.tab.open { 33 | display: block; 34 | } 35 | 36 | /*-------------------- 37 | Loading 38 | ---------------------*/ 39 | 40 | .ui.tab.loading { 41 | position: relative; 42 | overflow: hidden; 43 | display: block; 44 | min-height: 250px; 45 | } 46 | .ui.tab.loading * { 47 | position: relative !important; 48 | left: -10000px !important; 49 | } 50 | .ui.tab.loading:before, 51 | .ui.tab.loading.segment:before { 52 | position: absolute; 53 | content: ''; 54 | top: 100px; 55 | left: 50%; 56 | margin: -1.25em 0em 0em -1.25em; 57 | width: 2.5em; 58 | height: 2.5em; 59 | border-radius: 500rem; 60 | border: 0.2em solid rgba(0, 0, 0, 0.1); 61 | } 62 | .ui.tab.loading:after, 63 | .ui.tab.loading.segment:after { 64 | position: absolute; 65 | content: ''; 66 | top: 100px; 67 | left: 50%; 68 | margin: -1.25em 0em 0em -1.25em; 69 | width: 2.5em; 70 | height: 2.5em; 71 | -webkit-animation: button-spin 0.6s linear; 72 | animation: button-spin 0.6s linear; 73 | -webkit-animation-iteration-count: infinite; 74 | animation-iteration-count: infinite; 75 | border-radius: 500rem; 76 | border-color: #767676 transparent transparent; 77 | border-style: solid; 78 | border-width: 0.2em; 79 | box-shadow: 0px 0px 0px 1px transparent; 80 | } 81 | 82 | 83 | /******************************* 84 | User Overrides 85 | *******************************/ 86 | 87 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/ad.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Ad 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2013 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child,.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small rectangle"].ad{width:180px;height:150px}.ui[class*="vertical rectangle"].ad{width:240px;height:400px}.ui.button.ad{width:120px;height:90px}.ui[class*="square button"].ad{width:125px;height:125px}.ui[class*="small button"].ad{width:120px;height:60px}.ui.skyscraper.ad{width:120px;height:600px}.ui[class*="wide skyscraper"].ad{width:160px}.ui.banner.ad{width:468px;height:60px}.ui[class*="vertical banner"].ad{width:120px;height:240px}.ui[class*="top banner"].ad{width:930px;height:180px}.ui[class*="half banner"].ad{width:234px;height:60px}.ui[class*="large leaderboard"].ad{width:970px;height:90px}.ui.billboard.ad{width:970px;height:250px}.ui.panorama.ad{width:980px;height:120px}.ui.netboard.ad{width:580px;height:400px}.ui[class*="large mobile banner"].ad{width:320px;height:100px}.ui[class*="mobile leaderboard"].ad{width:320px;height:50px}.ui.mobile.ad{display:none}@media only screen and (max-width:687px){.ui.mobile.ad{display:block}}.ui.centered.ad{margin-left:auto;margin-right:auto}.ui.test.ad{position:relative;background:#545454}.ui.test.ad:after{position:absolute;top:50%;left:50%;width:100%;text-align:center;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);content:'Ad';color:#FFF;font-size:1em;font-weight:700}.ui.mobile.test.ad:after{font-size:.84615385em}.ui.test.ad[data-text]:after{content:attr(data-text)} -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/themes/skies.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Skies theme for Highcharts JS 3 | * @author Torstein Honsi 4 | */ 5 | 6 | Highcharts.theme = { 7 | colors: ["#514F78", "#42A07B", "#9B5E4A", "#72727F", "#1F949A", "#82914E", "#86777F", "#42A07B"], 8 | chart: { 9 | className: 'skies', 10 | borderWidth: 0, 11 | plotShadow: true, 12 | plotBackgroundImage: 'http://www.highcharts.com/demo/gfx/skies.jpg', 13 | plotBackgroundColor: { 14 | linearGradient: [0, 0, 250, 500], 15 | stops: [ 16 | [0, 'rgba(255, 255, 255, 1)'], 17 | [1, 'rgba(255, 255, 255, 0)'] 18 | ] 19 | }, 20 | plotBorderWidth: 1 21 | }, 22 | title: { 23 | style: { 24 | color: '#3E576F', 25 | font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 26 | } 27 | }, 28 | subtitle: { 29 | style: { 30 | color: '#6D869F', 31 | font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 32 | } 33 | }, 34 | xAxis: { 35 | gridLineWidth: 0, 36 | lineColor: '#C0D0E0', 37 | tickColor: '#C0D0E0', 38 | labels: { 39 | style: { 40 | color: '#666', 41 | fontWeight: 'bold' 42 | } 43 | }, 44 | title: { 45 | style: { 46 | color: '#666', 47 | font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 48 | } 49 | } 50 | }, 51 | yAxis: { 52 | alternateGridColor: 'rgba(255, 255, 255, .5)', 53 | lineColor: '#C0D0E0', 54 | tickColor: '#C0D0E0', 55 | tickWidth: 1, 56 | labels: { 57 | style: { 58 | color: '#666', 59 | fontWeight: 'bold' 60 | } 61 | }, 62 | title: { 63 | style: { 64 | color: '#666', 65 | font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 66 | } 67 | } 68 | }, 69 | legend: { 70 | itemStyle: { 71 | font: '9pt Trebuchet MS, Verdana, sans-serif', 72 | color: '#3E576F' 73 | }, 74 | itemHoverStyle: { 75 | color: 'black' 76 | }, 77 | itemHiddenStyle: { 78 | color: 'silver' 79 | } 80 | }, 81 | labels: { 82 | style: { 83 | color: '#3E576F' 84 | } 85 | } 86 | }; 87 | 88 | // Apply the theme 89 | var highchartsOptions = Highcharts.setOptions(Highcharts.theme); 90 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/themes/sand-signika.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sand-Signika theme for Highcharts JS 3 | * @author Torstein Honsi 4 | */ 5 | 6 | // Load the fonts 7 | Highcharts.createElement('link', { 8 | href: '//fonts.googleapis.com/css?family=Signika:400,700', 9 | rel: 'stylesheet', 10 | type: 'text/css' 11 | }, null, document.getElementsByTagName('head')[0]); 12 | 13 | // Add the background image to the container 14 | Highcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) { 15 | proceed.call(this); 16 | this.container.style.background = 'url(http://www.highcharts.com/samples/graphics/sand.png)'; 17 | }); 18 | 19 | 20 | Highcharts.theme = { 21 | colors: ["#f45b5b", "#8085e9", "#8d4654", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", 22 | "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], 23 | chart: { 24 | backgroundColor: null, 25 | style: { 26 | fontFamily: "Signika, serif" 27 | } 28 | }, 29 | title: { 30 | style: { 31 | color: 'black', 32 | fontSize: '16px', 33 | fontWeight: 'bold' 34 | } 35 | }, 36 | subtitle: { 37 | style: { 38 | color: 'black' 39 | } 40 | }, 41 | tooltip: { 42 | borderWidth: 0 43 | }, 44 | legend: { 45 | itemStyle: { 46 | fontWeight: 'bold', 47 | fontSize: '13px' 48 | } 49 | }, 50 | xAxis: { 51 | labels: { 52 | style: { 53 | color: '#6e6e70' 54 | } 55 | } 56 | }, 57 | yAxis: { 58 | labels: { 59 | style: { 60 | color: '#6e6e70' 61 | } 62 | } 63 | }, 64 | plotOptions: { 65 | series: { 66 | shadow: true 67 | }, 68 | candlestick: { 69 | lineColor: '#404048' 70 | }, 71 | map: { 72 | shadow: false 73 | } 74 | }, 75 | 76 | // Highstock specific 77 | navigator: { 78 | xAxis: { 79 | gridLineColor: '#D0D0D8' 80 | } 81 | }, 82 | rangeSelector: { 83 | buttonTheme: { 84 | fill: 'white', 85 | stroke: '#C0C0C8', 86 | 'stroke-width': 1, 87 | states: { 88 | select: { 89 | fill: '#D0D0D8' 90 | } 91 | } 92 | } 93 | }, 94 | scrollbar: { 95 | trackBorderColor: '#C0C0C8' 96 | }, 97 | 98 | // General 99 | background2: '#E0E0E8' 100 | 101 | }; 102 | 103 | // Apply the theme 104 | Highcharts.setOptions(Highcharts.theme); 105 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/rating.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Rating 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.rating:last-child{margin-right:0}.ui.rating .icon{padding:0;margin:0;text-align:center;font-weight:400;font-style:normal;-webkit-box-flex:1;-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;cursor:pointer;width:1.25em;height:auto;-webkit-transition:opacity .1s ease,background .1s ease,text-shadow .1s ease,color .1s ease;transition:opacity .1s ease,background .1s ease,text-shadow .1s ease,color .1s ease;background:0 0;color:rgba(0,0,0,.15)}.ui.rating .active.icon{background:0 0;color:rgba(0,0,0,.85)}.ui.rating .icon.selected,.ui.rating .icon.selected.active{background:0 0;color:rgba(0,0,0,.87)}.ui.star.rating .icon{width:1.25em;height:auto;background:0 0;color:rgba(0,0,0,.15);text-shadow:none}.ui.star.rating .active.icon{background:0 0!important;color:#FFE623!important;text-shadow:0 -1px 0 #DDC507,-1px 0 0 #DDC507,0 1px 0 #DDC507,1px 0 0 #DDC507!important}.ui.star.rating .icon.selected,.ui.star.rating .icon.selected.active{background:0 0!important;color:#FC0!important;text-shadow:0 -1px 0 #E6A200,-1px 0 0 #E6A200,0 1px 0 #E6A200,1px 0 0 #E6A200!important}.ui.heart.rating .icon{width:1.4em;height:auto;background:0 0;color:rgba(0,0,0,.15);text-shadow:none!important}.ui.heart.rating .active.icon{background:0 0!important;color:#FF6D75!important;text-shadow:0 -1px 0 #CD0707,-1px 0 0 #CD0707,0 1px 0 #CD0707,1px 0 0 #CD0707!important}.ui.heart.rating .icon.selected,.ui.heart.rating .icon.selected.active{background:0 0!important;color:#FF3000!important;text-shadow:0 -1px 0 #AA0101,-1px 0 0 #AA0101,0 1px 0 #AA0101,1px 0 0 #AA0101!important}.ui.disabled.rating .icon{cursor:default}.ui.rating .icon.selected,.ui.rating.selected .active.icon,.ui.rating.selected .icon.selected{opacity:1}.ui.mini.rating{font-size:.69230769rem}.ui.tiny.rating{font-size:.84615385rem}.ui.small.rating{font-size:.92307692rem}.ui.rating{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;white-space:nowrap;vertical-align:baseline;font-size:1rem}.ui.large.rating{font-size:1.15384615rem}.ui.huge.rating{font-size:1.46153846rem}.ui.massive.rating{font-size:2rem} -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/themes/grid.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Grid theme for Highcharts JS 3 | * @author Torstein Honsi 4 | */ 5 | 6 | Highcharts.theme = { 7 | colors: ['#058DC7', '#50B432', '#ED561B', '#DDDF00', '#24CBE5', '#64E572', '#FF9655', '#FFF263', '#6AF9C4'], 8 | chart: { 9 | backgroundColor: { 10 | linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, 11 | stops: [ 12 | [0, 'rgb(255, 255, 255)'], 13 | [1, 'rgb(240, 240, 255)'] 14 | ] 15 | }, 16 | borderWidth: 2, 17 | plotBackgroundColor: 'rgba(255, 255, 255, .9)', 18 | plotShadow: true, 19 | plotBorderWidth: 1 20 | }, 21 | title: { 22 | style: { 23 | color: '#000', 24 | font: 'bold 16px "Trebuchet MS", Verdana, sans-serif' 25 | } 26 | }, 27 | subtitle: { 28 | style: { 29 | color: '#666666', 30 | font: 'bold 12px "Trebuchet MS", Verdana, sans-serif' 31 | } 32 | }, 33 | xAxis: { 34 | gridLineWidth: 1, 35 | lineColor: '#000', 36 | tickColor: '#000', 37 | labels: { 38 | style: { 39 | color: '#000', 40 | font: '11px Trebuchet MS, Verdana, sans-serif' 41 | } 42 | }, 43 | title: { 44 | style: { 45 | color: '#333', 46 | fontWeight: 'bold', 47 | fontSize: '12px', 48 | fontFamily: 'Trebuchet MS, Verdana, sans-serif' 49 | 50 | } 51 | } 52 | }, 53 | yAxis: { 54 | minorTickInterval: 'auto', 55 | lineColor: '#000', 56 | lineWidth: 1, 57 | tickWidth: 1, 58 | tickColor: '#000', 59 | labels: { 60 | style: { 61 | color: '#000', 62 | font: '11px Trebuchet MS, Verdana, sans-serif' 63 | } 64 | }, 65 | title: { 66 | style: { 67 | color: '#333', 68 | fontWeight: 'bold', 69 | fontSize: '12px', 70 | fontFamily: 'Trebuchet MS, Verdana, sans-serif' 71 | } 72 | } 73 | }, 74 | legend: { 75 | itemStyle: { 76 | font: '9pt Trebuchet MS, Verdana, sans-serif', 77 | color: 'black' 78 | 79 | }, 80 | itemHoverStyle: { 81 | color: '#039' 82 | }, 83 | itemHiddenStyle: { 84 | color: 'gray' 85 | } 86 | }, 87 | labels: { 88 | style: { 89 | color: '#99b' 90 | } 91 | }, 92 | 93 | navigation: { 94 | buttonOptions: { 95 | theme: { 96 | stroke: '#CCCCCC' 97 | } 98 | } 99 | } 100 | }; 101 | 102 | // Apply the theme 103 | var highchartsOptions = Highcharts.setOptions(Highcharts.theme); 104 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/modules/funnel.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Highcharts funnel module 4 | 5 | (c) 2010-2014 Torstein Honsi 6 | 7 | License: www.highcharts.com/license 8 | */ 9 | (function(c){var q=c.getOptions(),w=q.plotOptions,r=c.seriesTypes,G=c.merge,F=function(){},C=c.each,x=c.pick;w.funnel=G(w.pie,{animation:!1,center:["50%","50%"],width:"90%",neckWidth:"30%",height:"100%",neckHeight:"25%",reversed:!1,dataLabels:{connectorWidth:1,connectorColor:"#606060"},size:!0,states:{select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}}});r.funnel=c.extendClass(r.pie,{type:"funnel",animate:F,translate:function(){var a=function(b,a){return/%$/.test(b)?a*parseInt(b,10)/100:parseInt(b, 10 | 10)},D=0,f=this.chart,d=this.options,c=d.reversed,n=d.ignoreHiddenPoint,g=f.plotWidth,h=f.plotHeight,q=0,f=d.center,i=a(f[0],g),r=a(f[1],h),w=a(d.width,g),k,s,e=a(d.height,h),t=a(d.neckWidth,g),u=a(d.neckHeight,h),y=e-u,a=this.data,z,A,x=d.dataLabels.position==="left"?1:0,B,l,E,p,j,v,m;this.getWidthAt=s=function(b){return b>e-u||e===u?t:t+(w-t)*((e-u-b)/(e-u))};this.getX=function(b,a){return i+(a?-1:1)*(s(c?h-b:b)/2+d.dataLabels.distance)};this.center=[i,r,e];this.centerX=i;C(a,function(b){if(!n|| 11 | b.visible!==!1)D+=b.y});C(a,function(b){m=null;A=D?b.y/D:0;l=r-e/2+q*e;j=l+A*e;k=s(l);B=i-k/2;E=B+k;k=s(j);p=i-k/2;v=p+k;l>y?(B=p=i-t/2,E=v=i+t/2):j>y&&(m=j,k=s(y),p=i-k/2,v=p+k,j=y);c&&(l=e-l,j=e-j,m=m?e-m:null);z=["M",B,l,"L",E,l,v,j];m&&z.push(v,m,p,m);z.push(p,j,"Z");b.shapeType="path";b.shapeArgs={d:z};b.percentage=A*100;b.plotX=i;b.plotY=(l+(m||j))/2;b.tooltipPos=[i,b.plotY];b.slice=F;b.half=x;if(!n||b.visible!==!1)q+=A})},drawPoints:function(){var a=this,c=a.options,f=a.chart.renderer;C(a.data, 12 | function(d){var o=d.options,n=d.graphic,g=d.shapeArgs;n?n.animate(g):d.graphic=f.path(g).attr({fill:d.color,stroke:x(o.borderColor,c.borderColor),"stroke-width":x(o.borderWidth,c.borderWidth)}).add(a.group)})},sortByAngle:function(a){a.sort(function(a,c){return a.plotY-c.plotY})},drawDataLabels:function(){var a=this.data,c=this.options.dataLabels.distance,f,d,o,n=a.length,g,h;for(this.center[2]-=2*c;n--;)o=a[n],d=(f=o.half)?1:-1,h=o.plotY,g=this.getX(h,f),o.labelPos=[0,h,g+(c-5)*d,h,g+c*d,h,f?"right": 13 | "left",0];r.pie.prototype.drawDataLabels.call(this)}});q.plotOptions.pyramid=c.merge(q.plotOptions.funnel,{neckWidth:"0%",neckHeight:"0%",reversed:!0});c.seriesTypes.pyramid=c.extendClass(c.seriesTypes.funnel,{type:"pyramid"})})(Highcharts); 14 | -------------------------------------------------------------------------------- /compass/public/assets/events.js: -------------------------------------------------------------------------------- 1 | function collectEventSeries(data) { 2 | 3 | var events = data.events; 4 | 5 | var series = { 6 | "application_launched_with_location": { 7 | name: "Launched with Location", 8 | color: '#42C093', 9 | y: 90, 10 | data: [] 11 | }, 12 | "visit": { 13 | name: "Visit", 14 | type: 'scatter', 15 | color: '#8f799e', 16 | y: 80, 17 | data: [] 18 | }, 19 | "paused_location_updates": { 20 | name: "Paused Location Updates", 21 | color: '#a0876e', 22 | y: 70, 23 | data: [] 24 | }, 25 | "resumed_location_updates": { 26 | name: "Resumed Location Updates", 27 | color: '#819e73', 28 | y: 60, 29 | data: [] 30 | }, 31 | "exited_pause_region": { 32 | name: "Exited Pause Region", 33 | color: '#819e73', 34 | y: 50, 35 | data: [] 36 | }, 37 | "did_finish_deferred_updates": { 38 | name: "Finished Deferred Updates", 39 | color: '#9ea06e', 40 | y: 40, 41 | data: [] 42 | }, 43 | "did_enter_background": { 44 | name: "Entered Background", 45 | color: '#799b9e', 46 | y: 30, 47 | data: [] 48 | }, 49 | "will_resign_active": { 50 | name: "Will Resign Active", 51 | color: '#737f9e', 52 | y: 20, 53 | data: [] 54 | }, 55 | "will_terminate": { 56 | name: "Will Terminate", 57 | color: '#9e7773', 58 | y: 10, 59 | data: [] 60 | } 61 | }; 62 | 63 | for(var i=0; i 0) { 78 | series[i].type = 'scatter'; 79 | series[i].yAxis = 0; 80 | series[i].tooltip = { 81 | pointFormatter: function() { 82 | moveMarkerToPosition(this); 83 | var h = this.x.getHours(); 84 | var m = this.x.getMinutes(); 85 | var s = this.x.getSeconds(); 86 | if(m < 10) m = '0'+m; 87 | if(s < 10) s = '0'+s; 88 | return h+':'+m+':'+s; 89 | } 90 | }; 91 | response.push(series[i]); 92 | } 93 | } 94 | 95 | return response; 96 | } 97 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/dimmer.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Dimmer 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.dimmable{position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:opacity;z-index:1000}.ui.dimmer>.content{width:100%;height:100%;display:table;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.dimmer>.content>*{display:table-cell;vertical-align:middle;color:#FFF}.ui.segment>.ui.dimmer{border-radius:inherit!important}.animating.dimmable:not(body),.dimmed.dimmable:not(body){overflow:hidden}.dimmed.dimmable>.ui.animating.dimmer,.dimmed.dimmable>.ui.visible.dimmer,.ui.active.dimmer{display:block;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.ui.page.dimmer{position:fixed;-webkit-transform-style:'';transform-style:'';-webkit-perspective:2000px;perspective:2000px;-webkit-transform-origin:center center;transform-origin:center center}body.animating.in.dimmable,body.dimmed.dimmable{overflow:hidden}body.dimmable>.dimmer{position:fixed}.blurring.dimmable>:not(.dimmer){-webkit-filter:blur(0) grayscale(0);filter:blur(0) grayscale(0);-webkit-transition:.8s -webkit-filter ease,.8s filter ease;transition:.8s filter ease}.blurring.dimmed.dimmable>:not(.dimmer){-webkit-filter:blur(5px) grayscale(.7);filter:blur(5px) grayscale(.7)}.blurring.dimmable>.dimmer{background-color:rgba(0,0,0,.6)}.blurring.dimmable>.inverted.dimmer{background-color:rgba(255,255,255,.6)}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.ui.inverted.dimmer{background-color:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content>*{color:#FFF}.ui.simple.dimmer{display:block;overflow:hidden;opacity:1;width:0;height:0%;z-index:-100;background-color:rgba(0,0,0,0)}.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background-color:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,0)}.dimmed.dimmable>.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,.85)} -------------------------------------------------------------------------------- /compass/resources/views/map.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.map') 2 | 3 | @section('content') 4 | 5 | @include('partials/logged-in') 6 | 7 |
8 |
9 |
10 |
11 |
12 |
13 | 14 |
15 |
16 | @if($database->micropub_endpoint) 17 | 29 | @endif 30 |
31 | 32 |
33 |
34 | timezone); 39 | } catch(Exception $e) { 40 | $tz = new DateTimeZone('UTC'); 41 | } 42 | 43 | $start = new DateTime($database->created_at); 44 | $end = new DateTime(); 45 | $start->setTimeZone($tz); 46 | $end->setTimeZone($tz); 47 | 48 | $i = clone $start; 49 | while((int)$i->format('Y') <= (int)$end->format('Y') && (int)$i->format('M') <= (int)$end->format('M')) { 50 | ?> 51 | @include('partials/calendar', [ 52 | 'year' => $i->format('Y'), 53 | 'month' => $i->format('m'), 54 | 'days' => $days, 55 | 'day_name_length' => 3, 56 | 'month_href' => null, 57 | 'first_day' => 1, 58 | 'pn' => [] 59 | ]) 60 | add(new DateInterval('P1M')); 62 | } 63 | ?> 64 |
65 |
66 | 67 |
68 |
69 | 70 |
71 |
72 | 73 |
74 | 75 | @endsection 76 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/breadcrumb.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Breadcrumb 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Breadcrumb 15 | *******************************/ 16 | 17 | .ui.breadcrumb { 18 | line-height: 1; 19 | display: inline-block; 20 | margin: 0em 0em; 21 | vertical-align: middle; 22 | } 23 | .ui.breadcrumb:first-child { 24 | margin-top: 0em; 25 | } 26 | .ui.breadcrumb:last-child { 27 | margin-bottom: 0em; 28 | } 29 | 30 | 31 | /******************************* 32 | Content 33 | *******************************/ 34 | 35 | 36 | /* Divider */ 37 | .ui.breadcrumb .divider { 38 | display: inline-block; 39 | opacity: 1; 40 | margin: 0em 0 0em; 41 | font-size: 1.30769231rem; 42 | color: inherit; 43 | vertical-align: baseline; 44 | } 45 | 46 | /* Link */ 47 | .ui.breadcrumb a { 48 | color: #4078C0; 49 | } 50 | .ui.breadcrumb a:hover { 51 | color: #4078C0; 52 | } 53 | 54 | /* Icon Divider */ 55 | .ui.breadcrumb .icon.divider { 56 | font-size: 0.84615385em; 57 | vertical-align: baseline; 58 | } 59 | 60 | /* Section */ 61 | .ui.breadcrumb a.section { 62 | cursor: pointer; 63 | } 64 | .ui.breadcrumb .section { 65 | display: inline-block; 66 | margin: 0em; 67 | padding: 0em; 68 | } 69 | 70 | /* Loose Coupling */ 71 | .ui.breadcrumb.segment { 72 | display: inline-block; 73 | padding: 0.69230769em 1em; 74 | } 75 | 76 | 77 | /******************************* 78 | States 79 | *******************************/ 80 | 81 | .ui.breadcrumb .active.section { 82 | font-weight: bold; 83 | } 84 | 85 | 86 | /******************************* 87 | Variations 88 | *******************************/ 89 | 90 | .ui.mini.breadcrumb { 91 | font-size: 0.69230769rem; 92 | } 93 | .ui.tiny.breadcrumb { 94 | font-size: 0.84615385rem; 95 | } 96 | .ui.small.breadcrumb { 97 | font-size: 0.92307692rem; 98 | } 99 | .ui.breadcrumb { 100 | font-size: 1rem; 101 | } 102 | .ui.large.breadcrumb { 103 | font-size: 1.15384615rem; 104 | } 105 | .ui.big.breadcrumb { 106 | font-size: 1.30769231rem; 107 | } 108 | .ui.huge.breadcrumb { 109 | font-size: 1.5384em; 110 | } 111 | .ui.massive.breadcrumb { 112 | font-size: 1.69230769rem; 113 | } 114 | 115 | 116 | /******************************* 117 | Site Overrides 118 | *******************************/ 119 | 120 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/comment.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Comment 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .comments .comment{border:none;border-top:none;background:0 0}.ui.comments .comment .avatar{display:block;width:2.5em;height:auto;float:left;margin:.2em 0 0}.ui.comments .comment .avatar img,.ui.comments .comment img.avatar{display:block;margin:0 auto;width:100%;height:100%;border-radius:.25rem}.ui.comments .comment>.content{display:block}.ui.comments .comment>.avatar~.content{margin-left:3.5em}.ui.comments .comment .author{font-size:1em;color:rgba(0,0,0,.87);font-weight:700}.ui.comments .comment a.author{cursor:pointer}.ui.comments .comment a.author:hover{color:#4078C0}.ui.comments .comment .metadata{display:inline-block;margin-left:.5em;color:rgba(0,0,0,.4);font-size:.875em}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .5em 0 0}.ui.comments .comment .metadata>:last-child{margin-right:0}.ui.comments .comment .text{margin:.25em 0 .5em;font-size:1em;word-wrap:break-word;color:rgba(0,0,0,.87);line-height:1.3}.ui.comments .comment .actions{font-size:.875em}.ui.comments .comment .actions a{cursor:pointer;display:inline-block;margin:0 .75em 0 0;color:rgba(0,0,0,.4)}.ui.comments .comment .actions a:last-child{margin-right:0}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:rgba(0,0,0,.8)}.ui.comments>.reply.form{margin-top:1em}.ui.comments .comment .reply.form{width:100%;margin-top:1em}.ui.comments .reply.form textarea{font-size:1em;height:12em}.ui.collapsed.comments,.ui.comments .collapsed.comment,.ui.comments .collapsed.comments{display:none}.ui.threaded.comments .comment .comments{margin:-1.5em 0 -1em 1.25em;padding:3em 0 2em 2.25em;box-shadow:-1px 0 0 rgba(0,0,0,.13)}.ui.minimal.comments .comment .actions{opacity:0;position:absolute;top:0;right:0;left:auto;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;-webkit-transition-delay:.1s;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.small.comments{font-size:.9em}.ui.comments{font-size:1em}.ui.large.comments{font-size:1.1em}.ui.huge.comments{font-size:1.2em} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/rail.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Rail 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Rails 15 | *******************************/ 16 | 17 | .ui.rail { 18 | position: absolute; 19 | top: 0%; 20 | width: 300px; 21 | height: 100%; 22 | } 23 | .ui.left.rail { 24 | left: auto; 25 | right: 100%; 26 | padding: 0em 2rem 0em 0em; 27 | margin: 0em 2rem 0em 0em; 28 | } 29 | .ui.right.rail { 30 | left: 100%; 31 | right: auto; 32 | padding: 0em 0em 0em 2rem; 33 | margin: 0em 0em 0em 2rem; 34 | } 35 | 36 | 37 | /******************************* 38 | Variations 39 | *******************************/ 40 | 41 | 42 | /*-------------- 43 | Internal 44 | ---------------*/ 45 | 46 | .ui.left.internal.rail { 47 | left: 0%; 48 | right: auto; 49 | padding: 0em 0em 0em 2rem; 50 | margin: 0em 0em 0em 2rem; 51 | } 52 | .ui.right.internal.rail { 53 | left: auto; 54 | right: 0%; 55 | padding: 0em 2rem 0em 0em; 56 | margin: 0em 2rem 0em 0em; 57 | } 58 | 59 | /*-------------- 60 | Dividing 61 | ---------------*/ 62 | 63 | .ui.dividing.rail { 64 | width: 302.5px; 65 | } 66 | .ui.left.dividing.rail { 67 | padding: 0em 2.5rem 0em 0em; 68 | margin: 0em 2.5rem 0em 0em; 69 | border-right: 1px solid rgba(0, 0, 0, 0.13); 70 | } 71 | .ui.right.dividing.rail { 72 | border-left: 1px solid rgba(0, 0, 0, 0.13); 73 | padding: 0em 0em 0em 2.5rem; 74 | margin: 0em 0em 0em 2.5rem; 75 | } 76 | 77 | /*-------------- 78 | Distance 79 | ---------------*/ 80 | 81 | .ui.close.rail { 82 | width: 301px; 83 | } 84 | .ui.close.left.rail { 85 | padding: 0em 1em 0em 0em; 86 | margin: 0em 1em 0em 0em; 87 | } 88 | .ui.close.right.rail { 89 | padding: 0em 0em 0em 1em; 90 | margin: 0em 0em 0em 1em; 91 | } 92 | .ui.very.close.rail { 93 | width: 300.5px; 94 | } 95 | .ui.very.close.left.rail { 96 | padding: 0em 0.5em 0em 0em; 97 | margin: 0em 0.5em 0em 0em; 98 | } 99 | .ui.very.close.right.rail { 100 | padding: 0em 0em 0em 0.5em; 101 | margin: 0em 0em 0em 0.5em; 102 | } 103 | 104 | /*-------------- 105 | Attached 106 | ---------------*/ 107 | 108 | .ui.attached.left.rail, 109 | .ui.attached.right.rail { 110 | padding: 0em; 111 | margin: 0em; 112 | } 113 | 114 | /*-------------- 115 | Sizing 116 | ---------------*/ 117 | 118 | .ui.rail { 119 | font-size: 1rem; 120 | } 121 | 122 | 123 | /******************************* 124 | Site Overrides 125 | *******************************/ 126 | 127 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/accordion.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Accordion 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.accordion,.ui.accordion .accordion{max-width:100%}.ui.accordion .accordion{margin:1em 0 0;padding:0}.ui.accordion .accordion .title,.ui.accordion .title{cursor:pointer}.ui.accordion .title:not(.ui){padding:.5em 0;font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;color:rgba(0,0,0,.87)}.ui.accordion .accordion .title~.content,.ui.accordion .title~.content{display:none}.ui.accordion:not(.styled) .accordion .title~.content:not(.ui),.ui.accordion:not(.styled) .title~.content:not(.ui){margin:'';padding:.5em 0 1em}.ui.accordion:not(.styled) .title~.content:not(.ui):last-child{padding-bottom:0}.ui.accordion .accordion .title .dropdown.icon,.ui.accordion .title .dropdown.icon{display:inline-block;float:none;opacity:1;width:1.25em;height:1em;margin:0 .25rem 0 0;padding:0;font-size:1em;-webkit-transition:-webkit-transform .1s ease,opacity .1s ease;transition:transform .1s ease,opacity .1s ease;vertical-align:baseline;-webkit-transform:none;transform:none}.ui.accordion.menu .item .title{display:block;padding:0}.ui.accordion.menu .item .title>.dropdown.icon{float:right;margin:.21425em 0 0 1em;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ui.accordion .ui.header .dropdown.icon{font-size:1em;margin:0 .25rem 0 0}.ui.accordion .accordion .active.title .dropdown.icon,.ui.accordion .active.title .dropdown.icon,.ui.accordion.menu .item .active.title>.dropdown.icon{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ui.styled.accordion{width:600px}.ui.styled.accordion,.ui.styled.accordion .accordion{border-radius:.2307em;background:#FFF;box-shadow:0 1px 2px 0 rgba(0,0,0,.13),0 0 0 1px rgba(0,0,0,.13)}.ui.styled.accordion .accordion .title,.ui.styled.accordion .title{margin:0;padding:.75em 1em;color:rgba(0,0,0,.4);font-weight:700;border-top:1px solid rgba(0,0,0,.13);-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.styled.accordion .accordion .title:first-child,.ui.styled.accordion>.title:first-child{border-top:none}.ui.styled.accordion .accordion .content,.ui.styled.accordion .content{margin:0;padding:.5em 1em 1.5em}.ui.styled.accordion .accordion .content{padding:.5em 1em 1.5em}.ui.styled.accordion .accordion .active.title,.ui.styled.accordion .accordion .title:hover,.ui.styled.accordion .active.title,.ui.styled.accordion .title:hover{background:0 0;color:rgba(0,0,0,.87)}.ui.styled.accordion .accordion .active.title,.ui.styled.accordion .active.title{background:0 0;color:rgba(0,0,0,.95)}.ui.accordion .accordion .active.content,.ui.accordion .active.content{display:block}.ui.fluid.accordion,.ui.fluid.accordion .accordion{width:100%}.ui.inverted.accordion .title:not(.ui){color:rgba(255,255,255,.9)} -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/modules/solid-gauge.js: -------------------------------------------------------------------------------- 1 | /* 2 | Highcharts JS v4.1.8 (2015-08-20) 3 | Solid angular gauge module 4 | 5 | (c) 2010-2014 Torstein Honsi 6 | 7 | License: www.highcharts.com/license 8 | */ 9 | (function(a){var q=a.getOptions().plotOptions,r=a.pInt,s=a.pick,j=a.each,k;q.solidgauge=a.merge(q.gauge,{colorByPoint:!0});k={initDataClasses:function(b){var c=this,e=this.chart,d,o=0,f=this.options;this.dataClasses=d=[];j(b.dataClasses,function(g,h){var p,g=a.merge(g);d.push(g);if(!g.color)f.dataClassColor==="category"?(p=e.options.colors,g.color=p[o++],o===p.length&&(o=0)):g.color=c.tweenColors(a.Color(f.minColor),a.Color(f.maxColor),h/(b.dataClasses.length-1))})},initStops:function(b){this.stops= 10 | b.stops||[[0,this.options.minColor],[1,this.options.maxColor]];j(this.stops,function(b){b.color=a.Color(b[1])})},toColor:function(b,c){var e,d=this.stops,a,f=this.dataClasses,g,h;if(f)for(h=f.length;h--;){if(g=f[h],a=g.from,d=g.to,(a===void 0||b>=a)&&(d===void 0||b<=d)){e=g.color;if(c)c.dataClass=h;break}}else{this.isLog&&(b=this.val2lin(b));e=1-(this.max-b)/(this.max-this.min);for(h=d.length;h--;)if(e>d[h][0])break;a=d[h]||d[h+1];d=d[h+1]||a;e=1-(d[0]-e)/(d[0]-a[0]||1);e=this.tweenColors(a.color, 11 | d.color,e)}return e},tweenColors:function(b,c,a){var d;!c.rgba.length||!b.rgba.length?b=c.raw||"none":(b=b.rgba,c=c.rgba,d=c[3]!==1||b[3]!==1,b=(d?"rgba(":"rgb(")+Math.round(c[0]+(b[0]-c[0])*(1-a))+","+Math.round(c[1]+(b[1]-c[1])*(1-a))+","+Math.round(c[2]+(b[2]-c[2])*(1-a))+(d?","+(c[3]+(b[3]-c[3])*(1-a)):"")+")");return b}};j(["fill","stroke"],function(b){HighchartsAdapter.addAnimSetter(b,function(c){c.elem.attr(b,k.tweenColors(a.Color(c.start),a.Color(c.end),c.pos))})});a.seriesTypes.solidgauge= 12 | a.extendClass(a.seriesTypes.gauge,{type:"solidgauge",pointAttrToOptions:{},bindAxes:function(){var b;a.seriesTypes.gauge.prototype.bindAxes.call(this);b=this.yAxis;a.extend(b,k);b.options.dataClasses&&b.initDataClasses(b.options);b.initStops(b.options)},drawPoints:function(){var b=this,c=b.yAxis,e=c.center,d=b.options,o=b.chart.renderer,f=d.overshoot,g=f&&typeof f==="number"?f/180*Math.PI:0;a.each(b.points,function(a){var f=a.graphic,i=c.startAngleRad+c.translate(a.y,null,null,null,!0),j=r(s(a.options.radius, 13 | d.radius,100))*e[2]/200,l=r(s(a.options.innerRadius,d.innerRadius,60))*e[2]/200,m=c.toColor(a.y,a),n=Math.min(c.startAngleRad,c.endAngleRad),k=Math.max(c.startAngleRad,c.endAngleRad);m==="none"&&(m=a.color||b.color||"none");if(m!=="none")a.color=m;i=Math.max(n-g,Math.min(k+g,i));d.wrap===!1&&(i=Math.max(n,Math.min(k,i)));n=Math.min(i,c.startAngleRad);i=Math.max(i,c.startAngleRad);i-n>2*Math.PI&&(i=n+2*Math.PI);a.shapeArgs=l={x:e[0],y:e[1],r:j,innerR:l,start:n,end:i,fill:m};a.startR=j;if(f){if(a=l.d, 14 | f.animate(l),a)l.d=a}else a.graphic=o.arc(l).attr({stroke:d.borderColor||"none","stroke-width":d.borderWidth||0,fill:m,"sweep-flag":0}).add(b.group)})},animate:function(b){if(!b)this.startAngleRad=this.yAxis.startAngleRad,a.seriesTypes.pie.prototype.animate.call(this,b)}})})(Highcharts); 15 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/modules/broken-axis.js: -------------------------------------------------------------------------------- 1 | (function(i){function q(){return Array.prototype.slice.call(arguments,1)}var o=i.pick,n=i.wrap,r=i.extend,p=HighchartsAdapter.fireEvent,k=i.Axis,s=i.Series;r(k.prototype,{isInBreak:function(e,h){var c=e.repeat||Infinity,b=e.from,a=e.to-e.from,c=h>=b?(h-b)%c:c-(b-h)%c;return e.inclusive?c<=a:c=this.closestPointRange)){for(a=0;a=a)break;else if(b.isInBreak(d,a)){g-=a-d.from;break}return g};this.lin2val=function(a){var g,d;for(d=0;d=a)break;else g.tol;)j-=e;for(;jd.to||b>d.from&&fd.from&&fd.from&&f>d.to&&f< 7 | d.from)a="pointInBreak";a&&p(h,a,{point:g,brk:d})}}})})(Highcharts); 8 | -------------------------------------------------------------------------------- /compass/resources/views/partials/calendar.blade.php: -------------------------------------------------------------------------------- 1 | . See http://diveintomark.org/archives/2002/07/03 22 | @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable 23 | if($p) $p = ''.($pl ? ''.$p.'' : $p).' '; 24 | if($n) $n = ' '.($nl ? ''.$n.'' : $n).''; 25 | $calendar = ''."\n". 26 | '\n"; 27 | 28 | if($day_name_length){ #if the day names should be shown ($day_name_length > 0) 29 | #if day_name_length is >3, the full name of the day will be printed 30 | foreach($day_names as $d) 31 | $calendar .= ''; 32 | $calendar .= "\n"; 33 | } 34 | 35 | if($weekday > 0) $calendar .= ''; #initial 'empty' days 36 | for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){ 37 | if($weekday == 7){ 38 | $weekday = 0; #start a new week 39 | $calendar .= "\n"; 40 | } 41 | if(isset($days[$day]) and is_array($days[$day])){ 42 | @list($link, $classes, $content) = $days[$day]; 43 | if(is_null($content)) $content = $day; 44 | $calendar .= '' : '>'). 45 | ($link ? ''.$content.'' : $content).''; 46 | } 47 | else $calendar .= ""; 48 | } 49 | if($weekday != 7) $calendar .= ''; #remaining "empty" days 50 | 51 | echo $calendar."\n
'.$p.($month_href ? ''.$title.'' : $title).$n."
'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'
 
$day 
\n"; 52 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/divider.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Divider 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:rgba(0,0,0,.85);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;font-size:1rem}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(0,0,0,.13);border-bottom:1px solid rgba(255,255,255,.1)}.ui.grid>.column+.divider,.ui.grid>.row>.column+.divider{left:auto}.ui.horizontal.divider{display:table;white-space:nowrap;height:auto;margin:'';overflow:hidden;line-height:1;text-align:center}.ui.horizontal.divider:after,.ui.horizontal.divider:before{content:'';display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.horizontal.divider:before{background-position:right 1em top 50%}.ui.horizontal.divider:after{background-position:left 1em top 50%}.ui.vertical.divider{position:absolute;z-index:2;top:50%;left:50%;margin:0;padding:0;width:auto;height:50%;line-height:0;text-align:center;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ui.vertical.divider:after,.ui.vertical.divider:before{position:absolute;left:50%;content:'';z-index:3;border-left:1px solid rgba(0,0,0,.13);border-right:1px solid rgba(255,255,255,.1);width:0;height:calc(100% - 1rem)}.ui.vertical.divider:before{top:-100%}.ui.vertical.divider:after{top:auto;bottom:0}@media only screen and (max-width:687px){.ui.grid .stackable.row .ui.vertical.divider,.ui.stackable.grid .ui.vertical.divider{display:table;white-space:nowrap;height:auto;margin:'';overflow:hidden;line-height:1;text-align:center;position:static;top:0;left:0;-webkit-transform:none;transform:none}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:before{left:0;border-left:none;border-right:none;content:'';display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:before{background-position:right 1em top 50%}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:after{background-position:left 1em top 50%}}.ui.divider>.icon{margin:0;font-size:1rem;height:1em;vertical-align:middle}.ui.hidden.divider{border-color:transparent!important}.ui.hidden.divider:after,.ui.hidden.divider:before{display:none}.ui.divider.inverted,.ui.horizontal.inverted.divider,.ui.vertical.inverted.divider{color:#FFF}.ui.divider.inverted,.ui.divider.inverted:after,.ui.divider.inverted:before{border-top-color:rgba(0,0,0,.13)!important;border-left-color:rgba(0,0,0,.13)!important;border-bottom-color:rgba(255,255,255,.15)!important;border-right-color:rgba(255,255,255,.15)!important}.ui.fitted.divider{margin:0}.ui.clearing.divider{clear:both}.ui.section.divider{margin-top:2rem;margin-bottom:2rem} -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/modules/offline-exporting.js: -------------------------------------------------------------------------------- 1 | /* 2 | Highcharts JS v4.1.8 (2015-08-20) 3 | Client side exporting module 4 | 5 | (c) 2015 Torstein Honsi / Oystein Moseng 6 | 7 | License: www.highcharts.com/license 8 | */ 9 | (function(d){d.CanVGRenderer={};d.Chart.prototype.exportChartLocal=function(x,y){var i=this,e=d.merge(i.options.exporting,x),q=navigator.userAgent.indexOf("WebKit")>-1&&navigator.userAgent.indexOf("Chrome")<0,l=e.scale||2,n,r=window.URL||window.webkitURL||window,f,s=0,o,m,t,g=function(){if(e.fallbackToExportServer===!1)throw"Fallback to export server disabled";i.exportChart(e)},u=function(a,b,c,g,k,d,e){var j=new Image;if(!q)j.crossOrigin="Anonymous";j.onload=function(){var h=document.createElement("canvas"), 10 | d=h.getContext&&h.getContext("2d"),i;if(d){h.height=j.height*l;h.width=j.width*l;d.drawImage(j,0,0,h.width,h.height);try{i=h.toDataURL(),c(i,b)}catch(f){if(f.name==="SecurityError"||f.name==="SECURITY_ERR"||f.message==="SecurityError")g(a,b);else throw f;}}else k(a,b);e&&e(a,b)};j.onerror=function(){d(a,b);e&&e(a,b)};j.src=a},v=function(a){try{if(!q)return r.createObjectURL(new Blob([a],{type:"image/svg+xml;charset-utf-16"}))}catch(b){}return"data:image/svg+xml;charset=UTF-8,"+encodeURIComponent(a)}, 11 | p=function(a,b){var c=document.createElement("a"),d=(e.filename||"chart")+"."+b,k;if(navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(a,d);else if(typeof c.download!=="undefined")c.href=a,c.download=d,c.target="_blank",document.body.appendChild(c),c.click(),document.body.removeChild(c);else try{if(k=window.open(a,"chart"),typeof k==="undefined"||k===null)throw 1;}catch(g){window.location.href=a}},w=function(){var a,b,c=i.sanitizeSVG(n.innerHTML);if(e&&e.type==="image/svg+xml")try{navigator.msSaveOrOpenBlob? 12 | (b=new MSBlobBuilder,b.append(c),a=b.getBlob("image/svg+xml")):a=v(c),p(a,"svg")}catch(f){g()}else a=v(c),u(a,{},function(a){try{p(a,"png")}catch(c){g()}},function(){var a=document.createElement("canvas"),b=a.getContext("2d"),e=c.match(/^]*width\s*=\s*\"?(\d+)\"?[^>]*>/)[1]*l,f=c.match(/^]*height\s*=\s*\"?(\d+)\"?[^>]*>/)[1]*l,h=function(){b.drawSvg(c,0,0,e,f);try{p(navigator.msSaveOrOpenBlob?a.msToBlob():a.toDataURL("image/png"),"png")}catch(d){g()}};a.width=e;a.height=f;window.canvg? 13 | h():(i.showLoading(),HighchartsAdapter.getScript(d.getOptions().global.canvasToolsURL,function(){i.hideLoading();h()}))},g,g,function(){try{r.revokeObjectURL(a)}catch(b){}})};d.wrap(d.Chart.prototype,"getChartHTML",function(a){n=this.container.cloneNode(!0);return a.apply(this,Array.prototype.slice.call(arguments,1))});i.getSVGForExport(e,y);f=n.getElementsByTagName("image");try{f.length||w();var z=function(a,b){++s;b.imageElement.setAttributeNS("http://www.w3.org/1999/xlink","href",a);s===f.length&& 14 | w()};for(m=0,t=f.length;m .title { 41 | display: inline-block; 42 | margin: 0em 0.5em; 43 | color: #FFFFFF; 44 | } 45 | .ui.nag > .close.icon { 46 | cursor: pointer; 47 | opacity: 0.4; 48 | position: absolute; 49 | top: 50%; 50 | right: 1em; 51 | font-size: 1em; 52 | margin: -0.5em 0em 0em; 53 | color: #FFFFFF; 54 | -webkit-transition: opacity 0.2s ease; 55 | transition: opacity 0.2s ease; 56 | } 57 | 58 | 59 | /******************************* 60 | States 61 | *******************************/ 62 | 63 | 64 | /* Hover */ 65 | .ui.nag:hover { 66 | background: #555555; 67 | opacity: 1; 68 | } 69 | .ui.nag .close:hover { 70 | opacity: 1; 71 | } 72 | 73 | 74 | /******************************* 75 | Variations 76 | *******************************/ 77 | 78 | 79 | /*-------------- 80 | Static 81 | ---------------*/ 82 | 83 | .ui.overlay.nag { 84 | position: absolute; 85 | display: block; 86 | } 87 | 88 | /*-------------- 89 | Fixed 90 | ---------------*/ 91 | 92 | .ui.fixed.nag { 93 | position: fixed; 94 | } 95 | 96 | /*-------------- 97 | Bottom 98 | ---------------*/ 99 | 100 | .ui.bottom.nags, 101 | .ui.bottom.nag { 102 | border-radius: 0.2307em 0.2307em 0em 0em; 103 | top: auto; 104 | bottom: 0em; 105 | } 106 | 107 | /*-------------- 108 | White 109 | ---------------*/ 110 | 111 | .ui.inverted.nags .nag, 112 | .ui.inverted.nag { 113 | background-color: #F3F4F5; 114 | color: rgba(0, 0, 0, 0.85); 115 | } 116 | .ui.inverted.nags .nag .close, 117 | .ui.inverted.nags .nag .title, 118 | .ui.inverted.nag .close, 119 | .ui.inverted.nag .title { 120 | color: rgba(0, 0, 0, 0.4); 121 | } 122 | 123 | 124 | /******************************* 125 | Groups 126 | *******************************/ 127 | 128 | .ui.nags .nag { 129 | border-radius: 0em !important; 130 | } 131 | .ui.nags .nag:last-child { 132 | border-radius: 0em 0em 0.2307em 0.2307em; 133 | } 134 | .ui.bottom.nags .nag:last-child { 135 | border-radius: 0.2307em 0.2307em 0em 0em; 136 | } 137 | 138 | 139 | /******************************* 140 | User Overrides 141 | *******************************/ 142 | 143 | -------------------------------------------------------------------------------- /compass/app/Http/Controllers/Share.php: -------------------------------------------------------------------------------- 1 | where('token', $token) 16 | ->where('expires_at', '>', date('Y-m-d H:i:s')) 17 | ->first(); 18 | 19 | if(!$share) return false; 20 | 21 | $database = DB::table('databases')->where('id', $share->database_id)->first(); 22 | 23 | return $database; 24 | } 25 | 26 | public function view(Request $request, $token) { 27 | $database = $this->_databaseFromToken($token); 28 | 29 | if(!$database) { 30 | return view('share-expired'); 31 | } 32 | 33 | return view('share', [ 34 | 'database' => $database, 35 | 'share_token' => $token, 36 | ]); 37 | } 38 | 39 | public function current_location(Request $request) { 40 | $database = $this->_databaseFromToken($request->input('token')); 41 | 42 | if(!$database) { 43 | return response(json_encode(['error' => 'invalid']))->header('Content-Type', 'application/json'); 44 | } 45 | 46 | $response = [ 47 | 'data' => json_decode($database->last_location), 48 | ]; 49 | 50 | return response(json_encode($response))->header('Content-Type', 'application/json'); 51 | } 52 | 53 | public function history(Request $request) { 54 | $database = $this->_databaseFromToken($request->input('token')); 55 | 56 | if(!$database) { 57 | return response(json_encode(['error' => 'invalid']))->header('Content-Type', 'application/json'); 58 | } 59 | 60 | $share = DB::table('shares') 61 | ->where('token', $request->input('token')) 62 | ->first(); 63 | $share_date = strtotime($share->created_at); 64 | 65 | $locations = []; 66 | 67 | $db = new Quartz\DB(env('STORAGE_DIR').$database->name, 'r'); 68 | $results = $db->queryLast(100); 69 | foreach($results as $id=>$record) { 70 | if(!is_object($record) || !$record->data) 71 | continue; 72 | 73 | if(!property_exists($record->data->properties, 'horizontal_accuracy') 74 | || $record->data->properties->horizontal_accuracy >= 5000) 75 | continue; 76 | 77 | // Make sure this is from after the share was created 78 | $record_date = $record->date->format('U'); 79 | 80 | if($record_date < $share_date) 81 | continue; 82 | 83 | $locations[] = $record->data; 84 | } 85 | 86 | $linestring = array( 87 | 'type' => 'LineString', 88 | 'coordinates' => [], 89 | ); 90 | foreach($locations as $loc) { 91 | if(property_exists($loc, 'geometry')) 92 | $linestring['coordinates'][] = $loc->geometry->coordinates; 93 | else 94 | $linestring['coordinates'][] = null; 95 | } 96 | 97 | $response = array( 98 | 'linestring' => $linestring, 99 | ); 100 | 101 | return response(json_encode($response))->header('Content-Type', 'application/json'); 102 | } 103 | 104 | } 105 | -------------------------------------------------------------------------------- /compass/public/assets/battery.js: -------------------------------------------------------------------------------- 1 | function pointFromGeoJSON(geo) { 2 | if(geo) { 3 | return L.latLng(geo[1], geo[0]) 4 | } 5 | } 6 | 7 | function showBatteryGraph(response) { 8 | 9 | var data = response.linestring; 10 | 11 | var batteryStateBands = []; 12 | var buckets = data.properties.map(function(d){return d.battery_state}).findRanges(); 13 | 14 | for(var i in buckets) { 15 | for(var j=0; j'+this.y+'%'; 108 | } 109 | }, 110 | turboThreshold: 0, 111 | lineWidth: 1, 112 | color: '#a8cff4', 113 | marker: { 114 | enabled: true, 115 | radius: 2, 116 | fillColor: '#7cb5ec' 117 | } 118 | }].concat(speedSeries(response)).concat(collectEventSeries(response)), 119 | }); 120 | } 121 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/site.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Site 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Page 15 | *******************************/ 16 | 17 | html, 18 | body { 19 | height: 100%; 20 | } 21 | html { 22 | font-size: 13px; 23 | } 24 | body { 25 | margin: 0px; 26 | padding: 0px; 27 | overflow-x: visible; 28 | min-width: 320px; 29 | background: #FFFFFF; 30 | font-family: 'Arial', 'Helvetica Neue', Arial, Helvetica, sans-serif; 31 | font-size: 13px; 32 | line-height: 1.4285em; 33 | color: rgba(0, 0, 0, 0.87); 34 | font-smoothing: antialiased; 35 | } 36 | 37 | 38 | /******************************* 39 | Headers 40 | *******************************/ 41 | 42 | h1, 43 | h2, 44 | h3, 45 | h4, 46 | h5 { 47 | font-family: 'Arial', 'Helvetica Neue', Arial, Helvetica, sans-serif; 48 | line-height: 1.2857em; 49 | margin: calc(2rem - 0.14285em ) 0em 1rem; 50 | font-weight: bold; 51 | padding: 0em; 52 | } 53 | h1 { 54 | min-height: 1rem; 55 | font-size: 2.25em; 56 | } 57 | h2 { 58 | font-size: 1.714rem; 59 | } 60 | h3 { 61 | font-size: 1.28rem; 62 | } 63 | h4 { 64 | font-size: 1.071rem; 65 | } 66 | h5 { 67 | font-size: 1rem; 68 | } 69 | h1:first-child, 70 | h2:first-child, 71 | h3:first-child, 72 | h4:first-child, 73 | h5:first-child { 74 | margin-top: 0em; 75 | } 76 | h1:last-child, 77 | h2:last-child, 78 | h3:last-child, 79 | h4:last-child, 80 | h5:last-child { 81 | margin-bottom: 0em; 82 | } 83 | 84 | 85 | /******************************* 86 | Text 87 | *******************************/ 88 | 89 | p { 90 | margin: 0em 0em 1em; 91 | line-height: 1.4285em; 92 | } 93 | p:first-child { 94 | margin-top: 0em; 95 | } 96 | p:last-child { 97 | margin-bottom: 0em; 98 | } 99 | 100 | /*------------------- 101 | Links 102 | --------------------*/ 103 | 104 | a { 105 | color: #4078C0; 106 | text-decoration: none; 107 | } 108 | a:hover { 109 | color: #4078C0; 110 | text-decoration: underline; 111 | } 112 | 113 | 114 | /******************************* 115 | Highlighting 116 | *******************************/ 117 | 118 | 119 | /* Site */ 120 | ::-webkit-selection { 121 | background-color: #CCE2FF; 122 | color: rgba(0, 0, 0, 0.87); 123 | } 124 | ::-moz-selection { 125 | background-color: #CCE2FF; 126 | color: rgba(0, 0, 0, 0.87); 127 | } 128 | ::selection { 129 | background-color: #CCE2FF; 130 | color: rgba(0, 0, 0, 0.87); 131 | } 132 | 133 | /* Form */ 134 | textarea::-webkit-selection, 135 | input::-webkit-selection { 136 | background-color: rgba(100, 100, 100, 0.4); 137 | color: rgba(0, 0, 0, 0.87); 138 | } 139 | textarea::-moz-selection, 140 | input::-moz-selection { 141 | background-color: rgba(100, 100, 100, 0.4); 142 | color: rgba(0, 0, 0, 0.87); 143 | } 144 | textarea::selection, 145 | input::selection { 146 | background-color: rgba(100, 100, 100, 0.4); 147 | color: rgba(0, 0, 0, 0.87); 148 | } 149 | 150 | 151 | /******************************* 152 | Site Overrides 153 | *******************************/ 154 | 155 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/loader.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Loader 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}@-webkit-keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.loader:after,.ui.loader:before{width:2.2585em;height:2.2585em;margin:0 0 0 -1.12925em}.ui.mini.loader:after,.ui.mini.loader:before{width:1.2857em;height:1.2857em;margin:0 0 0 -.64285em}.ui.small.loader:after,.ui.small.loader:before{width:1.7142em;height:1.7142em;margin:0 0 0 -.8571em}.ui.large.loader:after,.ui.large.loader:before{width:4.5714em;height:4.5714em;margin:0 0 0 -2.2857em}.ui.dimmer .loader{display:block}.ui.dimmer .ui.loader{color:rgba(255,255,255,.9)}.ui.dimmer .ui.loader:before{border-color:rgba(255,255,255,.15)}.ui.dimmer .ui.loader:after{border-color:#FFF transparent transparent}.ui.inverted.dimmer .ui.loader{color:rgba(0,0,0,.87)}.ui.inverted.dimmer .ui.loader:before{border-color:rgba(0,0,0,.1)}.ui.inverted.dimmer .ui.loader:after{border-color:#767676 transparent transparent}.ui.text.loader{width:auto!important;height:auto!important;text-align:center;font-style:normal}.ui.indeterminate.loader:after{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.inverted.dimmer .ui.mini.loader,.ui.mini.loader{width:1.2857em;height:1.2857em;font-size:.69230769em}.ui.inverted.dimmer .ui.small.loader,.ui.small.loader{width:1.7142em;height:1.7142em;font-size:.92307692em}.ui.inverted.dimmer .ui.loader,.ui.loader{width:2.2585em;height:2.2585em;font-size:1em}.ui.inverted.dimmer .ui.loader.large,.ui.loader.large{width:4.5714em;height:4.5714em;font-size:1.15384615em}.ui.mini.text.loader{min-width:1.2857em;padding-top:1.97800769em}.ui.small.text.loader{min-width:1.7142em;padding-top:2.40650769em}.ui.text.loader{min-width:2.2585em;padding-top:2.95080769em}.ui.large.text.loader{min-width:4.5714em;padding-top:5.26370769em}.ui.inverted.loader{color:rgba(255,255,255,.9)}.ui.inverted.loader:before{border-color:rgba(255,255,255,.15)}.ui.inverted.loader:after{border-top-color:#FFF}.ui.inline.loader{position:relative;vertical-align:middle;margin:0;left:0;top:0;-webkit-transform:none;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}.ui.centered.inline.loader.active,.ui.centered.inline.loader.visible{display:block;margin-left:auto;margin-right:auto} -------------------------------------------------------------------------------- /compass/public/assets/share.js: -------------------------------------------------------------------------------- 1 | var map = L.map('map', { zoomControl: false }).setView([45.516, -122.660], 14, null, null, 24); 2 | 3 | var opts = { 4 | attribution: 'Map data © OpenStreetMap contributors, CC-BY-SA, Imagery © Mapbox', 5 | maxZoom: 18, 6 | zoomOffset: -1, 7 | tileSize: 512, 8 | id: 'mapbox/light-v10', 9 | accessToken: 'pk.eyJ1IjoiYWFyb25wayIsImEiOiJja3A0eXV2ZXIwMGt3MnVuc2Uzcm1yYzFuIn0.-_qwPOLRiQk8t56xs6vkfg' 10 | }; 11 | 12 | if(getQueryVariable('attribution') == 0) { 13 | opts.attribution = 'Mapbox'; 14 | } 15 | 16 | L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}', opts).addTo(map); 17 | 18 | if(getQueryVariable('controls') != 0) { 19 | new L.Control.Zoom({ position: 'topleft' }).addTo(map); 20 | } 21 | 22 | var geojsonLineOptions = { 23 | color: "#0033ff", 24 | weight: 4, 25 | opacity: 0.5 26 | }; 27 | 28 | var startIcon = L.icon({ 29 | iconUrl: '/assets/map-pin-start.png', 30 | iconSize: [18,28], 31 | iconAnchor: [9,28] 32 | }); 33 | 34 | // Load the current location and show on the map 35 | 36 | var currentLocationMarker; 37 | var currentTrack; 38 | var lastSeenTimestamp; 39 | 40 | function getCurrentLocation() { 41 | var interval = 5000; 42 | 43 | if(getQueryVariable('interval')) { 44 | interval = getQueryVariable('interval'); 45 | } 46 | 47 | $.getJSON("/share/current.json?token="+$("#share_token").val(), function(data){ 48 | if(data.data) { 49 | moveMarkerToPosition(data.data); 50 | if(lastSeenTimestamp != data.data.properties.timestamp) { 51 | map.setView(currentLocationMarker.getLatLng()); 52 | } 53 | lastSeenTimestamp = data.data.properties.timestamp; 54 | } 55 | setTimeout(getCurrentLocation, interval); 56 | }); 57 | } 58 | 59 | function getRecentHistory() { 60 | $.getJSON("/share/history.json?token="+$("#share_token").val(), function(data){ 61 | if(data.linestring) { 62 | L.geoJson(data.linestring, { 63 | style: geojsonLineOptions 64 | }).addTo(map); 65 | } 66 | }); 67 | } 68 | 69 | getCurrentLocation(); 70 | getRecentHistory(); 71 | 72 | 73 | 74 | 75 | 76 | function moveMarkerToPosition(feature) { 77 | if(feature && feature.geometry) { 78 | var coord = pointFromGeoJSON(feature.geometry.coordinates); 79 | if(coord) { 80 | if(!currentTrack) { 81 | currentTrack = L.polyline([coord, coord]).addTo(map); 82 | } else { 83 | currentTrack.addLatLng(coord); 84 | } 85 | 86 | if(!currentLocationMarker) { 87 | currentLocationMarker = L.marker(coord).addTo(map); 88 | } else { 89 | currentLocationMarker.setLatLng(coord); 90 | } 91 | } 92 | } 93 | } 94 | 95 | function pointFromGeoJSON(geo) { 96 | return L.latLng(geo[1], geo[0]) 97 | } 98 | 99 | function getQueryVariable(variable) { 100 | var query = window.location.search.substring(1); 101 | var vars = query.split('&'); 102 | for (var i = 0; i < vars.length; i++) { 103 | var pair = vars[i].split('='); 104 | if (decodeURIComponent(pair[0]) == variable) { 105 | return decodeURIComponent(pair[1]); 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /compass/bootstrap/app.php: -------------------------------------------------------------------------------- 1 | withFacades(); 23 | 24 | // $app->withEloquent(); 25 | 26 | /* 27 | |-------------------------------------------------------------------------- 28 | | Register Container Bindings 29 | |-------------------------------------------------------------------------- 30 | | 31 | | Now we will register a few bindings in the service container. We will 32 | | register the exception handler and the console kernel. You may add 33 | | your own bindings here if you like or you can make another file. 34 | | 35 | */ 36 | 37 | $app->singleton( 38 | Illuminate\Contracts\Debug\ExceptionHandler::class, 39 | App\Exceptions\Handler::class 40 | ); 41 | 42 | $app->singleton( 43 | Illuminate\Contracts\Console\Kernel::class, 44 | App\Console\Kernel::class 45 | ); 46 | 47 | /* 48 | |-------------------------------------------------------------------------- 49 | | Register Middleware 50 | |-------------------------------------------------------------------------- 51 | | 52 | | Next, we will register the middleware with the application. These can 53 | | be global middleware that run before and after each request into a 54 | | route or middleware that'll be assigned to some specific routes. 55 | | 56 | */ 57 | 58 | $app->middleware([ 59 | Illuminate\Cookie\Middleware\EncryptCookies::class, 60 | Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 61 | Illuminate\Session\Middleware\StartSession::class, 62 | // Illuminate\View\Middleware\ShareErrorsFromSession::class, 63 | // Laravel\Lumen\Http\Middleware\VerifyCsrfToken::class, 64 | ]); 65 | 66 | // $app->routeMiddleware([ 67 | 68 | // ]); 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Register Service Providers 73 | |-------------------------------------------------------------------------- 74 | | 75 | | Here we will register all of the application's service providers which 76 | | are used to bind services into the container. Service providers are 77 | | totally optional, so you are not required to uncomment this line. 78 | | 79 | */ 80 | 81 | // $app->register(App\Providers\AppServiceProvider::class); 82 | // $app->register(App\Providers\EventServiceProvider::class); 83 | 84 | /* 85 | |-------------------------------------------------------------------------- 86 | | Load The Application Routes 87 | |-------------------------------------------------------------------------- 88 | | 89 | | Next we will include the routes file so that they can all be added to 90 | | the application. This will provide all of the URLs the application 91 | | can respond to, as well as the controllers that may handle them. 92 | | 93 | */ 94 | 95 | $app->group(['namespace' => 'App\Http\Controllers'], function ($app) { 96 | require __DIR__.'/../app/Http/routes.php'; 97 | }); 98 | 99 | return $app; 100 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/image.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Image 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image img,.ui.image svg{display:block;max-width:100%;height:auto}.ui.hidden.image,.ui.hidden.images{display:none}.ui.disabled.image,.ui.disabled.images{cursor:default;opacity:.3}.ui.inline.image,.ui.inline.image img,.ui.inline.image svg{display:inline-block}.ui.top.aligned.image,.ui.top.aligned.image img,.ui.top.aligned.image svg,.ui.top.aligned.images .image{display:inline-block;vertical-align:top}.ui.middle.aligned.image,.ui.middle.aligned.image img,.ui.middle.aligned.image svg,.ui.middle.aligned.images .image{display:inline-block;vertical-align:middle}.ui.bottom.aligned.image,.ui.bottom.aligned.image img,.ui.bottom.aligned.image svg,.ui.bottom.aligned.images .image{display:inline-block;vertical-align:bottom}.ui.rounded.image,.ui.rounded.image>*,.ui.rounded.images .image,.ui.rounded.images .image>*{border-radius:.3125em}.ui.bordered.image img,.ui.bordered.image svg,.ui.bordered.images .image,.ui.bordered.images img,.ui.bordered.images svg,img.ui.bordered.image{border:1px solid rgba(0,0,0,.1)}.ui.circular.image,.ui.circular.images{overflow:hidden}.ui.circular.image,.ui.circular.image>*,.ui.circular.images .image,.ui.circular.images .image>*{border-radius:500rem}.ui.fluid.image,.ui.fluid.image img,.ui.fluid.image svg,.ui.fluid.images,.ui.fluid.images img,.ui.fluid.images svg{display:block;width:100%;height:auto}.ui.avatar.image,.ui.avatar.image img,.ui.avatar.image svg,.ui.avatar.images .image,.ui.avatar.images img,.ui.avatar.images svg{margin-right:.25em;display:inline-block;width:2em;height:2em;border-radius:500rem}.ui.spaced.image{display:inline-block!important;margin-left:.5em;margin-right:.5em}.ui[class*="left spaced"].image{margin-left:.5em;margin-right:0}.ui[class*="right spaced"].image{margin-left:0;margin-right:.5em}.ui.floated.image,.ui.floated.images{float:left;margin-right:1em;margin-bottom:1em}.ui.right.floated.image,.ui.right.floated.images{float:right;margin-right:0;margin-bottom:1em;margin-left:1em}.ui.floated.image:last-child,.ui.floated.images:last-child{margin-bottom:0}.ui.centered.image,.ui.centered.images{margin-left:auto;margin-right:auto}.ui.mini.image,.ui.mini.images .image,.ui.mini.images img,.ui.mini.images svg{width:20px;height:auto;font-size:.69230769rem}.ui.tiny.image,.ui.tiny.images .image,.ui.tiny.images img,.ui.tiny.images svg{width:80px;height:auto;font-size:.84615385rem}.ui.small.image,.ui.small.images .image,.ui.small.images img,.ui.small.images svg{width:150px;height:auto;font-size:.92307692rem}.ui.medium.image,.ui.medium.images .image,.ui.medium.images img,.ui.medium.images svg{width:300px;height:auto;font-size:1rem}.ui.large.image,.ui.large.images .image,.ui.large.images img,.ui.large.images svg{width:450px;height:auto;font-size:1.15384615rem}.ui.big.image,.ui.big.images .image,.ui.big.images img,.ui.big.images svg{width:600px;height:auto;font-size:1.30769231rem}.ui.huge.image,.ui.huge.images .image,.ui.huge.images img,.ui.huge.images svg{width:800px;height:auto;font-size:1.46153846rem}.ui.massive.image,.ui.massive.images .image,.ui.massive.images img,.ui.massive.images svg{width:960px;height:auto;font-size:1.69230769rem}.ui.images{font-size:0;margin:0 -.25rem}.ui.images .image,.ui.images img,.ui.images svg{display:inline-block;margin:0 .25rem .5rem} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/container.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Container 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Container 15 | *******************************/ 16 | 17 | 18 | /* All Sizes */ 19 | .ui.container { 20 | display: block; 21 | max-width: 100% !important; 22 | } 23 | 24 | /* Mobile */ 25 | @media only screen and (max-width: 687px) { 26 | .ui.container { 27 | width: auto !important; 28 | margin-left: 1em !important; 29 | margin-right: 1em !important; 30 | } 31 | .ui.grid.container { 32 | width: auto !important; 33 | } 34 | .ui.relaxed.grid.container { 35 | width: auto !important; 36 | } 37 | .ui.very.relaxed.grid.container { 38 | width: auto !important; 39 | } 40 | } 41 | 42 | /* Tablet */ 43 | @media only screen and (min-width: 688px) and (max-width: 687px) { 44 | .ui.container { 45 | width: 645px; 46 | margin-left: auto !important; 47 | margin-right: auto !important; 48 | } 49 | .ui.grid.container { 50 | width: calc( 645px + 2rem ) !important; 51 | } 52 | .ui.relaxed.grid.container { 53 | width: calc( 645px + 3rem ) !important; 54 | } 55 | .ui.very.relaxed.grid.container { 56 | width: calc( 645px + 5rem ) !important; 57 | } 58 | } 59 | 60 | /* Small Monitor */ 61 | @media only screen and (min-width: 688px) and (max-width: 687px) { 62 | .ui.container { 63 | width: 632px; 64 | margin-left: auto !important; 65 | margin-right: auto !important; 66 | } 67 | .ui.grid.container { 68 | width: calc( 632px + 2rem ) !important; 69 | } 70 | .ui.relaxed.grid.container { 71 | width: calc( 632px + 3rem ) !important; 72 | } 73 | .ui.very.relaxed.grid.container { 74 | width: calc( 632px + 5rem ) !important; 75 | } 76 | } 77 | 78 | /* Large Monitor */ 79 | @media only screen and (min-width: 688px) { 80 | .ui.container { 81 | width: 619px; 82 | margin-left: auto !important; 83 | margin-right: auto !important; 84 | } 85 | .ui.grid.container { 86 | width: calc( 619px + 2rem ) !important; 87 | } 88 | .ui.relaxed.grid.container { 89 | width: calc( 619px + 3rem ) !important; 90 | } 91 | .ui.very.relaxed.grid.container { 92 | width: calc( 619px + 5rem ) !important; 93 | } 94 | } 95 | 96 | 97 | /******************************* 98 | Types 99 | *******************************/ 100 | 101 | 102 | /* Text Container */ 103 | .ui.text.container { 104 | font-family: 'Arial', 'Helvetica Neue', Arial, Helvetica, sans-serif; 105 | max-width: 700px !important; 106 | line-height: 1.5; 107 | } 108 | .ui.text.container { 109 | font-size: 1.15384615rem; 110 | } 111 | 112 | /* Fluid */ 113 | .ui.fluid.container { 114 | width: 100%; 115 | } 116 | 117 | 118 | /******************************* 119 | Variations 120 | *******************************/ 121 | 122 | .ui[class*="left aligned"].container { 123 | text-align: left; 124 | } 125 | .ui[class*="center aligned"].container { 126 | text-align: center; 127 | } 128 | .ui[class*="right aligned"].container { 129 | text-align: right; 130 | } 131 | .ui.justified.container { 132 | text-align: justify; 133 | -webkit-hyphens: auto; 134 | -moz-hyphens: auto; 135 | -ms-hyphens: auto; 136 | hyphens: auto; 137 | } 138 | 139 | 140 | /******************************* 141 | Site Overrides 142 | *******************************/ 143 | 144 | -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/modules/no-data-to-display.src.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license Highcharts JS v4.1.8 (2015-08-20) 3 | * Plugin for displaying a message when there is no data visible in chart. 4 | * 5 | * (c) 2010-2014 Highsoft AS 6 | * Author: Oystein Moseng 7 | * 8 | * License: www.highcharts.com/license 9 | */ 10 | 11 | (function (H) { 12 | 13 | var seriesTypes = H.seriesTypes, 14 | chartPrototype = H.Chart.prototype, 15 | defaultOptions = H.getOptions(), 16 | extend = H.extend, 17 | each = H.each; 18 | 19 | // Add language option 20 | extend(defaultOptions.lang, { 21 | noData: 'No data to display' 22 | }); 23 | 24 | // Add default display options for message 25 | defaultOptions.noData = { 26 | position: { 27 | x: 0, 28 | y: 0, 29 | align: 'center', 30 | verticalAlign: 'middle' 31 | }, 32 | attr: { 33 | }, 34 | style: { 35 | fontWeight: 'bold', 36 | fontSize: '12px', 37 | color: '#60606a' 38 | } 39 | // useHTML: false // docs 40 | }; 41 | 42 | /** 43 | * Define hasData functions for series. These return true if there are data points on this series within the plot area 44 | */ 45 | function hasDataPie() { 46 | return !!this.points.length; /* != 0 */ 47 | } 48 | 49 | each(['pie', 'gauge', 'waterfall', 'bubble'], function (type) { 50 | if (seriesTypes[type]) { 51 | seriesTypes[type].prototype.hasData = hasDataPie; 52 | } 53 | }); 54 | 55 | H.Series.prototype.hasData = function () { 56 | return this.visible && this.dataMax !== undefined && this.dataMin !== undefined; // #3703 57 | }; 58 | 59 | /** 60 | * Display a no-data message. 61 | * 62 | * @param {String} str An optional message to show in place of the default one 63 | */ 64 | chartPrototype.showNoData = function (str) { 65 | var chart = this, 66 | options = chart.options, 67 | text = str || options.lang.noData, 68 | noDataOptions = options.noData; 69 | 70 | if (!chart.noDataLabel) { 71 | chart.noDataLabel = chart.renderer 72 | .label( 73 | text, 74 | 0, 75 | 0, 76 | null, 77 | null, 78 | null, 79 | noDataOptions.useHTML, 80 | null, 81 | 'no-data' 82 | ) 83 | .attr(noDataOptions.attr) 84 | .css(noDataOptions.style) 85 | .add(); 86 | chart.noDataLabel.align(extend(chart.noDataLabel.getBBox(), noDataOptions.position), false, 'plotBox'); 87 | } 88 | }; 89 | 90 | /** 91 | * Hide no-data message 92 | */ 93 | chartPrototype.hideNoData = function () { 94 | var chart = this; 95 | if (chart.noDataLabel) { 96 | chart.noDataLabel = chart.noDataLabel.destroy(); 97 | } 98 | }; 99 | 100 | /** 101 | * Returns true if there are data points within the plot area now 102 | */ 103 | chartPrototype.hasData = function () { 104 | var chart = this, 105 | series = chart.series, 106 | i = series.length; 107 | 108 | while (i--) { 109 | if (series[i].hasData() && !series[i].options.isInternal) { 110 | return true; 111 | } 112 | } 113 | 114 | return false; 115 | }; 116 | 117 | /** 118 | * Show no-data message if there is no data in sight. Otherwise, hide it. 119 | */ 120 | function handleNoData() { 121 | var chart = this; 122 | if (chart.hasData()) { 123 | chart.hideNoData(); 124 | } else { 125 | chart.showNoData(); 126 | } 127 | } 128 | 129 | /** 130 | * Add event listener to handle automatic display of no-data message 131 | */ 132 | chartPrototype.callbacks.push(function (chart) { 133 | H.addEvent(chart, 'load', handleNoData); 134 | H.addEvent(chart, 'redraw', handleNoData); 135 | }); 136 | 137 | }(Highcharts)); 138 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/feed.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Feed 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.feed{margin:1em 0}.ui.feed:first-child{margin-top:0}.ui.feed:last-child{margin-bottom:0}.ui.feed>.event{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;width:100%;padding:.23076923rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:block;-webkit-box-flex:0;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;width:2.5em;height:auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;text-align:left}.ui.feed>.event>.label .icon{opacity:1;font-size:1.5em;width:100%;padding:.25em;background:0 0;border:none;border-radius:none;color:rgba(0,0,0,.6)}.ui.feed>.event>.label img{width:100%;height:auto;border-radius:500rem}.ui.feed>.event>.label+.content{margin:.5em 0 .38461538em 1.15384615em}.ui.feed>.event>.content{display:block;-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;text-align:left;word-wrap:break-word}.ui.feed>.event:last-child>.content{padding-bottom:0}.ui.feed>.event>.content a{cursor:pointer}.ui.feed>.event>.content .date{margin:-.5rem 0 0;padding:0;font-weight:400;font-size:1em;font-style:normal;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .summary{margin:0;font-size:1em;font-weight:700;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .summary img{display:inline-block;width:auto;height:10em;margin:-.25em .25em 0 0;border-radius:.25em;vertical-align:middle}.ui.feed>.event>.content .user{display:inline-block;font-weight:700;margin-right:0;vertical-align:baseline}.ui.feed>.event>.content .user img{margin:-.25em .25em 0 0;width:auto;height:10em;vertical-align:middle}.ui.feed>.event>.content .summary>.date{display:inline-block;float:none;font-weight:400;font-size:.84615385em;font-style:normal;margin:0 0 0 .5em;padding:0;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .extra{margin:.5em 0 0;background:0 0;padding:0;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .extra.images img{display:inline-block;margin:0 .25em 0 0;width:6em}.ui.feed>.event>.content .extra.text{padding:0;border-left:none;font-size:1em;max-width:500px;line-height:1.4285em}.ui.feed>.event>.content .meta{display:inline-block;font-size:.84615385em;margin:.5em 0 0;background:0 0;border:none;border-radius:0;box-shadow:none;padding:0;color:rgba(0,0,0,.6)}.ui.feed>.event>.content .meta>*{position:relative;margin-left:.75em}.ui.feed>.event>.content .meta>:after{content:'';color:rgba(0,0,0,.2);top:0;left:-1em;opacity:1;position:absolute;vertical-align:top}.ui.feed>.event>.content .meta .like{color:'';-webkit-transition:.2s color ease;transition:.2s color ease}.ui.feed>.event>.content .meta .like:hover .icon{color:#FF2733}.ui.feed>.event>.content .meta .active.like .icon{color:#EF404A}.ui.feed>.event>.content .meta>:first-child{margin-left:0}.ui.feed>.event>.content .meta>:first-child::after{display:none}.ui.feed>.event>.content .meta a,.ui.feed>.event>.content .meta>.icon{cursor:pointer;opacity:1;color:rgba(0,0,0,.5);-webkit-transition:color .1s ease;transition:color .1s ease}.ui.feed>.event>.content .meta a:hover,.ui.feed>.event>.content .meta a:hover .icon,.ui.feed>.event>.content .meta>.icon:hover{color:rgba(0,0,0,.95)}.ui.small.feed{font-size:.92307692rem}.ui.feed{font-size:1rem}.ui.large.feed{font-size:1.15384615rem} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/embed.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Video 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Types 15 | *******************************/ 16 | 17 | .ui.embed { 18 | position: relative; 19 | max-width: 100%; 20 | height: 0px; 21 | overflow: hidden; 22 | background: #DCDDDE; 23 | padding-bottom: 56.25%; 24 | } 25 | 26 | /*----------------- 27 | Embedded Content 28 | ------------------*/ 29 | 30 | .ui.embed iframe, 31 | .ui.embed embed, 32 | .ui.embed object { 33 | position: absolute; 34 | border: none; 35 | width: 100%; 36 | height: 100%; 37 | top: 0px; 38 | left: 0px; 39 | margin: 0em; 40 | padding: 0em; 41 | } 42 | 43 | /*----------------- 44 | Embed 45 | ------------------*/ 46 | 47 | .ui.embed > .embed { 48 | display: none; 49 | } 50 | 51 | /*-------------- 52 | Placeholder 53 | ---------------*/ 54 | 55 | .ui.embed > .placeholder { 56 | position: absolute; 57 | cursor: pointer; 58 | top: 0px; 59 | left: 0px; 60 | display: block; 61 | width: 100%; 62 | height: 100%; 63 | background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); 64 | } 65 | 66 | /*-------------- 67 | Icon 68 | ---------------*/ 69 | 70 | .ui.embed > .icon { 71 | cursor: pointer; 72 | position: absolute; 73 | top: 0px; 74 | left: 0px; 75 | width: 100%; 76 | height: 100%; 77 | z-index: 2; 78 | } 79 | .ui.embed > .icon:after { 80 | position: absolute; 81 | top: 0%; 82 | left: 0%; 83 | width: 100%; 84 | height: 100%; 85 | z-index: 3; 86 | content: ''; 87 | background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); 88 | background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); 89 | opacity: 0.5; 90 | -webkit-transition: opacity 0.5s ease; 91 | transition: opacity 0.5s ease; 92 | } 93 | .ui.embed > .icon:before { 94 | position: absolute; 95 | top: 50%; 96 | left: 50%; 97 | z-index: 4; 98 | -webkit-transform: translateX(-50%) translateY(-50%); 99 | transform: translateX(-50%) translateY(-50%); 100 | color: #FFFFFF; 101 | font-size: 6rem; 102 | text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2); 103 | -webkit-transition: opacity 0.5s ease, color 0.5s ease; 104 | transition: opacity 0.5s ease, color 0.5s ease; 105 | z-index: 10; 106 | } 107 | 108 | 109 | /******************************* 110 | States 111 | *******************************/ 112 | 113 | 114 | /*-------------- 115 | Hover 116 | ---------------*/ 117 | 118 | .ui.embed .icon:hover:after { 119 | background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); 120 | background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); 121 | opacity: 1; 122 | } 123 | .ui.embed .icon:hover:before { 124 | color: #FFFFFF; 125 | } 126 | 127 | /*-------------- 128 | Active 129 | ---------------*/ 130 | 131 | .ui.active.embed > .icon, 132 | .ui.active.embed > .placeholder { 133 | display: none; 134 | } 135 | .ui.active.embed > .embed { 136 | display: block; 137 | } 138 | 139 | 140 | /******************************* 141 | Site Overrides 142 | *******************************/ 143 | 144 | 145 | 146 | /******************************* 147 | Variations 148 | *******************************/ 149 | 150 | .ui.square.embed { 151 | padding-bottom: 100%; 152 | } 153 | .ui[class*="4:3"].embed { 154 | padding-bottom: 75%; 155 | } 156 | .ui[class*="16:9"].embed { 157 | padding-bottom: 56.25%; 158 | } 159 | .ui[class*="21:9"].embed { 160 | padding-bottom: 42.85714286%; 161 | } 162 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/shape.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Shape 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Shape 15 | *******************************/ 16 | 17 | .ui.shape { 18 | position: relative; 19 | vertical-align: top; 20 | display: inline-block; 21 | -webkit-perspective: 2000px; 22 | perspective: 2000px; 23 | -webkit-transition: -webkit-transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out; 24 | transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out; 25 | } 26 | .ui.shape .sides { 27 | -webkit-transform-style: preserve-3d; 28 | transform-style: preserve-3d; 29 | } 30 | .ui.shape .side { 31 | opacity: 1; 32 | width: 100%; 33 | margin: 0em !important; 34 | -webkit-backface-visibility: hidden; 35 | backface-visibility: hidden; 36 | } 37 | .ui.shape .side { 38 | display: none; 39 | } 40 | .ui.shape .side * { 41 | -webkit-backface-visibility: visible !important; 42 | backface-visibility: visible !important; 43 | } 44 | 45 | 46 | /******************************* 47 | Types 48 | *******************************/ 49 | 50 | .ui.cube.shape .side { 51 | min-width: 15em; 52 | height: 15em; 53 | padding: 2em; 54 | background-color: #E6E6E6; 55 | color: rgba(0, 0, 0, 0.87); 56 | box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); 57 | } 58 | .ui.cube.shape .side > .content { 59 | width: 100%; 60 | height: 100%; 61 | display: table; 62 | text-align: center; 63 | -webkit-user-select: text; 64 | -moz-user-select: text; 65 | -ms-user-select: text; 66 | user-select: text; 67 | } 68 | .ui.cube.shape .side > .content > div { 69 | display: table-cell; 70 | vertical-align: middle; 71 | font-size: 2em; 72 | } 73 | 74 | 75 | /******************************* 76 | Variations 77 | *******************************/ 78 | 79 | .ui.text.shape.animating .sides { 80 | position: static; 81 | } 82 | .ui.text.shape .side { 83 | white-space: nowrap; 84 | } 85 | .ui.text.shape .side > * { 86 | white-space: normal; 87 | } 88 | 89 | 90 | /******************************* 91 | States 92 | *******************************/ 93 | 94 | 95 | /*-------------- 96 | Loading 97 | ---------------*/ 98 | 99 | .ui.loading.shape { 100 | position: absolute; 101 | top: -9999px; 102 | left: -9999px; 103 | } 104 | 105 | /*-------------- 106 | Animating 107 | ---------------*/ 108 | 109 | .ui.shape .animating.side { 110 | position: absolute; 111 | top: 0px; 112 | left: 0px; 113 | display: block; 114 | z-index: 100; 115 | } 116 | .ui.shape .hidden.side { 117 | opacity: 0.6; 118 | } 119 | 120 | /*-------------- 121 | CSS 122 | ---------------*/ 123 | 124 | .ui.shape.animating .sides { 125 | position: absolute; 126 | } 127 | .ui.shape.animating .sides { 128 | -webkit-transition: -webkit-transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out; 129 | transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out; 130 | } 131 | .ui.shape.animating .side { 132 | -webkit-transition: opacity 0.6s ease-in-out; 133 | transition: opacity 0.6s ease-in-out; 134 | } 135 | 136 | /*-------------- 137 | Active 138 | ---------------*/ 139 | 140 | .ui.shape .active.side { 141 | display: block; 142 | } 143 | 144 | 145 | /******************************* 146 | User Overrides 147 | *******************************/ 148 | 149 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/popup.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Popup 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.popup{display:none;position:absolute;top:0;right:0;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content;z-index:1900;border:1px solid #DDD;line-height:1.4285em;max-width:250px;background:#FFF;padding:.53846154em .84615385em;font-weight:400;font-style:normal;color:rgba(0,0,0,.87);border-radius:.2307em;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.08);margin:0}.ui.popup>.header{padding:0;font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1.125em;line-height:1.2;font-weight:700}.ui.popup>.header+.content{padding-top:.5em}.ui.popup:before{position:absolute;content:'';width:.75em;height:.75em;background:#FFF;-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:2;box-shadow:1px 1px 0 0 #c4c4c4}.ui.top.popup{margin:0 0 .75em}.ui.top.left.popup{-webkit-transform-origin:left bottom;transform-origin:left bottom}.ui.top.center.popup{-webkit-transform-origin:center bottom;transform-origin:center bottom}.ui.top.right.popup{-webkit-transform-origin:right bottom;transform-origin:right bottom}.ui.left.center.popup{margin:0 .75em 0 0;-webkit-transform-origin:right 50%;transform-origin:right 50%}.ui.right.center.popup{margin:0 0 0 .75em;-webkit-transform-origin:left 50%;transform-origin:left 50%}.ui.bottom.popup{margin:.75em 0 0}.ui.bottom.left.popup{-webkit-transform-origin:left top;transform-origin:left top}.ui.bottom.center.popup{-webkit-transform-origin:center top;transform-origin:center top}.ui.bottom.right.popup{-webkit-transform-origin:right top;transform-origin:right top;margin-right:0}.ui.bottom.center.popup:before{margin-left:-.325em;top:-.325em;left:50%;right:auto;bottom:auto;box-shadow:-1px -1px 0 0 #c4c4c4}.ui.bottom.left.popup{margin-left:0}.ui.bottom.left.popup:before{top:-.325em;left:1em;right:auto;bottom:auto;margin-left:0;box-shadow:-1px -1px 0 0 #c4c4c4}.ui.bottom.right.popup:before{top:-.325em;right:1em;bottom:auto;left:auto;margin-left:0;box-shadow:-1px -1px 0 0 #c4c4c4}.ui.top.center.popup:before{top:auto;right:auto;bottom:-.325em;left:50%;margin-left:-.325em}.ui.top.left.popup{margin-left:0}.ui.top.left.popup:before{bottom:-.325em;left:1em;top:auto;right:auto;margin-left:0}.ui.top.right.popup{margin-right:0}.ui.top.right.popup:before{bottom:-.325em;right:1em;top:auto;left:auto;margin-left:0}.ui.left.center.popup:before{top:50%;right:-.325em;bottom:auto;left:auto;margin-top:-.325em;box-shadow:1px -1px 0 0 #c4c4c4}.ui.right.center.popup:before{top:50%;left:-.325em;bottom:auto;right:auto;margin-top:-.325em;box-shadow:-1px 1px 0 0 #c4c4c4}.ui.bottom.popup:before,.ui.left.center.popup:before,.ui.right.center.popup:before,.ui.top.popup:before{background:#FFF}.ui.inverted.bottom.popup:before,.ui.inverted.left.center.popup:before,.ui.inverted.right.center.popup:before,.ui.inverted.top.popup:before{background:#333}.ui.popup>.ui.grid:not(.padded){width:calc(100% + 1.75rem);margin:-.7rem -.875rem}.ui.loading.popup{display:block;visibility:hidden;z-index:-1}.ui.animating.popup,.ui.visible.popup{display:block}.ui.visible.popup{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.basic.popup:before{display:none}.ui.wide.popup{max-width:350px}.ui[class*="very wide"].popup{max-width:550px}@media only screen and (max-width:687px){.ui.wide.popup,.ui[class*="very wide"].popup{max-width:250px}}.ui.fluid.popup{width:100%;max-width:none}.ui.inverted.popup{background:#333;color:#FFF;border:none;box-shadow:none}.ui.inverted.popup .header{background-color:none;color:#FFF}.ui.inverted.popup:before{background-color:#333;box-shadow:none!important}.ui.flowing.popup{max-width:none}.ui.mini.popup{font-size:.69230769rem}.ui.tiny.popup{font-size:.84615385rem}.ui.small.popup{font-size:.76923077em}.ui.popup{font-size:.84615385em}.ui.large.popup{font-size:1em}.ui.huge.popup{font-size:1.46153846rem} -------------------------------------------------------------------------------- /compass/public/assets/highcharts/js/themes/dark-unica.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Dark theme for Highcharts JS 3 | * @author Torstein Honsi 4 | */ 5 | 6 | // Load the fonts 7 | Highcharts.createElement('link', { 8 | href: '//fonts.googleapis.com/css?family=Unica+One', 9 | rel: 'stylesheet', 10 | type: 'text/css' 11 | }, null, document.getElementsByTagName('head')[0]); 12 | 13 | Highcharts.theme = { 14 | colors: ["#2b908f", "#90ee7e", "#f45b5b", "#7798BF", "#aaeeee", "#ff0066", "#eeaaee", 15 | "#55BF3B", "#DF5353", "#7798BF", "#aaeeee"], 16 | chart: { 17 | backgroundColor: { 18 | linearGradient: { x1: 0, y1: 0, x2: 1, y2: 1 }, 19 | stops: [ 20 | [0, '#2a2a2b'], 21 | [1, '#3e3e40'] 22 | ] 23 | }, 24 | style: { 25 | fontFamily: "'Unica One', sans-serif" 26 | }, 27 | plotBorderColor: '#606063' 28 | }, 29 | title: { 30 | style: { 31 | color: '#E0E0E3', 32 | textTransform: 'uppercase', 33 | fontSize: '20px' 34 | } 35 | }, 36 | subtitle: { 37 | style: { 38 | color: '#E0E0E3', 39 | textTransform: 'uppercase' 40 | } 41 | }, 42 | xAxis: { 43 | gridLineColor: '#707073', 44 | labels: { 45 | style: { 46 | color: '#E0E0E3' 47 | } 48 | }, 49 | lineColor: '#707073', 50 | minorGridLineColor: '#505053', 51 | tickColor: '#707073', 52 | title: { 53 | style: { 54 | color: '#A0A0A3' 55 | 56 | } 57 | } 58 | }, 59 | yAxis: { 60 | gridLineColor: '#707073', 61 | labels: { 62 | style: { 63 | color: '#E0E0E3' 64 | } 65 | }, 66 | lineColor: '#707073', 67 | minorGridLineColor: '#505053', 68 | tickColor: '#707073', 69 | tickWidth: 1, 70 | title: { 71 | style: { 72 | color: '#A0A0A3' 73 | } 74 | } 75 | }, 76 | tooltip: { 77 | backgroundColor: 'rgba(0, 0, 0, 0.85)', 78 | style: { 79 | color: '#F0F0F0' 80 | } 81 | }, 82 | plotOptions: { 83 | series: { 84 | dataLabels: { 85 | color: '#B0B0B3' 86 | }, 87 | marker: { 88 | lineColor: '#333' 89 | } 90 | }, 91 | boxplot: { 92 | fillColor: '#505053' 93 | }, 94 | candlestick: { 95 | lineColor: 'white' 96 | }, 97 | errorbar: { 98 | color: 'white' 99 | } 100 | }, 101 | legend: { 102 | itemStyle: { 103 | color: '#E0E0E3' 104 | }, 105 | itemHoverStyle: { 106 | color: '#FFF' 107 | }, 108 | itemHiddenStyle: { 109 | color: '#606063' 110 | } 111 | }, 112 | credits: { 113 | style: { 114 | color: '#666' 115 | } 116 | }, 117 | labels: { 118 | style: { 119 | color: '#707073' 120 | } 121 | }, 122 | 123 | drilldown: { 124 | activeAxisLabelStyle: { 125 | color: '#F0F0F3' 126 | }, 127 | activeDataLabelStyle: { 128 | color: '#F0F0F3' 129 | } 130 | }, 131 | 132 | navigation: { 133 | buttonOptions: { 134 | symbolStroke: '#DDDDDD', 135 | theme: { 136 | fill: '#505053' 137 | } 138 | } 139 | }, 140 | 141 | // scroll charts 142 | rangeSelector: { 143 | buttonTheme: { 144 | fill: '#505053', 145 | stroke: '#000000', 146 | style: { 147 | color: '#CCC' 148 | }, 149 | states: { 150 | hover: { 151 | fill: '#707073', 152 | stroke: '#000000', 153 | style: { 154 | color: 'white' 155 | } 156 | }, 157 | select: { 158 | fill: '#000003', 159 | stroke: '#000000', 160 | style: { 161 | color: 'white' 162 | } 163 | } 164 | } 165 | }, 166 | inputBoxBorderColor: '#505053', 167 | inputStyle: { 168 | backgroundColor: '#333', 169 | color: 'silver' 170 | }, 171 | labelStyle: { 172 | color: 'silver' 173 | } 174 | }, 175 | 176 | navigator: { 177 | handles: { 178 | backgroundColor: '#666', 179 | borderColor: '#AAA' 180 | }, 181 | outlineColor: '#CCC', 182 | maskFill: 'rgba(255,255,255,0.1)', 183 | series: { 184 | color: '#7798BF', 185 | lineColor: '#A6C7ED' 186 | }, 187 | xAxis: { 188 | gridLineColor: '#505053' 189 | } 190 | }, 191 | 192 | scrollbar: { 193 | barBackgroundColor: '#808083', 194 | barBorderColor: '#808083', 195 | buttonArrowColor: '#CCC', 196 | buttonBackgroundColor: '#606063', 197 | buttonBorderColor: '#606063', 198 | rifleColor: '#FFF', 199 | trackBackgroundColor: '#404043', 200 | trackBorderColor: '#404043' 201 | }, 202 | 203 | // special colors for some of the 204 | legendBackgroundColor: 'rgba(0, 0, 0, 0.5)', 205 | background2: '#505053', 206 | dataLabelsColor: '#B0B0B3', 207 | textColor: '#C0C0C0', 208 | contrastTextColor: '#F0F0F3', 209 | maskColor: 'rgba(255,255,255,0.3)' 210 | }; 211 | 212 | // Apply the theme 213 | Highcharts.setOptions(Highcharts.theme); 214 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/dimmer.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Dimmer 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Dimmer 15 | *******************************/ 16 | 17 | .dimmable { 18 | position: relative; 19 | } 20 | .ui.dimmer { 21 | display: none; 22 | position: absolute; 23 | top: 0em !important; 24 | left: 0em !important; 25 | width: 100%; 26 | height: 100%; 27 | text-align: center; 28 | vertical-align: middle; 29 | background-color: rgba(0, 0, 0, 0.85); 30 | opacity: 0; 31 | line-height: 1; 32 | -webkit-animation-fill-mode: both; 33 | animation-fill-mode: both; 34 | -webkit-animation-duration: 0.5s; 35 | animation-duration: 0.5s; 36 | -webkit-transition: background-color 0.5s linear; 37 | transition: background-color 0.5s linear; 38 | -webkit-user-select: none; 39 | -moz-user-select: none; 40 | -ms-user-select: none; 41 | user-select: none; 42 | will-change: opacity; 43 | z-index: 1000; 44 | } 45 | 46 | /* Dimmer Content */ 47 | .ui.dimmer > .content { 48 | width: 100%; 49 | height: 100%; 50 | display: table; 51 | -webkit-user-select: text; 52 | -moz-user-select: text; 53 | -ms-user-select: text; 54 | user-select: text; 55 | } 56 | .ui.dimmer > .content > * { 57 | display: table-cell; 58 | vertical-align: middle; 59 | color: #FFFFFF; 60 | } 61 | 62 | /* Loose Coupling */ 63 | .ui.segment > .ui.dimmer { 64 | border-radius: inherit !important; 65 | } 66 | 67 | 68 | /******************************* 69 | States 70 | *******************************/ 71 | 72 | .animating.dimmable:not(body), 73 | .dimmed.dimmable:not(body) { 74 | overflow: hidden; 75 | } 76 | .dimmed.dimmable > .ui.animating.dimmer, 77 | .dimmed.dimmable > .ui.visible.dimmer, 78 | .ui.active.dimmer { 79 | display: block; 80 | opacity: 1; 81 | } 82 | .ui.disabled.dimmer { 83 | width: 0 !important; 84 | height: 0 !important; 85 | } 86 | 87 | 88 | /******************************* 89 | Variations 90 | *******************************/ 91 | 92 | 93 | /*-------------- 94 | Page 95 | ---------------*/ 96 | 97 | .ui.page.dimmer { 98 | position: fixed; 99 | -webkit-transform-style: ''; 100 | transform-style: ''; 101 | -webkit-perspective: 2000px; 102 | perspective: 2000px; 103 | -webkit-transform-origin: center center; 104 | transform-origin: center center; 105 | } 106 | body.animating.in.dimmable, 107 | body.dimmed.dimmable { 108 | overflow: hidden; 109 | } 110 | body.dimmable > .dimmer { 111 | position: fixed; 112 | } 113 | 114 | /*-------------- 115 | Blurring 116 | ---------------*/ 117 | 118 | .blurring.dimmable > :not(.dimmer) { 119 | -webkit-filter: blur(0px) grayscale(0); 120 | filter: blur(0px) grayscale(0); 121 | -webkit-transition: 800ms -webkit-filter ease, 800ms filter ease; 122 | transition: 800ms filter ease; 123 | } 124 | .blurring.dimmed.dimmable > :not(.dimmer) { 125 | -webkit-filter: blur(5px) grayscale(0.7); 126 | filter: blur(5px) grayscale(0.7); 127 | } 128 | 129 | /* Dimmer Color */ 130 | .blurring.dimmable > .dimmer { 131 | background-color: rgba(0, 0, 0, 0.6); 132 | } 133 | .blurring.dimmable > .inverted.dimmer { 134 | background-color: rgba(255, 255, 255, 0.6); 135 | } 136 | 137 | /*-------------- 138 | Aligned 139 | ---------------*/ 140 | 141 | .ui.dimmer > .top.aligned.content > * { 142 | vertical-align: top; 143 | } 144 | .ui.dimmer > .bottom.aligned.content > * { 145 | vertical-align: bottom; 146 | } 147 | 148 | /*-------------- 149 | Inverted 150 | ---------------*/ 151 | 152 | .ui.inverted.dimmer { 153 | background-color: rgba(255, 255, 255, 0.85); 154 | } 155 | .ui.inverted.dimmer > .content > * { 156 | color: #FFFFFF; 157 | } 158 | 159 | /*-------------- 160 | Simple 161 | ---------------*/ 162 | 163 | 164 | /* Displays without javascript */ 165 | .ui.simple.dimmer { 166 | display: block; 167 | overflow: hidden; 168 | opacity: 1; 169 | width: 0%; 170 | height: 0%; 171 | z-index: -100; 172 | background-color: rgba(0, 0, 0, 0); 173 | } 174 | .dimmed.dimmable > .ui.simple.dimmer { 175 | overflow: visible; 176 | opacity: 1; 177 | width: 100%; 178 | height: 100%; 179 | background-color: rgba(0, 0, 0, 0.85); 180 | z-index: 1; 181 | } 182 | .ui.simple.inverted.dimmer { 183 | background-color: rgba(255, 255, 255, 0); 184 | } 185 | .dimmed.dimmable > .ui.simple.inverted.dimmer { 186 | background-color: rgba(255, 255, 255, 0.85); 187 | } 188 | 189 | 190 | /******************************* 191 | User Overrides 192 | *******************************/ 193 | 194 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/rating.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Rating 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Rating 15 | *******************************/ 16 | 17 | .ui.rating { 18 | display: -webkit-inline-box; 19 | display: -webkit-inline-flex; 20 | display: -ms-inline-flexbox; 21 | display: inline-flex; 22 | white-space: nowrap; 23 | vertical-align: baseline; 24 | } 25 | .ui.rating:last-child { 26 | margin-right: 0em; 27 | } 28 | 29 | /* Icon */ 30 | .ui.rating .icon { 31 | padding: 0em; 32 | margin: 0em; 33 | text-align: center; 34 | font-weight: normal; 35 | font-style: normal; 36 | -webkit-box-flex: 1; 37 | -webkit-flex: 1 0 auto; 38 | -ms-flex: 1 0 auto; 39 | flex: 1 0 auto; 40 | cursor: pointer; 41 | width: 1.25em; 42 | height: auto; 43 | -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease; 44 | transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease; 45 | } 46 | 47 | 48 | /******************************* 49 | Types 50 | *******************************/ 51 | 52 | 53 | /*------------------- 54 | Standard 55 | --------------------*/ 56 | 57 | 58 | /* Inactive Icon */ 59 | .ui.rating .icon { 60 | background: transparent; 61 | color: rgba(0, 0, 0, 0.15); 62 | } 63 | 64 | /* Active Icon */ 65 | .ui.rating .active.icon { 66 | background: transparent; 67 | color: rgba(0, 0, 0, 0.85); 68 | } 69 | 70 | /* Selected Icon */ 71 | .ui.rating .icon.selected, 72 | .ui.rating .icon.selected.active { 73 | background: transparent; 74 | color: rgba(0, 0, 0, 0.87); 75 | } 76 | 77 | /*------------------- 78 | Star 79 | --------------------*/ 80 | 81 | 82 | /* Inactive */ 83 | .ui.star.rating .icon { 84 | width: 1.25em; 85 | height: auto; 86 | background: transparent; 87 | color: rgba(0, 0, 0, 0.15); 88 | text-shadow: none; 89 | } 90 | 91 | /* Active Star */ 92 | .ui.star.rating .active.icon { 93 | background: transparent !important; 94 | color: #FFE623 !important; 95 | text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important; 96 | } 97 | 98 | /* Selected Star */ 99 | .ui.star.rating .icon.selected, 100 | .ui.star.rating .icon.selected.active { 101 | background: transparent !important; 102 | color: #FFCC00 !important; 103 | text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important; 104 | } 105 | 106 | /*------------------- 107 | Heart 108 | --------------------*/ 109 | 110 | .ui.heart.rating .icon { 111 | width: 1.4em; 112 | height: auto; 113 | background: transparent; 114 | color: rgba(0, 0, 0, 0.15); 115 | text-shadow: none !important; 116 | } 117 | 118 | /* Active Heart */ 119 | .ui.heart.rating .active.icon { 120 | background: transparent !important; 121 | color: #FF6D75 !important; 122 | text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important; 123 | } 124 | 125 | /* Selected Heart */ 126 | .ui.heart.rating .icon.selected, 127 | .ui.heart.rating .icon.selected.active { 128 | background: transparent !important; 129 | color: #FF3000 !important; 130 | text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important; 131 | } 132 | 133 | 134 | /******************************* 135 | States 136 | *******************************/ 137 | 138 | 139 | /*------------------- 140 | Disabled 141 | --------------------*/ 142 | 143 | 144 | /* disabled rating */ 145 | .ui.disabled.rating .icon { 146 | cursor: default; 147 | } 148 | 149 | /*------------------- 150 | User Interactive 151 | --------------------*/ 152 | 153 | 154 | /* Selected Rating */ 155 | .ui.rating.selected .active.icon { 156 | opacity: 1; 157 | } 158 | .ui.rating.selected .icon.selected, 159 | .ui.rating .icon.selected { 160 | opacity: 1; 161 | } 162 | 163 | 164 | /******************************* 165 | Variations 166 | *******************************/ 167 | 168 | .ui.mini.rating { 169 | font-size: 0.69230769rem; 170 | } 171 | .ui.tiny.rating { 172 | font-size: 0.84615385rem; 173 | } 174 | .ui.small.rating { 175 | font-size: 0.92307692rem; 176 | } 177 | .ui.rating { 178 | font-size: 1rem; 179 | } 180 | .ui.large.rating { 181 | font-size: 1.15384615rem; 182 | } 183 | .ui.huge.rating { 184 | font-size: 1.46153846rem; 185 | } 186 | .ui.massive.rating { 187 | font-size: 2rem; 188 | } 189 | 190 | 191 | /******************************* 192 | Site Overrides 193 | *******************************/ 194 | 195 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/rating.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Rating 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | !function(e,n,t,i){"use strict";e.fn.rating=function(n){var t,a=e(this),o=a.selector||"",r=(new Date).getTime(),s=[],l=arguments[0],c="string"==typeof l,u=[].slice.call(arguments,1);return a.each(function(){var g,m=e.isPlainObject(n)?e.extend(!0,{},e.fn.rating.settings,n):e.extend({},e.fn.rating.settings),d=m.namespace,f=m.className,v=m.metadata,p=m.selector,b=(m.error,"."+d),h="module-"+d,y=this,x=e(this).data(h),R=e(this),C=R.find(p.icon);g={initialize:function(){g.verbose("Initializing rating module",m),0===C.length&&g.setup.layout(),m.interactive?g.enable():g.disable(),g.set.rating(g.get.initialRating()),g.instantiate()},instantiate:function(){g.verbose("Instantiating module",m),x=g,R.data(h,g)},destroy:function(){g.verbose("Destroying previous instance",x),g.remove.events(),R.removeData(h)},refresh:function(){C=R.find(p.icon)},setup:{layout:function(){var n=g.get.maxRating(),t=e.fn.rating.settings.templates.icon(n);g.debug("Generating icon html dynamically"),R.html(t),g.refresh()}},event:{mouseenter:function(){var n=e(this);n.nextAll().removeClass(f.selected),R.addClass(f.selected),n.addClass(f.selected).prevAll().addClass(f.selected)},mouseleave:function(){R.removeClass(f.selected),C.removeClass(f.selected)},click:function(){var n=e(this),t=g.get.rating(),i=C.index(n)+1,a="auto"==m.clearable?1===C.length:m.clearable;a&&t==i?g.clearRating():g.set.rating(i)}},clearRating:function(){g.debug("Clearing current rating"),g.set.rating(0)},bind:{events:function(){g.verbose("Binding events"),R.on("mouseenter"+b,p.icon,g.event.mouseenter).on("mouseleave"+b,p.icon,g.event.mouseleave).on("click"+b,p.icon,g.event.click)}},remove:{events:function(){g.verbose("Removing events"),R.off(b)}},enable:function(){g.debug("Setting rating to interactive mode"),g.bind.events(),R.removeClass(f.disabled)},disable:function(){g.debug("Setting rating to read-only mode"),g.remove.events(),R.addClass(f.disabled)},get:{initialRating:function(){return R.data(v.rating)!==i?(R.removeData(v.rating),R.data(v.rating)):m.initialRating},maxRating:function(){return R.data(v.maxRating)!==i?(R.removeData(v.maxRating),R.data(v.maxRating)):m.maxRating},rating:function(){var e=C.filter("."+f.active).length;return g.verbose("Current rating retrieved",e),e}},set:{rating:function(e){var n=e-1>=0?e-1:0,t=C.eq(n);R.removeClass(f.selected),C.removeClass(f.selected).removeClass(f.active),e>0&&(g.verbose("Setting current rating to",e),t.prevAll().andSelf().addClass(f.active)),m.onRate.call(y,e)}},setting:function(n,t){if(g.debug("Changing setting",n,t),e.isPlainObject(n))e.extend(!0,m,n);else{if(t===i)return m[n];m[n]=t}},internal:function(n,t){if(e.isPlainObject(n))e.extend(!0,g,n);else{if(t===i)return g[n];g[n]=t}},debug:function(){m.debug&&(m.performance?g.performance.log(arguments):(g.debug=Function.prototype.bind.call(console.info,console,m.name+":"),g.debug.apply(console,arguments)))},verbose:function(){m.verbose&&m.debug&&(m.performance?g.performance.log(arguments):(g.verbose=Function.prototype.bind.call(console.info,console,m.name+":"),g.verbose.apply(console,arguments)))},error:function(){g.error=Function.prototype.bind.call(console.error,console,m.name+":"),g.error.apply(console,arguments)},performance:{log:function(e){var n,t,i;m.performance&&(n=(new Date).getTime(),i=r||n,t=n-i,r=n,s.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:y,"Execution Time":t})),clearTimeout(g.performance.timer),g.performance.timer=setTimeout(g.performance.display,500)},display:function(){var n=m.name+":",t=0;r=!1,clearTimeout(g.performance.timer),e.each(s,function(e,n){t+=n["Execution Time"]}),n+=" "+t+"ms",o&&(n+=" '"+o+"'"),a.length>1&&(n+=" ("+a.length+")"),(console.group!==i||console.table!==i)&&s.length>0&&(console.groupCollapsed(n),console.table?console.table(s):e.each(s,function(e,n){console.log(n.Name+": "+n["Execution Time"]+"ms")}),console.groupEnd()),s=[]}},invoke:function(n,a,o){var r,s,l,c=x;return a=a||u,o=y||o,"string"==typeof n&&c!==i&&(n=n.split(/[\. ]/),r=n.length-1,e.each(n,function(t,a){var o=t!=r?a+n[t+1].charAt(0).toUpperCase()+n[t+1].slice(1):n;if(e.isPlainObject(c[o])&&t!=r)c=c[o];else{if(c[o]!==i)return s=c[o],!1;if(!e.isPlainObject(c[a])||t==r)return c[a]!==i?(s=c[a],!1):!1;c=c[a]}})),e.isFunction(s)?l=s.apply(o,a):s!==i&&(l=s),e.isArray(t)?t.push(l):t!==i?t=[t,l]:l!==i&&(t=l),s}},c?(x===i&&g.initialize(),g.invoke(l)):(x!==i&&x.invoke("destroy"),g.initialize())}),t!==i?t:this},e.fn.rating.settings={name:"Rating",namespace:"rating",debug:!1,verbose:!1,performance:!0,initialRating:0,interactive:!0,maxRating:4,clearable:"auto",onRate:function(e){},error:{method:"The method you called is not defined",noMaximum:"No maximum rating specified. Cannot generate HTML automatically"},metadata:{rating:"rating",maxRating:"maxRating"},className:{active:"active",disabled:"disabled",selected:"selected",loading:"loading"},selector:{icon:".icon"},templates:{icon:function(e){for(var n=1,t="";e>=n;)t+='',n++;return t}}}}(jQuery,window,document); -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/reveal.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Reveal 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.reveal{display:inherit;position:relative!important;font-size:0!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:3!important;-webkit-transition:all .5s ease .1s;transition:all .5s ease .1s}.ui.reveal>.hidden.content{position:relative!important;z-index:2!important}.ui.active.reveal .visible.content,.ui.reveal:hover .visible.content{z-index:4!important}.ui.slide.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.slide.reveal>.content{display:block;width:100%;float:left;margin:0;-webkit-transition:-webkit-transform .5s ease .1s;transition:transform .5s ease .1s}.ui.slide.reveal>.visible.content{position:relative!important}.ui.slide.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important;-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.active.reveal>.visible.content,.ui.slide.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.active.reveal>.hidden.content,.ui.slide.reveal:hover>.hidden.content,.ui.slide.right.reveal>.visible.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.right.reveal>.hidden.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.right.active.reveal>.visible.content,.ui.slide.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.right.active.reveal>.hidden.content,.ui.slide.right.reveal:hover>.hidden.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.up.reveal>.hidden.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.up.active.reveal>.visible.content,.ui.slide.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.up.active.reveal>.hidden.content,.ui.slide.up.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;transform:translateY(0)!important}.ui.slide.down.reveal>.hidden.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.down.active.reveal>.visible.content,.ui.slide.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.down.active.reveal>.hidden.content,.ui.slide.down.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;transform:translateY(0)!important}.ui.fade.reveal>.visible.content{opacity:1}.ui.fade.active.reveal>.visible.content,.ui.fade.reveal:hover>.visible.content{opacity:0}.ui.move.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.move.reveal>.content{display:block;float:left;margin:0;-webkit-transition:-webkit-transform .5s cubic-bezier(.175,.885,.32,1) .1s;transition:transform .5s cubic-bezier(.175,.885,.32,1) .1s}.ui.move.reveal>.visible.content{position:relative!important}.ui.move.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important}.ui.move.active.reveal>.visible.content,.ui.move.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.move.right.active.reveal>.visible.content,.ui.move.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.move.up.active.reveal>.visible.content,.ui.move.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.move.down.active.reveal>.visible.content,.ui.move.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.rotate.reveal>.visible.content{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transform:rotate(0);transform:rotate(0)}.ui.rotate.reveal>.visible.content,.ui.rotate.right.reveal>.visible.content{-webkit-transform-origin:bottom right;transform-origin:bottom right}.ui.rotate.active.reveal>.visible.conten,.ui.rotate.reveal:hover>.visible.content,.ui.rotate.right.active.reveal>.visible.content,.ui.rotate.right.reveal:hover>.visible.content{-webkit-transform:rotate(110deg);transform:rotate(110deg)}.ui.rotate.left.reveal>.visible.content{-webkit-transform-origin:bottom left;transform-origin:bottom left}.ui.rotate.left.active.reveal>.visible.content,.ui.rotate.left.reveal:hover>.visible.content{-webkit-transform:rotate(-110deg);transform:rotate(-110deg)}.ui.disabled.reveal:hover>.visible.visible.content{position:static!important;display:block!important;opacity:1!important;top:0!important;left:0!important;right:auto!important;bottom:auto!important;-webkit-transform:none!important;transform:none!important}.ui.disabled.reveal:hover>.hidden.hidden.content{display:none!important}.ui.visible.reveal{overflow:visible}.ui.instant.reveal>.content{-webkit-transition-delay:0s!important;transition-delay:0s!important}.ui.reveal>.content{font-size:1rem!important} -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/ad.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Ad 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2013 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */ 11 | 12 | 13 | /******************************* 14 | Advertisement 15 | *******************************/ 16 | 17 | .ui.ad { 18 | display: block; 19 | overflow: hidden; 20 | margin: 1em 0em; 21 | } 22 | .ui.ad:first-child { 23 | margin: 0em; 24 | } 25 | .ui.ad:last-child { 26 | margin: 0em; 27 | } 28 | .ui.ad iframe { 29 | margin: 0em; 30 | padding: 0em; 31 | border: none; 32 | overflow: hidden; 33 | } 34 | 35 | /*-------------- 36 | Common 37 | ---------------*/ 38 | 39 | 40 | /* Leaderboard */ 41 | .ui.leaderboard.ad { 42 | width: 728px; 43 | height: 90px; 44 | } 45 | 46 | /* Medium Rectangle */ 47 | .ui[class*="medium rectangle"].ad { 48 | width: 300px; 49 | height: 250px; 50 | } 51 | 52 | /* Large Rectangle */ 53 | .ui[class*="large rectangle"].ad { 54 | width: 336px; 55 | height: 280px; 56 | } 57 | 58 | /* Half Page */ 59 | .ui[class*="half page"].ad { 60 | width: 300px; 61 | height: 600px; 62 | } 63 | 64 | /*-------------- 65 | Square 66 | ---------------*/ 67 | 68 | 69 | /* Square */ 70 | .ui.square.ad { 71 | width: 250px; 72 | height: 250px; 73 | } 74 | 75 | /* Small Square */ 76 | .ui[class*="small square"].ad { 77 | width: 200px; 78 | height: 200px; 79 | } 80 | 81 | /*-------------- 82 | Rectangle 83 | ---------------*/ 84 | 85 | 86 | /* Small Rectangle */ 87 | .ui[class*="small rectangle"].ad { 88 | width: 180px; 89 | height: 150px; 90 | } 91 | 92 | /* Vertical Rectangle */ 93 | .ui[class*="vertical rectangle"].ad { 94 | width: 240px; 95 | height: 400px; 96 | } 97 | 98 | /*-------------- 99 | Button 100 | ---------------*/ 101 | 102 | .ui.button.ad { 103 | width: 120px; 104 | height: 90px; 105 | } 106 | .ui[class*="square button"].ad { 107 | width: 125px; 108 | height: 125px; 109 | } 110 | .ui[class*="small button"].ad { 111 | width: 120px; 112 | height: 60px; 113 | } 114 | 115 | /*-------------- 116 | Skyscrapers 117 | ---------------*/ 118 | 119 | 120 | /* Skyscraper */ 121 | .ui.skyscraper.ad { 122 | width: 120px; 123 | height: 600px; 124 | } 125 | 126 | /* Wide Skyscraper */ 127 | .ui[class*="wide skyscraper"].ad { 128 | width: 160px; 129 | } 130 | 131 | /*-------------- 132 | Banners 133 | ---------------*/ 134 | 135 | 136 | /* Banner */ 137 | .ui.banner.ad { 138 | width: 468px; 139 | height: 60px; 140 | } 141 | 142 | /* Vertical Banner */ 143 | .ui[class*="vertical banner"].ad { 144 | width: 120px; 145 | height: 240px; 146 | } 147 | 148 | /* Top Banner */ 149 | .ui[class*="top banner"].ad { 150 | width: 930px; 151 | height: 180px; 152 | } 153 | 154 | /* Half Banner */ 155 | .ui[class*="half banner"].ad { 156 | width: 234px; 157 | height: 60px; 158 | } 159 | 160 | /*-------------- 161 | Boards 162 | ---------------*/ 163 | 164 | 165 | /* Leaderboard */ 166 | .ui[class*="large leaderboard"].ad { 167 | width: 970px; 168 | height: 90px; 169 | } 170 | 171 | /* Billboard */ 172 | .ui.billboard.ad { 173 | width: 970px; 174 | height: 250px; 175 | } 176 | 177 | /*-------------- 178 | Panorama 179 | ---------------*/ 180 | 181 | 182 | /* Panorama */ 183 | .ui.panorama.ad { 184 | width: 980px; 185 | height: 120px; 186 | } 187 | 188 | /*-------------- 189 | Netboard 190 | ---------------*/ 191 | 192 | 193 | /* Netboard */ 194 | .ui.netboard.ad { 195 | width: 580px; 196 | height: 400px; 197 | } 198 | 199 | /*-------------- 200 | Mobile 201 | ---------------*/ 202 | 203 | 204 | /* Large Mobile Banner */ 205 | .ui[class*="large mobile banner"].ad { 206 | width: 320px; 207 | height: 100px; 208 | } 209 | 210 | /* Mobile Leaderboard */ 211 | .ui[class*="mobile leaderboard"].ad { 212 | width: 320px; 213 | height: 50px; 214 | } 215 | 216 | 217 | /******************************* 218 | Types 219 | *******************************/ 220 | 221 | 222 | /* Mobile Sizes */ 223 | .ui.mobile.ad { 224 | display: none; 225 | } 226 | @media only screen and (max-width: 687px) { 227 | .ui.mobile.ad { 228 | display: block; 229 | } 230 | } 231 | 232 | 233 | /******************************* 234 | Variations 235 | *******************************/ 236 | 237 | .ui.centered.ad { 238 | margin-left: auto; 239 | margin-right: auto; 240 | } 241 | .ui.test.ad { 242 | position: relative; 243 | background: #545454; 244 | } 245 | .ui.test.ad:after { 246 | position: absolute; 247 | top: 50%; 248 | left: 50%; 249 | width: 100%; 250 | text-align: center; 251 | -webkit-transform: translateX(-50%) translateY(-50%); 252 | transform: translateX(-50%) translateY(-50%); 253 | content: 'Ad'; 254 | color: #FFFFFF; 255 | font-size: 1em; 256 | font-weight: bold; 257 | } 258 | .ui.mobile.test.ad:after { 259 | font-size: 0.84615385em; 260 | } 261 | .ui.test.ad[data-text]:after { 262 | content: attr(data-text); 263 | } 264 | 265 | 266 | /******************************* 267 | User Variable Overrides 268 | *******************************/ 269 | 270 | -------------------------------------------------------------------------------- /compass/public/assets/semantic/components/search.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * # Semantic UI 2.1.6 - Search 3 | * http://github.com/semantic-org/semantic-ui/ 4 | * 5 | * 6 | * Copyright 2015 Contributors 7 | * Released under the MIT license 8 | * http://opensource.org/licenses/MIT 9 | * 10 | */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.2142em;padding:.73905385em 1.07692308em;font-size:1em;background:#FFF;border:1px solid rgba(0,0,0,.13);color:rgba(0,0,0,.87);box-shadow:0 0 0 0 transparent inset;-webkit-transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;-webkit-transform-origin:center top;transform-origin:center top;background:#FFF;margin-top:.5em;width:18em;border-radius:.2307em;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.08);border:1px solid #DDD;z-index:998}.ui.search>.results>:first-child{border-radius:.2307em .2307em 0 0}.ui.search>.results>:last-child{border-radius:0 0 .2307em .2307em}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.84615385em 1.15384615em;color:rgba(0,0,0,.87);line-height:1.33;border-bottom:1px solid rgba(0,0,0,.06)}.ui.search>.results .result:last-child{border-bottom:none!important}.ui.search>.results .result .image{float:right;overflow:hidden;background:0 0;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{margin:-.14285em 0 0;font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;font-weight:700;font-size:1em;color:rgba(0,0,0,.85)}.ui.search>.results .result .description{margin-top:0;font-size:.92307692em;color:rgba(0,0,0,.4)}.ui.search>.results .result .price{float:right;color:#78CB5B}.ui.search>.results>.message{padding:1em}.ui.search>.results>.message .header{font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1rem;font-weight:700;color:rgba(0,0,0,.87)}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:rgba(0,0,0,.87)}.ui.search>.results>.action{display:block;border-top:none;background:#F3F4F5;padding:.92307692em 1em;color:rgba(0,0,0,.87);font-weight:700;text-align:center}.ui.search>.prompt:focus{border-color:#51A7E8;background:#FFF;color:rgba(0,0,0,.95)}.ui.loading.search .input>i.icon:before{position:absolute;content:'';top:50%;left:50%;margin:-.65384615em 0 0 -.65384615em;width:1.30769231em;height:1.30769231em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>i.icon:after{position:absolute;content:'';top:50%;left:50%;margin:-.65384615em 0 0 -.65384615em;width:1.30769231em;height:1.30769231em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.ui.category.search>.results .category .result:hover,.ui.search>.results .result:hover{background:#F9FAFB}.ui.search .action:hover{background:#E0E0E0}.ui.category.search>.results .category.active{background:#F3F4F5}.ui.category.search>.results .category.active>.name{color:rgba(0,0,0,.87)}.ui.category.search>.results .category .result.active,.ui.search>.results .result.active{position:relative;border-left-color:rgba(0,0,0,.06);background:#F3F4F5;box-shadow:none}.ui.search>.results .result.active .description,.ui.search>.results .result.active .title{color:rgba(0,0,0,.85)}.ui.category.search .results{width:28em}.ui.category.search>.results .category{background:#F3F4F5;box-shadow:none;border-bottom:1px solid rgba(0,0,0,.06);-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category:first-child .name+.result{border-radius:0 .2307em 0 0}.ui.category.search>.results .category .result{background:#FFF;margin-left:100px;border-left:1px solid rgba(0,0,0,.13);border-bottom:1px solid rgba(0,0,0,.06);-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease;padding:.84615385em 1.15384615em}.ui.category.search>.results .category:last-child .result:last-child{border-radius:0 0 .2307em;border-bottom:none}.ui.category.search>.results .category>.name{width:100px;background:0 0;font-family:Arial,'Helvetica Neue',Arial,Helvetica,sans-serif;font-size:1em;float:1em;float:left;padding:.4em 1em;font-weight:700;color:rgba(0,0,0,.4)}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.mini.search{font-size:.69230769em}.ui.small.search{font-size:.92307692em}.ui.search{font-size:1em}.ui.large.search{font-size:1.15384615em}.ui.big.search{font-size:1.30769231em}.ui.huge.search{font-size:1.46153846em}.ui.massive.search{font-size:1.69230769em} --------------------------------------------------------------------------------