vault backup: 2023-04-16 20:30:09

This commit is contained in:
2023-04-16 20:30:09 +02:00
parent 2d4c2ca436
commit ce4c6ab3bc
317 changed files with 43817 additions and 104047 deletions

View File

@@ -4,5 +4,22 @@
"better-pdf-plugin", "better-pdf-plugin",
"table-editor-obsidian", "table-editor-obsidian",
"obsidian-plugin-toc", "obsidian-plugin-toc",
"obsidian-dynamic-toc" "obsidian-dynamic-toc",
"obsidian-livesync",
"obsidian-advanced-slides",
"calendar",
"obsidian-completr",
"code-block-copy",
"drawio-obsidian",
"obsidian-dictionary-plugin",
"cm-editor-syntax-highlight-obsidian",
"obsidian-excel-to-markdown-table",
"execute-code",
"obsidian-icons-plugin",
"obsidian-image-toolkit",
"juggl",
"obsidian-languagetool-plugin",
"nldates-obsidian",
"url-into-selection",
"quick-latex"
] ]

View File

@@ -12,10 +12,10 @@
"templates": true, "templates": true,
"note-composer": true, "note-composer": true,
"command-palette": true, "command-palette": true,
"slash-command": false, "slash-command": true,
"editor-status": true, "editor-status": true,
"starred": true, "starred": true,
"markdown-importer": false, "markdown-importer": true,
"zk-prefixer": false, "zk-prefixer": false,
"random-note": false, "random-note": false,
"outline": true, "outline": true,

View File

@@ -12,8 +12,10 @@
"templates", "templates",
"note-composer", "note-composer",
"command-palette", "command-palette",
"slash-command",
"editor-status", "editor-status",
"starred", "starred",
"markdown-importer",
"outline", "outline",
"word-count", "word-count",
"file-recovery" "file-recovery"

10
.obsidian/graph.json vendored
View File

@@ -12,11 +12,11 @@
"textFadeMultiplier": 0, "textFadeMultiplier": 0,
"nodeSizeMultiplier": 1, "nodeSizeMultiplier": 1,
"lineSizeMultiplier": 1, "lineSizeMultiplier": 1,
"collapse-forces": false, "collapse-forces": true,
"centerStrength": 1, "centerStrength": 0.518713248970312,
"repelStrength": 0, "repelStrength": 10,
"linkStrength": 0, "linkStrength": 1,
"linkDistance": 500, "linkDistance": 250,
"scale": 1, "scale": 1,
"close": false "close": false
} }

View File

@@ -1 +1,18 @@
{} {
"obsidian-git:commit": [
{
"modifiers": [
"Alt"
],
"key": "C"
}
],
"obsidian-git:push2": [
{
"modifiers": [
"Alt"
],
"key": "P"
}
]
}

View File

@@ -2,73 +2,73 @@
var obsidian = require('obsidian'); var obsidian = require('obsidian');
/*! ***************************************************************************** /*! *****************************************************************************
Copyright (c) Microsoft Corporation. Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted. purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE. PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */ ***************************************************************************** */
/* global Reflect, Promise */ /* global Reflect, Promise */
var extendStatics = function(d, b) { var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b); return extendStatics(d, b);
}; };
function __extends(d, b) { function __extends(d, b) {
if (typeof b !== "function" && b !== null) if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b); extendStatics(d, b);
function __() { this.constructor = d; } function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
} }
function __awaiter(thisArg, _arguments, P, generator) { function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) { return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next()); step((generator = generator.apply(thisArg, _arguments || [])).next());
}); });
} }
function __generator(thisArg, body) { function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; } function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) { function step(op) {
if (f) throw new TypeError("Generator is already executing."); if (f) throw new TypeError("Generator is already executing.");
while (_) try { while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value]; if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) { switch (op[0]) {
case 0: case 1: t = op; break; case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false }; case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue; case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue; case 7: op = _.ops.pop(); _.trys.pop(); continue;
default: default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop(); if (t[2]) _.ops.pop();
_.trys.pop(); continue; _.trys.pop(); continue;
} }
op = body.call(thisArg, _); op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
} }
} }
var codemirror = CodeMirror; var codemirror = CodeMirror;

