diff --git a/src/css/styles.css b/src/css/styles.css index 9aa6830..b1024c2 100644 --- a/src/css/styles.css +++ b/src/css/styles.css @@ -1,9 +1,11 @@ /* https://github.com/pure-css/pure/blob/master/site/static/layouts/side-menu/styles.css */ + + body { color: #777; - font-size: 20px; + --bs-body-font-size: 20px } #navbar-image { @@ -356,4 +358,35 @@ Hides the menu at `48em`, but modify this based on your app's needs. .nani_card-link:hover { filter: brightness(90%); +} + +.nani_logo-link { + display: inline-block; +} + +.nani_logo-link img { + height: var(--bs-body-font-size); + display: inline-block; + vertical-align: middle; +} + +.nani_logo-link-color-inverted img { + filter: invert(1); +} + +.nani_logo-link:hover { + filter: brightness(90%); +} + +.nani_youtube { + position: relative; + padding-bottom: 56.25%; /* 16:9 */ + height: 0; +} +.nani_youtube iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; } \ No newline at end of file diff --git a/src/images/logos/dart.svg b/src/images/logos/dart.svg new file mode 100644 index 0000000..0bf93ab --- /dev/null +++ b/src/images/logos/dart.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/images/logos/gitea.svg b/src/images/logos/gitea.svg new file mode 100644 index 0000000..8da0753 --- /dev/null +++ b/src/images/logos/gitea.svg @@ -0,0 +1,493 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + 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 +OhcEmRdALVCM/RDwKkjmd9p42id8coSKWhBx4btistKw8FwhmShZuIZFFphwkYaDJZyh0zB7QMJD +F0oGyRMo7DhCDrgIkn9m5mZjpzlnMDe4CL8UkAUECJ8UnABp5BMKW7o0Iz89gFINztES3IJrOg0r +qEKOsZeHkF8mLK0IIT+Y4DQYcFoLKIs3RsJrsXiyiJXBVJUjmFFUrEI5WEk1IoyPQ0SWxjh2nEEo +FHGpLs6BqPHR06Fy8TqN1ZChHJdAoPLPx3Tg6DDDR8GgD7wwoqCpDFRP9WBd8pudNuFALlODwyk1 +FAYGTRnZzz0UDBx/MNlxBL0pQztt5aBYdZLtmpjEijceEKgcocS52IAcNExG9nPX1NlY4QzGsdM8 +pQOsHMn2PjpSUQIUhnEEOZQlx0d0Om0T4mD4QkUG5BKKp9LFhU8YuoqrFcHgIDvNwwAtHFdkQhAO +jQuIyYR3mmbUCBIeJ3OhSPiC7BRCSOTBBck7rUByUkEIUEL7wkm+wYDACyMB3GmgFgiCu3Q6oYuq +MNsIjdyjmMg2pkKnfcJXg06ZQnrmAGUHWMgzE7bT5rxZAEMoJgsGUMhlGXb6OCQj+zk5QXiQnRZx +GHRcFRzW5CgEH5J28HgEKwwFtc7/Te/t2Cn1W3el+2rXj/PbSX/L+O+744uvvjrbrKu22GI762up +jdJtt8X5Zp2z3jnfureu0/6m3bF/fm1rpplmTWm9O2uf9zdMM9YXZ6txtdT11Xm7tnne/+xPc76P +7aYTv6bZ3vGu9N79+j7ed9Nqs2vsU/923V5rMc06+70Z2/yV/vZb32yvO8bV3orzb+pOJ92u3e1f +bHe++Ku2FOd6K6UbY/u1anpz1rZifW+9FmftVu9c7Z3a2i1fvXXeVFeL98y0urX4aX2aZ7ZYu9YZ +Z/dNQ9tnz07vrtZeTbNlvP/Wt+90+2eM/T7Fc9cNu7ZYW5y11W913pvabHHd09qtUnyx/mozfU3f +PVv/Te3Pv1oI45pp9nxd5zsfa5qtbozvtnXnjSu1t2698b7z8abfsd9b8cXTsd0qza7f3m294knx +Vi99fXXO+Oa5r930V/fr79dqPSvWYJvOtOK3+vrjea/d/vNnuvesmNqfvuHpW67UtTuuGGNdffr2 +G6W+8Vd7P1ffP32zldZ67Wt3qzPebK+RmM1SbSbRQszmWgClzTXM5tqp0woiyhFz8i3yp62ybUAR +oYXSN2K+U6dxMJtrsdAW+Q2ioUKbb3433+6lm6a/7fyqGOf0r1kCQEoQLh48IcO1eF9F5nkKw4XH +IDnwuEY2+akAskAQLLJOM3kFjJhPHqJwLf75Pheenxt7oM7PtXhOKmWoRWPg853mVa69n0+SQORo +kReeq/S5KIo8YgvX0mkHFms6+NyGVk75NJQWJiXVacJZCcWGVFa+YSllG6gyhipVkC7UxMjaCFEX +MhRqxCI9uAqSCghMOGam0XQRM7lIlik0VWygTJ1WOpksHq0wVZhSpoWPw0yO0SSKShUzl6jUaSVL +3NBcBiShyOLRESXaOF1UiC5Ek+iCJOJeHpaHKx9OpQoLgVJFbFQh8swQpv4XRWUwACcuOu1CNaGJ +oOpIIeEg9ACDYGJCfISUn2+MJhbPv2mp4Lz3mVg8iqWC85RhYvFG9kPwIeA6bUYdBEjKmpMKkI8u +BqM3OmwYbPddR+gfje9gHDUhpbtAfQh/nuELeRxFWlBKx/O5iFDBeQ/B8/l0hDyf+VAkhmvxWKAB +ysu1B+pBxuQVrsWjeKHJU6guOA+pWKYJYi2fb0qgg+7XuZFSg2dbpuZ+TvlMDi4FZUO/iYsMHXIC +Qwc5EpfqFyN5Cou0oJKw4YstQAQwPk7wNcg2JhcD7dBpndZpndZdEHwUTlQxFK7AZfG4BJfF4xwg +BdJpCzsMx46oikUUaJPt2y61WrMEQLQOEQFv8HzuokHC5kMY+PxkuBbv2gyPhkR4/jWBynOIknYB +o+FiXSHMFxOXxvK5DOQA38JTuBbPK/ckonAt3sd6TF4joWgqEC5W3mkUlYhVHkkTizdhQyunIGxA +Kiu3Iwf4j3w/lx1gJB+B/K2AKHgs3pwQqHyD5EUSHOBHTp3PYQmZkKBrEVQHj8W7FtdiSxcDBAiy +W21eH9gE5nimDK0Z5UyYGIzkpwDGxz+K0oAg8ulEXCpqwma4UKCLQtEYyb/HAf6McH3eaZSbgfrU +iQydjA4edEJygD/ZVHB+8oACQxgVolVKRS4kFBm6Q5S0EjEMBEamkFkajAKCCIymchCBPcL0+fdg +6rTZYPJApi8yByJ0IAZxqSXR56SKtKCPIi2oP4g+n9wZEn0+o4BEnkZEIzzexUjeGzwhz+cXHc+F +h+CJVDweQriYWVCLjuXzTpsgGFQuOC+pVCAQlVtAbEZGutSK73Mtc07NxPESFxlCHp9PAOPjZMW1 +UE6lDB24poMHrYANgH+hEcr5UU3NyieRhgn36bQJiqZwEzuBwrHIyedavC/UCCUSSYVEIrkgqUPF +5sFFKiKRUkXEFIkseJGYyaJGm49DIJAFTxJzVS6dZgGBlCCd1mkTRVpQx46YFhpSP6Ouhlw5LyEu +tdMoM0LDMS0+CpHMSCb8peECTkqd1kAxqxiRG4PPYnAGXUXAmEW8CgR2qM5ShICCtBw381gH+BUU +pszI+USu5AgbLCL2RXGBRETRtYBfwZiNm1inkpC4KNKCeg6XZAP8vNMirtLnnnHheUjY8HnOwCL0 +cercEQWodsRLIDJFwEwHXAKdINgQoWYdhkVBaKiEgkFKxRkdeI8boqR1eIyFV+ddSovXaZ3WaRvg +5xYHHNnxKjivAb4wHcnLdepgSohL7bQCO47cqXOhEQGBqZA8XEYEEBQSsLsRWmSWpgwfD0rglkGE +gmtpII88c+xOyV4gOqMs1mmd1mmd1mm1gaIpXIHDwbPQYE24B2TC4xJUpwnXsS+PQ4BMeBzD46Nw +9GEzMakgMkunaSzErtM6jUp02kbdQGBcBx7PpmIzoFCgKTHKo6QDsgwJp9HIyEeem4rYw5XpNI1G +5lglsKlsRILKiNSZ2MyI+8EoXMoPITTKSHBCHnC2MSgpBgYMAgwYmYwB/mAQMP5g9oLIotJpOeMy +jppwpipl6MPBJwQb2LB0mihfxrHTQpLB6sGVUIDQaW9RnjoSBnNuqAQD2WkVFxoIzGmjqZWKDU4F +YWCAnjqfayzEjuVQTXDmAwQ5oYfPRmZxsxHGNe6wYJQgQWBYEy2PQwrACEQWb4oOHnTgg3gkpNHO +zMSSMSv4CCRYaFQPA7tjuQK7M6IMGJmBcvwQGkTgbDNwgXrdBpTFyCmQQawQGDDwB2NRdiY2j4o4 +wSRc77LpMDikMAgum2AYTBkJDvWZ0XyurNMyHzs7rdM6rdM2A6QIy4fMqFzGkdWAMTgcRHnqdBro +QIGEEJI67eKyeJx32gVFU7hJRhIZlRYm3EhJeZyCy+JxoZBsY8IZCDwk+GFiCSwFl07jCGYWz7FD +dTpULp0Gw3zs7LTWJvOvTYdswUAbzIfZQPiW6MNxgEBcmVbIqSA8hCoCpw4swWPhSE4Rlg03Yioq +drDSjBgPc3NiVRQgSE4p2mm7otMw7t10LBBEDZnYhnTXAxGnXIzkYwsUakcVnB9jpw== + + + FAbIQW00tSIgI1htHC4NqQ2NLQhMHIzjJtap/IF0WG0G7AYCEzLIaMAIfCanjmn8iAgbpQcJYSTo +tDQTsWN9G5f85uxcDBAckNkIk4ApQBuIRgEExvTwICFgfBsxBBcHA+QgbHQqOB8xHXzead6BKHSS +q/T5A4ObcJNxjFgqhsKNOnTCETgcPO7h8VUYDCIMHTrhMjPldRpmKJgQ94PKQJU4XItXHy6f77Rn +uBbvO5TPd2KOV0bDVMo4Tg7wIxpPRMJwLV5DhoOBxRsZz3faK1yLd1FAXfeQCuPC0HxI2eJ9Ctfi +zY+Y/ETBO7CMGePjESqIzKLAQLrUBE7BQPUqk9ZHUJZaH8hgZkEnU7NyCw7hQadoghGIvFAjfHzK +07V4E1J+DrGi0EfTtXiUDVA2uhBMBedNB9+eKY+rcIhROMurFeEgLpEJ96nMIBMMEa4ksVDSYE24 +WcdC4lAJUQEvKWA+JRLHwxbX4l3Pk+CZPBHU3S1gdBYcFFIusEQkHVJ5WZpOsxrl5xsPBw9KVQ+W +n0MQ3vN+UaZmqfxcI5iiUAvoV6ahg1maVeQiLMAwV7exgEEVKCKnzqlyFxRVVS5L6PKgqAuncH0l +1+eUB5dVVRD1uUhB20IvUN9ToD7vtAgohHovob4I1OcTAYyPUxpQoAVNAqdXhIJAH0hn1k02HoX4 +kulz7kAF2kCED4SOR28HnRDpNI2xQw4lz7ZoWI5BJ+IRy6gQGIDfhjKBLZ7GwKCETJ/DJoHKPQGM +jwsYCFg8D+JavOoaLXyVQvRJIkSfTy5G8l+D6POxwRFap4HTdV2nhRmgLACRRW7hKJZkOGZsYQYo +C0twCwOAZIY2hq8WOEJQKCEtQqKttFBou34pvXpjpz/z+6VO687W58632ut040untZ/z1vq3xTPX +bVO32C3OVfu09d2t1tpt1hfvjO2mVdeatcW2Ylvp3hbjWqtPXa/2XHfF2PfV//71aq+f79/P/xRv +z9v+1DVbz/6V7kn1X69U2/r59c56Uo2fYm2za00vrnrSp37x22y/To1zrjrbfXf2vbfW++v73bnq +m3PF2en/fr3vdLvpSm2lGT/Wf2/O99Z7s+uKacXVr/vOjz9jfzrv1+z30ly3U7rpP/aMJ7Ub3dpz +rdrap68tzTjTz7ZuvPHnmm22mG5r70+3G9X04t/4s834brz1zRXb90o9U303vbPWTPH1jetPt5pm +w5da/NRi/zur3rXarbOmn+19W93t/r/Vaqr1zlrrvevPWmu9lLrWbuvr/F9z/d/araUX0/rb6nuz +rjtrvffGmNast1uqp9ttV7z3O72fN9Y4Z0zptXW6rb83zn7vvrZu+tTOXbeKL6Y343293v01P7Wf +9bZT143mSrXdVVudNbbbXVur8d45z692o/W/1qox1vbfOr316+dNNdZZ6/t64rrtq/PnS7G2eFaM +XbvG2W468z+mes+ad971PeunU9ftq2fr9uljn/Zuz3T/rla7plTrjOv2S+mmfu3NFeOpq6bZds7V +aqd+/bPbS63W+Wp6Mf1/mrP2qnPOW09dN51zfqe06vrT4p1pxndv31PXuq3nevFPq/HF27WtdE9d +t533611pfvwzV7ttvO1nXK/bzVJ6773a6WudX2+99c7651sttV3rXzd1/fp+9frbd7X59/SnFW/9 ++6dbu/3vq7fenuuWba1O3+7rebrV11prbX48929c97X59b2v/eZ7X2Osdc6vqWO9K6Y020opzTd7 +pplemy3OdlfP1u7HFM9MP++9ra0b+1+s9e+s6Z25bvT3thfjTO+9+j6mur7OuM5ct7ev8/36u9q3 ++93+zp7zz1y11JZ3zY4rdYprzXT7xm9rxdvqSmuu7hnvq/H+jXH2PHHdbKV6Y9fULbVWa7+udbV2 +4ntr1ftiOv8tttXz3fontk4xpfpfV9+00moxtq5nrdulWVenfyl1mzXdV+9Z66ax01tpzq53xY5z +rU7rpl+117rrtZjmre8/xdjrUzpt3erVvrHNurqeNu+rPWu39/q27+8Y66wvfq9/n97sFmPXmup6 +7axX09ev6d+ftW5f9duqrT99bCn2fKlnTemkdaM00+y47rtf2+z+dP62j+vVld6q32KN8cU66+l1 +e/35alottpZSx08pzvraO71u9uK/lV6/2L7N+bXNlvr8qqU2revbrLPFO9en2W77Gmu759ct07qv +pRpjvWnd163OttqftG61vrW2Wux3V2pvrpXaGtru0/037/2+La5PM3Vtdb0av29796W/59N69318 +9Z62bnrb17T6W+zZd9av/fW+etq6Xfq46vpYVzqp1fu+vf4430tpxvg6rRb/thZf/Nk3nrb+vhXb +m/fNNr9vum+dtm4261rr+/5cP+Pr9Sl+XfW0VUttG+udX2Prub7NjnO91W58q3WdMd76M/acP++n +1157qf1aP1P8VOufuNr3i63Wrqet1vO9lu5dJ8a13owzpvnzU3qx11zxfj1z1TQb1jRrnal1jae+ +1dZtda563rrRbK1v69vaTVuN9bV22rp9vbu+xhbnvDXdOE9Krz/N2lpdZ7Z2q9afbq/Z6fZJq6bZ +LNUb5+rZrZ242k1XS+vXvKvNeWK61dduNaVZW8eON3XqevvEdNv43nqt1891V2uta22rznhiqoW2 +qqv+m+m2G09a7Ya3u++da/XsU1NNs116d81/ac613rf56799n7tuuVZKs83aPU9M7Xad5n0r9cdu +p9t/+prOTO2ms1vtlv6t2ie1Wmj7TfFbur9mPDW1m637Xmq31vvmSa2m2bLe+OqbN35sr7VOL745 ++9R203tfnfHd2l3nip9Sane9eWq7UUt/+80Va7zrpfVzfVzzT2012Lap1f70ZorrrJZanSe2GonZ +dNVWmmarWNOb91NM8bTWbvR1xf4VY+102t+2640/a31rfvebs9WVWuyzfr05/62WWpp9U/w5W1tr +vY8ff9Wv/VLq2TGd9LUUdpv/s630Op30N5ytX309333nvfa1zbti6nnu7WLPWeOaLd3TXuu6Yktz +pnpmLbVpx3vbq3Hed9Zrt/zU6bUX698UT7zhjK3buh3TuvXe2u39vXO2824730tde35r96XbVvtv +8d7Taqkt31ura63tppvqfK+mnivNdN6tWn2v2+15U6pv3tdud+z5J940pve+rnXbO3e1W9X2/nWf +/xpsy/uxpvcxdY3x1TpTf5y/TvzaZnONxGxXW2mp7fP/1tT3/Tr92g3f7DfT6tnrT4s3Xe/eVe+n +O8+3drvU4n39vt9NJ8VaatP7PsZUb9daU/pV26v3pnfuu+nq+9pqLcZ2Vmq3+tWpvVh7xXvau2nt +tfrGnrGtj++ll9pbp18tVKnemeatd/1Qtnfra/df6z611TQbfb81Y3zpprX678eUYpr31HTL9CnN +VteM83xqt2tpvvl+vfbeaanG1D6u06vd6t2/bd77q9VTv6bZNK331lw947e1Zn9Kv75+6hZTp5rO +Wu12rd74vV5MtZ71t7yxP/3f23/aards/f61/zjTOv211PaaWmqv32q3nD9f69S33ii2W9u97/2p +q920dZs3vvbinCd9e/PV2E5q7Ubvfmy/0pwf06/v1/W1fq2lG29r3/FT+z59y1R7rZj+/p/02q1a +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 + + + diff --git a/src/images/logos/github.svg b/src/images/logos/github.svg new file mode 100644 index 0000000..15e4ede --- /dev/null +++ b/src/images/logos/github.svg @@ -0,0 +1,63 @@ + + + + diff --git a/src/images/logos/gitlab.svg b/src/images/logos/gitlab.svg new file mode 100644 index 0000000..edb193b --- /dev/null +++ b/src/images/logos/gitlab.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + 1x + + + 1x + + + 1x + + + + 1x + + + diff --git a/src/images/logos/haskell_orange.svg b/src/images/logos/haskell_orange.svg new file mode 100644 index 0000000..f1f83cb --- /dev/null +++ b/src/images/logos/haskell_orange.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/src/images/logos/haskell_purple.svg b/src/images/logos/haskell_purple.svg new file mode 100644 index 0000000..c08bdc7 --- /dev/null +++ b/src/images/logos/haskell_purple.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/images/logos/nani.svg b/src/images/logos/nani.svg new file mode 100644 index 0000000..c5a9961 --- /dev/null +++ b/src/images/logos/nani.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + diff --git a/src/images/logos/nix_options.svg b/src/images/logos/nix_options.svg new file mode 100644 index 0000000..443f9d8 --- /dev/null +++ b/src/images/logos/nix_options.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/logos/nix_packages.svg b/src/images/logos/nix_packages.svg new file mode 100644 index 0000000..9a70a14 --- /dev/null +++ b/src/images/logos/nix_packages.svg @@ -0,0 +1,513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/logos/npm.svg b/src/images/logos/npm.svg new file mode 100644 index 0000000..af80f67 --- /dev/null +++ b/src/images/logos/npm.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/images/logos/reddit.svg b/src/images/logos/reddit.svg new file mode 100644 index 0000000..222028a --- /dev/null +++ b/src/images/logos/reddit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/logos/rust.svg b/src/images/logos/rust.svg new file mode 100644 index 0000000..b486919 --- /dev/null +++ b/src/images/logos/rust.svg @@ -0,0 +1,2 @@ + +Rust programming language logoimage/svg+xml diff --git a/src/images/logos/stack_overflow.svg b/src/images/logos/stack_overflow.svg new file mode 100644 index 0000000..5298d4c --- /dev/null +++ b/src/images/logos/stack_overflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/images/logos/wikipedia.svg b/src/images/logos/wikipedia.svg new file mode 100644 index 0000000..a6c3159 --- /dev/null +++ b/src/images/logos/wikipedia.svg @@ -0,0 +1,59 @@ + + + + + + + image/svg+xml + + + + Wikipedia's W + W de Wikipédia + + + + + The official Wikipedia favicon + El favicono oficial de Wikipédia + + + + + + Jonathan Hoefler + The "W" originates from the Hoefler Text typeface by Jonathan Hoefler. + + + STyx + SVG document originally created by Wikimedia user STyx and uploaded on 25 June 2007 + 2007-06-26 + + + + + + Wikipedia + favicon + + + + + This work is ineligible for copyright and therefore in the public domain because it consists entirely of information that is common property and contains no original authorship. + ™ Wikimedia Foundation, Inc. This file is (or includes) one of the official logos or designs used by the Wikimedia Foundation or by one of its projects. Use of the Wikimedia logos and trademarks is subject to the Wikimedia trademark policy and visual identity guidelines, and may require permission. + + + + + Wikimedia Commons + + + + + + + + + + + diff --git a/ssg/src/Main.hs b/ssg/src/Main.hs index d6e08f1..70dc7c9 100644 --- a/ssg/src/Main.hs +++ b/ssg/src/Main.hs @@ -24,6 +24,7 @@ import Formats.Posts import Util.Hakyll.Routes import Util.Hakyll.Context import Util.Hash +import Preprocessing.Replacement -------------------------------------------------------------------------------- -- CONFIG @@ -59,7 +60,7 @@ main = hakyllWith config $ do [ "CNAME" , "favicon.ico" , "_config.yml" - , "images/*" + , "images/**" , "js/*" , "fonts/*" ] @@ -81,7 +82,9 @@ main = hakyllWith config $ do route $ postRoute fileHashes compile $ - pandocCompilerCustom + getResourceBody + >>= replaceLogoLinks + >>= pandocRendererCustom >>= loadAndApplyTemplate "templates/post.html" ctx >>= saveSnapshot "content" >>= loadAndApplyTemplate "templates/default.html" ctx @@ -95,7 +98,6 @@ main = hakyllWith config $ do route $ setExtension ".html" compile $ do - pandocCompilerCustom >>= loadAndApplyTemplate "templates/gogen.html" ctx >>= saveSnapshot "content" @@ -204,6 +206,10 @@ pandocCompilerCustom :: Compiler (Item String) pandocCompilerCustom = pandocCompilerWith pandocReaderOpts pandocWriterOpts +pandocRendererCustom :: Item String -> Compiler (Item String) +pandocRendererCustom = + renderPandocWith pandocReaderOpts pandocWriterOpts + pandocExtensionsCustom :: Extensions pandocExtensionsCustom = githubMarkdownExtensions diff --git a/ssg/src/Preprocessing/Replacement.hs b/ssg/src/Preprocessing/Replacement.hs new file mode 100644 index 0000000..43642e3 --- /dev/null +++ b/ssg/src/Preprocessing/Replacement.hs @@ -0,0 +1,138 @@ +{-# LANGUAGE QuasiQuotes, FlexibleContexts #-} +module Preprocessing.Replacement where + +import Hakyll +import Text.Regex.PCRE.Heavy (Regex, re, gsub) +import Debug.Trace + +type Html = String +type LLConverter = String -> String -> Html + +replaceLogoLinks :: Item String -> Compiler (Item String) +replaceLogoLinks = return . fmap replaceAllLogoLinks + + +fullLogoLinkRegex :: Regex +fullLogoLinkRegex = [re|\[(.*?)\|(.*?)\]\((.*?)\)|] + +shortLogoLinkRegex :: Regex +shortLogoLinkRegex = [re|\[(.*?)\|(.*?)\](?!\()|] + +replaceAllLogoLinks :: Html -> Html +replaceAllLogoLinks = gsub fullLogoLinkRegex f . gsub shortLogoLinkRegex g + where + g (key:s1:_) + | key == "gh" = github s1 ("https://github.com/" ++ s1) + | key == "gl" = gitlab s1 ("https://gitlab.com/" ++ s1) + | key == "ga" = gitea s1 ("https://gitea.com/" ++ s1) + | key == "nani" = nani s1 ("https://git.nani.wtf/" ++ s1) + | key == "pub" = pub s1 ("https://pub.dev/packages/" ++ s1) + | key == "nxp" = nixpackages s1 ("https://search.nixos.org/packages?query=" ++ s1) + | key == "nxo" = nixoptions s1 ("https://search.nixos.org/options?query=" ++ s1) + | key == "npm" = npm s1 ("https://www.npmjs.com/package/" ++ s1) + | key == "crt" = crates s1 ("https://crates.io/crates/" ++ s1) + | key == "hk" = hackage s1 ("https://hackage.haskell.org/package/" ++ s1) + | key == "hg" = hoogle s1 ("https://hoogle.haskell.org/?hoogle=" ++ s1) + | key == "yt" = youtube s1 ("https://www.youtube.com/embed/" ++ s1) + -- Reconstruct the original text + | otherwise = foldr1 (++) ["[", key, "|", s1, "]"] + + f (key:s1:s2:_) + | key == "kan" = kan s1 s2 + | key == "so" = stackoverflow s1 s2 + | key == "rd" = reddit s1 s2 + | key == "wiki" = wikipedia s1 s2 + | key == "jisho" = jisho s1 s2 + -- Reconstruct the original text + | otherwise = foldr1 (++) ["[", key, "|", s1, "](", s2, ")"] + +{- This should be removed once all icons are added, and all functions are implemented -} +generateGenericLink :: String -> LLConverter +generateGenericLink linkTitle = f + where + f name link = foldr1 (++) ["", linkTitle, ": ", name, ""] + + +badgeLinkWithCustomClasses :: String -> [String] -> LLConverter +badgeLinkWithCustomClasses imageName classes = f + where + f name link = foldr1 (++) [ + "", + "GitHub Logo", + "" ++ name ++ "", + "", + "" + ] + +badgeLink :: String -> LLConverter +badgeLink imageName = badgeLinkWithCustomClasses imageName [] + + +kan :: LLConverter +kan kanji kana = foldr1 (++) ["", kanji, " (", kana, ")"] + +github :: LLConverter +github = badgeLink "github.svg" + +gitlab :: LLConverter +gitlab = badgeLink "gitlab.svg" + +gitea :: LLConverter +gitea = badgeLink "gitea.svg" + +nani :: LLConverter +nani = badgeLink "nani.svg" + +stackoverflow :: LLConverter +stackoverflow = badgeLink "stack_overflow.svg" + +pub :: LLConverter +pub = badgeLink "dart.svg" + +hoogle :: LLConverter +hoogle = badgeLink "haskell_orange.svg" + +crates :: LLConverter +crates = badgeLinkWithCustomClasses "rust.svg" ["nani_logo-link-color-inverted"] + +hackage :: LLConverter +hackage = badgeLink "haskell_purple.svg" + +nixpackages :: LLConverter +nixpackages = badgeLink "nix_packages.svg" + +nixoptions :: LLConverter +nixoptions = badgeLink "nix_options.svg" + +npm :: LLConverter +npm = badgeLink "npm.svg" + +reddit :: LLConverter +reddit = badgeLink "reddit.svg" + +wikipedia :: LLConverter +wikipedia = badgeLinkWithCustomClasses "wikipedia.svg" ["nani_logo-link-color-inverted"] + +youtube :: LLConverter +youtube _ link = "
" + +jisho :: LLConverter +jisho name link = undefined + +---------------------------------------------------------- +---------------------------------------------------------- +---------------------------------------------------------- + +-- Wishlist: + -- Cards: + -- Github + -- Jisho + -- Wikipedia + -- Unicode + -- Terminal + + -- Regex + + -- Diagrams: + -- PlantUML + -- Graphviz \ No newline at end of file