Skip to content

Commit a49c23b

Browse files
committedMay 18, 2021
initial commit
0 parents  commit a49c23b

26 files changed

+1711
-0
lines changed
 

‎bower.json

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "squad-explorer",
3+
"description": "",
4+
"main": "gulpfile.js",
5+
"authors": [
6+
"Pranav Rajpurkar"
7+
],
8+
"license": "ISC",
9+
"homepage": "https://github.com/rajpurkar/SQuAD-explorer",
10+
"private": true,
11+
"ignore": [
12+
"**/.*",
13+
"node_modules",
14+
"bower_components",
15+
"test",
16+
"tests"
17+
],
18+
"dependencies": {
19+
"bootstrap": "^3.3.7",
20+
"lato-webfont": "^1.1.2"
21+
}
22+
}

‎config/competition-config.yml

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Allows at most 5 submissions per user per period, where period is 24 hours by default.
2+
max_submissions_per_period: 5
3+
refresh_period_seconds: 1
4+
5+
# UUID of the worksheet where prediction and evaluation bundles are created for submissions.
6+
log_worksheet_uuid: '0x785a10980a2d4cb88c25840cb124456b'
7+
8+
# Configure the tag that participants use to submit to the competition.
9+
# In this example, any bundle with the tag `some-competition-submit` would be
10+
# considered as an official submission.
11+
submission_tag: dc-submit
12+
13+
# Configure how to mimic the submitted prediction bundles. When evaluating a submission,
14+
# `new` bundle will replace `old` bundle.
15+
# For a machine learning competition, `old` bundle might be the dev set and `new` bundle
16+
# might be the hidden test set.
17+
predict:
18+
mimic:
19+
- {new: '0xee7f0298b3f74d6b86167422e3d2eafe', old: '0x0f4f14bb6fe54cb08f3fd932a530aab4'}
20+
tag: dc-predict
21+
22+
# Configure how to evaluate the new prediction bundles.
23+
# In this example, evaluate.py is script that takes in the paths of the test labels and
24+
# predicted labels and outputs the evaluation results.
25+
evaluate:
26+
# Essentially
27+
# cl run evaluate.py:0x089063eb85b64b239b342405b5ebab57 \
28+
# test.json:0x5538cba32e524fad8b005cd19abb9f95 \
29+
# predictions.json:{predict}/predictions.json --- \
30+
# python evaluate.py test.json predictions.json
31+
# where {predict} gets filled in with the uuid of the mimicked bundle above.
32+
dependencies:
33+
- {child_path: evaluate.py, parent_uuid: '0x698a25b03b9e4aa7964c9e4f4a6c90b6'}
34+
- {child_path: data.json, parent_uuid: '0x1a0cf934fe7a498d99914e5f466e1a90'}
35+
- {child_path: predictions.json, parent_uuid: '{predict}'}
36+
command: python evaluate.py predictions.json data.json
37+
tag: dc-eval
38+
39+
# Define how to extract the scores from the evaluation bundle.
40+
# In this example, result.json is a JSON file outputted from the evaluation step
41+
# with F1 and exact match metrics (e.g. {"f1": 91, "exact_match": 92}).
42+
score_specs:
43+
- {key: '/result.json:accuracy', name: accuracy}
44+
# - {key: '/result.json:exact_match', name: exact_match}

‎gulpfile.js