View File

@@ -2,71 +2,71 @@
var obsidian = require('obsidian'); var obsidian = require('obsidian');
/*! ***************************************************************************** /*! *****************************************************************************
Copyright (c) Microsoft Corporation. Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted. purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE. PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */ ***************************************************************************** */
/* global Reflect, Promise */ /* global Reflect, Promise */
var extendStatics = function(d, b) { var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b); return extendStatics(d, b);
}; };
function __extends(d, b) { function __extends(d, b) {
extendStatics(d, b); extendStatics(d, b);
function __() { this.constructor = d; } function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
} }
function __awaiter(thisArg, _arguments, P, generator) { function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) { return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next()); step((generator = generator.apply(thisArg, _arguments || [])).next());
}); });
} }
function __generator(thisArg, body) { function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; } function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) { function step(op) {
if (f) throw new TypeError("Generator is already executing."); if (f) throw new TypeError("Generator is already executing.");
while (_) try { while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value]; if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) { switch (op[0]) {
case 0: case 1: t = op; break; case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false }; case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue; case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue; case 7: op = _.ops.pop(); _.trys.pop(); continue;
default: default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop(); if (t[2]) _.ops.pop();
_.trys.pop(); continue; _.trys.pop(); continue;
} }
op = body.call(thisArg, _); op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
} }
} }
var excludeLangs = [ var excludeLangs = [

View File

@@ -1,10 +1,10 @@
{ {
"id": "drawio-obsidian", "id": "drawio-obsidian",
"name": "Diagrams", "name": "Diagrams",
"version": "1.5.0", "version": "1.5.0",
"minAppVersion": "0.9.12", "minAppVersion": "0.9.12",
"description": "Draw.io diagrams for Obsidian. This plugin introduces diagrams that can be included within notes or as stand-alone files. Diagrams are created as SVG files (although .drawio extensions are also supported).", "description": "Draw.io diagrams for Obsidian. This plugin introduces diagrams that can be included within notes or as stand-alone files. Diagrams are created as SVG files (although .drawio extensions are also supported).",
"author": "Sam Greenhalgh", "author": "Sam Greenhalgh",
"authorUrl": "https://www.radicalresearch.co.uk/", "authorUrl": "https://www.radicalresearch.co.uk/",
"isDesktopOnly": true "isDesktopOnly": true
} }

View File

@@ -1,28 +1,28 @@
.progress-bar-line { .progress-bar-line {
width: 100%; width: 100%;
left: 0; left: 0;
} }
.progress-bar-indicator { .progress-bar-indicator {
width: 90%; width: 90%;
margin: 0 10%; margin: 0 10%;
} }
.diagram-view svg { .diagram-view svg {
max-width: 100%; max-width: 100%;
max-height: 100%; max-height: 100%;
display: block; display: block;
} }
.diagram-view svg a:link, .diagram-view svg a:link,
.diagram-view svg a:visited { .diagram-view svg a:visited {
color: var(--interactive-accent, #00f); color: var(--interactive-accent, #00f);
filter: drop-shadow( filter: drop-shadow(
0 0 3px rgba(var(--interactive-accent-rgb, "0, 0, 255"), 0.5) 0 0 3px rgba(var(--interactive-accent-rgb, "0, 0, 255"), 0.5)
); );
} }
.diagram-view svg a:hover { .diagram-view svg a:hover {
color: var(--interactive-accent-hover, #00f); color: var(--interactive-accent-hover, #00f);
filter: drop-shadow(0 0 3px var(--interactive-accent-hover, #00f)); filter: drop-shadow(0 0 3px var(--interactive-accent-hover, #00f));
} }

View File

@@ -1,10 +1,10 @@
{ {
"id": "execute-code", "id": "execute-code",
"name": "Execute Code", "name": "Execute Code",
"version": "1.8.0", "version": "1.8.0",
"minAppVersion": "0.12.0", "minAppVersion": "0.12.0",
"description": "Allows to execute code snippets within a note. Supported programming languages: C, CPP, Dart, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lean, Lua, CSharp, Prolog, Rust, Python, R, Ruby, Wolfram Mathematica, Haskell, Scala, Racket, F#, Batch, Shell & Powershell.", "description": "Allows to execute code snippets within a note. Supported programming languages: C, CPP, Dart, Golang, Groovy, Kotlin, Java, JavaScript, TypeScript, Lean, Lua, CSharp, Prolog, Rust, Python, R, Ruby, Wolfram Mathematica, Haskell, Scala, Racket, F#, Batch, Shell & Powershell.",
"author": "twibiral", "author": "twibiral",
"authorUrl": "https://www.github.com/twibiral", "authorUrl": "https://www.github.com/twibiral",
"isDesktopOnly": true "isDesktopOnly": true
} }

View File

@@ -1,218 +1,218 @@
/* @settings /* @settings
name: Execute Code Settings name: Execute Code Settings
id: obsidian-execute-code id: obsidian-execute-code
settings: settings:
- -
id: color-section-title id: color-section-title
title: Color Settings title: Color Settings
type: heading type: heading
level: 3 level: 3
- -
id: use-custom-output-color id: use-custom-output-color
title: Custom Code Output Color title: Custom Code Output Color
description: Use a custom color for the output of code blocks description: Use a custom color for the output of code blocks
type: class-toggle type: class-toggle
default: false default: false
- -
id: code-output-text-color id: code-output-text-color
title: Output Text Color title: Output Text Color
type: variable-color type: variable-color
format: hex format: hex
opacity: false opacity: false
default: '#FFFFFF' default: '#FFFFFF'
- -
id: use-custom-error-color id: use-custom-error-color
title: Custom Code Error Color title: Custom Code Error Color
description: Use a custom color for the error output of code blocks description: Use a custom color for the error output of code blocks
type: class-toggle type: class-toggle
default: false default: false
- -
id: code-error-text-color id: code-error-text-color
title: Error Text Color title: Error Text Color
type: variable-color type: variable-color
format: hex format: hex
opacity: false opacity: false
default: '#FF0000' default: '#FF0000'
*/ */
button.run-code-button { button.run-code-button {
display: none; display: none;
color: var(--text-muted); color: var(--text-muted);
position: absolute; position: absolute;
bottom: 0; bottom: 0;
right: 0; right: 0;
margin: 5px; margin: 5px;
padding: 5px 20px 5px 20px; padding: 5px 20px 5px 20px;
z-index: 100; z-index: 100;
} }
button.clear-button { button.clear-button {
display: none; display: none;
color: var(--text-muted); color: var(--text-muted);
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 0; left: 0;
margin: 5px; margin: 5px;
padding: 5px 20px 5px 20px; padding: 5px 20px 5px 20px;
z-index: 100; z-index: 100;
} }
pre:hover .run-code-button, pre:hover .clear-button { pre:hover .run-code-button, pre:hover .clear-button {
display: block; display: block;
} }
pre:hover .run-button-disabled, pre:hover .clear-button-disabled { pre:hover .run-button-disabled, pre:hover .clear-button-disabled {
display: none; display: none;
} }
.run-button-disabled, .clear-button-disabled { .run-button-disabled, .clear-button-disabled {
display: none; display: none;
} }
pre:hover code.language-output { pre:hover code.language-output {
margin-bottom: 28px; margin-bottom: 28px;
} }
:not(.use-custom-output-color) code.language-output span.stdout { :not(.use-custom-output-color) code.language-output span.stdout {
color: var(--text-muted) !important; color: var(--text-muted) !important;
} }
.use-custom-output-color code.language-output span.stdout { .use-custom-output-color code.language-output span.stdout {
color: var(--code-output-text-color) !important; color: var(--code-output-text-color) !important;
} }
:not(.use-custom-error-color) code.language-output span.stderr { :not(.use-custom-error-color) code.language-output span.stderr {
color: red !important; color: red !important;
} }
.use-custom-error-color code.language-output span.stderr { .use-custom-error-color code.language-output span.stderr {
color: var(--code-error-text-color) !important; color: var(--code-error-text-color) !important;
} }
code.language-output hr { code.language-output hr {
margin: 0 0 1em; margin: 0 0 1em;
} }
.settings-code-input-box textarea, .settings-code-input-box input { .settings-code-input-box textarea, .settings-code-input-box input {
min-width: 400px; min-width: 400px;
min-height: 100px; min-height: 100px;
font-family: monospace; font-family: monospace;
resize: vertical; resize: vertical;
} }
input.interactive-stdin { input.interactive-stdin {
font: inherit; font: inherit;
} }
.manage-executors-view h3 { .manage-executors-view h3 {
margin: 1em; margin: 1em;
} }
.manage-executors-view ul { .manage-executors-view ul {
margin: 1em; margin: 1em;
padding: 0; padding: 0;
list-style-type: none; list-style-type: none;
} }
.manage-executors-view ul li { .manage-executors-view ul li {
padding: 0.5em; padding: 0.5em;
background: var(--background-primary-alt); background: var(--background-primary-alt);
border-radius: 4px; border-radius: 4px;
display: grid; display: grid;
flex-direction: column; flex-direction: column;
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
.manage-executors-view small { .manage-executors-view small {
text-transform: uppercase; text-transform: uppercase;
font-weight: bold; font-weight: bold;
letter-spacing: 0.1ch; letter-spacing: 0.1ch;
grid-row: 1; grid-row: 1;
} }
.manage-executors-view .filename { .manage-executors-view .filename {
grid-row: 2; grid-row: 2;
} }
.manage-executors-view li button { .manage-executors-view li button {
grid-column: 2; grid-column: 2;
grid-row: 1 / 3; grid-row: 1 / 3;
margin: 0; margin: 0;
padding: 0.25em; padding: 0.25em;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
color: var(--text-muted); color: var(--text-muted);
background: none; background: none;
} }
.manage-executors-view li button:hover { .manage-executors-view li button:hover {
background: var(--background-tertiary); background: var(--background-tertiary);
color: var(--icon-color-hover); color: var(--icon-color-hover);
} }
.manage-executors-view > div { .manage-executors-view > div {
position: relative; position: relative;
} }
.manage-executors-view .empty-state { .manage-executors-view .empty-state {
color: var(--text-muted); color: var(--text-muted);
padding: 0.5em; padding: 0.5em;
} }
.has-run-code-button { .has-run-code-button {
position: relative; position: relative;
} }
.has-run-code-button pre { .has-run-code-button pre {
z-index: 1; z-index: 1;
} }
.load-state-indicator { .load-state-indicator {
position: absolute; position: absolute;
top: 0.1em; top: 0.1em;
left: -2em; left: -2em;
width: 2em; width: 2em;
height: 2em; height: 2em;
background: var(--background-primary-alt); background: var(--background-primary-alt);
border-top-left-radius: 4px; border-top-left-radius: 4px;
border-bottom-left-radius: 4px; border-bottom-left-radius: 4px;
color: var(--tx1); color: var(--tx1);
transform: translateX(2em); transform: translateX(2em);
transition: transform 0.25s, opacity 0.25s; transition: transform 0.25s, opacity 0.25s;
opacity: 0; opacity: 0;
pointer-events: none; pointer-events: none;
cursor: pointer; cursor: pointer;
} }
.load-state-indicator svg { .load-state-indicator svg {
width: 1.5em; width: 1.5em;
height: 1.5em; height: 1.5em;
margin: 0.25em; margin: 0.25em;
} }
.load-state-indicator.visible { .load-state-indicator.visible {
transform: translateX(0); transform: translateX(0);
transform: translateX(var(--folding-offset, 0)); transform: translateX(var(--folding-offset, 0));
opacity: 1; opacity: 1;
pointer-events: all; pointer-events: all;
} }
.load-state-indicator::before { .load-state-indicator::before {
content: ""; content: "";
box-shadow: -1em 0 1em -0.75em inset var(--background-modifier-box-shadow); box-shadow: -1em 0 1em -0.75em inset var(--background-modifier-box-shadow);
position: absolute; position: absolute;
display: block; display: block;
width: 100%; width: 100%;
height: 100%; height: 100%;
transform: translateX(-2em); transform: translateX(-2em);
opacity: 0; opacity: 0;
transition: transform 0.25s, opacity 0.25s; transition: transform 0.25s, opacity 0.25s;
pointer-events: none; pointer-events: none;
} }
.load-state-indicator.visible::before { .load-state-indicator.visible::before {
transform: translateX(0); transform: translateX(0);
opacity: 1; opacity: 1;
} }

View File

@@ -6,83 +6,83 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
/*! ***************************************************************************** /*! *****************************************************************************
Copyright (c) Microsoft Corporation. Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted. purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE. PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */ ***************************************************************************** */
/* global Reflect, Promise */ /* global Reflect, Promise */
var extendStatics = function(d, b) { var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b); return extendStatics(d, b);
}; };
function __extends(d, b) { function __extends(d, b) {
if (typeof b !== "function" && b !== null) if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b); extendStatics(d, b);
function __() { this.constructor = d; } function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
} }
function __awaiter(thisArg, _arguments, P, generator) { function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) { return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next()); step((generator = generator.apply(thisArg, _arguments || [])).next());
}); });
} }
function __generator(thisArg, body) { function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; } function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) { function step(op) {
if (f) throw new TypeError("Generator is already executing."); if (f) throw new TypeError("Generator is already executing.");
while (_) try { while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value]; if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) { switch (op[0]) {
case 0: case 1: t = op; break; case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false }; case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue; case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue; case 7: op = _.ops.pop(); _.trys.pop(); continue;
default: default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop(); if (t[2]) _.ops.pop();
_.trys.pop(); continue; _.trys.pop(); continue;
} }
op = body.call(thisArg, _); op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
} }
} }
function __spreadArray(to, from, pack) { function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) { if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i); if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i]; ar[i] = from[i];
} }
} }
return to.concat(ar || Array.prototype.slice.call(from)); return to.concat(ar || Array.prototype.slice.call(from));
} }
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

