Add initial codebase

parent 2b27c78f
Pipeline #3357 failed with stages
in 51 seconds
venv/
*.pyc
*.egg-info/
dist/
settings.cfg
*.log*
recursive-include map_mason/templates *
recursive-include map_mason/static *
all: run
clean:
rm -rf venv && rm -rf *.egg-info && rm -rf dist && rm -rf *.log*
venv:
virtualenv --python=python3 venv && venv/bin/python setup.py develop
run: venv
FLASK_APP=map_mason MAP_MASON_SETTINGS=../settings.cfg venv/bin/flask run
test: venv
MAP_MASON_SETTINGS=../settings.cfg venv/bin/python -m unittest discover -s tests
sdist: venv test
venv/bin/python setup.py sdist
# MapMason
MapMason description
## Quick Start
Run the application:
make run
And open it in the browser at [http://127.0.0.1:5000/](http://127.0.0.1:5000/)
## Prerequisites
This is built to be used with Python 3. Update `Makefile` to switch to Python 2 if needed.
Some Flask dependencies are compiled during installation, so `gcc` and Python header files need to be present.
For example, on Ubuntu:
apt install build-essential python3-dev
## Development environment and release process
- create virtualenv with Flask and MapMason installed into it (latter is installed in
[develop mode](http://setuptools.readthedocs.io/en/latest/setuptools.html#development-mode) which allows
modifying source code directly without a need to re-install the app): `make venv`
- run development server in debug mode: `make run`; Flask will restart if source code is modified
- run tests: `make test` (see also: [Testing Flask Applications](http://flask.pocoo.org/docs/0.12/testing/))
- create source distribution: `make sdist` (will run tests first)
- to remove virtualenv and built distributions: `make clean`
- to add more python dependencies: add to `install_requires` in `setup.py`
- to modify configuration in development environment: edit file `settings.cfg`; this is a local configuration file
and it is *ignored* by Git - make sure to put a proper configuration file to a production environment when
deploying
## Deployment
If you are interested in an out-of-the-box deployment automation, check out accompanying
[`cookiecutter-flask-ansible`](https://github.com/candidtim/cookiecutter-flask-ansible).
Or, check out [Deploying with Fabric](http://flask.pocoo.org/docs/0.12/patterns/fabric/#fabric-deployment) on one of the
possible ways to automate the deployment.
In either case, generally the idea is to build a package (`make sdist`), deliver it to a server (`scp ...`),
install it (`pip install map_mason.tar.gz`), ensure that configuration file exists and
`MAP_MASON_SETTINGS` environment variable points to it, ensure that user has access to the
working directory to create and write log files in it, and finally run a
[WSGI container](http://flask.pocoo.org/docs/0.12/deploying/wsgi-standalone/) with the application.
And, most likely, it will also run behind a
[reverse proxy](http://flask.pocoo.org/docs/0.12/deploying/wsgi-standalone/#proxy-setups).
import os
from flask import Flask
app = Flask(__name__)
app.config.from_object('map_mason.default_settings')
app.config.from_envvar('MAP_MASON_SETTINGS')
if not app.debug:
import logging
from logging.handlers import TimedRotatingFileHandler
# https://docs.python.org/3.6/library/logging.handlers.html#timedrotatingfilehandler
file_handler = TimedRotatingFileHandler(os.path.join(app.config['LOG_DIR'], 'map_mason.log'), 'midnight')
file_handler.setLevel(logging.WARNING)
file_handler.setFormatter(logging.Formatter('<%(asctime)s> <%(levelname)s> %(message)s'))
app.logger.addHandler(file_handler)
import map_mason.views
DEBUG = False # make sure DEBUG is off unless enabled explicitly otherwise
LOG_DIR = '.' # create log files in current working directory
@keyframes popIn{0%,100%{transform:scale(1,1)}25%{transform:scale(1.2,1)}50%{transform:scale(1.4,1)}}@keyframes popOut{0%,100%{transform:scale(1,1)}25%{transform:scale(1.2,1)}50%{transform:scale(1.4,1)}}@keyframes splashIn{0%,100%{transform:scale(1);opacity:1}25%{transform:scale(1.1);opacity:.8}50%{transform:scale(1.1);opacity:.9}}@keyframes splashOut{0%{transform:scale(1);opacity:1}25%{transform:scale(1);opacity:.8}50%{transform:scale(1);opacity:.9}100%{transform:scale(.5);opacity:1}}.checkbox-slider,.checkbox-slider--a,.checkbox-slider--a-rounded,.checkbox-slider--b,.checkbox-slider--b-flat,.checkbox-slider--c,.checkbox-slider--c-weight,.checkbox-slider--default,.checkbox-toggle{position:relative}.checkbox-slider input[type=checkbox],.checkbox-slider--a input[type=checkbox],.checkbox-slider--a-rounded input[type=checkbox],.checkbox-slider--b input[type=checkbox],.checkbox-slider--b-flat input[type=checkbox],.checkbox-slider--c input[type=checkbox],.checkbox-slider--c-weight input[type=checkbox],.checkbox-slider--default input[type=checkbox],.checkbox-toggle input[type=checkbox]{display:block;position:absolute;top:0;right:0;bottom:0;left:0;width:0%;height:0%;margin:0;cursor:pointer;opacity:0}.checkbox-slider input[type=checkbox]:focus+:before,.checkbox-slider--a input[type=checkbox]:focus+:before,.checkbox-slider--a-rounded input[type=checkbox]:focus+:before,.checkbox-slider--b input[type=checkbox]:focus+:before,.checkbox-slider--b-flat input[type=checkbox]:focus+:before,.checkbox-slider--c input[type=checkbox]:focus+:before,.checkbox-slider--c-weight input[type=checkbox]:focus+:before,.checkbox-slider--default input[type=checkbox]:focus+:before,.checkbox-toggle input[type=checkbox]:focus+:before{outline:#80bdff solid 2px}.checkbox-slider input+span,.checkbox-slider--a input+span,.checkbox-slider--a-rounded input+span,.checkbox-slider--b input+span,.checkbox-slider--b-flat input+span,.checkbox-slider--c input+span,.checkbox-slider--c-weight input+span,.checkbox-slider--default input+span,.checkbox-toggle input+span{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.checkbox-slider input+span:before,.checkbox-slider--a input+span:before,.checkbox-slider--a-rounded input+span:before,.checkbox-slider--b input+span:before,.checkbox-slider--b-flat input+span:before,.checkbox-slider--c input+span:before,.checkbox-slider--c-weight input+span:before,.checkbox-slider--default input+span:before,.checkbox-toggle input+span:before{position:absolute;left:0;display:inline-block}.checkbox-slider input+span>h4,.checkbox-slider--a input+span>h4,.checkbox-slider--a-rounded input+span>h4,.checkbox-slider--b input+span>h4,.checkbox-slider--b-flat input+span>h4,.checkbox-slider--c input+span>h4,.checkbox-slider--c-weight input+span>h4,.checkbox-slider--default input+span>h4,.checkbox-toggle input+span>h4{display:inline}.form-horizontal [class^=checkbox] input+span:after{top:7px}.checkbox-slider input+span,.checkbox-slider--a input+span,.checkbox-slider--a-rounded input+span,.checkbox-slider--b input+span,.checkbox-slider--b-flat input+span,.checkbox-slider--c input+span,.checkbox-slider--c-weight input+span,.checkbox-slider--default input+span{padding-left:40px}.checkbox-slider input+span:before,.checkbox-slider--a input+span:before,.checkbox-slider--a-rounded input+span:before,.checkbox-slider--b input+span:before,.checkbox-slider--b-flat input+span:before,.checkbox-slider--c input+span:before,.checkbox-slider--c-weight input+span:before,.checkbox-slider--default input+span:before{content:"";height:20px;width:40px;background:rgba(100,100,100,.2);box-shadow:inset 0 0 5px rgba(0,0,0,.8);transition:background .2s ease-out}.checkbox-slider input+span:after,.checkbox-slider--a input+span:after,.checkbox-slider--a-rounded input+span:after,.checkbox-slider--b input+span:after,.checkbox-slider--b-flat input+span:after,.checkbox-slider--c input+span:after,.checkbox-slider--c-weight input+span:after,.checkbox-slider--default input+span:after{width:20px;height:20px;position:absolute;left:0;top:0;display:block;background:#FFF;transition:margin-left .1s ease-in-out;text-align:center;font-weight:700;content:""}.checkbox-slider input:checked+span:after,.checkbox-slider--a input:checked+span:after,.checkbox-slider--a-rounded input:checked+span:after,.checkbox-slider--b input:checked+span:after,.checkbox-slider--b-flat input:checked+span:after,.checkbox-slider--c input:checked+span:after,.checkbox-slider--c-weight input:checked+span:after,.checkbox-slider--default input:checked+span:after{margin-left:20px;content:""}.checkbox-slider input:checked+span:before,.checkbox-slider--a input:checked+span:before,.checkbox-slider--a-rounded input:checked+span:before,.checkbox-slider--b input:checked+span:before,.checkbox-slider--b-flat input:checked+span:before,.checkbox-slider--c input:checked+span:before,.checkbox-slider--c-weight input:checked+span:before,.checkbox-slider--default input:checked+span:before{transition:background .2s ease-in}.checkbox-slider--a-rounded input+span:after,.checkbox-slider--default input+span:after{background:#FFF;border:1px solid transparent;background-clip:content-box}.checkbox-slider--a-rounded input:checked+span:after,.checkbox-slider--default input:checked+span:after{background:#28a745;border:1px solid transparent;background-clip:content-box}.checkbox-slider--a-rounded input+span:after,.checkbox-slider--a-rounded input+span:before{border-radius:.25rem}.checkbox-slider--a-rounded input+span:after,.checkbox-slider--a-rounded input:checked+span:after{border:2px solid transparent;background-clip:content-box}.checkbox-slider--a-rounded.checkbox-slider-sm input+span:after,.checkbox-slider--a-rounded.checkbox-slider-sm input+span:before{border-radius:.2rem}.checkbox-slider--a-rounded.checkbox-slider-md input+span:after,.checkbox-slider--a-rounded.checkbox-slider-md input+span:before{border-radius:.25rem}.checkbox-slider--a-rounded.checkbox-slider-lg input+span:after,.checkbox-slider--a-rounded.checkbox-slider-lg input+span:before{border-radius:.3rem}.checkbox-slider--a input+span{padding-left:60px}.checkbox-slider--a input+span:before{content:"";width:60px}.checkbox-slider--a input+span:after{width:40px;font-size:10px;color:#000;content:"Off";border:1px solid transparent;background-clip:content-box}.checkbox-slider--a input:checked+span:after{content:"On";color:#fff;background:#28a745;border:1px solid transparent;background-clip:content-box}.checkbox-slider--a.checkbox-slider-sm input+span{padding-left:30px}.checkbox-slider--a.checkbox-slider-sm input+span:before{width:30px}.checkbox-slider--a.checkbox-slider-sm input+span:after{width:20px;font-size:5px}.checkbox-slider--a.checkbox-slider-sm input:checked+span:after{margin-left:10px}.checkbox-slider--a.checkbox-slider-md input+span{padding-left:90px}.checkbox-slider--a.checkbox-slider-md input+span:before{width:90px}.checkbox-slider--a.checkbox-slider-md input+span:after{width:60px;font-size:15px}.checkbox-slider--a.checkbox-slider-md input:checked+span:after{margin-left:30px}.checkbox-slider--a.checkbox-slider-lg input+span{padding-left:120px}.checkbox-slider--b input+span,.checkbox-slider--b-flat input+span,.checkbox-slider--c input+span,.checkbox-slider--c-weight input+span{padding-left:40px}.checkbox-slider--a.checkbox-slider-lg input+span:before{width:120px}.checkbox-slider--a.checkbox-slider-lg input+span:after{width:80px;font-size:20px}.checkbox-slider--a.checkbox-slider-lg input:checked+span:after{margin-left:40px}.checkbox-slider--b input+span:before,.checkbox-slider--b-flat input+span:before{border-radius:20px;width:40px}.checkbox-slider--b input+span:after,.checkbox-slider--b-flat input+span:after{background:#FFF;content:"";width:20px;border:2px solid transparent;background-clip:padding-box;border-radius:20px}.checkbox-slider--b input:not(:checked)+span:after,.checkbox-slider--b-flat input:not(:checked)+span:after{animation:popOut ease-in .3s normal}.checkbox-slider--b input:checked+span:after,.checkbox-slider--b-flat input:checked+span:after{content:"";margin-left:20px;border:2px solid transparent;background-clip:padding-box;animation:popIn ease-in .3s normal}.checkbox-slider--b input:checked+span:before,.checkbox-slider--b-flat input:checked+span:before{background:#28a745}.checkbox-slider--b.checkbox-slider-md input+span:after,.checkbox-slider--b.checkbox-slider-md input+span:before{border-radius:30px}.checkbox-slider--b.checkbox-slider-lg input+span:after,.checkbox-slider--b.checkbox-slider-lg input+span:before{border-radius:40px}.checkbox-slider--b-flat input+span:before{box-shadow:none}.checkbox-slider--c input+span:before,.checkbox-slider--c-weight input+span:before{height:2px!important;top:10px;box-shadow:none;width:40px;background:#adb5bd}.checkbox-slider--c input+span:after,.checkbox-slider--c-weight input+span:after{box-shadow:none;width:20px;border:2px solid #adb5bd;border-radius:20px}.checkbox-slider--a input:disabled+span:before,.checkbox-slider--a-rounded input:disabled+span:before,.checkbox-slider--b input:disabled+span:before,.checkbox-slider--b-flat input:disabled+span:before,.checkbox-slider--default input:disabled+span:before{box-shadow:0 0 0 #000}.checkbox-slider--c input:checked+span:after,.checkbox-slider--c-weight input:checked+span:after{background:#28a745;margin-left:20px;border:2px solid #28a745;animation:splashIn ease-in .3s normal}.checkbox-slider--c input:checked+span:before,.checkbox-slider--c-weight input:checked+span:before{background:#28a745}.checkbox-slider--b input:disabled:checked+span:before,.checkbox-slider--b-flat input:disabled:checked+span:before,.checkbox-slider--c input:disabled+span:before,.checkbox-slider--c input:disabled:checked+span:after,.checkbox-slider--c-weight input:disabled+span:before,.checkbox-slider--c-weight input:disabled:checked+span:after,.checkbox-slider--default input:disabled+span:after{background:#adb5bd}.checkbox-slider--c.checkbox-slider-sm input+span:before{top:4px}.checkbox-slider--c.checkbox-slider-md input+span:before{top:14px}.checkbox-slider--c.checkbox-slider-md input+span:after{width:30px;border-radius:30px}.checkbox-slider--c.checkbox-slider-lg input+span:before{top:19px}.checkbox-slider--c.checkbox-slider-lg input+span:after{width:40px;border-radius:40px}.form-horizontal [class*=checkbox-slider--c].checkbox-slider-sm input+span:before{top:10px}.form-horizontal [class*=checkbox-slider--c].checkbox-slider-md input+span:before{top:20px}.form-horizontal [class*=checkbox-slider--c].checkbox-slider-lg input+span:before{top:25px}.checkbox-slider--c-weight input+span:before{height:1px!important}.checkbox-slider--c-weight input:checked+span:before{height:2px!important}.checkbox-slider--c-weight input:not(:checked)+span:after{transform:scale(.7);left:-6px}.checkbox-slider--c-weight.checkbox-slider-sm input+span:before{top:5px}.checkbox-slider--c-weight.checkbox-slider-md input+span:before{top:15px}.checkbox-slider--c-weight.checkbox-slider-lg input+span:before{top:20px}.checkbox-slider--default input:disabled+span{color:#adb5bd}.checkbox-slider--a input:disabled+span:after,.checkbox-slider--a-rounded input:disabled+span:after{background:#adb5bd;color:#FFF}.checkbox-slider--a input:disabled+span,.checkbox-slider--a-rounded input:disabled+span,.checkbox-slider--b input:disabled+span,.checkbox-slider--b-flat input:disabled+span,.checkbox-slider--c input:disabled+span,.checkbox-slider--c-weight input:disabled+span{color:#adb5bd}.checkbox-slider--b input:disabled+span:after,.checkbox-slider--b-flat input:disabled+span:after{border:2px solid transparent;border-radius:40px}.checkbox-slider--c input:disabled+span:after,.checkbox-slider--c-weight input:disabled+span:after{border-color:#adb5bd}input:checked+.indicator-primary{color:#007bff}input:checked+.indicator-success{color:#28a745}input:checked+.indicator-info{color:#17a2b8}input:checked+.indicator-warning{color:#ffc107}input:checked+.indicator-danger{color:#dc3545}.checkbox-slider-sm{line-height:10px}.checkbox-slider-sm input+span{padding-left:20px}.checkbox-slider-sm input+span:before{width:20px}.checkbox-slider-sm input+span:after,.checkbox-slider-sm input+span:before{height:10px;line-height:10px}.checkbox-slider-sm input+span:after{width:10px;vertical-align:middle}.checkbox-slider-sm input:checked+span:after{margin-left:10px}.checkbox-slider-md{line-height:30px}.checkbox-slider-md input+span{padding-left:60px}.checkbox-slider-md input+span:before{width:60px}.checkbox-slider-md input+span:after,.checkbox-slider-md input+span:before{height:30px;line-height:30px}.checkbox-slider-md input+span:after{width:30px;vertical-align:middle}.checkbox-slider-md input:checked+span:after{margin-left:30px}.checkbox-slider-lg{line-height:40px}.checkbox-slider-lg input+span{padding-left:80px}.checkbox-slider-lg input+span:before{width:80px}.checkbox-slider-lg input+span:after,.checkbox-slider-lg input+span:before{height:40px;line-height:40px}.checkbox-slider-lg input+span:after{width:40px;vertical-align:middle}.checkbox-slider-lg input:checked+span:after{margin-left:40px}.checkbox-slider-primary.checkbox-slider--a input:checked+span:after,.checkbox-slider-primary.checkbox-slider--a-rounded input:checked+span:after,.checkbox-slider-primary.checkbox-slider--c input:checked+span:after,.checkbox-slider-primary.checkbox-slider--c-weight input:checked+span:after,.checkbox-slider-primary.checkbox-slider--default input:checked+span:after{background:#007bff;background-clip:content-box}.checkbox-slider-primary.checkbox-slider--c input:checked+span:after,.checkbox-slider-primary.checkbox-slider--c-weight input:checked+span:after{border-color:#007bff}.checkbox-slider-primary.checkbox-slider--b input:checked+span:before,.checkbox-slider-primary.checkbox-slider--b-flat input:checked+span:before,.checkbox-slider-primary.checkbox-slider--c input:checked+span:before,.checkbox-slider-primary.checkbox-slider--c-weight input:checked+span:before{background:#007bff}.checkbox-slider-info.checkbox-slider--a input:checked+span:after,.checkbox-slider-info.checkbox-slider--a-rounded input:checked+span:after,.checkbox-slider-info.checkbox-slider--c input:checked+span:after,.checkbox-slider-info.checkbox-slider--c-weight input:checked+span:after,.checkbox-slider-info.checkbox-slider--default input:checked+span:after{background:#17a2b8;background-clip:content-box}.checkbox-slider-info.checkbox-slider--c input:checked+span:after,.checkbox-slider-info.checkbox-slider--c-weight input:checked+span:after{border-color:#17a2b8}.checkbox-slider-info.checkbox-slider--b input:checked+span:before,.checkbox-slider-info.checkbox-slider--b-flat input:checked+span:before,.checkbox-slider-info.checkbox-slider--c input:checked+span:before,.checkbox-slider-info.checkbox-slider--c-weight input:checked+span:before{background:#17a2b8}.checkbox-slider-warning.checkbox-slider--a input:checked+span:after,.checkbox-slider-warning.checkbox-slider--a-rounded input:checked+span:after,.checkbox-slider-warning.checkbox-slider--c input:checked+span:after,.checkbox-slider-warning.checkbox-slider--c-weight input:checked+span:after,.checkbox-slider-warning.checkbox-slider--default input:checked+span:after{background:#ffc107;background-clip:content-box}.checkbox-slider-warning.checkbox-slider--c input:checked+span:after,.checkbox-slider-warning.checkbox-slider--c-weight input:checked+span:after{border-color:#ffc107}.checkbox-slider-warning.checkbox-slider--b input:checked+span:before,.checkbox-slider-warning.checkbox-slider--b-flat input:checked+span:before,.checkbox-slider-warning.checkbox-slider--c input:checked+span:before,.checkbox-slider-warning.checkbox-slider--c-weight input:checked+span:before{background:#ffc107}.checkbox-slider-danger.checkbox-slider--a input:checked+span:after,.checkbox-slider-danger.checkbox-slider--a-rounded input:checked+span:after,.checkbox-slider-danger.checkbox-slider--c input:checked+span:after,.checkbox-slider-danger.checkbox-slider--c-weight input:checked+span:after,.checkbox-slider-danger.checkbox-slider--default input:checked+span:after{background:#dc3545;background-clip:content-box}.checkbox-slider-danger.checkbox-slider--c input:checked+span:after,.checkbox-slider-danger.checkbox-slider--c-weight input:checked+span:after{border-color:#dc3545}.checkbox-slider-danger.checkbox-slider--b input:checked+span:before,.checkbox-slider-danger.checkbox-slider--b-flat input:checked+span:before,.checkbox-slider-danger.checkbox-slider--c input:checked+span:before,.checkbox-slider-danger.checkbox-slider--c-weight input:checked+span:before{background:#dc3545}
\ No newline at end of file
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link href="https://srct.gmu.io/masonstrap/css/masonstrap.min.css" rel="stylesheet">
{% block extra_head %}
{% endblock %}
<title>{% block title %}{% endblock %} - MapMason</title>
</head>
<body>
{% block content %}{% endblock %}
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://srct.gmu.io/masonstrap/js/masonstrap.min.js"></script>
{% block extra_js %}{% endblock %}
</body>
</html>
\ No newline at end of file
{% extends 'base.html' %}
{% block extra_head %}
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css"
integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ=="
crossorigin=""/>
<link rel="stylesheet" href="{{ url_for('static', filename='titatoggle-dist-min.css') }}">
<style>
#map {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
html, body {
height: 100%;
width: 100%;
}
#page-content {
height: 100%;
}
#map-container {
padding: 0;
margin: 0;
}
</style>
{% endblock %}
{% block extra_js %}
<script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js"
integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw=="
crossorigin=""></script>
<script type="text/javascript">
// GMU Decimal Latitude and Decimal Longitude
const gmuLatitude = 38.8322871;
const gmuLongitude = -77.3080912;
const defaultZoom = 16;
var map = L.map('map', {
minZoom: 0,
maxZoom: 20,
zoomSnap: 0,
zoomDelta: 0.25
});
var cartodbAttribution = '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://cartodb.com/attributions">CartoDB</a>';
var tileUrl = 'http://{s}.tile.osm.org/{z}/{x}/{y}.png';
// 'http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png'
var positron = L.tileLayer(tileUrl, {
attribution: cartodbAttribution
}).addTo(map);
map.setView([gmuLatitude, gmuLongitude], defaultZoom);
</script>
{% endblock %}
{% block content %}
<div class="container-fluid" id="page-content">
<div class="row" style="height: 100%;">
<nav class="col-sm-3 col-md-2 d-none d-sm-block navbar-inverse navbar-dark bg-dark sidebar">
<h1 class="navbar-brand navbar-dark bg-dark">MapMason</h1>
<p>
<h3 class="text-primary">Search</h3>
<form class="form-inline mt-2 mt-md-0">
<small class="form-text text-light">Search via Name or Keyword</small>
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Name or Keyword">
</form>
</p>
<p>
<h3 class="text-primary">Filter Locations</h3>
<div class="nav flex-column text-light">
<div class="form-check checkbox-slider--b-flat">
<label>
<input type="checkbox"><span>Parking</span>
</label>
</div>
<div class="form-check checkbox-slider--b-flat">
<label>
<input type="checkbox"><span>Residence Halls</span>
</label>
</div>
<div class="form-check checkbox-slider--b-flat">
<label>
<input type="checkbox"><span>Dining Halls</span>
</label>
</div>
</div>
</p>
<p class="text-light">Having problems? <a href="mailto:srct@gmu.edu">Submit feedback</a></p>
<p class="text-muted">A service of <a href="http://srct.gmu.edu">Mason SRCT</a>. Licensed under the <a href="http://opensource.org/licenses/Apache-2.0">Apache License, Version 2.0</a>.</p>
</nav>
<main role="main" class="col-sm-9 ml-sm-auto col-md-10" id="map-container">
<div id="map"></div>
</main>
</div>
</div>
{% endblock %}
from flask import render_template
from map_mason import app
@app.route('/')
def index():
# app.logger.warning('Hit index')
return render_template('index.html')
from setuptools import setup, find_packages
setup(
name='map_mason',
version='1.0',
long_description=__doc__,
packages=find_packages(),
include_package_data=True,
zip_safe=False,
install_requires=[
'flask',
],
)
import unittest
import map_mason
class Map_masonTestCase(unittest.TestCase):
def setUp(self):
self.app = map_mason.app.test_client()
def test_index(self):
rv = self.app.get('/')
self.assertIn('Welcome to MapMason', rv.data.decode())
if __name__ == '__main__':
unittest.main()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment