vault backup: 2024-05-21 13:28:51
|
@ -0,0 +1 @@
|
|||
{}
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"accentColor": "",
|
||||
"theme": "obsidian"
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
[
|
||||
"obsidian-advanced-slides",
|
||||
"obsidian-git"
|
||||
]
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"properties": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": false
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
[
|
||||
"file-explorer",
|
||||
"global-search",
|
||||
"switcher",
|
||||
"graph",
|
||||
"backlink",
|
||||
"canvas",
|
||||
"outgoing-link",
|
||||
"tag-pane",
|
||||
"page-preview",
|
||||
"daily-notes",
|
||||
"templates",
|
||||
"note-composer",
|
||||
"command-palette",
|
||||
"editor-status",
|
||||
"bookmarks",
|
||||
"outline",
|
||||
"word-count",
|
||||
"file-recovery"
|
||||
]
|
|
@ -0,0 +1,636 @@
|
|||
@charset "UTF-8";
|
||||
:root {
|
||||
--split-div-size: 0;
|
||||
--split-gap-size: 0;
|
||||
}
|
||||
split {
|
||||
display: flex;
|
||||
gap: unset;
|
||||
flex-flow: row wrap;
|
||||
align-content: center;
|
||||
}
|
||||
split[even] > * {
|
||||
flex: 1;
|
||||
}
|
||||
split[no-margin] > * {
|
||||
--r-block-margin: 0;
|
||||
}
|
||||
split[wrap="1"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (1 - 1))) - (calc(var(--dbg-size) * 1 * 2))) / 1);
|
||||
}
|
||||
split[wrap="2"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (2 - 1))) - (calc(var(--dbg-size) * 2 * 2))) / 2);
|
||||
}
|
||||
split[wrap="3"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (3 - 1))) - (calc(var(--dbg-size) * 3 * 2))) / 3);
|
||||
}
|
||||
split[wrap="4"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (4 - 1))) - (calc(var(--dbg-size) * 4 * 2))) / 4);
|
||||
}
|
||||
split[wrap="5"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (5 - 1))) - (calc(var(--dbg-size) * 5 * 2))) / 5);
|
||||
}
|
||||
split[wrap="6"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (6 - 1))) - (calc(var(--dbg-size) * 6 * 2))) / 6);
|
||||
}
|
||||
split[wrap="7"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (7 - 1))) - (calc(var(--dbg-size) * 7 * 2))) / 7);
|
||||
}
|
||||
split[wrap="8"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (8 - 1))) - (calc(var(--dbg-size) * 8 * 2))) / 8);
|
||||
}
|
||||
split[wrap="9"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (9 - 1))) - (calc(var(--dbg-size) * 9 * 2))) / 9);
|
||||
}
|
||||
split[wrap="10"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (10 - 1))) - (calc(var(--dbg-size) * 10 * 2))) / 10);
|
||||
}
|
||||
split[wrap="11"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (11 - 1))) - (calc(var(--dbg-size) * 11 * 2))) / 11);
|
||||
}
|
||||
split[wrap="12"] > * {
|
||||
flex: 1 1 calc((100% - (calc(var(--split-gap-size) * (12 - 1))) - (calc(var(--dbg-size) * 12 * 2))) / 12);
|
||||
}
|
||||
split[gap="0"] {
|
||||
--split-gap-size: 0;
|
||||
gap: unset;
|
||||
}
|
||||
split[gap="1"] {
|
||||
--split-gap-size: 1em;
|
||||
gap: 1em;
|
||||
}
|
||||
split[gap="2"] {
|
||||
--split-gap-size: 2em;
|
||||
gap: 2em;
|
||||
}
|
||||
split[gap="3"] {
|
||||
--split-gap-size: 3em;
|
||||
gap: 3em;
|
||||
}
|
||||
split[gap="4"] {
|
||||
--split-gap-size: 4em;
|
||||
gap: 4em;
|
||||
}
|
||||
split[gap="5"] {
|
||||
--split-gap-size: 5em;
|
||||
gap: 5em;
|
||||
}
|
||||
split[left="1"] > *:first-child {
|
||||
flex: 1;
|
||||
}
|
||||
split[middle="1"] > *:nth-child(2) {
|
||||
flex: 1 !important;
|
||||
}
|
||||
split[right="1"] > *:nth-child(2) {
|
||||
flex: 1;
|
||||
}
|
||||
split[right="1"] > *:nth-child(3) {
|
||||
flex: 1;
|
||||
}
|
||||
split[left="2"] > *:first-child {
|
||||
flex: 2;
|
||||
}
|
||||
split[middle="2"] > *:nth-child(2) {
|
||||
flex: 2 !important;
|
||||
}
|
||||
split[right="2"] > *:nth-child(2) {
|
||||
flex: 2;
|
||||
}
|
||||
split[right="2"] > *:nth-child(3) {
|
||||
flex: 2;
|
||||
}
|
||||
split[left="3"] > *:first-child {
|
||||
flex: 3;
|
||||
}
|
||||
split[middle="3"] > *:nth-child(2) {
|
||||
flex: 3 !important;
|
||||
}
|
||||
split[right="3"] > *:nth-child(2) {
|
||||
flex: 3;
|
||||
}
|
||||
split[right="3"] > *:nth-child(3) {
|
||||
flex: 3;
|
||||
}
|
||||
split[left="4"] > *:first-child {
|
||||
flex: 4;
|
||||
}
|
||||
split[middle="4"] > *:nth-child(2) {
|
||||
flex: 4 !important;
|
||||
}
|
||||
split[right="4"] > *:nth-child(2) {
|
||||
flex: 4;
|
||||
}
|
||||
split[right="4"] > *:nth-child(3) {
|
||||
flex: 4;
|
||||
}
|
||||
split[left="5"] > *:first-child {
|
||||
flex: 5;
|
||||
}
|
||||
split[middle="5"] > *:nth-child(2) {
|
||||
flex: 5 !important;
|
||||
}
|
||||
split[right="5"] > *:nth-child(2) {
|
||||
flex: 5;
|
||||
}
|
||||
split[right="5"] > *:nth-child(3) {
|
||||
flex: 5;
|
||||
}
|
||||
split[left="6"] > *:first-child {
|
||||
flex: 6;
|
||||
}
|
||||
split[middle="6"] > *:nth-child(2) {
|
||||
flex: 6 !important;
|
||||
}
|
||||
split[right="6"] > *:nth-child(2) {
|
||||
flex: 6;
|
||||
}
|
||||
split[right="6"] > *:nth-child(3) {
|
||||
flex: 6;
|
||||
}
|
||||
split[left="7"] > *:first-child {
|
||||
flex: 7;
|
||||
}
|
||||
split[middle="7"] > *:nth-child(2) {
|
||||
flex: 7 !important;
|
||||
}
|
||||
split[right="7"] > *:nth-child(2) {
|
||||
flex: 7;
|
||||
}
|
||||
split[right="7"] > *:nth-child(3) {
|
||||
flex: 7;
|
||||
}
|
||||
split[left="8"] > *:first-child {
|
||||
flex: 8;
|
||||
}
|
||||
split[middle="8"] > *:nth-child(2) {
|
||||
flex: 8 !important;
|
||||
}
|
||||
split[right="8"] > *:nth-child(2) {
|
||||
flex: 8;
|
||||
}
|
||||
split[right="8"] > *:nth-child(3) {
|
||||
flex: 8;
|
||||
}
|
||||
split[left="9"] > *:first-child {
|
||||
flex: 9;
|
||||
}
|
||||
split[middle="9"] > *:nth-child(2) {
|
||||
flex: 9 !important;
|
||||
}
|
||||
split[right="9"] > *:nth-child(2) {
|
||||
flex: 9;
|
||||
}
|
||||
split[right="9"] > *:nth-child(3) {
|
||||
flex: 9;
|
||||
}
|
||||
split[left="10"] > *:first-child {
|
||||
flex: 10;
|
||||
}
|
||||
split[middle="10"] > *:nth-child(2) {
|
||||
flex: 10 !important;
|
||||
}
|
||||
split[right="10"] > *:nth-child(2) {
|
||||
flex: 10;
|
||||
}
|
||||
split[right="10"] > *:nth-child(3) {
|
||||
flex: 10;
|
||||
}
|
||||
split[left="11"] > *:first-child {
|
||||
flex: 11;
|
||||
}
|
||||
split[middle="11"] > *:nth-child(2) {
|
||||
flex: 11 !important;
|
||||
}
|
||||
split[right="11"] > *:nth-child(2) {
|
||||
flex: 11;
|
||||
}
|
||||
split[right="11"] > *:nth-child(3) {
|
||||
flex: 11;
|
||||
}
|
||||
.align-left {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.align-left p {
|
||||
text-align: left;
|
||||
}
|
||||
.align-center {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.align-center p {
|
||||
text-align: center;
|
||||
}
|
||||
.align-right {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
}
|
||||
.align-right p {
|
||||
text-align: right;
|
||||
}
|
||||
h1.align-left,
|
||||
h2.align-left,
|
||||
h3.align-left,
|
||||
h4.align-left,
|
||||
h5.align-left,
|
||||
h6.align-left,
|
||||
p.align-left {
|
||||
text-align: left;
|
||||
align-self: flex-start;
|
||||
}
|
||||
h1.align-right,
|
||||
h2.align-right,
|
||||
h3.align-right,
|
||||
h4.align-right,
|
||||
h5.align-right,
|
||||
h6.align-right,
|
||||
p.align-right {
|
||||
text-align: right;
|
||||
align-self: flex-end;
|
||||
}
|
||||
h1.align-center,
|
||||
h2.align-center,
|
||||
h3.align-center,
|
||||
h4.align-center,
|
||||
h5.align-center,
|
||||
h6.align-center,
|
||||
p.align-center {
|
||||
text-align: center;
|
||||
align-self: center;
|
||||
}
|
||||
:root {
|
||||
--animation-duration: 0.7s;
|
||||
}
|
||||
.slower {
|
||||
--animation-duration: 1.3s;
|
||||
}
|
||||
.faster {
|
||||
--animation-duration: 0.35s;
|
||||
}
|
||||
@keyframes fadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
animation-timing-function: cubic-bezier(0.1, 0.25, 0.75, 0.9);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.fadeIn {
|
||||
animation-name: fadeIn;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideRightIn {
|
||||
from {
|
||||
transform: translate3d(-200px, 0, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
.slideRightIn {
|
||||
animation-name: fadeIn, slideRightIn;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideLeftIn {
|
||||
from {
|
||||
transform: translate3d(200px, 0, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
.slideLeftIn {
|
||||
animation-name: fadeIn, slideLeftIn;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideUpIn {
|
||||
from {
|
||||
transform: translate3d(0, 150px, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
.slideUpIn {
|
||||
animation-name: fadeIn, slideUpIn;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.5, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideDownIn {
|
||||
from {
|
||||
transform: translate3d(0, -150px, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
.slideDownIn {
|
||||
animation-name: fadeIn, slideDownIn;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.5, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes fadeOut {
|
||||
from {
|
||||
opacity: 1;
|
||||
animation-timing-function: cubic-bezier(0.1, 0.25, 0.75, 0.9);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
.fadeOut {
|
||||
animation-name: fadeOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideRightOut {
|
||||
from {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(200px, 0, 0);
|
||||
}
|
||||
}
|
||||
.slideRightOut {
|
||||
animation-name: fadeOut, slideRightOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideLeftOut {
|
||||
from {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(-200px, 0, 0);
|
||||
}
|
||||
}
|
||||
.slideLeftOut {
|
||||
animation-name: fadeOut, slideLeftOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideUpOut {
|
||||
from {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(0, -150px, 0);
|
||||
}
|
||||
}
|
||||
.slideUpOut {
|
||||
animation-name: fadeOut, slideUpOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.5, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes slideDownOut {
|
||||
from {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
to {
|
||||
transform: translate3d(0, 150px, 0);
|
||||
}
|
||||
}
|
||||
.slideDownOut {
|
||||
animation-name: fadeOut, slideDownOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.5, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes scaleUp {
|
||||
from {
|
||||
transform: scale3d(0.78, 0.78, 1);
|
||||
}
|
||||
to {
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
.scaleUp {
|
||||
animation-name: fadeIn, scaleUp;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes scaleUpOut {
|
||||
from {
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
to {
|
||||
transform: scale3d(1.23, 1.23, 1);
|
||||
}
|
||||
}
|
||||
.scaleUpOut {
|
||||
animation-name: fadeOut, scaleUpOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.5, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes scaleDown {
|
||||
from {
|
||||
transform: scale3d(1.23, 1.23, 1);
|
||||
}
|
||||
to {
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
.scaleDown {
|
||||
animation-name: fadeIn, scaleDown;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.9, 0.2, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@keyframes scaleDownOut {
|
||||
from {
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
to {
|
||||
transform: scale3d(0.78, 0.78, 1);
|
||||
}
|
||||
}
|
||||
.scaleDownOut {
|
||||
animation-name: fadeOut, scaleDownOut;
|
||||
animation-duration: var(--animation-duration);
|
||||
animation-timing-function: cubic-bezier(0.1, 0.5, 1);
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
:root {
|
||||
--callout-background-color:
|
||||
255,
|
||||
255,
|
||||
255;
|
||||
}
|
||||
.callout-color1 {
|
||||
--callout-color:
|
||||
108,
|
||||
192,
|
||||
245;
|
||||
}
|
||||
.callout-color2 {
|
||||
--callout-color:
|
||||
109,
|
||||
197,
|
||||
217;
|
||||
}
|
||||
.callout-color3 {
|
||||
--callout-color:
|
||||
113,
|
||||
208,
|
||||
136;
|
||||
}
|
||||
.callout-color4 {
|
||||
--callout-color:
|
||||
160,
|
||||
224,
|
||||
107;
|
||||
}
|
||||
.callout-color5 {
|
||||
--callout-color:
|
||||
238,
|
||||
177,
|
||||
91;
|
||||
}
|
||||
.callout-color6 {
|
||||
--callout-color:
|
||||
234,
|
||||
136,
|
||||
133;
|
||||
}
|
||||
.callout-color7 {
|
||||
--callout-color:
|
||||
230,
|
||||
98,
|
||||
121;
|
||||
}
|
||||
.callout-color8 {
|
||||
--callout-color:
|
||||
152,
|
||||
126,
|
||||
243;
|
||||
}
|
||||
.callout-color9 {
|
||||
--callout-color:
|
||||
182,
|
||||
182,
|
||||
182;
|
||||
}
|
||||
.callout-color-default {
|
||||
--callout-color:
|
||||
129,
|
||||
167,
|
||||
244;
|
||||
}
|
||||
.has-light-background {
|
||||
--callout-background-color:
|
||||
160,
|
||||
160,
|
||||
160;
|
||||
}
|
||||
.callout {
|
||||
border-left: 4px solid rgb(var(--callout-color));
|
||||
border-radius: 2px;
|
||||
background-color: rgba(var(--callout-background-color), 0.2);
|
||||
margin: 1em 0;
|
||||
}
|
||||
.callout-title {
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
background-color: rgba(var(--callout-color), 0.3);
|
||||
}
|
||||
.callout-icon {
|
||||
flex: 0 0 auto;
|
||||
display: flex;
|
||||
align-self: center;
|
||||
color: rgb(var(--callout-color));
|
||||
}
|
||||
.callout-title-inner {
|
||||
flex: 1 1 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
.callout-content {
|
||||
overflow-x: auto;
|
||||
padding: 5px 15px;
|
||||
}
|
||||
.stretch-column > * {
|
||||
flex: 1;
|
||||
height: 1%;
|
||||
width: 100%;
|
||||
}
|
||||
.stretch-row > * {
|
||||
flex: 1;
|
||||
height: 100%;
|
||||
width: 1%;
|
||||
}
|
||||
.stretch-column > * > p > img,
|
||||
.stretch-row > * > p > img,
|
||||
.stretch-column > * > p > video,
|
||||
.stretch-row > * > p > video,
|
||||
.stretch-column > * > p > iframe,
|
||||
.stretch-row > * > p > iframe {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
max-width: 100% !important;
|
||||
max-height: 100% !important;
|
||||
object-fit: cover;
|
||||
}
|
||||
.stretch-column > * > .image-paragraph {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.arrowList ul {
|
||||
margin: 0;
|
||||
}
|
||||
.arrowList li {
|
||||
display: grid;
|
||||
grid-template-columns: 1em auto;
|
||||
align-items: center;
|
||||
padding: 0;
|
||||
}
|
||||
.arrowList li:first-child {
|
||||
padding-top: 0.5em;
|
||||
}
|
||||
.arrowList li:last-child {
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
.arrowList li:before {
|
||||
content: "\25b6";
|
||||
font-size: 0.75em;
|
||||
color: var(--r-main-color);
|
||||
top: 0.1em;
|
||||
position: relative;
|
||||
}
|
||||
.wideTable,
|
||||
.wideTable > table {
|
||||
width: 100%;
|
||||
}
|
||||
.noBorder td,
|
||||
.noBorder th {
|
||||
border: none !important;
|
||||
}
|
||||
:root {
|
||||
--dbg-size: 0;
|
||||
}
|
||||
.dbg,
|
||||
.dbg * {
|
||||
--dbg-size: 1px;
|
||||
border: 1px solid red;
|
||||
}
|
||||
.reset-margin {
|
||||
--r-block-margin: 0;
|
||||
--r-heading-margin: 0;
|
||||
}
|
||||
.flex-even > * {
|
||||
flex: 1;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#1e1e1e;color:#dcdcdc}.hljs-keyword,.hljs-literal,.hljs-name,.hljs-symbol{color:#569cd6}.hljs-link{color:#569cd6;text-decoration:underline}.hljs-built_in,.hljs-type{color:#4ec9b0}.hljs-class,.hljs-number{color:#b8d7a3}.hljs-meta .hljs-string,.hljs-string{color:#d69d85}.hljs-regexp,.hljs-template-tag{color:#9a5334}.hljs-formula,.hljs-function,.hljs-params,.hljs-subst,.hljs-title{color:#dcdcdc}.hljs-comment,.hljs-quote{color:#57a64a;font-style:italic}.hljs-doctag{color:#608b4e}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-tag{color:#9b9b9b}.hljs-template-variable,.hljs-variable{color:#bd63c5}.hljs-attr,.hljs-attribute{color:#9cdcfe}.hljs-section{color:gold}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-bullet,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-selector-tag{color:#d7ba7d}.hljs-addition{background-color:#144212;display:inline-block;width:100%}.hljs-deletion{background-color:#600;display:inline-block;width:100%}
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"port": "3000",
|
||||
"autoReload": true,
|
||||
"exportDirectory": "/export",
|
||||
"enableChalkboard": false,
|
||||
"enableOverview": false,
|
||||
"enableMenu": false,
|
||||
"enablePointer": false,
|
||||
"enableTimeBar": false,
|
||||
"theme": "black",
|
||||
"highlightTheme": "zenburn",
|
||||
"transition": "slide",
|
||||
"transitionSpeed": "default",
|
||||
"controls": true,
|
||||
"progress": true,
|
||||
"slideNumber": false,
|
||||
"showGrid": false,
|
||||
"autoComplete": "inPreview",
|
||||
"paneMode": "split",
|
||||
"motm": "2024-05-07T13:01:15.627Z"
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v4.0 | 20180602
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
main, menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, main, menu, nav, section {
|
||||
display: block;
|
||||
}
|
|
@ -0,0 +1,347 @@
|
|||
@import "./fonts/league-gothic/league-gothic.css";
|
||||
@import "https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic";
|
||||
.reveal .has-dark-background,
|
||||
.reveal .has-dark-background h1,
|
||||
.reveal .has-dark-background h2,
|
||||
.reveal .has-dark-background h3,
|
||||
.reveal .has-dark-background h4,
|
||||
.reveal .has-dark-background h5,
|
||||
.reveal .has-dark-background h6 {
|
||||
color: #fff;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #f7f3de;
|
||||
--r-main-font: Lato, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #333;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
League Gothic,
|
||||
Impact,
|
||||
sans-serif;
|
||||
--r-heading-color: #333;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow:
|
||||
0 1px 0 #ccc,
|
||||
0 2px 0 #c9c9c9,
|
||||
0 3px 0 #bbb,
|
||||
0 4px 0 #b9b9b9,
|
||||
0 5px 0 #aaa,
|
||||
0 6px 1px rgba(0, 0, 0, 0.1),
|
||||
0 0 5px rgba(0, 0, 0, 0.1),
|
||||
0 1px 3px rgba(0, 0, 0, 0.3),
|
||||
0 3px 5px rgba(0, 0, 0, 0.2),
|
||||
0 5px 10px rgba(0, 0, 0, 0.25),
|
||||
0 20px 20px rgba(0, 0, 0, 0.15);
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #8b743d;
|
||||
--r-link-color-dark: #564826;
|
||||
--r-link-color-hover: #c0a86e;
|
||||
--r-selection-background-color: rgba(79, 64, 28, 0.99);
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: rgb(247, 242, 211);
|
||||
background: -moz-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%);
|
||||
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgb(255, 255, 255)), color-stop(100%, rgb(247, 242, 211)));
|
||||
background: -webkit-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%);
|
||||
background: -o-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%);
|
||||
background: -ms-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%);
|
||||
background: radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%);
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,332 @@
|
|||
@import "./fonts/source-sans-pro/source-sans-pro.css";
|
||||
.reveal .has-light-background,
|
||||
.reveal .has-light-background h1,
|
||||
.reveal .has-light-background h2,
|
||||
.reveal .has-light-background h3,
|
||||
.reveal .has-light-background h4,
|
||||
.reveal .has-light-background h5,
|
||||
.reveal .has-light-background h6 {
|
||||
color: #222;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #191919;
|
||||
--r-main-font:
|
||||
Source Sans Pro,
|
||||
Helvetica,
|
||||
sans-serif;
|
||||
--r-main-font-size: 42px;
|
||||
--r-main-color: #fff;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
Source Sans Pro,
|
||||
Helvetica,
|
||||
sans-serif;
|
||||
--r-heading-color: #fff;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: 600;
|
||||
--r-heading2-font-weight: 600;
|
||||
--r-heading3-font-weight: 600;
|
||||
--r-heading4-font-weight: 600;
|
||||
--r-heading5-font-weight: 600;
|
||||
--r-heading6-font-weight: 600;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 2.5em;
|
||||
--r-heading2-size: 1.6em;
|
||||
--r-heading3-size: 1.3em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #42affa;
|
||||
--r-link-color-dark: #068de9;
|
||||
--r-link-color-hover: #8dcffc;
|
||||
--r-selection-background-color: #bee4fd;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #191919;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,364 @@
|
|||
@import "https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic";
|
||||
.reveal .has-light-background,
|
||||
.reveal .has-light-background h1,
|
||||
.reveal .has-light-background h2,
|
||||
.reveal .has-light-background h3,
|
||||
.reveal .has-light-background h4,
|
||||
.reveal .has-light-background h5,
|
||||
.reveal .has-light-background h6 {
|
||||
color: #222;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #222;
|
||||
--r-main-font: Ubuntu, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #eee;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font: Ubuntu, sans-serif;
|
||||
--r-heading-color: #eee;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: 2px 2px 2px #222;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow:
|
||||
0 1px 0 #ccc,
|
||||
0 2px 0 #c9c9c9,
|
||||
0 3px 0 #bbb,
|
||||
0 4px 0 #b9b9b9,
|
||||
0 5px 0 #aaa,
|
||||
0 6px 1px rgba(0, 0, 0, 0.1),
|
||||
0 0 5px rgba(0, 0, 0, 0.1),
|
||||
0 1px 3px rgba(0, 0, 0, 0.3),
|
||||
0 3px 5px rgba(0, 0, 0, 0.2),
|
||||
0 5px 10px rgba(0, 0, 0, 0.25),
|
||||
0 20px 20px rgba(0, 0, 0, 0.15);
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #a23;
|
||||
--r-link-color-dark: #6a1520;
|
||||
--r-link-color-hover: #dd5566;
|
||||
--r-selection-background-color: #a23;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #222;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
||||
.reveal p {
|
||||
font-weight: 300;
|
||||
text-shadow: 1px 1px #222;
|
||||
}
|
||||
section.has-light-background p,
|
||||
section.has-light-background h1,
|
||||
section.has-light-background h2,
|
||||
section.has-light-background h3,
|
||||
section.has-light-background h4 {
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
font-weight: 700;
|
||||
}
|
||||
.reveal p code {
|
||||
background-color: #23241f;
|
||||
display: inline-block;
|
||||
border-radius: 7px;
|
||||
}
|
||||
.reveal small code {
|
||||
vertical-align: baseline;
|
||||
}
|
|
@ -0,0 +1,362 @@
|
|||
@charset "UTF-8";
|
||||
.reveal .has-light-background,
|
||||
.reveal .has-light-background h1,
|
||||
.reveal .has-light-background h2,
|
||||
.reveal .has-light-background h3,
|
||||
.reveal .has-light-background h4,
|
||||
.reveal .has-light-background h5,
|
||||
.reveal .has-light-background h6 {
|
||||
color: #595C5D;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #E6E7E7;
|
||||
--r-main-font:
|
||||
Calibri,
|
||||
Helvetica,
|
||||
sans-serif;
|
||||
--r-main-font-size: 16px;
|
||||
--r-main-color: #595C5D;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
Calibri,
|
||||
Helvetica,
|
||||
sans-serif;
|
||||
--r-heading-color: #595C5D;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: none;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: 600;
|
||||
--r-heading2-font-weight: 600;
|
||||
--r-heading3-font-weight: 600;
|
||||
--r-heading4-font-weight: 600;
|
||||
--r-heading5-font-weight: 400;
|
||||
--r-heading6-font-weight: 400;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.75em;
|
||||
--r-heading2-size: 1.875em;
|
||||
--r-heading3-size: 1.5em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.75em;
|
||||
--r-heading6-size: 0.625em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #42affa;
|
||||
--r-link-color-dark: #068de9;
|
||||
--r-link-color-hover: #8dcffc;
|
||||
--r-selection-background-color: #bee4fd;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #E6E7E7;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
border-left: 1px solid;
|
||||
}
|
||||
.reveal table th:first-child,
|
||||
.reveal table td:first-child {
|
||||
border-left: 0;
|
||||
}
|
||||
ul,
|
||||
ol {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
ul > li,
|
||||
ol > li {
|
||||
padding-bottom: 0.625em;
|
||||
}
|
||||
li > ul,
|
||||
li > ol {
|
||||
padding-top: 0.625em;
|
||||
}
|
||||
.compressedList > ol > li,
|
||||
.compressedList > ul > li:not(:last-child),
|
||||
.compressedList * > ul > li:not(:last-child) {
|
||||
padding: 0;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
SIL Open Font License
|
||||
|
||||
Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
|
||||
|
||||
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.
|
|
@ -0,0 +1,39 @@
|
|||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
src: url('./source-sans-pro-regular.eot');
|
||||
src: url('./source-sans-pro-regular.eot?#iefix') format('embedded-opentype'),
|
||||
url('./source-sans-pro-regular.woff') format('woff'),
|
||||
url('./source-sans-pro-regular.ttf') format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
src: url('./source-sans-pro-italic.eot');
|
||||
src: url('./source-sans-pro-italic.eot?#iefix') format('embedded-opentype'),
|
||||
url('./source-sans-pro-italic.woff') format('woff'),
|
||||
url('./source-sans-pro-italic.ttf') format('truetype');
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
src: url('./source-sans-pro-semibold.eot');
|
||||
src: url('./source-sans-pro-semibold.eot?#iefix') format('embedded-opentype'),
|
||||
url('./source-sans-pro-semibold.woff') format('woff'),
|
||||
url('./source-sans-pro-semibold.ttf') format('truetype');
|
||||
font-weight: 600;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Source Sans Pro';
|
||||
src: url('./source-sans-pro-semibolditalic.eot');
|
||||
src: url('./source-sans-pro-semibolditalic.eot?#iefix') format('embedded-opentype'),
|
||||
url('./source-sans-pro-semibolditalic.woff') format('woff'),
|
||||
url('./source-sans-pro-semibolditalic.ttf') format('truetype');
|
||||
font-weight: 600;
|
||||
font-style: italic;
|
||||
}
|
|
@ -0,0 +1,347 @@
|
|||
@import "./fonts/league-gothic/league-gothic.css";
|
||||
@import "https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic";
|
||||
.reveal .has-light-background,
|
||||
.reveal .has-light-background h1,
|
||||
.reveal .has-light-background h2,
|
||||
.reveal .has-light-background h3,
|
||||
.reveal .has-light-background h4,
|
||||
.reveal .has-light-background h5,
|
||||
.reveal .has-light-background h6 {
|
||||
color: #222;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #2b2b2b;
|
||||
--r-main-font: Lato, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #eee;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
League Gothic,
|
||||
Impact,
|
||||
sans-serif;
|
||||
--r-heading-color: #eee;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2);
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow:
|
||||
0 1px 0 #ccc,
|
||||
0 2px 0 #c9c9c9,
|
||||
0 3px 0 #bbb,
|
||||
0 4px 0 #b9b9b9,
|
||||
0 5px 0 #aaa,
|
||||
0 6px 1px rgba(0, 0, 0, 0.1),
|
||||
0 0 5px rgba(0, 0, 0, 0.1),
|
||||
0 1px 3px rgba(0, 0, 0, 0.3),
|
||||
0 3px 5px rgba(0, 0, 0, 0.2),
|
||||
0 5px 10px rgba(0, 0, 0, 0.25),
|
||||
0 20px 20px rgba(0, 0, 0, 0.15);
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #13DAEC;
|
||||
--r-link-color-dark: #0d99a5;
|
||||
--r-link-color-hover: #71e9f4;
|
||||
--r-selection-background-color: #FF5E99;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: rgb(28, 30, 32);
|
||||
background: -moz-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%);
|
||||
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgb(85, 90, 95)), color-stop(100%, rgb(28, 30, 32)));
|
||||
background: -webkit-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%);
|
||||
background: -o-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%);
|
||||
background: -ms-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%);
|
||||
background: radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%);
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,334 @@
|
|||
@import "./fonts/league-gothic/league-gothic.css";
|
||||
@import "https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic";
|
||||
html * {
|
||||
color-profile: sRGB;
|
||||
rendering-intent: auto;
|
||||
}
|
||||
.reveal .has-light-background,
|
||||
.reveal .has-light-background h1,
|
||||
.reveal .has-light-background h2,
|
||||
.reveal .has-light-background h3,
|
||||
.reveal .has-light-background h4,
|
||||
.reveal .has-light-background h5,
|
||||
.reveal .has-light-background h6 {
|
||||
color: #222;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #002b36;
|
||||
--r-main-font: Lato, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #93a1a1;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
League Gothic,
|
||||
Impact,
|
||||
sans-serif;
|
||||
--r-heading-color: #eee8d5;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #268bd2;
|
||||
--r-link-color-dark: #1a6091;
|
||||
--r-link-color-hover: #78b9e6;
|
||||
--r-selection-background-color: #d33682;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #002b36;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,330 @@
|
|||
@import "https://fonts.googleapis.com/css?family=Montserrat:700";
|
||||
@import "https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic";
|
||||
.reveal .has-light-background,
|
||||
.reveal .has-light-background h1,
|
||||
.reveal .has-light-background h2,
|
||||
.reveal .has-light-background h3,
|
||||
.reveal .has-light-background h4,
|
||||
.reveal .has-light-background h5,
|
||||
.reveal .has-light-background h6 {
|
||||
color: #222;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #111;
|
||||
--r-main-font: Open Sans, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #eee;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
Montserrat,
|
||||
Impact,
|
||||
sans-serif;
|
||||
--r-heading-color: #eee;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: -0.03em;
|
||||
--r-heading-text-transform: none;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #e7ad52;
|
||||
--r-link-color-dark: #d08a1d;
|
||||
--r-link-color-hover: #f3d7ac;
|
||||
--r-selection-background-color: #e7ad52;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #111;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,338 @@
|
|||
.reveal a {
|
||||
line-height: 1.3em;
|
||||
}
|
||||
.reveal .has-dark-background,
|
||||
.reveal .has-dark-background h1,
|
||||
.reveal .has-dark-background h2,
|
||||
.reveal .has-dark-background h3,
|
||||
.reveal .has-dark-background h4,
|
||||
.reveal .has-dark-background h5,
|
||||
.reveal .has-dark-background h6 {
|
||||
color: #fff;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #F0F1EB;
|
||||
--r-main-font:
|
||||
Palatino Linotype,
|
||||
Book Antiqua,
|
||||
Palatino,
|
||||
FreeSerif,
|
||||
serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #000;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
Palatino Linotype,
|
||||
Book Antiqua,
|
||||
Palatino,
|
||||
FreeSerif,
|
||||
serif;
|
||||
--r-heading-color: #383D3D;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: none;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #51483D;
|
||||
--r-link-color-dark: #25211c;
|
||||
--r-link-color-hover: #8b7c69;
|
||||
--r-selection-background-color: #26351C;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #F0F1EB;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,330 @@
|
|||
@import "https://fonts.googleapis.com/css?family=News+Cycle:400,700";
|
||||
@import "https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic";
|
||||
.reveal .has-dark-background,
|
||||
.reveal .has-dark-background h1,
|
||||
.reveal .has-dark-background h2,
|
||||
.reveal .has-dark-background h3,
|
||||
.reveal .has-dark-background h4,
|
||||
.reveal .has-dark-background h5,
|
||||
.reveal .has-dark-background h6 {
|
||||
color: #fff;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #fff;
|
||||
--r-main-font: Lato, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #000;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
News Cycle,
|
||||
Impact,
|
||||
sans-serif;
|
||||
--r-heading-color: #000;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: none;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #00008B;
|
||||
--r-link-color-dark: #00003f;
|
||||
--r-link-color-hover: #0000f1;
|
||||
--r-selection-background-color: rgba(0, 0, 0, 0.99);
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #fff;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,336 @@
|
|||
@import "https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic";
|
||||
@import "https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700";
|
||||
.reveal a {
|
||||
line-height: 1.3em;
|
||||
}
|
||||
.reveal .has-dark-background,
|
||||
.reveal .has-dark-background h1,
|
||||
.reveal .has-dark-background h2,
|
||||
.reveal .has-dark-background h3,
|
||||
.reveal .has-dark-background h4,
|
||||
.reveal .has-dark-background h5,
|
||||
.reveal .has-dark-background h6 {
|
||||
color: #fff;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #f7fbfc;
|
||||
--r-main-font: Open Sans, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #333;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font: Quicksand, sans-serif;
|
||||
--r-heading-color: #333;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: -0.08em;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #3b759e;
|
||||
--r-link-color-dark: #264c66;
|
||||
--r-link-color-hover: #74a7cb;
|
||||
--r-selection-background-color: #134674;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #add9e4;
|
||||
background: -moz-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
|
||||
background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #add9e4));
|
||||
background: -webkit-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
|
||||
background: -o-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
|
||||
background: -ms-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
|
||||
background: radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%);
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,325 @@
|
|||
@import "./fonts/league-gothic/league-gothic.css";
|
||||
@import "https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic";
|
||||
html * {
|
||||
color-profile: sRGB;
|
||||
rendering-intent: auto;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #fdf6e3;
|
||||
--r-main-font: Lato, sans-serif;
|
||||
--r-main-font-size: 40px;
|
||||
--r-main-color: #657b83;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
League Gothic,
|
||||
Impact,
|
||||
sans-serif;
|
||||
--r-heading-color: #586e75;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: normal;
|
||||
--r-heading2-font-weight: normal;
|
||||
--r-heading3-font-weight: normal;
|
||||
--r-heading4-font-weight: normal;
|
||||
--r-heading5-font-weight: normal;
|
||||
--r-heading6-font-weight: normal;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 3.77em;
|
||||
--r-heading2-size: 2.11em;
|
||||
--r-heading3-size: 1.55em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #268bd2;
|
||||
--r-link-color-dark: #1a6091;
|
||||
--r-link-color-hover: #78b9e6;
|
||||
--r-selection-background-color: #d33682;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #fdf6e3;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,332 @@
|
|||
@import "./fonts/source-sans-pro/source-sans-pro.css";
|
||||
.reveal .has-dark-background,
|
||||
.reveal .has-dark-background h1,
|
||||
.reveal .has-dark-background h2,
|
||||
.reveal .has-dark-background h3,
|
||||
.reveal .has-dark-background h4,
|
||||
.reveal .has-dark-background h5,
|
||||
.reveal .has-dark-background h6 {
|
||||
color: #fff;
|
||||
}
|
||||
:root {
|
||||
--r-background-color: #fff;
|
||||
--r-main-font:
|
||||
Source Sans Pro,
|
||||
Helvetica,
|
||||
sans-serif;
|
||||
--r-main-font-size: 42px;
|
||||
--r-main-color: #222;
|
||||
--r-block-margin: 20px;
|
||||
--r-heading-margin: 0 0 20px 0;
|
||||
--r-heading-font:
|
||||
Source Sans Pro,
|
||||
Helvetica,
|
||||
sans-serif;
|
||||
--r-heading-color: #222;
|
||||
--r-heading-line-height: 1.2;
|
||||
--r-heading-letter-spacing: normal;
|
||||
--r-heading-text-transform: uppercase;
|
||||
--r-heading-text-shadow: none;
|
||||
--r-heading1-font-weight: 600;
|
||||
--r-heading2-font-weight: 600;
|
||||
--r-heading3-font-weight: 600;
|
||||
--r-heading4-font-weight: 600;
|
||||
--r-heading5-font-weight: 600;
|
||||
--r-heading6-font-weight: 600;
|
||||
--r-heading1-text-shadow: none;
|
||||
--r-heading1-size: 2.5em;
|
||||
--r-heading2-size: 1.6em;
|
||||
--r-heading3-size: 1.3em;
|
||||
--r-heading4-size: 1em;
|
||||
--r-heading5-size: 0.8em;
|
||||
--r-heading6-size: 0.6em;
|
||||
--r-code-font: monospace;
|
||||
--r-link-color: #2a76dd;
|
||||
--r-link-color-dark: #1a53a1;
|
||||
--r-link-color-hover: #6ca0e8;
|
||||
--r-selection-background-color: #98bdef;
|
||||
--r-selection-color: #fff;
|
||||
}
|
||||
.reveal-viewport {
|
||||
background: #fff;
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
.reveal {
|
||||
font-family: var(--r-main-font);
|
||||
font-size: var(--r-main-font-size);
|
||||
font-weight: normal;
|
||||
color: var(--r-main-color);
|
||||
}
|
||||
.reveal ::selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal ::-moz-selection {
|
||||
color: var(--r-selection-color);
|
||||
background: var(--r-selection-background-color);
|
||||
text-shadow: none;
|
||||
}
|
||||
.reveal .slides section,
|
||||
.reveal .slides section > section {
|
||||
line-height: 1.3;
|
||||
font-weight: inherit;
|
||||
}
|
||||
.reveal h1,
|
||||
.reveal h2,
|
||||
.reveal h3,
|
||||
.reveal h4,
|
||||
.reveal h5,
|
||||
.reveal h6 {
|
||||
margin: var(--r-heading-margin);
|
||||
color: var(--r-heading-color);
|
||||
font-family: var(--r-heading-font);
|
||||
line-height: var(--r-heading-line-height);
|
||||
letter-spacing: var(--r-heading-letter-spacing);
|
||||
text-transform: var(--r-heading-text-transform);
|
||||
text-shadow: var(--r-heading-text-shadow);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
.reveal h1 {
|
||||
font-size: var(--r-heading1-size);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-size: var(--r-heading2-size);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-size: var(--r-heading3-size);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-size: var(--r-heading4-size);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-size: var(--r-heading5-size);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-size: var(--r-heading6-size);
|
||||
}
|
||||
.reveal h1 {
|
||||
font-weight: var(--r-heading1-font-weight);
|
||||
}
|
||||
.reveal h2 {
|
||||
font-weight: var(--r-heading2-font-weight);
|
||||
}
|
||||
.reveal h3 {
|
||||
font-weight: var(--r-heading3-font-weight);
|
||||
}
|
||||
.reveal h4 {
|
||||
font-weight: var(--r-heading4-font-weight);
|
||||
}
|
||||
.reveal h5 {
|
||||
font-weight: var(--r-heading5-font-weight);
|
||||
}
|
||||
.reveal h6 {
|
||||
font-weight: var(--r-heading6-font-weight);
|
||||
}
|
||||
.reveal h1 {
|
||||
text-shadow: var(--r-heading1-text-shadow);
|
||||
}
|
||||
.reveal .slides > section.drop {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 100%;
|
||||
}
|
||||
.reveal p {
|
||||
margin: var(--r-block-margin) 0;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.reveal h1:last-child,
|
||||
.reveal h2:last-child,
|
||||
.reveal h3:last-child,
|
||||
.reveal h4:last-child,
|
||||
.reveal h5:last-child,
|
||||
.reveal h6:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.reveal img,
|
||||
.reveal video,
|
||||
.reveal iframe {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
.reveal strong,
|
||||
.reveal b {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal em {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal ol,
|
||||
.reveal dl,
|
||||
.reveal ul {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 0 0 0 1em;
|
||||
}
|
||||
.reveal ol {
|
||||
list-style-type: decimal;
|
||||
}
|
||||
.reveal ul {
|
||||
list-style-type: disc;
|
||||
}
|
||||
.reveal ul ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
.reveal ul ul ul {
|
||||
list-style-type: circle;
|
||||
}
|
||||
.reveal ul ul,
|
||||
.reveal ul ol,
|
||||
.reveal ol ol,
|
||||
.reveal ol ul {
|
||||
display: block;
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal dd {
|
||||
margin-left: 40px;
|
||||
}
|
||||
.reveal blockquote {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 70%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
padding: 5px;
|
||||
font-style: italic;
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
.reveal blockquote p:first-child,
|
||||
.reveal blockquote p:last-child {
|
||||
display: inline-block;
|
||||
}
|
||||
.reveal q {
|
||||
font-style: italic;
|
||||
}
|
||||
.reveal pre {
|
||||
display: block;
|
||||
position: relative;
|
||||
width: 90%;
|
||||
margin: var(--r-block-margin) auto;
|
||||
text-align: left;
|
||||
font-size: 0.55em;
|
||||
font-family: var(--r-code-font);
|
||||
line-height: 1.2em;
|
||||
word-wrap: break-word;
|
||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal code {
|
||||
font-family: var(--r-code-font);
|
||||
text-transform: none;
|
||||
tab-size: 2;
|
||||
}
|
||||
.reveal pre code {
|
||||
display: block;
|
||||
padding: 5px;
|
||||
overflow: auto;
|
||||
max-height: 400px;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.reveal .code-wrapper {
|
||||
white-space: normal;
|
||||
}
|
||||
.reveal .code-wrapper code {
|
||||
white-space: pre;
|
||||
}
|
||||
.reveal table {
|
||||
margin: auto;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
.reveal table th {
|
||||
font-weight: bold;
|
||||
}
|
||||
.reveal table th,
|
||||
.reveal table td {
|
||||
text-align: left;
|
||||
padding: 0.2em 0.5em;
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.reveal table th[align=center],
|
||||
.reveal table td[align=center] {
|
||||
text-align: center;
|
||||
}
|
||||
.reveal table th[align=right],
|
||||
.reveal table td[align=right] {
|
||||
text-align: right;
|
||||
}
|
||||
.reveal table tbody tr:last-child th,
|
||||
.reveal table tbody tr:last-child td {
|
||||
border-bottom: none;
|
||||
}
|
||||
.reveal sup {
|
||||
vertical-align: super;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal sub {
|
||||
vertical-align: sub;
|
||||
font-size: smaller;
|
||||
}
|
||||
.reveal small {
|
||||
display: inline-block;
|
||||
font-size: 0.6em;
|
||||
line-height: 1.2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal small * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.reveal img {
|
||||
margin: var(--r-block-margin) 0;
|
||||
}
|
||||
.reveal a {
|
||||
color: var(--r-link-color);
|
||||
text-decoration: none;
|
||||
transition: color 0.15s ease;
|
||||
}
|
||||
.reveal a:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
text-shadow: none;
|
||||
border: none;
|
||||
}
|
||||
.reveal .roll span:after {
|
||||
color: #fff;
|
||||
background: var(--r-link-color-dark);
|
||||
}
|
||||
.reveal .r-frame {
|
||||
border: 4px solid var(--r-main-color);
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.reveal a .r-frame {
|
||||
transition: all 0.15s linear;
|
||||
}
|
||||
.reveal a:hover .r-frame {
|
||||
border-color: var(--r-link-color);
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
|
||||
}
|
||||
.reveal .controls {
|
||||
color: var(--r-link-color) !important;
|
||||
}
|
||||
.reveal .progress {
|
||||
background: rgba(0, 0, 0, 0.2);
|
||||
color: var(--r-link-color);
|
||||
}
|
||||
@media print {
|
||||
.backgrounds {
|
||||
background-color: var(--r-background-color);
|
||||
}
|
||||
}
|
||||
.has-dark-background canvas[data-chart] {
|
||||
background-color: white;
|
||||
}
|
||||
.has-light-background canvas[data-chart] {
|
||||
background-color: unset;
|
||||
}
|
||||
canvas[data-chart] {
|
||||
padding: 0.5em;
|
||||
}
|
||||
.reveal .hljs {
|
||||
min-height: 50%;
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"version": "1.20.0"
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"id": "obsidian-advanced-slides",
|
||||
"name": "Advanced Slides",
|
||||
"version": "1.20.0",
|
||||
"minAppVersion": "0.12.0",
|
||||
"description": "Create markdown-based presentations in Obsidian",
|
||||
"author": "Matthäus Szturc",
|
||||
"authorUrl": "https://github.com/MSzturc",
|
||||
"isDesktopOnly": true
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
# Chalkboard
|
||||
|
||||
With this plugin you can add a chalkboard to reveal.js. The plugin provides two possibilities to include handwritten notes to your presentation:
|
||||
|
||||
- you can make notes directly on the slides, e.g. to comment on certain aspects,
|
||||
- you can open a chalkboard or whiteboard on which you can make notes.
|
||||
|
||||
The main use case in mind when implementing the plugin is classroom usage in which you may want to explain some course content and quickly need to make some notes.
|
||||
|
||||
The plugin records all drawings made so that they can be play backed using the `autoSlide` feature or the `audio-slideshow` plugin.
|
||||
|
||||
[Check out the live demo](https://rajgoel.github.io/reveal.js-demos/chalkboard-demo.html)
|
||||
|
||||
The chalkboard effect is based on [Chalkboard](https://github.com/mmoustafa/Chalkboard) by Mohamed Moustafa.
|
||||
|
||||
## Installation
|
||||
|
||||
Copy the file `plugin.js` and the `img` directory into the plugin folder of your reveal.js presentation, i.e. `plugin/chalkboard` and load the plugin as shown below.
|
||||
|
||||
```html
|
||||
<script src="plugin/chalkboard/plugin.js"></script>
|
||||
<script src="plugin/chalkboard/customcontrols.js"></script>
|
||||
|
||||
<script>
|
||||
Reveal.initialize({
|
||||
// ...
|
||||
plugins: [ RevealChalkboard, RevealCustomControls ],
|
||||
// ...
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
The following stylesheet
|
||||
```html
|
||||
<link rel="stylesheet" href="plugin/chalkboard/style.css">
|
||||
<link rel="stylesheet" href="plugin/customcontrols/style.css">
|
||||
```
|
||||
has to be included to the `head` section of you HTML-file.
|
||||
|
||||
|
||||
In order to include buttons for opening and closing the notes canvas or the chalkboard you should make sure that `font-awesome` is available. The easiest way is to include
|
||||
```
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||
```
|
||||
to the ```head``` section of you HTML-file.
|
||||
|
||||
## Usage
|
||||
|
||||
### Mouse or touch
|
||||
- Click on the pen symbols at the bottom left to toggle the notes canvas or chalkboard
|
||||
- Click on the color picker at the left to change the color (the color picker is only visible if the notes canvas or chalkboard is active)
|
||||
- Click on the up/down arrows on the left to the switch among multiple chalkboardd (the up/down arrows are only available for the chlakboard)
|
||||
- Click the left mouse button and drag to write on notes canvas or chalkboard
|
||||
- Click the right mouse button and drag to wipe away previous drawings
|
||||
- Touch and move to write on notes canvas or chalkboard
|
||||
- Touch and hold for half a second, then move to wipe away previous drawings
|
||||
|
||||
### Keyboard
|
||||
- Press the 'BACKSPACE' key to delete all chalkboard drawings
|
||||
- Press the 'DEL' key to clear the notes canvas or chalkboard
|
||||
- Press the 'c' key to toggle the notes canvas
|
||||
- Press the 'b' key to toggle the chalkboard
|
||||
- Press the 'd' key to download drawings
|
||||
- Press the 'x' key to cycle colors forward
|
||||
- Press the 'y' key to cycle colors backward
|
||||
|
||||
## Playback
|
||||
|
||||
If the `autoSlide` feature is set or if the `audio-slideshow` plugin is used, pre-recorded chalkboard drawings can be played. The slideshow plays back the user interaction with the chalkboard in the same way as it was conducted when recording the data.
|
||||
|
||||
## Multiplexing
|
||||
|
||||
The plugin supports multiplexing via the [`multiplex` plugin](https://github.com/reveal/multiplex) or the [`seminar` plugin](https://github.com/rajgoel/reveal.js-plugins/tree/master/seminar).
|
||||
|
||||
## PDF-Export
|
||||
|
||||
If the slideshow is opened in [print mode](https://revealjs.com/pdf-export/), the chalkboard drawings in the session storage (see `storage` option - print version must be opened in the same tab or window as the original slideshow) or provided in a file (see `src` option) are included in the PDF-file. Each drawing on the chalkboard is added after the slide that was shown when opening the chalkboard. Drawings on the notes canvas are not included in the PDF-file.
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
The plugin has several configuration options:
|
||||
|
||||
- ```boardmarkerWidth```: an integer, the drawing width of the boardmarker; larger values draw thicker lines.
|
||||
- ```chalkWidth```: an integer, the drawing width of the chalk; larger values draw thicker lines.
|
||||
- ```chalkEffect```: a float in the range ```[0.0, 1.0]```, the intesity of the chalk effect on the chalk board. Full effect (default) ```1.0```, no effect ```0.0```.
|
||||
- ```storage```: Optional variable name for session storage of drawings.
|
||||
- ```src```: Optional filename for pre-recorded drawings.
|
||||
- ```readOnly```: Configuation option allowing to prevent changes to existing drawings. If set to ```true``` no changes can be made, if set to false ```false``` changes can be made, if unset or set to ```undefined``` no changes to the drawings can be made after returning to a slide or fragment for which drawings had been recorded before. In any case the recorded drawings for a slide or fragment can be cleared by pressing the 'DEL' key (i.e. by using the ```RevealChalkboard.clear()``` function).
|
||||
- ```transition```: Gives the duration (in milliseconds) of the transition for a slide change, so that the notes canvas is drawn after the transition is completed.
|
||||
- ```theme```: Can be set to either ```"chalkboard"``` or ```"whiteboard"```.
|
||||
|
||||
The following configuration options allow to change the appearance of the notes canvas and the chalkboard. All of these options require two values, the first gives the value for the notes canvas, the second for the chalkboard.
|
||||
|
||||
- ```background```: The first value expects a (semi-)transparent color which is used to provide visual feedback that the notes canvas is enabled, the second value expects a filename to a background image for the chalkboard.
|
||||
- ```grid```: By default whiteboard and chalkboard themes include a grid pattern on the background. This pattern can be modified by setting the color, the distance between lines, and the line width, e.g. ```{ color: 'rgb(127,127,255,0.1)', distance: 40, width: 2}```. Alternatively, the grid can be removed by setting the value to ```false```.
|
||||
- ```eraser```: An image path and radius for the eraser.
|
||||
- ```boardmarkers```: A list of boardmarkers with given color and cursor.
|
||||
- ```chalks```: A list of chalks with given color and cursor.
|
||||
- ```rememberColor```: Whether to remember the last selected color for the slide canvas or the board.
|
||||
|
||||
All of the configurations are optional and the default values shown below are used if the options are not provided.
|
||||
|
||||
```javascript
|
||||
Reveal.initialize({
|
||||
// ...
|
||||
chalkboard: {
|
||||
boardmarkerWidth: 3,
|
||||
chalkWidth: 7,
|
||||
chalkEffect: 1.0,
|
||||
storage: null,
|
||||
src: null,
|
||||
readOnly: undefined,
|
||||
transition: 800,
|
||||
theme: "chalkboard",
|
||||
background: [ 'rgba(127,127,127,.1)' , path + 'img/blackboard.png' ],
|
||||
grid: { color: 'rgb(50,50,10,0.5)', distance: 80, width: 2},
|
||||
eraser: { src: path + 'img/sponge.png', radius: 20},
|
||||
boardmarkers : [
|
||||
{ color: 'rgba(100,100,100,1)', cursor: 'url(' + path + 'img/boardmarker-black.png), auto'},
|
||||
{ color: 'rgba(30,144,255, 1)', cursor: 'url(' + path + 'img/boardmarker-blue.png), auto'},
|
||||
{ color: 'rgba(220,20,60,1)', cursor: 'url(' + path + 'img/boardmarker-red.png), auto'},
|
||||
{ color: 'rgba(50,205,50,1)', cursor: 'url(' + path + 'img/boardmarker-green.png), auto'},
|
||||
{ color: 'rgba(255,140,0,1)', cursor: 'url(' + path + 'img/boardmarker-orange.png), auto'},
|
||||
{ color: 'rgba(150,0,20150,1)', cursor: 'url(' + path + 'img/boardmarker-purple.png), auto'},
|
||||
{ color: 'rgba(255,220,0,1)', cursor: 'url(' + path + 'img/boardmarker-yellow.png), auto'}
|
||||
],
|
||||
chalks: [
|
||||
{ color: 'rgba(255,255,255,0.5)', cursor: 'url(' + path + 'img/chalk-white.png), auto'},
|
||||
{ color: 'rgba(96, 154, 244, 0.5)', cursor: 'url(' + path + 'img/chalk-blue.png), auto'},
|
||||
{ color: 'rgba(237, 20, 28, 0.5)', cursor: 'url(' + path + 'img/chalk-red.png), auto'},
|
||||
{ color: 'rgba(20, 237, 28, 0.5)', cursor: 'url(' + path + 'img/chalk-green.png), auto'},
|
||||
{ color: 'rgba(220, 133, 41, 0.5)', cursor: 'url(' + path + 'img/chalk-orange.png), auto'},
|
||||
{ color: 'rgba(220,0,220,0.5)', cursor: 'url(' + path + 'img/chalk-purple.png), auto'},
|
||||
{ color: 'rgba(255,220,0,0.5)', cursor: 'url(' + path + 'img/chalk-yellow.png), auto'}
|
||||
]
|
||||
},
|
||||
customcontrols: {
|
||||
controls: [
|
||||
{ icon: '<i class="fa fa-pen-square"></i>',
|
||||
title: 'Toggle chalkboard (B)',
|
||||
action: 'RevealChalkboard.toggleChalkboard();'
|
||||
},
|
||||
{ icon: '<i class="fa fa-pen"></i>',
|
||||
title: 'Toggle notes canvas (C)',
|
||||
action: 'RevealChalkboard.toggleNotesCanvas();'
|
||||
}
|
||||
]
|
||||
},
|
||||
// ...
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT licensed
|
||||
|
||||
Copyright (C) 2021 Asvin Goel
|
|
@ -0,0 +1,38 @@
|
|||
div.palette, div.boardhandle {
|
||||
position: absolute;
|
||||
/*
|
||||
height: 260px;
|
||||
margin: -130px 0 0 0px;
|
||||
*/
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
font-size: 24px;
|
||||
border-radius: 10px;
|
||||
border-top: 4px solid #222;
|
||||
border-right: 4px solid #222;
|
||||
border-bottom: 4px solid #222;
|
||||
background: black;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
div.palette {
|
||||
left: -10px;
|
||||
padding-left:10px;
|
||||
}
|
||||
|
||||
div.boardhandle {
|
||||
right: -10px;
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
div.palette > ul,
|
||||
div.boardhandle > ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.palette > ul > li,
|
||||
div.boardhandle > ul > li {
|
||||
margin: 10px;
|
||||
}
|
After Width: | Height: | Size: 32 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 5.0 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 33 KiB |
|
@ -0,0 +1,44 @@
|
|||
div.palette, div.boardhandle {
|
||||
position: absolute;
|
||||
/*
|
||||
height: 260px;
|
||||
margin: -130px 0 0 0px;
|
||||
*/
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
font-size: 24px;
|
||||
border-radius: 10px;
|
||||
border-top: 4px solid #222;
|
||||
border-right: 4px solid #222;
|
||||
border-bottom: 4px solid #222;
|
||||
background: black;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
div.palette {
|
||||
left: -10px;
|
||||
padding-left:10px;
|
||||
}
|
||||
|
||||
div.boardhandle {
|
||||
right: -10px;
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
div.palette > ul,
|
||||
div.boardhandle > ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.palette > ul > li,
|
||||
div.boardhandle > ul > li {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
div.palette, div.boardhandle, .chalkboard-button {
|
||||
display: none!important;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
# Chart
|
||||
|
||||
A plugin for [Reveal.js](https://github.com/hakimel/reveal.js) allowing to easily add charts using [Chart.js](http://www.chartjs.org/).
|
||||
|
||||
[Check out the live demo](https://rajgoel.github.io/reveal.js-demos/chart-demo.html)
|
||||
|
||||
## Installation
|
||||
|
||||
Copy the file `plugin.js` into the plugin folder of your reveal.js presentation, i.e. `plugin/chart`.
|
||||
|
||||
Add the plugin and Chart.js to the dependencies in your presentation, as below.
|
||||
|
||||
```html
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.2.0/chart.min.js"></script>
|
||||
<script src="plugin/chart/plugin.js"></script>
|
||||
|
||||
<script>
|
||||
Reveal.initialize({
|
||||
// ...
|
||||
plugins: [ RevealChart ],
|
||||
// ...
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
The plugin has several parameters that you can set for your presentation by providing an `chart` option in the reveal.js initialization options. Note that all configuration parameters are optional and the defaults of Chart.js will be used for parameters that are not specified.
|
||||
|
||||
|
||||
```javascript
|
||||
Reveal.initialize({
|
||||
// ...
|
||||
chart: {
|
||||
defaults: {
|
||||
color: 'lightgray', // color of labels
|
||||
scale: {
|
||||
beginAtZero: true,
|
||||
ticks: { stepSize: 1 },
|
||||
grid: { color: "lightgray" } , // color of grid lines
|
||||
},
|
||||
},
|
||||
line: { borderColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ], "borderDash": [ [5,10], [0,0] ] },
|
||||
bar: { backgroundColor: [ "rgba(20,220,220,.8)" , "rgba(220,120,120,.8)", "rgba(20,120,220,.8)" ]},
|
||||
pie: { backgroundColor: [ ["rgba(0,0,0,.8)" , "rgba(220,20,20,.8)", "rgba(20,220,20,.8)", "rgba(220,220,20,.8)", "rgba(20,20,220,.8)"] ]},
|
||||
},
|
||||
// ...
|
||||
});
|
||||
```
|
||||
The `defaults` parameter will overwrite `Chart.defaults`. Furthermore, for any chart type, e.g. line, bar, etc., the parameters for the individual datasets can be specified. Where Chart.js allows to specify a single parameter for a particular dataset, the plugin allows to specify an array of values for this parameter, which will automatically be assigned to the different datasets. Note that if there are more datasets than elements in the array, the plugin will start again with the first value in the array.
|
||||
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
A chart can be included in a slide by adding a `canvas` element with the `data-chart` attribute set to the desired chart type.
|
||||
|
||||
The chart can be configured within the canvas body by a JSON string embedded into an HTML comment.
|
||||
|
||||
```html
|
||||
<canvas data-chart="line" >
|
||||
<!--
|
||||
{
|
||||
"data": {
|
||||
"labels": ["January"," February"," March"," April"," May"," June"," July"],
|
||||
"datasets":[
|
||||
{
|
||||
"data":[65,59,80,81,56,55,40],
|
||||
"label":"My first dataset","backgroundColor":"rgba(20,220,220,.8)"
|
||||
},
|
||||
{
|
||||
"data":[28,48,40,19,86,27,90],
|
||||
"label":"My second dataset","backgroundColor":"rgba(220,120,120,.8)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
-->
|
||||
</canvas>
|
||||
```
|
||||
It is possible to provide the chart data by comma separated values and use the JSON string within the HTML comment to configure the chart layout.
|
||||
|
||||
```html
|
||||
<canvas class="stretch" data-chart="line">
|
||||
My first dataset, 65, 59, 80, 81, 56, 55, 40
|
||||
<!-- This is a comment that will be ignored -->
|
||||
My second dataset, 28, 48, 40, 19, 86, 27, 90
|
||||
<!--
|
||||
{
|
||||
"data" : {
|
||||
"labels" : ["Enero", "Febrero", "Marzo", "Avril", "Mayo", "Junio", "Julio"],
|
||||
"datasets" : [{ "borderColor": "#0f0", "borderDash": ["5","10"] }, { "borderColor": "#0ff" } ]
|
||||
}
|
||||
}
|
||||
-->
|
||||
</canvas>
|
||||
```
|
||||
|
||||
The layout configuration provided in `chart` parameter (see Configuration) will be used by default and only those parameters that are specified in a JSON string are used to overwrite the default values. If no JSON string is provided to configure the chart layout the default configuration is used. Note, that if no labels for the data points are provided by a JSON string, the plugin expects that the first row provides table headers.
|
||||
|
||||
```html
|
||||
<canvas data-chart="line">
|
||||
Month, January, February, March, April, May, June, July
|
||||
My first dataset, 65, 59, 80, 81, 56, 55, 40
|
||||
My second dataset, 28, 48, 40, 19, 86, 27, 90
|
||||
</canvas>
|
||||
```
|
||||
|
||||
The chart data can also be provided in an external CSV file. To include external data, the filename must be specified using the `data-chart-src` attribute of the `canvas` element. The CSV file is expected to only contain data values, whereas options for drawing the chart can be given as described above.
|
||||
|
||||
```html
|
||||
<canvas data-chart="bar" data-chart-src="chart/data.csv">
|
||||
<!--
|
||||
{
|
||||
"data" : {
|
||||
"datasets" : [{ "backgroundColor": "#0f0" }, { "backgroundColor": "#0ff" } ]
|
||||
},
|
||||
"options": { "scales": { "x": { "stacked": true }, "y": { "stacked": true } } }
|
||||
}
|
||||
-->
|
||||
</canvas>
|
||||
```
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT licensed
|
||||
|
||||
Copyright (C) 2021 Asvin Goel
|
|
@ -0,0 +1,198 @@
|
|||
/*****************************************************************
|
||||
** Author: Asvin Goel, goel@telematique.eu
|
||||
** Fixed for Reveal4: kotborealis@awooo.ru
|
||||
**
|
||||
** A plugin for reveal.js allowing to integrate Chart.js
|
||||
**
|
||||
** Version: 1.3.1
|
||||
**
|
||||
** License: MIT license (see LICENSE.md)
|
||||
**
|
||||
******************************************************************/
|
||||
|
||||
/**
|
||||
* Reveal Plugin
|
||||
* https://revealjs.com/creating-plugins/
|
||||
*/
|
||||
window.RevealChart = window.RevealChart || {
|
||||
id: 'RevealChart',
|
||||
init: function(deck) {
|
||||
initChart(deck);
|
||||
},
|
||||
update: function(canvas, idx, data) { update(canvas, idx, data); },
|
||||
};
|
||||
|
||||
const initChart = function(Reveal){
|
||||
function parseJSON(str) {
|
||||
var json;
|
||||
try {
|
||||
json = JSON.parse(str);
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
/*
|
||||
* Recursively merge properties of two objects
|
||||
*/
|
||||
function mergeRecursive(obj1, obj2) {
|
||||
|
||||
for (var p in obj2) {
|
||||
try {
|
||||
// Property in destination object set; update its value.
|
||||
if ( obj1[p] !== null && typeof obj1[p] === 'object' && typeof obj2[p] === 'object' ) {
|
||||
obj1[p] = mergeRecursive(obj1[p], obj2[p]);
|
||||
}
|
||||
else {
|
||||
obj1[p] = obj2[p];
|
||||
}
|
||||
} catch(e) {
|
||||
// Property in destination object not set; create it and set its value.
|
||||
obj1[p] = obj2[p];
|
||||
}
|
||||
}
|
||||
|
||||
return obj1;
|
||||
}
|
||||
|
||||
|
||||
function createChart(canvas, CSV, comments) {
|
||||
canvas.chart = null;
|
||||
var ctx = canvas.getContext("2d");
|
||||
var chartOptions = { responsive: true, maintainAspectRatio: false };
|
||||
var chartData = { labels: null, datasets: []};
|
||||
if ( comments !== null ) for (var j = 0; j < comments.length; j++ ){
|
||||
comments[j] = comments[j].replace(/<!--/,'');
|
||||
comments[j] = comments[j].replace(/-->/,'');
|
||||
var config = parseJSON(comments[j]);
|
||||
if ( config ) {
|
||||
if ( config.data ) {
|
||||
mergeRecursive( chartData, config.data);
|
||||
}
|
||||
if ( config.options ) {
|
||||
mergeRecursive( chartOptions, config.options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var lines = CSV.split('\n').filter(function(v){return v!==''});
|
||||
// if labels are not defined, get them from first line
|
||||
if ( chartData.labels === null && lines.length > 0 ) {
|
||||
chartData.labels = lines[0].split(',');
|
||||
chartData.labels.shift();
|
||||
lines.shift();
|
||||
}
|
||||
// get data values
|
||||
for (var j = 0; j < lines.length; j++ ){
|
||||
if (chartData.datasets.length <= j) chartData.datasets[j] = {};
|
||||
chartData.datasets[j].data = lines[j].split(','); //.filter(function(v){return v!==''});
|
||||
chartData.datasets[j].label = chartData.datasets[j].data[0];
|
||||
chartData.datasets[j].data.shift();
|
||||
for (var k = 0; k < chartData.datasets[j].data.length; k++ ){
|
||||
chartData.datasets[j].data[k] = Number(chartData.datasets[j].data[k]);
|
||||
}
|
||||
}
|
||||
|
||||
// add chart options
|
||||
var config = chartConfig[canvas.getAttribute("data-chart")];
|
||||
if ( config ) {
|
||||
for (var j = 0; j < chartData.datasets.length; j++ ){
|
||||
for (var attrname in config) {
|
||||
if ( !chartData.datasets[j][attrname] ) {
|
||||
chartData.datasets[j][attrname] = config[attrname][j%config[attrname].length];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
canvas.chart = new Chart(ctx, { type: canvas.getAttribute("data-chart"), data: chartData, options: chartOptions });
|
||||
|
||||
}
|
||||
|
||||
function updateChart(canvas, idx, data) {
|
||||
canvas.chart.data.datasets[idx].data = data;
|
||||
recreateChart( canvas );
|
||||
}
|
||||
|
||||
var initializeCharts = function(){
|
||||
// Get all canvases
|
||||
var canvases = document.querySelectorAll("canvas");
|
||||
for (var i = 0; i < canvases.length; i++ ){
|
||||
// check if canvas has data-chart attribute
|
||||
if ( canvases[i].hasAttribute("data-chart") ){
|
||||
var CSV = canvases[i].innerHTML.trim();
|
||||
var comments = CSV.match(/<!--[\s\S]*?-->/g);
|
||||
CSV = CSV.replace(/<!--[\s\S]*?-->/g,'').replace(/^\s*\n/gm, "")
|
||||
if ( ! canvases[i].hasAttribute("data-chart-src") ) {
|
||||
createChart(canvases[i], CSV, comments);
|
||||
}
|
||||
else {
|
||||
var canvas = canvases[i];
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onload = function() {
|
||||
if (xhr.readyState === 4) {
|
||||
createChart(canvas, xhr.responseText, comments);
|
||||
}
|
||||
else {
|
||||
console.warn( 'Failed to get file ' + canvas.getAttribute("data-chart-src") +". ReadyState: " + xhr.readyState + ", Status: " + xhr.status);
|
||||
}
|
||||
};
|
||||
|
||||
xhr.open( 'GET', canvas.getAttribute("data-chart-src"), false );
|
||||
try {
|
||||
xhr.send();
|
||||
}
|
||||
catch ( error ) {
|
||||
console.warn( 'Failed to get file ' + canvas.getAttribute("data-chart-src") + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + error );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function recreateChart(canvas) {
|
||||
// clear data to redraw animation
|
||||
var data = canvas.chart.data.datasets;
|
||||
canvas.chart.data.datasets = [];
|
||||
canvas.chart.update();
|
||||
canvas.style.visibility = "hidden";
|
||||
setTimeout( function(canvas, data) {
|
||||
canvas.chart.data.datasets = data;
|
||||
canvas.style.visibility = "visible";
|
||||
canvas.chart.update();
|
||||
}, 500, canvas, data); // wait for slide transition to re-add data and animation
|
||||
/*
|
||||
var config = canvas.chart.config;
|
||||
canvas.chart.destroy();
|
||||
setTimeout( function() { canvas.chart = new Chart(canvas, config);}, 500); // wait for slide transition
|
||||
*/
|
||||
}
|
||||
|
||||
// check if chart option is given or not
|
||||
var chartConfig = Reveal.getConfig().chart || {};
|
||||
|
||||
// set global chart options
|
||||
var config = chartConfig.defaults;
|
||||
if ( config ) {
|
||||
mergeRecursive(Chart.defaults, config);
|
||||
}
|
||||
|
||||
Reveal.addEventListener('ready', function(){
|
||||
initializeCharts();
|
||||
Reveal.addEventListener('slidechanged', function(){
|
||||
var canvases = Reveal.getCurrentSlide().querySelectorAll("canvas[data-chart]");
|
||||
for (var i = 0; i < canvases.length; i++ ){
|
||||
if ( canvases[i].chart && canvases[i].chart.config.options.animation !== false ) {
|
||||
recreateChart( canvases[i] );
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
this.update = updateChart;
|
||||
|
||||
return this;
|
||||
};
|
|
@ -0,0 +1,72 @@
|
|||
# Custom controls
|
||||
|
||||
This plugin allows to add responsive custom controls to reveal.js which allow arbitrary positioning, layout, and behaviour of the controls.
|
||||
|
||||
[Check out the live demo](https://rajgoel.github.io/reveal.js-demos/customcontrols-demo.html)
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
Copy the files `plugin.js` and `style.css` into the plugin folder of your reveal.js presentation, i.e. ```plugin/customcontrols``` and load the plugin as shown below.
|
||||
|
||||
```html
|
||||
<link rel="stylesheet" href="plugin/customcontrols/style.css">
|
||||
<script src="plugin/customcontrols/plugin.js"></script>
|
||||
|
||||
<script>
|
||||
Reveal.initialize({
|
||||
// ...
|
||||
plugins: [ RevealCustomControls ],
|
||||
// ...
|
||||
});
|
||||
</script>
|
||||
```
|
||||
|
||||
Note, without configuration you need to add
|
||||
|
||||
```javascript
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
|
||||
```
|
||||
|
||||
between ```<head>``` and ```</head>``` of your HTML file because the defaults use [Font Awesome](http://fontawesome.io/).
|
||||
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
The plugin can be configured by adding custom controls and changing the layout of the slide number, e.g., by:
|
||||
|
||||
|
||||
```javascript
|
||||
Reveal.initialize({
|
||||
// ...
|
||||
customcontrols: {
|
||||
controls: [
|
||||
{
|
||||
id: 'toggle-overview',
|
||||
title: 'Toggle overview (O)',
|
||||
icon: '<i class="fa fa-th"></i>',
|
||||
action: 'Reveal.toggleOverview();'
|
||||
},
|
||||
{ icon: '<i class="fa fa-pen-square"></i>',
|
||||
title: 'Toggle chalkboard (B)',
|
||||
action: 'RevealChalkboard.toggleChalkboard();'
|
||||
},
|
||||
{ icon: '<i class="fa fa-pen"></i>',
|
||||
title: 'Toggle notes canvas (C)',
|
||||
action: 'RevealChalkboard.toggleNotesCanvas();'
|
||||
}
|
||||
]
|
||||
},
|
||||
// ...
|
||||
|
||||
});
|
||||
```
|
||||
|
||||
The `id` and `title` are optional. The configuration should be self explaining and any number of controls can be added. The style file can be altered to control the layout and responsiveness of the custom controls.
|
||||
|
||||
## License
|
||||
|
||||
MIT licensed
|
||||
|
||||
Copyright (C) 2020 Asvin Goel
|
|
@ -0,0 +1,69 @@
|
|||
/*****************************************************************
|
||||
** Author: Asvin Goel, goel@telematique.eu
|
||||
**
|
||||
** A plugin replacing the default controls by custom controls.
|
||||
**
|
||||
** Version: 2.0.0
|
||||
**
|
||||
** License: MIT license (see LICENSE.md)
|
||||
**
|
||||
******************************************************************/
|
||||
window.RevealCustomControls = window.RevealCustomControls || {
|
||||
id: 'RevealCustomControls',
|
||||
init: function(deck) {
|
||||
initCustomControls(deck);
|
||||
}
|
||||
};
|
||||
|
||||
const initCustomControls = function(Reveal){
|
||||
var config = Reveal.getConfig().customcontrols || {};
|
||||
|
||||
var collapseIcon = config.collapseIcon || '<i class="fa fa-chevron-down"></i>';
|
||||
var expandIcon = config.expandIcon || '<i class="fa fa-chevron-up"></i>';
|
||||
var tooltip = config.tooltip || 'Show/hide controls';
|
||||
|
||||
var div = document.createElement( 'div' );
|
||||
div.id = 'customcontrols';
|
||||
|
||||
var toggleButton = document.createElement( 'button' );
|
||||
toggleButton.title = tooltip;
|
||||
toggleButton.innerHTML = '<span id="collapse-customcontrols">' + collapseIcon + '</span>' + '<span id="expand-customcontrols">' + expandIcon + '</span>';
|
||||
|
||||
toggleButton.addEventListener('click', function( event ) {
|
||||
var div = document.querySelector("div#customcontrols");
|
||||
if ( div.classList.contains('collapsed') ) {
|
||||
div.classList.remove('collapsed');
|
||||
}
|
||||
else {
|
||||
div.classList.add('collapsed');
|
||||
}
|
||||
});
|
||||
|
||||
div.appendChild(toggleButton);
|
||||
|
||||
var controls = document.createElement( 'ul' );
|
||||
for (var i = 0; i < config.controls.length; i++ ) {
|
||||
var control = document.createElement( 'li' );
|
||||
if ( config.controls[i].id ) {
|
||||
control.id = config.controls[i].id;
|
||||
}
|
||||
control.innerHTML = '<button ' + ( config.controls[i].title ? 'title="' + config.controls[i].title + '" ': '' ) + 'onclick="' + config.controls[i].action + '">' + config.controls[i].icon + '</button>';
|
||||
controls.appendChild( control );
|
||||
}
|
||||
div.appendChild( controls );
|
||||
|
||||
|
||||
document.querySelector(".reveal").appendChild( div );
|
||||
|
||||
document.addEventListener( 'resize', function( event ) {
|
||||
// expand controls to make sure they are visible
|
||||
var div = document.querySelector("div#customcontrols.collapsed");
|
||||
if ( div ) {
|
||||
div.classList.remove('collapsed');
|
||||
}
|
||||
} );
|
||||
|
||||
return this;
|
||||
|
||||
};
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
#customcontrols {
|
||||
z-index: 40;
|
||||
position: fixed;
|
||||
left: 70px;
|
||||
bottom: 30px;
|
||||
text-align: center;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
#customcontrols button {
|
||||
background: none;
|
||||
color: var(--r-link-color);
|
||||
border: none;
|
||||
padding: 0;
|
||||
font: inherit;
|
||||
cursor: pointer;
|
||||
outline: inherit;
|
||||
z-index: 40;
|
||||
}
|
||||
|
||||
#customcontrols button:hover {
|
||||
color: var(--r-link-color-hover);
|
||||
}
|
||||
|
||||
#customcontrols > ul {
|
||||
position: fixed;
|
||||
left: 54px;
|
||||
bottom: 64px;
|
||||
list-style-type: none;
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 1px solid var(--r-link-color);
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
background-color: var(--r-background-color)
|
||||
}
|
||||
|
||||
#customcontrols ul > li {
|
||||
margin: 0px 5px;
|
||||
padding: 0px 5px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#customcontrols.collapsed #collapse-customcontrols, #customcontrols.collapsed > ul {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#customcontrols:not(.collapsed) #expand-customcontrols {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 500px) {
|
||||
#customcontrols > button {
|
||||
display: none;
|
||||
}
|
||||
#customcontrols > ul {
|
||||
bottom: 20px;
|
||||
border: none;
|
||||
background: none;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
var ElapsedTimeBar = {
|
||||
// default value
|
||||
barColor: 'rgb(200,0,0)',
|
||||
pausedBarColor: 'rgba(200,0,0,.6)',
|
||||
|
||||
isPaused: false,
|
||||
isFinished: false,
|
||||
|
||||
allottedTime: null,
|
||||
timeProgressBar: null,
|
||||
startTime: null,
|
||||
pauseTime: null,
|
||||
pauseTimeDuration: 0,
|
||||
|
||||
/**
|
||||
* initialize elements
|
||||
*/
|
||||
handleReady() {
|
||||
var config = Reveal.getConfig();
|
||||
|
||||
// activate this plugin if config.allottedTime exists.
|
||||
if (!config.allottedTime) {
|
||||
console.warn('Failed to start ElapsedTimeBar plugin. "allottedTime" property is required.');
|
||||
return;
|
||||
}
|
||||
|
||||
// set configurations
|
||||
this.barColor = config.barColor || this.barColor;
|
||||
this.pausedBarColor = config.pausedBarColor || this.pausedBarColor;
|
||||
|
||||
// calc barHeight from config.barHeight or page-progress container
|
||||
var barHeight;
|
||||
var pageProgressContainer = document.querySelector('.progress');
|
||||
if (config.progressBarHeight) {
|
||||
barHeight = parseInt(config.progressBarHeight, 10) + 'px';
|
||||
|
||||
// override height of page-progress container
|
||||
pageProgressContainer && (pageProgressContainer.style.height = barHeight);
|
||||
} else if (config.progress && pageProgressContainer) {
|
||||
// get height from page-progress container
|
||||
barHeight = pageProgressContainer.getBoundingClientRect().height + 'px';
|
||||
} else {
|
||||
// default
|
||||
barHeight = '3px';
|
||||
}
|
||||
|
||||
// create container of time-progress
|
||||
var timeProgressContainer = document.createElement('div');
|
||||
timeProgressContainer.classList.add('progress');
|
||||
Object.entries({
|
||||
display: 'block',
|
||||
position: 'fixed',
|
||||
bottom: config.progress ? barHeight : 0,
|
||||
width: '100%',
|
||||
height: barHeight
|
||||
}).forEach(([k, v]) => {
|
||||
timeProgressContainer.style[k] = v;
|
||||
});
|
||||
document.querySelector('.reveal').appendChild(timeProgressContainer);
|
||||
|
||||
// create content of time-progress
|
||||
this.timeProgressBar = document.createElement('div');
|
||||
Object.entries({
|
||||
height: '100%',
|
||||
willChange: 'width'
|
||||
}).forEach(([k, v]) => {
|
||||
this.timeProgressBar.style[k] = v;
|
||||
});
|
||||
timeProgressContainer.appendChild(this.timeProgressBar);
|
||||
|
||||
// start timer
|
||||
this.start(config.allottedTime);
|
||||
},
|
||||
|
||||
/**
|
||||
* update repeatedly using requestAnimationFrame.
|
||||
*/
|
||||
loop() {
|
||||
if (this.isPaused) return;
|
||||
var now = +new Date();
|
||||
var elapsedTime = now - this.startTime - this.pauseTimeDuration;
|
||||
if (elapsedTime > this.allottedTime) {
|
||||
this.timeProgressBar.style.width = '100%';
|
||||
this.isFinished = true;
|
||||
} else {
|
||||
this.timeProgressBar.style.width = elapsedTime / this.allottedTime * 100 + '%';
|
||||
requestAnimationFrame(this.loop.bind(this));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* set color of progress bar
|
||||
*/
|
||||
setBarColor() {
|
||||
if (this.isPaused) {
|
||||
this.timeProgressBar.style.backgroundColor = this.pausedBarColor;
|
||||
} else {
|
||||
this.timeProgressBar.style.backgroundColor = this.barColor;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* start(reset) timer with new allotted time.
|
||||
* @param {number} allottedTime
|
||||
* @param {number} [elapsedTime=0]
|
||||
*/
|
||||
start(allottedTime, elapsedTime = 0) {
|
||||
this.isFinished = false;
|
||||
this.isPaused = false;
|
||||
this.allottedTime = allottedTime;
|
||||
this.startTime = +new Date() - elapsedTime;
|
||||
this.pauseTimeDuration = 0;
|
||||
this.setBarColor();
|
||||
this.loop();
|
||||
},
|
||||
|
||||
reset() {
|
||||
this.start(this.allottedTime);
|
||||
},
|
||||
|
||||
pause() {
|
||||
if (this.isPaused) return;
|
||||
this.isPaused = true;
|
||||
this.pauseTime = +new Date();
|
||||
this.setBarColor();
|
||||
},
|
||||
|
||||
resume() {
|
||||
if (!this.isPaused) return;
|
||||
|
||||
// add paused time duration
|
||||
this.isPaused = false;
|
||||
this.pauseTimeDuration += new Date() - this.pauseTime;
|
||||
this.pauseTime = null;
|
||||
this.setBarColor();
|
||||
this.loop();
|
||||
}
|
||||
};
|
||||
|
||||
if (Reveal.isReady()) {
|
||||
ElapsedTimeBar.handleReady();
|
||||
} else {
|
||||
Reveal.addEventListener('ready', () => ElapsedTimeBar.handleReady());
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
Monokai style - ported by Luigi Maselli - http://grigio.org
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
padding: 0.5em;
|
||||
background: #272822;
|
||||
color: #ddd;
|
||||
}
|
||||
|
||||
.hljs-tag,
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-literal,
|
||||
.hljs-strong,
|
||||
.hljs-name {
|
||||
color: #f92672;
|
||||
}
|
||||
|
||||
.hljs-code {
|
||||
color: #66d9ef;
|
||||
}
|
||||
|
||||
.hljs-class .hljs-title {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.hljs-attribute,
|
||||
.hljs-symbol,
|
||||
.hljs-regexp,
|
||||
.hljs-link {
|
||||
color: #bf79db;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-bullet,
|
||||
.hljs-subst,
|
||||
.hljs-title,
|
||||
.hljs-section,
|
||||
.hljs-emphasis,
|
||||
.hljs-type,
|
||||
.hljs-built_in,
|
||||
.hljs-builtin-name,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo,
|
||||
.hljs-addition,
|
||||
.hljs-variable,
|
||||
.hljs-template-tag,
|
||||
.hljs-template-variable {
|
||||
color: #a6e22e;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-quote,
|
||||
.hljs-deletion,
|
||||
.hljs-meta {
|
||||
color: #75715e;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-literal,
|
||||
.hljs-doctag,
|
||||
.hljs-title,
|
||||
.hljs-section,
|
||||
.hljs-type,
|
||||
.hljs-selector-id {
|
||||
font-weight: bold;
|
||||
}
|
|
@ -0,0 +1,439 @@
|
|||
import hljs from 'highlight.js';
|
||||
|
||||
/* highlightjs-line-numbers.js 2.8.0 | (C) 2018 Yauheni Pakala | MIT License | github.com/wcoder/highlightjs-line-numbers.js */
|
||||
!function(r,o){"use strict";var e,i="hljs-ln",l="hljs-ln-line",h="hljs-ln-code",s="hljs-ln-numbers",c="hljs-ln-n",m="data-line-number",a=/\r\n|\r|\n/g;function u(e){for(var n=e.toString(),t=e.anchorNode;"TD"!==t.nodeName;)t=t.parentNode;for(var r=e.focusNode;"TD"!==r.nodeName;)r=r.parentNode;var o=parseInt(t.dataset.lineNumber),a=parseInt(r.dataset.lineNumber);if(o==a)return n;var i,l=t.textContent,s=r.textContent;for(a<o&&(i=o,o=a,a=i,i=l,l=s,s=i);0!==n.indexOf(l);)l=l.slice(1);for(;-1===n.lastIndexOf(s);)s=s.slice(0,-1);for(var c=l,u=function(e){for(var n=e;"TABLE"!==n.nodeName;)n=n.parentNode;return n}(t),d=o+1;d<a;++d){var f=p('.{0}[{1}="{2}"]',[h,m,d]);c+="\n"+u.querySelector(f).textContent}return c+="\n"+s}function n(e){try{var n=o.querySelectorAll("code.hljs,code.nohighlight");for(var t in n)n.hasOwnProperty(t)&&(n[t].classList.contains("nohljsln")||d(n[t],e))}catch(e){r.console.error("LineNumbers error: ",e)}}function d(e,n){if("object"==typeof e)e.innerHTML=f(e,n)}function f(e,n){var t,r,o=(t=e,{singleLine:function(e){return!!e.singleLine&&e.singleLine}(r=(r=n)||{}),startFrom:function(e,n){var t=1;isFinite(n.startFrom)&&(t=n.startFrom);var r=function(e,n){return e.hasAttribute(n)?e.getAttribute(n):null}(e,"data-ln-start-from");return null!==r&&(t=function(e,n){if(!e)return n;var t=Number(e);return isFinite(t)?t:n}(r,1)),t}(t,r)});return function e(n){var t=n.childNodes;for(var r in t){var o;t.hasOwnProperty(r)&&(o=t[r],0<(o.textContent.trim().match(a)||[]).length&&(0<o.childNodes.length?e(o):v(o.parentNode)))}}(e),function(e,n){var t=g(e);""===t[t.length-1].trim()&&t.pop();if(1<t.length||n.singleLine){for(var r="",o=0,a=t.length;o<a;o++)r+=p('<tr><td class="{0} {1}" {3}="{5}"><div class="{2}" {3}="{5}"></div></td><td class="{0} {4}" {3}="{5}">{6}</td></tr>',[l,s,c,m,h,o+n.startFrom,0<t[o].length?t[o]:" "]);return p('<table class="{0}">{1}</table>',[i,r])}return e}(e.innerHTML,o)}function v(e){var n=e.className;if(/hljs-/.test(n)){for(var t=g(e.innerHTML),r=0,o="";r<t.length;r++){o+=p('<span class="{0}">{1}</span>\n',[n,0<t[r].length?t[r]:" "])}e.innerHTML=o.trim()}}function g(e){return 0===e.length?[]:e.split(a)}function p(e,t){return e.replace(/\{(\d+)\}/g,function(e,n){return void 0!==t[n]?t[n]:e})}hljs?(hljs.initLineNumbersOnLoad=function(e){"interactive"===o.readyState||"complete"===o.readyState?n(e):r.addEventListener("DOMContentLoaded",function(){n(e)})},hljs.lineNumbersBlock=d,hljs.lineNumbersValue=function(e,n){if("string"!=typeof e)return;var t=document.createElement("code");return t.innerHTML=e,f(t,n)},(e=o.createElement("style")).type="text/css",e.innerHTML=p(".{0}{border-collapse:collapse}.{0} td{padding:0}.{1}:before{content:attr({2})}",[i,c,m]),o.getElementsByTagName("head")[0].appendChild(e)):r.console.error("highlight.js not detected!"),document.addEventListener("copy",function(e){var n,t=window.getSelection();!function(e){for(var n=e;n;){if(n.className&&-1!==n.className.indexOf("hljs-ln-code"))return 1;n=n.parentNode}}(t.anchorNode)||(n=-1!==window.navigator.userAgent.indexOf("Edge")?u(t):t.toString(),e.clipboardData.setData("text/plain",n),e.preventDefault())})}(window,document);
|
||||
|
||||
|
||||
/*!
|
||||
* reveal.js plugin that adds syntax highlight support.
|
||||
*/
|
||||
|
||||
const Plugin = {
|
||||
|
||||
id: 'highlight',
|
||||
|
||||
HIGHLIGHT_STEP_DELIMITER: '|',
|
||||
HIGHLIGHT_LINE_DELIMITER: ',',
|
||||
HIGHLIGHT_LINE_RANGE_DELIMITER: '-',
|
||||
|
||||
hljs,
|
||||
|
||||
/**
|
||||
* Highlights code blocks withing the given deck.
|
||||
*
|
||||
* Note that this can be called multiple times if
|
||||
* there are multiple presentations on one page.
|
||||
*
|
||||
* @param {Reveal} reveal the reveal.js instance
|
||||
*/
|
||||
init: function( reveal ) {
|
||||
|
||||
// Read the plugin config options and provide fallbacks
|
||||
let config = reveal.getConfig().highlight || {};
|
||||
|
||||
config.highlightOnLoad = typeof config.highlightOnLoad === 'boolean' ? config.highlightOnLoad : true;
|
||||
config.escapeHTML = typeof config.escapeHTML === 'boolean' ? config.escapeHTML : true;
|
||||
|
||||
Array.from( reveal.getRevealElement().querySelectorAll( 'pre code' ) ).forEach( block => {
|
||||
|
||||
block.parentNode.classList.add('code-wrapper');
|
||||
|
||||
// Code can optionally be wrapped in script template to avoid
|
||||
// HTML being parsed by the browser (i.e. when you need to
|
||||
// include <, > or & in your code).
|
||||
let substitute = block.querySelector( 'script[type="text/template"]' );
|
||||
if( substitute ) {
|
||||
// textContent handles the HTML entity escapes for us
|
||||
block.textContent = substitute.innerHTML;
|
||||
}
|
||||
|
||||
// Trim whitespace if the "data-trim" attribute is present
|
||||
if( block.hasAttribute( 'data-trim' ) && typeof block.innerHTML.trim === 'function' ) {
|
||||
block.innerHTML = betterTrim( block );
|
||||
}
|
||||
|
||||
// Escape HTML tags unless the "data-noescape" attrbute is present
|
||||
if( config.escapeHTML && !block.hasAttribute( 'data-noescape' )) {
|
||||
block.innerHTML = block.innerHTML.replace( /</g,"<").replace(/>/g, '>' );
|
||||
}
|
||||
|
||||
// Re-highlight when focus is lost (for contenteditable code)
|
||||
block.addEventListener( 'focusout', function( event ) {
|
||||
hljs.highlightElement( event.currentTarget );
|
||||
}, false );
|
||||
|
||||
} );
|
||||
|
||||
// Triggers a callback function before we trigger highlighting
|
||||
if( typeof config.beforeHighlight === 'function' ) {
|
||||
config.beforeHighlight( hljs );
|
||||
}
|
||||
|
||||
// Run initial highlighting for all code
|
||||
if( config.highlightOnLoad ) {
|
||||
Array.from( reveal.getRevealElement().querySelectorAll( 'pre code' ) ).forEach( block => {
|
||||
Plugin.highlightBlock( block );
|
||||
} );
|
||||
}
|
||||
|
||||
// If we're printing to PDF, scroll the code highlights of
|
||||
// all blocks in the deck into view at once
|
||||
reveal.on( 'pdf-ready', function() {
|
||||
[].slice.call( reveal.getRevealElement().querySelectorAll( 'pre code[data-line-numbers].current-fragment' ) ).forEach( function( block ) {
|
||||
Plugin.scrollHighlightedLineIntoView( block, {}, true );
|
||||
} );
|
||||
} );
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Highlights a code block. If the <code> node has the
|
||||
* 'data-line-numbers' attribute we also generate slide
|
||||
* numbers.
|
||||
*
|
||||
* If the block contains multiple line highlight steps,
|
||||
* we clone the block and create a fragment for each step.
|
||||
*/
|
||||
highlightBlock: function( block ) {
|
||||
|
||||
hljs.highlightElement( block );
|
||||
|
||||
// Don't generate line numbers for empty code blocks
|
||||
if( block.innerHTML.trim().length === 0 ) return;
|
||||
|
||||
if( block.hasAttribute( 'data-line-numbers' ) ) {
|
||||
hljs.lineNumbersBlock( block, { singleLine: true } );
|
||||
|
||||
var scrollState = { currentBlock: block };
|
||||
|
||||
// If there is more than one highlight step, generate
|
||||
// fragments
|
||||
var highlightSteps = Plugin.deserializeHighlightSteps( block.getAttribute( 'data-line-numbers' ) );
|
||||
if( highlightSteps.length > 1 ) {
|
||||
|
||||
// If the original code block has a fragment-index,
|
||||
// each clone should follow in an incremental sequence
|
||||
var fragmentIndex = parseInt( block.getAttribute( 'data-fragment-index' ), 10 );
|
||||
|
||||
if( typeof fragmentIndex !== 'number' || isNaN( fragmentIndex ) ) {
|
||||
fragmentIndex = null;
|
||||
}
|
||||
|
||||
// Generate fragments for all steps except the original block
|
||||
highlightSteps.slice(1).forEach( function( highlight ) {
|
||||
|
||||
var fragmentBlock = block.cloneNode( true );
|
||||
fragmentBlock.setAttribute( 'data-line-numbers', Plugin.serializeHighlightSteps( [ highlight ] ) );
|
||||
fragmentBlock.classList.add( 'fragment' );
|
||||
block.parentNode.appendChild( fragmentBlock );
|
||||
Plugin.highlightLines( fragmentBlock );
|
||||
|
||||
if( typeof fragmentIndex === 'number' ) {
|
||||
fragmentBlock.setAttribute( 'data-fragment-index', fragmentIndex );
|
||||
fragmentIndex += 1;
|
||||
}
|
||||
else {
|
||||
fragmentBlock.removeAttribute( 'data-fragment-index' );
|
||||
}
|
||||
|
||||
// Scroll highlights into view as we step through them
|
||||
fragmentBlock.addEventListener( 'visible', Plugin.scrollHighlightedLineIntoView.bind( Plugin, fragmentBlock, scrollState ) );
|
||||
fragmentBlock.addEventListener( 'hidden', Plugin.scrollHighlightedLineIntoView.bind( Plugin, fragmentBlock.previousSibling, scrollState ) );
|
||||
|
||||
} );
|
||||
|
||||
block.removeAttribute( 'data-fragment-index' );
|
||||
block.setAttribute( 'data-line-numbers', Plugin.serializeHighlightSteps( [ highlightSteps[0] ] ) );
|
||||
|
||||
}
|
||||
|
||||
// Scroll the first highlight into view when the slide
|
||||
// becomes visible. Note supported in IE11 since it lacks
|
||||
// support for Element.closest.
|
||||
var slide = typeof block.closest === 'function' ? block.closest( 'section:not(.stack)' ) : null;
|
||||
if( slide ) {
|
||||
var scrollFirstHighlightIntoView = function() {
|
||||
Plugin.scrollHighlightedLineIntoView( block, scrollState, true );
|
||||
slide.removeEventListener( 'visible', scrollFirstHighlightIntoView );
|
||||
}
|
||||
slide.addEventListener( 'visible', scrollFirstHighlightIntoView );
|
||||
}
|
||||
|
||||
Plugin.highlightLines( block );
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Animates scrolling to the first highlighted line
|
||||
* in the given code block.
|
||||
*/
|
||||
scrollHighlightedLineIntoView: function( block, scrollState, skipAnimation ) {
|
||||
|
||||
cancelAnimationFrame( scrollState.animationFrameID );
|
||||
|
||||
// Match the scroll position of the currently visible
|
||||
// code block
|
||||
if( scrollState.currentBlock ) {
|
||||
block.scrollTop = scrollState.currentBlock.scrollTop;
|
||||
}
|
||||
|
||||
// Remember the current code block so that we can match
|
||||
// its scroll position when showing/hiding fragments
|
||||
scrollState.currentBlock = block;
|
||||
|
||||
var highlightBounds = this.getHighlightedLineBounds( block )
|
||||
var viewportHeight = block.offsetHeight;
|
||||
|
||||
// Subtract padding from the viewport height
|
||||
var blockStyles = getComputedStyle( block );
|
||||
viewportHeight -= parseInt( blockStyles.paddingTop ) + parseInt( blockStyles.paddingBottom );
|
||||
|
||||
// Scroll position which centers all highlights
|
||||
var startTop = block.scrollTop;
|
||||
var targetTop = highlightBounds.top + ( Math.min( highlightBounds.bottom - highlightBounds.top, viewportHeight ) - viewportHeight ) / 2;
|
||||
|
||||
// Account for offsets in position applied to the
|
||||
// <table> that holds our lines of code
|
||||
var lineTable = block.querySelector( '.hljs-ln' );
|
||||
if( lineTable ) targetTop += lineTable.offsetTop - parseInt( blockStyles.paddingTop );
|
||||
|
||||
// Make sure the scroll target is within bounds
|
||||
targetTop = Math.max( Math.min( targetTop, block.scrollHeight - viewportHeight ), 0 );
|
||||
|
||||
if( skipAnimation === true || startTop === targetTop ) {
|
||||
block.scrollTop = targetTop;
|
||||
}
|
||||
else {
|
||||
|
||||
// Don't attempt to scroll if there is no overflow
|
||||
if( block.scrollHeight <= viewportHeight ) return;
|
||||
|
||||
var time = 0;
|
||||
var animate = function() {
|
||||
time = Math.min( time + 0.02, 1 );
|
||||
|
||||
// Update our eased scroll position
|
||||
block.scrollTop = startTop + ( targetTop - startTop ) * Plugin.easeInOutQuart( time );
|
||||
|
||||
// Keep animating unless we've reached the end
|
||||
if( time < 1 ) {
|
||||
scrollState.animationFrameID = requestAnimationFrame( animate );
|
||||
}
|
||||
};
|
||||
|
||||
animate();
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* The easing function used when scrolling.
|
||||
*/
|
||||
easeInOutQuart: function( t ) {
|
||||
|
||||
// easeInOutQuart
|
||||
return t<.5 ? 8*t*t*t*t : 1-8*(--t)*t*t*t;
|
||||
|
||||
},
|
||||
|
||||
getHighlightedLineBounds: function( block ) {
|
||||
|
||||
var highlightedLines = block.querySelectorAll( '.highlight-line' );
|
||||
if( highlightedLines.length === 0 ) {
|
||||
return { top: 0, bottom: 0 };
|
||||
}
|
||||
else {
|
||||
var firstHighlight = highlightedLines[0];
|
||||
var lastHighlight = highlightedLines[ highlightedLines.length -1 ];
|
||||
|
||||
return {
|
||||
top: firstHighlight.offsetTop,
|
||||
bottom: lastHighlight.offsetTop + lastHighlight.offsetHeight
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Visually emphasize specific lines within a code block.
|
||||
* This only works on blocks with line numbering turned on.
|
||||
*
|
||||
* @param {HTMLElement} block a <code> block
|
||||
* @param {String} [linesToHighlight] The lines that should be
|
||||
* highlighted in this format:
|
||||
* "1" = highlights line 1
|
||||
* "2,5" = highlights lines 2 & 5
|
||||
* "2,5-7" = highlights lines 2, 5, 6 & 7
|
||||
*/
|
||||
highlightLines: function( block, linesToHighlight ) {
|
||||
|
||||
var highlightSteps = Plugin.deserializeHighlightSteps( linesToHighlight || block.getAttribute( 'data-line-numbers' ) );
|
||||
|
||||
if( highlightSteps.length ) {
|
||||
|
||||
highlightSteps[0].forEach( function( highlight ) {
|
||||
|
||||
var elementsToHighlight = [];
|
||||
|
||||
// Highlight a range
|
||||
if( typeof highlight.end === 'number' ) {
|
||||
elementsToHighlight = [].slice.call( block.querySelectorAll( 'table tr:nth-child(n+'+highlight.start+'):nth-child(-n+'+highlight.end+')' ) );
|
||||
}
|
||||
// Highlight a single line
|
||||
else if( typeof highlight.start === 'number' ) {
|
||||
elementsToHighlight = [].slice.call( block.querySelectorAll( 'table tr:nth-child('+highlight.start+')' ) );
|
||||
}
|
||||
|
||||
if( elementsToHighlight.length ) {
|
||||
elementsToHighlight.forEach( function( lineElement ) {
|
||||
lineElement.classList.add( 'highlight-line' );
|
||||
} );
|
||||
|
||||
block.classList.add( 'has-highlights' );
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Parses and formats a user-defined string of line
|
||||
* numbers to highlight.
|
||||
*
|
||||
* @example
|
||||
* Plugin.deserializeHighlightSteps( '1,2|3,5-10' )
|
||||
* // [
|
||||
* // [ { start: 1 }, { start: 2 } ],
|
||||
* // [ { start: 3 }, { start: 5, end: 10 } ]
|
||||
* // ]
|
||||
*/
|
||||
deserializeHighlightSteps: function( highlightSteps ) {
|
||||
|
||||
// Remove whitespace
|
||||
highlightSteps = highlightSteps.replace( /\s/g, '' );
|
||||
|
||||
// Divide up our line number groups
|
||||
highlightSteps = highlightSteps.split( Plugin.HIGHLIGHT_STEP_DELIMITER );
|
||||
|
||||
return highlightSteps.map( function( highlights ) {
|
||||
|
||||
return highlights.split( Plugin.HIGHLIGHT_LINE_DELIMITER ).map( function( highlight ) {
|
||||
|
||||
// Parse valid line numbers
|
||||
if( /^[\d-]+$/.test( highlight ) ) {
|
||||
|
||||
highlight = highlight.split( Plugin.HIGHLIGHT_LINE_RANGE_DELIMITER );
|
||||
|
||||
var lineStart = parseInt( highlight[0], 10 ),
|
||||
lineEnd = parseInt( highlight[1], 10 );
|
||||
|
||||
if( isNaN( lineEnd ) ) {
|
||||
return {
|
||||
start: lineStart
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
start: lineStart,
|
||||
end: lineEnd
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
// If no line numbers are provided, no code will be highlighted
|
||||
else {
|
||||
|
||||
return {};
|
||||
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
} );
|
||||
|
||||
},
|
||||
|
||||
/**
|
||||
* Serializes parsed line number data into a string so
|
||||
* that we can store it in the DOM.
|
||||
*/
|
||||
serializeHighlightSteps: function( highlightSteps ) {
|
||||
|
||||
return highlightSteps.map( function( highlights ) {
|
||||
|
||||
return highlights.map( function( highlight ) {
|
||||
|
||||
// Line range
|
||||
if( typeof highlight.end === 'number' ) {
|
||||
return highlight.start + Plugin.HIGHLIGHT_LINE_RANGE_DELIMITER + highlight.end;
|
||||
}
|
||||
// Single line
|
||||
else if( typeof highlight.start === 'number' ) {
|
||||
return highlight.start;
|
||||
}
|
||||
// All lines
|
||||
else {
|
||||
return '';
|
||||
}
|
||||
|
||||
} ).join( Plugin.HIGHLIGHT_LINE_DELIMITER );
|
||||
|
||||
} ).join( Plugin.HIGHLIGHT_STEP_DELIMITER );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Function to perform a better "data-trim" on code snippets
|
||||
// Will slice an indentation amount on each line of the snippet (amount based on the line having the lowest indentation length)
|
||||
function betterTrim(snippetEl) {
|
||||
// Helper functions
|
||||
function trimLeft(val) {
|
||||
// Adapted from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill
|
||||
return val.replace(/^[\s\uFEFF\xA0]+/g, '');
|
||||
}
|
||||
function trimLineBreaks(input) {
|
||||
var lines = input.split('\n');
|
||||
|
||||
// Trim line-breaks from the beginning
|
||||
for (var i = 0; i < lines.length; i++) {
|
||||
if (lines[i].trim() === '') {
|
||||
lines.splice(i--, 1);
|
||||
} else break;
|
||||
}
|
||||
|
||||
// Trim line-breaks from the end
|
||||
for (var i = lines.length-1; i >= 0; i--) {
|
||||
if (lines[i].trim() === '') {
|
||||
lines.splice(i, 1);
|
||||
} else break;
|
||||
}
|
||||
|
||||
return lines.join('\n');
|
||||
}
|
||||
|
||||
// Main function for betterTrim()
|
||||
return (function(snippetEl) {
|
||||
var content = trimLineBreaks(snippetEl.innerHTML);
|
||||
var lines = content.split('\n');
|
||||
// Calculate the minimum amount to remove on each line start of the snippet (can be 0)
|
||||
var pad = lines.reduce(function(acc, line) {
|
||||
if (line.length > 0 && trimLeft(line).length > 0 && acc > line.length - trimLeft(line).length) {
|
||||
return line.length - trimLeft(line).length;
|
||||
}
|
||||
return acc;
|
||||
}, Number.POSITIVE_INFINITY);
|
||||
// Slice each line with this amount
|
||||
return lines.map(function(line, index) {
|
||||
return line.slice(pad);
|
||||
})
|
||||
.join('\n');
|
||||
})(snippetEl);
|
||||
}
|
||||
|
||||
export default () => Plugin;
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
|
||||
Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>
|
||||
based on dark.css by Ivan Sagalaev
|
||||
|
||||
*/
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
padding: 0.5em;
|
||||
background: #3f3f3f;
|
||||
color: #dcdcdc;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-tag {
|
||||
color: #e3ceab;
|
||||
}
|
||||
|
||||
.hljs-template-tag {
|
||||
color: #dcdcdc;
|
||||
}
|
||||
|
||||
.hljs-number {
|
||||
color: #8cd0d3;
|
||||
}
|
||||
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-attribute {
|
||||
color: #efdcbc;
|
||||
}
|
||||
|
||||
.hljs-literal {
|
||||
color: #efefaf;
|
||||
}
|
||||
|
||||
.hljs-subst {
|
||||
color: #8f8f8f;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-name,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-section,
|
||||
.hljs-type {
|
||||
color: #efef8f;
|
||||
}
|
||||
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-link {
|
||||
color: #dca3a3;
|
||||
}
|
||||
|
||||
.hljs-deletion,
|
||||
.hljs-string,
|
||||
.hljs-built_in,
|
||||
.hljs-builtin-name {
|
||||
color: #cc9393;
|
||||
}
|
||||
|
||||
.hljs-addition,
|
||||
.hljs-comment,
|
||||
.hljs-quote,
|
||||
.hljs-meta {
|
||||
color: #7f9f7f;
|
||||
}
|
||||
|
||||
|
||||
.hljs-emphasis {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.hljs-strong {
|
||||
font-weight: bold;
|
||||
}
|
|
@ -0,0 +1,475 @@
|
|||
/*!
|
||||
* The reveal.js markdown plugin. Handles parsing of
|
||||
* markdown inside of presentations as well as loading
|
||||
* of external markdown documents.
|
||||
*/
|
||||
|
||||
import { marked } from 'marked';
|
||||
|
||||
const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n',
|
||||
DEFAULT_NOTES_SEPARATOR = 'notes?:',
|
||||
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\\.element\\\s*?(.+?)$',
|
||||
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\\.slide:\\\s*?(\\\S.+?)$';
|
||||
|
||||
const SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__';
|
||||
|
||||
const CODE_LINE_NUMBER_REGEX = /\[([\s\d,|-]*)\]/;
|
||||
|
||||
const HTML_ESCAPE_MAP = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
'>': '>',
|
||||
'"': '"',
|
||||
"'": '''
|
||||
};
|
||||
|
||||
const Plugin = () => {
|
||||
|
||||
// The reveal.js instance this plugin is attached to
|
||||
let deck;
|
||||
|
||||
/**
|
||||
* Retrieves the markdown contents of a slide section
|
||||
* element. Normalizes leading tabs/whitespace.
|
||||
*/
|
||||
function getMarkdownFromSlide( section ) {
|
||||
|
||||
// look for a <script> or <textarea data-template> wrapper
|
||||
var template = section.querySelector( '[data-template]' ) || section.querySelector( 'script' );
|
||||
|
||||
// strip leading whitespace so it isn't evaluated as code
|
||||
var text = ( template || section ).textContent;
|
||||
|
||||
// restore script end tags
|
||||
text = text.replace( new RegExp( SCRIPT_END_PLACEHOLDER, 'g' ), '</script>' );
|
||||
|
||||
var leadingWs = text.match( /^\n?(\s*)/ )[1].length,
|
||||
leadingTabs = text.match( /^\n?(\t*)/ )[1].length;
|
||||
|
||||
if( leadingTabs > 0 ) {
|
||||
text = text.replace( new RegExp('\\n?\\t{' + leadingTabs + '}','g'), '\n' );
|
||||
}
|
||||
else if( leadingWs > 1 ) {
|
||||
text = text.replace( new RegExp('\\n? {' + leadingWs + '}', 'g'), '\n' );
|
||||
}
|
||||
|
||||
return text;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Given a markdown slide section element, this will
|
||||
* return all arguments that aren't related to markdown
|
||||
* parsing. Used to forward any other user-defined arguments
|
||||
* to the output markdown slide.
|
||||
*/
|
||||
function getForwardedAttributes( section ) {
|
||||
|
||||
var attributes = section.attributes;
|
||||
var result = [];
|
||||
|
||||
for( var i = 0, len = attributes.length; i < len; i++ ) {
|
||||
var name = attributes[i].name,
|
||||
value = attributes[i].value;
|
||||
|
||||
// disregard attributes that are used for markdown loading/parsing
|
||||
if( /data\-(markdown|separator|vertical|notes)/gi.test( name ) ) continue;
|
||||
|
||||
if( value ) {
|
||||
result.push( name + '="' + value + '"' );
|
||||
}
|
||||
else {
|
||||
result.push( name );
|
||||
}
|
||||
}
|
||||
|
||||
return result.join( ' ' );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Inspects the given options and fills out default
|
||||
* values for what's not defined.
|
||||
*/
|
||||
function getSlidifyOptions( options ) {
|
||||
|
||||
options = options || {};
|
||||
options.separator = options.separator || DEFAULT_SLIDE_SEPARATOR;
|
||||
options.notesSeparator = options.notesSeparator || DEFAULT_NOTES_SEPARATOR;
|
||||
options.attributes = options.attributes || '';
|
||||
|
||||
return options;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper function for constructing a markdown slide.
|
||||
*/
|
||||
function createMarkdownSlide( content, options ) {
|
||||
|
||||
options = getSlidifyOptions( options );
|
||||
|
||||
var notesMatch = content.split( new RegExp( options.notesSeparator, 'mgi' ) );
|
||||
|
||||
if( notesMatch.length === 2 ) {
|
||||
content = notesMatch[0] + '<aside class="notes">' + marked(notesMatch[1].trim()) + '</aside>';
|
||||
}
|
||||
|
||||
// prevent script end tags in the content from interfering
|
||||
// with parsing
|
||||
content = content.replace( /<\/script>/g, SCRIPT_END_PLACEHOLDER );
|
||||
|
||||
return '<script type="text/template">' + content + '</script>';
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a data string into multiple slides based
|
||||
* on the passed in separator arguments.
|
||||
*/
|
||||
function slidify( markdown, options ) {
|
||||
|
||||
options = getSlidifyOptions( options );
|
||||
|
||||
var separatorRegex = new RegExp( options.separator + ( options.verticalSeparator ? '|' + options.verticalSeparator : '' ), 'mg' ),
|
||||
horizontalSeparatorRegex = new RegExp( options.separator );
|
||||
|
||||
var matches,
|
||||
lastIndex = 0,
|
||||
isHorizontal,
|
||||
wasHorizontal = true,
|
||||
content,
|
||||
sectionStack = [];
|
||||
|
||||
// iterate until all blocks between separators are stacked up
|
||||
while( matches = separatorRegex.exec( markdown ) ) {
|
||||
var notes = null;
|
||||
|
||||
// determine direction (horizontal by default)
|
||||
isHorizontal = horizontalSeparatorRegex.test( matches[0] );
|
||||
|
||||
if( !isHorizontal && wasHorizontal ) {
|
||||
// create vertical stack
|
||||
sectionStack.push( [] );
|
||||
}
|
||||
|
||||
// pluck slide content from markdown input
|
||||
content = markdown.substring( lastIndex, matches.index );
|
||||
|
||||
if( isHorizontal && wasHorizontal ) {
|
||||
// add to horizontal stack
|
||||
sectionStack.push( content );
|
||||
}
|
||||
else {
|
||||
// add to vertical stack
|
||||
sectionStack[sectionStack.length-1].push( content );
|
||||
}
|
||||
|
||||
lastIndex = separatorRegex.lastIndex;
|
||||
wasHorizontal = isHorizontal;
|
||||
}
|
||||
|
||||
// add the remaining slide
|
||||
( wasHorizontal ? sectionStack : sectionStack[sectionStack.length-1] ).push( markdown.substring( lastIndex ) );
|
||||
|
||||
var markdownSections = '';
|
||||
|
||||
// flatten the hierarchical stack, and insert <section data-markdown> tags
|
||||
for( var i = 0, len = sectionStack.length; i < len; i++ ) {
|
||||
// vertical
|
||||
if( sectionStack[i] instanceof Array ) {
|
||||
markdownSections += '<section '+ options.attributes +'>';
|
||||
|
||||
sectionStack[i].forEach( function( child ) {
|
||||
markdownSections += '<section data-markdown>' + createMarkdownSlide( child, options ) + '</section>';
|
||||
} );
|
||||
|
||||
markdownSections += '</section>';
|
||||
}
|
||||
else {
|
||||
markdownSections += '<section '+ options.attributes +' data-markdown>' + createMarkdownSlide( sectionStack[i], options ) + '</section>';
|
||||
}
|
||||
}
|
||||
|
||||
return markdownSections;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses any current data-markdown slides, splits
|
||||
* multi-slide markdown into separate sections and
|
||||
* handles loading of external markdown.
|
||||
*/
|
||||
function processSlides( scope ) {
|
||||
|
||||
return new Promise( function( resolve ) {
|
||||
|
||||
var externalPromises = [];
|
||||
|
||||
[].slice.call( scope.querySelectorAll( 'section[data-markdown]:not([data-markdown-parsed])') ).forEach( function( section, i ) {
|
||||
|
||||
if( section.getAttribute( 'data-markdown' ).length ) {
|
||||
|
||||
externalPromises.push( loadExternalMarkdown( section ).then(
|
||||
|
||||
// Finished loading external file
|
||||
function( xhr, url ) {
|
||||
section.outerHTML = slidify( xhr.responseText, {
|
||||
separator: section.getAttribute( 'data-separator' ),
|
||||
verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
|
||||
notesSeparator: section.getAttribute( 'data-separator-notes' ),
|
||||
attributes: getForwardedAttributes( section )
|
||||
});
|
||||
},
|
||||
|
||||
// Failed to load markdown
|
||||
function( xhr, url ) {
|
||||
section.outerHTML = '<section data-state="alert">' +
|
||||
'ERROR: The attempt to fetch ' + url + ' failed with HTTP status ' + xhr.status + '.' +
|
||||
'Check your browser\'s JavaScript console for more details.' +
|
||||
'<p>Remember that you need to serve the presentation HTML from a HTTP server.</p>' +
|
||||
'</section>';
|
||||
}
|
||||
|
||||
) );
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
section.outerHTML = slidify( getMarkdownFromSlide( section ), {
|
||||
separator: section.getAttribute( 'data-separator' ),
|
||||
verticalSeparator: section.getAttribute( 'data-separator-vertical' ),
|
||||
notesSeparator: section.getAttribute( 'data-separator-notes' ),
|
||||
attributes: getForwardedAttributes( section )
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Promise.all( externalPromises ).then( resolve );
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
function loadExternalMarkdown( section ) {
|
||||
|
||||
return new Promise( function( resolve, reject ) {
|
||||
|
||||
var xhr = new XMLHttpRequest(),
|
||||
url = section.getAttribute( 'data-markdown' );
|
||||
|
||||
var datacharset = section.getAttribute( 'data-charset' );
|
||||
|
||||
// see https://developer.mozilla.org/en-US/docs/Web/API/element.getAttribute#Notes
|
||||
if( datacharset != null && datacharset != '' ) {
|
||||
xhr.overrideMimeType( 'text/html; charset=' + datacharset );
|
||||
}
|
||||
|
||||
xhr.onreadystatechange = function( section, xhr ) {
|
||||
if( xhr.readyState === 4 ) {
|
||||
// file protocol yields status code 0 (useful for local debug, mobile applications etc.)
|
||||
if ( ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status === 0 ) {
|
||||
|
||||
resolve( xhr, url );
|
||||
|
||||
}
|
||||
else {
|
||||
|
||||
reject( xhr, url );
|
||||
|
||||
}
|
||||
}
|
||||
}.bind( this, section, xhr );
|
||||
|
||||
xhr.open( 'GET', url, true );
|
||||
|
||||
try {
|
||||
xhr.send();
|
||||
}
|
||||
catch ( e ) {
|
||||
console.warn( 'Failed to get the Markdown file ' + url + '. Make sure that the presentation and the file are served by a HTTP server and the file can be found there. ' + e );
|
||||
resolve( xhr, url );
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a node value has the attributes pattern.
|
||||
* If yes, extract it and add that value as one or several attributes
|
||||
* to the target element.
|
||||
*
|
||||
* You need Cache Killer on Chrome to see the effect on any FOM transformation
|
||||
* directly on refresh (F5)
|
||||
* http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development/7000899#answer-11786277
|
||||
*/
|
||||
function addAttributeInElement( node, elementTarget, separator ) {
|
||||
|
||||
var mardownClassesInElementsRegex = new RegExp( separator, 'mg' );
|
||||
var mardownClassRegex = new RegExp( "([^\"= ]+?)=\"([^\"]+?)\"|(data-[^\"= ]+?)(?=[\" ])", 'mg' );
|
||||
var nodeValue = node.nodeValue;
|
||||
var matches,
|
||||
matchesClass;
|
||||
if( matches = mardownClassesInElementsRegex.exec( nodeValue ) ) {
|
||||
|
||||
var classes = matches[1];
|
||||
nodeValue = nodeValue.substring( 0, matches.index ) + nodeValue.substring( mardownClassesInElementsRegex.lastIndex );
|
||||
node.nodeValue = nodeValue;
|
||||
while( matchesClass = mardownClassRegex.exec( classes ) ) {
|
||||
if( matchesClass[2] ) {
|
||||
elementTarget.setAttribute( matchesClass[1], matchesClass[2] );
|
||||
} else {
|
||||
elementTarget.setAttribute( matchesClass[3], "" );
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add attributes to the parent element of a text node,
|
||||
* or the element of an attribute node.
|
||||
*/
|
||||
function addAttributes( section, element, previousElement, separatorElementAttributes, separatorSectionAttributes ) {
|
||||
|
||||
if ( element != null && element.childNodes != undefined && element.childNodes.length > 0 ) {
|
||||
var previousParentElement = element;
|
||||
for( var i = 0; i < element.childNodes.length; i++ ) {
|
||||
var childElement = element.childNodes[i];
|
||||
if ( i > 0 ) {
|
||||
var j = i - 1;
|
||||
while ( j >= 0 ) {
|
||||
var aPreviousChildElement = element.childNodes[j];
|
||||
if ( typeof aPreviousChildElement.setAttribute == 'function' && aPreviousChildElement.tagName != "BR" ) {
|
||||
previousParentElement = aPreviousChildElement;
|
||||
break;
|
||||
}
|
||||
j = j - 1;
|
||||
}
|
||||
}
|
||||
var parentSection = section;
|
||||
if( childElement.nodeName == "section" ) {
|
||||
parentSection = childElement ;
|
||||
previousParentElement = childElement ;
|
||||
}
|
||||
if ( typeof childElement.setAttribute == 'function' || childElement.nodeType == Node.COMMENT_NODE ) {
|
||||
addAttributes( parentSection, childElement, previousParentElement, separatorElementAttributes, separatorSectionAttributes );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( element.nodeType == Node.COMMENT_NODE ) {
|
||||
if ( addAttributeInElement( element, previousElement, separatorElementAttributes ) == false ) {
|
||||
addAttributeInElement( element, section, separatorSectionAttributes );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts any current data-markdown slides in the
|
||||
* DOM to HTML.
|
||||
*/
|
||||
function convertSlides() {
|
||||
|
||||
var sections = deck.getRevealElement().querySelectorAll( '[data-markdown]:not([data-markdown-parsed])');
|
||||
|
||||
[].slice.call( sections ).forEach( function( section ) {
|
||||
|
||||
section.setAttribute( 'data-markdown-parsed', true )
|
||||
|
||||
var notes = section.querySelector( 'aside.notes' );
|
||||
var markdown = getMarkdownFromSlide( section );
|
||||
|
||||
section.innerHTML = marked( markdown );
|
||||
addAttributes( section, section, null, section.getAttribute( 'data-element-attributes' ) ||
|
||||
section.parentNode.getAttribute( 'data-element-attributes' ) ||
|
||||
DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR,
|
||||
section.getAttribute( 'data-attributes' ) ||
|
||||
section.parentNode.getAttribute( 'data-attributes' ) ||
|
||||
DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR);
|
||||
|
||||
// If there were notes, we need to re-add them after
|
||||
// having overwritten the section's HTML
|
||||
if( notes ) {
|
||||
section.appendChild( notes );
|
||||
}
|
||||
|
||||
} );
|
||||
|
||||
return Promise.resolve();
|
||||
|
||||
}
|
||||
|
||||
function escapeForHTML( input ) {
|
||||
|
||||
return input.replace( /([&<>'"])/g, char => HTML_ESCAPE_MAP[char] );
|
||||
|
||||
}
|
||||
|
||||
return {
|
||||
id: 'markdown',
|
||||
|
||||
/**
|
||||
* Starts processing and converting Markdown within the
|
||||
* current reveal.js deck.
|
||||
*/
|
||||
init: function( reveal ) {
|
||||
|
||||
deck = reveal;
|
||||
|
||||
let { renderer, animateLists, ...markedOptions } = deck.getConfig().markdown || {};
|
||||
|
||||
if( !renderer ) {
|
||||
renderer = new marked.Renderer();
|
||||
|
||||
renderer.code = ( code, language ) => {
|
||||
|
||||
// Off by default
|
||||
let lineNumbers = '';
|
||||
|
||||
// Users can opt in to show line numbers and highlight
|
||||
// specific lines.
|
||||
// ```javascript [] show line numbers
|
||||
// ```javascript [1,4-8] highlights lines 1 and 4-8
|
||||
if( CODE_LINE_NUMBER_REGEX.test( language ) ) {
|
||||
lineNumbers = language.match( CODE_LINE_NUMBER_REGEX )[1].trim();
|
||||
lineNumbers = `data-line-numbers="${lineNumbers}"`;
|
||||
language = language.replace( CODE_LINE_NUMBER_REGEX, '' ).trim();
|
||||
}
|
||||
|
||||
// Escape before this gets injected into the DOM to
|
||||
// avoid having the HTML parser alter our code before
|
||||
// highlight.js is able to read it
|
||||
code = escapeForHTML( code );
|
||||
|
||||
return `<pre><code ${lineNumbers} class="${language}">${code}</code></pre>`;
|
||||
};
|
||||
}
|
||||
|
||||
if( animateLists === true ) {
|
||||
renderer.listitem = text => `<li class="fragment">${text}</li>`;
|
||||
}
|
||||
|
||||
marked.setOptions( {
|
||||
renderer,
|
||||
...markedOptions
|
||||
} );
|
||||
|
||||
return processSlides( deck.getRevealElement() ).then( convertSlides );
|
||||
|
||||
},
|
||||
|
||||
// TODO: Do these belong in the API?
|
||||
processSlides: processSlides,
|
||||
convertSlides: convertSlides,
|
||||
slidify: slidify,
|
||||
marked: marked
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
export default Plugin;
|
|
@ -0,0 +1,96 @@
|
|||
/**
|
||||
* A plugin which enables rendering of math equations inside
|
||||
* of reveal.js slides. Essentially a thin wrapper for KaTeX.
|
||||
*
|
||||
* @author Hakim El Hattab
|
||||
* @author Gerhard Burger
|
||||
*/
|
||||
export const KaTeX = () => {
|
||||
let deck;
|
||||
|
||||
let defaultOptions = {
|
||||
version: 'latest',
|
||||
delimiters: [
|
||||
{left: '$$', right: '$$', display: true}, // Note: $$ has to come before $
|
||||
{left: '$', right: '$', display: false},
|
||||
{left: '\\(', right: '\\)', display: false},
|
||||
{left: '\\[', right: '\\]', display: true}
|
||||
],
|
||||
ignoredTags: ['script', 'noscript', 'style', 'textarea', 'pre']
|
||||
}
|
||||
|
||||
const loadCss = src => {
|
||||
let link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.href = src;
|
||||
document.head.appendChild(link);
|
||||
};
|
||||
|
||||
/**
|
||||
* Loads a JavaScript file and returns a Promise for when it is loaded
|
||||
* Credits: https://aaronsmith.online/easily-load-an-external-script-using-javascript/
|
||||
*/
|
||||
const loadScript = src => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const script = document.createElement('script')
|
||||
script.type = 'text/javascript'
|
||||
script.onload = resolve
|
||||
script.onerror = reject
|
||||
script.src = src
|
||||
document.head.append(script)
|
||||
})
|
||||
};
|
||||
|
||||
async function loadScripts(urls) {
|
||||
for(const url of urls) {
|
||||
await loadScript(url);
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
id: 'katex',
|
||||
|
||||
init: function (reveal) {
|
||||
|
||||
deck = reveal;
|
||||
|
||||
let revealOptions = deck.getConfig().katex || {};
|
||||
|
||||
let options = {...defaultOptions, ...revealOptions};
|
||||
const {local, version, extensions, ...katexOptions} = options;
|
||||
|
||||
let baseUrl = options.local || 'https://cdn.jsdelivr.net/npm/katex';
|
||||
let versionString = options.local ? '' : '@' + options.version;
|
||||
|
||||
let cssUrl = baseUrl + versionString + '/dist/katex.min.css';
|
||||
let katexUrl = baseUrl + versionString + '/dist/katex.min.js';
|
||||
let mhchemUrl = baseUrl + versionString + '/dist/contrib/mhchem.min.js'
|
||||
let karUrl = baseUrl + versionString + '/dist/contrib/auto-render.min.js';
|
||||
|
||||
let katexScripts = [katexUrl];
|
||||
if(options.extensions && options.extensions.includes("mhchem")) {
|
||||
katexScripts.push(mhchemUrl);
|
||||
}
|
||||
katexScripts.push(karUrl);
|
||||
|
||||
const renderMath = () => {
|
||||
renderMathInElement(reveal.getSlidesElement(), katexOptions);
|
||||
deck.layout();
|
||||
}
|
||||
|
||||
loadCss(cssUrl);
|
||||
|
||||
// For some reason dynamically loading with defer attribute doesn't result in the expected behavior, the below code does
|
||||
loadScripts(katexScripts).then(() => {
|
||||
if( deck.isReady() ) {
|
||||
renderMath();
|
||||
}
|
||||
else {
|
||||
deck.on( 'ready', renderMath.bind( this ) );
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
};
|