From 58d56dc9dae201d89a4911e125099f1f41780eab Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Sat, 5 Dec 2020 22:51:37 +0100 Subject: First version of the website --- .gitignore | 2 + add_books | 41 +++ schemeato | 146 ++++++++++ static/css/extra-style.css | 31 ++ static/css/fonts.css | 23 ++ static/css/normalize.css | 427 ++++++++++++++++++++++++++++ static/css/publishing.css | 138 +++++++++ static/css/style.css | 364 ++++++++++++++++++++++++ static/files/publickey.hello@elenq.tech.txt | 34 +++ static/fonts/LatoLatin-Light.eot | Bin 0 -> 67508 bytes static/fonts/LatoLatin-Light.ttf | Bin 0 -> 151856 bytes static/fonts/LatoLatin-Light.woff | Bin 0 -> 72604 bytes static/fonts/LatoLatin-Light.woff2 | Bin 0 -> 43468 bytes static/fonts/LatoLatin-Regular.eot | Bin 0 -> 68135 bytes static/fonts/LatoLatin-Regular.ttf | Bin 0 -> 148540 bytes static/fonts/LatoLatin-Regular.woff | Bin 0 -> 72456 bytes static/fonts/LatoLatin-Regular.woff2 | Bin 0 -> 43760 bytes static/fonts/OFL.txt | 94 ++++++ static/img/faces/ekaitz.jpg | Bin 0 -> 11507 bytes templates/_defs.scm | 99 +++++++ templates/_logo.svg | 27 ++ templates/_structure.scm | 0 templates/en/_books.md | 13 + templates/en/_funding.md | 18 ++ templates/en/_philosophy.md | 7 + templates/en/_programming_in_python.md | 10 + templates/en/_summary.md | 14 + templates/en/_whats_informatics.md | 10 + templates/en/index.html | 84 ++++++ templates/es/_books.md | 14 + templates/es/_funding.md | 25 ++ templates/es/_philosophy.md | 9 + templates/es/_programming_in_python.md | 12 + templates/es/_summary.md | 16 ++ templates/es/_whats_informatics.md | 11 + templates/es/index.html | 85 ++++++ 36 files changed, 1754 insertions(+) create mode 100644 .gitignore create mode 100755 add_books create mode 100755 schemeato create mode 100644 static/css/extra-style.css create mode 100644 static/css/fonts.css create mode 100644 static/css/normalize.css create mode 100644 static/css/publishing.css create mode 100644 static/css/style.css create mode 100644 static/files/publickey.hello@elenq.tech.txt create mode 100644 static/fonts/LatoLatin-Light.eot create mode 100644 static/fonts/LatoLatin-Light.ttf create mode 100644 static/fonts/LatoLatin-Light.woff create mode 100644 static/fonts/LatoLatin-Light.woff2 create mode 100644 static/fonts/LatoLatin-Regular.eot create mode 100644 static/fonts/LatoLatin-Regular.ttf create mode 100644 static/fonts/LatoLatin-Regular.woff create mode 100644 static/fonts/LatoLatin-Regular.woff2 create mode 100644 static/fonts/OFL.txt create mode 100644 static/img/faces/ekaitz.jpg create mode 100644 templates/_defs.scm create mode 100644 templates/_logo.svg create mode 100644 templates/_structure.scm create mode 100644 templates/en/_books.md create mode 100644 templates/en/_funding.md create mode 100644 templates/en/_philosophy.md create mode 100644 templates/en/_programming_in_python.md create mode 100644 templates/en/_summary.md create mode 100644 templates/en/_whats_informatics.md create mode 100644 templates/en/index.html create mode 100644 templates/es/_books.md create mode 100644 templates/es/_funding.md create mode 100644 templates/es/_philosophy.md create mode 100644 templates/es/_programming_in_python.md create mode 100644 templates/es/_summary.md create mode 100644 templates/es/_whats_informatics.md create mode 100644 templates/es/index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1c0f43e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +www +discarded diff --git a/add_books b/add_books new file mode 100755 index 0000000..9c38ec0 --- /dev/null +++ b/add_books @@ -0,0 +1,41 @@ +#| +#!/usr/bin/env sh +exec chibi-scheme -A `dirname $0` $0 $@ +|# + +(import + (scheme base) + (srfi 1) + (chibi) + (chibi filesystem) + (chibi io) + (chibi pathname) + (chibi sxml)) + +(define outdir "www") +(define bookdir "../books/out/") +(define valid '("book-simple.pdf" "web.html" "web-simple.html" "cover.png")) + +(define (copy-books) + "Copy books" + (directory-fold-tree + bookdir + #f + #f + (lambda (file acc) + (let ((output (make-path outdir "books" (path-relative-to file bookdir)))) + (if (member (path-strip-directory file) valid) + (begin + (display "Loading: ") + (display file) + (display " to:") + (display output) + (newline) + (create-directory* (path-directory output)) + (call-with-output-file output + (lambda (x) + (send-file file x))))))) + #\null)) + + +(copy-books) diff --git a/schemeato b/schemeato new file mode 100755 index 0000000..c950af0 --- /dev/null +++ b/schemeato @@ -0,0 +1,146 @@ +#| +#!/usr/bin/env sh +exec chibi-scheme -A `dirname $0` $0 $@ +|# +(import + (scheme base) + (srfi 1) + (srfi 69) + (srfi 115) + (chibi) + (chibi app) + (chibi config) + (chibi filesystem) + (chibi process) + (chibi io) + (chibi pathname) + (chibi string) + (chibi sxml)) + +; - [X] Read all the locales +; - [ ] Prepare needed variables per file: +; - [X] List of languages available +; - [X] Current language +; - [ ] Current file +; - [X] Markdown parser +; - [X] pandoc +; - [ ] Check how to do it in scheme +; - [ ] Some more: check schiumato for reference +; - [X] `load` or `eval` files in the created environment and extract their +; exports to dump them to target folder +; - [ ] deal with input arguments or config, that can be cool for language +; selection and directory config. +; - [ ] Move globs to default config stuff. +; - [ ] Make a `new` command that creates the file structure and the default +; configuration file + +(define (string-startswith? str char) + (string-cursor=? + (string-cursor-start str) + (string-find str (lambda (y) (char=? y char))))) + +; Move this to input/config parameters +(define staticdir "static") +(define templatedir "templates") +(define outdir "www") + +(define (md-to-html md-text) + "Markdown to HTML converter using external Pandoc command" + (call-with-process-io "pandoc" + (lambda (pid in out err) + (display md-text in) + (close-output-port in) + (let ((res (port->string out))) + (waitpid pid 0) + res)))) + +(define (load-templates) + "Read templates `templatedir`. + Returns them as a alist where keys are the filename of the template relative + to the `templatedir` and the values are the contents of the file." + (directory-fold-tree + templatedir + #f + #f + (lambda (file acc) + (if (or (string-startswith? (path-strip-directory file) #\.) + (string-startswith? (path-strip-directory file) #\_)) + acc + (cons (list (path-relative-to file templatedir) + (call-with-input-file + file + (lambda (p) + (let loop ((x (read p))) + (if (eof-object? x) + '() + (cons x (loop (read p)))))))) + acc))) + '())) + +(define (render-template tpl env) + "Render one template" + (let* ((code (let ((codelist (cdr tpl))) + (reduce (lambda (x acc) + (append x acc)) + '() + codelist))) + (fullcode (append env code))) + (eval fullcode))) + +(define (copy-static) + "Copy static directory in output directory" + (directory-fold-tree + staticdir + #f + #f + (lambda (file acc) + (let ((output (make-path outdir + (make-path "static" + (path-relative-to file staticdir))))) + (create-directory* (path-directory output)) + (call-with-output-file output + (lambda (x) + (send-file file x))))) + #\null)) + +(define (include-template name) + ; TODO make template loader + #f) + +(define (create-output cfg spec . args) + "Dumps the templates in the output directory" + (let ((templates (load-templates))) + (or (create-directory* outdir) (error "Unable to create output directory")) + (display "Copying static files...") + (newline) + (copy-static) + (let* ((env `(let ((include-template ,include-template))))) + (for-each + (lambda (x) + (let ((outfile (make-path outdir (car x)))) + (or (create-directory* (path-directory outfile)) + (error "Unable to create directory")) + + (display "Rendering template ") + (display (car x)) + (display " to ") + (display outfile) + + (call-with-output-file + outfile + (lambda (f) + (display (render-template x env) f))) + + (display "\t[Done]") + (newline))) + templates)))) + + +(run-application + `(schemeato + "Schemeato: an easy to translate static site generator" + (or + (create "Create output from current folder" ,create-output) + (help "Show this help" (,app-help-command)))) + (command-line) + #;(conf-load "conf.scm")) diff --git a/static/css/extra-style.css b/static/css/extra-style.css new file mode 100644 index 0000000..c7a7f06 --- /dev/null +++ b/static/css/extra-style.css @@ -0,0 +1,31 @@ +.summary{ + font-size: 115%; + padding-top: 2rem; +} + +#hamburger, #hamburger-label{ + display: none; +} + +#hamburger-label{ + font-size: 180%; + cursor: pointer; +} + +.active{ + text-decoration: underline; +} + +.mainheader{position: relative;} + +@media (max-width: 800px){ + #hamburger-label { + display: inline-block; + } + .navbar-contents { + display: none; + } + input#hamburger:checked ~ .navbar-contents { + display: block; + } +} diff --git a/static/css/fonts.css b/static/css/fonts.css new file mode 100644 index 0000000..ea9b2c9 --- /dev/null +++ b/static/css/fonts.css @@ -0,0 +1,23 @@ +/* Webfont: LatoLatin-Regular */@font-face { + font-family: 'LatoLatinWeb'; + src: url('/static/fonts/LatoLatin-Regular.eot'); /* IE9 Compat Modes */ + src: url('/static/fonts/LatoLatin-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/static/fonts/LatoLatin-Regular.woff2') format('woff2'), /* Modern Browsers */ + url('/static/fonts/LatoLatin-Regular.woff') format('woff'), /* Modern Browsers */ + url('/static/fonts/LatoLatin-Regular.ttf') format('truetype'); + font-style: normal; + font-weight: normal; + text-rendering: optimizeLegibility; +} + +/* Webfont: LatoLatin-Light */@font-face { + font-family: 'LatoLatinLightWeb'; + src: url('/static/fonts/LatoLatin-Light.eot'); /* IE9 Compat Modes */ + src: url('/static/fonts/LatoLatin-Light.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('/static/fonts/LatoLatin-Light.woff2') format('woff2'), /* Modern Browsers */ + url('/static/fonts/LatoLatin-Light.woff') format('woff'), /* Modern Browsers */ + url('/static/fonts/LatoLatin-Light.ttf') format('truetype'); + font-style: normal; + font-weight: normal; + text-rendering: optimizeLegibility; +} diff --git a/static/css/normalize.css b/static/css/normalize.css new file mode 100644 index 0000000..81c6f31 --- /dev/null +++ b/static/css/normalize.css @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} \ No newline at end of file diff --git a/static/css/publishing.css b/static/css/publishing.css new file mode 100644 index 0000000..50f159b --- /dev/null +++ b/static/css/publishing.css @@ -0,0 +1,138 @@ +.book-container{ + --book-width: 176px; + --book-height: 250px; + --book-thickness: 13px; + padding-top: calc(0.3 * var(--book-width)); + padding-bottom: calc(0.3 * var(--book-width)); + padding-left: calc(0.3 * var(--book-width)); + padding-right: calc(0.3 * var(--book-width)); + display: flex; + align-items: center; + justify-content: center; + transform-style: preserve-3d; + perspective: 1000px; +} + +.book { + --book-initial-x-rotation: 10deg; + --book-initial-y-rotation: 30deg; + --book-initial-z-rotation: 0deg; + --book-pages-color: white; + --book-cover: ""; +} + +.type1{ + --book-initial-x-rotation: 10deg; + --book-initial-y-rotation: 10deg; + --book-initial-z-rotation: 0deg; +} +.type2{ + --book-initial-x-rotation: -10deg; + --book-initial-y-rotation: -10deg; + --book-initial-z-rotation: 2deg; +} + +.book{ + position: relative; + width: var(--book-width); + height: var(--book-height); + transform: rotateX(var(--book-initial-x-rotation)) + rotateY(var(--book-initial-y-rotation)) + rotateZ(var(--book-initial-z-rotation)); + transform-style: preserve-3d; +} + +.book > ._side{ + border: 1px solid darkgrey; +} + +.book > ._side:nth-of-type(1){ + width: var(--book-width); + height: var(--book-height); + position: absolute; + transform: translateZ(calc(var(--book-thickness) * 0.5)); + + background: var(--book-cover) no-repeat center right scroll; + background-size: cover; +} + +.book > ._side:nth-of-type(2){ + width: var(--book-width); + height: var(--book-height); + position: absolute; + + background-color: white; + background: var(--book-cover) no-repeat center left scroll; + background-size: cover; + transform: rotateY(180deg) translateZ(calc(var(--book-thickness) * 0.5)); +} + +.book > ._side:nth-of-type(3){ + background-color: var(--book-pages-color); + width: var(--book-thickness); + height: var(--book-height); + position: absolute; + transform: + translateX(var(--book-width)) + rotateY(90deg) + translateZ(calc(var(--book-thickness) * -0.5)); +} + +.book > ._side:nth-of-type(4){ + background-color: var(--book-pages-color); + height: var(--book-thickness); + width: var(--book-width); + position: absolute; + transform: + rotateX(90deg) + translateZ(calc(var(--book-thickness) * 0.5)); +} + +.book > ._side:nth-of-type(5){ + background-color: var(--book-pages-color); + height: var(--book-thickness); + width: var(--book-width); + position: absolute; + transform: + rotateX(270deg) + translateZ(calc(var(--book-height) + var(--book-thickness) * -0.5)); +} + +.book > ._side:nth-of-type(6){ + background: var(--book-cover) no-repeat center center scroll; + width: var(--book-thickness); + height: var(--book-height); + background-size: cover; + position: absolute; + transform: + rotateY(270deg) + translateZ(calc(var(--book-thickness) * 0.5)); +} + + +/*ANIMATION*/ +@keyframes rotate { + from { + transform: rotateX(var(--book-initial-x-rotation)) + rotateY(var(--book-initial-y-rotation)) + rotateZ(var(--book-initial-z-rotation)); + } + + to { + transform: rotateX(var(--book-initial-x-rotation)) + rotateY(calc(var(--book-initial-y-rotation) + 360deg)) + rotateZ(var(--book-initial-z-rotation)); + } +} + +.book-container:hover >.book{ + animation: rotate 15s infinite linear; + transition: none; +} + + +.flex-around-wrap{ + display: flex; + justify-content: space-around; + flex-wrap: wrap; +} diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..29cede2 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,364 @@ +html{ + font-size: 80%; +} + +/* Typography*/ +body{ + font-family: "LatoLatinWeb", Helvetica, Arial, sans-serif; + line-height: 1.4; + color: #222; + background-color: #fff; + font-size: 1.5em; +} +p { + text-align: justify; +} +q, blockquote{ + font-style: italic; +} +h1, h2, h3, h4, h5, h6 { + text-decoration: none; + margin-top: 2ex; + margin-bottom: 0; + font-weight: 300; } +h1 { + font-size: 5.5rem; + line-height: 1.2; + text-align: center; + margin-bottom: 4rem; + margin-top: 0; + font-family: "LatoLatinLightWeb", Helvetica, Arial, sans-serif; +} +h1,h2,h3 { letter-spacing: -.1rem; } +h4 { letter-spacing: -.08rem;} +h5 { letter-spacing: -.05rem;} +h6 { letter-spacing: 0} + +h2 { font-size: 2.8rem; } +h3 { font-size: 2.3rem; } +h4 { font-size: 2.1rem; } +h5 { font-size: 1.8rem; } +h6 { font-size: 1.5rem; } + +@media (min-width: 550px) { + h1 { font-size: 8.0rem; } + h2 { font-size: 3.2rem; } + h3 { font-size: 2.7rem; } + h4 { font-size: 2.2rem; } + h5 { font-size: 2.0rem; } + h6 { font-size: 1.7rem; } +} +a{ + color: #1EAEDB; +} +hr{ + border: 0 +} +pre > code { + overflow: auto; + border: none; + border-radius: 0; +} + + + +/* Utils */ +.text-center{ + text-align: center; +} +.text-right{ + text-align: right; +} +.text-justify{ + text-align: justify; +} +.text-nodeco{ + text-decoration: none; +} +.text-nodeco-black{ + text-decoration: none; + color: #222; +} +.only-reader{ + font-size: 0; +} + + +/* Sections*/ +section{ + padding-bottom: 2rem; + margin-bottom: 0; +} + + +/* Images */ +img { + display: block; + margin-left: auto; + margin-right: auto; + margin-top: 3ex; + margin-bottom: 3ex; +} +img.round{ + border-radius: 50%; +} + + +/* Footer */ +.bar-bottom { + border-top: 1px solid #eee; + position: relative; + width: 100%; + margin: 0 auto; + margin-top: 10ex; + padding: 1rem 0; + box-sizing: border-box; + + font-size: 70%; +} + + +/* Container */ +.container { + max-width: 900px; + margin: auto; + width: 80%; +} +@media(max-width: 550px){ + .container{ + padding-left: 20px; + padding-right: 20px; + } +} + + +/* Navbar */ +.mainheader{ + top: 0; + display: block; + width: 100%; + background: #fff; + z-index: 99; + border-bottom: 1px solid #eee; + margin-bottom: 6.5rem; +} +@media(max-width: 550px){ + .mainheader{ + margin-bottom: 4rem; + } +} +.navbar { + width: 100%; + } +.navbar-link, +.navbar-control{ + text-transform: uppercase; + font-size: 0.9rem; + font-weight: 600; + letter-spacing: .1rem; + text-decoration: none; + line-height: 6rem; + display: inline-block; + color: #222; + } +.navbar-right, +.navbar-left{ + display: inline; +} +.navbar-separator{ + margin: 0 auto; +} +/* Large devices everything inline and the header floating */ +@media (min-width: 801px) { + .mainheader{position: sticky;} + .link-right { + margin-left: 15px; + margin-right: 0px; + } + .link-left{ + margin-right: 25px; + } + .nav-right{ + text-align: right; + } + .navbar-right{ + float: right; + } + .navbar-separator{ + display: none; + } + +} +/* Smaller devices leave the header at the top of the page and make it more + * vertical */ +@media (max-width: 800px){ + /* Main navbar toggle */ + /* TODO: BURGER? */ + .navbar-right, + .navbar-left{ + width: 100%; + min-width: 100%; + display: inline-flex; + flex: 1; + justify-content: space-around; + flex-flow: row; + } + .navbar-left{ + flex-flow: row wrap; + } + + .navbar-left .navbar-link{ + margin-left: 3ex; + margin-right: 3ex; + } + + .navbar-right .navbar-link{ + margin: auto; + line-height: 5rem; + } +} + + +/* Title page */ +.title-image { + width: 90%; +} +.title-image path{ + fill: #222; +} +@media (min-width: 550px){ + .title-image { width: 60%; } +} + + +/* Cards: Image | text */ +.card-picture *{ + height: auto; + width: 100%; +} +.card-picture{ + margin-left: auto; + margin-right: auto; + margin-top: 2ex; + margin-bottom: 2ex; + height: auto; + width: 150px; + min-width: 150px; +} +.card-picture-right{ + order 2; +} +.card-data{ + order: 1; +} +@media (min-width: 800px) { /*more than a tablet*/ + .card{ + margin-top: 1ex; + margin-bottom: 1ex; + + width: 100%; + min-width: 100%; + display: inline-flex; + flex: 1; + -webkit-flex: 1; /* Safari 6.1+ */ + -ms-flex: 1; /* IE 10 */ + justify-content: space-around; + align-items: center; + } + + .card-picture{ + margin: 2ex; + margin-right: 4ex; + order: 0; + } + .card-picture-right{ + margin: 2ex; + margin-left: 4ex; + order: 2; + } + + .card-data{ + flex-grow: 2; + flex-shrink: 2; + order: 1; + } +} + +/* Anchors */ +a.anchor{ + visibility: hidden; + text-decoration: none; + font-size: 0.8em; +} +h1:hover > a.anchor, +h2:hover > a.anchor, +h3:hover > a.anchor, +h4:hover > a.anchor, +h5:hover > a.anchor, +h6:hover > a.anchor{ + visibility: visible; +} + +:root{ + --bg-color: #FFF; + --tx-color: #222; + --link-color: #1EAEDB; + --border-color:#EEE; +} +@media (prefers-color-scheme: dark) { + :root { + --bg-color: #2F2F2F; + --tx-color: #FFF; + --link-color: #1EAEDB; + --border-color:#4A4A4A; + } +} + +/* Overwrite colors to vars if supported */ +body{ + color: var(--tx-color); + background-color: var(--bg-color); +} +.text-nodeco-black, .navbar-link{ + color: var(--tx-color); +} +.title-image path{ + fill: var(--tx-color); +} +.mainheader { + background-color: var(--bg-color); + border-color: var(--border-color); +} +a { + color: var(--link-color); +} +.bar-bottom { + border-color: var(--border-color); +} + + + +.flex-cols{ + width: 90%; +} +.col{ + max-width: 100%; +} +@media (min-width: 550px) { /*more than a phone*/ + .flex-cols{ + display: inline-flex; + flex: 1; + align-items: center; + justify-content: space-around; + width: 100%; + min-width: 100%; + } + .col{ + flex-grow: 1; + flex-shrink: 1; + flex-basis: 100px; + margin-left: 5%; + margin-right: 5%; + } + +} diff --git a/static/files/publickey.hello@elenq.tech.txt b/static/files/publickey.hello@elenq.tech.txt new file mode 100644 index 0000000..ddb4ca3 --- /dev/null +++ b/static/files/publickey.hello@elenq.tech.txt @@ -0,0 +1,34 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: OpenPGP.js v2.3.8 +Comment: http://openpgpjs.org + +xsBNBFlKNu4BCADnO0dweMwiVAAWmI51s7SXtCAgxEUdPMlzPADmAsz31lLc +SIcsXW1lPfA0GDwvn4XvDjxW4RB/HKKpg04IbKFxFrfJ/1Vu0tpGe9H252JM +nWBexc6oSCSKpuhG7/nLRO140v0xmdU+CZj3XPSLO73rIgYzSPV//j00kXGz +z1rVLKv+3FlTSMJV411qQpP9P/Rwdad/txekXOURnvFLhDC0xJBIq4KMPolh +/u0TkkYtPmRmn9U7YFeraiublSEQEGmX5rxuzJ+A6P+kVjWeOQxJuigiKKWR +4E/gd2rvn8wSxafnbzS0uA1iQRgF0/It5pG1XeRUrJLJTQ2P0kfdQrEjABEB +AAHNI2hlbGxvQGVsZW5xLnRlY2ggPGhlbGxvQGVsZW5xLnRlY2g+wsB1BBAB +CAApBQJZSjbuBgsJBwgDAgkQQ7fiWdQmzT4EFQgKAgMWAgECGQECGwMCHgEA +AGuWCACYylinKBY/sHtqqbqbw57A4QcP/E5LCDjIJyLB5LV5HFEaCqjPqpGP +2F05S8to9BarFPMPKtvZbWy8u3wR9VHhVLkuLYGO15eNPgboylU/n1DEDAbt +iTPv1wd4OStulIAU79LZj6RNkYAGYaLGetYMcWTXzJUN2WbER6IhR8uKKlb4 +480qUyjEN4uznO72WVZRnFRXCekk+q0yuURNQy4Z2IMKriALM0Ijj/VAsnyK +i4KQCukFylcnG33rD7Dq9qPDAmHC0imWRXFDMIy/g7pZP6XtjwMp4MlpZ2oS +w+JJlYwTgHd0nVVQ8TE6FWPN/mDZa6U4VWhlrOCTcecPP6sEzsBNBFlKNu4B +CADdCy6ugZzxwQctqGzy0YMl0Uk4WQLrqQ4ZkvW0H5yhxnBzSC1YaZ+WQOLL +bdParzS/0LRMa0WQikqLsC8uRQxXgWCBzjtPSmphFmOfAW9n8Fc5Ap8PAxjv +M5Y+znOnx8ecZHcYx2l0BNV+9uWWRDx0t+gtNTeLlvYuCUF40WKG3USGZ1U8 ++O3jhjbEII0sBdz45el516nEp0Uzc/usFQ3dJNPZ6ZK6M+YA7o/EfGfwVKVH +A5L0lP26utDpBmmWoTfLVUFZ1lxrZCNJ9M4JGBJ0/xDmZw1GOCHeacF3ZuWP +7JLcsSyukGKUzn6Sm9wwy73rAV8lhddd6EdGwgWWIsTbABEBAAHCwF8EGAEI +ABMFAllKNu4JEEO34lnUJs0+AhsMAAA1lAgAlb0C/6Qev//zdnv1CUi+zotZ +vNQQOSK7XDAfQlpMhwwuwrA5wR8Y43e1tEVutUaEE3wahW8smj8cb/C7SVBR +5JvAQyqTESqCbGcrGOgUa8L2505pnEb6wrBmPfZ1STbQwK+Xw/meM3eVAzuq +m2IgwaRbuLg3bJh8L45XVkDyzYJJDnugqfmnnUTy7jTHXLRNLatAdQdcKwbY +9fSyzuU6BQn1vSdwZGDvkMC2UZ0ygBvyFDir9WmQbhTKNqDGfsz/XndGhujW +IdBWSdVYr1/pYJ2/3M/6VS2rCzujpoip6dd96bSjhCQ3R6se/Z8hWxMqZyZD +LCAjdtBXsrAnapFj7Q== +=Yvv0 +-----END PGP PUBLIC KEY BLOCK----- + diff --git a/static/fonts/LatoLatin-Light.eot b/static/fonts/LatoLatin-Light.eot new file mode 100644 index 0000000..865537d Binary files /dev/null and b/static/fonts/LatoLatin-Light.eot differ diff --git a/static/fonts/LatoLatin-Light.ttf b/static/fonts/LatoLatin-Light.ttf new file mode 100644 index 0000000..6af1b85 Binary files /dev/null and b/static/fonts/LatoLatin-Light.ttf differ diff --git a/static/fonts/LatoLatin-Light.woff b/static/fonts/LatoLatin-Light.woff new file mode 100644 index 0000000..e7d4278 Binary files /dev/null and b/static/fonts/LatoLatin-Light.woff differ diff --git a/static/fonts/LatoLatin-Light.woff2 b/static/fonts/LatoLatin-Light.woff2 new file mode 100644 index 0000000..b6d0288 Binary files /dev/null and b/static/fonts/LatoLatin-Light.woff2 differ diff --git a/static/fonts/LatoLatin-Regular.eot b/static/fonts/LatoLatin-Regular.eot new file mode 100644 index 0000000..96a9035 Binary files /dev/null and b/static/fonts/LatoLatin-Regular.eot differ diff --git a/static/fonts/LatoLatin-Regular.ttf b/static/fonts/LatoLatin-Regular.ttf new file mode 100644 index 0000000..bcc5778 Binary files /dev/null and b/static/fonts/LatoLatin-Regular.ttf differ diff --git a/static/fonts/LatoLatin-Regular.woff b/static/fonts/LatoLatin-Regular.woff new file mode 100644 index 0000000..bf73a6d Binary files /dev/null and b/static/fonts/LatoLatin-Regular.woff differ diff --git a/static/fonts/LatoLatin-Regular.woff2 b/static/fonts/LatoLatin-Regular.woff2 new file mode 100644 index 0000000..a4d084b Binary files /dev/null and b/static/fonts/LatoLatin-Regular.woff2 differ diff --git a/static/fonts/OFL.txt b/static/fonts/OFL.txt new file mode 100644 index 0000000..6d2c416 --- /dev/null +++ b/static/fonts/OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com), +with Reserved Font Name Lato. + +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/static/img/faces/ekaitz.jpg b/static/img/faces/ekaitz.jpg new file mode 100644 index 0000000..b73778f Binary files /dev/null and b/static/img/faces/ekaitz.jpg differ diff --git a/templates/_defs.scm b/templates/_defs.scm new file mode 100644 index 0000000..ed145b4 --- /dev/null +++ b/templates/_defs.scm @@ -0,0 +1,99 @@ +; Global to the file, use (set! lang "lang") to configure in languages +(define lang "en") + +; UTILS ----------------------------------------------------------------------- +(define (anchored-h level title id) + `(,(string->symbol (string-append "h" (number->string level))) + (@ (id ,id)) + ,title + (a (@ (href ,(string-append "#" id)) (class "anchor")) " ¶" ))) + + +(define (absurl-to-lang url) + (string-append "/" lang url)) + +(define (header-link lr text title link active) + `(a (@ (class ,(string-append (if active "active " " ") + "navbar-link link-" lr)) + (href ,link) + (title ,title)) + ,text)) + +(define (style href) + "Make tags to add CSS" + `(link (@ (rel "stylesheet") + (href ,href)))) + +(define (md markdown-text) + `(@raw ,(md-to-html markdown-text))) + +(define (logo-title) `(h1 (@raw ,(file->string "templates/_logo.svg")))) + +; BASE ------------------------------------------------------------------------ +(define (base title body) + `(html + (@ (lang ,lang)) + (head + (meta (@ (charset "utf-8"))) + (meta (@ (name "viewport") + (content "width=device-width, initial-scale=1"))) + ,(style "/static/css/normalize.css") + ,(style "/static/css/style.css") + ,(style "/static/css/fonts.css") + ,(style "/static/css/extra-style.css") + ,(style "/static/css/publishing.css") + (title ,title)) + (body ,body))) + + +; HEADER----------------------------------------------------------------------- +(define (nav-link l) + (header-link "left" + (cdr (assq 'name l)) + (cdr (assq 'title l)) + (cdr (assq 'absurl l)) + (or (assq 'active l) #f))) + +(define (lang-link l) + (header-link "right" + (cdr (assq 'name l)) + (cdr (assq 'title l)) + (cdr (assq 'absurl l)) + (or (assq 'active l) #f))) + +(define (header links langs) + `(header + (@ (class mainheader)) + (div (@ (class container)) + (nav (@ (class navbar)) + (label (@ (id hamburger-label) + (for "hamburger") + (class "navbar-link link-left")) (@raw "☰")) + (input (@ (id "hamburger") (type checkbox))) + + (div (@ (class navbar-contents)) + (div (@ (class navbar-left)) + ,(map nav-link links)) + + (div (@ (class "navbar-right")) + ,(map lang-link langs))))))) + + +(define (book thickness cover-url extra-classes) + `(div (@ (class "book-container") + (tabindex "0")) + (div (@ (class ,(string-join (append '("book") extra-classes) " ")) + (style ,(string-append + "--book-cover: url(" cover-url ");" + "--book-thickness: " thickness ";"))) + (div (@ (class "_side"))) + (div (@ (class "_side"))) + (div (@ (class "_side"))) + (div (@ (class "_side"))) + (div (@ (class "_side"))) + (div (@ (class "_side")))))) + +(define (link-with-title title url) + `(a (@ (title ,title) + (href ,url)) + ,title)) diff --git a/templates/_logo.svg b/templates/_logo.svg new file mode 100644 index 0000000..b4bb2f3 --- /dev/null +++ b/templates/_logo.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/_structure.scm b/templates/_structure.scm new file mode 100644 index 0000000..e69de29 diff --git a/templates/en/_books.md b/templates/en/_books.md new file mode 100644 index 0000000..6df057b --- /dev/null +++ b/templates/en/_books.md @@ -0,0 +1,13 @@ +All the books are published under the terms of the +[CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/) license and have +been published in various formats: paperback, web and an easy to print PDF +file, with the goal of making them available for anyone. + +Digital versions of the books are available in the list below while the +paperback edition can be obtained [contacting +us](https://elenq.tech/en/#contact). + +For those who want to take part in the development, send comments, propose +corrections or even create derivative works, having the sources is more than +interesting. Each book has a link to its Git repository where raw content, +change history, etc. are available. diff --git a/templates/en/_funding.md b/templates/en/_funding.md new file mode 100644 index 0000000..f1e1ffe --- /dev/null +++ b/templates/en/_funding.md @@ -0,0 +1,18 @@ +This project's goal is to make the contents available for everyone, regardless +of their resources. That's why we share the contents online for free and we +even allow the printing of the books using our easy-to-print format. + +On the other hand, the project needs to be sustainable so we can keep making +new books, correcting them, maintaining this website and so on. + +This project is funded selling the books, it would die if nobody paid for them. + +Those who want and have the resources to do it, can support the project buying +physical or digital books. + +Even further, its also possible [to hire ElenQ +Technology](https://elenq.tech/en/#products) for training or as an independent +research and development team. + +For both things, you can contact us with the contact info [you can find +here](https://elenq.tech/en/#contact). diff --git a/templates/en/_philosophy.md b/templates/en/_philosophy.md new file mode 100644 index 0000000..2b6aa5d --- /dev/null +++ b/templates/en/_philosophy.md @@ -0,0 +1,7 @@ +As ElenQ Technology's training, the content of ElenQ Publishing is focused on +teaching the underlaying concepts of subjects in order to create a solid +knowledge basis. From that, the goal is to encourage independent learning. + +On the other hand, the books are mainly focused on Free Software due to its +educational value and social approach, which is part of the [values of ElenQ +Technology](https://elenq.tech/en#ethics). diff --git a/templates/en/_programming_in_python.md b/templates/en/_programming_in_python.md new file mode 100644 index 0000000..9f5b431 --- /dev/null +++ b/templates/en/_programming_in_python.md @@ -0,0 +1,10 @@ +- Level: basic +- Publishing date: 10-08-2020 +- ISBN of the paperback edition: 978-84-122572-1-2 +- Price of the physical book: 30€ +- Available languages and formats: + - Español + - [Easy to print PDF](/books/Programming_in_Python/es/book-simple.pdf) + - [Web](/books/Programming_in_Python/es/web.html) + - [Simple Web](/books/Programming_in_Python/es/web-simple.html) +- [Source repository](https://gitlab.com/ElenQ/Publishing/python) diff --git a/templates/en/_summary.md b/templates/en/_summary.md new file mode 100644 index 0000000..2a57127 --- /dev/null +++ b/templates/en/_summary.md @@ -0,0 +1,14 @@ +*ElenQ Publishing* is a book publishing initiative which goal is to empower +people with high quality material, with free licenses, accessible and published +in their own language. + +The project was born from *ElenQ Technology*'s training service, where we +prepare comprehensive course notes for our students. As we realized the notes +could be interesting for the public, we decided to create a publishing house to +make them available for everyone. In 2020 we launched [a crowdfunding +campaign](https://www.goteo.org/project/elenq-publishing) and with it we +published the first books of the collection. + +Today, with the first two books published, printed and sent to their new homes, +*ElenQ Publishing* is another piece of *ElenQ Technology* that is large enough +to deserve its own space. diff --git a/templates/en/_whats_informatics.md b/templates/en/_whats_informatics.md new file mode 100644 index 0000000..4629c69 --- /dev/null +++ b/templates/en/_whats_informatics.md @@ -0,0 +1,10 @@ +- Level: basic +- Publishing date: 10-08-2020 +- ISBN of the paperback edition: 978-84-122572-0-5 +- Price of the physical book: 15€ +- Available languages and formats: + - Español + - [Printable PDF](/books/What_is_Informatics/es/book-simple.pdf) + - [Web](/books/What_is_Informatics/es/web.html) + - [Simple web](/books/What_is_Informatics/es/web-simple.html) +- [Source repository](https://gitlab.com/ElenQ/Publishing/informatics) diff --git a/templates/en/index.html b/templates/en/index.html new file mode 100644 index 0000000..75c8448 --- /dev/null +++ b/templates/en/index.html @@ -0,0 +1,84 @@ +(define footer +" +The content of this website is published under the terms of [Creative Commons +Attribution Share-Alike 4.0 +International](http://creativecommons.org/licenses/by-sa/4.0/) license unless +otherwise stated. +") + +(define summary (md-to-html (file->string "templates/en/_summary.md"))) +(define philo (md-to-html (file->string "templates/en/_philosophy.md"))) +(define funding (md-to-html (file->string "templates/en/_funding.md"))) + +(define books (md-to-html (file->string "templates/en/_books.md"))) +(define python (md-to-html (file->string "templates/en/_programming_in_python.md"))) +(define informatics (md-to-html (file->string "templates/en/_whats_informatics.md"))) + +(load "templates/_defs.scm") +(set! lang "en") + +(sxml->xml + (base + "ElenQ Publishing" + `(,(header + `(((name . "Technology") + (title . "Engineering - ElenQ Technology") + (absurl . "https://elenq.tech/en/index.html")) + + ((name . "Publishing") + (title . "Publishing House - ElenQ Publishing") + (absurl . ,(absurl-to-lang "/index.html")) + (active . #t))) + + `(((name . "en") + (title . "English") + (absurl . "/en/") + (active . #t)) + ((name . "es") + (title . "Español") + (absurl . "/es/")))) + + + (div (@ (class "content container")) + + ,(logo-title) + + (section (@ (class summary)) + (@raw ,summary)) + + (section + ,(anchored-h 2 "Philosophy" "philosophy") + (@raw ,philo)) + + (section + ,(anchored-h 2 "Books" "books") + (@raw ,books)) + + + ,(anchored-h 3 "What is informatics" "whats-informatics") + (p "This document written by Giacomo Tesio and translated and adapted by Ekaitz + Zarraga aims to describe what is informatics from its origins and create debate + about the ethics around it and the current uses it has. This book serves as + opening and statement of purpose of the whole collection because Giacomo's + ideas match perfectly the goals of ElenQ Publishing even if they were developed + independently.") + (div (@ (class "flex-around-wrap")) + (@raw ,informatics) + ,(book "5px" "/books/What_is_Informatics/es/cover.png" '("type2"))) + + + ,(anchored-h 3 "Programming in Python" "programming-in-python") + (p "Written by Ekaitz Zarraga for his courses, this book is a Python programming + manual that also describes general programming theory in an introductory level.") + (div (@ (class "flex-around-wrap")) + (@raw ,python) + ,(book "13px" "/books/Programming_in_Python/es/cover.png" '("type1"))) + + (section + ,(anchored-h 2 "Funding" "funding") + (@raw ,funding))) + + (footer (@ (class bar-bottom)) + (div (@ (class "container text-center")) + (h6 "ElenQ Technology") + ,(md footer)))))) diff --git a/templates/es/_books.md b/templates/es/_books.md new file mode 100644 index 0000000..3c2a02a --- /dev/null +++ b/templates/es/_books.md @@ -0,0 +1,14 @@ +Todos ellos han sido publicados bajo los términos de la licencia +[CC-BY-SA](https://creativecommons.org/licenses/by-sa/4.0/deed.es) y se han +preparado para su publicación en varios formatos: se publican en papel, en +formato web y en un archivo de fácil impresión con el fin de que puedan llegar +a cualquiera. + +Las versiones digitales están disponibles en los enlaces dispuestos en cada uno +de los libros de la siguiente lista, mientras que las versiones físicas pueden +adquirirse [contactando con nosotros](https://elenq.tech/es/#contact). + +Para colaborar en el proyecto enviando correcciones o comentarios o para crear +proyectos derivados, tener acceso a la fuente es interesante. Cada uno de los +libros lista además su repositorio de Git público, donde puede verse y +descargarse el contenido en crudo, navegar el histórico de cambios, etc. diff --git a/templates/es/_funding.md b/templates/es/_funding.md new file mode 100644 index 0000000..b5b1431 --- /dev/null +++ b/templates/es/_funding.md @@ -0,0 +1,25 @@ +Este proyecto de publicación tiene como objetivo que cualquier persona pueda +acceder al contenido, independientemente de los recursos de los que disponga. +Es por eso que se permite la consulta e incluso la impresión de los libros. + +Sin embargo, necesita financiarse de modo que podamos seguir dedicando tiempo a +publicar ejemplares, corregirlos, mantener este sitio web y todo el tiempo que +este proceso conlleva. + +Como este proyecto se financia a través de las ventas de los ejemplares, +moriría si la gente sólo se limitara a descargar las versiones que se comparten +aquí. + +Quien así lo desee y pueda permitírselo, puede aportar al proyecto mediante la +compra de un ejemplar físico o digital facilitando así que esta iniciativa siga +adelante. + +O, yendo más allá, también es posible contratar [los +servicios](https://elenq.tech/es/#products) de investigación y desarrollo o de +formación de ElenQ Technology. + +La mejor manera de resolver cualquiera de las dos opciones es contactando con +nosotros. La información de contacto [está disponible +aquí](https://elenq.tech/es/#contact). + + diff --git a/templates/es/_philosophy.md b/templates/es/_philosophy.md new file mode 100644 index 0000000..22e5bfa --- /dev/null +++ b/templates/es/_philosophy.md @@ -0,0 +1,9 @@ +Al igual que la formación en ElenQ Technology, los contenidos de ElenQ +Publishing tienen como objetivo centrarse en los conceptos para aportar una +base fundacional fuerte sobre la que fomentar el aprendizaje autónomo. + +Por otro lado, centran su interés en el software libre debido a su valor +didáctico y a su enfoque social, parte del [compromiso ético de ElenQ +Technology](https://elenq.tech/es#ethics). + + diff --git a/templates/es/_programming_in_python.md b/templates/es/_programming_in_python.md new file mode 100644 index 0000000..833241e --- /dev/null +++ b/templates/es/_programming_in_python.md @@ -0,0 +1,12 @@ +- Nivel: básico +- Fecha de edición: 10-08-2020 +- ISBN de la versión física: 978-84-122572-1-2 +- Precio de la edición física: 30€ IVA(4%) incl. +- Formatos e idiomas disponibles: + - Español + - [PDF imprimible](/books/Programming_in_Python/es/book-simple.pdf) + - [Web](/books/Programming_in_Python/es/web.html) + - [Web simple](/books/Programming_in_Python/es/web-simple.html) +- [Repositorio fuente](https://gitlab.com/ElenQ/Publishing/python) + + diff --git a/templates/es/_summary.md b/templates/es/_summary.md new file mode 100644 index 0000000..4130512 --- /dev/null +++ b/templates/es/_summary.md @@ -0,0 +1,16 @@ +*ElenQ Publishing* es una iniciativa de publicación de libros técnicos del área +de la informática, cuyo fin es empoderar a la ciudadanía con material de +calidad, con licencias libres, accesible y en su propio idioma. + +El proyecto nació de la acción formativa de *ElenQ Technology* a modo de +documentación para los cursos que oferta, pero visto que los apuntes tenían +entidad suficiente y eran interesantes para el público general, se decidió +plantear la creación de una editorial de libros técnicos y en 2020 se lanzó +[una campaña de crowdfunding](https://www.goteo.org/project/elenq-publishing) +para editar los primeros ejemplares. + +Actualmente, con los dos primeros ejemplares ya publicados, impresos y +entregados a los participantes de la campaña, *ElenQ Publishing* es una parte +más de las actividades de *ElenQ Technology* que merece un espacio propio. + + diff --git a/templates/es/_whats_informatics.md b/templates/es/_whats_informatics.md new file mode 100644 index 0000000..3d18243 --- /dev/null +++ b/templates/es/_whats_informatics.md @@ -0,0 +1,11 @@ +- Nivel: básico +- Fecha de edición: 10-08-2020 +- ISBN de la versión física: 978-84-122572-0-5 +- Precio de la edición física: 15€ IVA(4%) incl. +- Formatos e idiomas disponibles: + - Español + - [PDF imprimible](/books/What_is_Informatics/es/book-simple.pdf) + - [Web](/books/What_is_Informatics/es/web.html) + - [Web simple](/books/What_is_Informatics/es/web-simple.html) +- [Repositorio fuente](https://gitlab.com/ElenQ/Publishing/informatics) + diff --git a/templates/es/index.html b/templates/es/index.html new file mode 100644 index 0000000..683a691 --- /dev/null +++ b/templates/es/index.html @@ -0,0 +1,85 @@ +(define footer +" +El contenido de este sitio está publicado bajo los términos de la licencia +[Cretive Commons Atribución Compartir-Igual 4.0 +Internacional](http://creativecommons.org/licenses/by-sa/4.0/deed.es) a no +ser que se especifique lo contrario. +") + +(define summary (md-to-html (file->string "templates/es/_summary.md"))) +(define philo (md-to-html (file->string "templates/es/_philosophy.md"))) +(define funding (md-to-html (file->string "templates/es/_funding.md"))) + +(define books (md-to-html (file->string "templates/es/_books.md"))) +(define python (md-to-html (file->string "templates/es/_programming_in_python.md"))) +(define informatics (md-to-html (file->string "templates/es/_whats_informatics.md"))) + +(load "templates/_defs.scm") +(set! lang "es") + +(sxml->xml + (base + "ElenQ Publishing" + `(,(header + `(((name . "Technology") + (title . "Ingeniería - ElenQ Technology") + (absurl . "https://elenq.tech/es/index.html")) + ((name . "Publishing") + (title . "Editorial - ElenQ Publishing") + (absurl . ,(absurl-to-lang "/index.html")) + (active . #t))) + + `(((name . "en") + (title . "English") + (absurl . "/en/")) + ((name . "es") + (title . "Español") + (absurl . "/es/") + (active . #t)))) + + + (div (@ (class "content container")) + + ,(logo-title) + + (section (@ (class summary)) + (@raw ,summary)) + + (section + ,(anchored-h 2 "Filosofía" "philosophy") + (@raw ,philo)) + + (section + ,(anchored-h 2 "Libros" "books") + (@raw ,books)) + + + ,(anchored-h 3 "¿Qué es la informática?" "whats-informatics") + (p "Escrito por Giacomo Tesio y traducido y adaptado por Ekaitz Zárraga, «¿Qué es + la informática?» trata de describir qué es la informática desde su origen y de + generar reflexión respecto a la ética de ésta y al uso que se le está dando hoy + en día. Este tomo sirve como apertura y como declaración de intenciones ya que + las ideas de Giacomo encajan a la perfección con el objetivo de ElenQ + Publishing, a pesar de haber surgido de forma independiente.") + (div (@ (class "flex-around-wrap")) + (@raw ,informatics) + ,(book "5px" "/books/What_is_Informatics/es/cover.png" '("type2"))) + + + ,(anchored-h 3 "Programación en Python" "programming-in-python") + (p "Escrito por Ekaitz Zárraga como material para sus cursos de formación, este + documento es un manual del lenguaje de programación Python que describe además + fundamentos técnicos de la programación general.") + (div (@ (class "flex-around-wrap")) + (@raw ,python) + ,(book "13px" "/books/Programming_in_Python/es/cover.png" '("type1"))) + + + (section + ,(anchored-h 2 "Financiación" "funding") + (@raw ,funding))) + + (footer (@ (class bar-bottom)) + (div (@ (class "container text-center")) + (h6 "ElenQ Technology") + ,(md footer)))))) -- cgit v1.2.3