Skip to content

Commit 3a84a1c

Browse files
committed
Integrate ElixirConf resources into main site
1 parent 4524368 commit 3a84a1c

5 files changed

Lines changed: 513 additions & 261 deletions

File tree

elixirconf-2026/index.html

Lines changed: 28 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -2,112 +2,36 @@
22
<html lang="en">
33
<head>
44
<meta charset="UTF-8">
5+
<meta http-equiv="refresh" content="0; url=../#elixirconf">
56
<meta name="viewport" content="width=device-width, initial-scale=1.0">
67
<title>ElixirConf 2026 | Guillaume Duboc</title>
7-
<link rel="apple-touch-icon" sizes="180x180" href="../assets/apple-touch-icon.png">
8-
<link rel="icon" type="image/png" sizes="32x32" href="../assets/favicon-32x32.png">
9-
<link rel="icon" type="image/png" sizes="16x16" href="../assets/favicon-16x16.png">
10-
<link rel="manifest" href="../assets/site.webmanifest">
11-
<link rel="stylesheet" href="../styles.css">
12-
<link rel="stylesheet" href="./styles.css">
8+
<style>
9+
body {
10+
margin: 0;
11+
min-height: 100vh;
12+
display: flex;
13+
align-items: center;
14+
justify-content: center;
15+
padding: 24px;
16+
font-family: Georgia, serif;
17+
color: #2b2b2b;
18+
background: #faf7f2;
19+
}
20+
21+
main {
22+
max-width: 520px;
23+
text-align: center;
24+
}
25+
26+
a {
27+
color: #6B4423;
28+
}
29+
</style>
1330
</head>
14-
<body class="conference-page">
15-
16-
<nav class="tabs conference-tabs">
17-
<a href="./" class="tab is-active">ElixirConf 2026</a>
18-
<a href="../" class="tab">Home</a>
19-
<a href="../#thesis" class="tab">Thesis</a>
20-
<a href="../#about" class="tab">About</a>
21-
</nav>
22-
23-
<main class="about-container conference-container">
24-
<header class="conference-header">
25-
<div class="conference-copy">
26-
<p class="conference-kicker">ElixirConf 2026</p>
27-
<h1>Guard Analysis Test Files</h1>
28-
29-
<p class="conference-summary">
30-
These are the <code>.exs</code> files I shared after <em>From Guards to Types</em>.
31-
The bundle includes the <code>1.19.5</code> baseline and the
32-
<code>1.20.0-rc.4</code> snapshot used in the talk.
33-
</p>
34-
35-
<p class="conference-summary">
36-
The newer files are self-contained, so they do not need a full Elixir checkout.
37-
</p>
38-
39-
<nav class="social-links conference-links">
40-
<a href="./downloads/elixirconf-2026-guard-analysis-tests.zip">zip</a>
41-
<a href="https://github.com/gldubc/gldubc.github.io/tree/main/elixirconf-2026" target="_blank" rel="noreferrer">github</a>
42-
<a href="../">home</a>
43-
<a href="../#about">about</a>
44-
</nav>
45-
</div>
46-
47-
<aside class="conference-qr">
48-
<img src="./assets/elixirconf-2026-qr.png" alt="QR code for gldubc.github.io/elixirconf-2026">
49-
<p>gldubc.github.io/elixirconf-2026/</p>
50-
</aside>
51-
</header>
52-
53-
<section class="cv-section">
54-
<h3>Files</h3>
55-
<div class="entries conference-files">
56-
<article class="entry">
57-
<span class="entry-year">1.19.5</span>
58-
<div class="entry-content">
59-
<a href="./downloads/guard_negation_examples_elixir_1.19.5.exs" class="entry-title">
60-
Negation examples
61-
</a>
62-
<span class="entry-venue">Older compiler baseline.</span>
63-
</div>
64-
</article>
65-
66-
<article class="entry">
67-
<span class="entry-year">1.19.5</span>
68-
<div class="entry-content">
69-
<a href="./downloads/guard_refinement_examples_elixir_1.19.5.exs" class="entry-title">
70-
Refinement examples
71-
</a>
72-
<span class="entry-venue">Older compiler baseline.</span>
73-
</div>
74-
</article>
75-
76-
<article class="entry">
77-
<span class="entry-year">1.20 rc4</span>
78-
<div class="entry-content">
79-
<a href="./downloads/guard_negation_examples_elixir_1.20.0_rc4.exs" class="entry-title">
80-
Negation examples
81-
</a>
82-
<span class="entry-venue">Self-contained talk snapshot.</span>
83-
</div>
84-
</article>
85-
86-
<article class="entry">
87-
<span class="entry-year">1.20 rc4</span>
88-
<div class="entry-content">
89-
<a href="./downloads/guard_refinement_examples_elixir_1.20.0_rc4.exs" class="entry-title">
90-
Refinement examples
91-
</a>
92-
<span class="entry-venue">Self-contained talk snapshot.</span>
93-
</div>
94-
</article>
95-
</div>
96-
</section>
97-
98-
<section class="cv-section">
99-
<h3>Run</h3>
100-
<div class="conference-code">
101-
<p class="conference-code-label">Elixir 1.19.5</p>
102-
<pre><code>elixir guard_negation_examples_elixir_1.19.5.exs
103-
elixir guard_refinement_examples_elixir_1.19.5.exs</code></pre>
104-
105-
<p class="conference-code-label">Elixir 1.20.0-rc.4</p>
106-
<pre><code>/path/to/elixir-1.20.0-rc.4/bin/elixir guard_negation_examples_elixir_1.20.0_rc4.exs
107-
/path/to/elixir-1.20.0-rc.4/bin/elixir guard_refinement_examples_elixir_1.20.0_rc4.exs</code></pre>
108-
</div>
109-
</section>
110-
</main>
111-
31+
<body>
32+
<main>
33+
<p>Moved to the ElixirConf 2026 section on the main page.</p>
34+
<p><a href="../#elixirconf">Open it here</a>.</p>
35+
</main>
11236
</body>
11337
</html>