View File

@@ -1,10 +1,10 @@
{ {
"id": "nldates-obsidian", "id": "nldates-obsidian",
"name": "Natural Language Dates", "name": "Natural Language Dates",
"description": "Create date-links based on natural language", "description": "Create date-links based on natural language",
"version": "0.6.1", "version": "0.6.1",
"author": "Argentina Ortega Sainz", "author": "Argentina Ortega Sainz",
"authorUrl": "https://argentinaos.com/", "authorUrl": "https://argentinaos.com/",
"isDesktopOnly": false, "isDesktopOnly": false,
"minAppVersion": "0.13.0" "minAppVersion": "0.13.0"
} }

View File

@@ -1,160 +1,160 @@
# Chalkboard # Chalkboard
With this plugin you can add a chalkboard to reveal.js. The plugin provides two possibilities to include handwritten notes to your presentation: 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 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. - 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 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. 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) [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. The chalkboard effect is based on [Chalkboard](https://github.com/mmoustafa/Chalkboard) by Mohamed Moustafa.
## Installation ## 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. 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 ```html
<script src="plugin/chalkboard/plugin.js"></script> <script src="plugin/chalkboard/plugin.js"></script>
<script src="plugin/chalkboard/customcontrols.js"></script> <script src="plugin/chalkboard/customcontrols.js"></script>
<script> <script>
Reveal.initialize({ Reveal.initialize({
// ... // ...
plugins: [ RevealChalkboard, RevealCustomControls ], plugins: [ RevealChalkboard, RevealCustomControls ],
// ... // ...
}); });
</script> </script>
``` ```
The following stylesheet The following stylesheet
```html ```html
<link rel="stylesheet" href="plugin/chalkboard/style.css"> <link rel="stylesheet" href="plugin/chalkboard/style.css">
<link rel="stylesheet" href="plugin/customcontrols/style.css"> <link rel="stylesheet" href="plugin/customcontrols/style.css">
``` ```
has to be included to the `head` section of you HTML-file. 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 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"> <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. to the ```head``` section of you HTML-file.
## Usage ## Usage
### Mouse or touch ### Mouse or touch
- Click on the pen symbols at the bottom left to toggle the notes canvas or chalkboard - 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 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 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 left mouse button and drag to write on notes canvas or chalkboard
- Click the right mouse button and drag to wipe away previous drawings - Click the right mouse button and drag to wipe away previous drawings
- Touch and move to write on notes canvas or chalkboard - Touch and move to write on notes canvas or chalkboard
- Touch and hold for half a second, then move to wipe away previous drawings - Touch and hold for half a second, then move to wipe away previous drawings
### Keyboard ### Keyboard
- Press the 'BACKSPACE' key to delete all chalkboard drawings - Press the 'BACKSPACE' key to delete all chalkboard drawings
- Press the 'DEL' key to clear the notes canvas or chalkboard - Press the 'DEL' key to clear the notes canvas or chalkboard
- Press the 'c' key to toggle the notes canvas - Press the 'c' key to toggle the notes canvas
- Press the 'b' key to toggle the chalkboard - Press the 'b' key to toggle the chalkboard
- Press the 'd' key to download drawings - Press the 'd' key to download drawings
- Press the 'x' key to cycle colors forward - Press the 'x' key to cycle colors forward
- Press the 'y' key to cycle colors backward - Press the 'y' key to cycle colors backward
## Playback ## 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. 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 ## 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). 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 ## 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. 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 ## Configuration
The plugin has several configuration options: The plugin has several configuration options:
- ```boardmarkerWidth```: an integer, the drawing width of the boardmarker; larger values draw thicker lines. - ```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. - ```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```. - ```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. - ```storage```: Optional variable name for session storage of drawings.
- ```src```: Optional filename for pre-recorded 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). - ```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. - ```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"```. - ```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. 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. - ```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```. - ```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. - ```eraser```: An image path and radius for the eraser.
- ```boardmarkers```: A list of boardmarkers with given color and cursor. - ```boardmarkers```: A list of boardmarkers with given color and cursor.
- ```chalks```: A list of chalks 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. - ```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. All of the configurations are optional and the default values shown below are used if the options are not provided.
```javascript ```javascript
Reveal.initialize({ Reveal.initialize({
// ... // ...
chalkboard: { chalkboard: {
boardmarkerWidth: 3, boardmarkerWidth: 3,
chalkWidth: 7, chalkWidth: 7,
chalkEffect: 1.0, chalkEffect: 1.0,
storage: null, storage: null,
src: null, src: null,
readOnly: undefined, readOnly: undefined,
transition: 800, transition: 800,
theme: "chalkboard", theme: "chalkboard",
background: [ 'rgba(127,127,127,.1)' , path + 'img/blackboard.png' ], background: [ 'rgba(127,127,127,.1)' , path + 'img/blackboard.png' ],
grid: { color: 'rgb(50,50,10,0.5)', distance: 80, width: 2}, grid: { color: 'rgb(50,50,10,0.5)', distance: 80, width: 2},
eraser: { src: path + 'img/sponge.png', radius: 20}, eraser: { src: path + 'img/sponge.png', radius: 20},
boardmarkers : [ boardmarkers : [
{ color: 'rgba(100,100,100,1)', cursor: 'url(' + path + 'img/boardmarker-black.png), auto'}, { 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(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(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(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(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(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'} { color: 'rgba(255,220,0,1)', cursor: 'url(' + path + 'img/boardmarker-yellow.png), auto'}
], ],
chalks: [ chalks: [
{ color: 'rgba(255,255,255,0.5)', cursor: 'url(' + path + 'img/chalk-white.png), auto'}, { 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(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(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(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, 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(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'} { color: 'rgba(255,220,0,0.5)', cursor: 'url(' + path + 'img/chalk-yellow.png), auto'}
] ]
}, },
customcontrols: { customcontrols: {
controls: [ controls: [
{ icon: '<i class="fa fa-pen-square"></i>', { icon: '<i class="fa fa-pen-square"></i>',
title: 'Toggle chalkboard (B)', title: 'Toggle chalkboard (B)',
action: 'RevealChalkboard.toggleChalkboard();' action: 'RevealChalkboard.toggleChalkboard();'
}, },
{ icon: '<i class="fa fa-pen"></i>', { icon: '<i class="fa fa-pen"></i>',
title: 'Toggle notes canvas (C)', title: 'Toggle notes canvas (C)',
action: 'RevealChalkboard.toggleNotesCanvas();' action: 'RevealChalkboard.toggleNotesCanvas();'
} }
] ]
}, },
// ... // ...
}); });
``` ```
## License ## License
MIT licensed MIT licensed
Copyright (C) 2021 Asvin Goel Copyright (C) 2021 Asvin Goel

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,129 +1,129 @@
# Chart # Chart
A plugin for [Reveal.js](https://github.com/hakimel/reveal.js) allowing to easily add charts using [Chart.js](http://www.chartjs.org/). 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) [Check out the live demo](https://rajgoel.github.io/reveal.js-demos/chart-demo.html)
## Installation ## Installation
Copy the file `plugin.js` into the plugin folder of your reveal.js presentation, i.e. `plugin/chart`. 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. Add the plugin and Chart.js to the dependencies in your presentation, as below.
```html ```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.2.0/chart.min.js"></script> <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 src="plugin/chart/plugin.js"></script>
<script> <script>
Reveal.initialize({ Reveal.initialize({
// ... // ...
plugins: [ RevealChart ], plugins: [ RevealChart ],
// ... // ...
}); });
</script> </script>
``` ```
## Configuration ## 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. 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 ```javascript
Reveal.initialize({ Reveal.initialize({
// ... // ...
chart: { chart: {
defaults: { defaults: {
color: 'lightgray', // color of labels color: 'lightgray', // color of labels
scale: { scale: {
beginAtZero: true, beginAtZero: true,
ticks: { stepSize: 1 }, ticks: { stepSize: 1 },
grid: { color: "lightgray" } , // color of grid lines 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] ] }, 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)" ]}, 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)"] ]}, 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. 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 ## 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. 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. The chart can be configured within the canvas body by a JSON string embedded into an HTML comment.
```html ```html
<canvas data-chart="line" > <canvas data-chart="line" >
<!-- <!--
{ {
"data": { "data": {
"labels": ["January"," February"," March"," April"," May"," June"," July"], "labels": ["January"," February"," March"," April"," May"," June"," July"],
"datasets":[ "datasets":[
{ {
"data":[65,59,80,81,56,55,40], "data":[65,59,80,81,56,55,40],
"label":"My first dataset","backgroundColor":"rgba(20,220,220,.8)" "label":"My first dataset","backgroundColor":"rgba(20,220,220,.8)"
}, },
{ {
"data":[28,48,40,19,86,27,90], "data":[28,48,40,19,86,27,90],
"label":"My second dataset","backgroundColor":"rgba(220,120,120,.8)" "label":"My second dataset","backgroundColor":"rgba(220,120,120,.8)"
} }
] ]
} }
} }
--> -->
</canvas> </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. 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 ```html
<canvas class="stretch" data-chart="line"> <canvas class="stretch" data-chart="line">
My first dataset, 65, 59, 80, 81, 56, 55, 40 My first dataset, 65, 59, 80, 81, 56, 55, 40
<!-- This is a comment that will be ignored --> <!-- This is a comment that will be ignored -->
My second dataset, 28, 48, 40, 19, 86, 27, 90 My second dataset, 28, 48, 40, 19, 86, 27, 90
<!-- <!--
{ {
"data" : { "data" : {
"labels" : ["Enero", "Febrero", "Marzo", "Avril", "Mayo", "Junio", "Julio"], "labels" : ["Enero", "Febrero", "Marzo", "Avril", "Mayo", "Junio", "Julio"],
"datasets" : [{ "borderColor": "#0f0", "borderDash": ["5","10"] }, { "borderColor": "#0ff" } ] "datasets" : [{ "borderColor": "#0f0", "borderDash": ["5","10"] }, { "borderColor": "#0ff" } ]
} }
} }
--> -->
</canvas> </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. 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 ```html
<canvas data-chart="line"> <canvas data-chart="line">
Month, January, February, March, April, May, June, July Month, January, February, March, April, May, June, July
My first dataset, 65, 59, 80, 81, 56, 55, 40 My first dataset, 65, 59, 80, 81, 56, 55, 40
My second dataset, 28, 48, 40, 19, 86, 27, 90 My second dataset, 28, 48, 40, 19, 86, 27, 90
</canvas> </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. 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 ```html
<canvas data-chart="bar" data-chart-src="chart/data.csv"> <canvas data-chart="bar" data-chart-src="chart/data.csv">
<!-- <!--
{ {
"data" : { "data" : {
"datasets" : [{ "backgroundColor": "#0f0" }, { "backgroundColor": "#0ff" } ] "datasets" : [{ "backgroundColor": "#0f0" }, { "backgroundColor": "#0ff" } ]
}, },
"options": { "scales": { "x": { "stacked": true }, "y": { "stacked": true } } } "options": { "scales": { "x": { "stacked": true }, "y": { "stacked": true } } }
} }
--> -->
</canvas> </canvas>
``` ```
## License ## License
MIT licensed MIT licensed
Copyright (C) 2021 Asvin Goel Copyright (C) 2021 Asvin Goel

View File

@@ -1,72 +1,72 @@
# Custom controls # Custom controls
This plugin allows to add responsive custom controls to reveal.js which allow arbitrary positioning, layout, and behaviour of the 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) [Check out the live demo](https://rajgoel.github.io/reveal.js-demos/customcontrols-demo.html)
## Installation ## 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. 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 ```html
<link rel="stylesheet" href="plugin/customcontrols/style.css"> <link rel="stylesheet" href="plugin/customcontrols/style.css">
<script src="plugin/customcontrols/plugin.js"></script> <script src="plugin/customcontrols/plugin.js"></script>
<script> <script>
Reveal.initialize({ Reveal.initialize({
// ... // ...
plugins: [ RevealCustomControls ], plugins: [ RevealCustomControls ],
// ... // ...
}); });
</script> </script>
``` ```
Note, without configuration you need to add Note, without configuration you need to add
```javascript ```javascript
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"> <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/). between ```<head>``` and ```</head>``` of your HTML file because the defaults use [Font Awesome](http://fontawesome.io/).
## Configuration ## Configuration
The plugin can be configured by adding custom controls and changing the layout of the slide number, e.g., by: The plugin can be configured by adding custom controls and changing the layout of the slide number, e.g., by:
```javascript ```javascript
Reveal.initialize({ Reveal.initialize({
// ... // ...
customcontrols: { customcontrols: {
controls: [ controls: [
{ {
id: 'toggle-overview', id: 'toggle-overview',
title: 'Toggle overview (O)', title: 'Toggle overview (O)',
icon: '<i class="fa fa-th"></i>', icon: '<i class="fa fa-th"></i>',
action: 'Reveal.toggleOverview();' action: 'Reveal.toggleOverview();'
}, },
{ icon: '<i class="fa fa-pen-square"></i>', { icon: '<i class="fa fa-pen-square"></i>',
title: 'Toggle chalkboard (B)', title: 'Toggle chalkboard (B)',
action: 'RevealChalkboard.toggleChalkboard();' action: 'RevealChalkboard.toggleChalkboard();'
}, },
{ icon: '<i class="fa fa-pen"></i>', { icon: '<i class="fa fa-pen"></i>',
title: 'Toggle notes canvas (C)', title: 'Toggle notes canvas (C)',
action: 'RevealChalkboard.toggleNotesCanvas();' 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. 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 ## License
MIT licensed MIT licensed
Copyright (C) 2020 Asvin Goel Copyright (C) 2020 Asvin Goel

Some files were not shown because too many files have changed in this diff Show More