Starting the entire site over from scratch, handwritten.
|
@ -1,3 +0,0 @@
|
|||
[submodule "templates/html-generator"]
|
||||
path = templates/html-generator
|
||||
url = https://github.com/lijerom/html-generator
|
77
README.md
|
@ -1,80 +1,3 @@
|
|||
# jtmar.me
|
||||
|
||||
This repo contains the entirety of my website, https://jtmar.me.
|
||||
It is posed in hopes that other people may find my build system useful.
|
||||
In addiition, it gives an easy mechanism to submit corrections
|
||||
to the content itself, such as fixing typos or minor details.
|
||||
Hypothetically, it is even possible community-contributed content
|
||||
might one day be submitted.
|
||||
|
||||
## Repository Layout
|
||||
|
||||
* `/templates/html-generator/` is a git submodule pointing to https://github.com/lijerom/html-generator
|
||||
and will continue to do so until `html-generator` is released on Hackage,
|
||||
if it ever is.
|
||||
* `/templates/` contains all of the page templates and site-specific
|
||||
generic content, and is imported by most pages on this site.
|
||||
* `/res/` includes static resources, such as images, css, and javascript
|
||||
* `/*.sh` are some buildscripts used for building the site
|
||||
* The rest of this repository is the root directory of the site.
|
||||
|
||||
## Building
|
||||
|
||||
This site clearly isn't made for redistribution, being a personal website,
|
||||
but hypothetically all that would need to be done is to change `baseUrl` in
|
||||
`templates/Templates/Urls.hs`.
|
||||
If you wish to make your own site based on my build system,
|
||||
please see the dedicated repository for html-generator instead,
|
||||
and merely use this page as an example.
|
||||
|
||||
First, clone the repo:
|
||||
|
||||
```bash
|
||||
git clone --recursive https://github.com/lijerom/jtmar.me
|
||||
```
|
||||
|
||||
The `--recursive` option also fetches the `html-generator` submodule.
|
||||
If you forgot to include the `--recursive` option, additionally run:
|
||||
|
||||
```bash
|
||||
git submodule init
|
||||
git submodule update
|
||||
```
|
||||
|
||||
You will then need to install the Haskell Stack:
|
||||
|
||||
```bash
|
||||
curl -sSL https://get.haskellstack.org/ | sh
|
||||
```
|
||||
|
||||
And then build and install html-generators and templates:
|
||||
|
||||
```bash
|
||||
./build-templates.sh
|
||||
```
|
||||
|
||||
You may then build the actual `xhtml` site pages using:
|
||||
|
||||
```bash
|
||||
./build-site-no-sitemap.sh
|
||||
```
|
||||
|
||||
I would recommend always running the `no-sitemap` variant
|
||||
before running the general `build-site` variant,
|
||||
because the resultant sitemap will only include the pages
|
||||
which successfully compiled,
|
||||
even though the previous working versions of those pages still exist.
|
||||
|
||||
The entire website is static,
|
||||
so no special server configuration should be neccessary.
|
||||
However, you can still find my nginx config in https://github.com/lijerom/jtmar.me-config/.
|
||||
|
||||
```bash
|
||||
./build-site.sh
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
* html-generator, in /templates/html-generator/ is licensed GPLv3+.
|
||||
* All other source code (e.g. /templates/, and /index.hs) is licensed AGPLv3+.
|
||||
* The articles' content itself is licensed CC BY-SA unless otherwise specified.
|
||||
|
|
58
about.hs
|
@ -1,58 +0,0 @@
|
|||
module Page where
|
||||
|
||||
import HtmlGen
|
||||
import Templates
|
||||
|
||||
lastModified :: String
|
||||
lastModified = "2018-09-22"
|
||||
|
||||
sitemap :: Sitemap
|
||||
sitemap = baseSitemap aboutUrl
|
||||
`withLastMod` lastModified
|
||||
`withPriority` "0.8"
|
||||
`withChangeFreq` "monthly"
|
||||
|
||||
page :: Html
|
||||
page = simplePage "About James" "James" lastModified $
|
||||
article
|
||||
%> (h1 %>> "About")
|
||||
%> (h2 %% ("id", "bio") %>> "Hello,")
|
||||
%> (p
|
||||
%>> "I'm James T Martin, also known as " %> italic "jtmar" %>> " or " %> italic "jammar" %>> ". "
|
||||
%>> "Music is my passion, and programming is my hobby. "
|
||||
%>> "I enjoy hiking and skiing. "
|
||||
%>> "I value honesty, simplicity, and independence. "
|
||||
%>> "I dislike materialism, arrogance, and dogmatic thinking, "
|
||||
%>> "and seek to banish these traits from myself. "
|
||||
%>> "I have many flaws, but try to make an improvement in myself every day, "
|
||||
%>> "so that I might live life to its fullest. "
|
||||
)
|
||||
%> (p
|
||||
%>> "I am a member of my school marching band, jazz band, robotics club, and film club. "
|
||||
%>> "I am a moderator of "
|
||||
%> (href "https://reddit.com/r/ProgrammingLanguages/" $ text "/r/ProgrammingLanguages") %>> ". "
|
||||
%>> "I also work on my various projects, which are listed " %> (href projectsUrl $ text "here") %>> ". "
|
||||
)
|
||||
%> (h2 %>> "Accounts" %% ("id", "accounts"))
|
||||
%> (p %>> "These are the places I am active on the internet.")
|
||||
%> (href githubUserUrl githubMark)
|
||||
%> (href youtubeUserUrl youtubeLogo)
|
||||
%> (href redditUserUrl redditLogo)
|
||||
-- %> stackexchangeProfile
|
||||
%> (p %>> "I am not on any social networking sites. Do not mistake any accounts for mine!")
|
||||
%> (h2 %>> "Contact" %% ("id", "contact"))
|
||||
%> (h3 %>> "Email" %% ("id", "email"))
|
||||
%> (p %> italic "james@[this website]" %>> ". ")
|
||||
%> (h3 %>> "IRC" %% ("id", "irc"))
|
||||
%> (p
|
||||
%>> "I am on freenode as " %> italic "jammar" %>> ". "
|
||||
%>> "If you want to hang out, drop by in " %> italic "#lijero" %>> ". "
|
||||
%>> "Just because I am connected does not mean I am online, "
|
||||
%>> "so please do not expect an immediate reply. "
|
||||
%> unorderedList
|
||||
[ href "http://webchat.freenode.net/?channels=%23lijero" $ text "Freenode webchat."
|
||||
, href "ircs://chat.freenode.net/lijero" $ text "An IRCS link."
|
||||
, href "https://hexchat.github.io/" $ text "HexChat download."
|
||||
, text "For connecting via a phone, go download an app. "
|
||||
]
|
||||
)
|
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 3.5 KiB |
|
@ -1,3 +0,0 @@
|
|||
cd templates/
|
||||
stack exec html-generator -- $(find .. -type f -name "*.hs" | grep -v "./templates")
|
||||
cd ..
|
|
@ -1,4 +0,0 @@
|
|||
cd templates/
|
||||
stack exec html-generator -- --sitemap $(find .. -type f -name "*.hs" | grep -v "./templates")
|
||||
mv sitemap.xml ..
|
||||
cd ..
|
|
@ -1,3 +0,0 @@
|
|||
cd templates
|
||||
stack install
|
||||
cd ..
|
After Width: | Height: | Size: 579 B |
After Width: | Height: | Size: 978 B |
After Width: | Height: | Size: 15 KiB |
24
index.hs
|
@ -1,24 +0,0 @@
|
|||
module Page where
|
||||
|
||||
import Templates
|
||||
|
||||
import HtmlGen
|
||||
|
||||
lastModified :: String
|
||||
lastModified = "2018-09-22"
|
||||
|
||||
sitemap :: Sitemap
|
||||
sitemap = baseSitemap (baseUrl ++ "/")
|
||||
`withLastMod` lastModified
|
||||
`withPriority` "1.0"
|
||||
`withChangeFreq` "weekly"
|
||||
|
||||
page :: Html
|
||||
page = simplePage "James Martin" "James" lastModified $
|
||||
article
|
||||
%> (h1 %>> "Home")
|
||||
%> (p
|
||||
%>> "I have not yet released any blog posts, "
|
||||
%>> "or even finished the page generator to be able to make them. "
|
||||
%>> "However, the other pages still are a bit more complete. "
|
||||
)
|
After Width: | Height: | Size: 2.8 KiB |
56
projects.hs
|
@ -1,56 +0,0 @@
|
|||
module Page where
|
||||
|
||||
import HtmlGen
|
||||
import Templates
|
||||
|
||||
lastModified :: String
|
||||
lastModified = "2018-09-19"
|
||||
|
||||
sitemap :: Sitemap
|
||||
sitemap = baseSitemap projectsUrl
|
||||
`withLastMod` lastModified
|
||||
`withPriority` "0.8"
|
||||
`withChangeFreq` "weekly"
|
||||
|
||||
page :: Html
|
||||
page = simplePage "James's Projects" "James" lastModified $
|
||||
article
|
||||
%> (h1 %% ("id", "projects") %>> "Projects")
|
||||
%> (h2 %% ("id", "programming") %>> "Programming")
|
||||
%> (h3 %>> "QIPL")
|
||||
%> (p
|
||||
%>> "QIPL Is a Programming Language, among other things. "
|
||||
%>> "It is intended to be the embodiment of my programming philosophy: "
|
||||
%>> "simple sucks less. "
|
||||
%>> "More information can be found on "
|
||||
%> (href qiplUrl $ text "its website") %>> ". "
|
||||
)
|
||||
%> (h3 %>> "Hazen Robotics")
|
||||
%> (p
|
||||
%>> "I am a programmer for the Hazen Robotics team. "
|
||||
%>> "All of our code can be found "
|
||||
%> (href (githubUrl ++ "HazenRobotics/") $ text "our GitHub organization") %>> ". "
|
||||
)
|
||||
%> (h3 %>> "html-generator")
|
||||
%> (p
|
||||
%>> "This website was written using a static site generator I wrote myself. "
|
||||
%>> "It's got a really, really long way to go, but you can watch it develop "
|
||||
%> (href (githubProjectUrl "html-generator") $ text "on GitHub") %>> ". "
|
||||
)
|
||||
%> (p
|
||||
%>> "There's also the source code for both "
|
||||
%> (href (githubProjectUrl "jtmar.me") $ text "jtmar.me")
|
||||
%>> " and "
|
||||
%> (href (githubQiplProjectUrl "qipl.org") $ text "qipl.org")
|
||||
%>> "."
|
||||
)
|
||||
%> (h3 %>> "Other Projects")
|
||||
%> (p
|
||||
%>> "I used to have a whole bunch of other cool projects and games "
|
||||
%>> "lying around, but they've all been lost in the Great Purge, "
|
||||
%>> "which I generally regard as one of the worst mistakes I've ever made. "
|
||||
)
|
||||
%> (h2 %>> "Music")
|
||||
%> (p
|
||||
%>> "Writing music is one of my other hobbies, but I have not yet released anything. "
|
||||
)
|
|
@ -0,0 +1,39 @@
|
|||
table td {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
#skills-table, .info-table {
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
#skills-table tr, .info-table tr {
|
||||
border-bottom: dotted black 1px;
|
||||
}
|
||||
|
||||
#skills-table td:not(:first-child), #ability-scores td:not(:first-child) {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#skills-table td:nth-child(2), #ability-scores td:first-child {
|
||||
font-family: monospace;
|
||||
}
|
||||
|
||||
.info-table {
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
.info-table tr td:first-child::after {
|
||||
content: ": ";
|
||||
}
|
||||
|
||||
h3 a, h2 a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
figure {
|
||||
max-width: 400px;
|
||||
}
|
||||
|
||||
#bat-photo {
|
||||
width: 200px;
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
window.onload = function() {
|
||||
var skillsHeaders = document.getElementById("skills-headers");
|
||||
var bonusHeader = document.createElement('th');
|
||||
bonusHeader.append(document.createTextNode("Bonus"));
|
||||
skillsHeaders.append(bonusHeader);
|
||||
|
||||
var abilities = new Object();
|
||||
var abilityRows =
|
||||
document.getElementById("ability-scores").getElementsByTagName('tr');
|
||||
|
||||
for (let ability of abilityRows) {
|
||||
var columns = ability.getElementsByTagName('td');
|
||||
if (columns.length != 3) {
|
||||
// This row contains headers, not values.
|
||||
continue;
|
||||
}
|
||||
|
||||
var name = columns[0].innerText;
|
||||
var bonus = parseInt(columns[2].innerText);
|
||||
|
||||
abilities[name] = bonus;
|
||||
}
|
||||
|
||||
var skillRows =
|
||||
document.getElementById("skills-table").getElementsByTagName('tr');
|
||||
|
||||
for (let skill of skillRows) {
|
||||
var columns = skill.getElementsByTagName('td');
|
||||
if (columns.length != 4) {
|
||||
// This row contains headers, not values.
|
||||
continue;
|
||||
}
|
||||
|
||||
var abilityColumn = columns[1].innerText;
|
||||
var rankColumn = columns[2].innerText;
|
||||
var extraColumn = columns[3].innerText;
|
||||
|
||||
var abilityBonus = abilities[abilityColumn];
|
||||
var rankBonus = parseInt(rankColumn);
|
||||
var extraBonus = extraColumn ? parseInt(extraColumn) : 0;
|
||||
var totalBonus = abilityBonus + rankBonus + extraBonus;
|
||||
|
||||
var totalBonusText;
|
||||
if (totalBonus >= 0) {
|
||||
totalBonusText = "+" + totalBonus.toString();
|
||||
} else {
|
||||
totalBonusText = totalBonus.toString();
|
||||
}
|
||||
|
||||
var totalBonusColumn = document.createElement('td');
|
||||
totalBonusColumn.append(document.createTextNode(totalBonusText));
|
||||
skill.append(totalBonusColumn);
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 864 B |
After Width: | Height: | Size: 779 B |
After Width: | Height: | Size: 980 B |
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="256px" height="293px" viewBox="0 0 256 293" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<g>
|
||||
<path d="M226.011429,0 L29.9885714,0 C13.4582857,0 0,13.4582857 0,30.1348571 L0,227.913143 C0,244.589714 13.4582857,258.048 29.9885714,258.048 L195.876571,258.048 L188.123429,230.985143 L206.848,248.393143 L224.548571,264.777143 L256,292.571429 L256,30.1348571 C256,13.4582857 242.541714,0 226.011429,0 Z M169.545143,191.049143 C169.545143,191.049143 164.278857,184.758857 159.890286,179.2 C179.053714,173.787429 186.368,161.792 186.368,161.792 C180.370286,165.741714 174.665143,168.521143 169.545143,170.422857 C162.230857,173.494857 155.209143,175.542857 148.333714,176.713143 C134.290286,179.346286 121.417143,178.614857 110.445714,176.566857 C102.107429,174.957714 94.9394286,172.617143 88.9417143,170.276571 C85.5771429,168.96 81.92,167.350857 78.2628571,165.302857 C77.824,165.010286 77.3851429,164.864 76.9462857,164.571429 C76.6537143,164.425143 76.5074286,164.278857 76.3611429,164.132571 C73.728,162.669714 72.2651429,161.645714 72.2651429,161.645714 C72.2651429,161.645714 79.2868571,173.348571 97.8651429,178.907429 C93.4765714,184.466286 88.064,191.049143 88.064,191.049143 C55.7348571,190.025143 43.4468571,168.813714 43.4468571,168.813714 C43.4468571,121.709714 64.512,83.5291429 64.512,83.5291429 C85.5771429,67.7302857 105.618286,68.1691429 105.618286,68.1691429 L107.081143,69.9245714 C80.7497143,77.5314286 68.608,89.088 68.608,89.088 C68.608,89.088 71.8262857,87.3325714 77.2388571,84.8457143 C92.8914286,77.9702857 105.325714,76.0685714 110.445714,75.6297143 C111.323429,75.4834286 112.054857,75.3371429 112.932571,75.3371429 C121.856,74.1668571 131.949714,73.8742857 142.482286,75.0445714 C156.379429,76.6537143 171.300571,80.7497143 186.514286,89.088 C186.514286,89.088 174.957714,78.1165714 150.089143,70.5097143 L152.137143,68.1691429 C152.137143,68.1691429 172.178286,67.7302857 193.243429,83.5291429 C193.243429,83.5291429 214.308571,121.709714 214.308571,168.813714 C214.308571,168.813714 201.874286,190.025143 169.545143,191.049143 Z M101.522286,122.733714 C93.184,122.733714 86.6011429,130.048 86.6011429,138.971429 C86.6011429,147.894857 93.3302857,155.209143 101.522286,155.209143 C109.860571,155.209143 116.443429,147.894857 116.443429,138.971429 C116.589714,130.048 109.860571,122.733714 101.522286,122.733714 M154.916571,122.733714 C146.578286,122.733714 139.995429,130.048 139.995429,138.971429 C139.995429,147.894857 146.724571,155.209143 154.916571,155.209143 C163.254857,155.209143 169.837714,147.894857 169.837714,138.971429 C169.837714,130.048 163.254857,122.733714 154.916571,122.733714" fill="#7289DA"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M0 0v1l4 2 4-2v-1h-8zm0 2v4h8v-4l-4 2-4-2z" transform="translate(0 1)" />
|
||||
</svg>
|
After Width: | Height: | Size: 171 B |
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 7.0 KiB |
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="256px" height="250px" viewBox="0 0 256 250" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<g>
|
||||
<path d="M128.00106,0 C57.3172926,0 0,57.3066942 0,128.00106 C0,184.555281 36.6761997,232.535542 87.534937,249.460899 C93.9320223,250.645779 96.280588,246.684165 96.280588,243.303333 C96.280588,240.251045 96.1618878,230.167899 96.106777,219.472176 C60.4967585,227.215235 52.9826207,204.369712 52.9826207,204.369712 C47.1599584,189.574598 38.770408,185.640538 38.770408,185.640538 C27.1568785,177.696113 39.6458206,177.859325 39.6458206,177.859325 C52.4993419,178.762293 59.267365,191.04987 59.267365,191.04987 C70.6837675,210.618423 89.2115753,204.961093 96.5158685,201.690482 C97.6647155,193.417512 100.981959,187.77078 104.642583,184.574357 C76.211799,181.33766 46.324819,170.362144 46.324819,121.315702 C46.324819,107.340889 51.3250588,95.9223682 59.5132437,86.9583937 C58.1842268,83.7344152 53.8029229,70.715562 60.7532354,53.0843636 C60.7532354,53.0843636 71.5019501,49.6441813 95.9626412,66.2049595 C106.172967,63.368876 117.123047,61.9465949 128.00106,61.8978432 C138.879073,61.9465949 149.837632,63.368876 160.067033,66.2049595 C184.49805,49.6441813 195.231926,53.0843636 195.231926,53.0843636 C202.199197,70.715562 197.815773,83.7344152 196.486756,86.9583937 C204.694018,95.9223682 209.660343,107.340889 209.660343,121.315702 C209.660343,170.478725 179.716133,181.303747 151.213281,184.472614 C155.80443,188.444828 159.895342,196.234518 159.895342,208.176593 C159.895342,225.303317 159.746968,239.087361 159.746968,243.303333 C159.746968,246.709601 162.05102,250.70089 168.53925,249.443941 C219.370432,232.499507 256,184.536204 256,128.00106 C256,57.3066942 198.691187,0 128.00106,0 Z M47.9405593,182.340212 C47.6586465,182.976105 46.6581745,183.166873 45.7467277,182.730227 C44.8183235,182.312656 44.2968914,181.445722 44.5978808,180.80771 C44.8734344,180.152739 45.876026,179.97045 46.8023103,180.409216 C47.7328342,180.826786 48.2627451,181.702199 47.9405593,182.340212 Z M54.2367892,187.958254 C53.6263318,188.524199 52.4329723,188.261363 51.6232682,187.366874 C50.7860088,186.474504 50.6291553,185.281144 51.2480912,184.70672 C51.8776254,184.140775 53.0349512,184.405731 53.8743302,185.298101 C54.7115892,186.201069 54.8748019,187.38595 54.2367892,187.958254 Z M58.5562413,195.146347 C57.7719732,195.691096 56.4895886,195.180261 55.6968417,194.042013 C54.9125733,192.903764 54.9125733,191.538713 55.713799,190.991845 C56.5086651,190.444977 57.7719732,190.936735 58.5753181,192.066505 C59.3574669,193.22383 59.3574669,194.58888 58.5562413,195.146347 Z M65.8613592,203.471174 C65.1597571,204.244846 63.6654083,204.03712 62.5716717,202.981538 C61.4524999,201.94927 61.1409122,200.484596 61.8446341,199.710926 C62.5547146,198.935137 64.0575422,199.15346 65.1597571,200.200564 C66.2704506,201.230712 66.6095936,202.705984 65.8613592,203.471174 Z M75.3025151,206.281542 C74.9930474,207.284134 73.553809,207.739857 72.1039724,207.313809 C70.6562556,206.875043 69.7087748,205.700761 70.0012857,204.687571 C70.302275,203.678621 71.7478721,203.20382 73.2083069,203.659543 C74.6539041,204.09619 75.6035048,205.261994 75.3025151,206.281542 Z M86.046947,207.473627 C86.0829806,208.529209 84.8535871,209.404622 83.3316829,209.4237 C81.8013,209.457614 80.563428,208.603398 80.5464708,207.564772 C80.5464708,206.498591 81.7483088,205.631657 83.2786917,205.606221 C84.8005962,205.576546 86.046947,206.424403 86.046947,207.473627 Z M96.6021471,207.069023 C96.7844366,208.099171 95.7267341,209.156872 94.215428,209.438785 C92.7295577,209.710099 91.3539086,209.074206 91.1652603,208.052538 C90.9808515,206.996955 92.0576306,205.939253 93.5413813,205.66582 C95.054807,205.402984 96.4092596,206.021919 96.6021471,207.069023 Z" fill="#161614"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.8 KiB |
|
@ -0,0 +1,12 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<svg width="256px" height="236px" viewBox="0 0 256 236" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<g>
|
||||
<path d="M128.07485,236.074667 L128.07485,236.074667 L175.17885,91.1043048 L80.9708495,91.1043048 L128.07485,236.074667 L128.07485,236.074667 Z" fill="#E24329"></path>
|
||||
<path d="M128.07485,236.074423 L80.9708495,91.104061 L14.9557638,91.104061 L128.07485,236.074423 L128.07485,236.074423 Z" fill="#FC6D26"></path>
|
||||
<path d="M14.9558857,91.1044267 L14.9558857,91.1044267 L0.641828571,135.159589 C-0.663771429,139.17757 0.766171429,143.57955 4.18438095,146.06275 L128.074971,236.074789 L14.9558857,91.1044267 L14.9558857,91.1044267 Z" fill="#FCA326"></path>
|
||||
<path d="M14.9558857,91.1045486 L80.9709714,91.1045486 L52.6000762,3.79026286 C51.1408762,-0.703146667 44.7847619,-0.701927619 43.3255619,3.79026286 L14.9558857,91.1045486 L14.9558857,91.1045486 Z" fill="#E24329"></path>
|
||||
<path d="M128.07485,236.074423 L175.17885,91.104061 L241.193935,91.104061 L128.07485,236.074423 L128.07485,236.074423 Z" fill="#FC6D26"></path>
|
||||
<path d="M241.193935,91.1044267 L241.193935,91.1044267 L255.507992,135.159589 C256.813592,139.17757 255.38365,143.57955 251.96544,146.06275 L128.07485,236.074789 L241.193935,91.1044267 L241.193935,91.1044267 Z" fill="#FCA326"></path>
|
||||
<path d="M241.193935,91.1045486 L175.17885,91.1045486 L203.549745,3.79026286 C205.008945,-0.703146667 211.365059,-0.701927619 212.824259,3.79026286 L241.193935,91.1045486 L241.193935,91.1045486 Z" fill="#E24329"></path>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M3 0c-1.1 0-2 .9-2 2v1h-1v4h6v-4h-1v-1c0-1.1-.9-2-2-2zm0 1c.56 0 1 .44 1 1v1h-2v-1c0-.56.44-1 1-1z" transform="translate(1)" />
|
||||
</svg>
|
After Width: | Height: | Size: 225 B |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M3 0c-1.1 0-2 .9-2 2v1h-1v4h6v-4h-1v-1c0-1.1-.9-2-2-2zm0 1c.56 0 1 .44 1 1v1h-2v-1c0-.56.44-1 1-1z" transform="translate(1)" />
|
||||
</svg>
|
After Width: | Height: | Size: 225 B |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 33 KiB |
After Width: | Height: | Size: 33 KiB |
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
|
||||
<path d="M5.88.03c-.18.01-.36.03-.53.09-.27.1-.53.25-.75.47a.5.5 0 1 0 .69.69c.11-.11.24-.17.38-.22.35-.12.78-.07 1.06.22.39.39.39 1.04 0 1.44l-1.5 1.5c-.44.44-.8.48-1.06.47-.26-.01-.41-.13-.41-.13a.5.5 0 1 0-.5.88s.34.22.84.25c.5.03 1.2-.16 1.81-.78l1.5-1.5c.78-.78.78-2.04 0-2.81-.28-.28-.61-.45-.97-.53-.18-.04-.38-.04-.56-.03zm-2 2.31c-.5-.02-1.19.15-1.78.75l-1.5 1.5c-.78.78-.78 2.04 0 2.81.56.56 1.36.72 2.06.47.27-.1.53-.25.75-.47a.5.5 0 1 0-.69-.69c-.11.11-.24.17-.38.22-.35.12-.78.07-1.06-.22-.39-.39-.39-1.04 0-1.44l1.5-1.5c.4-.4.75-.45 1.03-.44.28.01.47.09.47.09a.5.5 0 1 0 .44-.88s-.34-.2-.84-.22z"
|
||||
/>
|
||||
</svg>
|
After Width: | Height: | Size: 704 B |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 326 KiB |
After Width: | Height: | Size: 325 KiB |
Before Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 36 KiB |
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="256px" height="256px" viewBox="0 0 256 180" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
|
||||
<defs>
|
||||
<linearGradient x1="49.9804764%" y1="8.68053889e-07%" x2="49.9804764%" y2="100.030167%" id="linearGradient-1">
|
||||
<stop stop-color="#E52D27" offset="0%"></stop>
|
||||
<stop stop-color="#BF171D" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g>
|
||||
<g>
|
||||
<path d="M101.6,123.2 L170.8,87.4 L101.6,51.3 L101.6,123.2 L101.6,123.2 Z" fill="#FFFFFF"></path>
|
||||
<path d="M101.6,51.3 L162.3,91.8 L170.8,87.4 L101.6,51.3 L101.6,51.3 Z" opacity="0.12" fill="#420000"></path>
|
||||
<path d="M253.301054,38.8 C253.301054,38.8 250.80203,21.2 243.105037,13.4 C233.408825,3.2 222.513081,3.2 217.415072,2.6 C181.729012,0 128.04998,0 128.04998,0 L127.95002,0 C127.95002,0 74.2709879,0 38.3850059,2.6 C33.3869582,3.2 22.4912144,3.2 12.695041,13.4 C5.09800859,21.2 2.59898477,38.8 2.59898477,38.8 C2.59898477,38.8 0,59.6 0,80.3 L0,99.7 C0,120.4 2.59898477,141.1 2.59898477,141.1 C2.59898477,141.1 5.09800859,158.7 12.795002,166.5 C22.4912144,176.7 35.2862163,176.4 40.9839906,177.4 C61.4759859,179.4 127.95002,180 127.95002,180 C127.95002,180 181.729012,179.9 217.515033,177.3 C222.513081,176.7 233.408825,176.7 243.204998,166.5 C250.901991,158.7 253.401015,141.1 253.401015,141.1 C253.401015,141.1 256,120.4 256,99.7 L256,80.3 C255.900039,59.6 253.301054,38.8 253.301054,38.8 L253.301054,38.8 Z M101.560328,123.2 L101.560328,51.3 L170.733307,87.4 L101.560328,123.2 L101.560328,123.2 Z" fill="url(#linearGradient-1)"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 213 KiB |
After Width: | Height: | Size: 23 KiB |
|
@ -0,0 +1,160 @@
|
|||
body {
|
||||
max-width: 95ch;
|
||||
padding: 20px;
|
||||
margin: auto;
|
||||
font-size: 15pt;
|
||||
font-family: sans-serif;
|
||||
line-height: 1.5em;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.resume {
|
||||
max-width: 70ch;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
p {
|
||||
max-width: 70ch;
|
||||
}
|
||||
|
||||
@media (min-width: 900px) {
|
||||
.card {
|
||||
float: right;
|
||||
padding: 0 30px;
|
||||
margin: 0 30px;
|
||||
border-left: solid black;
|
||||
max-width: 22ch;
|
||||
line-height: 2em;
|
||||
}
|
||||
|
||||
.card figure {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 899px) {
|
||||
.card {
|
||||
margin: auto;
|
||||
padding: 20px;
|
||||
border: solid black;
|
||||
}
|
||||
|
||||
.card figure {
|
||||
margin: auto;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 899px) and (min-width: 600px) {
|
||||
.card { column-count: 2; }
|
||||
.card h3 { column-span: all; }
|
||||
}
|
||||
|
||||
img.pgp-img {
|
||||
float: left;
|
||||
height: 1.2em !important;
|
||||
}
|
||||
|
||||
.pgp > a {
|
||||
font-family: monospace;
|
||||
font-size: 10pt;
|
||||
line-height: 1.2em;
|
||||
display: inline-block;
|
||||
padding-left: 5px;
|
||||
width: 24ch;
|
||||
}
|
||||
|
||||
.card h3, .card h4 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.contact-list {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.contact-list img {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
|
||||
th {
|
||||
padding-right: 7px;
|
||||
}
|
||||
|
||||
.more {
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
.duration {
|
||||
float: right;
|
||||
}
|
||||
|
||||
li > .service::after, .skill-category::after {
|
||||
content: ": ";
|
||||
}
|
||||
|
||||
.dt-end::before {
|
||||
content: " — ";
|
||||
}
|
||||
|
||||
.inline-list {
|
||||
display: inline-block;
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.inline-list > li {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.inline-list > li:not(:last-child)::after {
|
||||
content: ", ";
|
||||
}
|
||||
|
||||
.inline-list > li:last-child:not(:first-child)::before {
|
||||
content: "and ";
|
||||
}
|
||||
|
||||
.inline-list > li:last-child::after {
|
||||
content: ".";
|
||||
}
|
||||
|
||||
.ap-score::before {
|
||||
content: "(";
|
||||
}
|
||||
|
||||
.ap-score::after {
|
||||
content: ")";
|
||||
}
|
||||
|
||||
.p-experience:not(:last-child) {
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.experiences > ul {
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
img {
|
||||
background-color: white;
|
||||
color: black;
|
||||
display: block;
|
||||
}
|
||||
|
||||
section figcaption {
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
font-size: 12pt;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
|
||||
section figure img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
footer {
|
||||
min-height: 100px;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="200.000000pt" height="200.000000pt" viewBox="0 0 200.000000 200.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,200.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M710 1696 l0 -64 60 -4 c74 -5 109 -35 141 -118 49 -130 50 -115 -27
|
||||
-276 -30 -62 -54 -114 -54 -117 0 -3 -20 -48 -44 -99 -51 -110 -174 -376 -198
|
||||
-430 -7 -16 0 -18 71 -18 l79 0 21 50 c21 49 63 140 146 315 23 50 60 127 81
|
||||
173 43 93 41 94 85 -28 51 -142 71 -195 80 -205 5 -5 9 -15 9 -22 0 -7 15 -52
|
||||
34 -101 19 -48 42 -108 51 -134 l18 -48 78 0 79 0 -16 37 c-8 21 -24 61 -34
|
||||
88 -10 28 -32 88 -50 135 -18 47 -38 103 -46 125 -8 22 -18 49 -23 60 -15 36
|
||||
-48 126 -118 320 -8 22 -21 54 -28 70 -7 17 -23 58 -34 92 -42 127 -79 191
|
||||
-124 217 -47 27 -126 46 -192 46 l-45 0 0 -64z"/>
|
||||
<path d="M490 1560 c-63 -8 -127 -44 -159 -88 -33 -46 -53 -154 -46 -237 8
|
||||
-83 -5 -141 -41 -184 -21 -25 -33 -30 -77 -33 l-52 -3 0 -45 0 -45 53 -6 c98
|
||||
-12 112 -43 112 -245 0 -170 14 -234 62 -283 53 -54 82 -64 210 -69 l118 -5 0
|
||||
45 0 45 -92 7 c-108 8 -139 24 -165 80 -14 32 -17 62 -16 141 5 178 -26 276
|
||||
-99 319 -28 17 -30 20 -12 27 32 12 82 72 99 118 10 29 15 80 15 152 0 139 15
|
||||
180 74 209 31 15 62 20 119 20 l77 0 0 45 0 45 -62 -1 c-35 -1 -88 -5 -118 -9z"/>
|
||||
<path d="M1330 1526 l0 -46 77 0 c57 0 88 -5 119 -20 59 -29 74 -70 74 -209 0
|
||||
-72 5 -123 15 -152 17 -46 67 -106 99 -118 18 -7 17 -9 -10 -25 -39 -23 -79
|
||||
-82 -90 -131 -4 -22 -8 -98 -9 -170 -1 -199 -23 -229 -183 -241 l-92 -7 0 -45
|
||||
0 -45 119 5 c105 4 124 8 164 31 85 50 108 116 107 310 -1 211 16 247 116 255
|
||||
l55 5 -3 46 -3 46 -51 5 c-95 10 -119 52 -117 200 3 182 -31 266 -127 316 -35
|
||||
18 -68 25 -152 30 l-108 7 0 -47z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "James Martin",
|
||||
"short_name": "James Martin",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/android-chrome-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#ffffff",
|
||||
"display": "standalone"
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
dist
|
||||
dist-*
|
||||
cabal-dev
|
||||
*.o
|
||||
*.hi
|
||||
*.chi
|
||||
*.chs.h
|
||||
*.dyn_o
|
||||
*.dyn_hi
|
||||
.hpc
|
||||
.hsenv
|
||||
.cabal-sandbox/
|
||||
cabal.sandbox.config
|
||||
*.prof
|
||||
*.aux
|
||||
*.hp
|
||||
*.eventlog
|
||||
.stack-work/
|
||||
cabal.project.local
|
||||
cabal.project.local~
|
||||
.HTF/
|
||||
.ghc.environment.*
|
|
@ -1,2 +0,0 @@
|
|||
import Distribution.Simple
|
||||
main = defaultMain
|
|
@ -1 +0,0 @@
|
|||
Subproject commit 12d9f9c59904f2e9707d5319ff351250280b6532
|
|
@ -1,76 +0,0 @@
|
|||
module Templates
|
||||
( module Templates
|
||||
, module Templates.Urls
|
||||
, module Templates.Icons
|
||||
) where
|
||||
|
||||
import Templates.Urls
|
||||
import Templates.Icons
|
||||
|
||||
import HtmlGen
|
||||
|
||||
basePage :: String -> String -> Html -> Html
|
||||
basePage pageTitle authorName content =
|
||||
html %% xmlns %% langEn
|
||||
%> (headTag
|
||||
%> utf8
|
||||
%> author authorName
|
||||
%> allowRobots
|
||||
%> stylesheet stylesheetCommonUrl
|
||||
%> faviconLink
|
||||
%> (title %>> pageTitle)
|
||||
%> viewport
|
||||
%> (newTag "script" %% ("async", "async") %% ("src", resUrl ++ "/common.js"))
|
||||
%> blockAllMixedContent
|
||||
%> cspMeta "default-src 'none'; style-src 'self'; img-src 'self' https://stackexchange.com; script-src 'self';"
|
||||
)
|
||||
%> content
|
||||
|
||||
navSection :: Html
|
||||
navSection =
|
||||
nav
|
||||
%> (spanTag `withId` "navbrand" %> ((href baseUrl $ text "James Martin") %% ("class", "navbrand")))
|
||||
%> unorderedList
|
||||
[ href (baseUrl ++ "/") $ text "Home"
|
||||
, href projectsUrl $ text "Projects"
|
||||
, href aboutUrl $ text "About"
|
||||
]
|
||||
|
||||
footerSection :: String -> String -> Html
|
||||
footerSection authorName dateModified =
|
||||
footer
|
||||
%> (divTag `withClass` "metadata"
|
||||
%> (spanTag
|
||||
%> authorIcon
|
||||
%>> ' ' : authorName ++ " "
|
||||
)
|
||||
%> (spanTag
|
||||
%> updatedIcon
|
||||
%>> ' ' : dateModified ++ " "
|
||||
)
|
||||
%> license
|
||||
)
|
||||
|
||||
simplePage :: String -> String -> String -> Html -> Html
|
||||
simplePage titleName authorName dateModified content =
|
||||
basePage titleName authorName $
|
||||
body %> navSection
|
||||
%> content
|
||||
%> footerSection authorName dateModified
|
||||
|
||||
redirectPage :: String -> String -> Html
|
||||
redirectPage name url =
|
||||
html
|
||||
%> (headTag
|
||||
%> utf8
|
||||
%> (meta
|
||||
%% ("http-equiv", "refresh")
|
||||
%% ("content", "0;url=" ++ url)
|
||||
)
|
||||
%> (title %>> "Redirecting to " ++ url)
|
||||
)
|
||||
%> (body
|
||||
%> (href url $ p
|
||||
%>> ("Click here if you are not being redirected to " ++ name)
|
||||
)
|
||||
)
|
|
@ -1,87 +0,0 @@
|
|||
module Templates.Icons where
|
||||
|
||||
import Templates.Urls
|
||||
|
||||
import HtmlGen.Html
|
||||
import HtmlGen.Tags
|
||||
|
||||
personIconUrl :: String
|
||||
personIconUrl = iconUrl ++ "/" ++ "person.svg"
|
||||
|
||||
personIcon :: String -> Html
|
||||
personIcon alt = img alt personIconUrl
|
||||
|
||||
authorIcon :: Html
|
||||
authorIcon = personIcon "Author"
|
||||
|
||||
clockIconUrl :: String
|
||||
clockIconUrl = iconUrl ++ "/" ++ "clock.svg"
|
||||
|
||||
clockIcon :: String -> Html
|
||||
clockIcon alt = img alt clockIconUrl
|
||||
|
||||
updatedIcon :: Html
|
||||
updatedIcon = clockIcon "Updated"
|
||||
|
||||
ccbysaIconUrl :: String
|
||||
ccbysaIconUrl = resUrl ++ "/cc-by-sa-small.png"
|
||||
|
||||
ccbysaIcon :: Html
|
||||
ccbysaIcon = img "This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License" ccbysaIconUrl
|
||||
|
||||
license :: Html
|
||||
license =
|
||||
divTag `withClass` "license"
|
||||
%> (href ccbysaUrl ccbysaIcon
|
||||
%% ("rel", "license"))
|
||||
|
||||
faviconUrl :: String
|
||||
faviconUrl = baseUrl ++ "/favicon.png"
|
||||
|
||||
faviconMime :: String
|
||||
faviconMime = "image/png"
|
||||
|
||||
faviconLink :: Html
|
||||
faviconLink = favicon faviconUrl faviconMime
|
||||
|
||||
accountIconClass :: (String, String)
|
||||
accountIconClass = ("class", "accounticon")
|
||||
|
||||
githubMarkUrl :: String
|
||||
githubMarkUrl = iconUrl ++ "/github-mark-100px.png"
|
||||
|
||||
githubMark :: Html
|
||||
githubMark = img "GitHub" githubMarkUrl %% accountIconClass
|
||||
|
||||
linkedinLogoUrl :: String
|
||||
linkedinLogoUrl = iconUrl ++ "/linkedin-logo-100px.png"
|
||||
|
||||
linkedinLogo :: Html
|
||||
linkedinLogo = img "LinkedIn" linkedinLogoUrl %% accountIconClass
|
||||
|
||||
redditLogoUrl :: String
|
||||
redditLogoUrl = iconUrl ++ "/reddit-logo-100px.png"
|
||||
|
||||
redditLogo :: Html
|
||||
redditLogo = img "Reddit" redditLogoUrl %% accountIconClass
|
||||
|
||||
wikipediaLogoUrl :: String
|
||||
wikipediaLogoUrl = iconUrl ++ "/wikipedia-logo-100px.png"
|
||||
|
||||
wikipediaLogo :: Html
|
||||
wikipediaLogo = img "Wikipedia" wikipediaLogoUrl %% accountIconClass
|
||||
|
||||
youtubeLogoUrl :: String
|
||||
youtubeLogoUrl = iconUrl ++ "/youtube-logo-100px.jpeg"
|
||||
|
||||
youtubeLogo :: Html
|
||||
youtubeLogo = img "Youtube" youtubeLogoUrl %% accountIconClass
|
||||
|
||||
freenodeLogoUrl :: String
|
||||
freenodeLogoUrl = iconUrl ++ "/freenode-logo.svg"
|
||||
|
||||
freenodeLogo :: Html
|
||||
freenodeLogo = img "Freenode" freenodeLogoUrl %% accountIconClass
|
||||
|
||||
stackexchangeProfile :: Html
|
||||
stackexchangeProfile = href stackexchangeUserUrl $ img "James Martin's Stack Exchange profile" stackexchangeFlairUrl %% accountIconClass
|
|
@ -1,58 +0,0 @@
|
|||
module Templates.Urls where
|
||||
|
||||
baseUrl :: String
|
||||
baseUrl = "https://jtmar.me"
|
||||
|
||||
resUrl :: String
|
||||
resUrl = baseUrl ++ "/res"
|
||||
|
||||
iconUrl :: String
|
||||
iconUrl = resUrl ++ "/icon"
|
||||
|
||||
ccbysaUrl :: String
|
||||
ccbysaUrl = "http://creativecommons.org/licenses/by-sa/4.0/"
|
||||
|
||||
stylesheetCommonUrl :: String
|
||||
stylesheetCommonUrl = resUrl ++ "/common.css"
|
||||
|
||||
projectsUrl :: String
|
||||
projectsUrl = baseUrl ++ "/projects"
|
||||
|
||||
aboutUrl :: String
|
||||
aboutUrl = baseUrl ++ "/about"
|
||||
|
||||
githubUrl :: String
|
||||
githubUrl = "https://github.com"
|
||||
|
||||
githubUserUrl :: String
|
||||
githubUserUrl = githubUrl ++ "/jammar"
|
||||
|
||||
githubProjectUrl :: String -> String
|
||||
githubProjectUrl name = githubUserUrl ++ "/" ++ name
|
||||
|
||||
githubQiplUrl :: String
|
||||
githubQiplUrl = githubUrl ++ "/" ++ "qipl"
|
||||
|
||||
githubQiplProjectUrl :: String -> String
|
||||
githubQiplProjectUrl name = githubQiplUrl ++ "/" ++ name
|
||||
|
||||
resumeUrl :: String
|
||||
resumeUrl = baseUrl ++ "/resume.pdf"
|
||||
|
||||
qiplUrl :: String
|
||||
qiplUrl = "https://qipl.org"
|
||||
|
||||
redditUserUrl :: String
|
||||
redditUserUrl = "https://reddit.com/user/lijero"
|
||||
|
||||
youtubeUserUrl :: String
|
||||
youtubeUserUrl = "https://www.youtube.com/channel/UC_nCB91N-0zNbFiMoMu6-3w"
|
||||
|
||||
wikipediaUserUrl :: String
|
||||
wikipediaUserUrl = "https://en.wikipedia.org/wiki/User:Lijero"
|
||||
|
||||
stackexchangeUserUrl :: String
|
||||
stackexchangeUserUrl = "https://stackexchange.com/users/10815798/james-martin"
|
||||
|
||||
stackexchangeFlairUrl :: String
|
||||
stackexchangeFlairUrl = "https://stackexchange.com/users/flair/10815798.png"
|
|
@ -1,66 +0,0 @@
|
|||
# This file was automatically generated by 'stack init'
|
||||
#
|
||||
# Some commonly used options have been documented as comments in this file.
|
||||
# For advanced use and comprehensive documentation of the format, please see:
|
||||
# https://docs.haskellstack.org/en/stable/yaml_configuration/
|
||||
|
||||
# Resolver to choose a 'specific' stackage snapshot or a compiler version.
|
||||
# A snapshot resolver dictates the compiler version and the set of packages
|
||||
# to be used for project dependencies. For example:
|
||||
#
|
||||
# resolver: lts-3.5
|
||||
# resolver: nightly-2015-09-21
|
||||
# resolver: ghc-7.10.2
|
||||
# resolver: ghcjs-0.1.0_ghc-7.10.2
|
||||
#
|
||||
# The location of a snapshot can be provided as a file or url. Stack assumes
|
||||
# a snapshot provided as a file might change, whereas a url resource does not.
|
||||
#
|
||||
# resolver: ./custom-snapshot.yaml
|
||||
# resolver: https://example.com/snapshots/2018-01-01.yaml
|
||||
resolver: lts-11.7
|
||||
|
||||
# User packages to be built.
|
||||
# Various formats can be used as shown in the example below.
|
||||
#
|
||||
# packages:
|
||||
# - some-directory
|
||||
# - https://example.com/foo/bar/baz-0.0.2.tar.gz
|
||||
# - location:
|
||||
# git: https://github.com/commercialhaskell/stack.git
|
||||
# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
|
||||
# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a
|
||||
# subdirs:
|
||||
# - auto-update
|
||||
# - wai
|
||||
packages:
|
||||
- .
|
||||
- html-generator
|
||||
# Dependency packages to be pulled from upstream that are not in the resolver
|
||||
# using the same syntax as the packages field.
|
||||
# (e.g., acme-missiles-0.3)
|
||||
# extra-deps: []
|
||||
|
||||
# Override default flag values for local packages and extra-deps
|
||||
# flags: {}
|
||||
|
||||
# Extra package databases containing global packages
|
||||
# extra-package-dbs: []
|
||||
|
||||
# Control whether we use the GHC we find on the path
|
||||
# system-ghc: true
|
||||
#
|
||||
# Require a specific version of stack, using version ranges
|
||||
# require-stack-version: -any # Default
|
||||
# require-stack-version: ">=1.7"
|
||||
#
|
||||
# Override the architecture used by stack, especially useful on Windows
|
||||
# arch: i386
|
||||
# arch: x86_64
|
||||
#
|
||||
# Extra directories used by stack for building
|
||||
# extra-include-dirs: [/path/to/dir]
|
||||
# extra-lib-dirs: [/path/to/dir]
|
||||
#
|
||||
# Allow a newer minor version of GHC than the snapshot specifies
|
||||
# compiler-check: newer-minor
|
|
@ -1,25 +0,0 @@
|
|||
name: templates
|
||||
version: 0.1.0.0
|
||||
-- synopsis:
|
||||
-- description:
|
||||
homepage: https://github.com/lijerom/jtmar.me
|
||||
license: GPL-3
|
||||
--license-file: LICENSE
|
||||
author: James Martin
|
||||
maintainer: james@jtmar.me
|
||||
copyright: 2018 James Martin
|
||||
category: Web
|
||||
build-type: Simple
|
||||
cabal-version: >=1.10
|
||||
-- extra-source-files: README.md
|
||||
|
||||
library
|
||||
hs-source-dirs: src
|
||||
default-language: Haskell2010
|
||||
exposed-modules:
|
||||
Templates
|
||||
, Templates.Icons
|
||||
, Templates.Urls
|
||||
build-depends:
|
||||
base >=4.7 && <5
|
||||
, html-generator
|