+193
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
var pug = require('gulp-pug')
2+
var gulp = require('gulp')
3+
var rename = require('gulp-rename')
4+
var data = require('gulp-data')
5+
var connect = require('gulp-connect')
6+
var replace = require('gulp-replace')
7+
var ghPages = require('gulp-gh-pages')
8+
var bower = require('gulp-bower')
9+
var image = require('gulp-image')
10+
var stylus = require('gulp-stylus')
11+
var minify = require('gulp-minify')
12+
var path = require('path')
13+
var fs = require('fs')
14+
var cheerio = require('cheerio')
15+
16+
var build_dir = 'data-centric-comp/' // good to have this be the same as the repo name for gh-pages purposes
17+
18+
var rankEntries = function (entries) {
19+
entries.sort(function(a, b) {
20+
return b.acc- a.acc;
21+
})
22+
23+
for (var i = 0; i < entries.length; i++) {
24+
var entry = entries[i]
25+
if (i === 0) {
26+
entry.rank = 1
27+
} else {
28+
var prevEntry = entries[i - 1]
29+
var rank = prevEntry.rank
30+
if (entry.acc < prevEntry.acc) rank++
31+
entry.rank = rank
32+
}
33+
}
34+
return entries
35+
}
36+
37+
function assert (condition, message) {
38+
if (!condition) {
39+
throw message || 'Assertion failed'
40+
}
41+
}
42+
43+
var parseCompEntries = function (comp_file) {
44+
var leaderboard = require(comp_file).leaderboard
45+
var entries = []
46+
47+
for (var i = 0; i < leaderboard.length; i++) {
48+
try {
49+
var o_entry = leaderboard[i]
50+
var entry = {}
51+
entry.user = o_entry.submission.user_name
52+
53+
var description = o_entry.submission.description.trim()
54+
var regex_match = description.match(/(.*) ?\((.*)\)(.*)/);
55+
if (regex_match) {
56+
entry.model_name = regex_match[1].trim();
57+
entry.institution = regex_match[2].trim();
58+
if (regex_match[3].lastIndexOf('http') !== -1) {
59+
entry.link = regex_match[4].trim()
60+
}
61+
} else {
62+
entry.model_name = description.substr(0, description.lastIndexOf('(')).trim()
63+
var firstPart = description.substr(description.lastIndexOf('(') + 1)
64+
entry.institution = firstPart.substr(0, firstPart.lastIndexOf(')'))
65+
if (description.lastIndexOf('http') !== -1) {
66+
entry.link = description.substr(description.lastIndexOf('http')).trim()
67+
}
68+
}
69+
70+
entry.date = o_entry.submission.created
71+
entry.acc = parseFloat(o_entry.scores.accuracy)
72+
73+
if (entry.model_name !== '' && Number(entry.acc) == entry.acc) {
74+
entries.push(entry);
75+
}
76+
} catch (err) {
77+
console.error(err)
78+
console.error(entry)
79+
}
80+
}
81+
entries = rankEntries(entries)
82+
return entries
83+
}
84+
85+
var parseEntries = function (htmlStr) {
86+
var $ = cheerio.load(htmlStr)
87+
var parent = $('h1#leaderboard').closest('.ws-item').next()
88+
var entries = []
89+
$(parent).find('tbody > tr').each(function () {
90+
var entry = {}
91+
var cells = $(this).find('td')
92+
entry.description = cells.eq(1).text().trim()
93+
entry.model_name = entry.description.substr(0, entry.description.lastIndexOf('(')).trim()
94+
var firstPart = entry.description.substr(entry.description.lastIndexOf('(') + 1)
95+
entry.institution = firstPart.substr(0, firstPart.lastIndexOf(')'))
96+
var httpPos = entry.description.lastIndexOf('http')
97+
if (httpPos !== -1) {
98+
entry.link = entry.description.substr(entry.description.lastIndexOf('http')).trim()
99+
}
100+
delete entry.description
101+
entry.acc = parseFloat(cells.eq(4).text())
102+
entry.date = cells.eq(2).text().trim()
103+
entries.push(entry)
104+
})
105+
entries = rankEntries(entries)
106+
return entries
107+
}
108+
109+
gulp.task('bower', function () {
110+
return bower()
111+
.pipe(gulp.dest('./' + build_dir + 'bower_components/'))
112+
})
113+
114+
gulp.task('image', function () {
115+
return gulp.src('./views/images/*')
116+
.pipe(image())
117+
.pipe(gulp.dest('./' + build_dir))
118+
})
119+
120+
gulp.task('scrape_website', function (cb) {
121+
var Nightmare = require('nightmare')
122+
var fs = require('fs')
123+
var parse
124+
var nightmare = new Nightmare({
125+
switches: {
126+
'ignore-certificate-errors': true
127+
}
128+
})
129+
nightmare.goto('https://worksheets.codalab.org/worksheets/0x62eefc3e64e04430a1a24785a9293fff/')
130+
.wait(2000)
131+
.evaluate(function () {
132+
return document.body.innerHTML
133+
})
134+
.end()
135+
.then(function (result) {
136+
var jsonfile = require('jsonfile')
137+
var after = parseEntries(result)
138+
jsonfile.writeFile('./test.json', after, cb)
139+
})
140+
})
141+
142+
gulp.task('connect', function () {
143+
connect.server({
144+
host: '0.0.0.0',
145+
root: '.'
146+
})
147+
})
148+
149+
var dataset_folder = './dataset/'
150+
var filepaths = [
151+
dataset_folder + 'dev-v1.1.json',
152+
]
153+
154+
var exploration_tasks = []
155+
156+
gulp.task('process_comp_output', function (cb) {
157+
var jsonfile = require('jsonfile')
158+
var entries1 = parseCompEntries('./leaderboard.json')
159+
jsonfile.writeFile('./results.json', entries1, cb)
160+
})
161+
162+
gulp.task('generate_index', ['process_comp_output'], function () {
163+
var test = require('./results.json')
164+
var moment = require('moment')
165+
return gulp.src('views/index.pug')
166+
.pipe(data(function () {
167+
return { 'test': test,
168+
'moment': moment}
169+
}))
170+
.pipe(pug())
171+
.pipe(gulp.dest('./' + build_dir))
172+
})
173+
174+
gulp.task('correct_link_paths', ['generate'], function () {
175+
return gulp.src('./' + build_dir + '**/*.html')
176+
.pipe(replace(/([^-](?:href|src)=[\'\"]\/)([^\'\"]*)([\'\"])/g, '$1' + build_dir + '$2$3'))
177+
.pipe(gulp.dest('./' + build_dir))
178+
})
179+
180+
gulp.task('css', function () {
181+
return gulp.src('./views/styles/*.styl')
182+
.pipe(stylus())
183+
.pipe(gulp.dest('./' + build_dir + 'stylesheets'))
184+
})
185+
186+
gulp.task('deploy', function () {
187+
return gulp.src('./' + build_dir + '**/*')
188+
.pipe(ghPages())
189+
})
190+
191+
gulp.task('generate_exploration', exploration_tasks)
192+
gulp.task('generate', ['bower', 'generate_exploration', 'generate_index', 'process_comp_output'])
193+
gulp.task('default', ['generate', 'correct_link_paths', 'image', 'css'])

‎leaderboard.json

+800
Large diffs are not rendered by default.

‎package.json

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"name": "squad-explorer",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "gulpfile.js",
6+
"dependencies": {
7+
"cheerio": "^0.22.0",
8+
"gulp": "^3.9.1",
9+
"gulp-bower": "^0.0.13",
10+
"gulp-connect": "^5.0.0",
11+
"gulp-data": "^1.2.1",
12+
"gulp-gh-pages": "^0.5.4",
13+
"gulp-image": "^2.5.0",
14+
"gulp-minify": "0.0.14",
15+
"gulp-pug": "^3.0.4",
16+
"gulp-rename": "^1.2.2",
17+
"gulp-replace": "^0.5.4",
18+
"gulp-stylus": "^2.5.0",
19+
"jsonfile": "^2.4.0",
20+
"moment": "^2.17.1",
21+
"nightmare": "^2.9.1"
22+
},
23+
"devDependencies": {},
24+
"scripts": {
25+
"test": "echo \"Error: no test specified\" && exit 1"
26+
},
27+
"repository": {
28+
"type": "git",
29+
"url": "git+https://github.com/rajpurkar/SQuAD-explorer.git"
30+
},
31+
"author": "Pranav Rajpurkar",
32+
"license": "ISC",
33+
"bugs": {
34+
"url": "https://github.com/rajpurkar/SQuAD-explorer/issues"
35+
},
36+
"homepage": "https://github.com/rajpurkar/SQuAD-explorer#readme"
37+
}

‎setup.sh

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
conda activate py36
2+
nvm use 11

‎update.sh

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
gulp
2+
gulp deploy

‎views/includes/github.pug

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<!-- Place this tag where you want the button to render. -->
2+
<a class="github-button" href="https://github.com/landing-ai/data-centric-comp" data-icon="octicon-star" data-style="mega" data-count-href="/landing-ai/data-centric-comp/stargazers" data-count-api="/repos/landing-ai/data-centric-comp#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star landing-ai/data-centric-comp on GitHub">Star</a>

‎views/includes/mailchimp.pug

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#mc_embed_signup
2+
form#mc-embedded-subscribe-form.validate(action='//google.us13.list-manage.com/subscribe/post?u=1842e6560d6e10316b4e1aaf5&id=76586bdcf4', method='post', name='mc-embedded-subscribe-form', target='_blank', novalidate='')
3+
#mc_embed_signup_scroll
4+
input#mce-EMAIL.email(type='email', value='', name='EMAIL', placeholder='email address', required='')
5+
div(style='position: absolute; left: -5000px;', aria-hidden='true')
6+
input(type='text', name='b_1842e6560d6e10316b4e1aaf5_76586bdcf4', tabindex='-1', value='')
7+
.clear
8+
input#mc-embedded-subscribe.button(type='submit', value='Subscribe', name='subscribe')

‎views/includes/topCover.pug

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.cover#topCover
2+
.container
3+
.row
4+
.col-md-12
5+
h1#appTitle Data-Centric Competition
6+
h2#appSubtitle The Data-Centric Competition

‎views/index.pug

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
extends layout
2+
3+
block title
4+
title Data-Centric ML Competition
5+
6+
block description
7+
meta(name='description', content='placeholder')
8+
9+
block extralinks
10+
link(rel='stylesheet', href='/stylesheets/index.css')
11+
script(async defer src="https://buttons.github.io/buttons.js")
12+
13+
block extrascripts
14+
15+
mixin model_display(group, is_test)
16+
table.table.performanceTable
17+
tr
18+
if is_test
19+
th Rank
20+
th Model
21+
th Accuracy
22+
- var largest_acc = Math.max.apply(null, group.map(function (model) { return model.acc; }))
23+
each model in group
24+
tr
25+
if is_test
26+
td
27+
p #{model.rank}
28+
span.date.label.label-default #{moment.unix(model.date).format('MMM DD, YYYY')}
29+
td(style="word-break:break-word;")
30+
| #{model.model_name}
31+
p.institution #{model.institution}
32+
if model.link
33+
a.link(href=model.link) #{model.link}
34+
td
35+
if model.acc == largest_acc
36+
b #{model.acc.toPrecision(5)}
37+
else
38+
| #{model.acc.toPrecision(5)}
39+
40+
block content
41+
.cover#contentCover
42+
.container
43+
.row
44+
.col-md-5
45+
.infoCard
46+
.infoBody
47+
.infoHeadline
48+
h2 What is Data-Centric ML?
49+
p
50+
span
51+
| Here at Landing AI we heavily utilize data-centric approaches to improve the performance of our machine learning models. These include techniques such as fixing incorrect labels or ambiguous labels, adding data for side cases tuning , adding data augmentation techniques, etc. We have seen this data centric approach used widely across AI problems in industry yet scarcely examined in academics, so we created this competition to compare and improve data-centric approaches to improving machine learning model performance.
52+
p
53+
.infoHeadline
54+
h2 Getting Started
55+
p
56+
| Here's a few resources to help you get started with the data-centric competition
57+
p
58+
| Download a copy of the dataset and labels
59+
ul.list-unstyled
60+
li
61+
a.btn.actionBtn.inverseBtn(href="https://worksheets.codalab.org/bundles/0x673a2d87f692439a9ab6b4603e9fcc35", download)
62+
| Dataset
63+
li
64+
a.btn.actionBtn.inverseBtn(href="https://worksheets.codalab.org/bundles/0xdd93233952fc4997a07638776e1cd072", download)
65+
| Labels
66+
67+
p To evaluate your dataset we have also made available the prediction/evaluation script we will use for official evaluation
68+
ul.list-unstyled
69+
li
70+
a.btn.actionBtn.inverseBtn(href="https://worksheets.codalab.org/bundles/0x6bdf9e3299904351ad6eecc9c7f9567d/contents/blob/", download)
71+
| Prediction Script
72+
p Once you built a dataset that you like, you can submit it to get official scores on dev and hidden test set.
73+
a.btn.actionBtn.inverseBtn(href="https://worksheets.codalab.org/worksheets/0x7a8721f11e61436e93ac8f76da83f0e6/")
74+
| Submission Tutorial
75+
.infoHeadline
76+
h2 Have Questions?
77+
p
78+
| Ask us questions at
79+
a(href="mailto:dillon@landing.ai") dillon@landing.ai
80+
| and
81+
a(href="mailto:lynn.he@deeplearning.ai") lynn.he@deeplearning.ai
82+
| .
83+
.infoSubheadline
84+
include includes/github
85+
.col-md-7
86+
.infoCard
87+
.infoBody
88+
.infoHeadline
89+
h2 Leaderboard
90+
+model_display(test, true)

‎views/layout.pug

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
doctype html
2+
//Author: Pranav Rajpurkar 2016
3+
html
4+
head
5+
meta(charset='utf-8')
6+
block title
7+
block description
8+
meta(http-equiv='X-UA-Compatible', content='IE=edge,chrome=1')
9+
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
10+
link(rel="stylesheet", href="/bower_components/bootstrap/dist/css/bootstrap.min.css")
11+
link(rel="stylesheet", href="/stylesheets/layout.css")
12+
block extralinks
13+
script(src="/javascripts/analytics.js")
14+
body
15+
include includes/topCover
16+
block content
17+
script(src="/bower_components/jquery/dist/jquery.min.js")
18+
script(src="/bower_components/bootstrap/dist/js/bootstrap.min.js")
19+
block extrascripts

‎views/styles/app/mailchimp.styl

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/* MailChimp Form Embed Code - Horizontal Super Slim - 12/16/2015 v10.7
2+
Adapted from: http://blog.heyimcat.com/universal-signup-form/ */
3+
4+
#mc_embed_signup form {text-align:center; padding:10px 0 10px 0;}
5+
.mc-field-group { display: inline-block; } /* positions input field horizontally */
6+
#mc_embed_signup input.email {font-family:"Open Sans","Helvetica Neue",Arial,Helvetica,Verdana,sans-serif; font-size: 15px; border: 1px solid #ABB0B2; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; color: #343434; background-color: #fff; box-sizing:border-box; height:32px; padding: 0px 0.4em; display: inline-block; margin: 0; width:350px; vertical-align:top;}
7+
#mc_embed_signup label {display:block; font-size:16px; padding-bottom:10px; font-weight:bold;}
8+
#mc_embed_signup .clear {display: inline-block;} /* positions button horizontally in line with input */
9+
#mc_embed_signup .button {font-size: 13px; border: none; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; letter-spacing: .03em; color: #fff; background-color: #aaa; box-sizing:border-box; height:32px; line-height:32px; padding:0 18px; display: inline-block; margin: 0; transition: all 0.23s ease-in-out 0s;}
10+
#mc_embed_signup .button:hover {background-color:#777; cursor:pointer;}
11+
#mc_embed_signup div#mce-responses {float:left; top:-1.4em; padding:0em .5em 0em .5em; overflow:hidden; width:90%;margin: 0 5%; clear: both;}
12+
#mc_embed_signup div.response {margin:1em 0; padding:1em .5em .5em 0; font-weight:bold; float:left; top:-1.5em; z-index:1; width:80%;}
13+
#mc_embed_signup #mce-error-response {display:none;}
14+
#mc_embed_signup #mce-success-response {color:#529214; display:none;}
15+
#mc_embed_signup label.error {display:block; float:none; width:auto; margin-left:1.05em; text-align:left; padding:.5em 0;}
16+
@media (max-width: 768px) {
17+
#mc_embed_signup input.email {width:100%; margin-bottom:5px;}
18+
#mc_embed_signup .clear {display: block; width: 100% }
19+
#mc_embed_signup .button {width: 100%; margin:0; }
20+
}
21+
22+
#mc_embed_signup
23+
background #fff
24+
clear left
25+
font 14px 'Lato' ,Arial, sans-serif
26+
width 100%
27+
28+
@media (min-width: 768px)
29+
#mc_embed_signup
30+
input.email
31+
width inherit

‎views/styles/app/passage.styl

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
pre
2+
white-space pre-wrap
3+
word-break normal
4+
font-weight 400
5+
background-color: #FFF
6+
line-height 1.5em
7+
font-size 1em
8+
border 2px solid $theme-color
9+
color #555

‎views/styles/app/qa.styl

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.qa-wrap
2+
padding 10px 10px
3+
margin 5px 0px
4+
cursor pointer
5+
border 1px solid #f5f5f5
6+
.qa-wrap:hover
7+
background-color #f5f5f5

‎views/styles/index.styl

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
@require 'layout/theme'
2+
@require 'app/passage'
3+
@require 'app/qa'
4+
@require 'app/mailchimp'
5+
6+
#contentCover
7+
.performanceTable
8+
margin 10px 0px
9+
.institution
10+
font-style italic
11+
font-weight 300
12+
.date
13+
font-weight normal
14+
tr.human-row
15+
background: whitesmoke
16+
td, th
17+
text-align center
18+
max-width 250px
19+
ul.list-inline
20+
margin-left 0px
21+
text-align center
22+
li
23+
padding-left 2px
24+
padding-right 2px

‎views/styles/layout.styl

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
@require 'vendor/lato'
2+
@require 'layout/theme'
3+
@require 'layout/errorMessage'
4+
@require 'layout/cover'
5+
@require 'layout/infoCard'
6+
@require 'layout/button'
7+
@require 'layout/nav'
8+
@require 'layout/topCover'
9+
@require 'layout/footer'
10+
11+
html,
12+
body
13+
width 100%
14+
height 100%
15+
16+
body
17+
padding-top: 50px
18+
letter-spacing 0.005em
19+
20+
body, h1, h2, h3, h4, h5, p, li, a, span, pre
21+
font-family 'Lato', Arial, sans-serif
22+
font-weight 400
23+
24+
p
25+
margin 0px
26+
27+
body
28+
background-color white
29+
30+
a
31+
color $theme-color
32+
33+
a:hover, a:active, a:focus
34+
text-decoration none !important
35+
color $theme-color-dark
36+
37+
ul
38+
margin 0px
39+
40+
hr
41+
margin 20px auto
42+
43+
@media(max-width: 768px)
44+
.pad-side
45+
padding 0px 10px
46+
47+
@media(max-width: 768px)
48+
[class*='col-']
49+
padding 0px 0px

‎views/styles/layout/button.styl

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
.actionBtn:hover
2+
background-color $theme-color-dark
3+
border-color $theme-color-dark
4+
5+
.actionBtn
6+
display block
7+
margin 10px auto
8+
max-width 350px
9+
width 100%
10+
background-color $theme-color
11+
color #fff !important
12+
text-align center
13+
font-size 1.0em
14+
font-weight 600
15+
border 2px solid $theme-color
16+
border-radius 20px
17+
transition all .5s
18+
white-space normal
19+
20+
.inverseBtn
21+
background-color white
22+
color $theme-color !important
23+
.inverseBtn:hover
24+
color white !important
25+
26+
.optionsBtn
27+
background-color $secondary-color !important
28+
.optionsBtn:hover
29+
opacity 0.9
30+
31+
button:focus
32+
outline: none !important

‎views/styles/layout/cover.styl

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
.cover
2+
min-height 100%
3+
background #eee
4+
background-position center
5+
background-size cover
6+
position relative
7+
width 100%
8+
padding 30px 0px
9+
@media(max-width: 768px)
10+
padding 0px
11+
.headlinesWrap
12+
padding-bottom 10px
13+
h1
14+
font-weight 600
15+
margin 8px 0px
16+
font-size 2em
17+
h2
18+
font-weight 300
19+
font-size 1.3em
20+
margin 8px 0px
21+
p
22+
font-size 1.1em
23+
font-weight 400
24+
.vertical-center
25+
min-height 100%
26+
min-height 100vh
27+
display -webkit-box
28+
display -moz-box
29+
display -ms-flexbox
30+
display -webkit-flex
31+
display flex
32+
-webkit-box-align center
33+
-webkit-align-items center
34+
-moz-box-align center
35+
-ms-flex-align center
36+
align-items center
37+
width 100%
38+
-webkit-box-pack center
39+
-moz-box-pack center
40+
-ms-flex-pack center
41+
-webkit-justify-content center
42+
justify-content center

‎views/styles/layout/errorMessage.styl

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
.alert
2+
color white
3+
background-color: $theme-color-light
4+
font-weight 600
5+
padding 10px
6+
border none
7+
border-radius 0px
8+
margin-bottom 0px
9+
10+
.alert-dismissible
11+
.close
12+
position static

‎views/styles/layout/footer.styl

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
.footer
2+
background-color $theme-gray
3+
border none
4+
border-radius 0px
5+
margin-bottom 0px
6+
padding 3px 0px
7+
height auto
8+
ul
9+
li
10+
a
11+
font-size 1em
12+
color #fff !important
13+
a:hover
14+
color #eee !important
15+
@media(min-width:768px)
16+
.rightNav
17+
float right

‎views/styles/layout/infoCard.styl

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
.infoCard
2+
background white
3+
@media(min-width: 768px)
4+
box-shadow: 0px 0px 20px 2px rgba(120,120,120,0.1)
5+
margin-bottom 20px
6+
.infoSubheadline
7+
background #f3f3f3
8+
padding 20px 30px
9+
h1, h2, p
10+
color #888
11+
h1
12+
font-weight 500
13+
h2, p
14+
font-weight 400
15+
.infoSubheadline.backgrounded
16+
background: $theme-color-light
17+
h1, h2, p
18+
color #fff
19+
.actLink
20+
background $theme-color-light
21+
h1, h2, p, a
22+
color white
23+
.actLink:hover
24+
opacity 0.9
25+
.infoBody
26+
padding 30px
27+
>.infoHeadline
28+
margin 15px 0px
29+
h1, h2, p
30+
margin 5px 0px
31+
font-weight 600
32+
color #333
33+
h1
34+
font-size 1.8em
35+
h2
36+
font-size 1.4em
37+
padding-bottom 2px
38+
border-bottom 2px solid #ddd
39+
h2
40+
font-weight 600
41+
color #666
42+
font-size 1.6em

‎views/styles/layout/nav.styl

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
@media(max-width:768px)
2+
#topNavbar
3+
position static
4+
body
5+
padding-top 0px !important
6+
7+
#topNavbar
8+
border none
9+
background $theme-color-dark
10+
margin-bottom 0px
11+
12+
// idea from http://stackoverflow.com/questions/5540485/how-to-make-an-inline-block-element-fill-the-remainder-of-the-line
13+
.leftNav
14+
overflow visible
15+
padding 0px
16+
padding-right 10px
17+
18+
.brandDiv
19+
float: left;
20+
line-height 100%
21+
22+
.navbar-brand
23+
color #fff
24+
25+
#navbar
26+
border none
27+
28+
.navBtn
29+
line-height: 20px
30+
background none
31+
border none
32+
position: relative
33+
display: block
34+
padding: 10px 15px
35+
font-weight 400
36+
color white
37+
38+
.navbar-toggle
39+
line-height 30px
40+
margin 9px 0px
41+
border 0px
42+
color white
43+
padding 1px 4px
44+
margin-left 5px
45+
46+
#navContainer
47+
padding-left 0px
48+
49+
.navbar-right
50+
a, a:hover
51+
color #fff !important
52+
53+
.navbar-toggle:focus
54+
background none
55+
56+
@media(max-width:768px)
57+
#brand
58+
font-size 1.2em
59+
60+
@media(min-width:768px)
61+
.rightNav
62+
float right
63+
.navBtn
64+
padding-top: 15px
65+
padding-bottom: 15px

‎views/styles/layout/theme.styl

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
$theme-color=#6e54da
2+
$theme-color-dark=#463494
3+
$theme-color-light=#8970ef
4+
//$theme-color=#ea4141
5+
//$theme-color-dark=#cc4242
6+
//$theme-color-light=#ea4141
7+
$secondary-color=#29BB43
8+
$theme-gray=#333
9+
$theme-light-gray=#f4f4f4

‎views/styles/layout/topCover.styl

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#topCover
2+
background $theme-color
3+
box-shadow: 0px -10px 20px 2px rgba(120,120,120,0.2) inset
4+
min-height initial
5+
#appTitle
6+
color white
7+
font-size 7.3em
8+
margin 0px
9+
padding 0px
10+
font-weight 100
11+
text-align center
12+
b
13+
font-weight 400
14+
#appSubtitle
15+
color white
16+
font-size 2em
17+
margin 0px
18+
padding 0px
19+
text-align center
20+
margin-bottom 20px
21+
@media(max-width: 768px)
22+
#appTitle
23+
font-size 6em

‎views/styles/vendor/lato.styl

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
@font-face
2+
font-family 'Lato'
3+
src url("/bower_components/lato-webfont/fonts/lato-hairline.eot")
4+
src url("/bower_components/lato-webfont/fonts/lato-hairline.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-hairline.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-hairline.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-hairline.ttf") format("truetype")
5+
font-weight 100
6+
font-style normal
7+
@font-face
8+
font-family 'Lato'
9+
src url("/bower_components/lato-webfont/fonts/lato-hairlineitalic.eot")
10+
src url("/bower_components/lato-webfont/fonts/lato-hairlineitalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-hairlineitalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-hairlineitalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-hairlineitalic.ttf") format("truetype")
11+
font-weight 100
12+
font-style italic
13+
14+
@font-face
15+
font-family 'Lato'
16+
src url("/bower_components/lato-webfont/fonts/lato-thin.eot")
17+
src url("/bower_components/lato-webfont/fonts/lato-thin.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-thin.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-thin.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-thin.ttf") format("truetype")
18+
font-weight 200
19+
font-style normal
20+
21+
@font-face
22+
font-family 'Lato'
23+
src url("/bower_components/lato-webfont/fonts/lato-thinitalic.eot")
24+
src url("/bower_components/lato-webfont/fonts/lato-thinitalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-thinitalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-thinitalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-thinitalic.ttf") format("truetype")
25+
font-weight 200
26+
font-style italic
27+
28+
@font-face
29+
font-family 'Lato'
30+
src url("/bower_components/lato-webfont/fonts/lato-light.eot")
31+
src url("/bower_components/lato-webfont/fonts/lato-light.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-light.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-light.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-light.ttf") format("truetype")
32+
font-weight 300
33+
font-style normal
34+
35+
@font-face
36+
font-family 'Lato'
37+
src url("/bower_components/lato-webfont/fonts/lato-lightitalic.eot")
38+
src url("/bower_components/lato-webfont/fonts/lato-lightitalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-lightitalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-lightitalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-lightitalic.ttf") format("truetype")
39+
font-weight 300
40+
font-style italic
41+
42+
@font-face
43+
font-family 'Lato'
44+
src url("/bower_components/lato-webfont/fonts/lato-regular.eot")
45+
src url("/bower_components/lato-webfont/fonts/lato-regular.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-regular.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-regular.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-regular.ttf") format("truetype")
46+
font-weight 400
47+
font-style normal
48+
49+
@font-face
50+
font-family 'Lato'
51+
src url("/bower_components/lato-webfont/fonts/lato-italic.eot")
52+
src url("/bower_components/lato-webfont/fonts/lato-italic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-italic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-italic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-italic.ttf") format("truetype")
53+
font-weight 400
54+
font-style italic
55+
56+
@font-face
57+
font-family 'Lato'
58+
src url("/bower_components/lato-webfont/fonts/lato-medium.eot")
59+
src url("/bower_components/lato-webfont/fonts/lato-medium.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-medium.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-medium.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-medium.ttf") format("truetype")
60+
font-weight 500
61+
font-style normal
62+
63+
@font-face
64+
font-family 'Lato'
65+
src url("/bower_components/lato-webfont/fonts/lato-mediumitalic.eot")
66+
src url("/bower_components/lato-webfont/fonts/lato-mediumitalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-mediumitalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-mediumitalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-mediumitalic.ttf") format("truetype")
67+
font-weight 500
68+
font-style italic
69+
70+
@font-face
71+
font-family 'Lato'
72+
src url("/bower_components/lato-webfont/fonts/lato-semibold.eot")
73+
src url("/bower_components/lato-webfont/fonts/lato-semibold.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-semibold.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-semibold.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-semibold.ttf") format("truetype")
74+
font-weight 600
75+
font-style normal
76+
77+
@font-face
78+
font-family 'Lato'
79+
src url("/bower_components/lato-webfont/fonts/lato-semibolditalic.eot")
80+
src url("/bower_components/lato-webfont/fonts/lato-semibolditalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-semibolditalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-semibolditalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-semibolditalic.ttf") format("truetype")
81+
font-weight 600
82+
font-style italic
83+
84+
@font-face
85+
font-family 'Lato'
86+
src url("/bower_components/lato-webfont/fonts/lato-bold.eot")
87+
src url("/bower_components/lato-webfont/fonts/lato-bold.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-bold.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-bold.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-bold.ttf") format("truetype")
88+
font-weight 700
89+
font-style normal
90+
91+
@font-face
92+
font-family 'Lato'
93+
src url("/bower_components/lato-webfont/fonts/lato-bolditalic.eot")
94+
src url("/bower_components/lato-webfont/fonts/lato-bolditalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-bolditalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-bolditalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-bolditalic.ttf") format("truetype")
95+
font-weight 700
96+
font-style italic
97+
98+
@font-face
99+
font-family 'Lato'
100+
src url("/bower_components/lato-webfont/fonts/lato-heavy.eot")
101+
src url("/bower_components/lato-webfont/fonts/lato-heavy.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-heavy.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-heavy.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-heavy.ttf") format("truetype")
102+
font-weight 800
103+
font-style normal
104+
105+
@font-face
106+
font-family 'Lato'
107+
src url("/bower_components/lato-webfont/fonts/lato-heavyitalic.eot")
108+
src url("//fonts/lato-heavyitalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-heavyitalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-heavyitalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-heavyitalic.ttf") format("truetype")
109+
font-weight 800
110+
font-style italic
111+
112+
@font-face
113+
font-family 'Lato'
114+
src url("/bower_components/lato-webfont/fonts/lato-black.eot")
115+
src url("/bower_components/lato-webfont/fonts/lato-black.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-black.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-black.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-black.ttf") format("truetype")
116+
font-weight 900
117+
font-style normal
118+
119+
@font-face
120+
font-family 'Lato'
121+
src url("/bower_components/lato-webfont/fonts/lato-blackitalic.eot")
122+
src url("/bower_components/lato-webfont/fonts/lato-blackitalic.eot?#iefix") format("embedded-opentype"), url("/bower_components/lato-webfont/fonts/lato-blackitalic.woff2") format("woff2"), url("/bower_components/lato-webfont/fonts/lato-blackitalic.woff") format("woff"), url("/bower_components/lato-webfont/fonts/lato-blackitalic.ttf") format("truetype")
123+
font-weight 900
124+
font-style italic

0 commit comments

Comments
 (0)
Please sign in to comment.