From 105206aef10997eb4aac14dbe0427062823443e1 Mon Sep 17 00:00:00 2001 From: Nate Date: Fri, 17 Sep 2021 14:02:31 -0400 Subject: [PATCH] style prose, add code highligting, style updates page --- server/static/prism.js | 12 ++ server/static/prose.css | 174 ++++++++++++++++++++++-- server/static/prose.css.map | 2 +- server/static/prose.scss | 190 +++++++++++++++++++++++++-- server/styles.css | 3 + server/templates/partials/layout.hbs | 3 +- server/templates/updates.hbs | 3 + 7 files changed, 368 insertions(+), 19 deletions(-) create mode 100644 server/static/prism.js diff --git a/server/static/prism.js b/server/static/prism.js new file mode 100644 index 0000000000000000000000000000000000000000..b08aaf6c6a83165b7aef089d353a7a1c4ce68cbc --- /dev/null +++ b/server/static/prism.js @@ -0,0 +1,12 @@ +/* PrismJS 1.25.0 +https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,e={},M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);y+=m.value.length,m=m.next){var b=m.value;if(t.length>n.length)return;if(!(b instanceof W)){var k,x=1;if(h){if(!(k=z(v,y,n,f)))break;var w=k.index,A=k.index+k[0].length,P=y;for(P+=m.value.length;P<=w;)m=m.next,P+=m.value.length;if(P-=m.value.length,y=P,m.value instanceof W)continue;for(var E=m;E!==t.tail&&(Pl.reach&&(l.reach=N);var j=m.prev;O&&(j=I(t,j,O),y+=O.length),q(t,j,x);var C=new W(o,g?M.tokenize(S,g):S,d,S);if(m=I(t,j,C),L&&I(t,m,L),1l.reach&&(l.reach=_.reach)}}}}}}(e,a,n,a.head,0),function(e){var n=[],t=e.head.next;for(;t!==e.tail;)n.push(t.value),t=t.next;return n}(a)},hooks:{all:{},add:function(e,n){var t=M.hooks.all;t[e]=t[e]||[],t[e].push(n)},run:function(e,n){var t=M.hooks.all[e];if(t&&t.length)for(var r,a=0;r=t[a++];)r(n)}},Token:W};function W(e,n,t,r){this.type=e,this.content=n,this.alias=t,this.length=0|(r||"").length}function z(e,n,t,r){e.lastIndex=n;var a=e.exec(t);if(a&&r&&a[1]){var i=a[1].length;a.index+=i,a[0]=a[0].slice(i)}return a}function i(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function I(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function q(e,n,t){for(var r=n.next,a=0;a"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var t=M.util.currentScript();function r(){M.manual||M.highlightAll()}if(t&&(M.filename=t.src,t.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var a=document.readyState;"loading"===a||"interactive"===a&&t&&t.defer?document.addEventListener("DOMContentLoaded",r):window.requestAnimationFrame?window.requestAnimationFrame(r):window.setTimeout(r,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var t={"included-cdata":{pattern://i,inside:s}};t["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var n={};n[a]={pattern:RegExp("(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(/__/g,function(){return a}),"i"),lookbehind:!0,greedy:!0,inside:t},Prism.languages.insertBefore("markup","cdata",n)}}),Object.defineProperty(Prism.languages.markup.tag,"addAttribute",{value:function(a,e){Prism.languages.markup.tag.inside["special-attr"].push({pattern:RegExp("(^|[\"'\\s])(?:"+a+")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))","i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[e,"language-"+e],inside:Prism.languages[e]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml; +!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; +!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},a={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:a},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:a},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:a.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:a.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var s=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],i=a.variable[1].inside,o=0;o>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},Prism.languages.c.string],comment:Prism.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:Prism.languages.c}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete Prism.languages.c.boolean; +!function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char8_t|char16_t|char32_t|class|compl|concept|const|consteval|constexpr|constinit|const_cast|continue|co_await|co_return|co_yield|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n="\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(//g,function(){return t.source});e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp("(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(//g,function(){return t.source})),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:true|false)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp('(\\b(?:module|import)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|'+"(?:\\s*:\\s*)?|:\\s*".replace(//g,function(){return n})+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(Prism); +!function(e){for(var a="/\\*(?:[^*/]|\\*(?!/)|/(?!\\*)|)*\\*/",t=0;t<2;t++)a=a.replace(//g,function(){return a});a=a.replace(//g,function(){return"[^\\s\\S]"}),e.languages.rust={comment:[{pattern:RegExp("(^|[^\\\\])"+a),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0,alias:"string"},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|Self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:[ui](?:8|16|32|64|128|size)|f(?:32|64)|bool|char|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64|size)?|f32|f64))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism); +Prism.languages.scss=Prism.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),Prism.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|forward|for|each|while|import|use|extend|debug|warn|mixin|include|function|return|content)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),Prism.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),Prism.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|with|show|hide)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),Prism.languages.scss.atrule.inside.rest=Prism.languages.scss; diff --git a/server/static/prose.css b/server/static/prose.css index 10c3dadf0fe5b9befb3182969c184e94d27e8206..6d57b2258faf76775790cbfb918454b63f5dc1de 100644 --- a/server/static/prose.css +++ b/server/static/prose.css @@ -16,9 +16,35 @@ article.prose h4, margin: 3rem 0 1rem 0; } +article.prose h1, +.type-prose h1 { + font-size: 2.25rem; + line-height: 2.5rem; +} + +article.prose h2, +.type-prose h2 { + font-size: 1.875rem; + line-height: 2.25rem; +} + +article.prose h3, +.type-prose h3 { + font-size: 1.6rem; + line-height: 2rem; +} + +article.prose h4, +.type-prose h4 { + font-size: 1.4rem; + line-height: 1.75rem; +} + article.prose p, +article.prose li, article.prose a, .type-prose p, +.type-prose li, .type-prose a { color: #ddd; font-size: 1.3rem; @@ -46,7 +72,8 @@ article.prose p:not(:last-of-type), margin-bottom: 1.5rem; } -article.prose img, article.prose pre, +article.prose img, +article.prose pre, .type-prose img, .type-prose pre { margin: 1.5rem 0; @@ -61,7 +88,6 @@ article.prose ul li, .type-prose ul li { list-style-type: disc; list-style-position: outside; - font-size: 1.3rem; } article.prose ul li:not(:last-of-type), @@ -71,21 +97,153 @@ article.prose ul li:not(:last-of-type), article.prose pre, .type-prose pre { - background-color: rgba(255, 255, 255, 0.15); padding: 0.8rem; + background-color: rgba(255, 255, 255, 0.1); } article.prose code, .type-prose code { font-family: "JetBrains Mono", "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", "Courier New", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", monospace; font-size: 0.96rem; + letter-spacing: 0rem; +} + +article.prose :not(pre) > code, +.type-prose :not(pre) > code { + padding: 0.2rem 0.4rem; + background-color: rgba(255, 255, 255, 0.15); +} + +/* Code Highlighting Styles +/* Based on PrismJS 1.25.0 +https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */ +code[class*="language-"], +pre[class*="language-"] { + color: #ddd; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; } -article.prose p code, -article.prose li code, -.type-prose p code, -.type-prose li code { +pre[class*="language-"], +:not(pre) > code[class*="language-"] { background-color: rgba(255, 255, 255, 0.15); - padding: 0.2rem 0.4rem; +} + +/* Code blocks */ +pre[class*="language-"]::-moz-selection { + /* Firefox */ + background: #3b57bc33; +} + +pre[class*="language-"]::selection { + /* Safari */ + background: #3b57bc33; +} + +/* Text Selection colour */ +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #3b57bc33; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #3b57bc33; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #9cdcfe; +} + +.token.punctuation { + opacity: 0.7; +} + +.token.namespace { + opacity: 0.7; +} + +.token.tag, +.token.boolean, +.token.number, +.token.deleted { + color: #b5cea8; +} + +.token.keyword, +.token.property, +.token.selector, +.token.constant, +.token.symbol, +.token.builtin { + color: #0086c0; + /* #F9EE98 */ +} + +.token.attr-name, +.token.attr-value, +.token.string, +.token.char, +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable, +.token.inserted { + color: #4e94ce; +} + +.token.atrule { + color: #4ec9b0; +} + +.token.regex, +.token.important { + color: #dcdcaa; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +/* Markup */ +.language-markup .token.tag, +.language-markup .token.attr-name, +.language-markup .token.punctuation { + color: #4e94ce; +} + +/* Make the tokens sit above the line highlight so the colours don't look faded. */ +.token { + position: relative; + z-index: 1; } /*# sourceMappingURL=prose.css.map */ \ No newline at end of file diff --git a/server/static/prose.css.map b/server/static/prose.css.map index 65412576c23066b8457fce87d3297bcaa271edff..2f1572df0eb422212eb448041ede8fd2989baf92 100644 --- a/server/static/prose.css.map +++ b/server/static/prose.css.map @@ -1,6 +1,6 @@ { "version": 3, - "mappings": "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", + "mappings": "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", "sources": [ "prose.scss" ], diff --git a/server/static/prose.scss b/server/static/prose.scss index 430e4437bb36701d6f651e1cb9a47369fbab8b88..b0d05338ee960f899abf8f20edfb1b46975d54ba 100644 --- a/server/static/prose.scss +++ b/server/static/prose.scss @@ -18,12 +18,28 @@ article.prose, margin: 3rem 0 1rem 0; } - p, - li { - // max-width: 90%; + h1 { + font-size: 2.25rem; + line-height: 2.5rem; + } + + h2 { + font-size: 1.875rem; + line-height: 2.25rem; + } + + h3 { + font-size: 1.6rem; + line-height: 2rem; + } + + h4 { + font-size: 1.4rem; + line-height: 1.75rem; } p, + li, a { color: #ddd; font-size: 1.3rem; @@ -47,7 +63,8 @@ article.prose, margin-bottom: 1.5rem; } - img, pre { + img, + pre { margin: 1.5rem 0; } @@ -58,15 +75,14 @@ article.prose, ul li { list-style-type: disc; list-style-position: outside; - font-size: 1.3rem; &:not(:last-of-type) { margin-bottom: 0.2rem; } } pre { - background-color: rgba(255, 255, 255, 0.15); padding: 0.8rem; + background-color: rgba(255, 255, 255, 0.1); } code { @@ -76,11 +92,167 @@ article.prose, "Courier New", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", monospace; font-size: 0.96rem; + letter-spacing: 0rem; } - p code, - li code { + :not(pre) > code { + padding: 0.2rem 0.4rem; background-color: rgba(255, 255, 255, 0.15); - padding: 0.2rem 0.4rem; } } + +/* Code Highlighting Styles +/* Based on PrismJS 1.25.0 +https://prismjs.com/download.html#themes=prism-twilight&languages=markup+css+clike+javascript+bash+c+cpp+rust+scss */ + +code[class*="language-"], +pre[class*="language-"] { + color: #ddd; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"], +:not(pre) > code[class*="language-"] { + background-color: rgba(255, 255, 255, 0.15); +} + +/* Code blocks */ +pre[class*="language-"] { + // Language specific code block styles +} + +pre[class*="language-"]::-moz-selection { + /* Firefox */ + background: #3b57bc33; +} + +pre[class*="language-"]::selection { + /* Safari */ + background: #3b57bc33; +} + +/* Text Selection colour */ +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #3b57bc33; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #3b57bc33; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #9cdcfe; +} + +.token.punctuation { + opacity: 0.7; +} + +.token.namespace { + opacity: 0.7; +} + +.token.tag, +.token.boolean, +.token.number, +.token.deleted { + color: #b5cea8; +} + +.token.keyword, +.token.property, +.token.selector, +.token.constant, +.token.symbol, +.token.builtin { + color: #0086c0; /* #F9EE98 */ +} + +.token.attr-name, +.token.attr-value, +.token.string, +.token.char, +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string, +.token.variable, +.token.inserted { + color: #4e94ce; +} + +.token.atrule { + color: #4ec9b0; +} + +.token.regex, +.token.important { + color: #dcdcaa; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +/* Markup */ +.language-markup .token.tag, +.language-markup .token.attr-name, +.language-markup .token.punctuation { + color: #4e94ce; +} + +/* Make the tokens sit above the line highlight so the colours don't look faded. */ +.token { + position: relative; + z-index: 1; +} + +// TODO: Style line highlights + +// .line-highlight.line-highlight { +// background: hsla(0, 0%, 33%, 0.25); /* #545454 */ +// background: linear-gradient(to right, hsla(0, 0%, 33%, .1) 70%, hsla(0, 0%, 33%, 0)); /* #545454 */ +// border-bottom: 1px dashed hsl(0, 0%, 33%); /* #545454 */ +// border-top: 1px dashed hsl(0, 0%, 33%); /* #545454 */ +// margin-top: 0.75em; /* Same as .prism’s padding-top */ +// z-index: 0; +// } + +// .line-highlight.line-highlight:before, +// .line-highlight.line-highlight[data-end]:after { +// background-color: hsl(215, 15%, 59%); /* #8794A6 */ +// color: hsl(24, 20%, 95%); /* #F5F2F0 */ +// } diff --git a/server/styles.css b/server/styles.css index 1a583e69d358606c488b937aa5120bbaa62032e3..0232c1d2d6c2e98f6584ba0334d83e3f51f5f767 100644 --- a/server/styles.css +++ b/server/styles.css @@ -24,6 +24,9 @@ @apply text-2xl; @apply tracking-tighter; } + h4 { + @apply text-xl; + } .underline, .hover\:underline:hover { text-underline-offset: 4px; } diff --git a/server/templates/partials/layout.hbs b/server/templates/partials/layout.hbs index 8bb387022d121b3ac8e220167e95d1a7bdfe910c..a961562aeb28640c5e8c53652e2a4e47e93d5313 100644 --- a/server/templates/partials/layout.hbs +++ b/server/templates/partials/layout.hbs @@ -4,7 +4,7 @@ - + Zed – a lightning fast, collaborative code editor written natively in Rust \ No newline at end of file diff --git a/server/templates/updates.hbs b/server/templates/updates.hbs index 7f5682c401f79d08197ae8e44a825823ddfe50e7..b78dd4b6fa0e1490d5d52f84fbac3deaf4154307 100644 --- a/server/templates/updates.hbs +++ b/server/templates/updates.hbs @@ -10,6 +10,9 @@
{{{body}}}
+
+

+
{{/each}} {{else}}