@ -1,7 +1,3 @@ |
|||
# SquatConf website. |
|||
|
|||
```cp config-sample.js config.js``` |
|||
|
|||
edit congif with the mailgun api key |
|||
|
|||
```npm i && npm start``` |
|||
```npm install && npm start``` |
|||
|
@ -1,17 +0,0 @@ |
|||
var join = require('path').join |
|||
, name = 'squatconf' |
|||
, cwd = process.cwd() |
|||
|
|||
module.exports = require('rc')(name, { |
|||
db_opts: { valueEncoding: 'json' } |
|||
, db_path: join(cwd, 'db', name) |
|||
, port: 8000 |
|||
, host: 'http://test.squatconf.eu' |
|||
, mailjetKey: 'key-...' |
|||
, email: { |
|||
from : 'no-reply@squatconf.eu' |
|||
, subject : 'Hello, everyone is welcome at SquatConf..' |
|||
, bodyText : 'Please verify that you wish to signup by following this link\n%link%\nYou can ignore this message if you DID NOT request to signup at our website\nhttp://squatconf.eu\n\nThe next event is in Paris, we hope to see you there !!\n\nKind regards from the team,\nSquatConf Paris 2014' |
|||
} |
|||
}) |
|||
|
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 8.5 KiB |
Before Width: | Height: | Size: 8.5 KiB |
@ -1,165 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>SquatConf.386</title> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<meta name="description" content="Squatconf webSite"> |
|||
<link rel="icon" href="favicon.ico" type="image/x-icon" /> |
|||
<link href="assets/css/bootstrap.css" rel="stylesheet"> |
|||
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> |
|||
<link href="assets/css/squatconf.css" rel="stylesheet"> |
|||
</head> |
|||
|
|||
<body> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
|
|||
<div class="span3 leftCol"> |
|||
<ul class="nav nav-list"> |
|||
<li><a href="#"><i class="icon-chevron-right"></i> SquatConf</a></li> |
|||
<li><a href="https://github.com/squatconf/organisation/blob/master/code_of_conduct.md#squatconf-code-of-conduct"><i class="icon-chevron-right"></i> Code of Conduct</a></li> |
|||
<li><a href="https://github.com/squatconf/talks#squatconf-call-for-papers"><i class="icon-chevron-right"></i> Submit a talk</a></li> |
|||
|
|||
</ul> |
|||
<br /> |
|||
|
|||
<div class="formCont"> |
|||
<form id="signup-form" method="GET" action="/email"> |
|||
<fieldset> |
|||
<legend>JOIN US</legend> |
|||
<label class="text-info">Enter your email..</label> |
|||
<input type="text" name="email" class='input'> |
|||
<span class="help-block">we'll send you info about future events</span> |
|||
<!-- <label class="checkbox text-info"> |
|||
<input type="checkbox" name="paris"> Paris Nov.2014? |
|||
</label> --> |
|||
<button type="submit" class="btn">Send</button> |
|||
<div id="status-msg"> </div> |
|||
</fieldset> |
|||
</form> |
|||
</div> |
|||
<br /> |
|||
|
|||
<ul class="nav nav-list"> |
|||
<li><a href="#">Chat with us in <br>#squatconf on freenode</a></li> |
|||
</ul> |
|||
<!-- <fieldset> |
|||
<legend>SUPPORT US</legend> |
|||
<ul class="nav nav-list"> |
|||
<li> |
|||
<button type="submit" class="btn">Donate BTC</button> |
|||
</li> |
|||
</ul> |
|||
</fieldset> --> |
|||
|
|||
</div> |
|||
|
|||
|
|||
<!-- content --> |
|||
<div class="span9"> |
|||
<div class="page-header"> |
|||
<pre class="maxW"><small> |
|||
.d8888b. 888 .d888 |
|||
d88P Y88b 888 d88P" |
|||
Y88b. 888 888 |
|||
"Y888b. .d88888888 888 8888b. 888888 .d8888b .d88b. 88888b. 888888 |
|||
"Y88b.d88" 888888 888 "88b888 d88P" d88""88b888 "88b888 |
|||
"888888 888888 888.d888888888 888 888 888888 888888 |
|||
Y88b d88PY88b 888Y88b 888888 888Y88b. Y88b. Y88..88P888 888888 |
|||
"Y8888P" "Y88888 "Y88888"Y888888 "Y888 "Y8888P "Y88P" 888 888888 |
|||
888 |
|||
888 |
|||
888 |
|||
</small></pre> |
|||
<pre class="dskW"> |
|||
____ _ ____ __ |
|||
/ ___| __ _ _ _ __ _| |_ / ___|___ _ __ / _| |
|||
\___ \ / _` | | | |/ _` | __| | / _ \| '_ \| |_ |
|||
___) | (_| | |_| | (_| | |_| |__| (_) | | | | _| |
|||
|____/ \__, |\__,_|\__,_|\__|\____\___/|_| |_|_| |
|||
|_| |
|||
<br></pre> |
|||
<pre class="tblW"> |
|||
__ |
|||
(_ _ _ |_ |
|||
__)(_||_|(_||_ |
|||
| |
|||
__ _ |
|||
/ _ _ (_ |
|||
\__(_)| )| |
|||
<br></pre> |
|||
</div> |
|||
<div class="page-header"></div> |
|||
<div> |
|||
<h2 id="what-is-squatconf-">Why / What is SquatConf?</h2> |
|||
<p> |
|||
Squatconf is a tech conference that will happen... in a squat, hence the name. |
|||
it won't be a conference about squatting or squatters, but will also talk about technologies that can be used in squats. <br> |
|||
On top of that, the name sounded nice, isn't it ? |
|||
</p> |
|||
<p>It started because some of us are lucky enough to attend marvelous conventions, made with love by amazing people. Great events with top-notch speakers, incredible venues, and amazing parties.</p> |
|||
<p>These conferences are run with huge contributions from volunteers, and financial support from sponsors, providing top-notch events at affordable prices.</p> |
|||
<p>But even then, they're not affordable for everyone.</p> |
|||
<p>We're building an alternative model: SquatConf.</p> |
|||
<p>SquatConf won't be your everyday conference, but we'll have good talks from amazing people. It'll be donation-based, and you'll get to contribute if you want to.</p> |
|||
<h2 id="how-is-this-possible-">How is this possible?</h2> |
|||
<p>Conference costs are huge, and ticket prices are often <a href="http://2014.lxjs.org/about/">nowhere near the true per-attendee cost</a>, even for a non-profit conference.</p> |
|||
<p>Fancy venues, transportation, hotels and food are really nice perks to have, but…</p> |
|||
<p>If you hold a conference in a squat… |
|||
the speakers advance their travel expenses… |
|||
tell people to bring some food… |
|||
and the wifi will be dodgy for sure…</p> |
|||
<p>You'll have a zero-cost conference made with love, but a little rougher around the edges.</p> |
|||
<h2 id="where-and-when-">Where and when?</h2> |
|||
<p>November 15th 2014. A squat in Paris. For obvious reasons, we can't yet disclose where.</p> |
|||
<h2 id="the-plan">The Plan</h2> |
|||
<p>We are a bunch of crazy programmers that believe in anarchy and decentralised systems, conferences included.</p> |
|||
<p>We will provide a space, we will provide a context, some talks, and the rest will be up to you…</p> |
|||
<h2 id="who-is-behind-this-">Who is behind this?</h2> |
|||
<p>The inception of SquatConf was at <a href="http://2014.lxjs.org/">LXJS</a>. It was a great conference, and the organisation did an amazing job, and after the final day of the event we ended up with <a href="https://github.com/dominictarr">dominictarr</a>, <a href="https://github.com/joates">joates</a> and <a href="https://github.com/gorhgorh">I</a> talking about autonomous self-driving boats when this idea came to life. Now the idea matured and some folks (<a href="https://github.com/mmalecki">mmalecki</a>, <a href="https://github.com/nathan7">nathan7</a>, <a href="https://github.com/no9">no9</a>, <a href="https://github.com/substack">substack</a>, ...) are in the loop now.</p> |
|||
<h2 id="okay-so-you-re-a-bunch-of-idealists-running-a-10-people-conference-in-a-dump-">Okay, so you're a bunch of idealists, running a 10-people conference in a dump.</h2> |
|||
<p>What you'll get out of SquatConf is in the end exactly what you put into SquatConf.</p> |
|||
<ul> |
|||
<li>Tickets will be donation-based. You want a cheap conference? Give us nothing. You want food? Contribute.</li> |
|||
<li>This won't be a 400-people event, but do you <em>need</em> that many people?</li> |
|||
<li>We already have speakers lined up you're probably prepared to pay for :)</li> |
|||
<li>You have ideas for improvements? Suggestions are always welcome.</li> |
|||
<li>We plan to make SquatConf zero-sum. We'll split any profits with attendees — ROI on a conference!</li> |
|||
</ul> |
|||
<!-- <h2 id="i-want-to-give-a-talk-">I want to give a talk!</h2> |
|||
<p>Please see <a href="https://github.com/squatconf/talks">our talks repository</a> to propose a talk.</p> --> |
|||
|
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="parisCont"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="span3"></div> |
|||
<div class="span9"> |
|||
<div id="logo-wrapper"> |
|||
<div id="logoCont"></div> |
|||
<div class="attribution">logo image by <a href="http://substack.net">substack</a></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script src="assets/js/email.js"></script> |
|||
<script> |
|||
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]= |
|||
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date; |
|||
e=o.createElement(i);r=o.getElementsByTagName(i)[0]; |
|||
e.src='//www.google-analytics.com/analytics.js'; |
|||
r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); |
|||
ga('create','UA-8478831-9','auto');ga('send','pageview'); |
|||
</script> |
|||
</body> |
|||
</html> |
@ -1,85 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>SquatConf.386</title> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<meta name="description" content="Squatconf webSite"> |
|||
|
|||
<link href="assets/css/bootstrap.css" rel="stylesheet"> |
|||
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> |
|||
<link href="assets/css/squatconf.css" rel="stylesheet"> |
|||
</head> |
|||
|
|||
<body> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
|
|||
<div class="span3 leftCol"> |
|||
<ul class="nav nav-list"> |
|||
<li><a href="/"><i class="icon-chevron-right"></i> SquatConf</a></li> |
|||
</ul> |
|||
</div> |
|||
|
|||
|
|||
<!-- content --> |
|||
<div class="span9"> |
|||
<div class="page-header"> |
|||
<pre class="maxW"><small> |
|||
.d8888b. 888 .d888 |
|||
d88P Y88b 888 d88P" |
|||
Y88b. 888 888 |
|||
"Y888b. .d88888888 888 8888b. 888888 .d8888b .d88b. 88888b. 888888 |
|||
"Y88b.d88" 888888 888 "88b888 d88P" d88""88b888 "88b888 |
|||
"888888 888888 888.d888888888 888 888 888888 888888 |
|||
Y88b d88PY88b 888Y88b 888888 888Y88b. Y88b. Y88..88P888 888888 |
|||
"Y8888P" "Y88888 "Y88888"Y888888 "Y888 "Y8888P "Y88P" 888 888888 |
|||
888 |
|||
888 |
|||
888 |
|||
<br></small></pre> |
|||
<pre class="dskW"> |
|||
____ _ ____ __ |
|||
/ ___| __ _ _ _ __ _| |_ / ___|___ _ __ / _| |
|||
\___ \ / _` | | | |/ _` | __| | / _ \| '_ \| |_ |
|||
___) | (_| | |_| | (_| | |_| |__| (_) | | | | _| |
|||
|____/ \__, |\__,_|\__,_|\__|\____\___/|_| |_|_| |
|||
|_| |
|||
<br></pre> |
|||
<pre class="tblW"> |
|||
|
|||
(~ _ _ _|_/~` _ _ |` |
|||
_)(_||_|(_| | \_,(_)| |~|~ |
|||
|/ |
|||
<br></pre> |
|||
</div> |
|||
<div> |
|||
<h2 id="email-verified" class="pull-left">You're verified</h2> |
|||
<br /><br /> |
|||
<p>Thanks for completing our signup process</p> |
|||
<br /> |
|||
<a href="/" class="btn">Go back</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Footer |
|||
================================================== --> |
|||
<!-- <footer class="footer"> |
|||
<div class="container"> |
|||
some info, maybe ? ;) |
|||
</div> |
|||
|
|||
</footer> --> |
|||
</body> |
|||
<script> |
|||
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]= |
|||
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date; |
|||
e=o.createElement(i);r=o.getElementsByTagName(i)[0]; |
|||
e.src='//www.google-analytics.com/analytics.js'; |
|||
r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); |
|||
ga('create','UA-8478831-9','auto');ga('send','pageview'); |
|||
</script> |
|||
</html> |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
@ -0,0 +1,542 @@ |
|||
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/Users/jloi/code/Squatconf/website/node_modules/domready/ready.js":[function(require,module,exports){ |
|||
/*! |
|||
* domready (c) Dustin Diaz 2014 - License MIT |
|||
*/ |
|||
!function (name, definition) { |
|||
|
|||
if (typeof module != 'undefined') module.exports = definition() |
|||
else if (typeof define == 'function' && typeof define.amd == 'object') define(definition) |
|||
else this[name] = definition() |
|||
|
|||
}('domready', function () { |
|||
|
|||
var fns = [], listener |
|||
, doc = document |
|||
, hack = doc.documentElement.doScroll |
|||
, domContentLoaded = 'DOMContentLoaded' |
|||
, loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState) |
|||
|
|||
|
|||
if (!loaded) |
|||
doc.addEventListener(domContentLoaded, listener = function () { |
|||
doc.removeEventListener(domContentLoaded, listener) |
|||
loaded = 1 |
|||
while (listener = fns.shift()) listener() |
|||
}) |
|||
|
|||
return function (fn) { |
|||
loaded ? fn() : fns.push(fn) |
|||
} |
|||
|
|||
}); |
|||
|
|||
},{}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/index.js":[function(require,module,exports){ |
|||
var xhr = require('xhr'); |
|||
|
|||
module.exports = function (opts, cb) { |
|||
if (typeof opts === 'string') opts = { uri: opts }; |
|||
|
|||
xhr(opts, function (err, res, body) { |
|||
if (err) return cb(err); |
|||
if (!/^2/.test(res.statusCode)) { |
|||
return cb(new Error('http status code: ' + res.statusCode)); |
|||
} |
|||
var div = document.createElement('div'); |
|||
div.innerHTML = body; |
|||
var svg = div.querySelector('svg'); |
|||
if (!svg) return cb(new Error('svg not present in resource')); |
|||
cb(null, svg); |
|||
}); |
|||
}; |
|||
|
|||
},{"xhr":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/index.js"}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/index.js":[function(require,module,exports){ |
|||
var window = require("global/window") |
|||
var once = require("once") |
|||
var parseHeaders = require('parse-headers') |
|||
|
|||
var messages = { |
|||
"0": "Internal XMLHttpRequest Error", |
|||
"4": "4xx Client Error", |
|||
"5": "5xx Server Error" |
|||
} |
|||
|
|||
var XHR = window.XMLHttpRequest || noop |
|||
var XDR = "withCredentials" in (new XHR()) ? XHR : window.XDomainRequest |
|||
|
|||
module.exports = createXHR |
|||
|
|||
function createXHR(options, callback) { |
|||
if (typeof options === "string") { |
|||
options = { uri: options } |
|||
} |
|||
|
|||
options = options || {} |
|||
callback = once(callback) |
|||
|
|||
var xhr = options.xhr || null |
|||
|
|||
if (!xhr) { |
|||
if (options.cors || options.useXDR) { |
|||
xhr = new XDR() |
|||
}else{ |
|||
xhr = new XHR() |
|||
} |
|||
} |
|||
|
|||
var uri = xhr.url = options.uri || options.url |
|||
var method = xhr.method = options.method || "GET" |
|||
var body = options.body || options.data |
|||
var headers = xhr.headers = options.headers || {} |
|||
var sync = !!options.sync |
|||
var isJson = false |
|||
var key |
|||
var load = options.response ? loadResponse : loadXhr |
|||
|
|||
if ("json" in options) { |
|||
isJson = true |
|||
headers["Accept"] = "application/json" |
|||
if (method !== "GET" && method !== "HEAD") { |
|||
headers["Content-Type"] = "application/json" |
|||
body = JSON.stringify(options.json) |
|||
} |
|||
} |
|||
|
|||
xhr.onreadystatechange = readystatechange |
|||
xhr.onload = load |
|||
xhr.onerror = error |
|||
// IE9 must have onprogress be set to a unique function.
|
|||
xhr.onprogress = function () { |
|||
// IE must die
|
|||
} |
|||
// hate IE
|
|||
xhr.ontimeout = noop |
|||
xhr.open(method, uri, !sync) |
|||
//backward compatibility
|
|||
if (options.withCredentials || (options.cors && options.withCredentials !== false)) { |
|||
xhr.withCredentials = true |
|||
} |
|||
|
|||
// Cannot set timeout with sync request
|
|||
if (!sync) { |
|||
xhr.timeout = "timeout" in options ? options.timeout : 5000 |
|||
} |
|||
|
|||
if (xhr.setRequestHeader) { |
|||
for(key in headers){ |
|||
if(headers.hasOwnProperty(key)){ |
|||
xhr.setRequestHeader(key, headers[key]) |
|||
} |
|||
} |
|||
} else if (options.headers) { |
|||
throw new Error("Headers cannot be set on an XDomainRequest object") |
|||
} |
|||
|
|||
if ("responseType" in options) { |
|||
xhr.responseType = options.responseType |
|||
} |
|||
|
|||
if ("beforeSend" in options && |
|||
typeof options.beforeSend === "function" |
|||
) { |
|||
options.beforeSend(xhr) |
|||
} |
|||
|
|||
xhr.send(body) |
|||
|
|||
return xhr |
|||
|
|||
function readystatechange() { |
|||
if (xhr.readyState === 4) { |
|||
load() |
|||
} |
|||
} |
|||
|
|||
function getBody() { |
|||
// Chrome with requestType=blob throws errors arround when even testing access to responseText
|
|||
var body = null |
|||
|
|||
if (xhr.response) { |
|||
body = xhr.response |
|||
} else if (xhr.responseType === 'text' || !xhr.responseType) { |
|||
body = xhr.responseText || xhr.responseXML |
|||
} |
|||
|
|||
if (isJson) { |
|||
try { |
|||
body = JSON.parse(body) |
|||
} catch (e) {} |
|||
} |
|||
|
|||
return body |
|||
} |
|||
|
|||
function getStatusCode() { |
|||
return xhr.status === 1223 ? 204 : xhr.status |
|||
} |
|||
|
|||
// if we're getting a none-ok statusCode, build & return an error
|
|||
function errorFromStatusCode(status) { |
|||
var error = null |
|||
if (status === 0 || (status >= 400 && status < 600)) { |
|||
var message = (typeof body === "string" ? body : false) || |
|||
messages[String(status).charAt(0)] |
|||
error = new Error(message) |
|||
error.statusCode = status |
|||
} |
|||
|
|||
return error |
|||
} |
|||
|
|||
// will load the data & process the response in a special response object
|
|||
function loadResponse() { |
|||
var status = getStatusCode() |
|||
var error = errorFromStatusCode(status) |
|||
var response = { |
|||
body: getBody(), |
|||
statusCode: status, |
|||
statusText: xhr.statusText, |
|||
raw: xhr |
|||
} |
|||
if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE
|
|||
response.headers = parseHeaders(xhr.getAllResponseHeaders()) |
|||
} else { |
|||
response.headers = {} |
|||
} |
|||
|
|||
callback(error, response, response.body) |
|||
} |
|||
|
|||
// will load the data and add some response properties to the source xhr
|
|||
// and then respond with that
|
|||
function loadXhr() { |
|||
var status = getStatusCode() |
|||
var error = errorFromStatusCode(status) |
|||
|
|||
xhr.status = xhr.statusCode = status |
|||
xhr.body = getBody() |
|||
xhr.headers = parseHeaders(xhr.getAllResponseHeaders()) |
|||
|
|||
callback(error, xhr, xhr.body) |
|||
} |
|||
|
|||
function error(evt) { |
|||
callback(evt, xhr) |
|||
} |
|||
} |
|||
|
|||
|
|||
function noop() {} |
|||
|
|||
},{"global/window":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/global/window.js","once":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/once/once.js","parse-headers":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/parse-headers.js"}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/global/window.js":[function(require,module,exports){ |
|||
(function (global){ |
|||
if (typeof window !== "undefined") { |
|||
module.exports = window; |
|||
} else if (typeof global !== "undefined") { |
|||
module.exports = global; |
|||
} else { |
|||
module.exports = {}; |
|||
} |
|||
|
|||
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) |
|||
},{}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/once/once.js":[function(require,module,exports){ |
|||
module.exports = once |
|||
|
|||
once.proto = once(function () { |
|||
Object.defineProperty(Function.prototype, 'once', { |
|||
value: function () { |
|||
return once(this) |
|||
}, |
|||
configurable: true |
|||
}) |
|||
}) |
|||
|
|||
function once (fn) { |
|||
var called = false |
|||
return function () { |
|||
if (called) return |
|||
called = true |
|||
return fn.apply(this, arguments) |
|||
} |
|||
} |
|||
|
|||
},{}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/node_modules/for-each/index.js":[function(require,module,exports){ |
|||
var isFunction = require('is-function') |
|||
|
|||
module.exports = forEach |
|||
|
|||
var toString = Object.prototype.toString |
|||
var hasOwnProperty = Object.prototype.hasOwnProperty |
|||
|
|||
function forEach(list, iterator, context) { |
|||
if (!isFunction(iterator)) { |
|||
throw new TypeError('iterator must be a function') |
|||
} |
|||
|
|||
if (arguments.length < 3) { |
|||
context = this |
|||
} |
|||
|
|||
if (toString.call(list) === '[object Array]') |
|||
forEachArray(list, iterator, context) |
|||
else if (typeof list === 'string') |
|||
forEachString(list, iterator, context) |
|||
else |
|||
forEachObject(list, iterator, context) |
|||
} |
|||
|
|||
function forEachArray(array, iterator, context) { |
|||
for (var i = 0, len = array.length; i < len; i++) { |
|||
if (hasOwnProperty.call(array, i)) { |
|||
iterator.call(context, array[i], i, array) |
|||
} |
|||
} |
|||
} |
|||
|
|||
function forEachString(string, iterator, context) { |
|||
for (var i = 0, len = string.length; i < len; i++) { |
|||
// no such thing as a sparse string.
|
|||
iterator.call(context, string.charAt(i), i, string) |
|||
} |
|||
} |
|||
|
|||
function forEachObject(object, iterator, context) { |
|||
for (var k in object) { |
|||
if (hasOwnProperty.call(object, k)) { |
|||
iterator.call(context, object[k], k, object) |
|||
} |
|||
} |
|||
} |
|||
|
|||
},{"is-function":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/node_modules/for-each/node_modules/is-function/index.js"}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/node_modules/for-each/node_modules/is-function/index.js":[function(require,module,exports){ |
|||
module.exports = isFunction |
|||
|
|||
var toString = Object.prototype.toString |
|||
|
|||
function isFunction (fn) { |
|||
var string = toString.call(fn) |
|||
return string === '[object Function]' || |
|||
(typeof fn === 'function' && string !== '[object RegExp]') || |
|||
(typeof window !== 'undefined' && |
|||
// IE8 and below
|
|||
(fn === window.setTimeout || |
|||
fn === window.alert || |
|||
fn === window.confirm || |
|||
fn === window.prompt)) |
|||
}; |
|||
|
|||
},{}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/node_modules/trim/index.js":[function(require,module,exports){ |
|||
|
|||
exports = module.exports = trim; |
|||
|
|||
function trim(str){ |
|||
return str.replace(/^\s*|\s*$/g, ''); |
|||
} |
|||
|
|||
exports.left = function(str){ |
|||
return str.replace(/^\s*/, ''); |
|||
}; |
|||
|
|||
exports.right = function(str){ |
|||
return str.replace(/\s*$/, ''); |
|||
}; |
|||
|
|||
},{}],"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/parse-headers.js":[function(require,module,exports){ |
|||
var trim = require('trim') |
|||
, forEach = require('for-each') |
|||
, isArray = function(arg) { |
|||
return Object.prototype.toString.call(arg) === '[object Array]'; |
|||
} |
|||
|
|||
module.exports = function (headers) { |
|||
if (!headers) |
|||
return {} |
|||
|
|||
var result = {} |
|||
|
|||
forEach( |
|||
trim(headers).split('\n') |
|||
, function (row) { |
|||
var index = row.indexOf(':') |
|||
, key = trim(row.slice(0, index)).toLowerCase() |
|||
, value = trim(row.slice(index + 1)) |
|||
|
|||
if (typeof(result[key]) === 'undefined') { |
|||
result[key] = value |
|||
} else if (isArray(result[key])) { |
|||
result[key].push(value) |
|||
} else { |
|||
result[key] = [ result[key], value ] |
|||
} |
|||
} |
|||
) |
|||
|
|||
return result |
|||
} |
|||
},{"for-each":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/node_modules/for-each/index.js","trim":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/node_modules/xhr/node_modules/parse-headers/node_modules/trim/index.js"}],"/Users/jloi/code/Squatconf/website/node_modules/valid-email/index.js":[function(require,module,exports){ |
|||
module.exports = require('./lib/valid-email'); |
|||
},{"./lib/valid-email":"/Users/jloi/code/Squatconf/website/node_modules/valid-email/lib/valid-email.js"}],"/Users/jloi/code/Squatconf/website/node_modules/valid-email/lib/valid-email.js":[function(require,module,exports){ |
|||
/*! |
|||
* Valid Email |
|||
* Copyright(c) 2013 John Henry |
|||
* MIT Licensed |
|||
*/ |
|||
|
|||
/** |
|||
* Valid-Email: |
|||
* |
|||
* An alternative to using a regular expression to validate email. |
|||
* Inspired by: |
|||
* http://stackoverflow.com/questions/997078/email-regular-expression
|
|||
* http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address
|
|||
* |
|||
* Examples: |
|||
* console.log(require('valid-email')('john@iamjohnhenry.com'))//#true
|
|||
* console.log(require('valid-email')('iamjohnhenry.com'))//#false
|
|||
* |
|||
* @param {String} email |
|||
* // potential email address
|
|||
* @return {Boolean} |
|||
* @api public |
|||
*/ |
|||
module.exports = function valid(email){ |
|||
var at = email.search("@"); |
|||
if (at <0) return false; |
|||
var user = email.substr(0, at); |
|||
var domain = email.substr(at+1); |
|||
var userLen = user.length; |
|||
var domainLen = domain.length; |
|||
if (userLen < 1 || userLen > 64) return false;// user part length exceeded
|
|||
if (domainLen < 1 || domainLen > 255) return false;// domain part length exceeded
|
|||
if (user.charAt(0) === '.' || user.charAt(userLen-1) === '.') return false;// user part starts or ends with '.'
|
|||
if (user.match(/\.\./)) return false;// user part has two consecutive dots
|
|||
if (!domain.match(/^[A-Za-z0-9.-]+$/)) return false;// character not valid in domain part
|
|||
if (domain.match( /\\.\\./)) return false;// domain part has two consecutive dots
|
|||
if (!user.replace("\\\\","").match(/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/)) if (!user.replace("\\\\","").match(/^"(\\\\"|[^"])+"$/)) return false |
|||
return true; |
|||
} |
|||
},{}],"/Users/jloi/code/Squatconf/website/src/email-client.js":[function(require,module,exports){ |
|||
(function (process){ |
|||
var ready = require('domready') |
|||
, check_email = require('valid-email') |
|||
, loadsvg = require('load-svg') |
|||
|
|||
process.nextTick(function() { |
|||
ready(function() { |
|||
|
|||
var form = document.getElementById('signup-form') |
|||
, input_email = '' |
|||
, status_msg = document.getElementById('status-msg') |
|||
, logoCont = document.getElementById('logoCont') |
|||
|
|||
loadsvg('/assets/img/squatconf_baguette.svg', function (err, svg) { |
|||
logoCont.appendChild(svg); |
|||
}); |
|||
|
|||
for (var n = 0, l = form.childNodes[1].childNodes.length; n < l; n++) { |
|||
var el = form.childNodes[1].childNodes[n] |
|||
if (el.nodeName === 'INPUT' && el.name === 'email') |
|||
input_email = el |
|||
} |
|||
|
|||
document |
|||
.getElementById("signup-form") |
|||
.addEventListener("click", function(e) { |
|||
if (e.srcElement.nodeName === 'BUTTON') { |
|||
if (input_email && input_email.value) { |
|||
var is_valid = check_email(input_email.value) |
|||
if (is_valid) { |
|||
var progress = 0 |
|||
, timerID = null |
|||
e.preventDefault() |
|||
status_msg.className = 'info' |
|||
status_msg.innerHTML = "Sending" |
|||
timerID = setInterval(function() { |
|||
if (++progress < 8) { |
|||
status_msg.innerHTML += "." |
|||
} else { |
|||
clearInterval(timerID) |
|||
form.submit() |
|||
} |
|||
}, 150) |
|||
} else { |
|||
e.preventDefault() |
|||
input_email.value = '' |
|||
status_msg.className = 'error' |
|||
status_msg.innerHTML = "that doesn't look like an email address," |
|||
+ "<br />please try again..." |
|||
setTimeout(function() { status_msg.innerHTML = ' ' }, 2000) |
|||
} |
|||
} |
|||
} |
|||
}) |
|||
}) |
|||
}) |
|||
|
|||
|
|||
}).call(this,require('_process')) |
|||
},{"_process":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/process/browser.js","domready":"/Users/jloi/code/Squatconf/website/node_modules/domready/ready.js","load-svg":"/Users/jloi/code/Squatconf/website/node_modules/load-svg/index.js","valid-email":"/Users/jloi/code/Squatconf/website/node_modules/valid-email/index.js"}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/process/browser.js":[function(require,module,exports){ |
|||
// shim for using process in browser
|
|||
|
|||
var process = module.exports = {}; |
|||
|
|||
process.nextTick = (function () { |
|||
var canSetImmediate = typeof window !== 'undefined' |
|||
&& window.setImmediate; |
|||
var canPost = typeof window !== 'undefined' |
|||
&& window.postMessage && window.addEventListener |
|||
; |
|||
|
|||
if (canSetImmediate) { |
|||
return function (f) { return window.setImmediate(f) }; |
|||
} |
|||
|
|||
if (canPost) { |
|||
var queue = []; |
|||
window.addEventListener('message', function (ev) { |
|||
var source = ev.source; |
|||
if ((source === window || source === null) && ev.data === 'process-tick') { |
|||
ev.stopPropagation(); |
|||
if (queue.length > 0) { |
|||
var fn = queue.shift(); |
|||
fn(); |
|||
} |
|||
} |
|||
}, true); |
|||
|
|||
return function nextTick(fn) { |
|||
queue.push(fn); |
|||
window.postMessage('process-tick', '*'); |
|||
}; |
|||
} |
|||
|
|||
return function nextTick(fn) { |
|||
setTimeout(fn, 0); |
|||
}; |
|||
})(); |
|||
|
|||
process.title = 'browser'; |
|||
process.browser = true; |
|||
process.env = {}; |
|||
process.argv = []; |
|||
|
|||
function noop() {} |
|||
|
|||
process.on = noop; |
|||
process.addListener = noop; |
|||
process.once = noop; |
|||
process.off = noop; |
|||
process.removeListener = noop; |
|||
process.removeAllListeners = noop; |
|||
process.emit = noop; |
|||
|
|||
process.binding = function (name) { |
|||
throw new Error('process.binding is not supported'); |
|||
} |
|||
|
|||
// TODO(shtylman)
|
|||
process.cwd = function () { return '/' }; |
|||
process.chdir = function (dir) { |
|||
throw new Error('process.chdir is not supported'); |
|||
}; |
|||
|
|||
},{}]},{},["/Users/jloi/code/Squatconf/website/src/email-client.js"]); |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
@ -0,0 +1,237 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>SquatConf.386</title> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|||
<meta name="description" content="Squatconf webSite"> |
|||
<link rel="icon" href="favicon.ico" type="image/x-icon" /> |
|||
<link href="assets/css/bootstrap.css" rel="stylesheet"> |
|||
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> |
|||
<link href="assets/css/squatconf.css" rel="stylesheet"> |
|||
</head> |
|||
|
|||
<body> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
|
|||
<div class="span3 leftCol"> |
|||
<!-- <ul class="nav nav-list"> |
|||
<li><a href="#"><i class="icon-chevron-right"></i> SquatConf</a></li> |
|||
<li><a href="https://github.com/squatconf/organisation/blob/master/code_of_conduct.md#squatconf-code-of-conduct"><i class="icon-chevron-right"></i> Code of Conduct</a></li> |
|||
<li><a href="https://github.com/squatconf/talks#squatconf-call-for-papers"><i class="icon-chevron-right"></i> Submit a talk</a></li> |
|||
|
|||
</ul> --> |
|||
<!-- <br /> --> |
|||
|
|||
<div class="formCont"> |
|||
<fieldset> |
|||
<legend>JOIN US</legend> |
|||
<label class="text-info">Squatconf's mailing list</label> |
|||
<!-- <label class="checkbox text-info"> |
|||
<input type="checkbox" name="paris"> Paris Nov.2014? |
|||
</label> --> |
|||
<a href="https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/squatconf"><button type="submit" class="btn">Subscribe</button></a> |
|||
<div id="status-msg"> </div> |
|||
<span class="help-block">we'll send you info about future events, and talk about all and nothing</span> |
|||
</fieldset> |
|||
</form> |
|||
</div> |
|||
<br /> |
|||
<ul class="nav nav-list"> |
|||
<li><a href="https://twitter.com/squatconf">@squatconf</a> |
|||
</ul> |
|||
<br> |
|||
<ul class="nav nav-list"> |
|||
<li><a href="#">#squatconf on freenode</a></li> |
|||
</ul> |
|||
<br> |
|||
<!-- <fieldset> |
|||
<legend>SUPPORT US</legend> |
|||
<ul class="nav nav-list"> |
|||
<li> |
|||
<button type="submit" class="btn">Donate BTC</button> |
|||
</li> |
|||
</ul> |
|||
</fieldset> --> |
|||
|
|||
</div> |
|||
|
|||
|
|||
<!-- content --> |
|||
<div class="span9"> |
|||
<div class="page-header"> |
|||
<pre class="maxW"><small> |
|||
.d8888b. 888 .d888 |
|||
d88P Y88b 888 d88P" |
|||
Y88b. 888 888 |
|||
"Y888b. .d88888888 888 8888b. 888888 .d8888b .d88b. 88888b. 888888 |
|||
"Y88b.d88" 888888 888 "88b888 d88P" d88""88b888 "88b888 |
|||
"888888 888888 888.d888888888 888 888 888888 888888 |
|||
Y88b d88PY88b 888Y88b 888888 888Y88b. Y88b. Y88..88P888 888888 |
|||
"Y8888P" "Y88888 "Y88888"Y888888 "Y888 "Y8888P "Y88P" 888 888888 |
|||
888 |
|||
888 |
|||
888 |
|||
</small></pre> |
|||
<pre class="dskW"> |
|||
____ _ ____ __ |
|||
/ ___| __ _ _ _ __ _| |_ / ___|___ _ __ / _| |
|||
\___ \ / _` | | | |/ _` | __| | / _ \| '_ \| |_ |
|||
___) | (_| | |_| | (_| | |_| |__| (_) | | | | _| |
|||
|____/ \__, |\__,_|\__,_|\__|\____\___/|_| |_|_| |
|||
|_| |
|||
<br></pre> |
|||
<pre class="tblW"> |
|||
__ |
|||
(_ _ _ |_ |
|||
__)(_||_|(_||_ |
|||
| |
|||
__ _ |
|||
/ _ _ (_ |
|||
\__(_)| )| |
|||
<br></pre> |
|||
</div> |
|||
<div class="page-header"> |
|||
<h1>Squatconf will never stop !</h1><br> |
|||
<p> |
|||
thanks to all of you for attenting/helping/participate. |
|||
<br> |
|||
We had a blast making this, and will make more soon !</p> |
|||
<p> |
|||
subscribe to the mailing list if you want more infos or help making the next events. |
|||
</p> |
|||
<p> |
|||
I'm terrible at writting, but <a href="https://twitter.com/olizilla">@Olizilla</a> wrote something that sum up what happened pretty well <a href="http://blog.tableflip.io/squatconf-information-wants-to-be-free/">here</a> |
|||
</p> |
|||
</div> |
|||
<div> |
|||
<h2 id="what-is-squatconf-">Why / What is SquatConf?</h2> |
|||
<p> |
|||
Squatconfs are tech conference that happen... in squats, hence the name. <br> |
|||
It is not a conference about squatting or squatters, but will also talk about technologies that can be used in squats. <br> |
|||
On top of that, the name sounded nice, isn't it ? |
|||
</p> |
|||
<p> |
|||
It started because some of us are lucky enough to attend marvelous conventions, made with love by amazing people. Great events with top-notch speakers, incredible venues, and amazing parties. |
|||
</p> |
|||
<p> |
|||
These conferences are run with huge contributions from volunteers, and financial support from sponsors, providing top-notch events at affordable prices. |
|||
</p> |
|||
<p> |
|||
But even then, they're not affordable for everyone. |
|||
</p> |
|||
<p> |
|||
We're building an alternative model: SquatConf. |
|||
</p> |
|||
<p> |
|||
SquatConf won't be your everyday conference, but we'll have good talks from amazing people. It'll be donation-based, and you'll get to contribute if you want to. |
|||
</p> |
|||
|
|||
<h2 id="how-is-this-possible-">How is this possible?</h2> |
|||
<p> |
|||
Conference costs are huge, and ticket prices are often <a href="http://2014.lxjs.org/about/">nowhere near the true per-attendee cost</a>, even for a non-profit conference. |
|||
</p> |
|||
<p> |
|||
Fancy venues, transportation, hotels and food are really nice perks to have, but… |
|||
</p> |
|||
<p> |
|||
If you hold a conference in a squat… |
|||
the speakers advance their travel expenses… |
|||
tell people to bring some food… |
|||
and the wifi will be dodgy for sure… |
|||
</p> |
|||
<p>You'll have a zero-cost conference made with love, but a little rougher around the edges.</p> |
|||
<h2 id="where-and-when-">Where and when?</h2> |
|||
<div> |
|||
past |
|||
<ul> |
|||
<li>14/11/15 : Le hangard56</li> |
|||
</ul> |
|||
</div> |
|||
<br> |
|||
<div> |
|||
future |
|||
<ul> |
|||
<li>???</li> |
|||
</ul> |
|||
</div> |
|||
|
|||
<h2 id="the-plan">The Plan</h2> |
|||
<p>We are a bunch of crazy programmers that believe in anarchy and decentralised systems, conferences included.</p> |
|||
<p>We will provide a space, we will provide a context, some talks, and the rest will be up to you…</p> |
|||
|
|||
<h2 id="who-is-behind-this-">Who is behind this?</h2> |
|||
<p>You, amongst other crazy ppl</p> |
|||
|
|||
<h2 id="okay-so-you-re-a-bunch-of-idealists-running-a-10-people-conference-in-a-dump-">Okay, so you're a bunch of idealists, running a 10-people conference in a dump.</h2> |
|||
<p>What you'll get out of SquatConf is in the end exactly what you put into SquatConf.</p> |
|||
<ul> |
|||
<li>Tickets will be donation-based. You want a cheap conference? Give us nothing. You want food? Contribute.</li> |
|||
<li>This won't be a 400-people event, but do you <em>need</em> that many people?</li> |
|||
<li>We already have speakers lined up you're probably prepared to pay for :)</li> |
|||
<li>You have ideas for improvements? Suggestions are always welcome.</li> |
|||
<li>We plan to make SquatConf zero-sum. We'll split any profits with attendees — ROI on a conference!</li> |
|||
</ul> |
|||
|
|||
<!-- <h2 id="i-want-to-give-a-talk-">I want to give a talk!</h2> |
|||
<p>Please see <a href="https://github.com/squatconf/talks">our talks repository</a> to propose a talk.</p> --> |
|||
|
|||
|
|||
|
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div class="parisCont"> |
|||
<div class="container"> |
|||
<div class="row"> |
|||
<div class="span3"></div> |
|||
<div class="span9"> |
|||
<div id="logo-wrapper"> |
|||
<div id="logoCont"> |
|||
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="335" height="328" id="svg3956" version="1.1" inkscape:version="0.48.2 r9819" sodipodi:docname="squatconf_baguette.svg.2014_09_22_22_27_31.0.svg"> |
|||
<defs id="defs3958"></defs> |
|||
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.80800781" inkscape:cx="150.80201" inkscape:cy="176.63891" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="681" inkscape:window-height="766" inkscape:window-x="651" inkscape:window-y="301" inkscape:window-maximized="0" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0"></sodipodi:namedview> |
|||
<metadata id="metadata3961"> |
|||
<rdf:rdf> |
|||
<cc:work rdf:about=""> |
|||
<dc:format>image/svg+xml</dc:format> |
|||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"></dc:type> |
|||
<dc:title></dc:title> |
|||
</cc:work> |
|||
</rdf:rdf> |
|||
</metadata> |
|||
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(-214.29711,-324.79959)"> |
|||
<g id="logo" inkscape:label="#g3121"> |
|||
<path style="fill:#ff0000;fill-opacity:1;stroke:#ffffff;stroke-width:2.0791173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0" d="m 369.71888,411.36916 c -10.66036,0.0817 -21.01707,3.54098 -30.66698,8.44641 -14.13765,7.70147 -28.24787,15.46487 -41.06257,25.2093 -9.79435,12.23394 -20.35165,22.98081 -30.40709,35.15007 -8.39427,12.32287 -10.19516,27.91569 -19.03692,40.08799 -6.47603,18.02401 -2.55053,38.07315 8.05658,53.66721 6.64885,13.94456 10.4909,30.08235 24.42963,39.04842 14.33693,7.06378 22.20514,25.56175 39.82809,25.85902 18.64854,3.95426 38.1211,19.02256 57.9554,10.20067 15.92751,-6.42788 33.25752,-0.89096 49.24909,-6.62718 18.84688,-3.48088 31.76488,-19.51381 43.27158,-33.52577 9.321,-17.00389 19.9596,-33.52425 22.5455,-53.27738 7.06,-19.76868 4.7974,-41.31533 -0.9746,-60.87915 1.8746,-16.52668 -9.7327,-28.30394 -19.6867,-39.37329 -9.9673,-12.23627 -26.3998,-15.85129 -36.31953,-28.13305 -15.52839,-12.30385 -37.10853,-14.62535 -56.39606,-14.74874 -3.60758,-0.78146 -7.23196,-1.13175 -10.78542,-1.10453 z m -5.45768,36.44952 c 11.26286,-0.24438 22.56114,3.39715 33.9156,2.98873 17.66434,1.23658 27.66529,9.90319 42.68689,20.85615 12.1618,11.59983 24.7817,31.78529 27.2234,49.18412 2.798,16.75365 -0.7848,27.14271 -8.4464,41.32245 -3.5096,14.81854 -17.038,23.21649 -23.58497,36.44953 -6.79997,12.87861 -20.97732,17.21368 -33.52577,22.22057 -18.84113,10.29753 -41.46785,4.56713 -59.44976,-4.74299 -21.02672,-4.07149 -41.46141,-16.0137 -53.40733,-34.17549 -5.44679,-14.87692 -9.88069,-30.45978 -11.76001,-46.26036 1.09173,-12.72699 4.85458,-25.63302 11.63007,-36.5145 4.65878,-11.01562 11.37851,-21.34451 21.63581,-27.93814 2.20673,-1.29758 4.61458,-2.33938 6.88708,-3.50851 11.05818,-7.14326 21.69078,-15.4568 34.95516,-18.06233 3.74536,-1.24331 7.48594,-1.73777 11.24023,-1.81923 z" id="path3878-0" inkscape:connector-curvature="0"></path> |
|||
<path style="fill:#ff0000;fill-opacity:1;stroke:#ffffff;stroke-width:2.0791173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0" d="m 370.30363,325.80049 c -0.52252,8.63487 -2.01839,13.36128 -1.49437,19.23184 -6.95048,-0.57945 -8.13741,7.14655 -8.44641,17.73747 6.81196,10.05699 0.40281,29.59396 1.10453,38.07382 0.6023,10.56968 -3.83221,28.92103 -3.31359,42.8818 -1.52815,13.43763 -1.52381,26.08525 -4.74299,39.24334 -0.63887,12.86917 -8.60767,6.60631 -12.99448,10.72045 4.31579,8.77011 2.34472,20.88608 -0.7147,28.97769 -1.47917,8.04586 -5.57076,12.74741 -10.72045,22.8703 3.22708,13.44272 -26.10841,1.87351 -12.86454,13.57923 -7.32348,-2.71171 0.11872,9.47283 -5.97746,13.83912 -7.89636,12.11783 -17.83244,23.41804 -25.72907,35.86478 -4.11495,13.2016 -18.31969,20.2223 -21.63582,33.33085 2.6847,1.63851 7.29061,0.35014 13.25437,1.03956 12.45997,2.52317 33.02901,6.30881 30.34212,-13.12443 6.11269,-10.8652 11.15634,-21.82287 17.99736,-32.16135 10.63822,-8.79784 25.1122,-10.07993 37.87892,-12.27978 12.03466,-5.5931 24.17556,0.92477 35.28002,4.2232 12.47452,1.34421 24.07391,8.71731 34.04555,16.11316 8.61737,10.4158 12.50187,24.29432 17.08777,36.77439 13.799,-2.72294 27.0187,1.2877 40.9976,2.14409 -1.2084,-11.04481 -14.0856,-20.8086 -19.3618,-31.51162 -3.8643,-5.49343 -7.1408,-10.91518 -12.4747,-15.33349 -6.8319,-5.28019 -10.0716,-13.63895 -16.3081,-19.29681 -14.56822,-2.57925 2.7483,-27.14508 -10.65547,-23.45504 11.42057,-7.7958 1.51372,-2.76149 -8.05658,-4.28818 -8.50814,-7.52855 -9.10167,-23.72448 -17.67249,-33.65571 -8.90316,-21.68615 11.61918,-21.7931 -9.16112,-27.8082 -5.00709,-7.61751 -4.71803,-20.98316 -8.7063,-31.18676 -1.04945,-10.86153 -1.71901,-26.57089 -3.31359,-36.31958 -1.15441,-9.14552 -9.82468,-51.08453 -4.02829,-58.28025 4.73273,-9.37087 1.36905,-19.58283 -7.92664,-18.842 0.0904,-2.73944 0.37859,-10.20825 -1.68928,-19.10189 z m 13.9041,185.88608 c 0.22182,-0.0231 0.40651,0.0166 0.51978,0.12994 3.71053,3.71054 3.29132,18.81973 5.97746,21.50587 1.31826,1.31827 2.45855,19.87119 7.14696,24.55957 0.0393,0.0393 2.16963,2.34702 3.57349,3.57349 0.6986,-0.099 1.23447,-0.0146 1.23447,0.58475 0,0.46622 -0.533,0.0281 -1.23447,-0.58475 -0.92652,0.1314 -2.12856,0.58475 -2.92376,0.58475 -4.23703,0 -7.53472,1.1695 -10.78542,1.1695 -8.28768,0 -17.23458,0.64973 -25.72908,0.64973 -2.32364,0 -10.88825,-1.06667 -12.53968,0.58475 -0.10541,0.10541 -2.40537,1.0444 -3.24862,1.49436 0.14741,-0.53633 -0.17589,-1.64341 0.25989,-2.07911 1.72887,-1.72887 2.28531,-4.05083 3.57349,-6.62719 0.64182,-1.28365 0.4101,-4.50335 1.23447,-5.32774 5.4549,-5.45489 10.08547,-37.97647 12.53968,-37.684 5.68726,1.13744 13.70086,0.58891 18.51714,-1.81923 0.22629,-0.1131 1.21871,-0.64565 1.8842,-0.71469 z m -38.00887,54.31694 c -0.0566,0.13431 -0.15032,0.19481 -0.32486,0.19481 -0.0869,0 0.12641,-0.0859 0.32486,-0.19481 z" id="path3874-6" inkscape:connector-curvature="0"></path> |
|||
</g> |
|||
<g id="baguette" inkscape:label="#g3116"> |
|||
<path style="fill:#efbb60;fill-opacity:1;stroke:#ffffff;stroke-width:2.0791173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0" d="m 215.55871,590.73041 c -1.04251,-3.37343 1.57583,-4.12969 2.39109,-6.57546 4.23903,-12.71711 19.52487,-14.54459 29.88848,-19.7264 12.76195,-6.38097 23.68638,-13.07613 38.25725,-17.93309 2.96655,-0.98885 5.44679,-4.40594 8.36876,-5.37992 3.49751,-1.16583 6.89215,-3.14718 10.1621,-4.78216 1.58352,-0.79177 3.08036,-3.01936 4.78216,-3.58662 2.81196,-0.93731 5.45039,-3.2116 8.36876,-4.18439 12.73719,-4.24573 24.86379,-11.07752 38.25725,-15.54201 5.13944,-1.71313 9.5612,-5.57812 14.34648,-7.17322 9.5052,-3.16841 20.16469,-5.12752 29.88847,-8.36878 5.25713,-1.75237 9.79641,-4.85952 14.94424,-6.57546 5.19923,-1.73307 10.76821,-2.24372 16.13979,-3.58662 7.25506,-1.81376 13.56915,-5.93283 20.92195,-7.77102 15.511,-3.87776 31.7145,-6.28475 47.2238,-10.16208 4.6306,-1.15765 9.7853,-1.46844 14.3465,-2.98883 8.1871,-2.72907 26.5833,-11.67391 33.4751,-4.78216 3.5914,3.59147 -14.5298,11.41872 -16.1398,11.95538 -2.577,0.85899 -4.4564,3.87656 -7.1733,4.78216 -4.2191,1.4064 -8.2245,7.72292 -11.9554,8.96655 -6.287,2.09568 -12.4516,7.72022 -18.5308,10.75984 -1.0309,0.51546 -1.8622,2.01552 -2.9889,2.39109 -8.8466,2.94888 -16.5243,9.06267 -25.7041,11.35762 -13.2999,3.32498 -26.86622,6.96286 -40.05053,11.35761 -15.15013,5.05005 -31.09534,7.1789 -45.43048,14.34647 -3.03665,1.51834 -7.0549,0.75759 -10.16208,1.79333 -7.71492,2.57163 -14.50556,7.027 -22.11748,9.56431 -3.22658,1.07553 -7.71816,0.27247 -10.75985,1.7933 -4.09671,2.04835 -9.23623,4.47353 -13.7487,5.97769 -5.79748,1.9325 -12.66029,2.14578 -17.93308,4.78216 -9.00923,4.50461 -29.014,12.27644 -35.26842,18.53086 -0.0572,0.0572 -22.86586,6.94966 -25.70408,8.36878 -3.11853,1.55925 -5.54237,3.96671 -8.36878,5.37992 -0.79703,0.39851 -2.19183,-0.39852 -2.98884,0 -1.14131,0.57066 -8.11542,3.41441 -8.96654,2.98886 -3.4656,-1.7328 -3.36662,-4.21595 -7.77102,-5.97771 z" id="path3876-4" inkscape:connector-curvature="0"></path> |
|||
<path inkscape:connector-curvature="0" id="path3893-5" d="m 501.12939,469.05969 c -0.5381,0.11269 -1.0981,0.19336 -1.6243,0.32486 -7.1569,1.78921 -14.4496,3.22598 -21.7658,4.67802 -1.6545,5.96825 -6.1026,13.48418 0.5848,16.82785 0.6376,0.31882 1.7013,-0.31881 2.339,0 10.6416,5.32084 17.4918,-10.64759 19.7516,-19.68664 0.1647,-0.65868 0.4047,-1.40419 0.7147,-2.14409 z m -47.6248,10.20067 c -0.4082,0.0998 -0.8272,0.15801 -1.2345,0.25989 -7.3527,1.83819 -13.66604,5.98293 -20.9211,7.79669 -0.0208,0.004 -0.0443,-0.004 -0.0649,0 -2.05473,6.38832 -5.70587,13.07116 -2.01414,16.76288 0.59186,0.59185 1.28996,1.75426 2.40397,1.75426 3.87814,0 16.57157,2.13685 18.51717,-1.75426 0.7738,-1.54767 -0.4243,-4.28063 0,-5.97746 0.8014,-3.20579 1.7207,-11.83737 3.3136,-18.842 z m -40.67274,12.53968 c -4.21034,1.75808 -8.10396,4.17403 -12.53968,5.6526 -4.73991,1.57996 -9.74124,2.89899 -14.68376,4.15823 -0.20625,0.51932 -0.4781,1.02118 -0.58475,1.23448 -0.75425,1.50848 -0.58476,4.80455 -0.58476,6.56221 0,8.81837 4.21951,8.38144 11.37018,8.38144 2.1997,0 7.01203,-0.19231 8.96619,-1.1695 0.854,-0.42701 2.98647,-1.23221 3.57348,-1.81923 2.20767,-2.20767 2.53975,-13.03184 4.4831,-23.00023 z M 370.08,505.96402 c -4.66284,1.65656 -9.00961,5.40721 -14.03404,7.082 -2.99428,0.9981 -5.94763,2.13421 -8.83625,3.31359 -1.12682,6.57228 -3.24742,13.51547 -2.79381,13.96907 0.92238,0.9224 2.47512,1.81923 4.15823,1.81923 1.15769,0 3.79489,0.50653 4.80796,0 6.73387,-3.36694 11.86519,-5.64329 14.3589,-13.12443 1.23751,-3.71255 1.66211,-8.40464 2.33901,-13.05946 z m -40.34787,17.93239 c -3.95802,1.69978 -7.93427,3.3378 -11.95492,4.67802 -2.91838,0.97279 -5.56948,3.22092 -8.38145,4.15823 -1.7018,0.56727 -3.15946,2.78171 -4.74298,3.57348 -0.002,0.006 -0.0622,-0.006 -0.0649,0 -1.62373,4.09603 -2.73739,8.30793 0.32486,11.37018 2.53557,2.53556 10.11678,-0.25043 11.95493,-1.16951 2.20126,-1.10062 5.41726,-2.42855 7.21193,-4.2232 4.36663,-4.36665 4.33014,-11.75367 5.6526,-18.3872 z m -35.34499,17.21769 c -2.89711,0.99923 -5.36939,4.41035 -8.31647,5.39271 -5.72132,1.90711 -10.85938,4.08865 -15.7883,6.43227 -2.83336,4.21595 -5.88255,9.19105 -2.98873,12.08487 1.08956,1.08956 4.72739,0.66532 5.39271,0 0.002,-0.002 5.15617,-1.40858 5.97746,-1.81923 2.3056,-1.15278 5.40161,-4.23212 7.14697,-5.97746 1.39912,-1.39912 1.69049,-5.26397 2.98873,-6.56221 2.3336,-2.3336 4.07719,-5.86266 5.58763,-9.55095 z" style="fill:#f2c77b;fill-opacity:1;stroke:#ffffff;stroke-width:2.0791173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0"></path> |
|||
<path inkscape:connector-curvature="0" id="path3898-5" d="m 541.21739,464.44665 c -0.3007,0.0187 -0.5726,0.0264 -0.7797,0.12995 -3.6334,1.81671 -10.1365,0.65051 -13.1244,3.63845 -1.7841,1.78411 -3.4776,5.23187 -4.808,6.56221 -2.8695,2.8695 -8.7574,2.77991 -11.9549,5.97747 -3.2597,3.25966 -6.279,9.26773 -9.551,12.53967 -1.3945,1.39451 -7.0402,-0.17173 -8.3814,1.16951 -1.1646,1.16461 -8.2083,3.55188 -10.7205,4.80796 -1.405,0.70251 -7.171,0.0208 -8.3814,-0.58476 -1.3914,-0.69571 -7.0966,-5.15802 -7.7967,-4.80795 -6.4562,3.22807 -8.5969,12.23537 -14.2939,17.93238 -0.9811,0.98103 -21.0614,3.53583 -23.32512,2.40398 -1.2788,-0.63939 -2.35344,-1.1695 -3.57349,-1.1695 -0.62053,0 -4.53386,-5.08205 -5.97746,-3.63846 -1.93867,1.93868 -2.39431,7.1373 -4.2232,8.9662 -4.77301,4.77301 -8.24641,5.32518 -14.35891,8.38144 -2.35294,1.17647 -12.19926,-1.16951 -14.94365,-1.16951 -0.46806,0 -2.69047,0.2983 -2.98874,0 -0.41746,-0.41744 -0.6225,-1.23447 -1.75425,-1.23447 -0.44928,0 -1.1451,-1.25891 -1.81923,-0.58475 -4.90742,4.90742 -7.89177,11.71008 -15.52841,15.5284 -2.78512,1.39266 -16.07918,3.07069 -19.75161,1.23448 -1.12599,-0.563 -7.24811,-3.47233 -7.73172,-2.98873 -1.036,1.036 -0.93543,3.27446 -2.40398,4.74299 -4.18044,4.18046 -6.86572,8.50072 -13.77415,11.95492 -5.25705,2.62852 -21.96504,-0.12558 -22.09062,0 -1.94566,1.94566 -4.34789,6.16712 -6.56221,8.38144 -3.35358,3.35358 -9.52964,4.72168 -12.60465,7.79669 -1.82195,1.82195 -8.93956,-0.61138 -10.72045,1.1695 -0.53411,0.53411 -9.64646,2.98874 -10.78542,2.98874 -1.35417,0 -6.32651,-1.40522 -7.14697,-0.58476 -0.64089,0.64089 -13.04392,11.00506 -13.77415,11.37018 -2.03941,1.0197 -4.11046,1.12172 -5.39271,2.40398 -1.30034,1.30036 -6.39549,-3.53854 -11.24023,-5.91249 -0.36335,0.73682 -0.69977,1.44956 -0.97459,2.27403 -0.81526,2.44577 -3.44649,3.25376 -2.40398,6.62719 4.40441,1.76176 4.26612,4.24466 7.73172,5.97746 0.85113,0.42555 7.82488,-2.41808 8.9662,-2.98873 0.797,-0.39853 2.1917,0.3985 2.98873,0 2.82641,-1.41322 5.26291,-3.83346 8.38144,-5.39271 2.83822,-1.41912 25.6719,-8.32427 25.72908,-8.38144 6.25442,-6.25442 26.27079,-14.01253 35.28002,-18.51714 5.27278,-2.63639 12.13491,-2.87546 17.93238,-4.80796 4.51248,-1.50416 9.61247,-3.92912 13.70918,-5.97746 3.04169,-1.52084 7.55884,-0.67873 10.78542,-1.75426 7.61192,-2.53731 14.37571,-7.04428 22.09063,-9.61592 3.10717,-1.03573 7.16401,-0.23591 10.20067,-1.75425 14.33514,-7.16757 30.26558,-9.30885 45.41571,-14.35891 13.18431,-4.39475 26.72302,-8.04518 40.02302,-11.37017 9.1797,-2.29495 16.8824,-8.4213 25.7291,-11.37017 1.1267,-0.37557 1.9578,-1.82355 2.9887,-2.33901 6.0793,-3.03963 12.2301,-8.68973 18.5171,-10.78542 3.7309,-1.24362 7.7358,-7.55979 11.955,-8.96619 2.7168,-0.9056 4.635,-3.94897 7.2119,-4.80796 1.2194,-0.40645 11.8427,-5.00843 15.3985,-8.77128 -0.8496,-0.12869 -1.6977,-0.19481 -2.5339,-0.19481 -0.715,0 -1.957,-0.18816 -2.8588,-0.12995 z" style="fill:#e8b151;fill-opacity:1;stroke:#ffffff;stroke-width:2.0791173px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0"></path> |
|||
</g> |
|||
</g> |
|||
</svg> |
|||
</div> |
|||
<div class="attribution">logo image by <a href="http://substack.net">substack</a></div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- <script src="assets/js/email.js"></script> --> |
|||
<script> |
|||
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]= |
|||
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date; |
|||
e=o.createElement(i);r=o.getElementsByTagName(i)[0]; |
|||
e.src='//www.google-analytics.com/analytics.js'; |
|||
r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); |
|||
ga('create','UA-8478831-9','auto');ga('send','pageview'); |
|||
</script> |
|||
</body> |
|||
</html> |
@ -1,43 +1,15 @@ |
|||
#!/usr/bin/env node
|
|||
|
|||
var fs = require('fs') |
|||
, http = require('http') |
|||
, stack = require('stack') |
|||
, route = require('tiny-route') |
|||
, assets = require('ecstatic') |
|||
, config = require('./config') |
|||
, db = require('level')(config.db_path, config.db_opts) |
|||
, port = process.env.PORT || config.port |
|||
|
|||
// create the level db folder if it does not exists
|
|||
if(!fs.existsSync(config.db_path)){ |
|||
fs.mkdirSync(config.db_path, 0766, function(err){ |
|||
if(err){ |
|||
console.log(err); |
|||
} |
|||
}); |
|||
} |
|||
|
|||
|
|||
stack.errorHandler = function error(req, res, err) { |
|||
res.statusCode = 302 |
|||
res.setHeader('Location', '/') |
|||
res.end() |
|||
} |
|||
|
|||
var app = stack( |
|||
route('/email', require('./src/email-submit')(db)) |
|||
, route('/confirm', require('./src/email-confirm')(db)) |
|||
, assets({ root: __dirname +'/html', handleError: false }) |
|||
) |
|||
var ecstatic = require('ecstatic') |
|||
, app = require('http').createServer( |
|||
ecstatic({ root: __dirname + '/public' }) |
|||
).listen(8000) |
|||
; |
|||
|
|||
process.on('uncaughtException', function (err) { |
|||
console.error('Error at:', new Date) |
|||
console.error(err.stack) |
|||
}) |
|||
|
|||
http.createServer(app).listen(port, function() { |
|||
console.log('[PID='+ process.pid +'] server started on port '+ port) |
|||
console.log('(use Ctrl+c to stop the server)') |
|||
}) |
|||
|
|||
|
|||
|
@ -1,56 +0,0 @@ |
|||
var ready = require('domready') |
|||
, check_email = require('valid-email') |
|||
, loadsvg = require('load-svg') |
|||
|
|||
process.nextTick(function() { |
|||
ready(function() { |
|||
|
|||
var form = document.getElementById('signup-form') |
|||
, input_email = '' |
|||
, status_msg = document.getElementById('status-msg') |
|||
, logoCont = document.getElementById('logoCont') |
|||
|
|||
loadsvg('/assets/img/squatconf_baguette.svg', function (err, svg) { |
|||
logoCont.appendChild(svg); |
|||
}); |
|||
|
|||
for (var n = 0, l = form.childNodes[1].childNodes.length; n < l; n++) { |
|||
var el = form.childNodes[1].childNodes[n] |
|||
if (el.nodeName === 'INPUT' && el.name === 'email') |
|||
input_email = el |
|||
} |
|||
|
|||
document |
|||
.getElementById("signup-form") |
|||
.addEventListener("click", function(e) { |
|||
if (e.srcElement.nodeName === 'BUTTON') { |
|||
if (input_email && input_email.value) { |
|||
var is_valid = check_email(input_email.value) |
|||
if (is_valid) { |
|||
var progress = 0 |
|||
, timerID = null |
|||
e.preventDefault() |
|||
status_msg.className = 'info' |
|||
status_msg.innerHTML = "Sending" |
|||
timerID = setInterval(function() { |
|||
if (++progress < 8) { |
|||
status_msg.innerHTML += "." |
|||
} else { |
|||
clearInterval(timerID) |
|||
form.submit() |
|||
} |
|||
}, 150) |
|||
} else { |
|||
e.preventDefault() |
|||
input_email.value = '' |
|||
status_msg.className = 'error' |
|||
status_msg.innerHTML = "that doesn't look like an email address," |
|||
+ "<br />please try again..." |
|||
setTimeout(function() { status_msg.innerHTML = ' ' }, 2000) |
|||
} |
|||
} |
|||
} |
|||
}) |
|||
}) |
|||
}) |
|||
|
@ -1,48 +0,0 @@ |
|||
var sanitize = require('xss-escape') |
|||
, ip = require('./ip-trace') |
|||
|
|||
module.exports = function(db) { |
|||
return function (req, res, next) { |
|||
req.resume() |
|||
|
|||
function error(e) { |
|||
console.error(e) |
|||
return next(e || e.msg || 'ERROR') |
|||
} |
|||
|
|||
var params = require('url').parse(req.url, true) |
|||
|
|||
if (params && params.query.email && params.query.token) { |
|||
|
|||
var email = sanitize(params.query.email) |
|||
, token = sanitize(params.query.token) |
|||
|
|||
db.get(email, function(err, obj) { |
|||
if (err) return error(err) |
|||
|
|||
// db read OK..
|
|||
if (obj && ! obj.verified) { |
|||
if (obj.token === token) { |
|||
obj.verified = true |
|||
obj.trace = obj.trace.concat(ip(req)) |
|||
|
|||
db.put(email, obj, function(err) { |
|||
if (err) return error(err) |
|||
|
|||
// db write OK..
|
|||
res.statusCode = 302 |
|||
res.setHeader('Location', '/verified.html') |
|||
return res.end |