├── src ├── assets │ └── .placeholder ├── data │ ├── .placeholder │ ├── graphic.csv │ └── indicators.csv ├── js │ ├── config.js │ ├── detectFeatures.js │ ├── thing.js │ ├── utils.js │ ├── share.js │ └── fm.js ├── jade │ ├── includes │ │ └── share.jade │ ├── thing.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 ├── README.md ├── .gitignore ├── gulp ├── cli.js ├── utils.js └── config.js ├── content.json ├── __build.sh ├── package.json └── gulpfile.js /src/assets/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/data/.placeholder: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # family-reunion-table 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/js/config.js: -------------------------------------------------------------------------------- 1 | var ENV = '/* @echo ENV */'; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/* 2 | build 3 | !node_modules/stylus-normalize 4 | .DS_Store 5 | .tmp 6 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/data/indicators.csv: -------------------------------------------------------------------------------- 1 | country,ccode,economic_resources Austria,AT,0 Australia,AU,100 Belgium,BE,0 Bulgaria,BG,50 Canada,CA,50 Switzerland,CH,0 Cyprus,CY,0 Czech Republic,CZ,0 Germany,DE,50 Denmark,DK,0 Estonia,EE,100 Spain,ES,50 Finland,FI,100 France,FR,0 Greece,GR,0 Croatia,HR,0 Hungary,HU,50 Ireland,IE,50 Iceland,IS,0 Italy,IT,0 Japan,JP,50 South Korea,KR,0 Lithuania,LT,50 Luxembourg,LU,100 Latvia,LV,0 Malta,MT,50 Netherlands,NL,0 Norway,NO,50 New Zealand,NZ,0 Poland,PL,100 Portugal,PT,50 Romania,RO,100 Sweden,SE,50 Slovenia,SI,50 Slovakia,SK,100 Turkey,TR,50 United Kingdom,UK,50 USA,US,50 -------------------------------------------------------------------------------- /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/thing.jade: -------------------------------------------------------------------------------- 1 | h2 How restrictive are income requirements for sponsoring a spouse? 2 | 3 | table#legend 4 | tr.low 5 | td.swatch 6 | b 7 | td.title Low: 8 | td.desc No income threshold for sponsors, or one that’s lower than state support 9 | tr.moderate 10 | td.swatch 11 | b 12 | td.title Moderate: 13 | td.desc Sponsor’s income has to be higher than state support 14 | tr.high 15 | td.swatch 16 | b 17 | td.title High: 18 | td.desc Sponsor’s income can’t come from state support and/or must come from a job 19 | 20 | table#mipex 21 | thead 22 | tr 23 | th Country 24 | th Restrictions 25 | tbody 26 | 27 | div.footnote Data: MIPEX (2014) 28 | -------------------------------------------------------------------------------- /src/styl/qz/share.styl: -------------------------------------------------------------------------------- 1 | // Icon-related colors 2 | $color-twitter = #00aced 3 | $color-facebook = #3b5998 4 | $color-linkedin = #007bb6 5 | $color-email = #0096b6 6 | $color-icon-hover = #c3c5c0 7 | 8 | ul.share-buttons 9 | list-style-type none 10 | margin 0 11 | padding 0 12 | 13 | li.share-icon 14 | display inline-block 15 | font-size 1.2em 16 | a 17 | text-decoration none 18 | cursor pointer 19 | 20 | .icon-email 21 | color $color-email 22 | &:hover 23 | color $color-icon-hover 24 | 25 | .icon-facebook 26 | color $color-facebook 27 | &:hover 28 | color $color-icon-hover 29 | 30 | .icon-linkedin 31 | color $color-linkedin 32 | &:hover 33 | color $color-icon-hover 34 | 35 | .icon-twitter 36 | color $color-twitter 37 | &:hover 38 | color $color-icon-hover 39 | -------------------------------------------------------------------------------- /src/styl/layout.styl: -------------------------------------------------------------------------------- 1 | // Page layout setup 2 | 3 | html, body 4 | min-width 270px 5 | font-family $qz-font-body 6 | color $qz-body-black 7 | background-color $qz-background-gray 8 | 9 | h1, h2, h4, h5 10 | font-family $qz-sans-bold 11 | color $qz-header-black 12 | 13 | h1 14 | line-height 50px 15 | margin-bottom 10px 16 | 17 | h2 18 | font-size 24px 19 | line-height 24px 20 | font-style bold 21 | margin 40px 0px 22 | 23 | h3 24 | font-size 20px 25 | font-family $qz-serif 26 | color: $qz-header-black 27 | font-weight: bold; 28 | 29 | p 30 | position relative 31 | margin 0 0 0 0 32 | padding 16px 0 16px 0 33 | line-height 1.6 34 | color #4c4c4c 35 | 36 | .item-body 37 | margin 0 auto 38 | //max-width 940px 39 | 40 | #interactive-content 41 | width 100% 42 | margin-left auto 43 | margin-right auto 44 | -------------------------------------------------------------------------------- /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 family-reunion-table 7 | meta(name='description', content='') 8 | meta(name='viewport', content='width=device-width, initial-scale=1') 9 | link(rel="stylesheet" href="https://fonts.googleapis.com/css?family=PT+Serif:400,700,400italic") 10 | link(rel='stylesheet', href='css/main.css') 11 | script(src='https://app.qz.com/js/frameMessager/min/frameMessager.min.js') 12 | 13 | body 14 | div.item-body 15 | div#interactive-content 16 | include thing.jade 17 | script(src='//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js') 18 | script window.jQuery || document.write('