commit 1f101d562e791860aadda03e8978197cbd6f6735
parent a36f232b5efefec84641dccd69e26c21aec77510
Author: Ryan Jeffrey <ryan@ryanmj.xyz>
Date: Wed, 10 Feb 2021 23:30:01 -0800
Can now fully render homepage
Diffstat:
M | .gitignore | | | 8 | ++++++-- |
M | css/main.css | | | 202 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ |
M | css/terminal.css | | | 133 | ++++++++++++++++++++++++++++++++++++++++++------------------------------------- |
M | index.org | | | 27 | ++++++++++++++++++++++++--- |
M | publish.el | | | 61 | ++++++++++++++++++++++++++++++++++++++----------------------- |
A | scripts/main.js | | | 43 | +++++++++++++++++++++++++++++++++++++++++++ |
6 files changed, 368 insertions(+), 106 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -54,4 +54,8 @@ flycheck_*.el
/network-security.data
-# End of https://www.toptal.com/developers/gitignore/api/emacs-
\ No newline at end of file
+# End of https://www.toptal.com/developers/gitignore/api/emacs
+
+res/
+public/
+files/+
\ No newline at end of file
diff --git a/css/main.css b/css/main.css
@@ -1,38 +1,210 @@
#taskbar {
- width: 75%;
- display: flex;
- height: 200px;
+ width: 75%;
+ display: flex;
+ height: 200px;
}
#home {
- width: 20%;
+ width: 20%;
}
#git-server {
- width: 20%;
+ width: 20%;
}
#blog {
- width: 20%;
+ width: 20%;
}
#files {
- width: 20%;
+ width: 20%;
}
#other-posts {
- width: 20%;
+ width: 20%;
}
-/*
-@font-face {
- font-family: "Stickynotes";
- src: url("../res/Stickynotes.otf") format("opentype");
+
+.title { text-align: center;
+ margin-bottom: .2em; }
+.subtitle { text-align: center;
+ font-size: medium;
+ font-weight: bold;
+ margin-top:0; }
+.todo { font-family: monospace; color: red; }
+.done { font-family: monospace; color: green; }
+.priority { font-family: monospace; color: orange; }
+.tag { background-color: #eee; font-family: monospace;
+ padding: 2px; font-size: 80%; font-weight: normal; }
+.timestamp { color: #bebebe; }
+.timestamp-kwd { color: #5f9ea0; }
+.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
+.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
+.org-center { margin-left: auto; margin-right: auto; text-align: center; }
+.underline { text-decoration: underline; }
+#postamble p, #preamble p { font-size: 90%; margin: .2em; }
+p.verse { margin-left: 3%; }
+pre :not(#main-page-title) {
+ border: 1px solid #ccc;
+ box-shadow: 3px 3px 3px #eee;
+ padding: 8pt;
+ font-family: monospace;
+ overflow: auto;
+ margin: 1.2em;
+}
+pre.src {
+ position: relative;
+ overflow: visible;
+ padding-top: 1.2em;
}
-*/
+pre.src:before {
+ display: none;
+ position: absolute;
+ background-color: white;
+ top: -10px;
+ right: 10px;
+ padding: 3px;
+ border: 1px solid black;
+}
+pre.src:hover:before { display: inline;}
+/* Languages per Org manual */
+pre.src-asymptote:before { content: 'Asymptote'; }
+pre.src-awk:before { content: 'Awk'; }
+pre.src-C:before { content: 'C'; }
+/* pre.src-C++ doesn't work in CSS */
+pre.src-clojure:before { content: 'Clojure'; }
+pre.src-css:before { content: 'CSS'; }
+pre.src-D:before { content: 'D'; }
+pre.src-ditaa:before { content: 'ditaa'; }
+pre.src-dot:before { content: 'Graphviz'; }
+pre.src-calc:before { content: 'Emacs Calc'; }
+pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
+pre.src-fortran:before { content: 'Fortran'; }
+pre.src-gnuplot:before { content: 'gnuplot'; }
+pre.src-haskell:before { content: 'Haskell'; }
+pre.src-hledger:before { content: 'hledger'; }
+pre.src-java:before { content: 'Java'; }
+pre.src-js:before { content: 'Javascript'; }
+pre.src-latex:before { content: 'LaTeX'; }
+pre.src-ledger:before { content: 'Ledger'; }
+pre.src-lisp:before { content: 'Lisp'; }
+pre.src-lilypond:before { content: 'Lilypond'; }
+pre.src-lua:before { content: 'Lua'; }
+pre.src-matlab:before { content: 'MATLAB'; }
+pre.src-mscgen:before { content: 'Mscgen'; }
+pre.src-ocaml:before { content: 'Objective Caml'; }
+pre.src-octave:before { content: 'Octave'; }
+pre.src-org:before { content: 'Org mode'; }
+pre.src-oz:before { content: 'OZ'; }
+pre.src-plantuml:before { content: 'Plantuml'; }
+pre.src-processing:before { content: 'Processing.js'; }
+pre.src-python:before { content: 'Python'; }
+pre.src-R:before { content: 'R'; }
+pre.src-ruby:before { content: 'Ruby'; }
+pre.src-sass:before { content: 'Sass'; }
+pre.src-scheme:before { content: 'Scheme'; }
+pre.src-screen:before { content: 'Gnu Screen'; }
+pre.src-sed:before { content: 'Sed'; }
+pre.src-sh:before { content: 'shell'; }
+pre.src-sql:before { content: 'SQL'; }
+pre.src-sqlite:before { content: 'SQLite'; }
+/* additional languages in org.el's org-babel-load-languages alist */
+pre.src-forth:before { content: 'Forth'; }
+pre.src-io:before { content: 'IO'; }
+pre.src-J:before { content: 'J'; }
+pre.src-makefile:before { content: 'Makefile'; }
+pre.src-maxima:before { content: 'Maxima'; }
+pre.src-perl:before { content: 'Perl'; }
+pre.src-picolisp:before { content: 'Pico Lisp'; }
+pre.src-scala:before { content: 'Scala'; }
+pre.src-shell:before { content: 'Shell Script'; }
+pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
+/* additional language identifiers per "defun org-babel-execute"
+ in ob-*.el */
+pre.src-cpp:before { content: 'C++'; }
+pre.src-abc:before { content: 'ABC'; }
+pre.src-coq:before { content: 'Coq'; }
+pre.src-groovy:before { content: 'Groovy'; }
+/* additional language identifiers from org-babel-shell-names in
+ ob-shell.el: ob-shell is the only babel language using a lambda to put
+ the execution function name together. */
+pre.src-bash:before { content: 'bash'; }
+pre.src-csh:before { content: 'csh'; }
+pre.src-ash:before { content: 'ash'; }
+pre.src-dash:before { content: 'dash'; }
+pre.src-ksh:before { content: 'ksh'; }
+pre.src-mksh:before { content: 'mksh'; }
+pre.src-posh:before { content: 'posh'; }
+/* Additional Emacs modes also supported by the LaTeX listings package */
+pre.src-ada:before { content: 'Ada'; }
+pre.src-asm:before { content: 'Assembler'; }
+pre.src-caml:before { content: 'Caml'; }
+pre.src-delphi:before { content: 'Delphi'; }
+pre.src-html:before { content: 'HTML'; }
+pre.src-idl:before { content: 'IDL'; }
+pre.src-mercury:before { content: 'Mercury'; }
+pre.src-metapost:before { content: 'MetaPost'; }
+pre.src-modula-2:before { content: 'Modula-2'; }
+pre.src-pascal:before { content: 'Pascal'; }
+pre.src-ps:before { content: 'PostScript'; }
+pre.src-prolog:before { content: 'Prolog'; }
+pre.src-simula:before { content: 'Simula'; }
+pre.src-tcl:before { content: 'tcl'; }
+pre.src-tex:before { content: 'TeX'; }
+pre.src-plain-tex:before { content: 'Plain TeX'; }
+pre.src-verilog:before { content: 'Verilog'; }
+pre.src-vhdl:before { content: 'VHDL'; }
+pre.src-xml:before { content: 'XML'; }
+pre.src-nxml:before { content: 'XML'; }
+/* add a generic configuration mode; LaTeX export needs an additional
+ (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
+pre.src-conf:before { content: 'Configuration File'; }
-@font-face { font-family: "MyCantarell"; src:
- url("../res/Cantarell-Regular.otf") format("opentype"); }
+table { border-collapse:collapse; }
+caption.t-above { caption-side: top; }
+caption.t-bottom { caption-side: bottom; }
+td, th { vertical-align:top; }
+th.org-right { text-align: center; }
+th.org-left { text-align: center; }
+th.org-center { text-align: center; }
+td.org-right { text-align: right; }
+td.org-left { text-align: left; }
+td.org-center { text-align: center; }
+dt { font-weight: bold; }
+.footpara { display: inline; }
+.footdef { margin-bottom: 1em; }
+.figure { padding: 1em; }
+.figure p { text-align: center; }
+.equation-container {
+ display: table;
+ text-align: center;
+ width: 100%;
+}
+.equation {
+ vertical-align: middle;
+}
+.equation-label {
+ display: table-cell;
+ text-align: right;
+ vertical-align: middle;
+}
+.inlinetask {
+ padding: 10px;
+ border: 2px solid gray;
+ margin: 10px;
+ background: #ffffcc;
+}
+#org-div-home-and-up
+{ text-align: right; font-size: 70%; white-space: nowrap; }
+textarea { overflow-x: auto; }
+.linenr { font-size: smaller }
+.code-highlighted { background-color: #ffff00; }
+.org-info-js_info-navigation { border-style: none; }
+#org-info-js_console-label
+{ font-size: 10px; font-weight: bold; white-space: nowrap; }
+.org-info-js_search-highlight
+{ background-color: #ffff00; color: #000000; font-weight: bold; }
+.org-svg { width: 90%; }
diff --git a/css/terminal.css b/css/terminal.css
@@ -1,111 +1,118 @@
@import './rgb.css';
@import './main.css';
+#main-page-title {
+ margin: 0 auto;
+ padding: 0;
+ white-space: pre-wrap;
+ color: var(--grey);
+}
+
.topl:hover {
- box-shadow: 0 0 0.2em 0.2em #0ff;
+ box-shadow: 0 0 0.2em 0.2em #0ff;
}
h4 {
- padding: 0;
- margin: 0;
- margin-top: 0;
- color: white;
- font-color: white;
- font-family: "Cantarell", "MyCantarell";
- font-size: 0.8em;
+ padding: 0;
+ margin: 0;
+ margin-top: 0;
+ color: white;
+ font-color: white;
+ font-family: "Cantarell", "MyCantarell";
+ font-size: 0.8em;
}
#taskbar {
- width: 100%;
+ width: 100%;
}
#task-meta {
- width: 75%;
- padding: 0;
- margin: auto;
- margin-top: auto;
- background-color: rgba(200,200,200,0.2);
- border: 0.1em solid white;
- text-align: center;
+ width: 75%;
+ padding: 0;
+ margin: auto;
+ margin-top: auto;
+ background-color: rgba(200,200,200,0.2);
+ border: 0.1em solid white;
+ text-align: center;
}
#taskbar div {
- display: inline-block;
- zoom: 1;
- width: 19%;
- text-align:center;
- margin: auto;
- margin-top: auto;
- margin-bottom: 5%;
- padding: 0;
+ display: inline-block;
+ zoom: 1;
+ width: 19%;
+ text-align:center;
+ margin: auto;
+ margin-top: auto;
+ margin-bottom: 5%;
+ padding: 0;
}
#task-meta hr {
-/* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#ffffff+0,f3f3f3+50,ededed+51,ffffff+100;White+Gloss+%232 */
-background: #ffffff; /* Old browsers */
-background: -moz-linear-gradient(top, #ffffff 0%, #f3f3f3 50%, #ededed 51%, #ffffff 100%); /* FF3.6-15 */
-background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%); /* Chrome10-25,Safari5.1-6 */
-background: linear-gradient(to bottom, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
-filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */
+ /* Permalink - use to edit and share this gradient: https://colorzilla.com/gradient-editor/#ffffff+0,f3f3f3+50,ededed+51,ffffff+100;White+Gloss+%232 */
+ background: #ffffff; /* Old browsers */
+ background: -moz-linear-gradient(top, #ffffff 0%, #f3f3f3 50%, #ededed 51%, #ffffff 100%); /* FF3.6-15 */
+ background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%); /* Chrome10-25,Safari5.1-6 */
+ background: linear-gradient(to bottom, #ffffff 0%,#f3f3f3 50%,#ededed 51%,#ffffff 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 ); /* IE6-9 */
}
.taskimg {
- width: 40%;
- height: 40%;
- transition: transform 0.3s;
+ width: 40%;
+ height: 40%;
+ transition: transform 0.3s;
}
.taskimg:hover {
- transform: scale(1.5);
+ transform: scale(1.5);
}
.twin {
- border: 1.5em solid transparent;
- border-image: url(../res/terminal.png) 38 37 38 36 round;
- padding: 0;
- /* positioning */
- margin: 0 auto;
- margin-top: 75px;
- width: 75%;
- background-color: rgba(0, 0, 0, 0.85);
-
+ border: 1.5em solid transparent;
+ border-image: url(../res/terminal.png) 38 37 38 36 round;
+ padding: 0;
+ /* positioning */
+ margin: 0 auto;
+ margin-top: 75px;
+ width: 75%;
+ background-color: rgba(0, 0, 0, 0.85);
+
}
.tcontent {
- margin: 0 auto;
- padding: 0;
+ margin: 0 auto;
+ padding: 0;
}
.twin p {
- margin: 0 auto;
- padding: 0;
- white-space: pre-wrap;
- color: var(--grey);
+ margin: 0 auto;
+ padding: 0;
+ white-space: pre-wrap;
+ color: var(--grey);
}
h2 {
- color: var(--spring_green);
- font-size: 26pt;
+ color: var(--spring_green);
+ font-size: 26pt;
}
body {
- /*background-image: url(../res/back01.jpg);*/
- background: #2d6189;
- background-size: cover;
- background-repeat: no-repeat;
- font-family: Inconsolata, "Courier New", monospace;
- font-size: 1.1em;
- -webkit-font-smoothing : none;
- -moz-font-smoothing: never;
+ /*background-image: url(../res/back01.jpg);*/
+ background: #2d6189;
+ background-size: cover;
+ background-repeat: no-repeat;
+ font-family: Inconsolata, "Courier New", monospace;
+ font-size: 1.1em;
+ -webkit-font-smoothing : none;
+ -moz-font-smoothing: never;
}
.fttr {
- margin-top: auto;
- margin: auto;
- margin-top: 75px;
- width: 75%;
+ margin-top: auto;
+ margin: auto;
+ margin-top: 75px;
+ width: 75%;
}
diff --git a/index.org b/index.org
@@ -4,12 +4,13 @@
#+options: p:nil pri:nil prop:nil stat:t tags:t tasks:t tex:t
#+options: timestamp:t title:nil toc:t todo:t |:t
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="../css/terminal.css" />
+#+HTML_HEAD: <script src="../scripts/main.js"></script>
#+language: en
#+select_tags: export
#+exclude_tags: noexport
#+creator: Emacs 27.1 (Org mode 9.3)
#+options: html-link-use-abs-url:nil
-#+options: html-scripts:t html-style:t
+#+options: html-scripts:nil html-style:nil
#+options: html5-fancy:nil tex:t
#+html_doctype: xhtml-strict
#+html_container: div
@@ -31,12 +32,32 @@
#+email: ryan@ryanmj.xyz
__PROMPT__ cat ~/intro.txt
-<!--TITLE HERE-->
+
+#+BEGIN_EXPORT html
+
+<pre id="main-page-title">
+
+ ____ _
+| _ \ _ _ __ _ _ __ ( )___
+| |_) | | | |/ _` | '_ \|// __|
+| _ <| |_| | (_| | | | | \__ \
+|_| \_\\__, |\__,_|_| |_| |___/
+ |___/
+ _ _
+| | | | ___ _ __ ___ ___ _ __ __ _ __ _ ___
+| |_| |/ _ \| '_ ` _ \ / _ \ '_ \ / _` |/ _` |/ _ \
+| _ | (_) | | | | | | __/ |_) | (_| | (_| | __/
+|_| |_|\___/|_| |_| |_|\___| .__/ \__,_|\__, |\___|
+ |_| |___/
+</pre>
+
+
+#+END_EXPORT
__PROMPT__ ls -lh
+
#+BEGIN_EXPORT html
<!--LS HERE-->
-<p>total 8.1K Words</p>
#+END_EXPORT
__PROMPT__ cat reason.txt
diff --git a/publish.el b/publish.el
@@ -22,32 +22,41 @@
(defun do-ls-on-list (files)
"Create ls-like output on a list FILES (string paths).
Assumes that all files in FILES exist."
- (goto-char (point-min))
- (replace-string
- "<!--LS HERE-->"
- (concat
- "<p>"
- (cond ; Get the prefix if the ls -l output.
- ((file-symlink-p (car files)) "lrwxrwxrwx 1")
- ((file-directory-p (car files)) "drwxr-xr-x 2")
- (t "-rw-r--r-- 1"))
- " ryan ryan "
- (replace-regexp-in-string
- "\n$" " "
- (shell-command-to-string (concat "find " (car files) " -name '*.org' -exec cat {} + | wc -c | numfmt --to=si")))
- (shell-command-to-string (concat "ls -dl '--time-style=+%b %m %Y' "
- (car files)
- " | awk '{printf \"%s %2d %s \", $6, $7, $8} '" ))
- "<a href=\""
- (car files)
- "\">"
- (car files)
- "</a></p>")))
+ (when (bound-and-true-p files)
+ (insert
+ (concat
+ "<p>"
+ (cond ; Get the prefix if the ls -l output.
+ ((file-symlink-p (car files)) "lrwxrwxrwx 1")
+ ((file-directory-p (car files)) "drwxr-xr-x 2")
+ (t "-rw-r--r-- 1"))
+ " ryan ryan "
+ (format "%4s "
+ (shell-command-to-string
+ (concat "find " (car files) " -name '*.org' -exec cat {} + | wc -c | numfmt --to=si | tr -d '\n'")))
+ (shell-command-to-string (concat "ls -dl '--time-style=+%b %m %Y' "
+ (car files)
+ " | awk '{printf \"%s %2d %s \", $6, $7, $8} '" ))
+ "<a href=\""
+ (car files)
+ "\">"
+ (car files)
+ "</a></p>\n"))
+ (do-ls-on-list (cdr files))))
;; Replace <!--LS HERE--> with ls output.
(add-hook 'org-export-before-parsing-hook #'(lambda (backend)
- (do-ls-on-list (list "files" "posts"))))
+ "Create fake ls listing."
+ (goto-char (point-min))
+ (while (search-forward "<!--LS HERE-->" (point-max) t)
+ (kill-line)
+ (insert (concat
+ "<p>total "
+ (shell-command-to-string
+ "find . -name '*.org' -exec cat {} + | wc -c | numfmt --to=si | tr -d '\n'")
+ " Words</p>\n"))
+ (do-ls-on-list (list "files" "posts")))))
;; Sets up exporting defaults for org mode.
@@ -91,7 +100,13 @@ Assumes that all files in FILES exist."
:htmlized-source nil
:html-preamble nil
:html-postamble nil)
- ("all" :components ("posts" "css" "main" "res" "files"))))
+ ("scripts"
+ :base-directory "scripts/"
+ :publishing-directory "public/scripts"
+ :base-extension "js"
+ :recursive t
+ :publishing-function org-publish-attachment)
+ ("all" :components ("posts" "css" "main" "res" "files" "scripts"))))
(provide 'publish)
;;; publish.el ends here
diff --git a/scripts/main.js b/scripts/main.js
@@ -0,0 +1,43 @@
+/*
+@licstart The following is the entire license notice for the
+JavaScript code in this tag.
+
+Copyright (C) 2012-2020 Free Software Foundation, Inc.
+
+The JavaScript code in this tag is free software: you can
+redistribute it and/or modify it under the terms of the GNU
+General Public License (GNU GPL) as published by the Free Software
+Foundation, either version 3 of the License, or (at your option)
+any later version. The code is distributed WITHOUT ANY WARRANTY;
+without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
+
+As additional permission under GNU GPL version 3 section 7, you
+may distribute non-source (e.g., minimized or compacted) forms of
+that code without the copy of the GNU GPL normally required by
+section 4, provided you include this license notice and a URL
+through which recipients can access the Corresponding Source.
+
+
+@licend The above is the entire license notice
+for the JavaScript code in this tag.
+*/
+<!--/*--><![CDATA[/*><!--*/
+ function CodeHighlightOn(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(null != target) {
+ elem.cacheClassElem = elem.className;
+ elem.cacheClassTarget = target.className;
+ target.className = "code-highlighted";
+ elem.className = "code-highlighted";
+ }
+ }
+ function CodeHighlightOff(elem, id)
+ {
+ var target = document.getElementById(id);
+ if(elem.cacheClassElem)
+ elem.className = elem.cacheClassElem;
+ if(elem.cacheClassTarget)
+ target.className = elem.cacheClassTarget;
+ }