summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Jespersen <laumann.thomas@gmail.com>2016-01-15 11:14:41 +0100
committerThomas Jespersen <laumann.thomas@gmail.com>2016-01-15 11:14:41 +0100
commite15f838c597dfc5473576a95d0efbc184a90f85c (patch)
tree940b87bbc695cf018a1b2cb39d440aff40fb5062
downloadcph.rs-e15f838c597dfc5473576a95d0efbc184a90f85c.zip
Initial commit
-rw-r--r--.gitignore2
-rw-r--r--README.md19
-rw-r--r--_config.yml2
-rw-r--r--_includes/editor.js259
-rw-r--r--_includes/example.rs22
-rw-r--r--_includes/example.rs.html23
-rw-r--r--_includes/include.js38
-rw-r--r--_includes/set_platform.js49
-rw-r--r--_layouts/default.html95
-rw-r--r--css/bootstrap.css601
-rw-r--r--css/ides.css10
-rw-r--r--css/style.css425
-rw-r--r--fonts/FiraSans-Light.woffbin0 -> 83388 bytes
-rw-r--r--fonts/FiraSans-Medium.woffbin0 -> 84076 bytes
-rw-r--r--fonts/FiraSans-Regular.woffbin0 -> 83136 bytes
-rw-r--r--fonts/LICENSE99
-rw-r--r--fonts/fontello.woffbin0 -> 2624 bytes
-rw-r--r--img/cphrs-logo.pngbin0 -> 3123 bytes
-rw-r--r--img/cphrs_sketch_block.pngbin0 -> 12017 bytes
-rw-r--r--img/cphrs_sketch_block_logo.pngbin0 -> 11521 bytes
-rw-r--r--img/cphrs_smallz.pngbin0 -> 6230 bytes
-rw-r--r--img/cphrs_urban_sketch.pngbin0 -> 8872 bytes
-rw-r--r--img/cphrs_varius_multiplex.pngbin0 -> 13575 bytes
-rw-r--r--index.html103
-rw-r--r--logos/cargo.pngbin0 -> 58730 bytes
-rw-r--r--logos/error.pngbin0 -> 38310 bytes
-rw-r--r--logos/favicon.icobin0 -> 23229 bytes
-rw-r--r--logos/forkme.pngbin0 -> 16374 bytes
-rw-r--r--logos/rust-logo-128x128-blk-v2.pngbin0 -> 5758 bytes
-rw-r--r--logos/rust-logo-128x128-blk.pngbin0 -> 3479 bytes
-rw-r--r--logos/rust-logo-128x128.pngbin0 -> 14098 bytes
-rw-r--r--logos/rust-logo-16x16-blk.pngbin0 -> 351 bytes
-rw-r--r--logos/rust-logo-16x16.pngbin0 -> 386 bytes
-rw-r--r--logos/rust-logo-196x196-blk.pngbin0 -> 5650 bytes
-rw-r--r--logos/rust-logo-256x256-blk.pngbin0 -> 7460 bytes
-rw-r--r--logos/rust-logo-256x256.pngbin0 -> 37076 bytes
-rw-r--r--logos/rust-logo-32x32-blk.pngbin0 -> 691 bytes
-rw-r--r--logos/rust-logo-32x32.pngbin0 -> 2078 bytes
-rw-r--r--logos/rust-logo-48x48-blk.pngbin0 -> 1091 bytes
-rw-r--r--logos/rust-logo-512x512-blk.pngbin0 -> 11171 bytes
-rw-r--r--logos/rust-logo-512x512.pngbin0 -> 96029 bytes
-rw-r--r--logos/rust-logo-64x64-blk.pngbin0 -> 1448 bytes
-rw-r--r--logos/rust-logo-64x64.pngbin0 -> 5264 bytes
-rw-r--r--logos/rust-logo-all-blk.icobin0 -> 269444 bytes
-rw-r--r--logos/rust-logo-blk.svg1
-rw-r--r--logos/rust-logo-large-blk.icobin0 -> 254172 bytes
-rw-r--r--logos/rust-logo-small-blk.icobin0 -> 15278 bytes
47 files changed, 1748 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..badbc02
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+_site
+.sass-cache
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3f57112
--- /dev/null
+++ b/README.md
@@ -0,0 +1,19 @@
+# cph.rs
+
+This repository contains the source files for cph.rs.
+
+## Testing Locally
+
+To install jekyll (and any other dependencies, if we get any):
+
+```
+bundle install
+```
+
+To run this website as a developer:
+
+```
+jekyll serve
+```
+
+This will serve the site at `localhost:4000`.
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..d4bacfa
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,2 @@
+name: The Rust Programming Language
+markdown: redcarpet
diff --git a/_includes/editor.js b/_includes/editor.js
new file mode 100644
index 0000000..c99fe52
--- /dev/null
+++ b/_includes/editor.js
@@ -0,0 +1,259 @@
+(function () {
+ "use strict";
+ // ECMAScript 6 Backwards compatability
+ if (typeof String.prototype.startsWith !== 'function') {
+ String.prototype.startsWith = function(str) {
+ return this.slice(0, str.length) === str;
+ };
+ }
+
+ // Regex for finding new lines
+ var newLineRegex = /(?:\r\n|\r|\n)/g;
+
+ // Fetching DOM items
+ var activeCode = document.getElementById("active-code");
+ var editorDiv = document.getElementById("editor");
+ var staticCode = document.getElementById("static-code");
+ var runButton = document.getElementById("run-code");
+ var resultDiv = document.getElementById("result");
+ var playLink = document.getElementById("playlink");
+
+ // Background colors for program result on success/error
+ var successColor = "#E2EEF6";
+ var errorColor = "#F6E2E2";
+ var warningColor = "#FFFBCB";
+
+ // Error message to return when there's a server failure
+ var errMsg = "The server encountered an error while running the program.";
+
+ // Stores ACE editor markers (highights) for errors
+ var markers = [];
+
+ // Status codes, because there are no enums in Javascript
+ var SUCCESS = 0;
+ var ERROR = 1;
+ var WARNING = 2;
+
+ // JS exists, display ACE editor
+ staticCode.style.display = "none";
+ activeCode.style.display = "block";
+
+ // Setting up ace editor
+ var editor = ace.edit("editor");
+ var Range = ace.require('ace/range').Range;
+ editor.setTheme("ace/theme/chrome");
+ editor.getSession().setMode("ace/mode/rust");
+ editor.setShowPrintMargin(false);
+ editor.renderer.setShowGutter(false);
+ editor.setHighlightActiveLine(false);
+
+ // Changes the height of the editor to match its contents
+ function updateEditorHeight() {
+ // http://stackoverflow.com/questions/11584061/
+ var newHeight = editor.getSession().getScreenLength()
+ * editor.renderer.lineHeight
+ + editor.renderer.scrollBar.getWidth();
+
+ editorDiv.style.height = Math.ceil(newHeight).toString() + "px";
+ editor.resize();
+ }
+
+ // Set initial size to match initial content
+ updateEditorHeight();
+
+ // Safely remove all content from the result div
+ function clearResultDiv() {
+ // Clearing the result div will break our reference to
+ // the playlink icon, so let's save it if it exists
+ var newPlayLink = document.getElementById("playlink");
+ if (newPlayLink) {
+ playLink = resultDiv.removeChild(newPlayLink);
+ }
+ resultDiv.innerHTML = "";
+ }
+
+ function escapeHTML(unsafe) {
+ return unsafe
+ .replace(/&/g, "&amp;")
+ .replace(/</g, "&lt;")
+ .replace(/>/g, "&gt;")
+ .replace(/"/g, "&quot;")
+ .replace(/'/g, "&#039;")
+ .replace(newLineRegex, '<br />');
+ }
+
+ // Dispatches a XMLHttpRequest to the Rust playpen, running the program, and
+ // issues a callback to `callback` with the result (or null on error)
+ function runProgram(program, callback) {
+ var req = new XMLHttpRequest();
+ var data = JSON.stringify({
+ version: "beta",
+ optimize: "2",
+ code: program
+ });
+
+ // console.log("Sending", data);
+ req.open('POST', "https://play.rust-lang.org/evaluate.json", true);
+ req.onload = function(e) {
+ var statusCode = false;
+ var result = null;
+
+ if (req.readyState === 4 && req.status === 200) {
+ result = JSON.parse(req.response);
+
+ // handle application errors from playpen
+ if (typeof result['error'] === 'string') {
+ statusCode = ERROR;
+ result = 'Playpen Error: ' + result['error'];
+ } else if (typeof result['result'] === 'string') {
+ statusCode = SUCCESS;
+ result = result['result'];
+
+ // handle rustc errors/warnings
+ // Need server support to get an accurate version of this.
+ if (result.indexOf("error:") !== -1) {
+ statusCode = ERROR;
+ } else if (result.indexOf("warning:") !== -1) {
+ statusCode = WARNING;
+ }
+ }
+ }
+
+ callback(statusCode, result);
+ };
+
+ req.onerror = function(e) {
+ callback(false, null);
+ };
+
+ req.setRequestHeader("Content-Type", "application/json");
+ req.send(data);
+ }
+
+ // The callback to runProgram
+ function handleResult(statusCode, message) {
+ // Dispatch depending on result type
+ if (result == null) {
+ clearResultDiv();
+ resultDiv.style.backgroundColor = errorColor;
+ resultDiv.innerHTML = errMsg;
+ } else if (statusCode === SUCCESS) {
+ handleSuccess(message);
+ } else if (statusCode === WARNING) {
+ handleWarning(message);
+ } else {
+ handleError(message);
+ }
+ }
+
+ // Called on successful program run: display output and playground icon
+ function handleSuccess(message) {
+ resultDiv.style.backgroundColor = successColor;
+ displayOutput(escapeHTML(message), editor.getValue());
+ }
+
+ // Called when program run results in warning(s)
+ function handleWarning(message) {
+ resultDiv.style.backgroundColor = warningColor;
+ handleProblem(message, "warning");
+ }
+
+ // Called when program run results in error(s)
+ function handleError(message) {
+ resultDiv.style.backgroundColor = errorColor;
+ handleProblem(message, "error");
+ }
+
+ // Called on unsuccessful program run. Detects and prints problems (either
+ // warnings or errors) in program output and highlights relevant lines and text
+ // in the code.
+ function handleProblem(message, problem) {
+ // Getting list of ranges with problems
+ var lines = message.split(newLineRegex);
+
+ // Cleaning up the message: keeps only relevant problem output
+ var cleanMessage = lines.map(function(line) {
+ if (line.startsWith("<anon>") || line.indexOf("^") !== -1) {
+ var errIndex = line.indexOf(problem + ": ");
+ if (errIndex !== -1) {return line.slice(errIndex);}
+ return "";
+ }
+
+ // Discard playpen messages, keep the rest
+ if (line.startsWith("playpen:")) {return "";}
+ return line;
+ }).filter(function(line) {
+ return line !== "";
+ }).map(function(line) {
+ return escapeHTML(line);
+ }).join("<br />");
+
+ // Setting message
+ displayOutput(cleanMessage, editor.getValue());
+
+ // Highlighting the lines
+ var ranges = parseProblems(lines);
+ markers = ranges.map(function(range) {
+ return editor.getSession().addMarker(range, "ace-" + problem + "-line",
+ "fullLine", false);
+ });
+
+ // Highlighting the specific text
+ markers = markers.concat(ranges.map(function(range) {
+ return editor.getSession().addMarker(range, "ace-" + problem + "-text",
+ "text", false);
+ }));
+ }
+
+ // Parses a problem message returning a list of ranges (row:col, row:col) where
+ // problems in the code have occured.
+ function parseProblems(lines) {
+ var ranges = [];
+ for (var i in lines) {
+ var line = lines[i];
+ if (line.startsWith("<anon>:") && line.indexOf(": ") !== -1) {
+ var parts = line.split(/:\s?|\s+/, 5).slice(1, 5);
+ var ip = parts.map(function(p) { return parseInt(p, 10) - 1; });
+ // console.log("line:", line, parts, ip);
+ ranges.push(new Range(ip[0], ip[1], ip[2], ip[3]));
+ }
+ }
+
+ return ranges;
+ }
+
+ // Registering handler for run button click
+ runButton.addEventListener("click", function(ev) {
+ resultDiv.style.display = "block";
+ clearResultDiv();
+ resultDiv.innerHTML = "Running...";
+
+ // clear previous markers, if any
+ markers.map(function(id) { editor.getSession().removeMarker(id); });
+
+ // Get the code, run the program
+ var program = editor.getValue();
+ runProgram(program, handleResult);
+ });
+
+ // Display an output message and a link to the Rust playground
+ function displayOutput(message, program) {
+ var programUrl = "https://play.rust-lang.org/?code=" +
+ encodeURIComponent(program) + "&run=1";
+ playLink.href = programUrl;
+
+ clearResultDiv(); // clear resultDiv, then add
+ resultDiv.appendChild(playLink); // playLink icon and message
+ resultDiv.innerHTML += message;
+ }
+
+ // Highlight active line when focused
+ editor.on('focus', function() {
+ editor.setHighlightActiveLine(true);
+ });
+
+ // Don't when not
+ editor.on('blur', function() {
+ editor.setHighlightActiveLine(false);
+ });
+}());
diff --git a/_includes/example.rs b/_includes/example.rs
new file mode 100644
index 0000000..7691b23
--- /dev/null
+++ b/_includes/example.rs
@@ -0,0 +1,22 @@
+// This code is editable and runnable!
+fn main() {
+ // A simple integer calculator:
+ // `+` or `-` means add or subtract by 1
+ // `*` or `/` means multiply or divide by 2
+
+ let program = "+ + * - /";
+ let mut accumulator = 0;
+
+ for token in program.chars() {
+ match token {
+ '+' => accumulator += 1,
+ '-' => accumulator -= 1,
+ '*' => accumulator *= 2,
+ '/' => accumulator /= 2,
+ _ => { /* ignore everything else */ }
+ }
+ }
+
+ println!("The program \"{}\" calculates the value {}",
+ program, accumulator);
+}
diff --git a/_includes/example.rs.html b/_includes/example.rs.html
new file mode 100644
index 0000000..297af76
--- /dev/null
+++ b/_includes/example.rs.html
@@ -0,0 +1,23 @@
+<pre class='rust'>// This code is editable and runnable!
+<span class='kw'>fn</span> main() {
+<span class='comment'>// A simple integer calculator:
+// `+` or `-` means add or subtract by 1
+// `*` or `/` means multiply or divide by 2</span>
+
+<span class='kw'>let</span> program = <span class='string'>"+ + * - /"</span>;
+<span class='kw'>let</span> <span class='kw'>mut</span> accumulator = <span class='number'>0</span>;
+
+<span class='kw'>for</span> token in program.chars() {
+<span class='kw'>match</span> token {
+ <span class='string'>'+'</span> => accumulator <span class='op'>+=</span> <span class='number'>1</span>,
+ <span class='string'>'-'</span> => accumulator <span class='op'>-=</span> <span class='number'>1</span>,
+ <span class='string'>'*'</span> => accumulator <span class='op'>*=</span> <span class='number'>2</span>,
+ <span class='string'>'/'</span> => accumulator <span class='op'>/=</span> <span class='number'>2</span>,
+ _ => { <span class='comment'>/* ignore everything else */</span> }
+}
+}
+
+<span class='prelude-val'>println!</span>(<span class='string'>"The program \"{}\" calculates the value {}"</span>,
+ program, accumulator);
+}
+</pre>
diff --git a/_includes/include.js b/_includes/include.js
new file mode 100644
index 0000000..4f1cf2f
--- /dev/null
+++ b/_includes/include.js
@@ -0,0 +1,38 @@
+include = function() {
+
+ // save references to save a few bytes
+ var args = arguments;
+ var doc = document;
+
+ var toLoad = args.length; // load this many scripts
+ var lastArgument = args[toLoad - 1];
+ var hasCallback = lastArgument.call; // is the last arg a callback?
+ if (hasCallback) {
+ toLoad --;
+ }
+
+ function onScriptLoaded() {
+ var readyState = this.readyState; // we test for "complete" or "loaded" if on IE
+ if (!readyState || /ded|te/.test(readyState)) {
+ toLoad --;
+ if (!toLoad && hasCallback) {
+ lastArgument();
+ }
+ }
+ }
+
+ var script;
+ for (var i = 0; i < toLoad; i ++) {
+
+ script = doc.createElement('script');
+ script.src = arguments[i];
+ script.async = true;
+ script.onload = script.onerror = script.onreadystatechange = onScriptLoaded;
+ (
+ doc.head ||
+ doc.getElementsByTagName('head')[0]
+ ).appendChild(script);
+
+ }
+
+};
diff --git a/_includes/set_platform.js b/_includes/set_platform.js
new file mode 100644
index 0000000..e1eacdd
--- /dev/null
+++ b/_includes/set_platform.js
@@ -0,0 +1,49 @@
+function detect_platform() {
+ "use strict";
+ var os = "unknown";
+
+ if (os == "unknown") {
+ if (navigator.platform == "Linux x86_64") {os = "x86_64-unknown-linux-gnu";}
+ if (navigator.platform == "Linux i686") {os = "i686-unknown-linux-gnu";}
+ }
+
+ // I wish I knew by know, but I don't. Try harder.
+ if (os == "unknown") {
+ if (navigator.appVersion.indexOf("Win")!=-1) {os = "x86_64-pc-windows-gnu";}
+ if (navigator.appVersion.indexOf("Mac")!=-1) {os = "x86_64-apple-darwin";}
+ if (navigator.appVersion.indexOf("Linux")!=-1) {os = "x86_64-unknown-linux-gnu";}
+ }
+
+ return os;
+}
+
+(function () {
+ "use strict";
+ var platform = detect_platform();
+
+ var rec_package_name = "1.5.0";
+ var rec_version_type = "source";
+ var rec_download_file = "rustc-1.5.0-src.tar.gz";
+
+ if (platform == "x86_64-unknown-linux-gnu") {
+ rec_version_type = "Linux binary";
+ rec_download_file = "rust-" + rec_package_name + "-x86_64-unknown-linux-gnu.tar.gz";
+ } else if (platform == "i686-unknown-linux-gnu") {
+ rec_version_type = "Linux binary";
+ rec_download_file = "rust-" + rec_package_name + "-i686-unknown-linux-gnu.tar.gz";
+ } else if (platform == "x86_64-apple-darwin") {
+ rec_version_type = "Mac installer";
+ rec_download_file = "rust-" + rec_package_name + "-x86_64-apple-darwin.pkg";
+ } else if (platform == "x86_64-pc-windows-gnu") {
+ rec_version_type = "Windows installer";
+ rec_download_file = "rust-" + rec_package_name + "-x86_64-pc-windows-gnu.msi";
+ }
+
+ var rec_package_desc = rec_package_name + " (<span>" + rec_version_type + "</span>)";
+ var rec_vers_div = document.getElementById("install-version");
+ rec_vers_div.innerHTML = rec_package_desc;
+
+ var rec_dl_addy = "https://static.rust-lang.org/dist/" + rec_download_file;
+ var rec_inst_link = document.getElementById("inst-link");
+ rec_inst_link.setAttribute("href", rec_dl_addy);
+}());
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644
index 0000000..5c7e3aa
--- /dev/null
+++ b/_layouts/default.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<!-- Page last generated {{ site.time }} -->
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>{{ page.title }}</title>
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="keywords" content="Rust, Rust programming language, rustlang, rust-lang, Mozilla Rust, Copenhagen">
+ <meta name="description" content="A group of people interested in the Rust programming language, based in Copenhagen.">
+ <link rel="stylesheet" href="/css/bootstrap.css">
+ <link rel="stylesheet" href="/css/style.css">
+ </head>
+
+ <style>
+ .event {
+ padding: 1rem 1rem 1rem 0;
+ display: block;
+ }
+
+.event-date {
+ width: 6rem;
+ margin: 0 auto 1rem;
+ display: table-cell;
+ width: auto; }
+ .event-date .event-month {
+ margin: 0;
+ background: #eee;
+ padding: 0.5rem 2rem;
+ text-align: center; }
+ .event-date .event-day {
+ margin: 0;
+ border: 1px solid #eee;
+ padding: 0 2rem;
+ text-align: center;
+ font-size: 2rem; }
+ .event-date .event-year {
+ margin: 0;
+ border: 1px solid #eee;
+ border-top: 0;
+ padding: 0 2rem;
+ padding-top: 0.3rem;
+ text-align: center;
+ font-size: 1rem;
+ color: #aaa;}
+ .event-date .event-time {
+ margin: 0;
+ border-top: 0;
+ padding: 0 1rem;
+ padding-top: 0.3rem;
+ text-align: center;
+ font-size: 1.6rem;
+ font-family: monospace;
+ }
+
+
+.event-desc {
+ padding: 0 0 0 1rem;
+ text-align: left;
+ display: table-cell;
+ vertical-align: top; }
+ .event-desc .event-desc-header {
+ margin: 0 0 0.5rem 0;
+ padding: 0; }
+ .event-desc .event-desc-detail {
+ margin: 0 0 0.25rem;
+ padding: 0; }
+ .event-desc .event-desc-time {
+ font-weight: bold; }
+ .event-desc .rsvp.button {
+ padding-top: 0.5rem;
+ padding-bottom: 0.5rem;
+ margin: 0; }
+ </style>
+
+ <body class="container">
+ <header>
+
+ <div class="row menu">
+ <div class="col-xs-12 col-md-6">
+ <h1>
+ <img class="img-responsive" src="img/cphrs_sketch_block_logo.png" height="128" />
+ </h1>
+ </div>
+ <div class="col-xs-12 col-md-6 cphrs-title-box">
+ <h1 class="chprs-title">
+ Copenhagen<br/>
+ Rust</br>
+ Group
+ </h1>
+ </div>
+ </div>
+ </header>
+ {{ content }}
+ </body>
+</html>
diff --git a/css/bootstrap.css b/css/bootstrap.css
new file mode 100644
index 0000000..1379b03
--- /dev/null
+++ b/css/bootstrap.css
@@ -0,0 +1,601 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+header {
+ display: block;
+}
+a {
+ background: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+b {
+ font-weight: bold;
+}
+img {
+ border: 0;
+}
+pre {
+ overflow: auto;
+}
+pre {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+@media print {* {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ pre {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2 {
+ page-break-after: avoid;
+ }}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 62.5%;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+a {
+ color: #428bca;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #2a6496;
+ text-decoration: underline;
+}
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+h2 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+h2 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+h2 {
+ font-size: 30px;
+}
+p {
+ margin: 0 0 10px;
+}
+
+ul {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul {
+ margin-bottom: 0;
+}
+
+pre {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {.container {
+ width: 750px;
+ }}
+@media (min-width: 992px) {.container {
+ width: 970px;
+ }}
+@media (min-width: 1200px) {.container {
+ width: 1170px;
+ }}
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad;
+}
+.btn-default:active {
+ background-image: none;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e;
+}
+.btn-primary:active {
+ background-image: none;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.container:before,
+.container:after,
+.row:before,
+.row:after {
+ display: table;
+ content: " ";
+}
+.container:after,
+.row:after {
+ clear: both;
+}
+@-ms-viewport {
+ width: device-width;
+} \ No newline at end of file
diff --git a/css/ides.css b/css/ides.css
new file mode 100644
index 0000000..f98f590
--- /dev/null
+++ b/css/ides.css
@@ -0,0 +1,10 @@
+p.clear {
+ clear: both;
+}
+div.contents {
+ margin: 20px;
+ padding: 20px;
+ float: right;
+ border: 1px black solid;
+ border-radius: 20px;
+}
diff --git a/css/style.css b/css/style.css
new file mode 100644
index 0000000..55b93a0
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,425 @@
+@font-face {
+ font-family: 'Fira Sans';
+ font-style: normal;
+ font-weight: 300;
+ src: local('Fira Sans Light'), url("../fonts/FiraSans-Light.woff") format('woff');
+}
+@font-face {
+ font-family: 'Fira Sans';
+ font-style: normal;
+ font-weight: 400;
+ src: local('Fira Sans'), url("../fonts/FiraSans-Regular.woff") format('woff');
+}
+@font-face {
+ font-family: 'Fira Sans';
+ font-style: normal;
+ font-weight: 500;
+ src: local('Fira Sans Medium'), url("../fonts/FiraSans-Medium.woff") format('woff');
+}
+@font-face {
+ font-family: 'fontello';
+ src: url('data:application/octet-stream;base64,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') format('woff'),
+ url('data:application/octet-stream;base64,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BkUrIyA8IC4jOLEmARQrLbA8LLEIBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEmARQrLbA9LLAwKy6xJgEUKy2wPiywMSshIyAgPLAEI0IjOLEmARQrsARDLrAmKy2wPyywABUgR7AAI0KyAAEBFRQTLrAsKi2wQCywABUgR7AAI0KyAAEBFRQTLrAsKi2wQSyxAAEUE7AtKi2wQiywLyotsEMssAAWRSMgLiBGiiNhOLEmARQrLbBELLAII0KwQystsEUssgAAPCstsEYssgABPCstsEcssgEAPCstsEgssgEBPCstsEkssgAAPSstsEossgABPSstsEsssgEAPSstsEwssgEBPSstsE0ssgAAOSstsE4ssgABOSstsE8ssgEAOSstsFAssgEBOSstsFEssgAAOystsFIssgABOystsFMssgEAOystsFQssgEBOystsFUssgAAPistsFYssgABPistsFcssgEAPistsFgssgEBPistsFkssgAAOistsFossgABOistsFsssgEAOistsFwssgEBOistsF0ssDIrLrEmARQrLbBeLLAyK7A2Ky2wXyywMiuwNystsGAssAAWsDIrsDgrLbBhLLAzKy6xJgEUKy2wYiywMyuwNistsGMssDMrsDcrLbBkLLAzK7A4Ky2wZSywNCsusSYBFCstsGYssDQrsDYrLbBnLLA0K7A3Ky2waCywNCuwOCstsGkssDUrLrEmARQrLbBqLLA1K7A2Ky2wayywNSuwNystsGwssDUrsDgrLbBtLCuwCGWwAyRQeLABFTAtAAAAS7gAyFJYsQEBjlm5CAAIAGMgsAEjRLADI3CyBCgJRVJEsgoCByqxBgFEsSQBiFFYsECIWLEGA0SxJgGIUVi4BACIWLEGAURZWVlZuAH/hbAEjbEFAEQAAA==') format('truetype');
+ font-weight: normal;
+ font-style: normal;
+}
+
+body {
+ font-family: 'Fira Sans', "Helvetica Neue", Helvetica, Arial, sans-serif;
+ margin-top: 20px;
+ margin-bottom: 10px;
+ /* max-width: 820px; */
+}
+p {
+ margin-top: 1.2em;
+ margin-bottom: 1.2em;
+}
+.pitch b {
+ font-weight: 400;
+}
+li {
+ margin-bottom: .5em;
+}
+h1 {
+ font-size: 2em;
+ margin-top: 1.2em;
+ margin-bottom: 0.5em;
+}
+
+ul {
+ padding-left: 30px;
+}
+ul.menu {
+ font-size: 1em;
+ margin: 0;
+ padding: 0;
+ text-align: center;
+}
+ul.menu li {
+ list-style-type: none;
+ margin-top: 0em;
+ margin-bottom: 0em;
+}
+ul.menu h2 {
+ font-size: 15.4px;
+ font-weight: 500;
+ margin: .8em 0;
+}
+ul.menu li>ul {
+ margin-top: .5em;
+ padding-left: 0em;
+ line-height: 1.5em;
+}
+
+.menu img {
+ margin: 0 auto 20px auto;
+}
+@media (min-width: 992px) {
+ ul.menu {
+ text-align: left;
+ }
+ .menu img {
+ margin: 0;
+ }
+}
+
+h2 {
+ font-weight: 500;
+ font-size: 18.5px; /* gridfit */
+}
+h3 {
+ font-weight: 500;
+}
+
+.side-header h2 {
+ font-weight: 500;
+ font-size: 18.5px;
+ line-height: 24px;
+ margin-top: 7px;
+}
+
+.side-header h3 {
+ font-size: 1em;
+ margin-top: 0px;
+}
+
+.side-header p {
+ color: #777;
+}
+
+.table-features {
+ width: 100%;
+ margin-bottom: 18px;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ border-collapse: inherit;
+}
+.table-features td {
+ padding: 6px 12px;
+ border: none;
+}
+
+div.install {
+ margin-top: 2.5em;
+ margin-bottom: 1.5em;
+}
+@media (min-width: 662px) {
+ div.install {
+ margin-top: 5em;
+ }
+}
+
+.table-installers {
+ border-spacing: 4px;
+ border: 0px;
+ empty-cells: hide;
+}
+
+.table-installers td {
+ padding: 0px;
+}
+
+.table-installers td.inst-type {
+ border: 0px;
+ color: black;
+ text-align: left;
+ width: 13em;
+}
+
+.table-installers div.inst-button {
+ border: 1px solid #ccc;
+ text-align: center;
+ border-radius: 3px;
+ padding: 0.3em;
+}
+
+.table-installers div.inst-button:hover {
+ border-color: #428BCA;
+ color: white;
+ background-color: #428BCA;
+}
+
+.table-installers a {
+ text-decoration: none;
+}
+
+.install-row {
+ margin-bottom: 0em;
+}
+
+p.pitch {
+ font-size: 25px;
+ font-weight: 300;
+ text-align: center;
+}
+@media (min-width: 992px) {
+ p.pitch {
+ font-size: 25px;
+ margin-top: 2.7em;
+ margin-bottom: 1em;
+ margin-right: 1em;
+ text-align: left;
+ }
+}
+
+p.pitch a {
+ font-size: 80%;
+}
+
+.install-box {
+ color: #777;
+ text-align: right;
+ font-size: 130%;
+ margin-top: 2em;
+}
+
+.version-rec-box-inner {
+ display: block;
+ font-size: 12px;
+ text-align: center;
+}
+
+hr {
+ margin-top: 2em;
+ margin-bottom: 3em;
+}
+
+.asterisk {
+ margin-left: 0px;
+ color: #428BCA;
+}
+
+.footnote {
+ color: #777;
+ text-align: right;
+ font-size: 12px;
+ padding: 0 15px;
+}
+
+.laundry-list {
+ font-size: 16px;
+ list-style-type: square;
+}
+
+.install-box a.btn {
+ display: block;
+ margin:1em auto;
+ max-width: 250px;
+}
+
+ul.laundry-list {
+ column-count: 2;
+ -moz-column-count: 2;
+ -webkit-column-count: 2;
+ margin-bottom: 20px;
+}
+
+.resp-block {
+ display: none;
+}
+
+@media (min-width: 992px) {
+ .install-box a.btn {
+ font-size: 18px;
+ padding: 10px 15px;
+ }
+ ul.laundry-list {
+ column-count: auto;
+ -moz-column-count: auto;
+ -webkit-column-count: auto;
+ }
+ img.ribbon {
+ display: inline !important;
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: 0;
+ width: 149px;
+ height: 149px;
+ }
+ ul.menu .col-xs-12 {
+ padding-left: 0;
+ }
+ .resp-block {
+ display: block;
+ }
+}
+
+#editor {
+ padding: none;
+ margin: none;
+ width: 100%;
+ min-height: 340px;
+ font-size: 13px;
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+ white-space: pre-wrap;
+}
+
+#active-code {
+ position: relative;
+ display: none;
+ padding: 10px;
+ border-radius: 4px;
+ background-color: #FDFDFD;
+ border: 1px solid #CCC;
+}
+
+#run-code {
+ position: absolute;
+ z-index: 10;
+ float: right;
+ right: 8px;
+ top: 8px;
+ outline: none;
+}
+
+ [class^="icon-"]:before, [class*=" icon-"]:before {
+ cursor: pointer;
+ cursor: hand; /* cursor: hand ensures IE 5.5 */
+ font-family: "fontello";
+ font-style: normal;
+ font-weight: normal;
+ speak: none;
+
+ display: inline-block;
+ text-decoration: inherit;
+ width: 1em;
+ margin-right: .2em;
+ text-align: center;
+ /* opacity: .8; */
+
+ /* For safety - reset parent styles, that can break glyph codes*/
+ font-variant: normal;
+ text-transform: none;
+
+ /* fix buttons height, for twitter bootstrap */
+ line-height: 1em;
+
+ position: relative;
+ float: right;
+ font-size: 120%;
+
+}
+
+.icon-link-ext:before { content: '\e800'; } /* '' */
+
+#result {
+ background-color: #E2EEF6;
+ margin-top: 10px;
+ padding: 10px;
+ display: none;
+ border-radius: 4px;
+}
+
+.ace-error-text, .ace-error-line, .ace-warning-text, .ace-warning-line {
+ position: absolute;
+}
+
+.ace-error-text {
+ background-color: #e9abab;
+}
+
+.ace-error-line {
+ background-color: #F6E2E2;
+}
+
+.ace-warning-text {
+ background-color: #FFEF00;
+}
+
+.ace-warning-line {
+ background-color: #FFFBCB;
+}
+
+.ace-chrome .ace_comment {
+ color: #565656;
+}
+
+.ace-chrome .ace-keyword {
+ color: #8959A8;
+}
+
+.ace-chrome .ace_entity.ace_name.ace_function {
+ color: #4271AE;
+}
+
+.ace-chrome .ace_constant.ace_numeric {
+ color: #718C00;
+}
+
+.ace-chrome .ace_keyword.ace_operator {
+ color: black;
+}
+
+.ace-chrome .ace_string {
+ color: #3E999F;
+}
+
+#active-code, #editor {
+ background-color: #FAFAFA;
+}
+
+.more-examples {
+ text-align: right;
+ margin: 5px 10px 0 0;
+}
+
+.chprs-title {
+ text-transform: uppercase;
+}
+
+.cphrs {
+ font-face: monospace;
+ text-align: center;
+}
+
+.cphrs-title-box {
+ border-left: 1px solid #222;
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+
+dd, dt {
+ line-height: 1.42857;
+}
+
+dt {
+ font-weight: bold;
+}
+
+.dl-horizontal dt {
+ float: left;
+ width: 50px;
+ overflow: hidden;
+ clear: left;
+ text-align: left;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.dl-horizontal dd {
+ margin-left: 60px;
+} \ No newline at end of file
diff --git a/fonts/FiraSans-Light.woff b/fonts/FiraSans-Light.woff
new file mode 100644
index 0000000..af97f50
--- /dev/null
+++ b/fonts/FiraSans-Light.woff
Binary files differ
diff --git a/fonts/FiraSans-Medium.woff b/fonts/FiraSans-Medium.woff
new file mode 100644
index 0000000..61a59e0
--- /dev/null
+++ b/fonts/FiraSans-Medium.woff
Binary files differ
diff --git a/fonts/FiraSans-Regular.woff b/fonts/FiraSans-Regular.woff
new file mode 100644
index 0000000..16e74f2
--- /dev/null
+++ b/fonts/FiraSans-Regular.woff
Binary files differ
diff --git a/fonts/LICENSE b/fonts/LICENSE
new file mode 100644
index 0000000..b4a3967
--- /dev/null
+++ b/fonts/LICENSE
@@ -0,0 +1,99 @@
+Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
+with Reserved Font Name Fira Sans.
+
+Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
+with Reserved Font Name Fira Mono.
+
+Copyright (c) 2014, Telefonica S.A.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/fontello.woff b/fonts/fontello.woff
new file mode 100644
index 0000000..072ff13
--- /dev/null
+++ b/fonts/fontello.woff
Binary files differ
diff --git a/img/cphrs-logo.png b/img/cphrs-logo.png
new file mode 100644
index 0000000..a70df09
--- /dev/null
+++ b/img/cphrs-logo.png
Binary files differ
diff --git a/img/cphrs_sketch_block.png b/img/cphrs_sketch_block.png
new file mode 100644
index 0000000..ab27eca
--- /dev/null
+++ b/img/cphrs_sketch_block.png
Binary files differ
diff --git a/img/cphrs_sketch_block_logo.png b/img/cphrs_sketch_block_logo.png
new file mode 100644
index 0000000..1154649
--- /dev/null
+++ b/img/cphrs_sketch_block_logo.png
Binary files differ
diff --git a/img/cphrs_smallz.png b/img/cphrs_smallz.png
new file mode 100644
index 0000000..362f3da
--- /dev/null
+++ b/img/cphrs_smallz.png
Binary files differ
diff --git a/img/cphrs_urban_sketch.png b/img/cphrs_urban_sketch.png
new file mode 100644
index 0000000..e57447a
--- /dev/null
+++ b/img/cphrs_urban_sketch.png
Binary files differ
diff --git a/img/cphrs_varius_multiplex.png b/img/cphrs_varius_multiplex.png
new file mode 100644
index 0000000..911620e
--- /dev/null
+++ b/img/cphrs_varius_multiplex.png
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..81d0e7a
--- /dev/null
+++ b/index.html
@@ -0,0 +1,103 @@
+---
+layout: default
+title: The Copenhagen Rust Group
+---
+
+ <div class="row install-row">
+ <div class="col-md-12">
+ <p class="pitch">
+ We are a Copenhagen-based group of programmers enthusiastic
+ about the programming language <b>Rust</b>, a systems
+ programming language developed by Mozilla.
+ </p>
+ <p>We organize events, meetups and hackathons, so stay tuned
+ on this site for future events!</p>
+ </div>
+ </div>
+
+ <div class="row code-row">
+ <div class="col-md-7">
+ <h2>Upcoming events</h2>
+ <article class="event">
+ <div class="event-date">
+ <p class="event-month">Jan</p>
+ <p class="event-day">13</p>
+ <p class="event-year">2016</p>
+ </div>
+ <div class="event-desc">
+ <h3 class="event-desc-header">Hackathon</h3>
+
+ <dl class="dl-horizontal">
+ <dt>Where</dt>
+ <dd>Kronprinsessegade 54, 5th floor</dd>
+
+ <dt>When</dt>
+ <dd>18:00</dd>
+ </dl>
+
+ <p>We get together to hack some Rust. If you would like to attend, please let us know by sending an e-mail to <kbd>laumann.thomas<span><!-- space --></span>@<span><!-- more space --></span>gmail.com</kbd></p>
+ </div>
+ </article>
+ </div>
+ <div class="col-md-5">
+ <h2>Past events</h2>
+ <article class="event">
+ <div class="event-date">
+ <p class="event-month">May</p>
+ <p class="event-day">15</p>
+ <p class="event-year">2015</p>
+ </div>
+ <div class="event-desc">
+ <h3 class="event-desc-header">Rust 1.0 Release Party</h3>
+
+ <dl class="dl-horizontal">
+ <dt>Where</dt>
+ <dd>Robocat office, Pilestræde 43, 2nd floor</dd>
+
+ <dt>When</dt>
+ <dd>18:00</dd>
+ </dl>
+
+ <p>Along with <a href="https://users.rust-lang.org/t/rust-1-0-launch-event-details-action-required-for-event-organizers/1025/15">other Rust-enthusiastic groups</a>, we had a Rust 1.0 release party, with t-shirts and everything! Link to the <a href="https://www.eventbrite.com/e/copenhagen-rust-launch-party-tickets-16663376608?utm_campaign=new_attendee&utm_medium=email&utm_source=eb_email&utm_term=event_name">event</a>.</p>
+ </div>
+ </article>
+
+ <article class="event">
+ <div class="event-date">
+ <p class="event-month">Mar</p>
+ <p class="event-day">18</p>
+ <p class="event-year">2015</p>
+ </div>
+ <div class="event-desc">
+ <h3 class="event-desc-header">Rust - Copenhagen Tech
+ Polyglot Meetup</h3>
+
+ <dl class="dl-horizontal">
+ <dt>Where</dt>
+ <dd>Kronprinsessegade 54, 4th floor</dd>
+
+ <dt>When</dt>
+ <dd>19:00</dd>
+ </dl>
+
+ <p>A Rust event organized in collaboration with
+ the <a href="http://polyglots.dk">Copenhagen Tech
+ Polyglots</a>. We had a good evening talking all things
+ Rust, and, of course, stickers. See the
+ event <a href="http://www.meetup.com/Copenhagen-Tech-Polyglots/events/220800093/">here</a>.</p>
+ </div>
+ </article>
+ </div>
+ </div>
+
+ <!-- <script type="text/javascript"> -->
+ <!-- {% include include.js %} -->
+
+ <!-- include("https://cdn.jsdelivr.net/ace/1.1.3/noconflict/ace.js", function () { -->
+ <!-- include("https://cdn.jsdelivr.net/ace/1.1.3/noconflict/mode-rust.js", function () { -->
+ <!-- {% include editor.js %} -->
+ <!-- }); -->
+ <!-- }); -->
+
+ <!-- {% include set_platform.js %} -->
+ <!-- </script> -->
diff --git a/logos/cargo.png b/logos/cargo.png
new file mode 100644
index 0000000..9a94dcc
--- /dev/null
+++ b/logos/cargo.png
Binary files differ
diff --git a/logos/error.png b/logos/error.png
new file mode 100644
index 0000000..ec71bd0
--- /dev/null
+++ b/logos/error.png
Binary files differ
diff --git a/logos/favicon.ico b/logos/favicon.ico
new file mode 100644
index 0000000..b8ad237
--- /dev/null
+++ b/logos/favicon.ico
Binary files differ
diff --git a/logos/forkme.png b/logos/forkme.png
new file mode 100644
index 0000000..0b3bdc8
--- /dev/null
+++ b/logos/forkme.png
Binary files differ
diff --git a/logos/rust-logo-128x128-blk-v2.png b/logos/rust-logo-128x128-blk-v2.png
new file mode 100644
index 0000000..74b4bd6
--- /dev/null
+++ b/logos/rust-logo-128x128-blk-v2.png
Binary files differ
diff --git a/logos/rust-logo-128x128-blk.png b/logos/rust-logo-128x128-blk.png
new file mode 100644
index 0000000..ecea9e1
--- /dev/null
+++ b/logos/rust-logo-128x128-blk.png
Binary files differ
diff --git a/logos/rust-logo-128x128.png b/logos/rust-logo-128x128.png
new file mode 100644
index 0000000..3b9087b
--- /dev/null
+++ b/logos/rust-logo-128x128.png
Binary files differ
diff --git a/logos/rust-logo-16x16-blk.png b/logos/rust-logo-16x16-blk.png
new file mode 100644
index 0000000..7490ca3
--- /dev/null
+++ b/logos/rust-logo-16x16-blk.png
Binary files differ
diff --git a/logos/rust-logo-16x16.png b/logos/rust-logo-16x16.png
new file mode 100644
index 0000000..b0fd953
--- /dev/null
+++ b/logos/rust-logo-16x16.png
Binary files differ
diff --git a/logos/rust-logo-196x196-blk.png b/logos/rust-logo-196x196-blk.png
new file mode 100644
index 0000000..9df6ebe
--- /dev/null
+++ b/logos/rust-logo-196x196-blk.png
Binary files differ
diff --git a/logos/rust-logo-256x256-blk.png b/logos/rust-logo-256x256-blk.png
new file mode 100644
index 0000000..f9668c5
--- /dev/null
+++ b/logos/rust-logo-256x256-blk.png
Binary files differ
diff --git a/logos/rust-logo-256x256.png b/logos/rust-logo-256x256.png
new file mode 100644
index 0000000..63506dd
--- /dev/null
+++ b/logos/rust-logo-256x256.png
Binary files differ
diff --git a/logos/rust-logo-32x32-blk.png b/logos/rust-logo-32x32-blk.png
new file mode 100644
index 0000000..9cc1452
--- /dev/null
+++ b/logos/rust-logo-32x32-blk.png
Binary files differ
diff --git a/logos/rust-logo-32x32.png b/logos/rust-logo-32x32.png
new file mode 100644
index 0000000..3736aed
--- /dev/null
+++ b/logos/rust-logo-32x32.png
Binary files differ
diff --git a/logos/rust-logo-48x48-blk.png b/logos/rust-logo-48x48-blk.png
new file mode 100644
index 0000000..b0e329d
--- /dev/null
+++ b/logos/rust-logo-48x48-blk.png
Binary files differ
diff --git a/logos/rust-logo-512x512-blk.png b/logos/rust-logo-512x512-blk.png
new file mode 100644
index 0000000..0daa1b5
--- /dev/null
+++ b/logos/rust-logo-512x512-blk.png
Binary files differ
diff --git a/logos/rust-logo-512x512.png b/logos/rust-logo-512x512.png
new file mode 100644
index 0000000..38484c6
--- /dev/null
+++ b/logos/rust-logo-512x512.png
Binary files differ
diff --git a/logos/rust-logo-64x64-blk.png b/logos/rust-logo-64x64-blk.png
new file mode 100644
index 0000000..27bdac6
--- /dev/null
+++ b/logos/rust-logo-64x64-blk.png
Binary files differ
diff --git a/logos/rust-logo-64x64.png b/logos/rust-logo-64x64.png
new file mode 100644
index 0000000..b7a4f6c
--- /dev/null
+++ b/logos/rust-logo-64x64.png
Binary files differ
diff --git a/logos/rust-logo-all-blk.ico b/logos/rust-logo-all-blk.ico
new file mode 100644
index 0000000..608f6a4
--- /dev/null
+++ b/logos/rust-logo-all-blk.ico
Binary files differ
diff --git a/logos/rust-logo-blk.svg b/logos/rust-logo-blk.svg
new file mode 100644
index 0000000..de4d53d
--- /dev/null
+++ b/logos/rust-logo-blk.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="144px" height="144px" viewbox="0 0 144 144"><path d="M67.743 31.035a3.108 3.108 0 0 1 6.216 0a3.108 3.108 0 0 1 -6.216 0M30.666 59.175a3.108 3.108 0 0 1 6.216 0a3.108 3.108 0 0 1 -6.216 0m74.153.145a3.108 3.108 0 0 1 6.216 0a3.108 3.108 0 0 1 -6.216 0M39.663 63.578c1.43-.635 2.076-2.311 1.441-3.744l-1.379-3.118h5.423V81.16H34.207a38.265 38.265 0 0 1 -1.239-14.607zm22.685 0.601v-7.205h12.914c.667 0 4.71.771 4.71 3.794c0 2.51-3.101 3.41-5.651 3.41zM44.717 102.972a3.108 3.108 0 0 1 6.216 0a3.108 3.108 0 0 1 -6.216 0m46.051.145a3.108 3.108 0 0 1 6.216 0a3.108 3.108 0 0 1 -6.216 0m.961-7.048c-1.531-.328-3.037.646-3.365 2.18l-1.56 7.28a38.265 38.265 0 0 1 -31.911-.153l-1.559-7.28c-.328-1.532-1.834-2.508-3.364-2.179l-6.427 1.38a38.265 38.265 0 0 1 -3.323 -3.917h31.272c.354 0 .59-.064.59-.386V81.932c0-.322-.236-.386-.59-.386h-9.146v-7.012h9.892c.903 0 4.828.258 6.083 5.275.393 1.543 1.256 6.562 1.846 8.169.588 1.802 2.982 5.402 5.533 5.402h16.146a38.265 38.265 0 0 1 -3.544 4.102zm17.365-29.207a38.265 38.265 0 0 1 .081 6.643 h-3.926c-.393 0-.551.258-.551.643v1.803c0 4.244-2.393 5.167-4.49 5.402-1.997 .225-4.211-.836-4.484-2.058-1.178-6.626-3.141-8.041-6.241-10.486 3.847-2.443,7.85-6.047 7.85-10.871 0-5.209-3.571-8.49-6.005-10.099-3.415-2.251-7.196-2.702-8.216-2.702H42.509a38.265 38.265 0 0 1 21.408-12.082l4.786 5.021c1.082 1.133 2.874 1.175 4.006.092l5.355-5.122a38.265 38.265 0 0 1 26.196 18.657l-3.666 8.28c-.633 1.433.013 3.109 1.442 3.744zm9.143.134-.125-1.28 3.776-3.522c.768-.716.481-2.157-.501-2.523l-4.827-1.805-.378-1.246 3.011-4.182c.614-.85.05-2.207-.984-2.377l-5.09-.828-.612-1.143 2.139-4.695c.438-.956-.376-2.179-1.428-2.139l-5.166.18-.816-.99 1.187-5.032c.24-1.022-.797-2.06-1.819-1.82l-5.031 1.186-.992-.816.181-5.166c.04-1.046-1.184-1.863-2.138-1.429l-4.694 2.14-1.143-.613-.83-5.091c-.168-1.032-1.526-1.596-2.376-.984l-4.185 3.011-1.244-.377-1.805-4.828c-.366-.984-1.808-1.267-2.522-.503l-3.522 3.779-1.28-.125-2.72-4.395c-.55-.89-2.023-.89-2.571 0l-2.72 4.395-1.281.125-3.523-3.779c-.714-.764-2.156-.481-2.522.503l-1.805 4.828-1.245.377-4.184-3.011c-.85-.614-2.209-.048-2.377.984l-.83 5.091-1.143.613-4.694-2.14c-.954-.436-2.178.383-2.138 1.429l.18 5.166-.992.816-5.031-1.186c-1.022-.238-2.06.798-1.82 1.82l1.185 5.032-.814.99-5.166-.18c-1.042-.03-1.863 1.183-1.429 2.139l2.14 4.695-.613 1.143-5.09.828c-1.034.168-1.594 1.527-.984 2.377l3.011 4.182-.378 1.246-4.828 1.805c-.98.366-1.267 1.807-.501 2.523l3.777 3.522-.125 1.28-4.394 2.72c-.89.55-.89 2.023 0 2.571l4.394 2.72.125 1.28-3.777 3.523c-.766.714-.479 2.154.501 2.522l4.828 1.805.378 1.246-3.011 4.183c-.612.852-.049 2.21.985 2.376l5.089.828.613 1.145-2.14 4.693c-.436.954.387 2.181 1.429 2.139l5.164-.181.816.992-1.185 5.033c-.24 1.02.798 2.056 1.82 1.816l5.031-1.185.992.814-.18 5.167c-.04 1.046 1.184 1.864 2.138 1.428l4.694-2.139 1.143.613.83 5.088c.168 1.036 1.527 1.596 2.377.986l4.182-3.013 1.246.379 1.805 4.826c.366.98 1.808 1.269 2.522.501l3.523-3.777 1.281.128 2.72 4.394c.548.886 2.021.888 2.571 0l2.72-4.394 1.28-.128 3.522 3.777c.714.768 2.156.479 2.522-.501l1.805-4.826 1.246-.379 4.183 3.013c.85.61 2.208.048 2.376-.986l.83-5.088 1.143-.613 4.694 2.139c.954.436 2.176-.38 2.138-1.428l-.18-5.167.991-.814 5.031 1.185c1.022.24 2.059-.796 1.819-1.816l-1.185-5.033.814-.992 5.166.181c1.042.042 1.866-1.185 1.428-2.139l-2.139-4.693.612-1.145 5.09-.828c1.036-.166 1.598-1.524.984-2.376l-3.011-4.183.378-1.246 4.827-1.805c.982-.368 1.269-1.808.501-2.522l-3.776-3.523.125-1.28 4.394-2.72c.89-.548.891-2.021.001-2.571z"/></svg> \ No newline at end of file
diff --git a/logos/rust-logo-large-blk.ico b/logos/rust-logo-large-blk.ico
new file mode 100644
index 0000000..e2f5b4c
--- /dev/null
+++ b/logos/rust-logo-large-blk.ico
Binary files differ
diff --git a/logos/rust-logo-small-blk.ico b/logos/rust-logo-small-blk.ico
new file mode 100644
index 0000000..3b595bf
--- /dev/null
+++ b/logos/rust-logo-small-blk.ico
Binary files differ