├── src ├── assets │ └── .placeholder ├── data │ ├── .placeholder │ └── graphic.csv ├── js │ ├── config.js │ ├── detectFeatures.js │ ├── utils.js │ ├── share.js │ ├── fm.js │ ├── geomath.js │ ├── libs │ │ └── frameMessager.min.js │ └── thing.js ├── fonts │ ├── qz-icons.eot │ ├── qz-icons.ttf │ ├── qz-icons.woff │ ├── Calibre-Medium.otf │ ├── PTSerif │ │ ├── PTF55F.ttf │ │ ├── PTF56F.ttf │ │ ├── PTF55F-webfont.eot │ │ ├── PTF55F-webfont.ttf │ │ ├── PTF55F-webfont.woff │ │ ├── Paratype PT Sans Free Font License.txt │ │ └── PTF55F-webfont.svg │ ├── PT_Serif-Web-Bold.ttf │ ├── AdelleSansWeb │ │ ├── AdelleSans_Light.otf │ │ ├── AdelleSansBasic_Bold.eot │ │ ├── AdelleSansBasic_Bold.ttf │ │ ├── AdelleSansBasic_Bold.woff │ │ ├── AdelleSansBasic_Light.eot │ │ ├── AdelleSansBasic_Light.ttf │ │ ├── AdelleSansBasic_Light.woff │ │ ├── AdelleSansBasic_Regular.eot │ │ ├── AdelleSansBasic_Regular.ttf │ │ └── AdelleSansBasic_Regular.woff │ ├── qz-icons.svg │ └── qz-icons.json ├── jade │ ├── thing.jade │ ├── includes │ │ └── share.jade │ └── index.jade ├── styl │ ├── qz │ │ ├── buttons.styl │ │ ├── share.styl │ │ ├── colors.styl │ │ ├── dropdowns.styl │ │ ├── icons.styl │ │ ├── chart-elements.styl │ │ └── type.styl │ ├── main.styl │ ├── layout.styl │ ├── thing.styl │ ├── responsive.styl │ └── normalize.styl └── style ├── README.md ├── requirements.txt ├── .gitignore ├── data └── al142016_best_track │ ├── simplified.dbf │ ├── simplified.shp │ ├── simplified.shx │ ├── al142016_lin.dbf │ ├── al142016_lin.shp │ ├── al142016_lin.shx │ ├── al142016_pts.dbf │ ├── al142016_pts.shp │ ├── al142016_pts.shx │ ├── al142016_radii.dbf │ ├── al142016_radii.shp │ ├── al142016_radii.shx │ ├── al142016_radii.shp.xml │ ├── al142016_windswath.dbf │ ├── al142016_windswath.shp │ ├── al142016_windswath.shx │ ├── al142016_lin.prj │ ├── al142016_pts.prj │ ├── al142016_radii.prj │ ├── simplified.prj │ ├── simplified.qpj │ ├── al142016_windswath.prj │ ├── al142016_lin.shp.xml │ ├── al142016_windswath.shp.xml │ └── al142016_pts.shp.xml ├── gulp ├── cli.js ├── utils.js └── config.js ├── content.json ├── __build.sh ├── package.json ├── geodata.yml ├── prove.py ├── gulpfile.js └── tracks.csv /src/assets/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/data/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # hurricane-matthew 2 | -------------------------------------------------------------------------------- /src/js/config.js: -------------------------------------------------------------------------------- 1 | var ENV = '/* @echo ENV */'; 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | agate>=1.4.0 2 | proof>=0.3.0 3 | mapturner>=0.1.4 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | build 3 | !node_modules/stylus-normalize 4 | .DS_Store 5 | .tmp 6 | .proof 7 | -------------------------------------------------------------------------------- /src/fonts/qz-icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/qz-icons.eot -------------------------------------------------------------------------------- /src/fonts/qz-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/qz-icons.ttf -------------------------------------------------------------------------------- /src/fonts/qz-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/qz-icons.woff -------------------------------------------------------------------------------- /src/fonts/Calibre-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/Calibre-Medium.otf -------------------------------------------------------------------------------- /src/fonts/PTSerif/PTF55F.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/PTSerif/PTF55F.ttf -------------------------------------------------------------------------------- /src/fonts/PTSerif/PTF56F.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/PTSerif/PTF56F.ttf -------------------------------------------------------------------------------- /src/fonts/PT_Serif-Web-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/PT_Serif-Web-Bold.ttf -------------------------------------------------------------------------------- /src/fonts/PTSerif/PTF55F-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/PTSerif/PTF55F-webfont.eot -------------------------------------------------------------------------------- /src/fonts/PTSerif/PTF55F-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/PTSerif/PTF55F-webfont.ttf -------------------------------------------------------------------------------- /src/fonts/PTSerif/PTF55F-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/PTSerif/PTF55F-webfont.woff -------------------------------------------------------------------------------- /data/al142016_best_track/simplified.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/simplified.dbf -------------------------------------------------------------------------------- /data/al142016_best_track/simplified.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/simplified.shp -------------------------------------------------------------------------------- /data/al142016_best_track/simplified.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/simplified.shx -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_lin.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_lin.dbf -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_lin.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_lin.shp -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_lin.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_lin.shx -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_pts.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_pts.dbf -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_pts.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_pts.shp -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_pts.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_pts.shx -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_radii.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_radii.dbf -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_radii.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_radii.shp -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_radii.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_radii.shx -------------------------------------------------------------------------------- /src/jade/thing.jade: -------------------------------------------------------------------------------- 1 | h2#title 2 | 3 | div#graphic 4 | 5 | div.footer.left Quartz | qz.com 6 | div.footer.right Data: NOAA IBTrACS (Friday AM) 7 | -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSans_Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSans_Light.otf -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_radii.shp.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_radii.shp.xml -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_windswath.dbf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_windswath.dbf -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_windswath.shp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_windswath.shp -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_windswath.shx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/data/al142016_best_track/al142016_windswath.shx -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Bold.eot -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Bold.ttf -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Bold.woff -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Light.eot -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Light.ttf -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Light.woff -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Regular.eot -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Regular.ttf -------------------------------------------------------------------------------- /src/fonts/AdelleSansWeb/AdelleSansBasic_Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quartz/hurricane-matthew/master/src/fonts/AdelleSansWeb/AdelleSansBasic_Regular.woff -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_lin.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371200.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_pts.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371200.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_radii.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371200.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] -------------------------------------------------------------------------------- /data/al142016_best_track/simplified.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["unnamed ellipse",DATUM["D_unknown",SPHEROID["Unknown",6371200,0]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]] -------------------------------------------------------------------------------- /data/al142016_best_track/simplified.qpj: -------------------------------------------------------------------------------- 1 | GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6371200,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]] 2 | -------------------------------------------------------------------------------- /src/data/graphic.csv: -------------------------------------------------------------------------------- 1 | year,value 2 | 2005,1 3 | 2006,3 4 | 2007,5 5 | 2008,6 6 | 2009,4 7 | 2010,5 8 | 2011,6 9 | 2012,7 10 | 2013,8 11 | 2014,6 12 | 2015,3 13 | -------------------------------------------------------------------------------- /data/al142016_best_track/al142016_windswath.prj: -------------------------------------------------------------------------------- 1 | GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371200.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]] -------------------------------------------------------------------------------- /gulp/cli.js: -------------------------------------------------------------------------------- 1 | var opts = require('nomnom') 2 | .option('build', { 3 | abbr: 'b', 4 | help: 'Build project. [local | move | commit | push]', 5 | choices: ['local', 'move', 'commit', 'push'] 6 | }) 7 | .option('dont-minify', { 8 | abbr: 'd', 9 | flag: true, 10 | help: 'Prevent build from minifying your js' 11 | }); 12 | 13 | module.exports = opts; 14 | -------------------------------------------------------------------------------- /src/jade/includes/share.jade: -------------------------------------------------------------------------------- 1 | ul.share-buttons 2 | li.share-icon.twitter 3 | a(title='Tweet' class='share-action icon icon-twitter' target='_blank') 4 | li.share-icon.facebook 5 | a(title='Share on Facebook' class='share-action icon icon-facebook' target='_blank') 6 | li.share-icon.linkedin 7 | a(title='Share on LinkedIn' class='share-action icon icon-linkedin' target='_blank') 8 | li.share-icon.email 9 | a(title='Email' class='share-action icon icon-email' target='_blank') 10 | -------------------------------------------------------------------------------- /src/styl/qz/buttons.styl: -------------------------------------------------------------------------------- 1 | qz-button-group() 2 | text-align center 3 | button 4 | color white 5 | border none 6 | background-color $qz-gray-1 7 | font-family $qz-sans 8 | border-radius 3px 9 | margin 2px 4px 2px 0 10 | vertical-align middle 11 | padding 0px 8px 12 | line-height 2em 13 | display inline-block 14 | &.active 15 | //font-family $qz-sans-bold 16 | background-color $qz-purp-2 17 | transition background-color 0.2s linear 18 | &:focus 19 | outline 0 20 | -------------------------------------------------------------------------------- /gulp/utils.js: -------------------------------------------------------------------------------- 1 | function generateShellCmd (buildArg, qzdataPath, thingName) { 2 | var baseCmd = "./__build.sh " + qzdataPath + " " + thingName + " "; // then commit? push? 3 | 4 | switch (buildArg) { 5 | case "move": 6 | return baseCmd + "false false"; 7 | case "commit": 8 | return baseCmd + "true false"; 9 | case "push": 10 | return baseCmd + "true true"; 11 | default: 12 | return 'echo ""'; 13 | } 14 | } 15 | 16 | module.exports = { 17 | generateShellCmd: generateShellCmd 18 | }; 19 | -------------------------------------------------------------------------------- /src/js/detectFeatures.js: -------------------------------------------------------------------------------- 1 | module.exports = function () { 2 | var features = {}; 3 | 4 | features.hasDeviceMotion = 'ondevicemotion' in window; 5 | features.isAndroid = (/android/gi).test(navigator.appVersion); 6 | features.isIDevice = (/iphone|ipad/gi).test(navigator.appVersion); 7 | features.isTouchPad = (/hp-tablet/gi).test(navigator.appVersion); 8 | features.isKindle = (/silk/gi).test(navigator.appVersion); 9 | features.hasTouchEvents = ( 10 | features.isAndroid || 11 | features.isIDevice || 12 | features.isTouchPad || 13 | features.isKindle 14 | ); 15 | 16 | return features; 17 | }; 18 | -------------------------------------------------------------------------------- /src/styl/main.styl: -------------------------------------------------------------------------------- 1 | // Normalize -- https://github.com/bymathias/normalize.styl 2 | @import 'normalize' 3 | 4 | // nib -- http://visionmedia.github.io/nib/ 5 | @import 'nib' 6 | 7 | // Qz modules. Comment out the things you don't need. 8 | @import 'qz/type' 9 | @import 'qz/colors' 10 | 11 | // Optional components. Uncomment if you need them. See wiki for usage info 12 | // note: `share` depends on `icons` 13 | //@import 'qz/icons' 14 | //@import 'qz/share' 15 | //@import 'qz/dropdowns' 16 | //@import 'qz/buttons' 17 | //@import 'qz/chart-elements' 18 | 19 | // Thing-specific css 20 | @import 'responsive' 21 | @import 'layout' 22 | @import 'thing' 23 | -------------------------------------------------------------------------------- /content.json: -------------------------------------------------------------------------------- 1 | { 2 | "hed": "This Quartz Thing has not connected to a Google Doc", 3 | "dek": "Perhaps you forgot to start the server? Make viewable to anyone with the link?", 4 | "items": [{ 5 | "copy": "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." 6 | }, { 7 | "copy": "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." 8 | }, { 9 | "copy": "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum" 10 | }] 11 | } 12 | -------------------------------------------------------------------------------- /src/jade/index.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | meta(charset='utf-8') 5 | meta(http-equiv='X-UA-Compatible', content='IE=edge') 6 | title hurricane-matthew 7 | meta(name='description', content='A map of hurricane tracks since 1950.') 8 | meta(name='viewport', content='width=device-width, initial-scale=1') 9 | link(rel='stylesheet', href='css/main.css') 10 | script(src='js/libs/frameMessager.min.js') 11 | 12 | body 13 | div.item-body 14 | div#interactive-content 15 | include thing.jade 16 | script(src='//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js') 17 | script window.jQuery || document.write('