├── .dockerignore
├── .gitignore
├── .gitlab-ci.yml
├── .gitmodules
├── Dockerfile
├── Gruntfile.js
├── LICENSE.md
├── README.md
├── app.js
├── app
├── lib
│ ├── animation.js
│ ├── api.js
│ ├── apiauth.js
│ ├── apiroutes.js
│ ├── apiutils.js
│ ├── collaboration.js
│ ├── moduleloader.js
│ ├── passport.js
│ ├── plotting.js
│ ├── plottingapi.js
│ ├── polyfills.js
│ ├── proxy.js
│ ├── python.py
│ ├── redissetup.js
│ ├── requestlogger.js
│ ├── routes.js
│ ├── settings.js
│ ├── settingsapi.js
│ ├── settingsroutes.js
│ ├── user.js
│ └── utils.js
├── modules
│ └── .gitkeep
├── package.json
├── readme.md
└── scripts
│ └── animation-timestamper.js
├── build-whitelist.sh
├── cleanup.sh
├── config_examples
├── config.js
├── global-config-server.js
├── markdown
│ └── provider
│ │ └── PML.md
├── nginx.conf
├── proxy-whitelist.txt
├── vectorLayers.json
└── view.json
├── docker-compose.yml
├── docker-debug.sh
├── docker-install.sh
├── docker-readme.md
├── docker-run.sh
├── gisportal
├── html
├── application
│ └── .gitkeep
├── audio
│ ├── ringtone.mp3
│ └── ringtone.ogg
├── favicon
│ ├── android-icon-144x144.png
│ ├── android-icon-192x192.png
│ ├── android-icon-36x36.png
│ ├── android-icon-48x48.png
│ ├── android-icon-72x72.png
│ ├── android-icon-96x96.png
│ ├── apple-icon-114x114.png
│ ├── apple-icon-120x120.png
│ ├── apple-icon-144x144.png
│ ├── apple-icon-152x152.png
│ ├── apple-icon-180x180.png
│ ├── apple-icon-57x57.png
│ ├── apple-icon-60x60.png
│ ├── apple-icon-72x72.png
│ ├── apple-icon-76x76.png
│ ├── apple-icon-precomposed.png
│ ├── apple-icon.png
│ ├── b0ca35a34665ede409fd52fc4a44f9bc.ico.zip
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon-96x96.png
│ ├── favicon.ico
│ ├── manifest.json
│ ├── ms-icon-144x144.png
│ ├── ms-icon-150x150.png
│ ├── ms-icon-310x310.png
│ └── ms-icon-70x70.png
├── fonts
│ ├── Apache License.txt
│ ├── OpenSans-Bold.ttf
│ ├── OpenSans-BoldItalic.ttf
│ ├── OpenSans-ExtraBold.ttf
│ ├── OpenSans-ExtraBoldItalic.ttf
│ ├── OpenSans-Italic.ttf
│ ├── OpenSans-Light-webfont.eot
│ ├── OpenSans-Light-webfont.svg
│ ├── OpenSans-Light-webfont.ttf
│ ├── OpenSans-Light-webfont.woff
│ ├── OpenSans-Light.ttf
│ ├── OpenSans-LightItalic.ttf
│ ├── OpenSans-Regular-webfont.eot
│ ├── OpenSans-Regular-webfont.svg
│ ├── OpenSans-Regular-webfont.ttf
│ ├── OpenSans-Regular-webfont.woff
│ ├── OpenSans-Regular.ttf
│ ├── OpenSans-Semibold.ttf
│ ├── OpenSans-SemiboldItalic.ttf
│ ├── opensans-semibold-webfont.eot
│ ├── opensans-semibold-webfont.svg
│ ├── opensans-semibold-webfont.ttf
│ ├── opensans-semibold-webfont.woff
│ ├── streamline-24px-filled-in.eot
│ ├── streamline-24px-filled-in.svg
│ ├── streamline-24px-filled-in.ttf
│ ├── streamline-24px-filled-in.woff
│ ├── streamline-24px.eot
│ ├── streamline-24px.svg
│ ├── streamline-24px.ttf
│ └── streamline-24px.woff
├── images
│ ├── gritter-light.png
│ ├── gritter-long-light.png
│ ├── gritter-long.png
│ ├── gritter.png
│ ├── ie-spacer.gif
│ └── trees.jpg
├── img
│ ├── PML-MAP-2.png
│ ├── PML-MAP-2@2x.png
│ ├── PML-MAP-3.jpg
│ ├── PML_LOGO.png
│ ├── Red-signin_Long_base_20dp.png
│ ├── Red-signin_Long_hover_20dp.png
│ ├── Red-signin_Long_press_20dp.png
│ ├── ajax-loader-green.gif
│ ├── ajax-loader.gif
│ ├── ajax-loading-halo-1.gif
│ ├── baselayer-BingMapsAerial.jpg
│ ├── baselayer-BingMapsAerialWithLabels.jpg
│ ├── baselayer-BingMapsOS.jpg
│ ├── baselayer-BingMapsRoad.jpg
│ ├── baselayer-BlackMarble.jpg
│ ├── baselayer-BlueMarble.jpg
│ ├── baselayer-EOX.jpg
│ ├── baselayer-EOXs2cloudless.jpg
│ ├── baselayer-GEBCO.jpg
│ ├── baselayer-OSM.jpg
│ ├── baselayer-none.jpg
│ ├── checkbox.svg
│ ├── cross.png
│ ├── google_default.jpg
│ ├── homepage-slides
│ │ ├── opec1.jpg
│ │ ├── opec2.jpg
│ │ ├── opec3.jpg
│ │ ├── opec4.jpg
│ │ ├── opec5.jpg
│ │ ├── opec6.jpg
│ │ └── opec7.jpg
│ ├── icons
│ │ ├── analyse.png
│ │ ├── analyse@2.png
│ │ ├── analyse@2_light.png
│ │ ├── analyse_light.png
│ │ ├── analyse_light@2.png
│ │ ├── arrow-back.png
│ │ ├── arrow-back@2.png
│ │ ├── arrow-back_light.png
│ │ ├── arrow-back_light@2.png
│ │ ├── arrow.svg
│ │ ├── checkbox.svg
│ │ ├── close.svg
│ │ ├── details.png
│ │ ├── details.svg
│ │ ├── details@2.png
│ │ ├── details_light.png
│ │ ├── details_light@2.png
│ │ ├── download.svg
│ │ ├── dustbin.svg
│ │ ├── graph.svg
│ │ ├── hide.png
│ │ ├── hide.svg
│ │ ├── hide@2.png
│ │ ├── hide_light.png
│ │ ├── hide_light@2.png
│ │ ├── line.svg
│ │ ├── loading.png
│ │ ├── loading@2.png
│ │ ├── loading_light.png
│ │ ├── loading_light@2.png
│ │ ├── map.svg
│ │ ├── options.svg
│ │ ├── polygon.svg
│ │ ├── remove.svg
│ │ ├── reorder.png
│ │ ├── reorder@2.png
│ │ ├── reorder_light.png
│ │ ├── reorder_light@2.png
│ │ ├── satellite.png
│ │ ├── scalebar.png
│ │ ├── scalebar.svg
│ │ ├── scalebar@2.png
│ │ ├── scalebar_light.png
│ │ ├── scalebar_light@2.png
│ │ ├── select-rect.svg
│ │ ├── settings.png
│ │ ├── settings@2.png
│ │ ├── settings_light.png
│ │ ├── settings_light@2.png
│ │ ├── share.svg
│ │ ├── show.png
│ │ ├── show.svg
│ │ ├── show@2.png
│ │ ├── show_light.png
│ │ ├── show_light@2.png
│ │ ├── transfer.svg
│ │ ├── watch.svg
│ │ ├── zoom-in.svg
│ │ └── zoom-out.svg
│ ├── logo.png
│ ├── providers
│ │ ├── cefas.png
│ │ ├── dmi.png
│ │ ├── hcmr.gif
│ │ ├── metu.png
│ │ ├── ogs.png
│ │ └── pml.png
│ ├── s.mp3
│ ├── sign-in-with-google.png
│ ├── sign-in-with-microsoft.png
│ └── yahoo_signin_btn.png
├── js-libs
│ ├── OpenLayers3
│ │ ├── ol-debug.js
│ │ ├── ol.css
│ │ └── ol.js
│ ├── OpenLayers7
│ │ ├── ol-ext.min.css
│ │ ├── ol.css
│ │ ├── ol.js
│ │ └── ol.js.map
│ ├── fuse
│ │ └── fuse.js
│ ├── jquery-nouislider
│ │ ├── jquery.nouislider.js
│ │ └── jquery.nouislider.min.js
│ ├── jquery.add-clear.js
│ ├── jstorage.js
│ ├── modernizr.js
│ ├── moment.js
│ ├── pikaday
│ │ ├── pikaday.css
│ │ ├── pikaday.jquery.js
│ │ └── pikaday.js
│ ├── swipe
│ │ └── swipe.js
│ ├── tooltipster
│ │ ├── css
│ │ │ ├── plugins
│ │ │ │ └── tooltipster
│ │ │ │ │ └── sideTip
│ │ │ │ │ ├── themes
│ │ │ │ │ ├── tooltipster-sideTip-borderless.min.css
│ │ │ │ │ ├── tooltipster-sideTip-light.min.css
│ │ │ │ │ ├── tooltipster-sideTip-noir.min.css
│ │ │ │ │ ├── tooltipster-sideTip-punk.min.css
│ │ │ │ │ └── tooltipster-sideTip-shadow.min.css
│ │ │ │ │ └── tooltipster-sideTip.min.css
│ │ │ ├── themes
│ │ │ │ ├── tooltipster-light.css
│ │ │ │ ├── tooltipster-noir.css
│ │ │ │ ├── tooltipster-punk.css
│ │ │ │ └── tooltipster-shadow.scss
│ │ │ └── tooltipster.scss
│ │ ├── demo
│ │ │ ├── index.html
│ │ │ ├── map.png
│ │ │ ├── reset.css
│ │ │ └── style.css
│ │ ├── doc
│ │ │ ├── css
│ │ │ │ ├── prettify.css
│ │ │ │ ├── reset.css
│ │ │ │ └── style.css
│ │ │ ├── images
│ │ │ │ ├── browser-chrome.png
│ │ │ │ ├── browser-firefox.png
│ │ │ │ ├── browser-ie.png
│ │ │ │ ├── browser-opera.png
│ │ │ │ ├── browser-safari.png
│ │ │ │ ├── favicon.png
│ │ │ │ ├── icons
│ │ │ │ │ ├── icomoon.eot
│ │ │ │ │ ├── icomoon.svg
│ │ │ │ │ ├── icomoon.ttf
│ │ │ │ │ ├── icomoon.woff
│ │ │ │ │ └── icomoond41d.eot
│ │ │ │ ├── large-background.jpg
│ │ │ │ ├── pattern-navy.png
│ │ │ │ ├── social.jpg
│ │ │ │ ├── spiderman.png
│ │ │ │ └── tooltipster.svg
│ │ │ └── js
│ │ │ │ ├── jquery.jgfeed.js
│ │ │ │ ├── lang-css.js
│ │ │ │ ├── prettify.js
│ │ │ │ └── scripts.js
│ │ └── js
│ │ │ ├── tooltipster.bundle.js
│ │ │ └── tooltipster.bundle.min.js
│ └── webrtc_adapter
│ │ ├── adapter.js
│ │ └── utils.js
├── login.js
├── plots
│ └── .gitkeep
└── point_data_template.csv
├── install.py
├── package.json
├── plotting
├── .gitignore
├── README.md
├── data_extractor
│ ├── .gitignore
│ ├── README.md
│ ├── __init__.py
│ ├── analysis_types
│ │ ├── __init__.py
│ │ ├── basic_stats.py
│ │ ├── hovmoller_stats.py
│ │ ├── image_stats.py
│ │ ├── scatter_stats.py
│ │ └── transect_stats.py
│ ├── data_extractor_cli.py
│ ├── extraction_utils
│ │ ├── __init__.py
│ │ ├── analysis_utils.py
│ │ ├── debug.py
│ │ ├── scatter_utils.py
│ │ ├── transect_utils.py
│ │ ├── wcs_extraction.py
│ │ └── wcs_raw_extraction.py
│ ├── extractors
│ │ ├── __init__.py
│ │ ├── basic_extraction.py
│ │ ├── extractor.py
│ │ ├── hovmoller_extraction.py
│ │ ├── irregular_extraction.py
│ │ ├── scatter_extraction.py
│ │ ├── single_test_extraction.py
│ │ └── transect_extraction.py
│ ├── tests
│ │ ├── __init__.py
│ │ └── example_track.csv
│ └── transect_output_test.json
├── palettes.py
├── plots.py
├── plotting
│ ├── __init__.py
│ ├── debug.py
│ ├── logger.py
│ └── status.py
└── testing
│ ├── data
│ ├── data-image-hor.json
│ ├── data-image-vert.json
│ ├── data-image.json
│ ├── extract_request1.json
│ ├── extract_request2.json
│ ├── extract_request3.json
│ ├── hovmoller_request1.json
│ ├── hovmoller_request2.json
│ ├── hovmoller_request3.json
│ ├── oldplotexample.json
│ ├── oldplotexample1.json
│ ├── oldplotexample2.json
│ ├── temperature-format-url.json
│ ├── temperature-format.json
│ ├── temperature.json
│ ├── testrequest1.json
│ ├── testrequest2.json
│ ├── testscatter1.json
│ ├── testscatter1.json:
│ ├── testscatter2.json
│ ├── timeseries-sos.json
│ ├── timeseries-sos2.json
│ ├── transect1.csv
│ ├── transect1.json
│ └── transect2.json
│ ├── dataconversion.py
│ ├── irreg_hov_test.json
│ ├── irregular_test.json
│ └── palette-green.json
├── src
├── css
│ └── scss
│ │ ├── _add-layers-form.scss
│ │ ├── _alerts.scss
│ │ ├── _animation.scss
│ │ ├── _collaboration.scss
│ │ ├── _colours-blue.scss
│ │ ├── _colours-marine-eo.scss
│ │ ├── _colours-modellers.scss
│ │ ├── _colours-petrel.scss
│ │ ├── _colours.scss
│ │ ├── _compare.scss
│ │ ├── _edit-groups.scss
│ │ ├── _export.scss
│ │ ├── _fonts.scss
│ │ ├── _grid.scss
│ │ ├── _history.scss
│ │ ├── _icons.scss
│ │ ├── _indicators.scss
│ │ ├── _jquery.nouislider.scss
│ │ ├── _main.scss
│ │ ├── _mapcontrols.scss
│ │ ├── _metadata-panel.scss
│ │ ├── _notify.scss
│ │ ├── _nv.d3.scss
│ │ ├── _overlay.scss
│ │ ├── _panel-slideout.scss
│ │ ├── _panel.scss
│ │ ├── _plot.scss
│ │ ├── _popup.scss
│ │ ├── _reset.scss
│ │ ├── _scalebar.scss
│ │ ├── _share.scss
│ │ ├── _start.scss
│ │ ├── _streamline-filled-in.scss
│ │ ├── _streamline.scss
│ │ ├── _tables.scss
│ │ ├── _timeline.scss
│ │ ├── _type.scss
│ │ ├── _user.scss
│ │ ├── _vector.scss
│ │ ├── _walkthrough.scss
│ │ ├── gisportal-marine-eo.scss
│ │ ├── gisportal.scss
│ │ ├── gisportal_blue.scss
│ │ ├── gisportal_modellers.scss
│ │ ├── gisportal_petrel.scss
│ │ └── login.scss
├── index.html
├── js
│ ├── API.js
│ ├── EventManager.js
│ ├── Plot.js
│ ├── PlotEditor.js
│ ├── PlotStatus.js
│ ├── addLayersForm.js
│ ├── analytics.js
│ ├── autoLayer.js
│ ├── collaboration-event-bindings.js
│ ├── collaboration.js
│ ├── comparison.js
│ ├── configure.js
│ ├── ddslick.js
│ ├── editLayersForm.js
│ ├── editgroups.js
│ ├── geolocationFilter.js
│ ├── gisportal.js
│ ├── graphing.js
│ ├── impact.js
│ ├── indicators.js
│ ├── layer.js
│ ├── loading.js
│ ├── login.js
│ ├── map-settings.js
│ ├── notify.js
│ ├── notify_settings.js
│ ├── panel-slideout.js
│ ├── panels.js
│ ├── portal.js
│ ├── projectSpecific.js
│ ├── refine.js
│ ├── scalebar.js
│ ├── selectiontools.js
│ ├── share.js
│ ├── templates.js
│ ├── timeline.js
│ ├── ui.js
│ ├── user.js
│ ├── user_feedback.js
│ ├── utils.js
│ ├── vector_layer.js
│ ├── vector_styles.js
│ ├── view.js
│ ├── walkthrough-event-bindings.js
│ ├── walkthrough.js
│ └── webrtc_control.js
└── templates
│ ├── active-plot-component.mst
│ ├── active-plot.mst
│ ├── add-indicator-dropdown.mst
│ ├── add-layers-form.mst
│ ├── add-layers-paginator.mst
│ ├── add-layers-table.mst
│ ├── add-layers-validation.mst
│ ├── browseIndicators.mst
│ ├── categories.mst
│ ├── category-filter-selectlist.mst
│ ├── category-filter-tabs.mst
│ ├── category-filter.mst
│ ├── category-simple-selectlist.mst
│ ├── collaboration-home.mst
│ ├── collaboration-invite.mst
│ ├── collaboration-message.mst
│ ├── collaboration-messenger.mst
│ ├── collaboration-person-local.mst
│ ├── collaboration-person-remote.mst
│ ├── collaboration-status.mst
│ ├── collaboration-video.mst
│ ├── collaboration.mst
│ ├── edit-group-form.mst
│ ├── edit-groups-table.mst
│ ├── edit-layers-table.mst
│ ├── export-raw.mst
│ ├── graph.mst
│ ├── indicator.mst
│ ├── map-settings.mst
│ ├── plot-data.mst
│ ├── plot-popup.mst
│ ├── plot-status.mst
│ ├── refine.mst
│ ├── scalebar-preview.mst
│ ├── scalebar.mst
│ ├── server-form.mst
│ ├── share-logged-out.mst
│ ├── start.mst
│ ├── tab-analysis.mst
│ ├── tab-details.mst
│ ├── tab-dimensions.mst
│ ├── tab-vectorstyles.mst
│ ├── terms-and-conditions-text.mst
│ ├── tooltip-layerordermove.mst
│ ├── tooltip-next-previous.mst
│ ├── tooltip-refine-external-details.mst
│ ├── tooltip-refinedetails.mst
│ ├── tooltip-scalebar.mst
│ ├── user-feedback-popup.mst
│ ├── user.mst
│ ├── vector-style-ui.mst
│ ├── walkthrough-controls.mst
│ ├── walkthrough-form.mst
│ ├── walkthrough-management-table.mst
│ ├── webrtc-inbound-call.mst
│ └── webrtc-outbound-call.mst
├── test
├── app
│ └── lib
│ │ ├── animation.js
│ │ ├── api.js
│ │ ├── apiauth.js
│ │ ├── apiutils.js
│ │ ├── moduleloader.js
│ │ ├── requestlogger.js
│ │ └── utils.js
├── frontend.js
├── mocha.opts
└── setup.js
├── test_dependencies
├── app
│ └── modules
│ │ └── test
│ │ └── index.js
├── config
│ └── site_settings
│ │ └── 127.0.0.1:6789
│ │ ├── config-server.js
│ │ ├── rsg.pml.ac.uk-thredds-wms-CCI_ALL-v3.0-5DAY.json
│ │ ├── rsg.pml.ac.uk-thredds-wms-CCI_ALL-v3.0-DAILY.json
│ │ └── user_a.user@pml.ac.uk
│ │ └── rsg.pml.ac.uk-thredds-wms-CCI_ALL-v3.0-MONTHLY.json
├── expected
│ ├── get_cache_layers.json
│ ├── get_cache_servers.json
│ └── plotting
│ │ └── animation
│ │ ├── cd1ae320a55777f114ee6177bd409728c0954716-plot.html
│ │ ├── cd1ae320a55777f114ee6177bd409728c0954716-request.json
│ │ ├── cd1ae320a55777f114ee6177bd409728c0954716-status.json
│ │ ├── cd1ae320a55777f114ee6177bd409728c0954716-video.mp4
│ │ └── cd1ae320a55777f114ee6177bd409728c0954716-video.webm
├── init.js
├── resources
│ └── plotting
│ │ └── animation
│ │ ├── 2eb07c2130bf866a984ec65a488a13184d162bd4_2015-11-01T00-00:00.000Z.png
│ │ ├── 2eb07c2130bf866a984ec65a488a13184d162bd4_2015-12-01T00-00:00.000Z.png
│ │ └── cd1ae320a55777f114ee6177bd409728c0954716-request.json
└── uploads
│ └── testFileUpload.txt
├── uploads
├── .gitkeep
├── archive
│ └── .gitkeep
└── cache
│ └── .gitkeep
└── views
├── authorised.jade
├── collaboration-dashboard.jade
├── collaboration-index.jade
├── dashboard.jade
├── index.jade
└── login.jade
/.dockerignore:
--------------------------------------------------------------------------------
1 | .git*
2 | node_modules/*
3 | .sass-cache
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.orig
2 | *.pyc
3 | .DS_Store
4 | .vscode
5 | tags
6 | .sass-cache/*
7 | .tern-project
8 | .trunk
9 | config/*
10 | html/GISportal.js
11 | html/GISportal.min.js
12 | html/all_templates.mst
13 | html/application/*
14 | html/css/*
15 | html/index.html
16 | html/plots/*
17 | !html/plots/.gitkeep
18 | jsconfig.json
19 | node_modules
20 | logs/*
21 | typings.json
22 | typings/*
23 |
24 | uploads/*
25 | !uploads/.gitkeep
26 | !uploads/archive/
27 | !uploads/cache/
28 |
29 | uploads/archive/*
30 | !uploads/archive/.gitkeep
31 |
32 | uploads/cache/*
33 | !uploads/cache/.gitkeep
34 |
35 | app/modules/*
36 | !app/modules/.gitkeep
37 |
--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------
1 | image: pmlrsg/gisportal-host
2 |
3 | stages:
4 | - build
5 |
6 | job1:
7 | only:
8 | - master
9 | - dev
10 | - testing
11 | stage: build
12 | script:
13 | - node --version
14 | - npm --version
15 | - npm install --silent --depth 0
16 | - grunt
17 | - /usr/bin/redis-server --daemonize yes
18 | - npm test
19 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "src/libs/nvd3"]
2 | path = src/libs/nvd3
3 | url = https://github.com/pmlrsg/nvd3
4 |
--------------------------------------------------------------------------------
/app/lib/apiroutes.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This module provides the routes for the API.
3 | */
4 |
5 | var express = require('express');
6 | var api = require('./api.js');
7 | var apiAuth = require('./apiauth.js');
8 |
9 | var router = express.Router();
10 | var apiRouter = express.Router({
11 | mergeParams: true
12 | });
13 |
14 | module.exports = router;
15 |
16 | /**
17 | * Declares the api route to use the token authentication and apiRouter
18 | */
19 | router.use('/api/1/:token/', apiAuth.authenticateToken, apiRouter);
20 |
21 | /**
22 | * Refresh the api user's cache file for the provided WMS url. Admins may refresh global cache files or other user's
23 | * cache files by specifying a username.
24 | * Query parameters:
25 | * url: WMSurl to refresh
26 | * user: usename of the cache file owner or 'global'
27 | */
28 | apiRouter.get('/refresh_wms_cache', apiAuth.denyGuest, api.refresh_wms_cache);
29 |
30 | apiRouter.get('/refresh_all_wms_cache', apiAuth.requireAdmin, api.refresh_all_wms_cache);
31 |
32 | /**
33 | * Get all the cache files the user has access to in a JSON string.
34 | */
35 | apiRouter.get('/get_cache', api.get_cache);
36 |
37 | /**
38 | * Get the important details of each cache file (server) the user has access to with or without a summary of their layers in a JSON string.
39 | */
40 | apiRouter.get('/get_cache_:type', api.get_cache_list);
41 |
--------------------------------------------------------------------------------
/app/lib/apiutils.js:
--------------------------------------------------------------------------------
1 | /**
2 | * This module provides functions shared by different parts of the api and api modules
3 | */
4 |
5 | var apiAuth = require('./apiauth.js');
6 | var settingsApi = require('./settingsapi.js');
7 | var utils = require('./utils.js');
8 |
9 | var apiUtils = {};
10 | module.exports = apiUtils;
11 |
12 | apiUtils.getCache = function(req) {
13 | var username = apiAuth.getUsername(req);
14 | var domain = utils.getDomainName(req); // Gets the given domain
15 | var permission = apiAuth.getAccessLevel(req, domain);
16 | return settingsApi.get_cache(username, domain, permission);
17 | };
18 |
19 | apiUtils.findServerURL = function(req, serverName, cache) {
20 | if (!cache && req) {
21 | cache = apiUtils.getCache(req);
22 | }
23 | if (cache) {
24 | for (var i = 0; i < cache.length; i++) {
25 | if (cache[i].serverName == serverName) {
26 | return cache[i].wmsURL;
27 | }
28 | }
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/app/lib/moduleloader.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs');
2 | var path = require('path');
3 |
4 | var moduleLoader = {};
5 | module.exports = moduleLoader;
6 |
7 | moduleLoader.loadModules = function() {
8 | var directories = getDirectories('../modules');
9 | var modules = {};
10 | for (var i = 0; i < directories.length; i++) {
11 | var modName = path.basename(directories[i]);
12 | modules[modName] = require(directories[i]);
13 | }
14 | return modules;
15 | };
16 |
17 | function getDirectories(srcpath) {
18 | var absPath = path.resolve(__dirname, srcpath);
19 | var dir = fs.readdirSync(absPath).filter(function(file) {
20 | var filePath = path.join(absPath, file);
21 | return fs.statSync(filePath).isDirectory();
22 | });
23 | for (var i = 0; i < dir.length; i++) {
24 | dir[i] = path.join(absPath, dir[i]);
25 | }
26 | return dir;
27 | }
28 |
--------------------------------------------------------------------------------
/app/lib/passport.js:
--------------------------------------------------------------------------------
1 |
2 | var passport = require('passport');
3 | var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
4 | const SamlStrategy = require('passport-saml').Strategy
5 |
6 | module.exports = passport;
7 |
8 | passport.init = function(config) {
9 | console.log();
10 | console.log("List of domains with authentication settings:");
11 | for(var domain in config){
12 | if(config[domain].auth){
13 | console.log(domain.replace(/_/g, "/"));
14 | // Google OAuth
15 | if(config[domain].auth.google) {
16 | passport.use(domain+'_google',new GoogleStrategy({
17 | clientID: config[domain].auth.google.clientid,
18 | clientSecret: config[domain].auth.google.clientsecret,
19 | callbackURL: config[domain].auth.google.callback,
20 | scope: config[domain].auth.google.scope,
21 | prompt: config[domain].auth.google.prompt
22 | },
23 | function(token, tokenSecret, profile, done) {
24 | return done(null, profile);
25 | }
26 | ));
27 | }
28 | // SAML
29 | if(config[domain].auth.saml) {
30 | passport.use(domain+'_saml', new SamlStrategy({
31 | entryPoint: config[domain].auth.saml.entryPoint,
32 | issuer: config[domain].auth.saml.issuer,
33 | callbackUrl: config[domain].auth.saml.callbackUrl,
34 | cert: config[domain].auth.saml.cert
35 | },
36 | function (profile, done) {
37 | return done(null, profile)
38 | }
39 | ))
40 | }
41 |
42 | }
43 | }
44 | console.log();
45 |
46 | passport.serializeUser(function(user, done) {
47 | done(null, user);
48 | });
49 |
50 | passport.deserializeUser(function(user, done) {
51 | done(null, user);
52 | });
53 | };
54 |
55 |
--------------------------------------------------------------------------------
/app/lib/polyfills.js:
--------------------------------------------------------------------------------
1 | if (!String.prototype.startsWith) {
2 | String.prototype.startsWith = function(searchString, position) {
3 | position = position || 0;
4 | return this.substr(position, searchString.length) === searchString;
5 | };
6 | }
7 |
8 | if (!String.prototype.endsWith) {
9 | String.prototype.endsWith = function(searchString, position) {
10 | var subjectString = this.toString();
11 | if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
12 | position = subjectString.length;
13 | }
14 | position -= searchString.length;
15 | var lastIndex = subjectString.lastIndexOf(searchString, position);
16 | return lastIndex !== -1 && lastIndex === position;
17 | };
18 | }
19 |
20 | if (!String.prototype.includes) {
21 | String.prototype.includes = function(search, start) {
22 | 'use strict';
23 | if (typeof start !== 'number') {
24 | start = 0;
25 | }
26 |
27 | if (start + search.length > this.length) {
28 | return false;
29 | } else {
30 | return this.indexOf(search, start) !== -1;
31 | }
32 | };
33 | }
--------------------------------------------------------------------------------
/app/lib/python.py:
--------------------------------------------------------------------------------
1 | import argparse
2 |
3 |
4 |
5 | parser = argparse.ArgumentParser()
6 | parser.add_argument("-t", "--type", action="store", dest="extract_type", help="Extraction type to perform", required=True, choices=["basic","irregular","trans-lat","trans-long","trans-time"])
7 | parser.add_argument("-o", "--output", action="store", dest="output", help="Choose the output type (only json is currently available)", required=False, choices=["json"], default="json")
8 | parser.add_argument("-url", "--wcs_url", action="store", dest="wcs_url", help="The URL of the Web Coverage Service to get data from", required=False)
9 | parser.add_argument("-var", "--variable", action="store", dest="wcs_variable", help="The variable/coverage to request from WCS", required=False)
10 | parser.add_argument("-v", "--debug", action="store_true", dest="debug", help="a debug flag - if passed there will be a tonne of log output and all interim files will be saved", required=False)
11 | parser.add_argument("-d", "--depth", action="store", dest="depth", help="an optional depth parameter for sending to WCS", required=False, default=0)
12 | parser.add_argument("-g", "--geom", action="store", dest="geom", help="A string representation of teh polygon to extract", required=False, default="POLYGON((-28.125 43.418,-19.512 43.77,-18.809 34.453,-27.07 34.629,-28.125 43.418))")
13 | parser.add_argument("-time", action="store", dest="time", help="A time string for in the format startdate/enddate or a single date", required=False)
14 | args = parser.parse_args()
15 |
16 | print args
17 |
18 | print args.extract_type
--------------------------------------------------------------------------------
/app/lib/redissetup.js:
--------------------------------------------------------------------------------
1 |
2 | var redis = {};
3 |
4 | module.exports = redis;
5 |
6 | redis.startRedis = function(app, config) {
7 | // Redis config
8 | var url = require('url');
9 | var redis = require('redis');
10 |
11 | var redisConfig = url.parse(config.redisURL);
12 | var redisClient = redis.createClient(redisConfig.port, redisConfig.hostname);
13 |
14 | redisClient
15 | .on('error', function(err) {
16 | console.log('Error connecting to redis %j', err);
17 | }).on('connect', function() {
18 | console.log('Connected to redis.');
19 | }).on('ready', function() {
20 | console.log('Redis client ready.');
21 | });
22 |
23 | return redisClient;
24 | };
--------------------------------------------------------------------------------
/app/modules/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/app/modules/.gitkeep
--------------------------------------------------------------------------------
/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "collaboration-suite",
3 | "description": "real-time collaboration tools for GIS Portal",
4 | "version": "0.0.1",
5 | "dependencies": {
6 | "express": "~4.8.5",
7 | "socket.io": "~1.3.5",
8 | "cookie": "~0.1.2",
9 | "connect": "~3.1.1",
10 | "cookie-parser": "~1.3.2",
11 | "express-sessions": "~1.0.5",
12 | "express-session": "~1.7.6",
13 | "passport": "~0.2.0",
14 | "passport-google": "~0.3.0",
15 | "passport-google-oauth": "~0.1.5",
16 | "redis": "~0.12.1",
17 | "connect-redis": "~2.0.0",
18 | "jade": "~1.10.0"
19 | },
20 | "engines": {
21 | "node": ">= 0.8.0",
22 | "npm": ">= 1.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/scripts/animation-timestamper.js:
--------------------------------------------------------------------------------
1 | var async = require('async');
2 | var Jimp = require('jimp');
3 |
4 | // Create queue
5 | var queue = async.queue(processImage, 2);
6 |
7 | // Preload fonts
8 | var fontB = null;
9 | var fontW = null;
10 | Jimp.loadFont(Jimp.FONT_SANS_16_BLACK).then(function(font) {
11 | fontB = font;
12 | });
13 | Jimp.loadFont(Jimp.FONT_SANS_16_WHITE).then(function(font) {
14 | fontW = font;
15 | });
16 |
17 | process.on('message', function(options) {
18 | // Add each image received to the queue
19 | queue.push(options, imageDone);
20 | });
21 |
22 | /**
23 | * Process an image to stamp it's ID (time) in the corner
24 | * @param {object} options The image options
25 | * @param {Function} next Function to call on completion or error
26 | */
27 | function processImage(options, next) {
28 | if (fontB === null || fontW === null) {
29 | // If the fonts aren't ready yet then wait and try again
30 | setTimeout(function() {
31 | processImage(options, next);
32 | }, 50);
33 | return;
34 | }
35 |
36 | Jimp.read(options.tempPath, function(err, image) {
37 | if (err) {
38 | // Convert err to string as it is an unusual object type
39 | err = err.toString();
40 | return next(err, options);
41 | }
42 | image.print(fontB, 10, 10, options.id);
43 | image.print(fontW, 11, 11, options.id);
44 | image.write(options.tempPath, function(err) {
45 | if (err) {
46 | err = err.toString();
47 | }
48 | return next(err, options);
49 | });
50 | });
51 | }
52 |
53 | /**
54 | * When an image has been processed, send it's details back to the parent process
55 | * @param {string} err An error string or null
56 | * @param {object} options The image options
57 | */
58 | function imageDone(err, options) {
59 | if (err) {
60 | queue.kill();
61 | options.err = err;
62 | }
63 | process.send(options);
64 | }
--------------------------------------------------------------------------------
/build-whitelist.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # This script will find all domains used by configs and append them to the proxy whitelist.
4 | # If the whitelist doesn't exist at server startup, this script is run by the server after copying in the default whitelist
5 |
6 | find -L ./config -name "*.json"\
7 | -not -name "*overview.json"\
8 | -not -name "*_walkthrough.json"\
9 | -not -name "*vectorLayers.json"\
10 | -not -name "*dictionary.json"\
11 | -not -name "members.json"\
12 | | sed "s|-.*$||g"\
13 | | sed "s|.*/||g"\
14 | | sed 's|$|/**|'\
15 | | sort\
16 | | uniq\
17 | >> ./config/proxy-whitelist.txt
18 |
--------------------------------------------------------------------------------
/config_examples/global-config-server.js:
--------------------------------------------------------------------------------
1 | global.config = {
2 | // the port that the node application will run on
3 | appPort: 6789,
4 | // redis connection settings
5 | redisURL: 'http://localhost:6379/' ,
6 | session : {
7 | secret : 'SECRET',
8 | age : 0
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/config_examples/markdown/provider/PML.md:
--------------------------------------------------------------------------------
1 | **Provider:** [Plymouth Marine Laboratory](http://www.pml.ac.uk/)
2 |
3 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc id nulla vel nisl pretium faucibus. Vivamus pellentesque semper sapien at maximus. Nam quis massa ullamcorper, ornare urna ac, condimentum leo. Nam ultricies placerat risus et pretium. Donec sagittis vel dolor a feugiat. Sed sapien erat, vulputate efficitur condimentum id, egestas ut leo. Pellentesque in ullamcorper metus, in mattis magna.
4 |
5 | **Regional Summary:** Global
6 |
7 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc id nulla vel nisl pretium faucibus. Vivamus pellentesque semper sapien at maximus. Nam quis massa ullamcorper, ornare urna ac, condimentum leo. Nam ultricies placerat risus et pretium. Donec sagittis vel dolor a feugiat. Sed sapien erat, vulputate efficitur condimentum id, egestas ut leo. Pellentesque in ullamcorper metus, in mattis magna.
8 |
9 | **Contact:** Stefano Ciavatta,
10 | [example@pml.ac.uk](mailto:example@pml.ac.uk)
11 |
12 |
13 |
--------------------------------------------------------------------------------
/config_examples/nginx.conf:
--------------------------------------------------------------------------------
1 | upstream node_servers {
2 | server localhost:6789;
3 | }
4 |
5 | server {
6 | listen *:80;
7 |
8 | location /. { ## Disable .htaccess and other hidden files
9 | return 404;
10 | }
11 |
12 | location / {
13 | try_files @uri @location_node;
14 | }
15 |
16 | error_page 403 /403.html;
17 | error_page 401 /403.html;
18 | location = /403.html {
19 | root /etc/nginx/html;
20 | internal;
21 | }
22 |
23 | location @location_node {
24 | proxy_pass http://node_servers;
25 | proxy_http_version 1.1;
26 | proxy_set_header Upgrade $http_upgrade;
27 | proxy_set_header Connection "upgrade";
28 |
29 | proxy_redirect off;
30 | proxy_set_header Host $host;
31 | proxy_set_header X-Real-IP $remote_addr;
32 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
33 | proxy_set_header X-Forwarded-Host $server_name;
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/config_examples/proxy-whitelist.txt:
--------------------------------------------------------------------------------
1 | oceancolour.org/**
2 | rsg.pml.ac.uk/**
3 | vortices.npm.ac.uk/**
4 | wci.earth2observe.eu/**
5 |
--------------------------------------------------------------------------------
/config_examples/view.json:
--------------------------------------------------------------------------------
1 | {
2 | "_comment":"THESE FILES GOES INTO THE DOMAIN CONFIG FOLDER INSIDE ITS OWN 'VIEWS' FOLDER",
3 |
4 |
5 |
6 |
7 |
8 | "_comment":"The title of the view for the user to see",
9 | "title": "Example View",
10 |
11 | "_comment":"The bounds of the area you would like the view to zoom to (Must be in degrees)",
12 | "bounds": [-10.723,49.219,2.637,62.402],
13 |
14 | "_comment":"The date you would like the view to load",
15 | "date": "2009-11-22",
16 |
17 | "_comment":"Would you like to display lat/lon graticules?",
18 | "graticules": false,
19 |
20 | "_comment":"Would you like to display different border lines? (0 if none)",
21 | "borders": "countries_all_black",
22 |
23 | "_comment":"Would you like to display a different basemap?",
24 | "baseMap": false,
25 |
26 | "_comment":"Would you like to display a different projection? (Will only be displayed if compatible with the basemap",
27 | "projection": "EPSG:4326",
28 |
29 | "_comment":"Set to true if you would like to prevent the user from dragging the map",
30 | "noPan": true,
31 |
32 | "_comment":"Set to true if you would like to prevent the user from zooming in and out of the map",
33 | "noZoom": true,
34 |
35 | "_comment":"This refines the layers you want to list",
36 | "layerListFilter": [
37 | {
38 | "tags":{
39 | "data_provider":"CEH",
40 | "interval":"Daily"
41 | }
42 | },
43 | {
44 | "tags":{
45 | "data_provider":"CNRS"
46 | }
47 | }
48 | ],
49 |
50 | "_comment":"This refines the layers you want to load (Know that if you have a list filter the load filter will have to match layers in the filtered)",
51 | "layerLoadFilter": [
52 | {
53 | "tags":{
54 | "data_provider":"CEH",
55 | "interval":"Daily"
56 | },
57 | "urlName":"SWnet"
58 | },
59 | {
60 | "tags":{
61 | "data_provider":"CNRS",
62 | "interval":"Daily"
63 | },
64 | "urlName":"SWnet"
65 | }
66 | ]
67 | }
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.1'
2 |
3 | services:
4 |
5 | gisportal:
6 | container_name: gisportal
7 | #image: container.pml.space/web-development/e-shape/dive-frontend
8 | build: gisportal
9 | ports:
10 | - "80:6789"
11 | - "9229:9229"
12 | volumes:
13 | - /usr/share/GISportal:/var/portal/GISportal/config
14 |
15 |
16 |
--------------------------------------------------------------------------------
/docker-debug.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # This script is the ENTRYPOINT for the docker container; it starts a Redis daemon and
4 | # fires up node inspector for debugging.
5 | #
6 |
7 | # Add the plotting and extractor paths to python
8 | export PYTHONPATH="$PYTHONPATH:/app/GISportal/plotting:/app/GISportal/plotting/data_extractor"
9 |
10 | # build the app from the source files
11 | cd /app/GISportal
12 | grunt
13 |
14 | npm -g install node-inspector
15 |
16 | #start redis
17 | /usr/bin/redis-server --daemonize yes;
18 |
19 | # start the app
20 | node-debug --web-host 0.0.0.0 /app/GISportal/app.js
21 |
--------------------------------------------------------------------------------
/docker-install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # This runs the initial setup script, so must be run from docker interactively, e.g.
4 | #
5 | # docker run -v /usr/share/GISportal:/app/GISportal/config -it pmlrsg/gisportal /app/GISportal/docker-install.sh
6 | #
7 | export SOURCE="docker"
8 | cd /app/GISportal/
9 | ./install.sh
10 |
11 |
--------------------------------------------------------------------------------
/docker-run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # This script is the ENTRYPOINT for the docker container; it starts a Redis daemon and
4 | # fires up node.
5 | #
6 |
7 | # Add the plotting and extractor paths to python
8 | export PYTHONPATH="$PYTHONPATH:/var/portal/GISportal/plotting:/var/portal/GISportal/plotting/data_extractor"
9 |
10 | # build the app from the source files
11 | cd /var/portal/GISportal
12 | #grunt
13 |
14 | #start redis
15 | /usr/bin/redis-server --daemonize yes;
16 |
17 | source /var/portal/.nvm/nvm.sh
18 |
19 | # start the app
20 | while true
21 | do
22 | #/usr/bin/node /var/portal/GISportal/app.js > /var/portal/GISportal/config/app.log
23 | #nvm run v10.24.1 --inspect-brk=0.0.0.0 /var/portal/GISportal/app.js >> /var/portal/GISportal/config/app.log
24 | nvm run v10.24.1 /var/portal/GISportal/app.js >> /var/portal/GISportal/config/app.log
25 | #nvm run v6.17.1 /var/portal/GISportal/app.js >> /var/portal/GISportal/config/app.log
26 | sleep 600
27 | done
28 |
--------------------------------------------------------------------------------
/gisportal:
--------------------------------------------------------------------------------
1 | .
--------------------------------------------------------------------------------
/html/application/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/application/.gitkeep
--------------------------------------------------------------------------------
/html/audio/ringtone.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/audio/ringtone.mp3
--------------------------------------------------------------------------------
/html/audio/ringtone.ogg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/audio/ringtone.ogg
--------------------------------------------------------------------------------
/html/favicon/android-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/android-icon-144x144.png
--------------------------------------------------------------------------------
/html/favicon/android-icon-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/android-icon-192x192.png
--------------------------------------------------------------------------------
/html/favicon/android-icon-36x36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/android-icon-36x36.png
--------------------------------------------------------------------------------
/html/favicon/android-icon-48x48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/android-icon-48x48.png
--------------------------------------------------------------------------------
/html/favicon/android-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/android-icon-72x72.png
--------------------------------------------------------------------------------
/html/favicon/android-icon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/android-icon-96x96.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-114x114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-114x114.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-120x120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-120x120.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-144x144.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-152x152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-152x152.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-180x180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-180x180.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-57x57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-57x57.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-60x60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-60x60.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-72x72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-72x72.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-76x76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-76x76.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon-precomposed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon-precomposed.png
--------------------------------------------------------------------------------
/html/favicon/apple-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/apple-icon.png
--------------------------------------------------------------------------------
/html/favicon/b0ca35a34665ede409fd52fc4a44f9bc.ico.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/b0ca35a34665ede409fd52fc4a44f9bc.ico.zip
--------------------------------------------------------------------------------
/html/favicon/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 | #ffffff
--------------------------------------------------------------------------------
/html/favicon/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/favicon-16x16.png
--------------------------------------------------------------------------------
/html/favicon/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/favicon-32x32.png
--------------------------------------------------------------------------------
/html/favicon/favicon-96x96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/favicon-96x96.png
--------------------------------------------------------------------------------
/html/favicon/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/favicon.ico
--------------------------------------------------------------------------------
/html/favicon/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "App",
3 | "icons": [
4 | {
5 | "src": "\/android-icon-36x36.png",
6 | "sizes": "36x36",
7 | "type": "image\/png",
8 | "density": "0.75"
9 | },
10 | {
11 | "src": "\/android-icon-48x48.png",
12 | "sizes": "48x48",
13 | "type": "image\/png",
14 | "density": "1.0"
15 | },
16 | {
17 | "src": "\/android-icon-72x72.png",
18 | "sizes": "72x72",
19 | "type": "image\/png",
20 | "density": "1.5"
21 | },
22 | {
23 | "src": "\/android-icon-96x96.png",
24 | "sizes": "96x96",
25 | "type": "image\/png",
26 | "density": "2.0"
27 | },
28 | {
29 | "src": "\/android-icon-144x144.png",
30 | "sizes": "144x144",
31 | "type": "image\/png",
32 | "density": "3.0"
33 | },
34 | {
35 | "src": "\/android-icon-192x192.png",
36 | "sizes": "192x192",
37 | "type": "image\/png",
38 | "density": "4.0"
39 | }
40 | ]
41 | }
--------------------------------------------------------------------------------
/html/favicon/ms-icon-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/ms-icon-144x144.png
--------------------------------------------------------------------------------
/html/favicon/ms-icon-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/ms-icon-150x150.png
--------------------------------------------------------------------------------
/html/favicon/ms-icon-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/ms-icon-310x310.png
--------------------------------------------------------------------------------
/html/favicon/ms-icon-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/favicon/ms-icon-70x70.png
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Bold.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-ExtraBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-ExtraBold.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-ExtraBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-ExtraBoldItalic.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Italic.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Light-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Light-webfont.eot
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Light-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Light-webfont.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Light-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Light-webfont.woff
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Light.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-LightItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-LightItalic.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Regular-webfont.eot
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Regular-webfont.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Regular-webfont.woff
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Regular.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-Semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-Semibold.ttf
--------------------------------------------------------------------------------
/html/fonts/OpenSans-SemiboldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/OpenSans-SemiboldItalic.ttf
--------------------------------------------------------------------------------
/html/fonts/opensans-semibold-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/opensans-semibold-webfont.eot
--------------------------------------------------------------------------------
/html/fonts/opensans-semibold-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/opensans-semibold-webfont.ttf
--------------------------------------------------------------------------------
/html/fonts/opensans-semibold-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/opensans-semibold-webfont.woff
--------------------------------------------------------------------------------
/html/fonts/streamline-24px-filled-in.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/streamline-24px-filled-in.eot
--------------------------------------------------------------------------------
/html/fonts/streamline-24px-filled-in.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/streamline-24px-filled-in.ttf
--------------------------------------------------------------------------------
/html/fonts/streamline-24px-filled-in.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/streamline-24px-filled-in.woff
--------------------------------------------------------------------------------
/html/fonts/streamline-24px.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/streamline-24px.eot
--------------------------------------------------------------------------------
/html/fonts/streamline-24px.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/streamline-24px.ttf
--------------------------------------------------------------------------------
/html/fonts/streamline-24px.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/fonts/streamline-24px.woff
--------------------------------------------------------------------------------
/html/images/gritter-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/images/gritter-light.png
--------------------------------------------------------------------------------
/html/images/gritter-long-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/images/gritter-long-light.png
--------------------------------------------------------------------------------
/html/images/gritter-long.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/images/gritter-long.png
--------------------------------------------------------------------------------
/html/images/gritter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/images/gritter.png
--------------------------------------------------------------------------------
/html/images/ie-spacer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/images/ie-spacer.gif
--------------------------------------------------------------------------------
/html/images/trees.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/images/trees.jpg
--------------------------------------------------------------------------------
/html/img/PML-MAP-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/PML-MAP-2.png
--------------------------------------------------------------------------------
/html/img/PML-MAP-2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/PML-MAP-2@2x.png
--------------------------------------------------------------------------------
/html/img/PML-MAP-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/PML-MAP-3.jpg
--------------------------------------------------------------------------------
/html/img/PML_LOGO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/PML_LOGO.png
--------------------------------------------------------------------------------
/html/img/Red-signin_Long_base_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/Red-signin_Long_base_20dp.png
--------------------------------------------------------------------------------
/html/img/Red-signin_Long_hover_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/Red-signin_Long_hover_20dp.png
--------------------------------------------------------------------------------
/html/img/Red-signin_Long_press_20dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/Red-signin_Long_press_20dp.png
--------------------------------------------------------------------------------
/html/img/ajax-loader-green.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/ajax-loader-green.gif
--------------------------------------------------------------------------------
/html/img/ajax-loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/ajax-loader.gif
--------------------------------------------------------------------------------
/html/img/ajax-loading-halo-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/ajax-loading-halo-1.gif
--------------------------------------------------------------------------------
/html/img/baselayer-BingMapsAerial.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-BingMapsAerial.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-BingMapsAerialWithLabels.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-BingMapsAerialWithLabels.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-BingMapsOS.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-BingMapsOS.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-BingMapsRoad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-BingMapsRoad.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-BlackMarble.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-BlackMarble.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-BlueMarble.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-BlueMarble.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-EOX.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-EOX.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-EOXs2cloudless.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-EOXs2cloudless.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-GEBCO.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-GEBCO.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-OSM.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-OSM.jpg
--------------------------------------------------------------------------------
/html/img/baselayer-none.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/baselayer-none.jpg
--------------------------------------------------------------------------------
/html/img/checkbox.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/cross.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/cross.png
--------------------------------------------------------------------------------
/html/img/google_default.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/google_default.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec1.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec2.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec3.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec4.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec5.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec6.jpg
--------------------------------------------------------------------------------
/html/img/homepage-slides/opec7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/homepage-slides/opec7.jpg
--------------------------------------------------------------------------------
/html/img/icons/analyse.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/analyse.png
--------------------------------------------------------------------------------
/html/img/icons/analyse@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/analyse@2.png
--------------------------------------------------------------------------------
/html/img/icons/analyse@2_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/analyse@2_light.png
--------------------------------------------------------------------------------
/html/img/icons/analyse_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/analyse_light.png
--------------------------------------------------------------------------------
/html/img/icons/analyse_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/analyse_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/arrow-back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/arrow-back.png
--------------------------------------------------------------------------------
/html/img/icons/arrow-back@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/arrow-back@2.png
--------------------------------------------------------------------------------
/html/img/icons/arrow-back_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/arrow-back_light.png
--------------------------------------------------------------------------------
/html/img/icons/arrow-back_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/arrow-back_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/checkbox.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/close.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
16 |
18 |
19 |
21 | image/svg+xml
22 |
24 |
25 |
26 |
27 |
28 |
30 |
34 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/html/img/icons/details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/details.png
--------------------------------------------------------------------------------
/html/img/icons/details@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/details@2.png
--------------------------------------------------------------------------------
/html/img/icons/details_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/details_light.png
--------------------------------------------------------------------------------
/html/img/icons/details_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/details_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/hide.png
--------------------------------------------------------------------------------
/html/img/icons/hide@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/hide@2.png
--------------------------------------------------------------------------------
/html/img/icons/hide_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/hide_light.png
--------------------------------------------------------------------------------
/html/img/icons/hide_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/hide_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/loading.png
--------------------------------------------------------------------------------
/html/img/icons/loading@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/loading@2.png
--------------------------------------------------------------------------------
/html/img/icons/loading_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/loading_light.png
--------------------------------------------------------------------------------
/html/img/icons/loading_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/loading_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/remove.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/reorder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/reorder.png
--------------------------------------------------------------------------------
/html/img/icons/reorder@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/reorder@2.png
--------------------------------------------------------------------------------
/html/img/icons/reorder_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/reorder_light.png
--------------------------------------------------------------------------------
/html/img/icons/reorder_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/reorder_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/satellite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/satellite.png
--------------------------------------------------------------------------------
/html/img/icons/scalebar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/scalebar.png
--------------------------------------------------------------------------------
/html/img/icons/scalebar.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/scalebar@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/scalebar@2.png
--------------------------------------------------------------------------------
/html/img/icons/scalebar_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/scalebar_light.png
--------------------------------------------------------------------------------
/html/img/icons/scalebar_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/scalebar_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/settings.png
--------------------------------------------------------------------------------
/html/img/icons/settings@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/settings@2.png
--------------------------------------------------------------------------------
/html/img/icons/settings_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/settings_light.png
--------------------------------------------------------------------------------
/html/img/icons/settings_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/settings_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/show.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/show.png
--------------------------------------------------------------------------------
/html/img/icons/show.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/show@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/show@2.png
--------------------------------------------------------------------------------
/html/img/icons/show_light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/show_light.png
--------------------------------------------------------------------------------
/html/img/icons/show_light@2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/icons/show_light@2.png
--------------------------------------------------------------------------------
/html/img/icons/watch.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/zoom-in.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/icons/zoom-out.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/html/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/logo.png
--------------------------------------------------------------------------------
/html/img/providers/cefas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/providers/cefas.png
--------------------------------------------------------------------------------
/html/img/providers/dmi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/providers/dmi.png
--------------------------------------------------------------------------------
/html/img/providers/hcmr.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/providers/hcmr.gif
--------------------------------------------------------------------------------
/html/img/providers/metu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/providers/metu.png
--------------------------------------------------------------------------------
/html/img/providers/ogs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/providers/ogs.png
--------------------------------------------------------------------------------
/html/img/providers/pml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/providers/pml.png
--------------------------------------------------------------------------------
/html/img/s.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/s.mp3
--------------------------------------------------------------------------------
/html/img/sign-in-with-google.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/sign-in-with-google.png
--------------------------------------------------------------------------------
/html/img/sign-in-with-microsoft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/sign-in-with-microsoft.png
--------------------------------------------------------------------------------
/html/img/yahoo_signin_btn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/img/yahoo_signin_btn.png
--------------------------------------------------------------------------------
/html/js-libs/pikaday/pikaday.jquery.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Pikaday jQuery plugin.
3 | *
4 | * Copyright © 2013 David Bushell | BSD & MIT license | https://github.com/dbushell/Pikaday
5 | */
6 |
7 | (function (root, factory)
8 | {
9 | 'use strict';
10 |
11 | if (typeof exports === 'object') {
12 | // CommonJS module
13 | factory(require('jquery'), require('../pikaday'));
14 | } else if (typeof define === 'function' && define.amd) {
15 | // AMD. Register as an anonymous module.
16 | define(['jquery', 'pikaday'], factory);
17 | } else {
18 | // Browser globals
19 | factory(root.jQuery, root.Pikaday);
20 | }
21 | }(this, function ($, Pikaday)
22 | {
23 | 'use strict';
24 |
25 | $.fn.pikaday = function()
26 | {
27 | var args = arguments;
28 |
29 | if (!args || !args.length) {
30 | args = [{ }];
31 | }
32 |
33 | return this.each(function()
34 | {
35 | var self = $(this),
36 | plugin = self.data('pikaday');
37 |
38 | if (!(plugin instanceof Pikaday)) {
39 | if (typeof args[0] === 'object') {
40 | var options = $.extend({}, args[0]);
41 | options.field = self[0];
42 | self.data('pikaday', new Pikaday(options));
43 | }
44 | } else {
45 | if (typeof args[0] === 'string' && typeof plugin[args[0]] === 'function') {
46 | plugin[args[0]].apply(plugin, Array.prototype.slice.call(args,1));
47 |
48 | if (args[0] === 'destroy') {
49 | self.removeData('pikaday');
50 | }
51 | }
52 | }
53 | });
54 | };
55 |
56 | }));
57 |
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-borderless.min.css:
--------------------------------------------------------------------------------
1 | .tooltipster-sidetip.tooltipster-borderless .tooltipster-box{border:none;background:#1b1b1b;background:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow{height:8px;margin-left:-8px;width:16px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow{height:16px;margin-left:0;margin-top:-8px;width:8px}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-borderless .tooltipster-arrow-border{border:8px solid transparent}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#1b1b1b;border-bottom-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-left .tooltipster-arrow-border{border-left-color:#1b1b1b;border-left-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow-border{border-right-color:#1b1b1b;border-right-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-top .tooltipster-arrow-border{border-top-color:#1b1b1b;border-top-color:rgba(10,10,10,.9)}.tooltipster-sidetip.tooltipster-borderless.tooltipster-bottom .tooltipster-arrow-uncropped{top:-8px}.tooltipster-sidetip.tooltipster-borderless.tooltipster-right .tooltipster-arrow-uncropped{left:-8px}
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-light.min.css:
--------------------------------------------------------------------------------
1 | .tooltipster-sidetip.tooltipster-light .tooltipster-box{border-radius:3px;border:1px solid #ccc;background:#ededed}.tooltipster-sidetip.tooltipster-light .tooltipster-content{color:#666}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow{height:9px;margin-left:-9px;width:18px}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow{height:18px;margin-left:0;margin-top:-9px;width:9px}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow-background{border:9px solid transparent}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#ededed;top:1px}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow-background{border-left-color:#ededed;left:-1px}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-background{border-right-color:#ededed;left:1px}.tooltipster-sidetip.tooltipster-light.tooltipster-top .tooltipster-arrow-background{border-top-color:#ededed;top:-1px}.tooltipster-sidetip.tooltipster-light .tooltipster-arrow-border{border:9px solid transparent}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-left .tooltipster-arrow-border{border-left-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-border{border-right-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-top .tooltipster-arrow-border{border-top-color:#ccc}.tooltipster-sidetip.tooltipster-light.tooltipster-bottom .tooltipster-arrow-uncropped{top:-9px}.tooltipster-sidetip.tooltipster-light.tooltipster-right .tooltipster-arrow-uncropped{left:-9px}
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-noir.min.css:
--------------------------------------------------------------------------------
1 | .tooltipster-sidetip.tooltipster-noir .tooltipster-box{border-radius:0;border:3px solid #000;background:#fff}.tooltipster-sidetip.tooltipster-noir .tooltipster-content{color:#000}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow{height:11px;margin-left:-11px;width:22px}.tooltipster-sidetip.tooltipster-noir.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow{height:22px;margin-left:0;margin-top:-11px;width:11px}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow-background{border:11px solid transparent}.tooltipster-sidetip.tooltipster-noir.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#fff;top:4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-left .tooltipster-arrow-background{border-left-color:#fff;left:-4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow-background{border-right-color:#fff;left:4px}.tooltipster-sidetip.tooltipster-noir.tooltipster-top .tooltipster-arrow-background{border-top-color:#fff;top:-4px}.tooltipster-sidetip.tooltipster-noir .tooltipster-arrow-border{border-width:11px}.tooltipster-sidetip.tooltipster-noir.tooltipster-bottom .tooltipster-arrow-uncropped{top:-11px}.tooltipster-sidetip.tooltipster-noir.tooltipster-right .tooltipster-arrow-uncropped{left:-11px}
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-punk.min.css:
--------------------------------------------------------------------------------
1 | .tooltipster-sidetip.tooltipster-punk .tooltipster-box{border-radius:5px;border:none;border-bottom:3px solid #f71169;background:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-top .tooltipster-box{margin-bottom:7px}.tooltipster-sidetip.tooltipster-punk .tooltipster-content{color:#fff;padding:8px 16px}.tooltipster-sidetip.tooltipster-punk .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-punk.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-left .tooltipster-arrow-border{border-left-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-right .tooltipster-arrow-border{border-right-color:#2a2a2a}.tooltipster-sidetip.tooltipster-punk.tooltipster-top .tooltipster-arrow-border{border-top-color:#f71169}
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/plugins/tooltipster/sideTip/themes/tooltipster-sideTip-shadow.min.css:
--------------------------------------------------------------------------------
1 | .tooltipster-sidetip.tooltipster-shadow .tooltipster-box{border:none;border-radius:5px;background:#fff;box-shadow:0 0 10px 6px rgba(0,0,0,.1)}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-box{margin-top:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-box{margin-right:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-box{margin-left:6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-top .tooltipster-box{margin-bottom:6px}.tooltipster-sidetip.tooltipster-shadow .tooltipster-content{color:#8d8d8d}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow{height:6px;margin-left:-6px;width:12px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-arrow,.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow{height:12px;margin-left:0;margin-top:-6px;width:6px}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow-background{display:none}.tooltipster-sidetip.tooltipster-shadow .tooltipster-arrow-border{border:6px solid transparent}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-left .tooltipster-arrow-border{border-left-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow-border{border-right-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-top .tooltipster-arrow-border{border-top-color:#fff}.tooltipster-sidetip.tooltipster-shadow.tooltipster-bottom .tooltipster-arrow-uncropped{top:-6px}.tooltipster-sidetip.tooltipster-shadow.tooltipster-right .tooltipster-arrow-uncropped{left:-6px}
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/themes/tooltipster-light.css:
--------------------------------------------------------------------------------
1 | .tooltipster-light {
2 | border-radius: 5px;
3 | border: 1px solid #cccccc;
4 | background: #ededed;
5 | color: #666666;
6 | }
7 | .tooltipster-light .tooltipster-content {
8 | font-family: Arial, sans-serif;
9 | font-size: 14px;
10 | line-height: 16px;
11 | padding: 8px 10px;
12 | }
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/themes/tooltipster-noir.css:
--------------------------------------------------------------------------------
1 | .tooltipster-noir {
2 | border-radius: 0px;
3 | border: 3px solid #2c2c2c;
4 | background: #fff;
5 | color: #2c2c2c;
6 | }
7 | .tooltipster-noir .tooltipster-content {
8 | font-family: 'Georgia', serif;
9 | font-size: 14px;
10 | line-height: 16px;
11 | padding: 8px 10px;
12 | }
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/themes/tooltipster-punk.css:
--------------------------------------------------------------------------------
1 | .tooltipster-punk {
2 | border-radius: 5px;
3 | border-bottom: 3px solid #f71169;
4 | background: #2a2a2a;
5 | color: #fff;
6 | }
7 | .tooltipster-punk .tooltipster-content {
8 | font-family: 'Courier', monospace;
9 | font-size: 14px;
10 | line-height: 16px;
11 | padding: 8px 10px;
12 | }
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/css/themes/tooltipster-shadow.scss:
--------------------------------------------------------------------------------
1 | .tooltipster-shadow {
2 | border-radius: 5px;
3 | background: #fff;
4 | box-shadow: 0px 0px 14px rgba(0,0,0,0.3);
5 | color: #2c2c2c;
6 | }
7 | .tooltipster-shadow .tooltipster-content {
8 | font-family: 'Arial', sans-serif;
9 | font-size: 14px;
10 | line-height: 16px;
11 | padding: 8px 10px;
12 | }
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
19 |
20 |
21 |
22 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/demo/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/demo/map.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/demo/reset.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | html, body, div, span, applet, object, iframe,
4 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
5 | a, abbr, acronym, address, big, cite, code,
6 | del, dfn, em, img, ins, kbd, q, s, samp,
7 | small, strike, strong, sub, sup, tt, var,
8 | b, u, i, center,
9 | dl, dt, dd, ol, ul, li,
10 | fieldset, form, label, legend,
11 | table, caption, tbody, tfoot, thead, tr, th, td,
12 | article, aside, canvas, details, embed,
13 | figure, figcaption, footer, header, hgroup,
14 | menu, nav, output, ruby, section, summary,
15 | time, mark, audio, video {
16 | margin: 0;
17 | padding: 0;
18 | border: 0;
19 | font-size:100%;
20 | vertical-align: baseline;
21 | }
22 | /* HTML5 display-role reset for older browsers */
23 | article, aside, details, figcaption, figure,
24 | footer, header, hgroup, menu, nav, section {
25 | display: block;
26 | }
27 | body {
28 | line-height: 1;
29 | }
30 | ol, ul {
31 | list-style: none;
32 | }
33 | blockquote, q {
34 | quotes: none;
35 | }
36 | blockquote:before, blockquote:after,
37 | q:before, q:after {
38 | content: '';
39 | content: none;
40 | }
41 | table {
42 | border-collapse: collapse;
43 | border-spacing: 0;
44 | }
45 |
46 |
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/demo/style.css:
--------------------------------------------------------------------------------
1 | /* Main */
2 |
3 | body {
4 | background-color: #dcdcdc;
5 | color: #0b0b0b;
6 | font-size: 16px;
7 | line-height: 22px;
8 | }
9 |
10 | .container, #container {
11 | width: 978px;
12 | margin: 10px auto;
13 | padding: 60px;
14 | box-shadow: 0px 0px 10px rgba(0,0,0,0.2);
15 | background: #fff;
16 | text-align: left;
17 | display: block;
18 | overflow: hidden;
19 | }
20 |
21 | .item {
22 | width: 200px;
23 | float: left;
24 | padding: 10px;
25 | margin: 10px;
26 | background: #000;
27 | color: #fff;
28 | }
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/css/prettify.css:
--------------------------------------------------------------------------------
1 | /* Pretty printing styles. Used with prettify.js. */
2 |
3 | /* SPAN elements with the classes below are added by prettyprint. */
4 | .pln { color: #000 } /* plain text */
5 |
6 | @media screen {
7 | .str { color: #080 } /* string content */
8 | .kwd { color: #008 } /* a keyword */
9 | .com { color: #800 } /* a comment */
10 | .typ { color: #606 } /* a type name */
11 | .lit { color: #066 } /* a literal value */
12 | /* punctuation, lisp open bracket, lisp close bracket */
13 | .pun, .opn, .clo { color: #660 }
14 | .tag { color: #008 } /* a markup tag name */
15 | .atn { color: #606 } /* a markup attribute name */
16 | .atv { color: #080 } /* a markup attribute value */
17 | .dec, .var { color: #606 } /* a declaration; a variable name */
18 | .fun { color: red } /* a function name */
19 | }
20 |
21 | /* Use higher contrast and text-weight for printable form. */
22 | @media print, projection {
23 | .str { color: #060 }
24 | .kwd { color: #006; font-weight: bold }
25 | .com { color: #600; font-style: italic }
26 | .typ { color: #404; font-weight: bold }
27 | .lit { color: #044 }
28 | .pun, .opn, .clo { color: #440 }
29 | .tag { color: #006; font-weight: bold }
30 | .atn { color: #404 }
31 | .atv { color: #060 }
32 | }
33 |
34 | /* Specify class=linenums on a pre to get line numbering */
35 | ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
36 | li.L0,
37 | li.L1,
38 | li.L2,
39 | li.L3,
40 | li.L5,
41 | li.L6,
42 | li.L7,
43 | li.L8 { list-style-type: none }
44 | /* Alternate shading for lines */
45 | li.L1,
46 | li.L3,
47 | li.L5,
48 | li.L7,
49 | li.L9 { background: #eee }
50 |
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/css/reset.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 |
3 | html, body, div, span, applet, object, iframe,
4 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
5 | a, abbr, acronym, address, big, cite, code,
6 | del, dfn, em, img, ins, kbd, q, s, samp,
7 | small, strike, strong, sub, sup, tt, var,
8 | b, u, i, center,
9 | dl, dt, dd, ol, ul, li,
10 | fieldset, form, label, legend,
11 | table, caption, tbody, tfoot, thead, tr, th, td,
12 | article, aside, canvas, details, embed,
13 | figure, figcaption, footer, header, hgroup,
14 | menu, nav, output, ruby, section, summary,
15 | time, mark, audio, video {
16 | margin: 0;
17 | padding: 0;
18 | border: 0;
19 | font-size:100%;
20 | vertical-align: baseline;
21 | }
22 | /* HTML5 display-role reset for older browsers */
23 | article, aside, details, figcaption, figure,
24 | footer, header, hgroup, menu, nav, section {
25 | display: block;
26 | }
27 | body {
28 | line-height: 1;
29 | }
30 | ol, ul {
31 | list-style: none;
32 | }
33 | blockquote, q {
34 | quotes: none;
35 | }
36 | blockquote:before, blockquote:after,
37 | q:before, q:after {
38 | content: '';
39 | content: none;
40 | }
41 | table {
42 | border-collapse: collapse;
43 | border-spacing: 0;
44 | }
45 |
46 |
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/browser-chrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/browser-chrome.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/browser-firefox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/browser-firefox.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/browser-ie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/browser-ie.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/browser-opera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/browser-opera.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/browser-safari.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/browser-safari.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/favicon.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/icons/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/icons/icomoon.eot
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/icons/icomoon.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | This is a custom SVG font generated by IcoMoon.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/icons/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/icons/icomoon.ttf
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/icons/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/icons/icomoon.woff
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/icons/icomoond41d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/icons/icomoond41d.eot
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/large-background.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/large-background.jpg
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/pattern-navy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/pattern-navy.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/social.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/social.jpg
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/images/spiderman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/js-libs/tooltipster/doc/images/spiderman.png
--------------------------------------------------------------------------------
/html/js-libs/tooltipster/doc/js/jquery.jgfeed.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jGFeed 1.0 - Google Feed API abstraction plugin for jQuery
3 | *
4 | * Copyright (c) 2009 jQuery HowTo
5 | *
6 | * Licensed under the GPL license:
7 | * http://www.gnu.org/licenses/gpl.html
8 | *
9 | * URL:
10 | * http://jquery-howto.blogspot.com
11 | *
12 | * Author URL:
13 | * http://me.boo.uz
14 | *
15 | */
16 | (function($){
17 | $.extend({
18 | jGFeed : function(url, fnk, num, key){
19 | // Make sure url to get is defined
20 | if(url == null) return false;
21 | // Build Google Feed API URL
22 | var gurl = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q="+url+"?";
23 | if(num != null) gurl += "&num="+num;
24 | if(key != null) gurl += "&key="+key;
25 | // AJAX request the API
26 | $.getJSON(gurl, function(data){
27 | if(typeof fnk == 'function')
28 | fnk.call(this, data.responseData.feed);
29 | else
30 | return false;
31 | });
32 | }
33 | });
34 | })(jQuery);
--------------------------------------------------------------------------------
/html/login.js:
--------------------------------------------------------------------------------
1 | let providers = {}
2 |
--------------------------------------------------------------------------------
/html/plots/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/html/plots/.gitkeep
--------------------------------------------------------------------------------
/html/point_data_template.csv:
--------------------------------------------------------------------------------
1 | Latitude,Longitude,Date,data_point
2 | 22.43134,-69.169922,03/03/2015 12:00,15
3 |
--------------------------------------------------------------------------------
/plotting/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 |
--------------------------------------------------------------------------------
/plotting/README.md:
--------------------------------------------------------------------------------
1 | See https://github.com/pmlrsg/GISportal for details
2 |
--------------------------------------------------------------------------------
/plotting/data_extractor/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 |
--------------------------------------------------------------------------------
/plotting/data_extractor/README.md:
--------------------------------------------------------------------------------
1 | See https://github.com/pmlrsg/GISportal for details
2 |
--------------------------------------------------------------------------------
/plotting/data_extractor/__init__.py:
--------------------------------------------------------------------------------
1 | import os, sys
2 | sys.path.append(os.path.join(os.path.dirname(__file__)))
--------------------------------------------------------------------------------
/plotting/data_extractor/analysis_types/__init__.py:
--------------------------------------------------------------------------------
1 | from basic_stats import BasicStats
2 | from transect_stats import TransectStats
3 | from hovmoller_stats import HovmollerStats
4 | from image_stats import ImageStats
5 | from scatter_stats import ScatterStats
--------------------------------------------------------------------------------
/plotting/data_extractor/analysis_types/basic_stats.py:
--------------------------------------------------------------------------------
1 | import netCDF4 as netCDF
2 | from extraction_utils import basic
3 | import json
4 |
5 | class BasicStats(object):
6 | """docstring for BasicStats"""
7 | def __init__(self, filename, variable, isLog=False):
8 | super(BasicStats, self).__init__()
9 | self.filename = filename
10 | self.variable = variable
11 | self.isLog = isLog
12 |
13 |
14 | def process(self):
15 | #print "running basic processing on %s" % self.filename
16 |
17 | netcdf_file = netCDF.Dataset(self.filename, "r")
18 | return json.dumps(basic(netcdf_file, self.variable, isLog=self.isLog))
19 |
20 |
21 | #netcdf_variable = netcdf_file[variable]
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/plotting/data_extractor/analysis_types/hovmoller_stats.py:
--------------------------------------------------------------------------------
1 | import netCDF4 as netCDF
2 | from extraction_utils import basic, hovmoller
3 | import json
4 |
5 | class HovmollerStats(object):
6 | """docstring for BasicStats"""
7 | def __init__(self, filename, xVariable, yVariable, dataVariable):
8 | super(HovmollerStats, self).__init__()
9 | self.filename = filename
10 | self.xVariable = xVariable
11 | self.yVariable = yVariable
12 | self.dataVariable = dataVariable
13 |
14 |
15 | def process(self):
16 | #print "running basic processing on %s" % self.filename
17 | #print "gettingdata from %s" % self.filename
18 | netcdf_file = netCDF.Dataset(self.filename, "r")
19 | #print netcdf_file.variables[self.dataVariable][:]
20 | return json.dumps(hovmoller(netcdf_file, self.xVariable, self.yVariable, self.dataVariable))
21 |
22 |
23 | #netcdf_variable = netcdf_file[variable]
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/plotting/data_extractor/analysis_types/scatter_stats.py:
--------------------------------------------------------------------------------
1 | import netCDF4 as netCDF
2 | from extraction_utils import basic_scatter
3 | import json
4 |
5 | class ScatterStats(object):
6 | """docstring for BasicStats"""
7 | def __init__(self, filenames):
8 | super(ScatterStats, self).__init__()
9 |
10 |
11 | self.variable1, self.variable2 = filenames.keys()
12 | self.filename1 = filenames[self.variable1]
13 | self.filename2 = filenames[self.variable2]
14 |
15 | def process(self):
16 | print "running basic processing on %s & %s" % (self.filename1, self.filename2)
17 |
18 | netcdf_file1 = netCDF.Dataset(self.filename1, "r")
19 | netcdf_file2 = netCDF.Dataset(self.filename2, "r")
20 |
21 | return json.dumps(basic_scatter(netcdf_file1, self.variable1, netcdf_file2, self.variable2))
22 |
23 |
24 | #netcdf_variable = netcdf_file[variable]
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/plotting/data_extractor/extraction_utils/__init__.py:
--------------------------------------------------------------------------------
1 | from wcs_extraction import WCSHelper
2 | from wcs_raw_extraction import WCSRawHelper
3 | from analysis_utils import *
4 | from debug import Debug
5 | from transect_utils import *
6 |
7 |
--------------------------------------------------------------------------------
/plotting/data_extractor/extraction_utils/debug.py:
--------------------------------------------------------------------------------
1 | class Debug(object):
2 | """docstring for Debug"""
3 | def __init__(self, isOn):
4 | super(Debug, self).__init__()
5 | self.isOn = isOn
6 |
7 | def log(self, message):
8 | if(self.isOn):
9 | print message
10 |
--------------------------------------------------------------------------------
/plotting/data_extractor/extraction_utils/scatter_utils.py:
--------------------------------------------------------------------------------
1 | def test_time_axis(filenames):
2 | return "hmmmm"
3 |
--------------------------------------------------------------------------------
/plotting/data_extractor/extraction_utils/transect_utils.py:
--------------------------------------------------------------------------------
1 | import csv
2 | import datetime
3 |
4 |
5 | def get_transect_bounds(_csv):
6 | #print _csv
7 | with open(_csv, "rb") as csvfile:
8 | data = csv.DictReader(csvfile, delimiter=',')
9 | lats = []
10 | lons = []
11 | for row in data:
12 | lats.append(float(row['Latitude']))
13 | lons.append(float(row['Longitude']))
14 | #print (min(lons),min(lats),max(lons),max(lats))
15 | return (min(lons),min(lats),max(lons),max(lats))
16 |
17 |
18 | def get_transect_times(_csv):
19 | with open(_csv, "rb") as csvfile:
20 | data = csv.DictReader(csvfile, delimiter=',')
21 | dates = []
22 | for row in data:
23 | date = row['Date']
24 | try:
25 | dates.append(datetime.datetime.strptime(date, '%d/%m/%Y %H:%M:%S'))
26 | except ValueError:
27 | try:
28 | dates.append(datetime.datetime.strptime(date, '%d/%m/%Y %H:%M'))
29 | except ValueError:
30 | dates.append(datetime.datetime.strptime(date, "%d/%m/%Y"))
31 | return "%s/%s" % (min(dates), max(dates))
32 |
33 | def getCsvDict(_csv):
34 | ret = {}
35 | ret['Lat'] = []
36 | ret['Lon'] = []
37 | ret['Date'] = []
38 | with open(_csv, "rb") as csvfile:
39 | data = csv.DictReader(csvfile, delimiter=',')
40 | for row in data:
41 | for key in row:
42 |
43 | ret[key].append(row[key])
44 | #print ret
45 | return ret
--------------------------------------------------------------------------------
/plotting/data_extractor/extraction_utils/wcs_extraction.py:
--------------------------------------------------------------------------------
1 | from owslib.wcs import WebCoverageService
2 | import logging
3 |
4 | class WCSHelper(object):
5 | """docstring for WCSHelper"""
6 | def __init__(self, url, dates, variable, bbox, single=False):
7 | super(WCSHelper, self).__init__()
8 | self.url = url
9 | self.single = single
10 | self.dates = dates
11 | self.variable = variable
12 | self.bbox = bbox
13 | self.owslib_log = logging.getLogger('owslib')
14 | self.owslib_log.setLevel(logging.DEBUG)
15 | self.wcs = WebCoverageService(url, version="1.0.0")
16 |
17 | def __repr__(self):
18 | return str(self.wcs)
19 |
20 | def getData(self):
21 | #print '-'*20
22 | #print self.bbox
23 | #print self.dates
24 | if self.single :
25 | output = self.wcs.getCoverage(identifier=self.variable, time=[self.dates], bbox=self.bbox, format="NetCDF3")
26 | else:
27 | output = self.wcs.getCoverage(identifier=self.variable, time=self.dates, bbox=self.bbox, format="NetCDF3")
28 | return output
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/__init__.py:
--------------------------------------------------------------------------------
1 | from extractor import Extractor
2 | from basic_extraction import BasicExtractor
3 | from irregular_extraction import IrregularExtractor
4 | from transect_extraction import TransectExtractor
5 | from single_test_extraction import SingleExtractor
6 | from scatter_extraction import ScatterExtractor
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/basic_extraction.py:
--------------------------------------------------------------------------------
1 | from . import Extractor
2 | from extraction_utils import WCSHelper, WCSRawHelper
3 | import tempfile
4 | import uuid
5 |
6 | class BasicExtractor(Extractor):
7 | """docstring for BasicExtractor"""
8 | def __init__(self, wcs_url, extract_dates, extract_area=None, extract_variable=None, extract_depth=None, outdir="/tmp"):
9 | super(BasicExtractor, self).__init__(wcs_url, extract_dates, extract_area=extract_area, extract_variable=extract_variable, extract_depth=extract_depth, outdir=outdir)
10 |
11 | def getData(self):
12 | wcs_extractor = WCSRawHelper(self.wcs_url, self.extract_dates, self.extract_variable, self.extract_area, self.extract_depth)
13 | data = wcs_extractor.getData()
14 | fname = self.outdir+str(uuid.uuid4())+".nc"
15 | with open(fname, 'w') as outfile:
16 | outfile.write(data.read())
17 | return fname
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/extractor.py:
--------------------------------------------------------------------------------
1 | from extraction_utils import WCSHelper
2 | import tempfile
3 | import uuid
4 |
5 |
6 | class Extractor(object):
7 | """base Extractor class providing basic functions"""
8 | def __init__(self, wcs_url, extract_dates, extract_area=None, extract_variable=None, extract_depth=None, outdir="/tmp/"):
9 | super(Extractor, self).__init__()
10 | self.wcs_url = wcs_url
11 | self.extract_dates = extract_dates
12 | self.extract_area = extract_area
13 | self.extract_variable = extract_variable
14 | self.extract_depth= extract_depth
15 | self.outdir = outdir
16 |
17 | def __repr__(self):
18 | return "< "+str(self.__class__)+" "+self.wcs_url+" , ["+",".join(self.extract_dates)+"] >"
19 |
20 |
21 | def getData(self):
22 | pass
23 |
24 | def metadataBlock(self):
25 | ret = {}
26 | ret['variable'] = self.extract_variable
27 | ret['extract_dates'] = self.extract_dates
28 | ret['extract_area'] = self.extract_area
29 | ret['wcs_url'] = self.wcs_url
30 |
31 | return ret
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/hovmoller_extraction.py:
--------------------------------------------------------------------------------
1 | from . import Extractor
2 | from ..extraction_utils import WCSHelper
3 | import tempfile
4 | import uuid
5 |
6 |
7 | class HovmollerExtractor(Extractor):
8 | """docstring for HovmollerExtractor"""
9 | def __init__(self, wcs_url, extract_dates,extract_area=None, extract_variable=None , extract_depth=None, outdir="/tmp"):
10 | super(HovmollerExtractor, self).__init__(wcs_url, extract_dates, extract_area=extract_area, extract_variable=extract_variable, extract_depth=extract_depth, outdir=outdir)
11 |
12 |
13 |
14 | def getData(self):
15 | print "="*20
16 | print self.extract_area
17 | wcs_extractor = WCSHelper(self.wcs_url, self.extract_dates, self.extract_variable, self.extract_area, self.depth)
18 | data = wcs_extractor.getData()
19 | fname = self.outdir+str(uuid.uuid4())+".nc"
20 | with open(fname, 'w') as outfile:
21 | outfile.write(data.read())
22 | return fname
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/irregular_extraction.py:
--------------------------------------------------------------------------------
1 | from extraction_utils import create_mask
2 | from . import Extractor
3 | from extraction_utils import WCSRawHelper, basic
4 | import tempfile
5 | import uuid
6 | from analysis_types import BasicStats
7 |
8 |
9 | class IrregularExtractor(Extractor):
10 | """docstring for IrregularExtractor"""
11 | def __init__(self, wcs_url, extract_dates, extract_area=None, extract_variable=None, extract_depth=None, masking_polygon=None, outdir="/tmp"):
12 | super(IrregularExtractor, self).__init__(wcs_url, extract_dates, extract_area=extract_area, extract_variable=extract_variable,extract_depth=extract_depth, outdir=outdir)
13 |
14 | self.masking_polygon = masking_polygon
15 |
16 | def getData(self, dest=None):
17 | #print self.wcs_url
18 | wcs_extractor = WCSRawHelper(self.wcs_url, self.extract_dates, self.extract_variable, self.extract_area, self.extract_depth)
19 | data = wcs_extractor.getData()
20 | uuid_filename = str(uuid.uuid4())+".nc"
21 | if dest:
22 | fname = dest+uuid_filename
23 | else:
24 | fname = self.outdir+uuid_filename
25 | with open(fname, 'w') as outfile:
26 | outfile.write(data.read())
27 | mask, data,_,_ = create_mask(self.masking_polygon,fname,self.extract_variable)
28 | #return basic(data, self.extract_variable, filename=fname)
29 | if dest:
30 | return uuid_filename
31 | return fname
32 |
33 |
34 |
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/scatter_extraction.py:
--------------------------------------------------------------------------------
1 | from . import Extractor
2 | from extraction_utils import WCSHelper, WCSRawHelper
3 | import tempfile
4 | import uuid
5 |
6 |
7 | class ScatterExtractor(Extractor):
8 | """docstring for BasicExtractor"""
9 | def __init__(self, wcs_url, wcs_url_2,extract_dates, extract_area=None, extract_variable=None, extract_variable_2=None, extract_depth=None, outdir="/tmp"):
10 | super(ScatterExtractor, self).__init__(wcs_url, extract_dates, extract_area=extract_area, extract_variable=extract_variable, extract_depth=extract_depth, outdir=outdir)
11 | self.second_var = extract_variable_2
12 | self.wcs_url_2 = wcs_url_2
13 |
14 |
15 | def getData(self):
16 | #print "="*20
17 | #print self.extract_area
18 | # print self.wcs_url
19 | # print self.wcs_url_2
20 | wcs_extractor = WCSRawHelper(self.wcs_url, self.extract_dates, self.extract_variable, self.extract_area)
21 | data = wcs_extractor.getData()
22 | fname_one = self.outdir+str(uuid.uuid4())+".nc"
23 | with open(fname_one, 'w') as outfile:
24 | outfile.write(data.read())
25 | wcs_extractor = WCSRawHelper(self.wcs_url_2, self.extract_dates, self.second_var, self.extract_area)
26 | data = wcs_extractor.getData()
27 | fname_two = self.outdir+str(uuid.uuid4())+".nc"
28 | with open(fname_two, 'w') as outfile:
29 | outfile.write(data.read())
30 | #print "getting data for %s and %s" % (self.extract_variable, self.second_var)
31 | #print {self.extract_variable :fname_one, self.second_var : fname_two }
32 | return {self.extract_variable :fname_one, self.second_var : fname_two }
33 | #
--------------------------------------------------------------------------------
/plotting/data_extractor/extractors/single_test_extraction.py:
--------------------------------------------------------------------------------
1 | from . import Extractor
2 | from extraction_utils import WCSHelper, WCSRawHelper
3 | import tempfile
4 | import uuid
5 | import time
6 | import os
7 | import json
8 | from extraction_utils import sizeof_fmt
9 |
10 |
11 | class SingleExtractor(Extractor):
12 | """docstring for BasicExtractor"""
13 | def __init__(self, wcs_url, extract_dates, extract_area=None, extract_variable=None, extract_depth=None, outdir="/tmp/"):
14 | super(SingleExtractor, self).__init__(wcs_url, extract_dates, extract_area=extract_area, extract_variable=extract_variable, extract_depth=extract_depth, outdir=outdir)
15 |
16 |
17 |
18 | def getData(self):
19 | #print "="*20
20 | #print self.extract_dates
21 | start_time = time.time()
22 | wcs_extractor = WCSRawHelper(self.wcs_url, self.extract_dates, self.extract_variable, self.extract_area, self.extract_depth,single=True)
23 | data = wcs_extractor.getData()
24 | fname = self.outdir+str(uuid.uuid4())+".nc"
25 | with open(fname, 'w') as outfile:
26 | outfile.write(data.read())
27 | stop_time = time.time()
28 | ret = {}
29 | ret['time_diff'] = stop_time - start_time
30 | ret['file_size'] = os.stat(fname).st_size
31 | return json.dumps(ret)
--------------------------------------------------------------------------------
/plotting/data_extractor/tests/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/plotting/data_extractor/tests/__init__.py
--------------------------------------------------------------------------------
/plotting/data_extractor/tests/example_track.csv:
--------------------------------------------------------------------------------
1 | Latitude,Longitude,Date
2 | 50.78,-1.13,14/09/2010 20:00
3 | 50.67,-1.03,14/09/2010 20:49
4 | 50.54,-1.02,14/09/2010 22:15
5 | 50.42,-2.46,15/09/2010 03:17
6 | 50.09,-3.77,15/09/2010 09:23
7 | 49.74,-5.24,15/09/2010 16:05
8 | 37.72,-25.66,21/09/2010 00:27
9 | 36.25,-32.76,23/09/2010 07:32
10 | 36.25,-32.76,24/09/2010 19:32
11 | 34.88,-35.78,25/09/2010 04:39
12 | 33.46,-38.68,25/09/2010 23:26
13 | 31.15,-40.92,26/09/2010 19:38
14 | 28.80,-43.18,27/09/2010 16:10
15 | 16.91,-25.02,03/10/2010 09:26
16 | 0.00,-17.75,08/10/2010 12:00
17 | -7.97,-14.42,10/10/2010 21:36
18 | -7.97,-14.42,16/10/2010 21:36
19 | -18.50,-25.10,21/10/2010 00:31
20 | -18.50,-25.10,22/10/2010 00:31
21 | -28.42,-25.00,24/10/2010 15:55
22 |
--------------------------------------------------------------------------------
/plotting/plotting/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/plotting/plotting/__init__.py
--------------------------------------------------------------------------------
/plotting/plotting/debug.py:
--------------------------------------------------------------------------------
1 | from __future__ import print_function
2 | import sys
3 |
4 | # Set the default logging verbosity to lowest.
5 | verbosity = 0
6 | plot_hash = None
7 |
8 | def debug(level, msg):
9 | if verbosity >= level:
10 | if plot_hash:
11 | print("{}: {}".format(plot_hash[:8], msg), file=sys.stderr)
12 | else:
13 | print(msg, file=sys.stderr)
14 | #END debug
15 |
--------------------------------------------------------------------------------
/plotting/plotting/logger.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime, date
2 | import os
3 | import errno
4 |
5 | log_dir = ""
6 | plot_hash = ""
7 | plot_type = ""
8 |
9 | num_points = 0
10 |
11 | def log_complete(successful):
12 | if log_dir:
13 | make_sure_path_exists(log_dir)
14 | _datetime = datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
15 | _date = date.today().strftime("%Y-%m-%d")
16 | if successful:
17 | status = "complete"
18 | else:
19 | status = "failed"
20 | line = ",".join(map(str, [_datetime, plot_hash, plot_type, status, num_points])) + "\n"
21 | with open (log_dir + "/" + _date + ".csv", "a") as f:
22 | f.write(line)
23 |
24 | def make_sure_path_exists(path):
25 | try:
26 | os.makedirs(path)
27 | except OSError as exception:
28 | if exception.errno != errno.EEXIST:
29 | raise
30 |
--------------------------------------------------------------------------------
/plotting/testing/data/temperature-format-url.json:
--------------------------------------------------------------------------------
1 | {
2 | "coverages": ["SST"],
3 | "type": "timeseries",
4 | "SST": {"url":
5 | "values":{"Date":[
6 | "2013-11-16T00:00:00"
7 | ],
8 | "Max": [
9 | 19.27879524230957
10 | ],
11 | "Mean": [
12 | 12.045310460974147
13 | ],
14 | "Median": [
15 | 11.87871265411377
16 | ],
17 | "Min": [
18 | 4.485976696014403
19 | ],
20 | "Standard Deviation": [
21 | 3.3710469141333177
22 | ]
23 | }
24 | "scale": "linear",
25 | "units": "(degrees C)"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/plotting/testing/data/temperature-format.json:
--------------------------------------------------------------------------------
1 | {
2 | "coverages": ["SST"],
3 | "type": "timeseries",
4 | "SST": {"values":{"Date":[
5 | "2013-11-16T00:00:00"
6 | ],
7 | "Max": [
8 | 19.27879524230957
9 | ],
10 | "Mean": [
11 | 12.045310460974147
12 | ],
13 | "Median": [
14 | 11.87871265411377
15 | ],
16 | "Min": [
17 | 4.485976696014403
18 | ],
19 | "Standard Deviation": [
20 | 3.3710469141333177
21 | ]
22 | }
23 | "scale": "linear",
24 | "units": "(degrees C)"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/plotting/testing/data/timeseries-sos.json:
--------------------------------------------------------------------------------
1 | {
2 | "plot": {
3 | "type": "timeseries-sos",
4 | "title": "Penlee Point Air Temperature (test)",
5 | "style": "boxfill/rainbow",
6 | "downloadTypes": [{
7 | "key": "csv",
8 | "label": "CSV"
9 | }, {
10 | "key": "png",
11 | "label": "PNG"
12 | }, {
13 | "key": "meta-data",
14 | "label": "Meta Data"
15 | }, {
16 | "key": "logos",
17 | "label": "Logos"
18 | }, {
19 | "key": "svg",
20 | "label": "SVG"
21 | }],
22 | "xAxis": {
23 | "scale": "linear",
24 | "label": "Date/Time",
25 | "ticks": "auto",
26 | "weight": "auto",
27 | "tickFormat": "%d/%m/%Y"
28 | },
29 | "y1Axis": {
30 | "scale": "linear",
31 | "label": "Air Pressure (millibars)",
32 | "ticks": "auto",
33 | "weight": "auto",
34 | "tickFormat": "auto"
35 | },
36 | "data": {
37 | "series": [{
38 | "data_source": {
39 | "observed_property": "http://mmisw.org/ont/cf/parameter/air_pressure",
40 | "offering": "PenleeMetData",
41 | "feature": "penlee",
42 | "t_bounds": [
43 | "2015-01-02T13:50:00.000Z",
44 | "2016-09-08T11:00:00.000Z"
45 | ],
46 | "threddsUrl": "http://10.7.0.36:8080/sensorweb/service"
47 | },
48 | "label": "1) Penlee Point Air Temperature (deg C)",
49 | "yAxis": 1,
50 | "type": "line",
51 | "meta": "Metadata goes here"
52 | }]
53 | },
54 | "is_standalone": true
55 | },
56 | "style": {
57 | "logos": []
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/plotting/testing/data/transect1.csv:
--------------------------------------------------------------------------------
1 | Latitude,Longitude,Date
2 | 50.78,-1.13,14/09/2010 20:00
3 | 50.67,-1.03,14/09/2010 20:49
4 | 50.54,-1.02,14/09/2010 22:15
5 | 50.42,-2.46,15/09/2010 03:17
6 | 50.09,-3.77,15/09/2010 09:23
7 | 49.74,-5.24,15/09/2010 16:05
8 | 37.72,-25.66,21/09/2010 00:27
9 | 36.25,-32.76,23/09/2010 07:32
10 | 36.25,-32.76,24/09/2010 19:32
11 | 34.88,-35.78,25/09/2010 04:39
12 | 33.46,-38.68,25/09/2010 23:26
13 | 31.15,-40.92,26/09/2010 19:38
14 | 28.80,-43.18,27/09/2010 16:10
15 | 16.91,-25.02,03/10/2010 09:26
16 | 0.00,-17.75,08/10/2010 12:00
17 | -7.97,-14.42,10/10/2010 21:36
18 | -7.97,-14.42,16/10/2010 21:36
19 | -18.50,-25.10,21/10/2010 00:31
20 | -18.50,-25.10,22/10/2010 00:31
21 | -28.42,-25.00,24/10/2010 15:55
22 |
--------------------------------------------------------------------------------
/plotting/testing/dataconversion.py:
--------------------------------------------------------------------------------
1 | import json
2 | import numpy as np
3 | import pandas as pd
4 |
5 | # Temp hack to read data from CSV as the JSON is a really bad format
6 |
7 | def convert_timeseries(infile, outfile, scale="linear", units="(degrees C)", coverage="SST"):
8 |
9 | df= pd.read_csv(infile)
10 |
11 | jdata = { 'type': 'timeseries',
12 | 'coverage': coverage,
13 | 'units': units,
14 | 'scale': scale,
15 |
16 | 'Date': df.Date.values.tolist(),
17 | 'Min': df.Min.values.tolist(),
18 | 'Max': df.Max.values.tolist(),
19 | 'Mean': df.Mean.values.tolist(),
20 | 'Median': df.Median.values.tolist(),
21 | 'Standard Deviation': df['Standard Deviation'].values.tolist()
22 | }
23 |
24 | with open(outfile, 'w') as outfile:
25 | json.dump(jdata, outfile)
26 |
27 | outfile.close()
28 |
29 | #END convert_timeseries
30 |
31 | # Convert an old JSON file to the new format
32 | def convert_hovmoller(infile, outfile, scale="linear", units="mgm^-3"):
33 | with open(infile) as json_file:
34 | json_data = json.load(json_file)
35 |
36 | # Flip the data around so it is right way up.
37 | data = np.transpose(json_data['output']['data'])
38 | latlon = np.array(data[1]).astype(np.float).tolist()
39 | values = np.array(data[2]).astype(np.float).tolist()
40 |
41 | jdata = {'type': json_data['type'],
42 | 'coverage': json_data['coverage'],
43 | 'units': units,
44 | 'scale': scale,
45 | 'Date': data[0].tolist(),
46 | 'LatLon': latlon,
47 | 'Value': values
48 | }
49 |
50 | with open(outfile, 'w') as outfile:
51 | json.dump(jdata, outfile)
52 |
53 | json_file.close()
54 | outfile.close()
55 |
56 | #END convert_hovmoller
57 |
--------------------------------------------------------------------------------
/src/css/scss/_alerts.scss:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Alerts
4 | * Taken from bootstrap
5 | * (no we cant include the whole bootstrap library because it ruins the other CSS)
6 | */
7 |
8 |
9 | .alert {
10 | padding: 15px;
11 | margin-bottom: 20px;
12 | border: 1px solid transparent;
13 | border-radius: 4px
14 | }
15 |
16 | .alert h4 {
17 | margin-top: 0;
18 | color: inherit
19 | }
20 |
21 | .alert .alert-link {
22 | font-weight: 700
23 | }
24 |
25 | .alert>p,.alert>ul {
26 | margin-bottom: 0
27 | }
28 |
29 | .alert>p+p {
30 | margin-top: 5px
31 | }
32 |
33 | .alert-dismissable,.alert-dismissible {
34 | padding-right: 35px
35 | }
36 |
37 | .alert-dismissable .close,.alert-dismissible .close {
38 | position: relative;
39 | top: -2px;
40 | right: -21px;
41 | color: inherit
42 | }
43 |
44 | .alert-success {
45 | color: #3c763d;
46 | background-color: #dff0d8;
47 | border-color: #d6e9c6
48 | }
49 |
50 | .alert-success hr {
51 | border-top-color: #c9e2b3
52 | }
53 |
54 | .alert-success .alert-link {
55 | color: #2b542c
56 | }
57 |
58 | .alert-info {
59 | color: #31708f;
60 | background-color: #d9edf7;
61 | border-color: #bce8f1
62 | }
63 |
64 | .alert-info hr {
65 | border-top-color: #a6e1ec
66 | }
67 |
68 | .alert-info .alert-link {
69 | color: #245269
70 | }
71 |
72 | .alert-warning {
73 | color: #8a6d3b;
74 | background-color: #fcf8e3;
75 | border-color: #faebcc
76 | }
77 |
78 | .alert-warning hr {
79 | border-top-color: #f7e1b5
80 | }
81 |
82 | .alert-warning .alert-link {
83 | color: #66512c
84 | }
85 |
86 | .alert-danger {
87 | color: #900;
88 | background-color: #f2dede;
89 | border-color: #ebccd1
90 | }
91 |
92 | .alert-danger hr {
93 | border-top-color: #e4b9c0
94 | }
95 |
96 | .alert-danger .alert-link {
97 | color: #843534
98 | }
99 |
--------------------------------------------------------------------------------
/src/css/scss/_animation.scss:
--------------------------------------------------------------------------------
1 |
2 | /*------------------------------------*\
3 | Animation
4 | \*------------------------------------*/
5 |
6 | @keyframes rotation {
7 | from { transform: rotate(0deg); }
8 | to { transform: rotate(359deg); }
9 | }
10 |
11 | .jiggly:before {
12 | -webkit-animation: jiggle 0.5s infinite;
13 | }
14 | @-moz-keyframes jiggle {
15 | 0% {
16 | -moz-transform: rotate(-10deg);
17 | }
18 | 50% {
19 | -moz-transform: rotate(10deg);
20 | }
21 | }
22 |
23 | @-webkit-keyframes jiggle {
24 | 0% {
25 | -webkit-transform: rotate(-10deg);
26 | }
27 | 50% {
28 | -webkit-transform: rotate(10deg);
29 | }
30 | }
--------------------------------------------------------------------------------
/src/css/scss/_colours-blue.scss:
--------------------------------------------------------------------------------
1 | $splash-color : #383A25;
2 | $secondary-background : #627fa7;
3 | $primary-purple : #102161;
4 | $button-primary : rgba(1, 102, 118, 1);
5 | $button-color: #111111;
6 | $panel-headfoot : #274978;
7 | $panel-content-header : #41618E;
8 | $analysis-button: #808080;
9 | $panel-container-background: rgba(239, 237, 241, 0.5);
10 | $selector-text: #556782;
11 | $dev-warning: #900 none repeat scroll 0% 0%;
12 | $slider-body: rgba(1, 102, 118, 0.7);
13 | $slider-handles: rgba(1, 102, 118, 1);
14 | $timeline-base : rgba(1, 102, 118, 0.5);
15 | $timeline-lozenge : #76012c;
16 | $timeline-text : rgba(1, 102, 118, 0.7);
17 | $timeline-stroke : rgba(1, 102, 118, 1);
18 | $icon-underline : white;
19 | $general-border: rgba(0, 60, 69, 0.5);
20 | $start-btn-background: #627fa7;
21 |
22 | $panel-solid-background: #efedf1;
23 | $panel-solid-color: #111111;
24 | $footer-shadow: 0px -1px 5px -2px #000000;
25 | $popup-background: white;
26 | $popup-color: #111111;
27 | $popup-shadow: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
28 | $popup-arrow: white;
29 | $popup-border: 1px solid #cccccc;
30 | $map-background:#1a1a1a;
31 | $timeline-background: white;
32 | $timeline-color: #111111;
33 | $button-top-actions: #fafafa;
--------------------------------------------------------------------------------
/src/css/scss/_colours-marine-eo.scss:
--------------------------------------------------------------------------------
1 | $splash-color : #383A25;
2 | $secondary-background : #3183b3;
3 | $primary-purple : #32273D;
4 | $button-primary : #3183b3;
5 | $button-color: #FFFFFF;
6 | $panel-headfoot : rgba(38,70,83,.8);
7 | $panel-content-header : #59476D;
8 | $analysis-button: #808080;
9 | $panel-container-background: rgba(38, 70, 83, 0.8);
10 | $selector-text: #8a7b9b;
11 | $dev-warning: #900 none repeat scroll 0% 0%;
12 | $slider-body: #D8D3DD;
13 | $slider-handles: #B1A7BC;
14 | $timeline-base: #D8D3DD;
15 | $timeline-lozenge:#3183b3;
16 | $timeline-text:#B1A7BC;
17 | $timeline-stroke:#59476D;
18 | $general-border: #D8D3DD;
19 | $start-btn-background: #3183b3;
20 |
21 | $panel-solid-background: transparent;
22 | $panel-solid-color: #efedf1;
23 | $footer-shadow: none;
24 | $popup-background: rgba(38, 70, 83, 0.8);
25 | $popup-color: white;
26 | $popup-shadow: 0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);
27 | $popup-arrow: rgba(38, 70, 83, 0.8);
28 | $popup-border: none;
29 | $map-background: rgba(38, 70, 83, 0.8);
30 | $timeline-background: #34515c;
31 | $timeline-color: white;
32 | $button-top-actions: #fafafa;
--------------------------------------------------------------------------------
/src/css/scss/_colours-modellers.scss:
--------------------------------------------------------------------------------
1 | $splash-color : #383A25;
2 | $secondary-background : #627fa7;
3 | $primary-purple : #203c63;
4 | $button-primary : rgba(1, 102, 118, 1);
5 | $button-color: #111111;
6 | $panel-headfoot : #274978;
7 | $panel-content-header : #41618E;
8 | $analysis-button: #808080;
9 | $panel-container-background: rgba(239, 237, 241, 0.5);
10 | $selector-text: #8a7b9b;
11 | $dev-warning: #900 none repeat scroll 0% 0%;
12 | $slider-body: rgba(1, 102, 118, 0.7);
13 | $slider-handles: rgba(1, 102, 118, 1);
14 | $timeline-base : #91A9C9;
15 | $timeline-lozenge : #102161;
16 | $timeline-text : black;
17 | $timeline-stroke : rgba(1, 102, 118, 1);
18 | $icon-underline : white;
19 | $general-border: rgba(0, 60, 69, 0.5);
20 | $start-btn-background: #627fa7;
21 |
22 | $panel-solid-background: #efedf1;
23 | $panel-solid-color: #111111;
24 | $footer-shadow: 0px -1px 5px -2px #000000;
25 | $popup-background: white;
26 | $popup-color: #111111;
27 | $popup-shadow: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
28 | $popup-arrow: white;
29 | $popup-border: 1px solid #cccccc;
30 | $map-background:#1a1a1a;
31 | $timeline-background: white;
32 | $timeline-color: #111111;
33 | $button-top-actions: #fafafa;
--------------------------------------------------------------------------------
/src/css/scss/_colours-petrel.scss:
--------------------------------------------------------------------------------
1 | $splash-color : #383A25;
2 | $secondary-background : #6f8a91;
3 | $primary-purple : #2c353b;
4 | $button-primary : #F75C03;
5 | $button-color: #111111;
6 | $panel-headfoot : #2c353b;
7 | $panel-content-header : #53676c;
8 | $analysis-button: #B80C09;
9 | $panel-container-background: rgba(239, 237, 241, 0.5);
10 | $selector-text: #2f2f2f;
11 | $dev-warning: #900 none repeat scroll 0% 0%;
12 | $slider-body: #93a7ac;
13 | $slider-handles: #6e888f;
14 | $timeline-base: #c4d0d2;
15 | $timeline-lozenge:#F75C03;
16 | $timeline-text:#93a7ac;
17 | $timeline-stroke:#53676c;
18 | $general-border: #c9d4d7;
19 | $start-btn-background: #F75C03;
20 |
21 | $panel-solid-background: #f5f5f5;
22 | $panel-solid-color: #111111;
23 | $footer-shadow: 0px -1px 5px -2px #000000;
24 | $popup-background: white;
25 | $popup-color: #111111;
26 | $popup-shadow: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
27 | $popup-arrow: white;
28 | $popup-border: 1px solid #cccccc;
29 | $map-background:#1a1a1a;
30 | $timeline-background: white;
31 | $timeline-color: #111111;
32 | $button-top-actions: #fafafa;
--------------------------------------------------------------------------------
/src/css/scss/_colours.scss:
--------------------------------------------------------------------------------
1 | $splash-color : #383A25;
2 | $secondary-background : #B1A7BC;
3 | $primary-purple : #32273D;
4 | $button-primary : #A19D63;
5 | $button-color: #111111;
6 | $panel-headfoot : #32253F;
7 | $panel-content-header : #59476D;
8 | $analysis-button: #808080;
9 | $panel-container-background: rgba(239, 237, 241, 0.5);
10 | $selector-text: #8a7b9b;
11 | $dev-warning: #900 none repeat scroll 0% 0%;
12 | $slider-body: #D8D3DD;
13 | $slider-handles: #B1A7BC;
14 | $timeline-base: #D8D3DD;
15 | $timeline-lozenge:#A19D63;
16 | $timeline-text:#B1A7BC;
17 | $timeline-stroke:#59476D;
18 | $general-border: #D8D3DD;
19 | $start-btn-background: #A19D63;
20 |
21 | $panel-solid-background: #efedf1;
22 | $panel-solid-color: #111111;
23 | $footer-shadow: 0px -1px 5px -2px #000000;
24 | $popup-background: white;
25 | $popup-color: #111111;
26 | $popup-shadow: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
27 | $popup-arrow: white;
28 | $popup-border: 1px solid #cccccc;
29 | $map-background:#1a1a1a;
30 | $timeline-background: white;
31 | $timeline-color: #111111;
32 | $button-top-actions: #fafafa;
--------------------------------------------------------------------------------
/src/css/scss/_edit-groups.scss:
--------------------------------------------------------------------------------
1 | div.js-edit-groups-html {
2 | width: 1250px;
3 | max-width:90%;
4 | max-height:90%;
5 | overflow:auto;
6 |
7 | table {
8 | width: 100%;
9 |
10 | .icon-btn {
11 | color: black;
12 | }
13 | }
14 |
15 | .js-create-group-btn {
16 | margin-top: 5px;
17 | margin-bottom: 5px;
18 | }
19 | }
20 |
21 | textarea.edit-group-members {
22 | min-height: 100px;
23 | min-width: 100%;
24 | max-width: 100%;
25 | }
--------------------------------------------------------------------------------
/src/css/scss/_export.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Export
3 | \*------------------------------------*/
4 |
5 | /* Ugh, way too over specified */
6 | .js-tab-analysis .grid-list.panel-list li.export-button {
7 | align-items: center;
8 | padding: 9px;
9 | }
10 |
11 | .export {
12 | background-color: rgba(0,0,0,0.8);
13 | }
14 |
15 | .export-container {
16 | background-color: $primary-purple;
17 | color: #f7f6f8;
18 | padding: 25px;
19 | }
20 |
21 | .export li {
22 | padding-bottom: 5px;
23 | }
24 |
25 | .export a {
26 | color: #fff;
27 | }
28 |
29 | .export .text-button {
30 | color: #fff;
31 | float: right;
32 | }
33 |
--------------------------------------------------------------------------------
/src/css/scss/_fonts.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Fonts
3 | This is where font faces are defined.
4 | You may be looking for type.css
5 | \*------------------------------------*/
6 |
7 | @font-face {
8 | font-family: 'Open Sans';
9 | src: url("../fonts/OpenSans-Regular-webfont.eot");
10 | src: url("../fonts/OpenSans-Regular-webfont?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Regular-webfont.woff") format("woff"), url("../fonts/OpenSans-Regular-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Regular-webfont.svg#OpenSans") format("svg");
11 | font-weight: 400;
12 | font-style: normal;
13 | }
14 |
15 | @font-face {
16 | font-family: 'Open Sans';
17 | src: url("../fonts/OpenSans-Light-webfont.eot");
18 | src: url("../fonts/OpenSans-Light-webfont?#iefix") format("embedded-opentype"), url("../fonts/OpenSans-Light-webfont.woff") format("woff"), url("../fonts/OpenSans-Light-webfont.ttf") format("truetype"), url("../fonts/OpenSans-Light-webfont.svg#OpenSans") format("svg");
19 | font-weight: 300;
20 | font-style: normal;
21 | }
22 |
23 | @font-face {
24 | font-family: 'Open Sans';
25 | src: url("../fonts/opensans-semibold-webfont.eot");
26 | src: url("../fonts/opensans-semibold-webfont?#iefix") format("embedded-opentype"), url("../fonts/opensans-semibold-webfont.woff") format("woff"), url("../fonts/opensans-semibold-webfont.ttf") format("truetype"), url("../fonts/opensans-semibold-webfont.svg#pensans") format("svg");
27 | font-weight: 600;
28 | font-style: normal;
29 | }
30 |
--------------------------------------------------------------------------------
/src/css/scss/_grid.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Grid
3 | \*------------------------------------*/
4 |
5 | .grid-list.panel-list li,
6 | .grid
7 | {
8 | display: flex;
9 | align-items: center;
10 | flex-flow: row wrap;
11 | min-height: 40px;
12 | }
13 |
14 | .js-tab-analysis .grid-list.panel-list li {
15 | align-items: flex-start;
16 | border-bottom: 1px solid #e0dce4;
17 | }
18 |
19 | .grid-list.panel-list li {
20 | flex-flow: row;
21 | }
22 |
23 |
24 | .grid-cell {
25 | margin-right: 1%;
26 | line-height: 1.5;
27 | align-items: center;
28 | word-wrap: break-word;
29 | }
30 |
31 | .icon-column {
32 | width: 40px;
33 | }
34 |
35 | /*
36 | .grid-cell:first-child {
37 | margin-left: 15px;
38 | }
39 | .grid-cell:last-child {
40 | margin-right: 15px;
41 | }
42 | */
43 |
44 | .grid-cell.fill {
45 | flex: 1;
46 | flex-basis: 100%;
47 | -ms-flex-preferred-size: 0px;
48 | margin-bottom: 10px;
49 | }
50 |
51 | @media only screen and (min-width : 1270px) {
52 | .grid-list.panel-list li,
53 | .grid {
54 | flex-flow: initial;
55 | }
56 |
57 | .reorder-before {
58 | margin-right: 15px;
59 | order: -1;
60 | }
61 |
62 | .fill {
63 | flex-basis: initial;
64 | marign: 0;
65 | }
66 | }
67 |
68 |
--------------------------------------------------------------------------------
/src/css/scss/_history.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | History Panel
3 | \*------------------------------------*/
4 |
5 |
6 | #historyPanel .graphJob {
7 |
8 | background: white;
9 | border-style: none;
10 | border: 1px solid $general-border;
11 | border-radius: 0;
12 | color: $selector-text;
13 | display: block;
14 | text-align: left;
15 | text-indent: 1px;
16 | text-overflow: '';
17 | line-height: 33px;
18 | padding-left: 10px;
19 | text-transform: capitalize;
20 | margin-top: 9px;
21 | width: 100%;
22 | }
23 |
24 | .saved, .not-saved, .loading-image{
25 | width: 16px;
26 | height: 16px;
27 | display: inline-block;
28 | }
29 |
30 | .saved:before, .not-saved:before{
31 | content: "\e09d";
32 | cursor: pointer;
33 | }
34 |
35 | .not-saved{
36 | font-family: "streamline-24px" !important;
37 | }
38 | .saved, not-saved:hover{
39 | font-family: "streamline-24px-filled-in" !important;
40 | }
--------------------------------------------------------------------------------
/src/css/scss/_metadata-panel.scss:
--------------------------------------------------------------------------------
1 | .metadata-slideout p {
2 | padding:10px;
3 | }
4 | .metadata-slideout strong {
5 | display:block;
6 | font-weight: bold !important;
7 |
8 | }
9 |
10 | .metadata-box {
11 | background:#fbfafb;
12 | margin-top:15px;
13 | }
14 |
--------------------------------------------------------------------------------
/src/css/scss/_reset.scss:
--------------------------------------------------------------------------------
1 | /* http://meyerweb.com/eric/tools/css/reset/
2 | v2.0 | 20110126
3 | License: none (public domain)
4 | */
5 |
6 | html, body, div, span, applet, object, iframe,
7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre,
8 | a, abbr, acronym, address, big, cite, code,
9 | del, dfn, em, img, ins, kbd, q, s, samp,
10 | small, strike, strong, sub, tt, var,
11 | b, u, center,
12 | dl, dt, dd, ol, ul, li,
13 | fieldset, form, label, legend,
14 | table, caption, tbody, tfoot, thead, tr, th, td,
15 | article, aside, canvas, details, embed,
16 | figure, figcaption, footer, header, hgroup,
17 | menu, nav, output, ruby, section, summary,
18 | time, mark, audio, video {
19 | margin: 0;
20 | padding: 0;
21 | border: 0;
22 | font-size: inherit;
23 | font: inherit;
24 | vertical-align: baseline;
25 | font-weight: inherit !important;
26 | }
27 | /* HTML5 display-role reset for older browsers */
28 | article, aside, details, figcaption, figure,
29 | footer, header, hgroup, menu, nav, section {
30 | display: block;
31 | }
32 | body {
33 | height: 100%;
34 | width: 100%;
35 | overflow: hidden;
36 | position: fixed;
37 | line-height: 1;
38 | }
39 | ol, ul {
40 | list-style: none;
41 | }
42 | blockquote, q {
43 | quotes: none;
44 | }
45 | blockquote:before, blockquote:after,
46 | q:before, q:after {
47 | content: '';
48 | content: none;
49 | }
50 | table {
51 | border-collapse: collapse;
52 | border-spacing: 0;
53 | }
54 | b,
55 | strong{
56 | font-weight:bold !important;
57 | }
--------------------------------------------------------------------------------
/src/css/scss/_share.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Share
3 | \*------------------------------------*/
4 |
5 | .share-map-button {
6 | background: #fff;
7 | border-top: 1px solid #e0dce4;
8 | padding: 9px;
9 |
10 | display: flex;
11 | align-items: center;
12 | }
13 |
14 | .share-map-button label,
15 | .export-button label {
16 | flex: 1;
17 | }
18 |
19 | .share {
20 |
21 | }
22 |
23 | /*.share-container {
24 | background-color: $primary-purple;
25 | color: #f7f6f8;
26 | padding: 25px;
27 | }
28 |
29 | .share-container .js-close-share {
30 | color: #f7f6f8;
31 | float: right;
32 | }
33 | */
34 | .js-shareurl {
35 | padding: 5px;
36 | margin-top: 5px;
37 | width: 100%;
38 | }
39 |
40 | #share-map {
41 | cursor: pointer;
42 | }
43 |
44 | #share-map span{
45 | position: relative;
46 | top: 3px;
47 | font-size: 16px;
48 | }
--------------------------------------------------------------------------------
/src/css/scss/_start.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Start Page
3 | \*------------------------------------*/
4 |
5 | .start {
6 | background-repeat: no-repeat;
7 | background-position: center center;
8 | background-size: cover;
9 | z-index: 1000;
10 | overflow-y: auto;
11 | }
12 | .start-dev {
13 | background-color: $splash-color;
14 | }
15 |
16 | .start-container {
17 | background: $primary-purple;
18 | color: #f7f6f8;
19 | padding: 0px;
20 | }
21 |
22 | .intro-text {
23 | padding: 25px;
24 | padding-bottom: 10px;
25 | }
26 |
27 | .intro-text p {
28 | padding-bottom: 10px;
29 | }
30 |
31 | .intro-text a{
32 | color: white;
33 | }
34 |
35 | .start-nav {
36 | background: $primary-purple;
37 | padding: 20px 15px;
38 | text-align: right;
39 | }
40 |
41 | .homepageSlider{
42 | width: 100%;
43 | height: 400px;
44 | position: relative;
45 | overflow: hidden;
46 | }
47 |
48 | .homepageSlider-wrap{
49 | position: relative;
50 | height: 100%;
51 | width: 100%;
52 | }
53 |
54 | .homepageSlider-wrap div{
55 | height: 100%;
56 | width: 100%;
57 | background-size: cover;
58 | background-position: center center;
59 | float:left;
60 | position: relative;
61 | }
62 |
63 | .browse-not-compatible{
64 | display: none;
65 | z-index: 1000;
66 |
67 | position: absolute;
68 | top: 50%;
69 | left: 50%;
70 |
71 | margin-left: -200px;
72 | margin-top: -84px;
73 |
74 | height: 168px;
75 | width: 400px;
76 |
77 | color: white;
78 | padding: 26px 15px;
79 | background: $primary-purple;
80 | }
81 | .browse-not-compatible h3{
82 | text-align: center;
83 | font-size: 30px;
84 | }
85 |
--------------------------------------------------------------------------------
/src/css/scss/_tables.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Tables
3 | \*------------------------------------*/
4 | table {
5 | padding-top: 20px;
6 | padding-bottom: 20px;
7 | }
8 |
9 | tr {
10 | border-bottom: 1px solid #e0dce4;
11 | }
12 |
13 | tr:first-child {
14 | border-top: 1px solid #e0dce4;
15 | }
16 |
17 | table.stripe tr:nth-child(even) {
18 | background-color: #fbfafb;
19 | }
20 |
21 | td {
22 | /*height: 40px; if tables are broken this is why*/
23 | /*line-height: 1.5;
24 | padding-left: 15px;
25 | vertical-align: middle;*/
26 | /* user-select: initial;*/
27 | }
28 |
29 | table.layers-form-table{
30 | border-collapse: separate;
31 | }
32 |
33 | table.layers-form-table td{
34 | padding: 5px;
35 | white-space:nowrap
36 | }
37 |
38 | table.layers-form-table th{
39 | font-weight: bold;
40 | }
--------------------------------------------------------------------------------
/src/css/scss/_type.scss:
--------------------------------------------------------------------------------
1 | /*------------------------------------*\
2 | Type
3 | This is where the type styles are
4 | defined. You may be looking for
5 | fonts.css
6 | \*------------------------------------*/
7 |
8 | body {
9 | font-family: 'Open Sans', sans-serif;
10 | font-size: 13px;
11 | font-size: 0.8125rem; /* 13/16 = 0.8125 */
12 | line-height: 1.5;
13 | }
14 |
15 | h3 {
16 | font-size: 15px;
17 | font-size: 0.9375rem; /* 15/16=0.9275 */
18 | font-weight: 600;
19 | }
20 |
21 | h4 {
22 | font-size: 14px;
23 | font-size: 0.875rem; /* 14/16=0.875 */
24 | font-weight: 600;
25 | }
26 |
27 | .bold { font-weight: 600; }
28 |
29 | /* Start Screen */
30 |
31 | .intro-text,
32 | .share-container h2,
33 | .overlay-container h2,
34 | .export-container h2 {
35 | color: #f7f6f8;
36 | font-size: 20px;
37 | font-size: 1.25rem; /* 24/16 = 1.5 */
38 | font-weight: 300;
39 | }
40 |
41 | .examples a {
42 | color: #f7f6f8;
43 | }
44 |
45 | /* Buttons */
46 |
47 | .brand {
48 | /* Font was falling back to Arial, not sure why
49 | so for now explicitly making Open Sans */
50 | font-family: 'Open Sans', sans-serif;
51 | font-size: 14px;
52 | font-size: 0.875rem; /* 18/16 = 1.125 */
53 | font-weight: 600;
54 | text-decoration: none;
55 | }
56 |
57 | /* Panel */
58 |
59 | .panel-tab-name {
60 | color: $selector-text;
61 | font-size: 13px;
62 | font-size: 0.8125rem; /* 13/16=0.8125 */
63 | font-weight: 600;
64 | text-align: center;
65 | }
66 |
67 | .number {
68 | font-size: 24px;
69 | font-size: 1.5rem;
70 | text-align: center;
71 | }
72 |
73 | .bbox-info dt {
74 | color: #545454;
75 | }
76 |
--------------------------------------------------------------------------------
/src/css/scss/_user.scss:
--------------------------------------------------------------------------------
1 |
2 | .userHolder {padding-bottom: 20px;}
3 | .userHolder p {margin: 7px 0px;}
4 |
5 | .userHolder .name {
6 | font-weight: bold;
7 | }
8 | .userHolder .email {
9 | font-style: italic;
10 | }
11 | .userHolder .logout {
12 | text-align: right;
13 | margin-top: 10px;
14 | }
15 |
16 | .userHolder .avatar {
17 | width: 75px;
18 | height: auto;
19 | border-radius: 50%;
20 | float: left;
21 | margin-right: 10px;
22 | }
23 |
24 | .userHolder ul li {
25 | list-style: square inside;
26 | margin-left: 8px;
27 | }
28 |
29 | body.login {
30 | background: #efedf1;
31 | text-align: center;
32 | }
33 |
34 | .userLogin {
35 | width: 500px;
36 | text-align: left;
37 | border: 1px solid #ccc;
38 | background: #fff;
39 | margin: 40px auto;
40 | padding: 20px;
41 | border-radius: 7px;
42 | }
43 |
44 | .loginButton-google {
45 | width: 200px;
46 | cursor: pointer;
47 | height: auto;
48 | padding-top: 10px
49 | }
50 |
51 | .loginButton-saml {
52 | width: 197px;
53 | height: auto;
54 | cursor: pointer;
55 | padding: 10px 0 0 3px;
56 | }
57 |
58 | .error {
59 | color: #842029;
60 | background-color: #f8d7da;
61 | border-color: #f5c2c7;
62 | position: relative;
63 | padding: 1rem 1rem;
64 | margin-bottom: 1rem;
65 | border: 1px solid transparent;
66 | border-radius: .25rem;
67 | }
--------------------------------------------------------------------------------
/src/css/scss/_vector.scss:
--------------------------------------------------------------------------------
1 | .legend-colour-block {
2 | width: 40px;
3 | height: 40px;
4 | }
5 |
6 | .legend-table td:first-child{
7 | padding-right:25px;
8 | }
--------------------------------------------------------------------------------
/src/css/scss/gisportal-marine-eo.scss:
--------------------------------------------------------------------------------
1 | @import "_colours-marine-eo.scss";
2 | @import "_alerts.scss";
3 | @import "_animation.scss";
4 | @import "_export.scss";
5 | @import "_fonts.scss";
6 | @import "_main.scss";
7 | @import "_plot.scss";
8 | @import "_grid.scss";
9 | @import "_history.scss";
10 | @import "_icons.scss";
11 | @import "_jquery.nouislider.scss";
12 | @import "_indicators.scss";
13 | @import "_compare.scss";
14 |
15 | @import "_mapcontrols.scss";
16 | @import "_metadata-panel.scss";
17 | @import "_nv.d3.scss";
18 | @import "_overlay.scss";
19 | @import "_panel.scss";
20 | @import "_panel-slideout.scss";
21 | @import "_add-layers-form.scss";
22 | @import "_edit-groups.scss";
23 | @import "_popup.scss";
24 | @import "_reset.scss";
25 | @import "_scalebar.scss";
26 | @import "_share.scss";
27 | @import "_start.scss";
28 | @import "_streamline.scss";
29 | @import "_streamline-filled-in.scss";
30 | @import "_tables.scss";
31 | @import "_timeline.scss";
32 | @import "_type.scss";
33 | @import "_walkthrough.scss";
34 | @import "_vector.scss";
35 |
36 | @import "_collaboration.scss";
37 | @import "_notify.scss";
38 | @import "_user.scss";
39 |
40 |
41 | @import "../../../html/js-libs/tooltipster/css/tooltipster.scss";
42 | @import "../../../html/js-libs/tooltipster/css/themes/tooltipster-shadow.scss";
43 |
44 |
--------------------------------------------------------------------------------
/src/css/scss/gisportal.scss:
--------------------------------------------------------------------------------
1 | @import "_colours.scss";
2 | @import "_alerts.scss";
3 | @import "_animation.scss";
4 | @import "_export.scss";
5 | @import "_fonts.scss";
6 | @import "_main.scss";
7 | @import "_plot.scss";
8 | @import "_grid.scss";
9 | @import "_history.scss";
10 | @import "_icons.scss";
11 | @import "_jquery.nouislider.scss";
12 | @import "_indicators.scss";
13 | @import "_compare.scss";
14 |
15 | @import "_mapcontrols.scss";
16 | @import "_metadata-panel.scss";
17 | @import "_nv.d3.scss";
18 | @import "_overlay.scss";
19 | @import "_panel.scss";
20 | @import "_panel-slideout.scss";
21 | @import "_add-layers-form.scss";
22 | @import "_edit-groups.scss";
23 | @import "_popup.scss";
24 | @import "_reset.scss";
25 | @import "_scalebar.scss";
26 | @import "_share.scss";
27 | @import "_start.scss";
28 | @import "_streamline.scss";
29 | @import "_streamline-filled-in.scss";
30 | @import "_tables.scss";
31 | @import "_timeline.scss";
32 | @import "_type.scss";
33 | @import "_walkthrough.scss";
34 | @import "_vector.scss";
35 |
36 | @import "_collaboration.scss";
37 | @import "_notify.scss";
38 | @import "_user.scss";
39 |
40 |
41 | @import "../../../html/js-libs/tooltipster/css/tooltipster.scss";
42 | @import "../../../html/js-libs/tooltipster/css/themes/tooltipster-shadow.scss";
43 |
44 |
--------------------------------------------------------------------------------
/src/css/scss/gisportal_blue.scss:
--------------------------------------------------------------------------------
1 | @import "_colours-blue.scss";
2 | @import "_alerts.scss";
3 | @import "_animation.scss";
4 | @import "_export.scss";
5 | @import "_fonts.scss";
6 | @import "_main.scss";
7 | @import "_plot.scss";
8 | @import "_grid.scss";
9 | @import "_history.scss";
10 | @import "_icons.scss";
11 | @import "_jquery.nouislider.scss";
12 | @import "_indicators.scss";
13 | @import "_compare.scss";
14 |
15 | @import "_mapcontrols.scss";
16 | @import "_metadata-panel.scss";
17 | @import "_nv.d3.scss";
18 | @import "_overlay.scss";
19 | @import "_panel.scss";
20 | @import "_panel-slideout.scss";
21 | @import "_add-layers-form.scss";
22 | @import "_popup.scss";
23 | @import "_reset.scss";
24 | @import "_scalebar.scss";
25 | @import "_share.scss";
26 | @import "_start.scss";
27 | @import "_streamline.scss";
28 | @import "_streamline-filled-in.scss";
29 | @import "_tables.scss";
30 | @import "_timeline.scss";
31 | @import "_type.scss";
32 | @import "_walkthrough.scss";
33 | @import "_vector.scss";
34 |
35 | @import "_collaboration.scss";
36 | @import "_notify.scss";
37 | @import "_user.scss";
38 |
39 |
40 | @import "../../../html/js-libs/tooltipster/css/tooltipster.scss";
41 | @import "../../../html/js-libs/tooltipster/css/themes/tooltipster-shadow.scss";
42 |
--------------------------------------------------------------------------------
/src/css/scss/gisportal_modellers.scss:
--------------------------------------------------------------------------------
1 | @import "_colours-modellers.scss";
2 | @import "_alerts.scss";
3 | @import "_animation.scss";
4 | @import "_export.scss";
5 | @import "_fonts.scss";
6 | @import "_main.scss";
7 | @import "_plot.scss";
8 | @import "_grid.scss";
9 | @import "_history.scss";
10 | @import "_icons.scss";
11 | @import "_jquery.nouislider.scss";
12 | @import "_indicators.scss";
13 | @import "_compare.scss";
14 |
15 | @import "_mapcontrols.scss";
16 | @import "_metadata-panel.scss";
17 | @import "_nv.d3.scss";
18 | @import "_overlay.scss";
19 | @import "_panel.scss";
20 | @import "_panel-slideout.scss";
21 | @import "_add-layers-form.scss";
22 | @import "_popup.scss";
23 | @import "_reset.scss";
24 | @import "_scalebar.scss";
25 | @import "_share.scss";
26 | @import "_start.scss";
27 | @import "_streamline.scss";
28 | @import "_streamline-filled-in.scss";
29 | @import "_tables.scss";
30 | @import "_timeline.scss";
31 | @import "_type.scss";
32 | @import "_walkthrough.scss";
33 | @import "_vector.scss";
34 |
35 | @import "_collaboration.scss";
36 | @import "_notify.scss";
37 | @import "_user.scss";
38 |
39 |
40 | @import "../../../html/js-libs/tooltipster/css/tooltipster.scss";
41 | @import "../../../html/js-libs/tooltipster/css/themes/tooltipster-shadow.scss";
42 |
--------------------------------------------------------------------------------
/src/css/scss/gisportal_petrel.scss:
--------------------------------------------------------------------------------
1 | @import "_colours-petrel.scss";
2 | @import "_alerts.scss";
3 | @import "_animation.scss";
4 | @import "_export.scss";
5 | @import "_fonts.scss";
6 | @import "_main.scss";
7 | @import "_plot.scss";
8 | @import "_grid.scss";
9 | @import "_history.scss";
10 | @import "_icons.scss";
11 | @import "_jquery.nouislider.scss";
12 | @import "_indicators.scss";
13 | @import "_compare.scss";
14 |
15 | @import "_mapcontrols.scss";
16 | @import "_metadata-panel.scss";
17 | @import "_nv.d3.scss";
18 | @import "_overlay.scss";
19 | @import "_panel.scss";
20 | @import "_panel-slideout.scss";
21 | @import "_add-layers-form.scss";
22 | @import "_edit-groups.scss";
23 | @import "_popup.scss";
24 | @import "_reset.scss";
25 | @import "_scalebar.scss";
26 | @import "_share.scss";
27 | @import "_start.scss";
28 | @import "_streamline.scss";
29 | @import "_streamline-filled-in.scss";
30 | @import "_tables.scss";
31 | @import "_timeline.scss";
32 | @import "_type.scss";
33 | @import "_walkthrough.scss";
34 | @import "_vector.scss";
35 |
36 | @import "_collaboration.scss";
37 | @import "_notify.scss";
38 | @import "_user.scss";
39 |
40 |
41 | @import "../../../html/js-libs/tooltipster/css/tooltipster.scss";
42 | @import "../../../html/js-libs/tooltipster/css/themes/tooltipster-shadow.scss";
43 |
44 |
--------------------------------------------------------------------------------
/src/css/scss/login.scss:
--------------------------------------------------------------------------------
1 | @import "_colours.scss";
2 | @import "_main.scss";
3 | @import "_fonts.scss";
4 | @import "_type.scss";
5 | @import "_user.scss";
--------------------------------------------------------------------------------
/src/js/loading.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Code for the loading icon
3 | * Can be used anyway buy calling gisportal.loading.increment()
4 | * when the code starts loading and gisportal.loading.decrement()
5 | * when the code stops loading.
6 | */
7 |
8 | gisportal.loading = {};
9 | gisportal.loading.counter = 0;
10 | gisportal.loading.loadingElement = jQuery('');
11 | gisportal.loading.loadingTimeout = null;
12 |
13 |
14 | /**
15 | * Increases the counter of how many things are currently loading
16 | */
17 | gisportal.loading.increment = function(){
18 | gisportal.loading.counter++;
19 | gisportal.loading.updateLoadingIcon();
20 | };
21 |
22 | /**
23 | * Decreases the counter of how many things are currently loading
24 | */
25 | gisportal.loading.decrement = function(){
26 | gisportal.loading.counter--;
27 | gisportal.loading.updateLoadingIcon();
28 | };
29 |
30 | /**
31 | * Either show or hide the loading icon.
32 | * A delay is added to show because layers can update in a few milliseconds causing a horrible flash
33 | */
34 | gisportal.loading.updateLoadingIcon = function(){
35 |
36 | if( gisportal.loading.loadingTimeout !== null )
37 | return ;
38 |
39 | gisportal.loading.loadingTimeout = setTimeout(function(){
40 | gisportal.loading.loadingTimeout = null;
41 | if( gisportal.loading.counter > 0 ){
42 | gisportal.loading.loadingElement.show();
43 |
44 | }else{
45 | gisportal.loading.loadingElement.hide();
46 | }
47 | }, gisportal.loading.counter ? 300 : 600);
48 | };
49 |
--------------------------------------------------------------------------------
/src/js/login.js:
--------------------------------------------------------------------------------
1 | let providers = {}
2 |
--------------------------------------------------------------------------------
/src/js/portal.js:
--------------------------------------------------------------------------------
1 | /**
2 | * portal.js
3 | * This file is the entry point to the GIS Portal.
4 | * It should only have a call to gisportal.main()
5 | * This function is held in gisportal.js
6 | */
7 |
8 | $(document).ready(function() {
9 |
10 | // IE 9 Fix for missing console
11 | if (!window.console) window.console = {};
12 | if (!window.console.log) window.console.log = function () { };
13 | if (!window.console.info) window.console.info = function () { };
14 | $.ajax({
15 | url: gisportal.middlewarePath + '/settings/config',
16 | dataType: 'script',
17 | success: function(script){
18 | eval(script); // jshint ignore:line
19 | gisportal.main();
20 | }
21 | });
22 | });
23 |
--------------------------------------------------------------------------------
/src/js/user_feedback.js:
--------------------------------------------------------------------------------
1 | // Unique session ID which is posted to UserVioice
2 | // When a request is made you can go into the
3 | // state's database and retrieve the information
4 | window.session_id = (new Date()).getTime() + "-" + Math.floor( Math.random() * 1000000 );
5 |
6 | $(function(){
7 | // When a user clients the user voice icon store the state
8 | $('body').on('click', '.uv-icon', function(){
9 | $.ajax({
10 | method: 'POST',
11 | url: gisportal.stateLocation,
12 | data: {
13 | state: JSON.stringify(gisportal.getState()),
14 | session_id: window.session_id
15 | }
16 | });
17 | });
18 | });
19 |
20 | UserVoice=window.UserVoice||[];
21 |
22 | // Set the ID
23 | UserVoice.push(['setCustomFields',{ 'Session ID': window.session_id }]);
24 |
25 | // Set colors
26 | UserVoice.push(['set', {
27 | accent_color: '#448dd6',
28 | trigger_color: 'white',
29 | trigger_background_color: 'rgba(46, 49, 51, 0.6)'
30 | }]);
31 |
32 |
33 | // Add default trigger to the bottom-right corner of the window:
34 | UserVoice.push(['addTrigger', { mode: 'contact', trigger_position: 'bottom-right' }]);
35 |
36 | // Autoprompt for Satisfaction and SmartVote (only displayed under certain conditions)
37 | UserVoice.push(['autoprompt', {}]);
--------------------------------------------------------------------------------
/src/templates/active-plot-component.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Indicator: {{indicatorObj.descriptiveName}}
5 | {{#if bbox}}
6 |
7 | BBox:
8 | {{truncate bbox 18}}
9 | {{/if}}
10 | {{#if elevation}}
11 |
12 | Depth:
13 | {{round elevation 2}} {{indicatorObj.elevationUnits}}
14 | {{/if}}
15 |
16 | {{xText}}
17 | {{yText}}
18 |
19 |
20 | Axis Label :
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/templates/add-indicator-dropdown.mst:
--------------------------------------------------------------------------------
1 | {{#each layers}}
2 | {{truncate descriptiveName 36}}
3 | {{/each}}
4 |
5 | New Indicator
--------------------------------------------------------------------------------
/src/templates/add-layers-paginator.mst:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
18 |
19 | ✔ Submit Layers
20 | ✖ Cancel Changes
21 |
--------------------------------------------------------------------------------
/src/templates/add-layers-table.mst:
--------------------------------------------------------------------------------
1 |
2 |
40 |
41 | Submit Layers
42 |
--------------------------------------------------------------------------------
/src/templates/add-layers-validation.mst:
--------------------------------------------------------------------------------
1 | {{#each this}}
2 | {{@key}} {{this}}
3 | {{/each}}
--------------------------------------------------------------------------------
/src/templates/browseIndicators.mst:
--------------------------------------------------------------------------------
1 | {{! List of used variables for this template:
2 | id - The indicator id
3 | name - The name to be shown for the indicator
4 | }}
5 | {{#unless empty_search}}
6 | {{#each indicators}}
7 |
8 | {{name}}
9 |
10 | {{else}}
11 |
12 | No results for "{{search_term}}"
13 |
14 | {{/each}}
15 | {{/unless}}
--------------------------------------------------------------------------------
/src/templates/categories.mst:
--------------------------------------------------------------------------------
1 | {{! List of used variables for this template:
2 | category - The category
3 | name - The name to be shown for the category
4 | }}
5 |
6 |
7 |
8 | {{#indicators}}
9 | {{name}}
16 |
17 | {{/indicators}}
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/templates/category-filter-selectlist.mst:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/templates/category-filter.mst:
--------------------------------------------------------------------------------
1 |
2 | 1 2 3
3 |
--------------------------------------------------------------------------------
/src/templates/category-simple-selectlist.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
No layers match your filtering. Click reset to clear your filters.
5 |
6 | Reset
7 |
8 |
9 |
10 |
11 | Available indicators:
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/templates/collaboration-home.mst:
--------------------------------------------------------------------------------
1 |
2 | Leave the room
3 | Invite People
4 | Record session
5 |
6 |
7 |
8 |
Invite People
9 |
Copy the address in the text field below and paste into an email, Skype chat or IRC channel to invite people to your room.
10 |
11 |
Press Ctrl+C (or ⌘+C on a Mac) to copy
12 |
13 |
14 | Connected people in this room:
15 |
16 | {{#people}}
17 |
18 |
{{name}}
19 | {{#presenter}}
{{/presenter}}
20 | {{#diverged}}
{{/diverged}}
21 |
22 | {{/people}}
--------------------------------------------------------------------------------
/src/templates/collaboration-invite.mst:
--------------------------------------------------------------------------------
1 | You have been invited to join a collaboration session{{#if from}} by {{from}}{{/if}}
2 |
3 |
Accept Invitation
4 |
Reject
--------------------------------------------------------------------------------
/src/templates/collaboration-message.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{#if image}}
4 |
5 | {{/if}}
6 |
{{{message}}}
7 |
8 |
--------------------------------------------------------------------------------
/src/templates/collaboration-messenger.mst:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/templates/collaboration-person-local.mst:
--------------------------------------------------------------------------------
1 |
2 | You
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/templates/collaboration-person-remote.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{person.name}}
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/templates/collaboration-status.mst:
--------------------------------------------------------------------------------
1 |
2 |
Initialising connection...
--------------------------------------------------------------------------------
/src/templates/collaboration-video.mst:
--------------------------------------------------------------------------------
1 | {{#if compatable}}
2 | {{#unless insecure}}
3 |
4 | Enable Audio/Video
5 |
6 |
7 |
People With Audio/Video Enabled:
8 |
9 |
10 | {{else}}
11 |
Audio/Video is not available on insecure origins.
12 | {{/unless}}
13 | {{else}}
14 |
Audio/Video is not available on this browser.
15 | {{/if}}
--------------------------------------------------------------------------------
/src/templates/collaboration.mst:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/src/templates/edit-group-form.mst:
--------------------------------------------------------------------------------
1 |
5 |
6 | Name
7 |
8 | Members (comma seperated)
9 | {{#if this}}{{membersString}}{{/if}}
10 |
11 |
Save Group
12 |
--------------------------------------------------------------------------------
/src/templates/edit-groups-table.mst:
--------------------------------------------------------------------------------
1 |
5 | {{#if this}}
6 |
7 |
8 | Group Name
9 | Members
10 | Edit
11 |
12 | {{#each this}}
13 |
14 | {{groupName}}
15 |
16 |
17 | {{#each members}}
18 | {{this}}
19 | {{/each}}
20 |
21 |
22 |
23 |
24 |
25 | {{/each}}
26 |
27 | {{else}}
28 | No groups found.
29 | {{/if}}
30 |
Create Group
31 |
--------------------------------------------------------------------------------
/src/templates/edit-layers-table.mst:
--------------------------------------------------------------------------------
1 |
5 | {{#if this}}
6 |
7 |
8 |
9 | Server Name
10 | {{#if admin}}Owner {{/if}}
11 | Provider
12 | Cache Time Stamp
13 | Configure Tools
14 |
15 | {{#each server_list}}
16 |
17 |
18 | {{serverName}}
19 | {{#if ../admin}}{{owner}} {{/if}}
20 | {{provider}}
21 | {{timeStamp}}
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | {{#each includedLayers}}
31 | {{#if @first}}Included Layers {{/if}}
32 | {{title}}
33 | {{/each}}
34 | {{#each excludedLayers}}
35 | {{#if @first}}Excluded Layers {{/if}}
36 | {{title}}
37 | {{/each}}
38 |
39 |
40 |
41 |
42 |
43 | {{/each}}
44 |
45 | {{else}}
46 | There are currently no servers available for you to configure. Please close this form and add an external WMS URL to add it to your portal.
47 | {{/if}}
--------------------------------------------------------------------------------
/src/templates/export-raw.mst:
--------------------------------------------------------------------------------
1 |
5 |
6 |
The NetCDF file that you download can be visualised by several free software packages, for instance on linux based systems you can use ncview and on windows based systems you can use QGIS . For more information about the data format and available software take a look at the unidata help pages
7 |
8 |
9 |
10 |
11 |
12 |
13 |
Download
14 |
--------------------------------------------------------------------------------
/src/templates/graph.mst:
--------------------------------------------------------------------------------
1 |
2 |
{{title}} ({{units}})
3 |
4 |
Export
5 |
{{providerLogo}}
6 |
--------------------------------------------------------------------------------
/src/templates/map-settings.mst:
--------------------------------------------------------------------------------
1 |
2 |
Display Options
3 |
4 |
5 |
6 | Base Map Layer
7 |
8 | {{#baseLayers}}
9 | {{name}}
10 | {{/baseLayers}}
11 |
12 |
13 |
14 |
15 | Country Borders
16 |
17 | {{#countryBorders}}
18 | {{name}}
19 | {{/countryBorders}}
20 |
21 |
22 |
23 | Display Lat/Lon Graticules
24 |
25 | Off
26 | On
27 |
28 |
29 |
30 | Display Projection
31 |
32 | {{#projections}}
33 | {{code}}
34 | {{/projections}}
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/templates/plot-data.mst:
--------------------------------------------------------------------------------
1 |
2 |
Metadata:
3 | {{#each data}}
4 | {{label}}
5 | {{{meta}}}
6 | {{/each}}
7 |
--------------------------------------------------------------------------------
/src/templates/plot-popup.mst:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/templates/plot-status.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{#if id}}
4 | {{#if saved}}
5 |
6 | {{else}}
7 |
8 | {{/if}}
9 | {{else}}
10 |
11 | {{/if}}
12 |
13 |
{{call 'title'}}
14 |
15 |
16 |
17 | {{!-- Using helpers from templates.js:134
18 | Equivilent to:
19 | if state != 'complete' and state != 'failed' --}}
20 | {{#if (and
21 | (ne (call 'state') 'complete')
22 | (ne (call 'state') 'failed')
23 | )}}
24 |
25 |
Delete
26 |
27 | {{/if}}
28 | {{#if_equals (call 'state') 'complete' }}
29 |
30 |
31 | Delete
32 | {{#unless ../noCopyEdit}}
33 | Copy/Edit
34 | {{/unless}}
35 | Open
36 |
37 | {{/if_equals}}
38 | {{#if_equals (call 'state') 'failed' }}
39 |
40 |
41 | The plot could not be built. Downstream error.
42 |
Delete
43 |
Full error message
44 |
45 | {{/if_equals}}
46 |
47 |
--------------------------------------------------------------------------------
/src/templates/refine.mst:
--------------------------------------------------------------------------------
1 |
There are now {{indicatorCount}} {{indicatorName}} indicators to choose from. Use the select lists below to refine your selection
2 | {{#refine}}
3 |
9 | {{/refine}}
10 |
11 |
--------------------------------------------------------------------------------
/src/templates/scalebar-preview.mst:
--------------------------------------------------------------------------------
1 |
Scalebar Preview:
2 |
3 | {{#if scalePoints}}
4 |
{{scale_point ../id 0 true}}
5 |
{{scale_point ../id 1 true}}
6 |
{{scale_point ../id 2 true}}
7 |
{{scale_point ../id 3 true}}
8 |
{{scale_point ../id 4 true}}
9 | {{/if}}
--------------------------------------------------------------------------------
/src/templates/scalebar.mst:
--------------------------------------------------------------------------------
1 | {{#if hasDate}}
{{niceSelectedDateTime}}
{{/if}}
2 | {{#if units}}
Scale - {{units}}
{{/if}}
3 |
4 |
5 |
6 | {{{scalebar_overlay_text colorbands minScaleVal maxScaleVal log}}}
7 |
8 | {{#if legendSettings.scalePoints}}
9 | {{#scalePoints}}
10 |
{{nicePrint}}
11 | {{/scalePoints}}
12 | {{/if}}
13 |
--------------------------------------------------------------------------------
/src/templates/server-form.mst:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
39 |
--------------------------------------------------------------------------------
/src/templates/share-logged-out.mst:
--------------------------------------------------------------------------------
1 |
Sign in to access more features
2 |
Sign in with
3 | {{#providers}}
4 |
{{title}}
5 | {{/providers}}
6 |
--------------------------------------------------------------------------------
/src/templates/start.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{{startHTML}}}
4 |
5 | {{#if impactCollection}}
6 |
7 | {{/if}}
8 | {{#if homepageSlides}}
9 |
10 |
11 | {{#each homepageSlides}}
12 |
13 | {{/each}}
14 |
15 |
16 | {{/if}}
17 |
18 |
19 | {{#if hasAutoSaveState}}
20 |
21 | Load your previous map
22 | {{/if}}
23 | Start building a map
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/templates/tab-vectorstyles.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vector styles
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/templates/terms-and-conditions-text.mst:
--------------------------------------------------------------------------------
1 |
Terms and Conditions
2 |
3 | Use by you of the data (which includes model outputs and simulations)
4 | on this site is entirely at your own risk. This data is
5 | provided “as is” without any warranty of any kind, either expressed or
6 | implied, including without limitation, any implied warranties as to its
7 | merchantability or its suitability for any use. All implied conditions
8 | relating to the quality or suitability of the data and the medium on
9 | which it is provided, and all liabilities arising from the supply of the
10 | data (including any liability arising in negligence) are excluded to the
11 | fullest extent permitted by law.
12 |
13 | In using the data you agree to acknowledge use of the data in the
14 | acknowledgment section of any resulting publication.
--------------------------------------------------------------------------------
/src/templates/tooltip-layerordermove.mst:
--------------------------------------------------------------------------------
1 | Click and hold the indicator name and drag up or down, let go to set the new order
--------------------------------------------------------------------------------
/src/templates/tooltip-next-previous.mst:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/templates/tooltip-refine-external-details.mst:
--------------------------------------------------------------------------------
1 | {{#if name}}
2 |
3 | Title
4 | {{{name}}}
5 |
6 | {{/if}}
7 | {{#if firstDate}}
8 |
9 | Date Range
10 | {{{firstDate}}} - {{lastDate}}
11 |
12 | {{/if}}
13 | {{#if exBoundingBox}}
14 | {{#with exBoundingBox}}
15 |
16 | Bounding Box
17 | {{round NorthBoundLatitude 2}} N, {{round EastBoundLongitude 2}} E, {{round SouthBoundLatitude 2}} S, {{round WestBoundLongitude 2}} W
18 |
19 | {{/with}}
20 | {{/if}}
21 | {{#if abstract}}
22 |
23 | Abstract
24 | {{{dotdotdot abstract}}}
25 |
26 | {{/if}}
27 | {{#if serverName}}
28 |
29 | Server Name
30 | {{{serverName}}}
31 |
32 | {{/if}}
33 | {{#if owner}}
34 |
35 | Owner
36 | {{{owner}}}
37 |
38 | {{/if}}
39 |
--------------------------------------------------------------------------------
/src/templates/tooltip-refinedetails.mst:
--------------------------------------------------------------------------------
1 |
2 | Provider
3 | {{provider}}
4 |
5 |
6 | Date Range
7 | {{dateStart}} » {{dateEnd}}
8 |
9 | {{#tags}}
10 |
11 | {{name}}
12 | {{value}}
13 |
14 | {{/tags}}
15 | {{#if owner}}
16 |
17 | Owner
18 | {{{owner}}}
19 |
20 | {{/if}}
21 |
--------------------------------------------------------------------------------
/src/templates/tooltip-scalebar.mst:
--------------------------------------------------------------------------------
1 | Click on the scale bar to edit the scale range or layer style.
--------------------------------------------------------------------------------
/src/templates/user-feedback-popup.mst:
--------------------------------------------------------------------------------
1 | {{message}}
2 | {{#if string_error}}
3 |
4 |
Invalid string, you can only use 'a-z', 'A-Z', '0-9', ' ', '_' and the string cannot start with a digit or excede 100 characters.
5 | {{/if}}
6 |
7 |
8 |
9 | ✔ Submit
10 | ✖ Cancel
11 |
12 |
--------------------------------------------------------------------------------
/src/templates/vector-style-ui.mst:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Current property : {{currentProperty}}
4 | {{#if defaultProps }}
5 |
6 |
7 | {{#each defaultProperties}}
8 | {{this.[1]}}
9 | {{/each}}
10 |
11 | {{/if}}
12 |
13 | {{unit}}
14 | {{#each legend}}
15 |
16 |
17 |
18 | {{ option }}
19 |
20 | {{/each}}
21 |
22 |
23 |
24 |
25 |
26 |
27 | Zoom to data
28 |
29 |
--------------------------------------------------------------------------------
/src/templates/walkthrough-management-table.mst:
--------------------------------------------------------------------------------
1 |
8 | {{#if this}}
9 |
10 |
11 | Title
12 | Owner
13 | Tools
14 |
15 | {{#each this}}
16 |
17 | {{title}}
18 | {{owner}}
19 |
20 |
21 |
22 |
23 | {{/each}}
24 |
25 | {{else}}
26 | There are currently no walkthroughs available for you to configure. You either are not an admin, or there are no walkthroughs recorded on this portal yet.
27 | {{/if}}
--------------------------------------------------------------------------------
/src/templates/webrtc-inbound-call.mst:
--------------------------------------------------------------------------------
1 |
Incoming call{{#if caller}} from {{caller}}{{/if}}
2 |
3 | Answer
4 | Reject
5 |
--------------------------------------------------------------------------------
/src/templates/webrtc-outbound-call.mst:
--------------------------------------------------------------------------------
1 |
Calling{{#if callee}} {{callee}}{{/if}}...
2 |
3 | Cancel
4 |
--------------------------------------------------------------------------------
/test/app/lib/moduleloader.js:
--------------------------------------------------------------------------------
1 | var chai = require('chai');
2 | var fs = require('fs-extra');
3 |
4 | var moduleLoader = require(global.test.appPath + '/app/lib/moduleloader.js');
5 | var testModule = require(global.test.dependPath + '/app/modules/test');
6 |
7 | var expect = chai.expect;
8 |
9 | describe('moduleloader', function() {
10 | describe('loadModules', function() {
11 | var moduleSource = global.test.dependPath + '/app/modules/test';
12 | var moduleDestination = global.test.appPath + '/app/modules/test';
13 | var moduleExists = false;
14 |
15 | it('should load test module correctly', function(done) {
16 | try {
17 | if (fs.statSync(moduleDestination).isDirectory) {
18 | console.error();
19 | console.error(' ----------------------------------------------------------- ');
20 | console.error('| Error: app/modules/test already exists! |');
21 | console.error('| Please move the folder to pass the moduleLoader test. |');
22 | console.error(' ----------------------------------------------------------- ');
23 | console.error();
24 | moduleExists = true;
25 | expect.fail();
26 | done();
27 | }
28 | } catch (e) {
29 | fs.copy(moduleSource, moduleDestination, {
30 | clobber: false
31 | }, function() {
32 | var modules = moduleLoader.loadModules();
33 | expect(modules.test).to.deep.equal(testModule);
34 | done();
35 | });
36 | }
37 | });
38 |
39 | after(function(done) {
40 | if (!moduleExists) {
41 | fs.remove(moduleDestination, function() {
42 | done();
43 | });
44 | } else {
45 | done();
46 | }
47 | });
48 | });
49 | });
50 |
--------------------------------------------------------------------------------
/test/mocha.opts:
--------------------------------------------------------------------------------
1 | --recursive
2 | --require ./test_dependencies/init.js
3 | --colors
4 | --check-leaks
5 | --trace-deprecation
6 | --globals mocks,test
7 |
--------------------------------------------------------------------------------
/test/setup.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs-extra');
2 | var httpMocks = require('node-mocks-http');
3 | var eventEmitter = require('events').EventEmitter;
4 |
5 | before(function() {
6 | global.mocks = {
7 | createReq: function() {
8 | return httpMocks.createRequest({
9 | headers: {
10 | host: '127.0.0.1:6789'
11 | },
12 | ip: '127.0.0.1',
13 | session: {
14 | passport: false
15 | }
16 | });
17 | },
18 | createRes: function() {
19 | return httpMocks.createResponse({
20 | eventEmitter: eventEmitter
21 | });
22 | }
23 | };
24 | });
25 |
26 | after(function() {
27 | if (!global.test.configExists) {
28 | fs.removeSync(global.test.configDir);
29 | }
30 | var logDir = global.test.appPath + '/logs/test';
31 | fs.removeSync(logDir);
32 | });
--------------------------------------------------------------------------------
/test_dependencies/app/modules/test/index.js:
--------------------------------------------------------------------------------
1 | var test = {
2 | testVar: 'Hello World!',
3 | rocketTest: 'Hello Mars!'
4 | };
5 |
6 | module.exports = test;
--------------------------------------------------------------------------------
/test_dependencies/config/site_settings/127.0.0.1:6789/config-server.js:
--------------------------------------------------------------------------------
1 | GLOBAL.config['127.0.0.1:6789'] = {
2 | auth: {
3 | google: {
4 | scope: 'https://www.googleapis.com/auth/userinfo.email',
5 | clientid: '771978882869-ov72e4gql205io6pprvr0eja7q3o0j91.apps.googleusercontent.com',
6 | clientsecret: 'kZBX8GjpLsIO0cGBfJ1np5rx',
7 | callback: 'http://127.0.0.1:6789/app/user/auth/google/callback',
8 | prompt: 'select_account'
9 | }
10 | },
11 | admins: ['an.admin@pml.ac.uk', 'nik@pml.ac.uk'],
12 | tokens: {
13 | 'zxc': 'guest',
14 | 'asd': 'a.user@pml.ac.uk',
15 | 'qwe': 'an.admin@pml.ac.uk'
16 | },
17 | logDir: 'logs/test',
18 | cssFile: "GISportal"
19 | };
--------------------------------------------------------------------------------
/test_dependencies/expected/get_cache_servers.json:
--------------------------------------------------------------------------------
1 | [{"wmsURL":"http://rsg.pml.ac.uk/thredds/wms/CCI_ALL-v3.0-5DAY?","wcsURL":"http://rsg.pml.ac.uk/thredds/wcs/CCI_ALL-v3.0-5DAY","serverName":"rsg.pml.ac.uk-thredds-wms-CCI_ALL-v3.0-5DAY","contactInfo":{"person":"Remote Sensing Group","email":"rsgweb@pml.ac.uk","address":"","phone":"","position":""},"provider":"Plymouth Marine Laboratory","timeStamp":"2017-01-13T15:55:34.062Z","owner":"127.0.0.1:6789"},{"wmsURL":"http://rsg.pml.ac.uk/thredds/wms/CCI_ALL-v3.0-DAILY?","wcsURL":"http://rsg.pml.ac.uk/thredds/wcs/CCI_ALL-v3.0-DAILY","serverName":"rsg.pml.ac.uk-thredds-wms-CCI_ALL-v3.0-DAILY","contactInfo":{"person":"Remote Sensing Group","email":"rsgweb@pml.ac.uk","address":"","phone":"","position":""},"provider":"Plymouth Marine Laboratory","timeStamp":"2017-01-13T15:53:22.707Z","owner":"127.0.0.1:6789"},{"wmsURL":"http://rsg.pml.ac.uk/thredds/wms/CCI_ALL-v3.0-MONTHLY?","wcsURL":"http://rsg.pml.ac.uk/thredds/wcs/CCI_ALL-v3.0-MONTHLY","serverName":"rsg.pml.ac.uk-thredds-wms-CCI_ALL-v3.0-MONTHLY","contactInfo":{"person":"Remote Sensing Group","email":"rsgweb@pml.ac.uk","address":"","phone":"","position":""},"provider":"Plymouth Marine Laboratory","timeStamp":"2017-01-13T15:56:30.276Z","owner":"a.user@pml.ac.uk"}]
--------------------------------------------------------------------------------
/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-plot.html:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-request.json:
--------------------------------------------------------------------------------
1 | {"plot":{"type":"animation","title":"Plymouth_Marine_Laboratory: Mass Concentration of Chlorophyll a in Sea Water","style":"boxfill/alg","downloadTypes":[{"key":"csv","label":"CSV"},{"key":"png","label":"PNG"},{"key":"meta-data","label":"Meta Data"},{"key":"logos","label":"Logos"},{"key":"svg","label":"SVG"}],"matchup_log":false,"framerate":1,"xAxis":{"scale":"linear","label":"Date/Time","ticks":"auto","weight":"auto","tickFormat":",.2f"},"y1Axis":{"scale":"log","label":"Mass Concentration of Chlorophyll a in Sea Water (milligram m-3)","ticks":"auto","weight":"auto","tickFormat":"auto"},"data":{"series":[{"handler":"OPEC_SERVICE_WCS","data_source":{"coverage":"chlor_a","layer_id":"chlor_a__Plymouth_Marine_Laboratory2","t_bounds":["2015-11-01","2015-12-01"],"bbox":"-179.9791717529297,-89.97916412353516,179.9791717529297,89.97916412353516","threddsUrl":"https://rsg.pml.ac.uk/thredds/wcs/CCI_ALL-v3.0-MONTHLY","wmsUrl":"https://rsg.pml.ac.uk/thredds/wms/CCI_ALL-v3.0-MONTHLY?","wmsParams":{"LAYERS":"chlor_a","TRANSPARENT":true,"wrapDateLine":true,"SRS":"EPSG:4326","VERSION":"1.1.1","STYLES":"boxfill/alg","NUMCOLORBANDS":255,"time":"2015-12-01T00:00:00.000Z","colorscalerange":"0.01,67","logscale":true},"timesSlices":["2015-11-01T00:00:00.000Z","2015-12-01T00:00:00.000Z"]},"label":"1) Mass Concentration of Chlorophyll a in Sea Water - Plymouth Marine Laboratory","yAxis":1,"type":"line","meta":"Region: undefined
Confidence: undefined
Provider: Plymouth_Marine_Laboratory
Interval: undefined
Bounding Box: -179.9791717529297,-89.97916412353516,179.9791717529297,89.97916412353516
"}]}},"style":{"logos":[]}}
--------------------------------------------------------------------------------
/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-status.json:
--------------------------------------------------------------------------------
1 | {"job_id":"cd1ae320a55777f114ee6177bd409728c0954716","completed":true,"message":"","traceback":"","state":"complete","percentage":100,"minutes_remaining":0}
--------------------------------------------------------------------------------
/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-video.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-video.mp4
--------------------------------------------------------------------------------
/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-video.webm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/test_dependencies/expected/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-video.webm
--------------------------------------------------------------------------------
/test_dependencies/init.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs-extra');
2 | var path = require('path');
3 |
4 | global.test = {
5 | appPath: path.join(__dirname, '../'),
6 | dependPath: path.join(__dirname, '../test_dependencies/'),
7 | expectedPath: path.join(__dirname, '../test_dependencies/expected/')
8 | };
9 |
10 | fs.mkdirsSync(global.test.appPath + '/config/site_settings');
11 |
12 | var configSource = global.test.dependPath + '/config/site_settings/127.0.0.1\:6789';
13 | var configDestination = global.test.appPath + '/config/site_settings/127.0.0.1\:6789';
14 |
15 | try {
16 | if (fs.statSync(configDestination).isDirectory()) {
17 | global.test.configExists = true;
18 | console.error(' ---------------------------------------------------------------- ');
19 | console.error('| Error: config/site_settings/127.0.0.1:6789 already exists! |');
20 | console.error('| Please move the folder to run the tests. |');
21 | console.error(' ---------------------------------------------------------------- ');
22 | console.error();
23 | process.exit(1);
24 | }
25 | } catch (e) {
26 | fs.copySync(configSource, configDestination, {
27 | clobber: false
28 | });
29 | global.test.configExists = false;
30 | global.test.configDir = configDestination;
31 | }
32 |
--------------------------------------------------------------------------------
/test_dependencies/resources/plotting/animation/2eb07c2130bf866a984ec65a488a13184d162bd4_2015-11-01T00-00:00.000Z.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/test_dependencies/resources/plotting/animation/2eb07c2130bf866a984ec65a488a13184d162bd4_2015-11-01T00-00:00.000Z.png
--------------------------------------------------------------------------------
/test_dependencies/resources/plotting/animation/2eb07c2130bf866a984ec65a488a13184d162bd4_2015-12-01T00-00:00.000Z.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/test_dependencies/resources/plotting/animation/2eb07c2130bf866a984ec65a488a13184d162bd4_2015-12-01T00-00:00.000Z.png
--------------------------------------------------------------------------------
/test_dependencies/resources/plotting/animation/cd1ae320a55777f114ee6177bd409728c0954716-request.json:
--------------------------------------------------------------------------------
1 | {"plot":{"type":"animation","title":"Plymouth_Marine_Laboratory: Mass Concentration of Chlorophyll a in Sea Water","style":"boxfill/alg","downloadTypes":[{"key":"csv","label":"CSV"},{"key":"png","label":"PNG"},{"key":"meta-data","label":"Meta Data"},{"key":"logos","label":"Logos"},{"key":"svg","label":"SVG"}],"matchup_log":false,"framerate":1,"xAxis":{"scale":"linear","label":"Date/Time","ticks":"auto","weight":"auto","tickFormat":",.2f"},"y1Axis":{"scale":"log","label":"Mass Concentration of Chlorophyll a in Sea Water (milligram m-3)","ticks":"auto","weight":"auto","tickFormat":"auto"},"data":{"series":[{"handler":"OPEC_SERVICE_WCS","data_source":{"coverage":"chlor_a","layer_id":"chlor_a__Plymouth_Marine_Laboratory2","t_bounds":["2015-11-01","2015-12-01"],"bbox":"-179.9791717529297,-89.97916412353516,179.9791717529297,89.97916412353516","threddsUrl":"https://rsg.pml.ac.uk/thredds/wcs/CCI_ALL-v3.0-MONTHLY","wmsUrl":"https://rsg.pml.ac.uk/thredds/wms/CCI_ALL-v3.0-MONTHLY?","wmsParams":{"LAYERS":"chlor_a","TRANSPARENT":true,"wrapDateLine":true,"SRS":"EPSG:4326","VERSION":"1.1.1","STYLES":"boxfill/alg","NUMCOLORBANDS":255,"time":"2015-12-01T00:00:00.000Z","colorscalerange":"0.01,67","logscale":true},"timesSlices":["2015-11-01T00:00:00.000Z","2015-12-01T00:00:00.000Z"]},"label":"1) Mass Concentration of Chlorophyll a in Sea Water - Plymouth Marine Laboratory","yAxis":1,"type":"line","meta":"Region: undefined
Confidence: undefined
Provider: Plymouth_Marine_Laboratory
Interval: undefined
Bounding Box: -179.9791717529297,-89.97916412353516,179.9791717529297,89.97916412353516
"}]}},"style":{"logos":[]}}
--------------------------------------------------------------------------------
/test_dependencies/uploads/testFileUpload.txt:
--------------------------------------------------------------------------------
1 | Hello World!
2 |
--------------------------------------------------------------------------------
/uploads/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/uploads/.gitkeep
--------------------------------------------------------------------------------
/uploads/archive/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/uploads/archive/.gitkeep
--------------------------------------------------------------------------------
/uploads/cache/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pmlrsg/GISportal/02f429a0d9ae0faf52ee44a01eb9d006699f8a9a/uploads/cache/.gitkeep
--------------------------------------------------------------------------------
/views/authorised.jade:
--------------------------------------------------------------------------------
1 | doctype html
2 | html(lang="en")
3 | head
4 | title= pageTitle
5 | link(rel='stylesheet', href='../css/GISportal.css')
6 | script(type='text/javascript' src='//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js')
7 | script(type='text/javascript')
8 | | try {
9 | | var p = window.opener.top;
10 | | if (p.collaboration.userAuthorised()) {
11 | | window.close();
12 | | }
13 | | } catch(e) {
14 | | window.top.location='/'; }
15 | body
16 | div.collabIframe
17 | h3 You're logged in
18 | p
19 | a(href='javascript:void(0)' onclick="javascript:window.close()") Close this window
20 |
--------------------------------------------------------------------------------
/views/collaboration-index.jade:
--------------------------------------------------------------------------------
1 | div.collabHolder
2 | h3 Collaboration
3 | p To begin using the collaboration tools in this portal you will need to be logged in
4 | p
5 |
6 | if google
7 | div
8 | a(href="/app/user/auth/google")
9 | img(src="/img/sign-in-with-google.png", class="loginButton-google js-google-auth-button")
10 | if saml
11 | div
12 | a(href="/app/user/auth/saml")
13 | img(class="loginButton-saml js-saml-auth-button")&attributes({'src': saml.loginButton})
--------------------------------------------------------------------------------
/views/dashboard.jade:
--------------------------------------------------------------------------------
1 | div.userHolder
2 | h3: b User Dashboard
3 | p You are now logged in
4 |
5 | div.userDetails
6 | img(src=userPicture class='avatar')
7 | div.name= displayName
8 | div.email= userEmail
9 | p.logout
10 | a(href='javascript:void(0)').logout.logoutButton Logout
11 |
12 | div.clearfix
13 |
--------------------------------------------------------------------------------
/views/index.jade:
--------------------------------------------------------------------------------
1 | div.userHolder
2 | h3: b User Dashboard
3 | p By choosing to login in you will be able to:
4 | ul
5 | li Add and save your own data layers
6 | li Share your view of the map with colleagues using the collaboration features
7 | li Save and share plots that you create
8 |
9 | if google
10 | div
11 | img(src="/img/sign-in-with-google.png", class="loginButton-google js-google-auth-button")
12 | if saml
13 | div
14 | img(class="loginButton-saml js-saml-auth-button")&attributes({'src': saml.loginButton})
15 | div(class="clearfix")
--------------------------------------------------------------------------------
/views/login.jade:
--------------------------------------------------------------------------------
1 |
2 | html(lang="en")
3 | head
4 | title User Login
5 | link(rel="stylesheet", type="text/css", href="../../css/login.css")
6 | script(type="text/javascript", src="../../login.js")
7 | link(rel="icon", type="image/png", href="../../favicon/favicon-32x32.png")
8 | body(class="login")
9 | div.userLogin
10 | h1 User Login
11 | if (messageText)
12 | div()&attributes({'class': messageStatus})
13 | | #{messageText}
14 | p You are required to login before being allowed access to this application
15 | if google
16 | div
17 | a(href="/app/user/auth/google")
18 | img(src="/img/sign-in-with-google.png", class="loginButton-google")
19 | if saml
20 | div
21 | a(href="/app/user/auth/saml")
22 | img(class="loginButton-saml")&attributes({'src': saml.loginButton})
--------------------------------------------------------------------------------