elixirconf-2026/styles.css

Lines changed: 0 additions & 155 deletions
This file was deleted.

elixirconf-2026/viewer.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
(function () {
2+
var tabs = Array.prototype.slice.call(document.querySelectorAll(".viewer-tab"));
3+
var nameEl = document.getElementById("viewer-name");
4+
var linesEl = document.getElementById("viewer-lines");
5+
var codeEl = document.getElementById("viewer-code");
6+
var codePreEl = document.getElementById("viewer-code-pre");
7+
var downloadEl = document.getElementById("viewer-download");
8+
var githubEl = document.getElementById("viewer-github");
9+
10+
if (!tabs.length || !nameEl || !linesEl || !codeEl || !codePreEl || !downloadEl || !githubEl) {
11+
return;
12+
}
13+
14+
var requestId = 0;
15+
16+
function setActiveTab(activeTab) {
17+
tabs.forEach(function (tab) {
18+
var active = tab === activeTab;
19+
tab.classList.toggle("is-active", active);
20+
tab.setAttribute("aria-selected", active ? "true" : "false");
21+
});
22+
}
23+
24+
function setCode(text) {
25+
var lineCount = text.split("\n").length;
26+
var numbers = [];
27+
28+
for (var i = 1; i <= lineCount; i += 1) {
29+
numbers.push(String(i));
30+
}
31+
32+
codeEl.textContent = text;
33+
linesEl.textContent = numbers.join("\n");
34+
codePreEl.scrollTop = 0;
35+
codePreEl.scrollLeft = 0;
36+
linesEl.scrollTop = 0;
37+
}
38+
39+
function loadTab(tab) {
40+
var currentRequest = requestId + 1;
41+
var file = tab.dataset.file;
42+
var github = tab.dataset.github;
43+
44+
requestId = currentRequest;
45+
setActiveTab(tab);
46+
47+
nameEl.textContent = file.split("/").pop();
48+
downloadEl.href = file;
49+
githubEl.href = github;
50+
codeEl.textContent = "Loading…";
51+
linesEl.textContent = "";
52+
53+
fetch(file)
54+
.then(function (response) {
55+
if (!response.ok) {
56+
throw new Error("Unable to load file");
57+
}
58+
59+
return response.text();
60+
})
61+
.then(function (text) {
62+
if (currentRequest !== requestId) {
63+
return;
64+
}
65+
66+
setCode(text);
67+
})
68+
.catch(function () {
69+
if (currentRequest !== requestId) {
70+
return;
71+
}
72+
73+
codeEl.textContent = "Unable to load file.";
74+
linesEl.textContent = "";
75+
});
76+
}
77+
78+
tabs.forEach(function (tab) {
79+
tab.addEventListener("click", function () {
80+
loadTab(tab);
81+
});
82+
});
83+
84+
codePreEl.addEventListener("scroll", function () {
85+
linesEl.scrollTop = codePreEl.scrollTop;
86+
});
87+
88+
loadTab(tabs[0]);
89+
})();

0 commit comments

Comments
 (0)