├── .bowerrc
├── .gitignore
├── .python-version
├── .travis.yml
├── LICENSE
├── LICENSE.md
├── Makefile
├── Procfile
├── README.md
├── bower.json
├── comport
├── __init__.py
├── admin
│ ├── __init__.py
│ ├── forms.py
│ └── views.py
├── app.py
├── assets.py
├── compat.py
├── content
│ ├── __init__.py
│ ├── defaults.py
│ ├── models.py
│ └── views.py
├── data
│ ├── __init__.py
│ ├── cleaners.py
│ ├── csv_utils.py
│ ├── models.py
│ └── views.py
├── database.py
├── decorators.py
├── department
│ ├── __init__.py
│ ├── models.py
│ ├── page_block_lookup.py
│ └── views.py
├── extensions.py
├── interest
│ ├── __init__.py
│ ├── forms.py
│ ├── models.py
│ └── views.py
├── public
│ ├── __init__.py
│ ├── forms.py
│ └── views.py
├── settings.py
├── static
│ ├── css
│ │ ├── charts.css
│ │ ├── common.css
│ │ └── style.css
│ ├── img
│ │ ├── CfA_logo.jpg
│ │ ├── IndyDPSlogo.jpeg
│ │ ├── chief.jpg
│ │ ├── complaints.png
│ │ ├── comportlogodark.png
│ │ ├── ois.png
│ │ └── uof.png
│ ├── indy_tracts.geojson
│ ├── js
│ │ ├── chartConfigs.js
│ │ ├── charts.js
│ │ ├── common.js
│ │ ├── histogram.js
│ │ ├── lineChart.js
│ │ ├── map.js
│ │ ├── matrixChart.js
│ │ ├── plugins.js
│ │ ├── script.js
│ │ └── unusedChartConfigs.js
│ ├── libs
│ │ ├── bootstrap
│ │ │ ├── .bower.json
│ │ │ ├── CHANGELOG.md
│ │ │ ├── Gemfile
│ │ │ ├── Gemfile.lock
│ │ │ ├── Gruntfile.js
│ │ │ ├── ISSUE_TEMPLATE.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── dist
│ │ │ │ ├── css
│ │ │ │ │ ├── bootstrap-theme.css
│ │ │ │ │ ├── bootstrap-theme.css.map
│ │ │ │ │ ├── bootstrap-theme.min.css
│ │ │ │ │ ├── bootstrap-theme.min.css.map
│ │ │ │ │ ├── bootstrap.css
│ │ │ │ │ ├── bootstrap.css.map
│ │ │ │ │ ├── bootstrap.min.css
│ │ │ │ │ └── bootstrap.min.css.map
│ │ │ │ ├── fonts
│ │ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ │ └── js
│ │ │ │ │ ├── bootstrap.js
│ │ │ │ │ ├── bootstrap.min.js
│ │ │ │ │ └── npm.js
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── grunt
│ │ │ │ ├── .jshintrc
│ │ │ │ ├── bs-commonjs-generator.js
│ │ │ │ ├── bs-glyphicons-data-generator.js
│ │ │ │ ├── bs-lessdoc-parser.js
│ │ │ │ ├── bs-raw-files-generator.js
│ │ │ │ ├── change-version.js
│ │ │ │ ├── configBridge.json
│ │ │ │ ├── npm-shrinkwrap.json
│ │ │ │ └── sauce_browsers.yml
│ │ │ ├── js
│ │ │ │ ├── .jscsrc
│ │ │ │ ├── .jshintrc
│ │ │ │ ├── affix.js
│ │ │ │ ├── alert.js
│ │ │ │ ├── button.js
│ │ │ │ ├── carousel.js
│ │ │ │ ├── collapse.js
│ │ │ │ ├── dropdown.js
│ │ │ │ ├── modal.js
│ │ │ │ ├── popover.js
│ │ │ │ ├── scrollspy.js
│ │ │ │ ├── tab.js
│ │ │ │ ├── tooltip.js
│ │ │ │ └── transition.js
│ │ │ ├── less
│ │ │ │ ├── .csscomb.json
│ │ │ │ ├── .csslintrc
│ │ │ │ ├── alerts.less
│ │ │ │ ├── badges.less
│ │ │ │ ├── bootstrap.less
│ │ │ │ ├── breadcrumbs.less
│ │ │ │ ├── button-groups.less
│ │ │ │ ├── buttons.less
│ │ │ │ ├── carousel.less
│ │ │ │ ├── close.less
│ │ │ │ ├── code.less
│ │ │ │ ├── component-animations.less
│ │ │ │ ├── dropdowns.less
│ │ │ │ ├── forms.less
│ │ │ │ ├── glyphicons.less
│ │ │ │ ├── grid.less
│ │ │ │ ├── input-groups.less
│ │ │ │ ├── jumbotron.less
│ │ │ │ ├── labels.less
│ │ │ │ ├── list-group.less
│ │ │ │ ├── media.less
│ │ │ │ ├── mixins.less
│ │ │ │ ├── mixins
│ │ │ │ │ ├── alerts.less
│ │ │ │ │ ├── background-variant.less
│ │ │ │ │ ├── border-radius.less
│ │ │ │ │ ├── buttons.less
│ │ │ │ │ ├── center-block.less
│ │ │ │ │ ├── clearfix.less
│ │ │ │ │ ├── forms.less
│ │ │ │ │ ├── gradients.less
│ │ │ │ │ ├── grid-framework.less
│ │ │ │ │ ├── grid.less
│ │ │ │ │ ├── hide-text.less
│ │ │ │ │ ├── image.less
│ │ │ │ │ ├── labels.less
│ │ │ │ │ ├── list-group.less
│ │ │ │ │ ├── nav-divider.less
│ │ │ │ │ ├── nav-vertical-align.less
│ │ │ │ │ ├── opacity.less
│ │ │ │ │ ├── pagination.less
│ │ │ │ │ ├── panels.less
│ │ │ │ │ ├── progress-bar.less
│ │ │ │ │ ├── reset-filter.less
│ │ │ │ │ ├── reset-text.less
│ │ │ │ │ ├── resize.less
│ │ │ │ │ ├── responsive-visibility.less
│ │ │ │ │ ├── size.less
│ │ │ │ │ ├── tab-focus.less
│ │ │ │ │ ├── table-row.less
│ │ │ │ │ ├── text-emphasis.less
│ │ │ │ │ ├── text-overflow.less
│ │ │ │ │ └── vendor-prefixes.less
│ │ │ │ ├── modals.less
│ │ │ │ ├── navbar.less
│ │ │ │ ├── navs.less
│ │ │ │ ├── normalize.less
│ │ │ │ ├── pager.less
│ │ │ │ ├── pagination.less
│ │ │ │ ├── panels.less
│ │ │ │ ├── popovers.less
│ │ │ │ ├── print.less
│ │ │ │ ├── progress-bars.less
│ │ │ │ ├── responsive-embed.less
│ │ │ │ ├── responsive-utilities.less
│ │ │ │ ├── scaffolding.less
│ │ │ │ ├── tables.less
│ │ │ │ ├── theme.less
│ │ │ │ ├── thumbnails.less
│ │ │ │ ├── tooltip.less
│ │ │ │ ├── type.less
│ │ │ │ ├── utilities.less
│ │ │ │ ├── variables.less
│ │ │ │ └── wells.less
│ │ │ ├── nuget
│ │ │ │ ├── MyGet.ps1
│ │ │ │ ├── bootstrap.less.nuspec
│ │ │ │ └── bootstrap.nuspec
│ │ │ ├── package.js
│ │ │ └── package.json
│ │ ├── d3
│ │ │ ├── .bower.json
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── d3.js
│ │ │ └── d3.min.js
│ │ ├── font-awesome4
│ │ │ ├── css
│ │ │ │ ├── font-awesome.css
│ │ │ │ └── font-awesome.min.css
│ │ │ └── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ └── fontawesome-webfont.woff
│ │ └── jQuery
│ │ │ ├── .bower.json
│ │ │ ├── bower.json
│ │ │ ├── dist
│ │ │ ├── jquery.js
│ │ │ ├── jquery.min.js
│ │ │ └── jquery.min.map
│ │ │ └── src
│ │ │ ├── ajax.js
│ │ │ ├── ajax
│ │ │ ├── jsonp.js
│ │ │ ├── load.js
│ │ │ ├── parseXML.js
│ │ │ ├── script.js
│ │ │ └── xhr.js
│ │ │ ├── attributes.js
│ │ │ ├── attributes
│ │ │ ├── attr.js
│ │ │ ├── classes.js
│ │ │ ├── prop.js
│ │ │ ├── support.js
│ │ │ └── val.js
│ │ │ ├── callbacks.js
│ │ │ ├── core.js
│ │ │ ├── core
│ │ │ ├── access.js
│ │ │ ├── init.js
│ │ │ ├── parseHTML.js
│ │ │ └── ready.js
│ │ │ ├── css.js
│ │ │ ├── css
│ │ │ ├── addGetHookIf.js
│ │ │ ├── curCSS.js
│ │ │ ├── hiddenVisibleSelectors.js
│ │ │ └── support.js
│ │ │ ├── data.js
│ │ │ ├── data
│ │ │ └── Data.js
│ │ │ ├── deferred.js
│ │ │ ├── deprecated.js
│ │ │ ├── dimensions.js
│ │ │ ├── effects.js
│ │ │ ├── effects
│ │ │ ├── Tween.js
│ │ │ └── animatedSelector.js
│ │ │ ├── event.js
│ │ │ ├── event
│ │ │ ├── ajax.js
│ │ │ ├── alias.js
│ │ │ └── support.js
│ │ │ ├── exports
│ │ │ ├── amd.js
│ │ │ └── global.js
│ │ │ ├── jquery.js
│ │ │ ├── manipulation.js
│ │ │ ├── manipulation
│ │ │ ├── _evalUrl.js
│ │ │ └── support.js
│ │ │ ├── offset.js
│ │ │ ├── queue.js
│ │ │ ├── queue
│ │ │ └── delay.js
│ │ │ ├── selector-native.js
│ │ │ ├── selector-sizzle.js
│ │ │ ├── selector.js
│ │ │ ├── serialize.js
│ │ │ ├── traversing.js
│ │ │ ├── traversing
│ │ │ └── findFilter.js
│ │ │ └── wrap.js
│ └── public
│ │ ├── .gitkeep
│ │ ├── css
│ │ └── .gitkeep
│ │ └── js
│ │ └── .gitkeep
├── template_globals.py
├── templates
│ ├── 401.html
│ ├── 404.html
│ ├── 500.html
│ ├── admin
│ │ ├── dashboard.html
│ │ ├── editExtractor.html
│ │ ├── editUser.html
│ │ ├── newDepartment.html
│ │ └── newInvite.html
│ ├── content
│ │ └── edit_link.html
│ ├── department
│ │ ├── dashboard.html
│ │ ├── demographics.html
│ │ ├── denominators.html
│ │ ├── extractorEnvs.html
│ │ └── site
│ │ │ ├── assaults.html
│ │ │ ├── chart_block.html
│ │ │ ├── complaints.html
│ │ │ ├── dataset_nav.html
│ │ │ ├── index.html
│ │ │ ├── ois.html
│ │ │ ├── public_dataset_base.html
│ │ │ ├── pursuits.html
│ │ │ ├── schema
│ │ │ ├── assaults.html
│ │ │ ├── complaints.html
│ │ │ ├── ois.html
│ │ │ ├── pursuits.html
│ │ │ └── useofforce.html
│ │ │ ├── toc.html
│ │ │ └── useofforce.html
│ ├── footer.html
│ ├── layout.html
│ ├── nav.html
│ └── public
│ │ ├── about.html
│ │ ├── home.html
│ │ ├── interest_form.html
│ │ ├── login.html
│ │ ├── passwordReset.html
│ │ └── register.html
├── user
│ ├── __init__.py
│ ├── forms.py
│ ├── models.py
│ └── views.py
└── utils.py
├── env.sample
├── manage.py
├── migrations
├── README
├── alembic.ini
├── env.py
├── script.py.mako
└── versions
│ ├── 01c18862cf4a_.py
│ ├── 0d39b8d2c5ce_.py
│ ├── 0d78d545906f_.py
│ ├── 0de6730e3d41_create_wpd_complaints_table.py
│ ├── 1392585412d_.py
│ ├── 14395b9e9208_.py
│ ├── 16b50a2c53b_.py
│ ├── 17b38c3d5e7_.py
│ ├── 1826863c726a_.py
│ ├── 1a869ac514c_.py
│ ├── 1c306b9d32_.py
│ ├── 1d31622bbed_.py
│ ├── 21dd34bbb19_.py
│ ├── 22a9ff0220c_.py
│ ├── 23353b28d77_.py
│ ├── 2357b6b3d76_.py
│ ├── 24987646046_.py
│ ├── 28296e3a641_.py
│ ├── 2de736b481_.py
│ ├── 2efea7ffc2d0_update_wpd_complaint_chart_blocks.py
│ ├── 2f13ffb1ce60_.py
│ ├── 30e29c63aa6_.py
│ ├── 32d7cc46df4_.py
│ ├── 32f2dcfc96d_.py
│ ├── 331a821cc4a_.py
│ ├── 331c513e8d4_.py
│ ├── 33fcc9c4867_.py
│ ├── 3434f410ad7_.py
│ ├── 38f457822b3_.py
│ ├── 3bc88a29a22_.py
│ ├── 3df24031e72_.py
│ ├── 4137d3521d5_.py
│ ├── 43bdec0aeb4_.py
│ ├── 43c4c512514_.py
│ ├── 43fd1bb4848_.py
│ ├── 471223798fc_.py
│ ├── 4a7e5abdf57_.py
│ ├── 4d1cde26d807_create_wpd_uof_table.py
│ ├── 4e4710949dd_.py
│ ├── 4e98ea7e43d_.py
│ ├── 4f5fcadcf2d_.py
│ ├── 4ffa73ef2b8_.py
│ ├── 507f3182b84_.py
│ ├── 513f93441476_.py
│ ├── 51524883509_.py
│ ├── 52887f8e06b_.py
│ ├── 52979aa7977_.py
│ ├── 529cc76baaa_.py
│ ├── 529d8396153_.py
│ ├── 52eaf89477f_.py
│ ├── 569aad8d933_.py
│ ├── 56bb92fb8acc_.py
│ ├── 585a75fc356_.py
│ ├── 58a10a2d8e4_.py
│ ├── 5cb851130ebb_.py
│ ├── 6d30846080b2_.py
│ ├── 720df9948a25_.py
│ ├── 77ad8047becf_.py
│ ├── 7f4ae427dcf6_.py
│ ├── 875c52a485_.py
│ ├── 9d6a8b74b21a_.py
│ ├── a6192071a8_.py
│ ├── ab97630e71ce_.py
│ ├── b13e5a5233_.py
│ ├── bd713215655e_.py
│ ├── c21533f2fd07_.py
│ ├── c471472f1a82_.py
│ ├── c5e276c0d67f_.py
│ ├── cff7a8d7f106_.py
│ ├── d4db9d4eff92_.py
│ ├── f0526891fa_.py
│ └── fecca96b9d_.py
├── requirements.txt
├── requirements
├── dev.txt
└── prod.txt
├── runtime.txt
├── testclient
├── JSON_test_client.py
├── __init__.py
└── mutators.py
└── tests
├── __init__.py
├── conftest.py
├── factories.py
├── test_admin_forms.py
├── test_cleaners.py
├── test_data_models.py
├── test_department_model_bpd.py
├── test_department_model_impd.py
├── test_department_model_lmpd.py
├── test_department_model_srpd.py
├── test_department_model_wpd.py
├── test_department_models.py
├── test_extractor_api.py
├── test_extractor_api_bpd.py
├── test_extractor_api_lmpd.py
├── test_extractor_api_srpd.py
├── test_extractor_api_wpd.py
├── test_functional.py
├── test_interest_form.py
├── test_manage_methods.py
├── test_public_pages.py
├── test_user_forms.py
├── test_user_models.py
├── test_utils.py
└── utils.py
/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "comport/static/libs"
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.py[cod]
2 |
3 | # Vim
4 | *.sw[op]
5 | tags
6 |
7 | # C extensions
8 | *.so
9 |
10 | # Packages
11 | *.egg
12 | *.egg-info
13 | build
14 | eggs
15 | parts
16 | bin
17 | var
18 | sdist
19 | develop-eggs
20 | .installed.cfg
21 | lib
22 | lib64
23 |
24 | # Installer logs
25 | pip-log.txt
26 |
27 | # Unit test / coverage reports
28 | .coverage
29 | .tox
30 | nosetests.xml
31 | tests/.cache
32 | .pytest_cache/*
33 |
34 | # database dumps
35 | *.dump
36 |
37 | # Translations
38 | *.mo
39 |
40 | # Mr Developer
41 | .mr.developer.cfg
42 | .project
43 | .pydevproject
44 |
45 | # Complexity
46 | output/*.html
47 | output/*/index.html
48 |
49 | # Sphinx
50 | docs/_build
51 |
52 | .webassets-cache
53 |
54 | # Virtualenvs
55 | env/
56 |
57 | ### OSX ###
58 | .DS_Store
59 | .AppleDouble
60 | .LSOverride
61 |
62 | # Icon must end with two \r
63 | Icon
64 |
65 |
66 | # Thumbnails
67 | ._*
68 |
69 | # Files that might appear in the root of a volume
70 | .DocumentRevisions-V100
71 | .fseventsd
72 | .Spotlight-V100
73 | .TemporaryItems
74 | .Trashes
75 | .VolumeIcon.icns
76 |
77 | # Directories potentially created on remote AFP share
78 | .AppleDB
79 | .AppleDesktop
80 | Network Trash Folder
81 | Temporary Items
82 | .apdisk
83 |
84 | data/testdata/*
85 |
86 | .env
87 |
88 | comport/static/libs/jQuery/*
89 |
90 | venv/
91 | tmp/
92 | .cache/
93 | _scratch/
94 |
--------------------------------------------------------------------------------
/.python-version:
--------------------------------------------------------------------------------
1 | 3.6.5
2 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: python
2 | python:
3 | - '3.4'
4 | install: pip install -r requirements/dev.txt
5 | script: py.test tests -x
6 | addons:
7 | postgresql: '9.4'
8 | env:
9 | - TEST_DATABASE_URL="postgresql+psycopg2://postgres@localhost/comport_test"
10 | before_script:
11 | - psql -c 'create database comport_test;' -U postgres
12 | notifications:
13 | slack:
14 | secure: K7esmmPphiNVupc67nZSSHiQQ5iYc684x3M1ZJlvx18ihXO3w+4wCasvOWYgk8aRln/zDAGhSSW60ToyIyeVYMJ6kSAy+CFhhdHI/aMXtpfhlSkMHoLnqqPN/j9vUZetPHkThA/7idiveUvInbi5XY4PeTzPFcP+suLAB01/OYLLDtF8Ou+vZWFfGkTOMt/8HSngvX+RFvKrn6pV1MLf9D6rzIYsdEEqiIm/0OrpYGNoAOHYCigtvzW62Gtjgk+JzXJba2oX8B7qSbpWGlY0q1msNpSI8yOsMxNKybKSMwHsdIs2GVf4wq2ZZm2Cs6nT8U5eTzaCGAPd1a0rAOBhRYaeaUWrtHP0AKqGktcUKhtr5FNwAkt2XTeRp0/M5ehfvyrJ79ImmS5ok3W++uWWmrHPb1u3jDc3958aDs5mZDcazCG7+1nSWPYIU8fsVOis+e/6bcUDiUgFChFdZMqrl2Imp67sa/uJ/JdNAemVddyZfkWCH9ZotLX4kqWvVDl4/Y2JZBJErY7e1ilZf1nhrJvEFN8KAilpw9pQmLmvShM3Rx8UH5nRixB9ChTvBRtkDejLe4uC71xKcMPEQhV8zJAM3tTIZoi5i6w/A3iJOCJc4W9HuXyyMpKaOGwHCGWFRkXK5jMgZJzTuomTebyezsAEggIwOTUiGJt+tCrmnRs=
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015, Team Indy
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5 |
6 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7 |
8 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
9 |
10 | * Neither the name of Project Comport nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
11 |
12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015, Code for America
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5 |
6 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7 |
8 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
9 |
10 | * Neither the name of Project Comport nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
11 |
12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
13 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | install:
2 | pip install -r requirements/dev.txt
3 | bower install
4 |
5 | setup:
6 | make install
7 | python manage.py db upgrade
8 | python manage.py make_normal_user
9 |
10 | serve:
11 | python manage.py server
12 |
13 | test_data:
14 | python manage.py delete_everything
15 | python manage.py make_test_data
16 |
17 | real_data:
18 | python manage.py delete_everything
19 | python manage.py load_test_data
20 |
21 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: gunicorn comport.app:create_app\(\) -b 0.0.0.0:$PORT -w 3 --timeout 120
2 |
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "comport",
3 | "dependencies": {
4 | "bootstrap": "^3.2.0",
5 | "d3": "~3.5.6"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/comport/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/__init__.py
--------------------------------------------------------------------------------
/comport/admin/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """The admin module."""
3 | from . import views
4 |
--------------------------------------------------------------------------------
/comport/assets.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from flask_assets import Bundle, Environment
3 |
4 | css = Bundle(
5 | "libs/bootstrap/dist/css/bootstrap.css",
6 | "css/style.css",
7 | filters="cssmin",
8 | output="public/css/common.css"
9 | )
10 |
11 | js = Bundle(
12 | "libs/jQuery/dist/jquery.js",
13 | "libs/bootstrap/dist/js/bootstrap.js",
14 | "libs/d3/d3.js",
15 | "js/plugins.js",
16 | filters='jsmin',
17 | output="public/js/common.js"
18 | )
19 |
20 | assets = Environment()
21 |
22 | assets.register("js_all", js)
23 | assets.register("css_all", css)
24 |
--------------------------------------------------------------------------------
/comport/compat.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """Python 2/3 compatibility module."""
3 |
4 |
5 | import sys
6 |
7 | PY2 = int(sys.version[0]) == 2
8 |
9 | if PY2:
10 | text_type = unicode
11 | binary_type = str
12 | string_types = (str, unicode)
13 | unicode = unicode
14 | basestring = basestring
15 | else:
16 | text_type = str
17 | binary_type = bytes
18 | string_types = (str,)
19 | unicode = str
20 | basestring = (str, bytes)
21 |
--------------------------------------------------------------------------------
/comport/content/__init__.py:
--------------------------------------------------------------------------------
1 | from . import views
2 |
--------------------------------------------------------------------------------
/comport/content/models.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from comport.database import (Column, db, Model, SurrogatePK)
3 |
4 | class ChartBlock(SurrogatePK, Model):
5 | __tablename__ = 'chart_blocks'
6 | department_id = Column(db.Integer, db.ForeignKey('departments.id'), nullable=False)
7 | title = Column(db.String(255), unique=False, nullable=False)
8 | caption = Column(db.String(255), unique=False, nullable=True)
9 | slug = Column(db.String(255), unique=False, nullable=False)
10 | dataset = Column(db.String(255), unique=False, nullable=False)
11 | content = Column(db.Text, unique=False, nullable=True)
12 | date_updated = Column(db.DateTime, nullable=True)
13 | date_edited = Column(db.DateTime, nullable=True)
14 | order = Column(db.Integer, unique=False, nullable=True)
15 |
16 | def __init__(self, **kwargs):
17 | db.Model.__init__(self, **kwargs)
18 |
--------------------------------------------------------------------------------
/comport/data/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """The data module."""
3 | from . import views
4 |
--------------------------------------------------------------------------------
/comport/data/csv_utils.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | class csv_utils:
4 | def coalesce_date(date):
5 | return "" if date is None else datetime.strftime(date, '%Y-%m-%d %H:%M:%S')
6 |
7 | def coalesce_bool(field):
8 | return "" if field is None else "true" if field is True else "false"
9 |
10 | def coalesce_int(num):
11 | return "" if num is None else str(num)
12 |
--------------------------------------------------------------------------------
/comport/department/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """The department module."""
3 | from . import views
4 |
--------------------------------------------------------------------------------
/comport/extensions.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """Extensions module. Each extension is initialized in the app factory located
3 | in app.py
4 | """
5 |
6 | from flask_bcrypt import Bcrypt
7 | bcrypt = Bcrypt()
8 |
9 | from flask_login import LoginManager
10 | login_manager = LoginManager()
11 |
12 | from flask_sqlalchemy import SQLAlchemy
13 | db = SQLAlchemy()
14 |
15 | from flask_migrate import Migrate
16 | migrate = Migrate()
17 |
18 | from flask_cache import Cache
19 | cache = Cache()
20 |
21 | from flask_debugtoolbar import DebugToolbarExtension
22 | debug_toolbar = DebugToolbarExtension()
23 |
--------------------------------------------------------------------------------
/comport/interest/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """The interest module."""
3 | from . import views
4 |
--------------------------------------------------------------------------------
/comport/interest/forms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from flask_wtf import Form
3 | from wtforms import TextField
4 | from wtforms.validators import DataRequired, Email
5 |
6 | class InterestForm(Form):
7 | name = TextField('Full Name', validators=[DataRequired()])
8 | agency = TextField('Agency', validators=[DataRequired()])
9 | location = TextField('City, State', validators=[DataRequired()])
10 | phone = TextField('Phone', validators=[DataRequired()])
11 | email = TextField('Email', validators=[DataRequired(), Email()])
12 | comments = TextField('Questions/Comments (Optional)', validators=[])
13 |
14 | def __init__(self, *args, **kwargs):
15 | super(InterestForm, self).__init__(*args, **kwargs)
16 |
17 | def validate(self):
18 | initial_validation = super(InterestForm, self).validate()
19 | if not initial_validation:
20 | return False
21 |
22 | return True
23 |
--------------------------------------------------------------------------------
/comport/interest/models.py:
--------------------------------------------------------------------------------
1 | from comport.database import (Column, db, Model, SurrogatePK)
2 |
3 | class Interested(SurrogatePK, Model):
4 | __tablename__ = 'interesteds'
5 | name = Column(db.String(255), unique=False, nullable=False)
6 | agency = Column(db.String(255), unique=False, nullable=False)
7 | location = Column(db.String(255), unique=False, nullable=False)
8 | phone = Column(db.String(255), unique=False, nullable=False)
9 | email = Column(db.String(255), unique=False, nullable=False)
10 | comments = Column(db.String(255), unique=False, nullable=False)
11 |
12 | def __init__(self, **kwargs):
13 | db.Model.__init__(self, **kwargs)
14 |
--------------------------------------------------------------------------------
/comport/interest/views.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """Public section, including homepage and signup."""
3 | from flask import (Blueprint, request, render_template, flash, url_for, redirect)
4 |
5 | from comport.interest.models import Interested
6 | from comport.interest.forms import InterestForm
7 | from comport.utils import flash_errors, send_slack_message
8 |
9 | blueprint = Blueprint('interest', __name__, url_prefix='/interest', static_folder="../static")
10 |
11 | @blueprint.route("/", methods=["GET", "POST"])
12 | def home():
13 | form = InterestForm(request.form, csrf_enabled=False)
14 | if request.method == 'POST':
15 | if form.validate_on_submit():
16 | Interested.create(
17 | name=form.name.data,
18 | agency=form.agency.data,
19 | location=form.location.data,
20 | phone=form.phone.data,
21 | email=form.email.data,
22 | comments=form.comments.data)
23 | # send a slack notification
24 | send_slack_message('New Interest Form Submission!', [form.name.data, form.agency.data, form.location.data, form.phone.data, form.email.data, form.comments.data])
25 | flash("Thank you. We will be in contact shortly.", 'success')
26 | return redirect(url_for('public.home'))
27 | else:
28 | flash_errors(form)
29 | return render_template("public/interest_form.html", interest_form=form)
30 |
--------------------------------------------------------------------------------
/comport/public/__init__.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """The public module, including the homepage and user auth."""
3 |
4 | from . import views
5 |
--------------------------------------------------------------------------------
/comport/public/forms.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | from flask_wtf import Form
3 | from wtforms import TextField, PasswordField
4 | from wtforms.validators import DataRequired
5 |
6 | from comport.user.models import User
7 |
8 |
9 | class LoginForm(Form):
10 | username = TextField('Username', validators=[DataRequired()])
11 | password = PasswordField('Password', validators=[DataRequired()])
12 |
13 | def __init__(self, *args, **kwargs):
14 | super(LoginForm, self).__init__(*args, **kwargs)
15 | self.user = None
16 |
17 | def validate(self):
18 | initial_validation = super(LoginForm, self).validate()
19 | if not initial_validation:
20 | return False
21 |
22 | self.user = User.query.filter_by(username=self.username.data).first()
23 | if not self.user:
24 | self.username.errors.append('Unknown username')
25 | return False
26 |
27 | if not self.user.check_password(self.password.data):
28 | self.password.errors.append('Invalid password')
29 | return False
30 |
31 | if not self.user.active:
32 | self.username.errors.append('User not activated')
33 | return False
34 | return True
35 |
--------------------------------------------------------------------------------
/comport/settings.py:
--------------------------------------------------------------------------------
1 | import os
2 |
3 | class Config(object):
4 | SECRET_KEY = os.environ.get('COMPORT_SECRET', 'comport-secret-key')
5 | BASE_URL = os.environ.get('BASE_URL', 'http://localhost:5000/')
6 | APP_DIR = os.path.abspath(os.path.dirname(__file__)) # This directory
7 | PROJECT_ROOT = os.path.abspath(os.path.join(APP_DIR, os.pardir))
8 | BCRYPT_LOG_ROUNDS = 13
9 | ASSETS_DEBUG = False
10 | DEBUG_TB_ENABLED = False # Disable Debug toolbar
11 | DEBUG_TB_INTERCEPT_REDIRECTS = False
12 | CACHE_TYPE = 'simple' # Can be "memcached", "redis", etc.
13 |
14 | class ProdConfig(Config):
15 | """Production configuration."""
16 | ENV = 'prod'
17 | DEBUG = False
18 | SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL', 'postgresql://localhost/comport')
19 | DEBUG_TB_ENABLED = False # Disable Debug toolbar
20 | ASSETS_DEBUG = True
21 |
22 | class DevConfig(Config):
23 | """Development configuration."""
24 | ENV = 'dev'
25 | DEBUG = True
26 | SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL', 'postgresql://localhost/comport')
27 | DEBUG_TB_ENABLED = False
28 | ASSETS_DEBUG = True # Don't bundle/minify static assets
29 | CACHE_TYPE = 'simple' # Can be "memcached", "redis", etc.
30 |
31 | class TestConfig(Config):
32 | TESTING = True
33 | DEBUG = True
34 | SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL', 'postgresql://localhost/comport_test')
35 | BCRYPT_LOG_ROUNDS = 1 # For faster tests
36 | PRESERVE_CONTEXT_ON_EXCEPTION = False
37 | WTF_CSRF_ENABLED = False # Allows form testing
38 |
--------------------------------------------------------------------------------
/comport/static/img/CfA_logo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/CfA_logo.jpg
--------------------------------------------------------------------------------
/comport/static/img/IndyDPSlogo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/IndyDPSlogo.jpeg
--------------------------------------------------------------------------------
/comport/static/img/chief.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/chief.jpg
--------------------------------------------------------------------------------
/comport/static/img/complaints.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/complaints.png
--------------------------------------------------------------------------------
/comport/static/img/comportlogodark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/comportlogodark.png
--------------------------------------------------------------------------------
/comport/static/img/ois.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/ois.png
--------------------------------------------------------------------------------
/comport/static/img/uof.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/img/uof.png
--------------------------------------------------------------------------------
/comport/static/js/map.js:
--------------------------------------------------------------------------------
1 | function mapChart(config, data){
2 | L.mapbox.accessToken = "pk.eyJ1IjoiY29kZWZvcmFtZXJpY2EiLCJhIjoiSTZlTTZTcyJ9.3aSlHLNzvsTwK-CYfZsG_Q"
3 |
4 | var mapWrapper = d3.select(config.parent);
5 | var div = mapWrapper[0][0];
6 | mapWrapper.style('width', '32em')
7 | .style('height', '25em');
8 |
9 | var map = L.mapbox.map(div, 'mapbox.light')
10 | .setView([39.78, -86.15], 10)
11 |
12 | var maxY = d3.max(data.values(), function(d){ return d[config.y]; });
13 |
14 | // make color scale
15 | var colorScale = d3.scale.linear()
16 | .domain([1,
17 | maxY
18 | ])
19 | .range([
20 | d3.rgb("#ffffb2"),
21 | d3.rgb("#bd0026")
22 | ]);
23 |
24 | // make the styling function
25 | function style(f) {
26 |
27 | var y = f.properties[config.y];
28 | var color, opacity;
29 |
30 | if(y){
31 | color = colorScale(y);
32 | opacity = 0.5;
33 | } else {
34 | color = "#cccccc";
35 | opacity = 0;
36 | }
37 | return {
38 | fillColor: color,
39 | weight: 0.5,
40 | opacity: 0.5,
41 | color: '#444444',
42 | dashArray: "2, 1",
43 | fillOpacity: opacity
44 | };
45 | }
46 |
47 | d3.json("/static/indy_tracts.geojson", function(error, json) {
48 |
49 | json.features.forEach(function(feature){
50 | var tract_id = feature.properties['NAME'];
51 | var incident_data = data.get(tract_id);
52 | if( incident_data ){
53 | feature.properties[config.y] = incident_data[config.y];
54 | feature.properties['incidents'] = incident_data['incidents'];
55 | }
56 | });
57 |
58 |
59 | var tracts = L.mapbox.featureLayer(json, {style: style})
60 | .addTo(map);
61 |
62 | var tracts = d3.selectAll('.leaflet-overlay-pane path');
63 |
64 |
65 | });
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/comport/static/js/plugins.js:
--------------------------------------------------------------------------------
1 | // place any jQuery/helper plugins in here, instead of separate, slower script files.
--------------------------------------------------------------------------------
/comport/static/js/script.js:
--------------------------------------------------------------------------------
1 | (function($, window) {
2 |
3 |
4 |
5 | }).call(this, jQuery, window);
6 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
4 | "keywords": [
5 | "css",
6 | "js",
7 | "less",
8 | "mobile-first",
9 | "responsive",
10 | "front-end",
11 | "framework",
12 | "web"
13 | ],
14 | "homepage": "http://getbootstrap.com",
15 | "license": "MIT",
16 | "moduleType": "globals",
17 | "main": [
18 | "less/bootstrap.less",
19 | "dist/js/bootstrap.js"
20 | ],
21 | "ignore": [
22 | "/.*",
23 | "_config.yml",
24 | "CNAME",
25 | "composer.json",
26 | "CONTRIBUTING.md",
27 | "docs",
28 | "js/tests",
29 | "test-infra"
30 | ],
31 | "dependencies": {
32 | "jquery": "1.9.1 - 3"
33 | },
34 | "version": "3.3.7",
35 | "_release": "3.3.7",
36 | "_resolution": {
37 | "type": "version",
38 | "tag": "v3.3.7",
39 | "commit": "0b9c4a4007c44201dce9a6cc1a38407005c26c86"
40 | },
41 | "_source": "https://github.com/twbs/bootstrap.git",
42 | "_target": "^3.2.0",
43 | "_originalSource": "bootstrap"
44 | }
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | Bootstrap uses [GitHub's Releases feature](https://github.com/blog/1547-release-your-software) for its changelogs.
2 |
3 | See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
4 |
5 | Release announcement posts on [the official Bootstrap blog](http://blog.getbootstrap.com) contain summaries of the most noteworthy changes made in each release.
6 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | group :development, :test do
4 | gem 'jekyll', '~> 3.1.2'
5 | gem 'jekyll-sitemap', '~> 0.11.0'
6 | end
7 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | addressable (2.4.0)
5 | colorator (0.1)
6 | ffi (1.9.14-x64-mingw32)
7 | jekyll (3.1.6)
8 | colorator (~> 0.1)
9 | jekyll-sass-converter (~> 1.0)
10 | jekyll-watch (~> 1.1)
11 | kramdown (~> 1.3)
12 | liquid (~> 3.0)
13 | mercenary (~> 0.3.3)
14 | rouge (~> 1.7)
15 | safe_yaml (~> 1.0)
16 | jekyll-sass-converter (1.4.0)
17 | sass (~> 3.4)
18 | jekyll-sitemap (0.11.0)
19 | addressable (~> 2.4.0)
20 | jekyll-watch (1.4.0)
21 | listen (~> 3.0, < 3.1)
22 | kramdown (1.11.1)
23 | liquid (3.0.6)
24 | listen (3.0.8)
25 | rb-fsevent (~> 0.9, >= 0.9.4)
26 | rb-inotify (~> 0.9, >= 0.9.7)
27 | mercenary (0.3.6)
28 | rb-fsevent (0.9.7)
29 | rb-inotify (0.9.7)
30 | ffi (>= 0.5.0)
31 | rouge (1.11.1)
32 | safe_yaml (1.0.4)
33 | sass (3.4.22)
34 |
35 | PLATFORMS
36 | x64-mingw32
37 |
38 | DEPENDENCIES
39 | jekyll (~> 3.1.2)
40 | jekyll-sitemap (~> 0.11.0)
41 |
42 | BUNDLED WITH
43 | 1.12.5
44 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Before opening an issue:
2 |
3 | - [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue)
4 | - [Validate](http://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems
5 | - Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
6 | - Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
7 |
8 | When asking general "how to" questions:
9 |
10 | - Please do not open an issue here
11 | - Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community)
12 |
13 | When reporting a bug, include:
14 |
15 | - Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
16 | - Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
17 | - Reduced test cases and potential fixes using [JS Bin](https://jsbin.com)
18 |
19 | When suggesting a feature, include:
20 |
21 | - As much detail as possible for what we should add and why it's important to Bootstrap
22 | - Relevant links to prior art, screenshots, or live demos whenever possible
23 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2011-2016 Twitter, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bootstrap",
3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
4 | "keywords": [
5 | "css",
6 | "js",
7 | "less",
8 | "mobile-first",
9 | "responsive",
10 | "front-end",
11 | "framework",
12 | "web"
13 | ],
14 | "homepage": "http://getbootstrap.com",
15 | "license": "MIT",
16 | "moduleType": "globals",
17 | "main": [
18 | "less/bootstrap.less",
19 | "dist/js/bootstrap.js"
20 | ],
21 | "ignore": [
22 | "/.*",
23 | "_config.yml",
24 | "CNAME",
25 | "composer.json",
26 | "CONTRIBUTING.md",
27 | "docs",
28 | "js/tests",
29 | "test-infra"
30 | ],
31 | "dependencies": {
32 | "jquery": "1.9.1 - 3"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/dist/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/bootstrap/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/grunt/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends" : "../js/.jshintrc",
3 | "asi" : false,
4 | "browser" : false,
5 | "es3" : false,
6 | "node" : true
7 | }
8 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/grunt/bs-commonjs-generator.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Grunt task for the CommonJS module generation
3 | * http://getbootstrap.com
4 | * Copyright 2014-2015 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | */
7 |
8 | 'use strict';
9 |
10 | var fs = require('fs');
11 | var path = require('path');
12 |
13 | var COMMONJS_BANNER = '// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\n';
14 |
15 | module.exports = function generateCommonJSModule(grunt, srcFiles, destFilepath) {
16 | var destDir = path.dirname(destFilepath);
17 |
18 | function srcPathToDestRequire(srcFilepath) {
19 | var requirePath = path.relative(destDir, srcFilepath).replace(/\\/g, '/');
20 | return 'require(\'' + requirePath + '\')';
21 | }
22 |
23 | var moduleOutputJs = COMMONJS_BANNER + srcFiles.map(srcPathToDestRequire).join('\n');
24 | try {
25 | fs.writeFileSync(destFilepath, moduleOutputJs);
26 | } catch (err) {
27 | grunt.fail.warn(err);
28 | }
29 | grunt.log.writeln('File ' + destFilepath.cyan + ' created.');
30 | };
31 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/grunt/bs-glyphicons-data-generator.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Grunt task for Glyphicons data generation
3 | * http://getbootstrap.com
4 | * Copyright 2014-2015 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | */
7 |
8 | 'use strict';
9 |
10 | var fs = require('fs');
11 |
12 | module.exports = function generateGlyphiconsData(grunt) {
13 | // Pass encoding, utf8, so `readFileSync` will return a string instead of a
14 | // buffer
15 | var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8');
16 | var glyphiconsLines = glyphiconsFile.split('\n');
17 |
18 | // Use any line that starts with ".glyphicon-" and capture the class name
19 | var iconClassName = /^\.(glyphicon-[a-zA-Z0-9-]+)/;
20 | var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' +
21 | '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n';
22 | var glyphiconsYml = 'docs/_data/glyphicons.yml';
23 | for (var i = 0, len = glyphiconsLines.length; i < len; i++) {
24 | var match = glyphiconsLines[i].match(iconClassName);
25 |
26 | if (match !== null) {
27 | glyphiconsData += '- ' + match[1] + '\n';
28 | }
29 | }
30 |
31 | // Create the `_data` directory if it doesn't already exist
32 | if (!fs.existsSync('docs/_data')) {
33 | fs.mkdirSync('docs/_data');
34 | }
35 |
36 | try {
37 | fs.writeFileSync(glyphiconsYml, glyphiconsData);
38 | } catch (err) {
39 | grunt.fail.warn(err);
40 | }
41 | grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.');
42 | };
43 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/grunt/bs-raw-files-generator.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Grunt task for generating raw-files.min.js for the Customizer
3 | * http://getbootstrap.com
4 | * Copyright 2014-2015 Twitter, Inc.
5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6 | */
7 |
8 | 'use strict';
9 |
10 | var fs = require('fs');
11 | var btoa = require('btoa');
12 | var glob = require('glob');
13 |
14 | function getFiles(type) {
15 | var files = {};
16 | var recursive = type === 'less';
17 | var globExpr = recursive ? '/**/*' : '/*';
18 | glob.sync(type + globExpr)
19 | .filter(function (path) {
20 | return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path);
21 | })
22 | .forEach(function (fullPath) {
23 | var relativePath = fullPath.replace(/^[^/]+\//, '');
24 | files[relativePath] = type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8');
25 | });
26 | return 'var __' + type + ' = ' + JSON.stringify(files) + '\n';
27 | }
28 |
29 | module.exports = function generateRawFilesJs(grunt, banner) {
30 | if (!banner) {
31 | banner = '';
32 | }
33 | var dirs = ['js', 'less', 'fonts'];
34 | var files = banner + dirs.map(getFiles).reduce(function (combined, file) {
35 | return combined + file;
36 | }, '');
37 | var rawFilesJs = 'docs/assets/js/raw-files.min.js';
38 | try {
39 | fs.writeFileSync(rawFilesJs, files);
40 | } catch (err) {
41 | grunt.fail.warn(err);
42 | }
43 | grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.');
44 | };
45 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/grunt/configBridge.json:
--------------------------------------------------------------------------------
1 | {
2 | "paths": {
3 | "customizerJs": [
4 | "../assets/js/vendor/autoprefixer.js",
5 | "../assets/js/vendor/less.min.js",
6 | "../assets/js/vendor/jszip.min.js",
7 | "../assets/js/vendor/uglify.min.js",
8 | "../assets/js/vendor/Blob.js",
9 | "../assets/js/vendor/FileSaver.js",
10 | "../assets/js/raw-files.min.js",
11 | "../assets/js/src/customizer.js"
12 | ],
13 | "docsJs": [
14 | "../assets/js/vendor/holder.min.js",
15 | "../assets/js/vendor/ZeroClipboard.min.js",
16 | "../assets/js/vendor/anchor.min.js",
17 | "../assets/js/src/application.js"
18 | ]
19 | },
20 | "config": {
21 | "autoprefixerBrowsers": [
22 | "Android 2.3",
23 | "Android >= 4",
24 | "Chrome >= 20",
25 | "Firefox >= 24",
26 | "Explorer >= 8",
27 | "iOS >= 6",
28 | "Opera >= 12",
29 | "Safari >= 6"
30 | ],
31 | "jqueryCheck": [
32 | "if (typeof jQuery === 'undefined') {",
33 | " throw new Error('Bootstrap\\'s JavaScript requires jQuery')",
34 | "}\n"
35 | ],
36 | "jqueryVersionCheck": [
37 | "+function ($) {",
38 | " 'use strict';",
39 | " var version = $.fn.jquery.split(' ')[0].split('.')",
40 | " if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {",
41 | " throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')",
42 | " }",
43 | "}(jQuery);\n\n"
44 | ]
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/grunt/sauce_browsers.yml:
--------------------------------------------------------------------------------
1 | [
2 | # Docs: https://saucelabs.com/docs/platforms/webdriver
3 |
4 | {
5 | browserName: "safari",
6 | platform: "OS X 10.10"
7 | },
8 | {
9 | browserName: "chrome",
10 | platform: "OS X 10.10"
11 | },
12 | {
13 | browserName: "firefox",
14 | platform: "OS X 10.10"
15 | },
16 |
17 | # Mac Opera not currently supported by Sauce Labs
18 |
19 | {
20 | browserName: "internet explorer",
21 | version: "11",
22 | platform: "Windows 8.1"
23 | },
24 | {
25 | browserName: "internet explorer",
26 | version: "10",
27 | platform: "Windows 8"
28 | },
29 | {
30 | browserName: "internet explorer",
31 | version: "9",
32 | platform: "Windows 7"
33 | },
34 | {
35 | browserName: "internet explorer",
36 | version: "8",
37 | platform: "Windows 7"
38 | },
39 |
40 | # { # Unofficial
41 | # browserName: "internet explorer",
42 | # version: "7",
43 | # platform: "Windows XP"
44 | # },
45 |
46 | {
47 | browserName: "chrome",
48 | platform: "Windows 8.1"
49 | },
50 | {
51 | browserName: "firefox",
52 | platform: "Windows 8.1"
53 | },
54 |
55 | # Win Opera 15+ not currently supported by Sauce Labs
56 |
57 | {
58 | browserName: "iphone",
59 | platform: "OS X 10.10",
60 | version: "9.2"
61 | },
62 |
63 | # iOS Chrome not currently supported by Sauce Labs
64 |
65 | # Linux (unofficial)
66 | {
67 | browserName: "chrome",
68 | platform: "Linux"
69 | },
70 | {
71 | browserName: "firefox",
72 | platform: "Linux"
73 | }
74 |
75 | # Android Chrome not currently supported by Sauce Labs
76 |
77 | # { # Android Browser (super-unofficial)
78 | # browserName: "android",
79 | # version: "4.0",
80 | # platform: "Linux"
81 | # }
82 | ]
83 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/js/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "asi" : true,
3 | "browser" : true,
4 | "eqeqeq" : false,
5 | "eqnull" : true,
6 | "es3" : true,
7 | "expr" : true,
8 | "jquery" : true,
9 | "latedef" : true,
10 | "laxbreak" : true,
11 | "nonbsp" : true,
12 | "strict" : true,
13 | "undef" : true,
14 | "unused" : true
15 | }
16 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/.csslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "adjoining-classes": false,
3 | "box-sizing": false,
4 | "box-model": false,
5 | "compatible-vendor-prefixes": false,
6 | "floats": false,
7 | "font-sizes": false,
8 | "gradients": false,
9 | "important": false,
10 | "known-properties": false,
11 | "outline-none": false,
12 | "qualified-headings": false,
13 | "regex-selectors": false,
14 | "shorthand": false,
15 | "text-indent": false,
16 | "unique-headings": false,
17 | "universal-selector": false,
18 | "unqualified-attributes": false
19 | }
20 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/alerts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: @alert-padding;
11 | margin-bottom: @line-height-computed;
12 | border: 1px solid transparent;
13 | border-radius: @alert-border-radius;
14 |
15 | // Headings for larger alerts
16 | h4 {
17 | margin-top: 0;
18 | // Specified for the h4 to prevent conflicts of changing @headings-color
19 | color: inherit;
20 | }
21 |
22 | // Provide class for links that match alerts
23 | .alert-link {
24 | font-weight: @alert-link-font-weight;
25 | }
26 |
27 | // Improve alignment and spacing of inner content
28 | > p,
29 | > ul {
30 | margin-bottom: 0;
31 | }
32 |
33 | > p + p {
34 | margin-top: 5px;
35 | }
36 | }
37 |
38 | // Dismissible alerts
39 | //
40 | // Expand the right padding and account for the close button's positioning.
41 |
42 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
43 | .alert-dismissible {
44 | padding-right: (@alert-padding + 20);
45 |
46 | // Adjust close link position
47 | .close {
48 | position: relative;
49 | top: -2px;
50 | right: -21px;
51 | color: inherit;
52 | }
53 | }
54 |
55 | // Alternate styles
56 | //
57 | // Generate contextual modifier classes for colorizing the alert.
58 |
59 | .alert-success {
60 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
61 | }
62 |
63 | .alert-info {
64 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
65 | }
66 |
67 | .alert-warning {
68 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
69 | }
70 |
71 | .alert-danger {
72 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
73 | }
74 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/badges.less:
--------------------------------------------------------------------------------
1 | //
2 | // Badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .badge {
8 | display: inline-block;
9 | min-width: 10px;
10 | padding: 3px 7px;
11 | font-size: @font-size-small;
12 | font-weight: @badge-font-weight;
13 | color: @badge-color;
14 | line-height: @badge-line-height;
15 | vertical-align: middle;
16 | white-space: nowrap;
17 | text-align: center;
18 | background-color: @badge-bg;
19 | border-radius: @badge-border-radius;
20 |
21 | // Empty badges collapse automatically (not available in IE8)
22 | &:empty {
23 | display: none;
24 | }
25 |
26 | // Quick fix for badges in buttons
27 | .btn & {
28 | position: relative;
29 | top: -1px;
30 | }
31 |
32 | .btn-xs &,
33 | .btn-group-xs > .btn & {
34 | top: 0;
35 | padding: 1px 5px;
36 | }
37 |
38 | // Hover state, but only for links
39 | a& {
40 | &:hover,
41 | &:focus {
42 | color: @badge-link-hover-color;
43 | text-decoration: none;
44 | cursor: pointer;
45 | }
46 | }
47 |
48 | // Account for badges in navs
49 | .list-group-item.active > &,
50 | .nav-pills > .active > a > & {
51 | color: @badge-active-color;
52 | background-color: @badge-active-bg;
53 | }
54 |
55 | .list-group-item > & {
56 | float: right;
57 | }
58 |
59 | .list-group-item > & + & {
60 | margin-right: 5px;
61 | }
62 |
63 | .nav-pills > li > a > & {
64 | margin-left: 3px;
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/bootstrap.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2016 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 |
7 | // Core variables and mixins
8 | @import "variables.less";
9 | @import "mixins.less";
10 |
11 | // Reset and dependencies
12 | @import "normalize.less";
13 | @import "print.less";
14 | @import "glyphicons.less";
15 |
16 | // Core CSS
17 | @import "scaffolding.less";
18 | @import "type.less";
19 | @import "code.less";
20 | @import "grid.less";
21 | @import "tables.less";
22 | @import "forms.less";
23 | @import "buttons.less";
24 |
25 | // Components
26 | @import "component-animations.less";
27 | @import "dropdowns.less";
28 | @import "button-groups.less";
29 | @import "input-groups.less";
30 | @import "navs.less";
31 | @import "navbar.less";
32 | @import "breadcrumbs.less";
33 | @import "pagination.less";
34 | @import "pager.less";
35 | @import "labels.less";
36 | @import "badges.less";
37 | @import "jumbotron.less";
38 | @import "thumbnails.less";
39 | @import "alerts.less";
40 | @import "progress-bars.less";
41 | @import "media.less";
42 | @import "list-group.less";
43 | @import "panels.less";
44 | @import "responsive-embed.less";
45 | @import "wells.less";
46 | @import "close.less";
47 |
48 | // Components w/ JavaScript
49 | @import "modals.less";
50 | @import "tooltip.less";
51 | @import "popovers.less";
52 | @import "carousel.less";
53 |
54 | // Utility classes
55 | @import "utilities.less";
56 | @import "responsive-utilities.less";
57 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/breadcrumbs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Breadcrumbs
3 | // --------------------------------------------------
4 |
5 |
6 | .breadcrumb {
7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
8 | margin-bottom: @line-height-computed;
9 | list-style: none;
10 | background-color: @breadcrumb-bg;
11 | border-radius: @border-radius-base;
12 |
13 | > li {
14 | display: inline-block;
15 |
16 | + li:before {
17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18 | padding: 0 5px;
19 | color: @breadcrumb-color;
20 | }
21 | }
22 |
23 | > .active {
24 | color: @breadcrumb-active-color;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/close.less:
--------------------------------------------------------------------------------
1 | //
2 | // Close icons
3 | // --------------------------------------------------
4 |
5 |
6 | .close {
7 | float: right;
8 | font-size: (@font-size-base * 1.5);
9 | font-weight: @close-font-weight;
10 | line-height: 1;
11 | color: @close-color;
12 | text-shadow: @close-text-shadow;
13 | .opacity(.2);
14 |
15 | &:hover,
16 | &:focus {
17 | color: @close-color;
18 | text-decoration: none;
19 | cursor: pointer;
20 | .opacity(.5);
21 | }
22 |
23 | // Additional properties for button version
24 | // iOS requires the button element instead of an anchor tag.
25 | // If you want the anchor version, it requires `href="#"`.
26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
27 | button& {
28 | padding: 0;
29 | cursor: pointer;
30 | background: transparent;
31 | border: 0;
32 | -webkit-appearance: none;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/code.less:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and block)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | kbd,
9 | pre,
10 | samp {
11 | font-family: @font-family-monospace;
12 | }
13 |
14 | // Inline code
15 | code {
16 | padding: 2px 4px;
17 | font-size: 90%;
18 | color: @code-color;
19 | background-color: @code-bg;
20 | border-radius: @border-radius-base;
21 | }
22 |
23 | // User input typically entered via keyboard
24 | kbd {
25 | padding: 2px 4px;
26 | font-size: 90%;
27 | color: @kbd-color;
28 | background-color: @kbd-bg;
29 | border-radius: @border-radius-small;
30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
31 |
32 | kbd {
33 | padding: 0;
34 | font-size: 100%;
35 | font-weight: bold;
36 | box-shadow: none;
37 | }
38 | }
39 |
40 | // Blocks of code
41 | pre {
42 | display: block;
43 | padding: ((@line-height-computed - 1) / 2);
44 | margin: 0 0 (@line-height-computed / 2);
45 | font-size: (@font-size-base - 1); // 14px to 13px
46 | line-height: @line-height-base;
47 | word-break: break-all;
48 | word-wrap: break-word;
49 | color: @pre-color;
50 | background-color: @pre-bg;
51 | border: 1px solid @pre-border-color;
52 | border-radius: @border-radius-base;
53 |
54 | // Account for some code outputs that place code tags in pre tags
55 | code {
56 | padding: 0;
57 | font-size: inherit;
58 | color: inherit;
59 | white-space: pre-wrap;
60 | background-color: transparent;
61 | border-radius: 0;
62 | }
63 | }
64 |
65 | // Enable scrollable blocks of code
66 | .pre-scrollable {
67 | max-height: @pre-scrollable-max-height;
68 | overflow-y: scroll;
69 | }
70 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/component-animations.less:
--------------------------------------------------------------------------------
1 | //
2 | // Component animations
3 | // --------------------------------------------------
4 |
5 | // Heads up!
6 | //
7 | // We don't use the `.opacity()` mixin here since it causes a bug with text
8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
9 |
10 | .fade {
11 | opacity: 0;
12 | .transition(opacity .15s linear);
13 | &.in {
14 | opacity: 1;
15 | }
16 | }
17 |
18 | .collapse {
19 | display: none;
20 |
21 | &.in { display: block; }
22 | tr&.in { display: table-row; }
23 | tbody&.in { display: table-row-group; }
24 | }
25 |
26 | .collapsing {
27 | position: relative;
28 | height: 0;
29 | overflow: hidden;
30 | .transition-property(~"height, visibility");
31 | .transition-duration(.35s);
32 | .transition-timing-function(ease);
33 | }
34 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/grid.less:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Container widths
7 | //
8 | // Set the container width, and override it for fixed navbars in media queries.
9 |
10 | .container {
11 | .container-fixed();
12 |
13 | @media (min-width: @screen-sm-min) {
14 | width: @container-sm;
15 | }
16 | @media (min-width: @screen-md-min) {
17 | width: @container-md;
18 | }
19 | @media (min-width: @screen-lg-min) {
20 | width: @container-lg;
21 | }
22 | }
23 |
24 |
25 | // Fluid container
26 | //
27 | // Utilizes the mixin meant for fixed width containers, but without any defined
28 | // width for fluid, full width layouts.
29 |
30 | .container-fluid {
31 | .container-fixed();
32 | }
33 |
34 |
35 | // Row
36 | //
37 | // Rows contain and clear the floats of your columns.
38 |
39 | .row {
40 | .make-row();
41 | }
42 |
43 |
44 | // Columns
45 | //
46 | // Common styles for small and large grid columns
47 |
48 | .make-grid-columns();
49 |
50 |
51 | // Extra small grid
52 | //
53 | // Columns, offsets, pushes, and pulls for extra small devices like
54 | // smartphones.
55 |
56 | .make-grid(xs);
57 |
58 |
59 | // Small grid
60 | //
61 | // Columns, offsets, pushes, and pulls for the small device range, from phones
62 | // to tablets.
63 |
64 | @media (min-width: @screen-sm-min) {
65 | .make-grid(sm);
66 | }
67 |
68 |
69 | // Medium grid
70 | //
71 | // Columns, offsets, pushes, and pulls for the desktop device range.
72 |
73 | @media (min-width: @screen-md-min) {
74 | .make-grid(md);
75 | }
76 |
77 |
78 | // Large grid
79 | //
80 | // Columns, offsets, pushes, and pulls for the large desktop device range.
81 |
82 | @media (min-width: @screen-lg-min) {
83 | .make-grid(lg);
84 | }
85 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/jumbotron.less:
--------------------------------------------------------------------------------
1 | //
2 | // Jumbotron
3 | // --------------------------------------------------
4 |
5 |
6 | .jumbotron {
7 | padding-top: @jumbotron-padding;
8 | padding-bottom: @jumbotron-padding;
9 | margin-bottom: @jumbotron-padding;
10 | color: @jumbotron-color;
11 | background-color: @jumbotron-bg;
12 |
13 | h1,
14 | .h1 {
15 | color: @jumbotron-heading-color;
16 | }
17 |
18 | p {
19 | margin-bottom: (@jumbotron-padding / 2);
20 | font-size: @jumbotron-font-size;
21 | font-weight: 200;
22 | }
23 |
24 | > hr {
25 | border-top-color: darken(@jumbotron-bg, 10%);
26 | }
27 |
28 | .container &,
29 | .container-fluid & {
30 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
31 | padding-left: (@grid-gutter-width / 2);
32 | padding-right: (@grid-gutter-width / 2);
33 | }
34 |
35 | .container {
36 | max-width: 100%;
37 | }
38 |
39 | @media screen and (min-width: @screen-sm-min) {
40 | padding-top: (@jumbotron-padding * 1.6);
41 | padding-bottom: (@jumbotron-padding * 1.6);
42 |
43 | .container &,
44 | .container-fluid & {
45 | padding-left: (@jumbotron-padding * 2);
46 | padding-right: (@jumbotron-padding * 2);
47 | }
48 |
49 | h1,
50 | .h1 {
51 | font-size: @jumbotron-heading-font-size;
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/labels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Labels
3 | // --------------------------------------------------
4 |
5 | .label {
6 | display: inline;
7 | padding: .2em .6em .3em;
8 | font-size: 75%;
9 | font-weight: bold;
10 | line-height: 1;
11 | color: @label-color;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | border-radius: .25em;
16 |
17 | // Add hover effects, but only for links
18 | a& {
19 | &:hover,
20 | &:focus {
21 | color: @label-link-hover-color;
22 | text-decoration: none;
23 | cursor: pointer;
24 | }
25 | }
26 |
27 | // Empty labels collapse automatically (not available in IE8)
28 | &:empty {
29 | display: none;
30 | }
31 |
32 | // Quick fix for labels in buttons
33 | .btn & {
34 | position: relative;
35 | top: -1px;
36 | }
37 | }
38 |
39 | // Colors
40 | // Contextual variations (linked labels get darker on :hover)
41 |
42 | .label-default {
43 | .label-variant(@label-default-bg);
44 | }
45 |
46 | .label-primary {
47 | .label-variant(@label-primary-bg);
48 | }
49 |
50 | .label-success {
51 | .label-variant(@label-success-bg);
52 | }
53 |
54 | .label-info {
55 | .label-variant(@label-info-bg);
56 | }
57 |
58 | .label-warning {
59 | .label-variant(@label-warning-bg);
60 | }
61 |
62 | .label-danger {
63 | .label-variant(@label-danger-bg);
64 | }
65 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/media.less:
--------------------------------------------------------------------------------
1 | .media {
2 | // Proper spacing between instances of .media
3 | margin-top: 15px;
4 |
5 | &:first-child {
6 | margin-top: 0;
7 | }
8 | }
9 |
10 | .media,
11 | .media-body {
12 | zoom: 1;
13 | overflow: hidden;
14 | }
15 |
16 | .media-body {
17 | width: 10000px;
18 | }
19 |
20 | .media-object {
21 | display: block;
22 |
23 | // Fix collapse in webkit from max-width: 100% and display: table-cell.
24 | &.img-thumbnail {
25 | max-width: none;
26 | }
27 | }
28 |
29 | .media-right,
30 | .media > .pull-right {
31 | padding-left: 10px;
32 | }
33 |
34 | .media-left,
35 | .media > .pull-left {
36 | padding-right: 10px;
37 | }
38 |
39 | .media-left,
40 | .media-right,
41 | .media-body {
42 | display: table-cell;
43 | vertical-align: top;
44 | }
45 |
46 | .media-middle {
47 | vertical-align: middle;
48 | }
49 |
50 | .media-bottom {
51 | vertical-align: bottom;
52 | }
53 |
54 | // Reset margins on headings for tighter default spacing
55 | .media-heading {
56 | margin-top: 0;
57 | margin-bottom: 5px;
58 | }
59 |
60 | // Media list variation
61 | //
62 | // Undo default ul/ol styles
63 | .media-list {
64 | padding-left: 0;
65 | list-style: none;
66 | }
67 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------------------------------
3 |
4 | // Utilities
5 | @import "mixins/hide-text.less";
6 | @import "mixins/opacity.less";
7 | @import "mixins/image.less";
8 | @import "mixins/labels.less";
9 | @import "mixins/reset-filter.less";
10 | @import "mixins/resize.less";
11 | @import "mixins/responsive-visibility.less";
12 | @import "mixins/size.less";
13 | @import "mixins/tab-focus.less";
14 | @import "mixins/reset-text.less";
15 | @import "mixins/text-emphasis.less";
16 | @import "mixins/text-overflow.less";
17 | @import "mixins/vendor-prefixes.less";
18 |
19 | // Components
20 | @import "mixins/alerts.less";
21 | @import "mixins/buttons.less";
22 | @import "mixins/panels.less";
23 | @import "mixins/pagination.less";
24 | @import "mixins/list-group.less";
25 | @import "mixins/nav-divider.less";
26 | @import "mixins/forms.less";
27 | @import "mixins/progress-bar.less";
28 | @import "mixins/table-row.less";
29 |
30 | // Skins
31 | @import "mixins/background-variant.less";
32 | @import "mixins/border-radius.less";
33 | @import "mixins/gradients.less";
34 |
35 | // Layout
36 | @import "mixins/clearfix.less";
37 | @import "mixins/center-block.less";
38 | @import "mixins/nav-vertical-align.less";
39 | @import "mixins/grid-framework.less";
40 | @import "mixins/grid.less";
41 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/alerts.less:
--------------------------------------------------------------------------------
1 | // Alerts
2 |
3 | .alert-variant(@background; @border; @text-color) {
4 | background-color: @background;
5 | border-color: @border;
6 | color: @text-color;
7 |
8 | hr {
9 | border-top-color: darken(@border, 5%);
10 | }
11 | .alert-link {
12 | color: darken(@text-color, 10%);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/background-variant.less:
--------------------------------------------------------------------------------
1 | // Contextual backgrounds
2 |
3 | .bg-variant(@color) {
4 | background-color: @color;
5 | a&:hover,
6 | a&:focus {
7 | background-color: darken(@color, 10%);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/border-radius.less:
--------------------------------------------------------------------------------
1 | // Single side border-radius
2 |
3 | .border-top-radius(@radius) {
4 | border-top-right-radius: @radius;
5 | border-top-left-radius: @radius;
6 | }
7 | .border-right-radius(@radius) {
8 | border-bottom-right-radius: @radius;
9 | border-top-right-radius: @radius;
10 | }
11 | .border-bottom-radius(@radius) {
12 | border-bottom-right-radius: @radius;
13 | border-bottom-left-radius: @radius;
14 | }
15 | .border-left-radius(@radius) {
16 | border-bottom-left-radius: @radius;
17 | border-top-left-radius: @radius;
18 | }
19 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/buttons.less:
--------------------------------------------------------------------------------
1 | // Button variants
2 | //
3 | // Easily pump out default styles, as well as :hover, :focus, :active,
4 | // and disabled options for all buttons
5 |
6 | .button-variant(@color; @background; @border) {
7 | color: @color;
8 | background-color: @background;
9 | border-color: @border;
10 |
11 | &:focus,
12 | &.focus {
13 | color: @color;
14 | background-color: darken(@background, 10%);
15 | border-color: darken(@border, 25%);
16 | }
17 | &:hover {
18 | color: @color;
19 | background-color: darken(@background, 10%);
20 | border-color: darken(@border, 12%);
21 | }
22 | &:active,
23 | &.active,
24 | .open > .dropdown-toggle& {
25 | color: @color;
26 | background-color: darken(@background, 10%);
27 | border-color: darken(@border, 12%);
28 |
29 | &:hover,
30 | &:focus,
31 | &.focus {
32 | color: @color;
33 | background-color: darken(@background, 17%);
34 | border-color: darken(@border, 25%);
35 | }
36 | }
37 | &:active,
38 | &.active,
39 | .open > .dropdown-toggle& {
40 | background-image: none;
41 | }
42 | &.disabled,
43 | &[disabled],
44 | fieldset[disabled] & {
45 | &:hover,
46 | &:focus,
47 | &.focus {
48 | background-color: @background;
49 | border-color: @border;
50 | }
51 | }
52 |
53 | .badge {
54 | color: @background;
55 | background-color: @color;
56 | }
57 | }
58 |
59 | // Button sizes
60 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
61 | padding: @padding-vertical @padding-horizontal;
62 | font-size: @font-size;
63 | line-height: @line-height;
64 | border-radius: @border-radius;
65 | }
66 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/center-block.less:
--------------------------------------------------------------------------------
1 | // Center-align a block level element
2 |
3 | .center-block() {
4 | display: block;
5 | margin-left: auto;
6 | margin-right: auto;
7 | }
8 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/clearfix.less:
--------------------------------------------------------------------------------
1 | // Clearfix
2 | //
3 | // For modern browsers
4 | // 1. The space content is one way to avoid an Opera bug when the
5 | // contenteditable attribute is included anywhere else in the document.
6 | // Otherwise it causes space to appear at the top and bottom of elements
7 | // that are clearfixed.
8 | // 2. The use of `table` rather than `block` is only necessary if using
9 | // `:before` to contain the top-margins of child elements.
10 | //
11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/
12 |
13 | .clearfix() {
14 | &:before,
15 | &:after {
16 | content: " "; // 1
17 | display: table; // 2
18 | }
19 | &:after {
20 | clear: both;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/hide-text.less:
--------------------------------------------------------------------------------
1 | // CSS image replacement
2 | //
3 | // Heads up! v3 launched with only `.hide-text()`, but per our pattern for
4 | // mixins being reused as classes with the same name, this doesn't hold up. As
5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.
6 | //
7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757
8 |
9 | // Deprecated as of v3.0.1 (has been removed in v4)
10 | .hide-text() {
11 | font: ~"0/0" a;
12 | color: transparent;
13 | text-shadow: none;
14 | background-color: transparent;
15 | border: 0;
16 | }
17 |
18 | // New mixin to use as of v3.0.1
19 | .text-hide() {
20 | .hide-text();
21 | }
22 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/image.less:
--------------------------------------------------------------------------------
1 | // Image Mixins
2 | // - Responsive image
3 | // - Retina image
4 |
5 |
6 | // Responsive image
7 | //
8 | // Keep images from scaling beyond the width of their parents.
9 | .img-responsive(@display: block) {
10 | display: @display;
11 | max-width: 100%; // Part 1: Set a maximum relative to the parent
12 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching
13 | }
14 |
15 |
16 | // Retina image
17 | //
18 | // Short retina mixin for setting background-image and -size. Note that the
19 | // spelling of `min--moz-device-pixel-ratio` is intentional.
20 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {
21 | background-image: url("@{file-1x}");
22 |
23 | @media
24 | only screen and (-webkit-min-device-pixel-ratio: 2),
25 | only screen and ( min--moz-device-pixel-ratio: 2),
26 | only screen and ( -o-min-device-pixel-ratio: 2/1),
27 | only screen and ( min-device-pixel-ratio: 2),
28 | only screen and ( min-resolution: 192dpi),
29 | only screen and ( min-resolution: 2dppx) {
30 | background-image: url("@{file-2x}");
31 | background-size: @width-1x @height-1x;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/labels.less:
--------------------------------------------------------------------------------
1 | // Labels
2 |
3 | .label-variant(@color) {
4 | background-color: @color;
5 |
6 | &[href] {
7 | &:hover,
8 | &:focus {
9 | background-color: darken(@color, 10%);
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/list-group.less:
--------------------------------------------------------------------------------
1 | // List Groups
2 |
3 | .list-group-item-variant(@state; @background; @color) {
4 | .list-group-item-@{state} {
5 | color: @color;
6 | background-color: @background;
7 |
8 | a&,
9 | button& {
10 | color: @color;
11 |
12 | .list-group-item-heading {
13 | color: inherit;
14 | }
15 |
16 | &:hover,
17 | &:focus {
18 | color: @color;
19 | background-color: darken(@background, 5%);
20 | }
21 | &.active,
22 | &.active:hover,
23 | &.active:focus {
24 | color: #fff;
25 | background-color: @color;
26 | border-color: @color;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/nav-divider.less:
--------------------------------------------------------------------------------
1 | // Horizontal dividers
2 | //
3 | // Dividers (basically an hr) within dropdowns and nav lists
4 |
5 | .nav-divider(@color: #e5e5e5) {
6 | height: 1px;
7 | margin: ((@line-height-computed / 2) - 1) 0;
8 | overflow: hidden;
9 | background-color: @color;
10 | }
11 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/nav-vertical-align.less:
--------------------------------------------------------------------------------
1 | // Navbar vertical align
2 | //
3 | // Vertically center elements in the navbar.
4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.
5 |
6 | .navbar-vertical-align(@element-height) {
7 | margin-top: ((@navbar-height - @element-height) / 2);
8 | margin-bottom: ((@navbar-height - @element-height) / 2);
9 | }
10 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/opacity.less:
--------------------------------------------------------------------------------
1 | // Opacity
2 |
3 | .opacity(@opacity) {
4 | opacity: @opacity;
5 | // IE8 filter
6 | @opacity-ie: (@opacity * 100);
7 | filter: ~"alpha(opacity=@{opacity-ie})";
8 | }
9 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/pagination.less:
--------------------------------------------------------------------------------
1 | // Pagination
2 |
3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
4 | > li {
5 | > a,
6 | > span {
7 | padding: @padding-vertical @padding-horizontal;
8 | font-size: @font-size;
9 | line-height: @line-height;
10 | }
11 | &:first-child {
12 | > a,
13 | > span {
14 | .border-left-radius(@border-radius);
15 | }
16 | }
17 | &:last-child {
18 | > a,
19 | > span {
20 | .border-right-radius(@border-radius);
21 | }
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/panels.less:
--------------------------------------------------------------------------------
1 | // Panels
2 |
3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {
4 | border-color: @border;
5 |
6 | & > .panel-heading {
7 | color: @heading-text-color;
8 | background-color: @heading-bg-color;
9 | border-color: @heading-border;
10 |
11 | + .panel-collapse > .panel-body {
12 | border-top-color: @border;
13 | }
14 | .badge {
15 | color: @heading-bg-color;
16 | background-color: @heading-text-color;
17 | }
18 | }
19 | & > .panel-footer {
20 | + .panel-collapse > .panel-body {
21 | border-bottom-color: @border;
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/progress-bar.less:
--------------------------------------------------------------------------------
1 | // Progress bars
2 |
3 | .progress-bar-variant(@color) {
4 | background-color: @color;
5 |
6 | // Deprecated parent class requirement as of v3.2.0
7 | .progress-striped & {
8 | #gradient > .striped();
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/reset-filter.less:
--------------------------------------------------------------------------------
1 | // Reset filters for IE
2 | //
3 | // When you need to remove a gradient background, do not forget to use this to reset
4 | // the IE filter for IE9 and below.
5 |
6 | .reset-filter() {
7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)"));
8 | }
9 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/reset-text.less:
--------------------------------------------------------------------------------
1 | .reset-text() {
2 | font-family: @font-family-base;
3 | // We deliberately do NOT reset font-size.
4 | font-style: normal;
5 | font-weight: normal;
6 | letter-spacing: normal;
7 | line-break: auto;
8 | line-height: @line-height-base;
9 | text-align: left; // Fallback for where `start` is not supported
10 | text-align: start;
11 | text-decoration: none;
12 | text-shadow: none;
13 | text-transform: none;
14 | white-space: normal;
15 | word-break: normal;
16 | word-spacing: normal;
17 | word-wrap: normal;
18 | }
19 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/resize.less:
--------------------------------------------------------------------------------
1 | // Resize anything
2 |
3 | .resizable(@direction) {
4 | resize: @direction; // Options: horizontal, vertical, both
5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible`
6 | }
7 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/responsive-visibility.less:
--------------------------------------------------------------------------------
1 | // Responsive utilities
2 |
3 | //
4 | // More easily include all the states for responsive-utilities.less.
5 | .responsive-visibility() {
6 | display: block !important;
7 | table& { display: table !important; }
8 | tr& { display: table-row !important; }
9 | th&,
10 | td& { display: table-cell !important; }
11 | }
12 |
13 | .responsive-invisibility() {
14 | display: none !important;
15 | }
16 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/size.less:
--------------------------------------------------------------------------------
1 | // Sizing shortcuts
2 |
3 | .size(@width; @height) {
4 | width: @width;
5 | height: @height;
6 | }
7 |
8 | .square(@size) {
9 | .size(@size; @size);
10 | }
11 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/tab-focus.less:
--------------------------------------------------------------------------------
1 | // WebKit-style focus
2 |
3 | .tab-focus() {
4 | // WebKit-specific. Other browsers will keep their default outline style.
5 | // (Initially tried to also force default via `outline: initial`,
6 | // but that seems to erroneously remove the outline in Firefox altogether.)
7 | outline: 5px auto -webkit-focus-ring-color;
8 | outline-offset: -2px;
9 | }
10 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/table-row.less:
--------------------------------------------------------------------------------
1 | // Tables
2 |
3 | .table-row-variant(@state; @background) {
4 | // Exact selectors below required to override `.table-striped` and prevent
5 | // inheritance to nested tables.
6 | .table > thead > tr,
7 | .table > tbody > tr,
8 | .table > tfoot > tr {
9 | > td.@{state},
10 | > th.@{state},
11 | &.@{state} > td,
12 | &.@{state} > th {
13 | background-color: @background;
14 | }
15 | }
16 |
17 | // Hover states for `.table-hover`
18 | // Note: this is not available for cells or rows within `thead` or `tfoot`.
19 | .table-hover > tbody > tr {
20 | > td.@{state}:hover,
21 | > th.@{state}:hover,
22 | &.@{state}:hover > td,
23 | &:hover > .@{state},
24 | &.@{state}:hover > th {
25 | background-color: darken(@background, 5%);
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/text-emphasis.less:
--------------------------------------------------------------------------------
1 | // Typography
2 |
3 | .text-emphasis-variant(@color) {
4 | color: @color;
5 | a&:hover,
6 | a&:focus {
7 | color: darken(@color, 10%);
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/mixins/text-overflow.less:
--------------------------------------------------------------------------------
1 | // Text overflow
2 | // Requires inline-block or block for proper styling
3 |
4 | .text-overflow() {
5 | overflow: hidden;
6 | text-overflow: ellipsis;
7 | white-space: nowrap;
8 | }
9 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/pager.less:
--------------------------------------------------------------------------------
1 | //
2 | // Pager pagination
3 | // --------------------------------------------------
4 |
5 |
6 | .pager {
7 | padding-left: 0;
8 | margin: @line-height-computed 0;
9 | list-style: none;
10 | text-align: center;
11 | &:extend(.clearfix all);
12 | li {
13 | display: inline;
14 | > a,
15 | > span {
16 | display: inline-block;
17 | padding: 5px 14px;
18 | background-color: @pager-bg;
19 | border: 1px solid @pager-border;
20 | border-radius: @pager-border-radius;
21 | }
22 |
23 | > a:hover,
24 | > a:focus {
25 | text-decoration: none;
26 | background-color: @pager-hover-bg;
27 | }
28 | }
29 |
30 | .next {
31 | > a,
32 | > span {
33 | float: right;
34 | }
35 | }
36 |
37 | .previous {
38 | > a,
39 | > span {
40 | float: left;
41 | }
42 | }
43 |
44 | .disabled {
45 | > a,
46 | > a:hover,
47 | > a:focus,
48 | > span {
49 | color: @pager-disabled-color;
50 | background-color: @pager-bg;
51 | cursor: @cursor-disabled;
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/responsive-embed.less:
--------------------------------------------------------------------------------
1 | // Embeds responsive
2 | //
3 | // Credit: Nicolas Gallagher and SUIT CSS.
4 |
5 | .embed-responsive {
6 | position: relative;
7 | display: block;
8 | height: 0;
9 | padding: 0;
10 | overflow: hidden;
11 |
12 | .embed-responsive-item,
13 | iframe,
14 | embed,
15 | object,
16 | video {
17 | position: absolute;
18 | top: 0;
19 | left: 0;
20 | bottom: 0;
21 | height: 100%;
22 | width: 100%;
23 | border: 0;
24 | }
25 | }
26 |
27 | // Modifier class for 16:9 aspect ratio
28 | .embed-responsive-16by9 {
29 | padding-bottom: 56.25%;
30 | }
31 |
32 | // Modifier class for 4:3 aspect ratio
33 | .embed-responsive-4by3 {
34 | padding-bottom: 75%;
35 | }
36 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/thumbnails.less:
--------------------------------------------------------------------------------
1 | //
2 | // Thumbnails
3 | // --------------------------------------------------
4 |
5 |
6 | // Mixin and adjust the regular image class
7 | .thumbnail {
8 | display: block;
9 | padding: @thumbnail-padding;
10 | margin-bottom: @line-height-computed;
11 | line-height: @line-height-base;
12 | background-color: @thumbnail-bg;
13 | border: 1px solid @thumbnail-border;
14 | border-radius: @thumbnail-border-radius;
15 | .transition(border .2s ease-in-out);
16 |
17 | > img,
18 | a > img {
19 | &:extend(.img-responsive);
20 | margin-left: auto;
21 | margin-right: auto;
22 | }
23 |
24 | // Add a hover state for linked versions only
25 | a&:hover,
26 | a&:focus,
27 | a&.active {
28 | border-color: @link-color;
29 | }
30 |
31 | // Image captions
32 | .caption {
33 | padding: @thumbnail-caption-padding;
34 | color: @thumbnail-caption-color;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/utilities.less:
--------------------------------------------------------------------------------
1 | //
2 | // Utility classes
3 | // --------------------------------------------------
4 |
5 |
6 | // Floats
7 | // -------------------------
8 |
9 | .clearfix {
10 | .clearfix();
11 | }
12 | .center-block {
13 | .center-block();
14 | }
15 | .pull-right {
16 | float: right !important;
17 | }
18 | .pull-left {
19 | float: left !important;
20 | }
21 |
22 |
23 | // Toggling content
24 | // -------------------------
25 |
26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1
27 | .hide {
28 | display: none !important;
29 | }
30 | .show {
31 | display: block !important;
32 | }
33 | .invisible {
34 | visibility: hidden;
35 | }
36 | .text-hide {
37 | .text-hide();
38 | }
39 |
40 |
41 | // Hide from screenreaders and browsers
42 | //
43 | // Credit: HTML5 Boilerplate
44 |
45 | .hidden {
46 | display: none !important;
47 | }
48 |
49 |
50 | // For Affix plugin
51 | // -------------------------
52 |
53 | .affix {
54 | position: fixed;
55 | }
56 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/less/wells.less:
--------------------------------------------------------------------------------
1 | //
2 | // Wells
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .well {
8 | min-height: 20px;
9 | padding: 19px;
10 | margin-bottom: 20px;
11 | background-color: @well-bg;
12 | border: 1px solid @well-border;
13 | border-radius: @border-radius-base;
14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));
15 | blockquote {
16 | border-color: #ddd;
17 | border-color: rgba(0,0,0,.15);
18 | }
19 | }
20 |
21 | // Sizes
22 | .well-lg {
23 | padding: 24px;
24 | border-radius: @border-radius-large;
25 | }
26 | .well-sm {
27 | padding: 9px;
28 | border-radius: @border-radius-small;
29 | }
30 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/nuget/MyGet.ps1:
--------------------------------------------------------------------------------
1 | $nuget = $env:NuGet
2 |
3 | # parse the version number out of package.json
4 | $bsversion = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version
5 |
6 | # create packages
7 | & $nuget pack "nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion
8 | & $nuget pack "nuget\bootstrap.less.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion
9 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/nuget/bootstrap.less.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | bootstrap.less
5 | 3.3.7
6 | Bootstrap Less
7 | Twitter, Inc.
8 | bootstrap
9 | The most popular front-end framework for developing responsive, mobile first projects on the web.
10 | http://blog.getbootstrap.com
11 | Bootstrap framework in Less. Includes fonts and JavaScript
12 | en-us
13 | http://getbootstrap.com
14 | http://getbootstrap.com/apple-touch-icon.png
15 | https://github.com/twbs/bootstrap/blob/master/LICENSE
16 | Copyright 2016
17 | false
18 |
19 |
20 |
21 | css js less mobile-first responsive front-end framework web
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/nuget/bootstrap.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | bootstrap
5 | 3.3.7
6 | Bootstrap CSS
7 | Twitter, Inc.
8 | bootstrap
9 | The most popular front-end framework for developing responsive, mobile first projects on the web.
10 | http://blog.getbootstrap.com
11 | Bootstrap framework in CSS. Includes fonts and JavaScript
12 | en-us
13 | http://getbootstrap.com
14 | http://getbootstrap.com/apple-touch-icon.png
15 | https://github.com/twbs/bootstrap/blob/master/LICENSE
16 | Copyright 2016
17 | false
18 |
19 |
20 |
21 | css js less mobile-first responsive front-end framework web
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/comport/static/libs/bootstrap/package.js:
--------------------------------------------------------------------------------
1 | // package metadata file for Meteor.js
2 |
3 | /* jshint strict:false */
4 | /* global Package:true */
5 |
6 | Package.describe({
7 | name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap
8 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
9 | version: '3.3.7',
10 | git: 'https://github.com/twbs/bootstrap.git'
11 | });
12 |
13 | Package.onUse(function (api) {
14 | api.versionsFrom('METEOR@1.0');
15 | api.use('jquery', 'client');
16 | var assets = [
17 | 'dist/fonts/glyphicons-halflings-regular.eot',
18 | 'dist/fonts/glyphicons-halflings-regular.svg',
19 | 'dist/fonts/glyphicons-halflings-regular.ttf',
20 | 'dist/fonts/glyphicons-halflings-regular.woff',
21 | 'dist/fonts/glyphicons-halflings-regular.woff2'
22 | ];
23 | if (api.addAssets) {
24 | api.addAssets(assets, 'client');
25 | } else {
26 | api.addFiles(assets, 'client', { isAsset: true });
27 | }
28 | api.addFiles([
29 | 'dist/css/bootstrap.css',
30 | 'dist/js/bootstrap.js'
31 | ], 'client');
32 | });
33 |
--------------------------------------------------------------------------------
/comport/static/libs/d3/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "d3",
3 | "description": "A JavaScript visualization library for HTML and SVG.",
4 | "main": "d3.js",
5 | "license": "BSD-3-Clause",
6 | "ignore": [],
7 | "homepage": "https://github.com/mbostock-bower/d3-bower",
8 | "version": "3.5.17",
9 | "_release": "3.5.17",
10 | "_resolution": {
11 | "type": "version",
12 | "tag": "v3.5.17",
13 | "commit": "abe0262a205c9f3755c3a757de4dfd1d49f34b24"
14 | },
15 | "_source": "https://github.com/mbostock-bower/d3-bower.git",
16 | "_target": "~3.5.6",
17 | "_originalSource": "d3"
18 | }
--------------------------------------------------------------------------------
/comport/static/libs/d3/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2010-2016, Michael Bostock
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | * The name Michael Bostock may not be used to endorse or promote products
15 | derived from this software without specific prior written permission.
16 |
17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 | DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
21 | INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
24 | OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26 | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 |
--------------------------------------------------------------------------------
/comport/static/libs/d3/README.md:
--------------------------------------------------------------------------------
1 | # Data-Driven Documents
2 |
3 |
4 |
5 | **D3.js** is a JavaScript library for manipulating documents based on data. **D3** helps you bring data to life using HTML, SVG, and CSS. **D3** emphasizes web standards and combines powerful visualization components with a data-driven approach to DOM manipulation, giving you the full capabilities of modern browsers without tying yourself to a proprietary framework.
6 |
7 | Want to learn more? [See the wiki.](https://github.com/mbostock/d3/wiki)
8 |
9 | For examples, [see the gallery](https://github.com/mbostock/d3/wiki/Gallery) and [mbostock’s bl.ocks](http://bl.ocks.org/mbostock).
10 |
11 | ## Good News, Everyone!
12 |
13 | The next major release of D3, 4.0, is coming! See the [4.0 development branch](https://github.com/mbostock/d3/tree/4) and read the [new API reference](https://github.com/mbostock/d3/blob/4/README.md) to get ready.
14 |
--------------------------------------------------------------------------------
/comport/static/libs/d3/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "d3",
3 | "description": "A JavaScript visualization library for HTML and SVG.",
4 | "main": "d3.js",
5 | "license": "BSD-3-Clause",
6 | "ignore": []
7 | }
8 |
--------------------------------------------------------------------------------
/comport/static/libs/font-awesome4/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/font-awesome4/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/comport/static/libs/font-awesome4/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/font-awesome4/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/comport/static/libs/font-awesome4/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/font-awesome4/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/comport/static/libs/font-awesome4/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/codeforamerica/comport/117123862415261095a917ed7f2037c1f986b474/comport/static/libs/font-awesome4/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/comport/static/libs/jQuery/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery",
3 | "main": "dist/jquery.js",
4 | "license": "MIT",
5 | "ignore": [
6 | "package.json"
7 | ],
8 | "keywords": [
9 | "jquery",
10 | "javascript",
11 | "browser",
12 | "library"
13 | ],
14 | "homepage": "https://github.com/jquery/jquery-dist",
15 | "version": "3.1.1",
16 | "_release": "3.1.1",
17 | "_resolution": {
18 | "type": "version",
19 | "tag": "3.1.1",
20 | "commit": "1b30f3ad466ebf2714d47eda34dbd7fdf6849fe3"
21 | },
22 | "_source": "https://github.com/jquery/jquery-dist.git",
23 | "_target": "1.9.1 - 3",
24 | "_originalSource": "jquery"
25 | }
--------------------------------------------------------------------------------
/comport/static/libs/jQuery/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery",
3 | "main": "dist/jquery.js",
4 | "license": "MIT",
5 | "ignore": [
6 | "package.json"
7 | ],
8 | "keywords": [
9 | "jquery",
10 | "javascript",
11 | "browser",
12 | "library"
13 | ]
14 | }
--------------------------------------------------------------------------------
/comport/static/libs/jQuery/src/ajax/parseXML.js:
--------------------------------------------------------------------------------
1 | define( [
2 | "../core"
3 | ], function( jQuery ) {
4 |
5 | "use strict";
6 |
7 | // Cross-browser xml parsing
8 | jQuery.parseXML = function( data ) {
9 | var xml;
10 | if ( !data || typeof data !== "string" ) {
11 | return null;
12 | }
13 |
14 | // Support: IE 9 - 11 only
15 | // IE throws on parseFromString with invalid input.
16 | try {
17 | xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
18 | } catch ( e ) {
19 | xml = undefined;
20 | }
21 |
22 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
23 | jQuery.error( "Invalid XML: " + data );
24 | }
25 | return xml;
26 | };
27 |
28 | return jQuery.parseXML;
29 |
30 | } );
31 |
--------------------------------------------------------------------------------
/comport/static/libs/jQuery/src/ajax/script.js:
--------------------------------------------------------------------------------
1 | define( [
2 | "../core",
3 | "../var/document",
4 | "../ajax"
5 | ], function( jQuery, document ) {
6 |
7 | "use strict";
8 |
9 | // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
10 | jQuery.ajaxPrefilter( function( s ) {
11 | if ( s.crossDomain ) {
12 | s.contents.script = false;
13 | }
14 | } );
15 |
16 | // Install script dataType
17 | jQuery.ajaxSetup( {
18 | accepts: {
19 | script: "text/javascript, application/javascript, " +
20 | "application/ecmascript, application/x-ecmascript"
21 | },
22 | contents: {
23 | script: /\b(?:java|ecma)script\b/
24 | },
25 | converters: {
26 | "text script": function( text ) {
27 | jQuery.globalEval( text );
28 | return text;
29 | }
30 | }
31 | } );
32 |
33 | // Handle cache's special case and crossDomain
34 | jQuery.ajaxPrefilter( "script", function( s ) {
35 | if ( s.cache === undefined ) {
36 | s.cache = false;
37 | }
38 | if ( s.crossDomain ) {
39 | s.type = "GET";
40 | }
41 | } );
42 |
43 | // Bind script tag hack transport
44 | jQuery.ajaxTransport( "script", function( s ) {
45 |
46 | // This transport only deals with cross domain requests
47 | if ( s.crossDomain ) {
48 | var script, callback;
49 | return {
50 | send: function( _, complete ) {
51 | script = jQuery( "