diff --git a/about.html b/about.html index 23f42255a..09cde6c37 100644 --- a/about.html +++ b/about.html @@ -18,6 +18,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li class="current-page"><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/building-workshops.html b/building-workshops.html index eb017dcb7..7c01c22e5 100644 --- a/building-workshops.html +++ b/building-workshops.html @@ -17,6 +17,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li class="current-page"><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/chapters.html b/chapters.html index 3aff33157..924a0f33c 100644 --- a/chapters.html +++ b/chapters.html @@ -19,6 +19,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li class="current-page"><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/community-groups.html b/community-groups.html new file mode 100644 index 000000000..2f7262627 --- /dev/null +++ b/community-groups.html @@ -0,0 +1,109 @@ +<!DOCTYPE html> +<html class="chapters"> + <head> + <meta charset="utf-8"> + <link rel="stylesheet" href="/style.css"> + <link rel="stylesheet" href="/community-groups.css"> + <link rel="shortcut icon" href="/favicon.ico"> + <link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:400,700|Source+Code+Pro" rel="stylesheet" type="text/css"> + <link rel="stylesheet" href="/mapbox.css"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>NodeSchool - Chapters</title> + </head> + <body class="chapters"> + <header> + <div class="container"> + <div class="full"> + <a href="index.html"><img class="logo" src="/images/schoolhouse.svg" alt="nodeschoolhouse"></a> + <ul class="nav"> + <li><a href="index.html" data-i18n="menu-index">Home</a></li> + <li><a href="events.html" data-i18n="menu-events">Events</a></li> + <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li class="current-page"><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> + <li><a href="about.html" data-i18n="menu-about">About</a></li> + <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> + <li><a href="host.html" data-i18n="menu-host">Host</a></li> + </ul> + </div> + </div> + </header> + <div id="main" name="main" role="main"> + <div class="container" style="background-color: #fff;"> + <div class="full"> + <h1 data-i18n="chapters-h1">NodeSchool Chapters</h1> + <p data-i18n="chapters-header">Cities all over have started to host NodeSchool events regularly. Here's a list of chapters. See the <a href="hexdex.html">hexdex</a> for an index of chapter ⬢ hexagon logos.</p> + + <div id="chapter-list"> + <div class="loading" data-i18n="index-chapter-list-loading"> + Loading... + </div> + </div> + + <h2 id="region-other" data-i18n="chapters-other">Other region?</h2> + <div class="other"> + <span data-i18n="chapters-start">Can't find a NodeSchool chapter in your region?</span> <a href="https://github.com/nodeschool/discussions" data-i18n="chapters-start2">Open an issue on the discussions board</a> <span data-i18n="chapters-start3">to find other people around you. If there isn't an existing chapter nearby, start your own! Follow these instructions on</span> <a href="host.html" data-i18n="chapters-start4">how to host an event</a><span data-i18n="chapters-start5">.</span> + </div> + </div> + </div> + </div> + <div class="container" style="background-color: #fff;"> + <footer> + <div class="third"> + <p><strong>nodeschool.io</strong></p> + <small>Photos by <a href="https://www.flickr.com/photos/matthewbergman" target="_blank">Matthew Bergman</a></small> + </div> + <div class="two-thirds"> + <ul> + <li><strong data-i18n="footer-contact-header">Contact</strong></li> + <li><a href="https://twitter.com/nodeschool" target="_blank">t/@nodeschool</a></li> + <li><a href="https://github.com/nodeschool" target="_blank">gh/nodeschool</a></li> + </ul> + <ul> + <li><strong data-i18n="footer-contribute-header">Contribute</strong></li> + <li><a href="https://github.com/nodeschool/discussions/issues/new" target="_blank" data-i18n="footer-contribute-question">Open an Issue</a></li> + <li><a href="https://github.com/nodeschool/discussions/issues" target="_blank" data-i18n="footer-contribute-answer">Answer a Question</a></li> + </ul> + <ul> + <li><strong data-i18n="footer-about-header">About</strong></li> + <li><a href="building-workshops.html" data-i18n="footer-about-build">Build a workshopper</a></li> + <li><a href="host.html" data-i18n="footer-about-host">Host a workshop</a></li> + </ul> + </div> + </footer> + </div> + + <script id="tmpl-chapter-list" type="text/html"> + <p style="font-size: 100%"><em>Chapter count: {{total}}</em></p> + {{#regions}} + <div class="chapter-list {{region}}"> + <h2>{{region}} ({{count}})</h2> + <ul> + {{#chapters}} + <li class="chapter"> + {{#website}} + <a target="_blank" href="{{website}}">{{location}}{{#country}}, {{country}}{{/country}}</a> + {{/website}} + {{^website}} + <a target="_blank" href="{{repo}}">{{location}}{{#country}}, {{country}}{{/country}}</a> + {{/website}} + </li> + {{/chapters}} + </ul> + </div> + {{/regions}} + </script> + + <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> + <script type="text/javascript" src="/js/dependencies.js"></script> + <script type="text/javascript" src="/js/chapters.js"></script> + <script> + !function(s,c,h,O,o,l){s.GoogleAnalyticsObject=h;s[h]||(s[h]=function(){ + (s[h].q=s[h].q||[]).push(arguments)});s[h].l=+new Date;o=c.createElement(O); + l=c.getElementsByTagName(O)[0];o.src='//www.google-analytics.com/analytics.js'; + l.parentNode.insertBefore(o,l)}(window,document,'ga','script'); + + ga('create', 'UA-49267600-1', 'nodeschool.io'); + ga('send', 'pageview'); + </script> + </body> +</html> diff --git a/community-groups/military.json b/community-groups/military.json new file mode 100644 index 000000000..3c46454c1 --- /dev/null +++ b/community-groups/military.json @@ -0,0 +1,7 @@ +{ + "name": "Military", + "organizers": ["hollomancer"], + "website": "", + "twitter": "", + "repo": "https://github.com/nodeschool/military-community-group" +} diff --git a/events.html b/events.html index b711b37a1..66f25cc21 100644 --- a/events.html +++ b/events.html @@ -19,6 +19,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li class="current-page"><a href="events.html" data-i18n="menu-events">Events</a></li> <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/hexdex.html b/hexdex.html index a7ff51e98..abb40aa4e 100644 --- a/hexdex.html +++ b/hexdex.html @@ -19,6 +19,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li class="current-page"><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/host.html b/host.html index 7625b02b7..34954a183 100644 --- a/host.html +++ b/host.html @@ -18,6 +18,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li class="current-page"><a href="host.html" data-i18n="menu-host">Host</a></li> @@ -31,7 +32,7 @@ <h1 data-i18n="host-header">Hosting a NodeSchool Event</h1> <p data-i18n="host-info">NodeSchool is a fully community driven effort and is 100% open source. This means that anyone can use the NodeSchool materials and/or host an event.</p> <p data-i18n="host-info-cost">The only expectations for event hosts is that events be not-for-profit (free or low cost) and that governance of events should have an open membership model (so that nobody can 'control' the events).</p> - <p data-i18n="host-info-wiki">We have created the <a href="https://github.com/nodeschool/organizers/wiki">Organizers Wiki</a> to hold all the knowledge from the Chapter organizers around the world.</p> + <p data-i18n="host-info-wiki">We have created the <a href="https://github.com/nodeschool/organizers/wiki">Organizers Wiki</a> to hold all the knowledge from the Chapter and Community Group organizers around the world.</p> <p data-i18n="host-info-wiki-link">Check out <a href="https://github.com/nodeschool/organizers/wiki">the wiki</a> for info on how to create a chapter, run a successful event and build a local NodeSchool community!</p> </div> </div> diff --git a/index.html b/index.html index 507f70cce..60d191596 100644 --- a/index.html +++ b/index.html @@ -62,6 +62,7 @@ <h1 class="name">nodeschool</h1> <li><a href="#workshoppers" data-i18n="menu-tutorials">Tutorials</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/mentor-at-event.html b/mentor-at-event.html index 6be4a15dc..27bfe12eb 100644 --- a/mentor-at-event.html +++ b/mentor-at-event.html @@ -18,6 +18,7 @@ <li><a href="index.html" data-i18n="menu-index">Home</a></li> <li><a href="events.html" data-i18n="menu-events">Events</a></li> <li><a href="chapters.html" data-i18n="menu-chapters">Chapters</a></li> + <li><a href="community-groups.html" data-i18n="menu-community-groups">Community Groups</a></li> <li><a href="about.html" data-i18n="menu-about">About</a></li> <li><a href="building-workshops.html" data-i18n="menu-building-workshops">Build</a></li> <li class="current-page"><a href="host.html" data-i18n="menu-host">Host</a></li> diff --git a/package.json b/package.json index 74b510d2e..2e4d6a8b1 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build-copy": "node ./scripts/build-copy.js $$", "build-html": "node ./scripts/build-html.js $$", "build-chapters": "node ./scripts/build-chapters.js $$", + "build-community-groups": "node ./scripts/build-community-groups.js $$", "build-dependencies": "bash ./scripts/build-dependencies.sh $$", "generate-css": "bash ./scripts/generate-css.sh", "generate-language": "node ./scripts/generate-lang.js", diff --git a/scripts/build-community-groups.js b/scripts/build-community-groups.js new file mode 100755 index 000000000..305792efc --- /dev/null +++ b/scripts/build-community-groups.js @@ -0,0 +1,68 @@ +#!/usr/bin/env node +const Fs = require('fs') +const cmdwatcher = require('./util/cmdwatcher') +const mkdirp = require('mkdirp') + +function groupByValue(list, grouper, groupName) { + var grouped = {} + groupName = groupName || 'items' + for (var i = 0; i < list.length; i++) { + var key = list[i][grouper] + if (typeof grouped[key] !== "object" || typeof grouped[key].push !== "function") { + grouped[key] = [] + } + grouped[key].push(list[i]) + } + return Object.keys(grouped).map(function (group) { + var formatted = {} + formatted[grouper] = group + formatted.count = grouped[group].length + formatted[groupName] = grouped[group] + return formatted + }); +} + +function sortByKey(list, key) { + return list.sort(function (a, b) { + return a[key] > b[key] ? 1 : 0 + }) +} + +function sortedGroupByValue(list, grouper, groupName) { + return sortByKey(groupByValue(list, grouper, groupName), grouper); +} + +var communityGroups = []; + +cmdwatcher('build-community-groups' + , './community-groups/!(list).json', function (files) { + files.forEach(function (f) { + Fs.readFile(f, function (err, buf) { + if (err) { + return console.error(err); + } + var data = buf.toString(); + try { + var communityGroup = JSON.parse(data); + } catch (e) { + console.error("JSON parse error: " + f, e); + } + communityGroups.push(communityGroup); + + if (communityGroups.length === files.length) { + writeCommunityGroups(communityGroups); + } + }); + }); +}); + +function writeCommunityGroups(communityGroups) { + data = { + total: communityGroups.length, + regions: sortedGroupByValue(communityGroups, 'name', 'communityGroups') + }; + mkdirp.sync('.build/communityGroups') + Fs.writeFile('.build/communityGroups/list.json', JSON.stringify(data, null, 2), function (err) { + if (err) console.error(err); + }); +} diff --git a/scripts/build.sh b/scripts/build.sh index 78af88908..5445d3c44 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,6 +1,7 @@ #!/bin/bash npm run build-chapters -- $@ +npm run build-community-groups -- $@ npm run generate-css npm run build-dependencies npm run build-copy -- $@ -npm run build-html -- $@ \ No newline at end of file +npm run build-html -- $@ diff --git a/scripts/generate-css.sh b/scripts/generate-css.sh index bd94f8fbe..101d696ee 100644 --- a/scripts/generate-css.sh +++ b/scripts/generate-css.sh @@ -5,6 +5,7 @@ # -u = utilize plugin stylus -u autoprefixer-stylus -c -m ./styles/chapters.styl -o ./chapters.css +stylus -u autoprefixer-stylus -c -m ./styles/community-groups.styl -o ./community-groups.css stylus -u autoprefixer-stylus -c -m ./styles/events.styl -o ./events.css stylus -u autoprefixer-stylus -c -m ./styles/mapbox.styl -o ./mapbox.css stylus -u autoprefixer-stylus -c -m ./styles/style.styl -o ./style.css diff --git a/styles/community-groups.styl b/styles/community-groups.styl new file mode 100644 index 000000000..db9ae3ce3 --- /dev/null +++ b/styles/community-groups.styl @@ -0,0 +1,31 @@ +@import 'settings/*' + +.chapter-list { + ul { + list-style: none; + padding-left: 0; + } + + li { + width: 250px; + margin: 5px; + padding-bottom: 0; + border: 2px solid $mineshaftGray; + border-radius: 3px; + display: inline-block; + transition: background-color 300ms, border 500ms; + + &:hover { + background-color: $broomYellow; + border: 2px solid $broomYellow; + } + } + + a { + display: block; + color: $black; + padding: 6px; + border-bottom: none; + text-decoration: none; + } +} diff --git a/styles/style.styl b/styles/style.styl index 07f6d80bb..a8d668bca 100644 --- a/styles/style.styl +++ b/styles/style.styl @@ -233,6 +233,7 @@ ul { color: $mineshaftGray; font-weight: 700; letter-spacing: 0.1em; + width: 95%; li { display: inline-block;