mirror of https://git.door43.org/Andley/BG4e
vault backup: 2023-09-13 09:35:26
Affected files: .obsidian/community-plugins.json .obsidian/plugins/control-characters/data.json .obsidian/plugins/control-characters/main.js .obsidian/plugins/control-characters/manifest.json .obsidian/plugins/control-characters/styles.css .obsidian/plugins/obsidian-hider/data.json .obsidian/workspace.json BG4E-ExpPreaching/JesusChrist-vs-ChristJesus.md BG4E-ExpPreaching/Sermon-1-Key.md images/00015.png images/DFNTG-cover.png images/DGGNT-cover.png images/Mounce-Reader2.png images/Pasted image 20210803200538.png
This commit is contained in:
parent
92bcb1c288
commit
ad1c92b848
|
@ -3,5 +3,6 @@
|
||||||
"obsidian-hider",
|
"obsidian-hider",
|
||||||
"obsidian-tidy-footnotes",
|
"obsidian-tidy-footnotes",
|
||||||
"obsidian-git",
|
"obsidian-git",
|
||||||
"wikilinks-to-mdlinks-obsidian"
|
"wikilinks-to-mdlinks-obsidian",
|
||||||
|
"control-characters"
|
||||||
]
|
]
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"newLine": false,
|
||||||
|
"tab": true,
|
||||||
|
"space": true,
|
||||||
|
"enabled": true,
|
||||||
|
"selection": false
|
||||||
|
}
|
|
@ -0,0 +1,331 @@
|
||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
https://github.com/joethei/obsidian-non-printing-chars
|
||||||
|
*/
|
||||||
|
|
||||||
|
var __create = Object.create;
|
||||||
|
var __defProp = Object.defineProperty;
|
||||||
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||||
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||||
|
var __getProtoOf = Object.getPrototypeOf;
|
||||||
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||||
|
var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
|
||||||
|
var __export = (target, all) => {
|
||||||
|
__markAsModule(target);
|
||||||
|
for (var name in all)
|
||||||
|
__defProp(target, name, { get: all[name], enumerable: true });
|
||||||
|
};
|
||||||
|
var __reExport = (target, module2, desc) => {
|
||||||
|
if (module2 && typeof module2 === "object" || typeof module2 === "function") {
|
||||||
|
for (let key of __getOwnPropNames(module2))
|
||||||
|
if (!__hasOwnProp.call(target, key) && key !== "default")
|
||||||
|
__defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
|
||||||
|
}
|
||||||
|
return target;
|
||||||
|
};
|
||||||
|
var __toModule = (module2) => {
|
||||||
|
return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
|
||||||
|
};
|
||||||
|
var __async = (__this, __arguments, generator) => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
var fulfilled = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.next(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var rejected = (value) => {
|
||||||
|
try {
|
||||||
|
step(generator.throw(value));
|
||||||
|
} catch (e) {
|
||||||
|
reject(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||||
|
step((generator = generator.apply(__this, __arguments)).next());
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
__export(exports, {
|
||||||
|
default: () => ControlCharacterPlugin
|
||||||
|
});
|
||||||
|
var import_obsidian4 = __toModule(require("obsidian"));
|
||||||
|
var import_state2 = __toModule(require("@codemirror/state"));
|
||||||
|
|
||||||
|
// src/SettingsTab.ts
|
||||||
|
var import_obsidian = __toModule(require("obsidian"));
|
||||||
|
var ControlCharactersSettingsTab = class extends import_obsidian.PluginSettingTab {
|
||||||
|
constructor(plugin) {
|
||||||
|
super(plugin.app, plugin);
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
display() {
|
||||||
|
const { containerEl } = this;
|
||||||
|
containerEl.empty();
|
||||||
|
containerEl.createEl("h2", { text: "Control Characters" });
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Only show control characters in selection").addToggle((toggle) => {
|
||||||
|
toggle.setValue(this.plugin.settings.selection).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.selection = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
containerEl.createEl("h3", { text: "Show" });
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Space").addToggle((toggle) => {
|
||||||
|
toggle.setValue(this.plugin.settings.space).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.space = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("Tab").addToggle((toggle) => {
|
||||||
|
toggle.setValue(this.plugin.settings.tab).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.tab = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
new import_obsidian.Setting(containerEl).setName("New line").addToggle((toggle) => {
|
||||||
|
toggle.setValue(this.plugin.settings.newLine).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.newLine = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/NormalDecoration.ts
|
||||||
|
var import_view3 = __toModule(require("@codemirror/view"));
|
||||||
|
|
||||||
|
// src/StatefulDecoration.ts
|
||||||
|
var import_state = __toModule(require("@codemirror/state"));
|
||||||
|
var import_view = __toModule(require("@codemirror/view"));
|
||||||
|
var statefulDecorations = defineStatefulDecoration();
|
||||||
|
function defineStatefulDecoration() {
|
||||||
|
const update = import_state.StateEffect.define();
|
||||||
|
const field = import_state.StateField.define({
|
||||||
|
create() {
|
||||||
|
return import_view.Decoration.none;
|
||||||
|
},
|
||||||
|
update(deco, tr) {
|
||||||
|
return tr.effects.reduce((deco2, effect) => effect.is(update) ? effect.value : deco2, deco.map(tr.changes));
|
||||||
|
},
|
||||||
|
provide: (field2) => import_view.EditorView.decorations.from(field2)
|
||||||
|
});
|
||||||
|
return { update, field };
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/StatefulDecorationSet.ts
|
||||||
|
var import_view2 = __toModule(require("@codemirror/view"));
|
||||||
|
var import_obsidian2 = __toModule(require("obsidian"));
|
||||||
|
var StatefulDecorationSet = class {
|
||||||
|
constructor(editor) {
|
||||||
|
this.decoCache = Object.create(null);
|
||||||
|
this.debouncedUpdate = (0, import_obsidian2.debounce)(this.updateAsyncDecorations, 10, true);
|
||||||
|
this.editor = editor;
|
||||||
|
}
|
||||||
|
computeAsyncDecorations(tokens) {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
const decorations = [];
|
||||||
|
for (const token of tokens) {
|
||||||
|
let deco = this.decoCache[token.value];
|
||||||
|
if (!deco) {
|
||||||
|
deco = this.decoCache[token.value] = import_view2.Decoration.mark({
|
||||||
|
class: "control-character",
|
||||||
|
attributes: { type: token.value }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
decorations.push(deco.range(token.from, token.to));
|
||||||
|
}
|
||||||
|
return import_view2.Decoration.set(decorations, true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
updateAsyncDecorations(tokens) {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
const decorations = yield this.computeAsyncDecorations(tokens);
|
||||||
|
if (decorations || this.editor.state.field(statefulDecorations.field).size) {
|
||||||
|
this.editor.dispatch({ effects: statefulDecorations.update.of(decorations || import_view2.Decoration.none) });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/FrontmatterParser.ts
|
||||||
|
var import_obsidian3 = __toModule(require("obsidian"));
|
||||||
|
function parseFrontmatter(view, settings) {
|
||||||
|
const result = {
|
||||||
|
enabled: settings.enabled,
|
||||||
|
newLine: settings.newLine,
|
||||||
|
selection: settings.selection,
|
||||||
|
space: settings.space,
|
||||||
|
tab: settings.tab
|
||||||
|
};
|
||||||
|
const matches = view.state.sliceDoc().match(/---([\s\S]*?)---/);
|
||||||
|
if (matches && matches.length !== 0) {
|
||||||
|
for (const match of matches) {
|
||||||
|
const replaced = match.replace(/---/g, "");
|
||||||
|
try {
|
||||||
|
const frontmatter = (0, import_obsidian3.parseYaml)(replaced);
|
||||||
|
if (frontmatter.hasOwnProperty("cc")) {
|
||||||
|
result.enabled = frontmatter.cc;
|
||||||
|
}
|
||||||
|
if (frontmatter.hasOwnProperty("cc-tab")) {
|
||||||
|
result.tab = frontmatter["cc-tab"];
|
||||||
|
}
|
||||||
|
if (frontmatter.hasOwnProperty("cc-newline")) {
|
||||||
|
result.newLine = frontmatter["cc-newline"];
|
||||||
|
}
|
||||||
|
if (frontmatter.hasOwnProperty("cc-space")) {
|
||||||
|
result.space = frontmatter["cc-space"];
|
||||||
|
}
|
||||||
|
if (frontmatter.hasOwnProperty("cc-selection")) {
|
||||||
|
result.selection = frontmatter["cc-selection"];
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/NormalDecoration.ts
|
||||||
|
function buildViewPlugin(plugin) {
|
||||||
|
return import_view3.ViewPlugin.fromClass(class {
|
||||||
|
constructor(view) {
|
||||||
|
this.decoManager = new StatefulDecorationSet(view);
|
||||||
|
this.buildAsyncDecorations(view, plugin.settings);
|
||||||
|
}
|
||||||
|
update(update) {
|
||||||
|
if (update.docChanged || update.viewportChanged) {
|
||||||
|
const frontmatter = parseFrontmatter(update.view, plugin.settings);
|
||||||
|
if (!frontmatter.enabled || frontmatter.selection) {
|
||||||
|
this.decoManager.debouncedUpdate([]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.buildAsyncDecorations(update.view, frontmatter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buildAsyncDecorations(view, settings) {
|
||||||
|
const targetElements = [];
|
||||||
|
for (const { from, to } of view.visibleRanges) {
|
||||||
|
targetElements.push(...plugin.getTokens(view, from, to, settings));
|
||||||
|
}
|
||||||
|
this.decoManager.debouncedUpdate(targetElements);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function normalDecoration(plugin) {
|
||||||
|
return [statefulDecorations.field, buildViewPlugin(plugin)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/settings.ts
|
||||||
|
var DEFAULT_SETTINGS = {
|
||||||
|
newLine: true,
|
||||||
|
tab: true,
|
||||||
|
space: true,
|
||||||
|
enabled: true,
|
||||||
|
selection: false
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/SelectionHighlight.ts
|
||||||
|
var import_view4 = __toModule(require("@codemirror/view"));
|
||||||
|
function buildViewPlugin2(plugin) {
|
||||||
|
return import_view4.ViewPlugin.fromClass(class {
|
||||||
|
constructor(view) {
|
||||||
|
this.decoManager = new StatefulDecorationSet(view);
|
||||||
|
const frontmatter = parseFrontmatter(view, plugin.settings);
|
||||||
|
if (!frontmatter.selection) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.buildAsyncDecorations(view, parseFrontmatter(view, plugin.settings));
|
||||||
|
}
|
||||||
|
update(update) {
|
||||||
|
const frontmatter = parseFrontmatter(update.view, plugin.settings);
|
||||||
|
if (!frontmatter.selection) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (update.selectionSet || update.docChanged || update.viewportChanged) {
|
||||||
|
this.buildAsyncDecorations(update.view, frontmatter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buildAsyncDecorations(view, settings) {
|
||||||
|
const targetElements = [];
|
||||||
|
for (const range of view.state.selection.ranges) {
|
||||||
|
targetElements.push(...plugin.getTokens(view, range.from, range.to, settings));
|
||||||
|
}
|
||||||
|
this.decoManager.debouncedUpdate(targetElements);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function selectionDecorations(plugin) {
|
||||||
|
return [statefulDecorations.field, buildViewPlugin2(plugin)];
|
||||||
|
}
|
||||||
|
|
||||||
|
// src/types.ts
|
||||||
|
var ControlCharacter;
|
||||||
|
(function(ControlCharacter2) {
|
||||||
|
ControlCharacter2["NEWLINE"] = "newline";
|
||||||
|
ControlCharacter2["SPACE"] = "space";
|
||||||
|
ControlCharacter2["TAB"] = "tab";
|
||||||
|
ControlCharacter2["OTHER"] = "other";
|
||||||
|
})(ControlCharacter || (ControlCharacter = {}));
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
var ControlCharacterPlugin = class extends import_obsidian4.Plugin {
|
||||||
|
onload() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
if (!this.app.vault.getConfig("legacyEditor")) {
|
||||||
|
yield this.loadSettings();
|
||||||
|
this.registerEditorExtension(import_state2.Prec.lowest(normalDecoration(this)));
|
||||||
|
this.registerEditorExtension(import_state2.Prec.lowest(selectionDecorations(this)));
|
||||||
|
this.addSettingTab(new ControlCharactersSettingsTab(this));
|
||||||
|
this.addCommand({
|
||||||
|
id: "toggle",
|
||||||
|
name: "Show/hide control characters",
|
||||||
|
callback: () => __async(this, null, function* () {
|
||||||
|
this.settings.enabled = !this.settings.enabled;
|
||||||
|
console.log(this.settings.enabled);
|
||||||
|
yield this.saveSettings();
|
||||||
|
this.app.workspace.updateOptions();
|
||||||
|
})
|
||||||
|
});
|
||||||
|
this.app.workspace.trigger("parse-style-settings");
|
||||||
|
} else {
|
||||||
|
new import_obsidian4.Notice("Control Characters: You are using the legacy editor, this plugin is not supported there");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onunload() {
|
||||||
|
}
|
||||||
|
loadSettings() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
saveSettings() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.saveData(this.settings);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getTokens(view, from, to, settings) {
|
||||||
|
const targetElements = [];
|
||||||
|
const text = view.state.sliceDoc(from, to);
|
||||||
|
for (const match of text.matchAll(/[\u00A0\u202F\u2007\u2060\s]/gu)) {
|
||||||
|
const index = from + match.index;
|
||||||
|
if (match.toString() === "\n" && settings.newLine) {
|
||||||
|
targetElements.push({ from: index - 1, to: index, value: ControlCharacter.NEWLINE });
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let value;
|
||||||
|
if (match.toString() === " " && settings.tab) {
|
||||||
|
value = ControlCharacter.TAB;
|
||||||
|
} else if (match.toString() === " " && settings.space) {
|
||||||
|
value = ControlCharacter.SPACE;
|
||||||
|
} else {
|
||||||
|
value = ControlCharacter.OTHER;
|
||||||
|
}
|
||||||
|
targetElements.push({ from: index, to: index + 1, value });
|
||||||
|
}
|
||||||
|
return targetElements;
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"id": "control-characters",
|
||||||
|
"name": "Control Characters",
|
||||||
|
"version": "0.3.0",
|
||||||
|
"minAppVersion": "0.15.0",
|
||||||
|
"description": "Show control/non-printing characters in edit mode",
|
||||||
|
"author": "Johannes Theiner",
|
||||||
|
"authorUrl": "https://github.com/joethei",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
||||||
|
if you want to view the source, please visit the github repository of this plugin
|
||||||
|
https://github.com/joethei/obsidian-non-printing-chars
|
||||||
|
*/body{--control-character-color:var(--interactive-accent);--control-character-space:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath fill='currentColor' d='M12 18a6 6 0 1 0 0-12 6 6 0 0 0 0 12z'/%3E%3C/svg%3E");--control-character-tab:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Cpath d='M12.29 8.12 15.17 11H2c-.55 0-1 .45-1 1s.45 1 1 1h13.17l-2.88 2.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L13.7 6.7a.996.996 0 0 0-1.41 0c-.38.39-.39 1.03 0 1.42zM20 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z'/%3E%3C/svg%3E");--control-character-newline:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='.84em' height='1em' viewBox='0 0 1280 1536'%3E%3Cpath fill='currentColor' d='M1278 61v73q0 29-18.5 61t-42.5 32q-50 0-54 1-26 6-32 31-3 11-3 64v1152q0 25-18 43t-43 18H959q-25 0-43-18t-18-43V257H755v1218q0 25-17.5 43t-43.5 18H586q-26 0-43.5-18t-17.5-43V979q-147-12-245-59-126-58-192-179-64-117-64-259 0-166 88-286Q200 78 321 37 432 0 738 0h479q25 0 43 18t18 43z'/%3E%3C/svg%3E");--control-character-other:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24'%3E%3Crect width='20' height='20' x='2' y='2' fill='currentColor' rx='2'/%3E%3C/svg%3E")}
|
||||||
|
|
||||||
|
/* @settings
|
||||||
|
|
||||||
|
name: Control Characters
|
||||||
|
id: control-characters
|
||||||
|
settings:
|
||||||
|
-
|
||||||
|
id: control-character-color
|
||||||
|
title: Color
|
||||||
|
type: variable-themed-color
|
||||||
|
format: hex
|
||||||
|
default-light: '#007AFF'
|
||||||
|
default-dark: '#007AFF'
|
||||||
|
-
|
||||||
|
id: control-character-space
|
||||||
|
title: Symbol for space
|
||||||
|
description: Icon SVG URI encoded
|
||||||
|
type: variable-text
|
||||||
|
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath fill="currentColor" d="M12 18a6 6 0 1 0 0-12a6 6 0 0 0 0 12z"%2F%3E%3C%2Fsvg%3E')
|
||||||
|
-
|
||||||
|
id: control-character-tab
|
||||||
|
title: Symbol for tab
|
||||||
|
type: variable-text
|
||||||
|
description: Icon SVG URI encoded
|
||||||
|
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Cpath d="M12.29 8.12L15.17 11H2c-.55 0-1 .45-1 1s.45 1 1 1h13.17l-2.88 2.88a.996.996 0 1 0 1.41 1.41l4.59-4.59a.996.996 0 0 0 0-1.41L13.7 6.7a.996.996 0 0 0-1.41 0c-.38.39-.39 1.03 0 1.42zM20 7v10c0 .55.45 1 1 1s1-.45 1-1V7c0-.55-.45-1-1-1s-1 .45-1 1z"%2F%3E%3C%2Fsvg%3E')
|
||||||
|
-
|
||||||
|
id: control-character-newline
|
||||||
|
title: Symbol for new line
|
||||||
|
type: variable-text
|
||||||
|
description: Icon SVG URI encoded
|
||||||
|
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 20 20"%3E%3Cpath fill="currentColor" d="M15 2H7.54c-.83 0-1.59.2-2.28.6c-.7.41-1.25.96-1.65 1.65C3.2 4.94 3 5.7 3 6.52s.2 1.58.61 2.27c.4.69.95 1.24 1.65 1.64c.69.41 1.45.61 2.28.61h.43V17c0 .27.1.51.29.71c.2.19.44.29.71.29c.28 0 .51-.1.71-.29c.2-.2.3-.44.3-.71V5c0-.27.09-.51.29-.71c.2-.19.44-.29.71-.29s.51.1.71.29c.19.2.29.44.29.71v12c0 .27.1.51.3.71c.2.19.43.29.71.29c.27 0 .51-.1.71-.29c.19-.2.29-.44.29-.71V4H15c.27 0 .5-.1.7-.3c.2-.19.3-.43.3-.7s-.1-.51-.3-.71A.984.984 0 0 0 15 2z"%2F%3E%3C%2Fsvg%3E')
|
||||||
|
-
|
||||||
|
id: control-character-other
|
||||||
|
title: Symbol for other non printing control characters
|
||||||
|
type: variable-text
|
||||||
|
description: Icon SVG URI encoded
|
||||||
|
default: url('data:image/svg+xml,%3Csvg xmlns="http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 24 24"%3E%3Crect width="20" height="20" x="2" y="2" fill="currentColor" rx="2"%2F%3E%3C%2Fsvg%3E')
|
||||||
|
*/.control-character[type=newline]:after{content:" ";-webkit-mask-image:var(--control-character-newline);mask-image:var(--control-character-newline)}.control-character[type=newline]:after,.control-character[type=space]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=space]{-webkit-mask-image:var(--control-character-space);mask-image:var(--control-character-space)}.control-character[type=tab]{-webkit-mask-image:var(--control-character-tab);mask-image:var(--control-character-tab)}.control-character[type=other],.control-character[type=tab]{background:var(--control-character-color);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}.control-character[type=other]{-webkit-mask-image:var(--control-character-other);mask-image:var(--control-character-other);-webkit-mask-size:unset;mask-size:unset}
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"hideRibbon": false,
|
"hideRibbon": true,
|
||||||
"hideStatus": false,
|
"hideStatus": false,
|
||||||
"hideTabs": true,
|
"hideTabs": true,
|
||||||
"hideScroll": false,
|
"hideScroll": false,
|
||||||
|
@ -9,7 +9,8 @@
|
||||||
"hideSearchSuggestions": false,
|
"hideSearchSuggestions": false,
|
||||||
"hideSearchCounts": false,
|
"hideSearchCounts": false,
|
||||||
"hideInstructions": false,
|
"hideInstructions": false,
|
||||||
"hideMeta": false,
|
"hidePropertiesReading": false,
|
||||||
"hideVault": false,
|
"hideVault": false,
|
||||||
|
"hideMeta": false,
|
||||||
"frameless": false
|
"frameless": false
|
||||||
}
|
}
|
|
@ -4,31 +4,22 @@
|
||||||
"type": "split",
|
"type": "split",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "31231bb799c6b46c",
|
"id": "f1c756dcf5cc5c0b",
|
||||||
"type": "tabs",
|
"type": "tabs",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
{
|
||||||
"id": "9d6aaf62d9be9ed1",
|
"id": "3eaae06956359fca",
|
||||||
"type": "leaf",
|
"type": "leaf",
|
||||||
"state": {
|
"state": {
|
||||||
"type": "image",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "images/key.png"
|
"file": "BG4E-ExpPreaching/Sermon-1-Key.md",
|
||||||
}
|
"mode": "preview",
|
||||||
}
|
"source": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "678edf3c19987a83",
|
|
||||||
"type": "leaf",
|
|
||||||
"state": {
|
|
||||||
"type": "release-notes",
|
|
||||||
"state": {
|
|
||||||
"currentVersion": "1.4.11"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"currentTab": 1
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "vertical"
|
"direction": "vertical"
|
||||||
|
@ -86,7 +77,8 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 200
|
"width": 200,
|
||||||
|
"collapsed": true
|
||||||
},
|
},
|
||||||
"right": {
|
"right": {
|
||||||
"id": "1464b72f66019d33",
|
"id": "1464b72f66019d33",
|
||||||
|
@ -102,7 +94,7 @@
|
||||||
"state": {
|
"state": {
|
||||||
"type": "outline",
|
"type": "outline",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "images/key.png"
|
"file": "BG4E-ExpPreaching/Sermon-1-Key.md"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -123,7 +115,7 @@
|
||||||
"state": {
|
"state": {
|
||||||
"type": "backlink",
|
"type": "backlink",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "images/key.png",
|
"file": "BG4E-ExpPreaching/Sermon-1-Key.md",
|
||||||
"collapseAll": false,
|
"collapseAll": false,
|
||||||
"extraContext": false,
|
"extraContext": false,
|
||||||
"sortOrder": "alphabetical",
|
"sortOrder": "alphabetical",
|
||||||
|
@ -140,7 +132,7 @@
|
||||||
"state": {
|
"state": {
|
||||||
"type": "outgoing-link",
|
"type": "outgoing-link",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "images/key.png",
|
"file": "BG4E-ExpPreaching/Sermon-1-Key.md",
|
||||||
"linksCollapsed": false,
|
"linksCollapsed": false,
|
||||||
"unlinkedCollapsed": true
|
"unlinkedCollapsed": true
|
||||||
}
|
}
|
||||||
|
@ -156,12 +148,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
"currentTab": 2
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"direction": "horizontal",
|
"direction": "horizontal",
|
||||||
"width": 362.5
|
"width": 362.5,
|
||||||
|
"collapsed": true
|
||||||
},
|
},
|
||||||
"left-ribbon": {
|
"left-ribbon": {
|
||||||
"hiddenItems": {
|
"hiddenItems": {
|
||||||
|
@ -173,20 +165,23 @@
|
||||||
"workspaces:Manage workspace layouts": false
|
"workspaces:Manage workspace layouts": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"active": "678edf3c19987a83",
|
"active": "3eaae06956359fca",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"images/Mounce-Reader.png",
|
"BG4E-ExpPreaching/Sermon-2.md",
|
||||||
"images/key.png",
|
|
||||||
"images/00015.png",
|
|
||||||
"images/IGNT-cover.png",
|
|
||||||
"images/IGNT-封面.png",
|
|
||||||
"images/IGG-cover.png",
|
|
||||||
"images/icon-Home.png",
|
|
||||||
"images/Guthrie-Reader.jpg",
|
|
||||||
"images/GGBB-cover.png",
|
|
||||||
"images/GGBB-封面.png",
|
|
||||||
"images/GDNTG-cover.png",
|
|
||||||
"BG4E-ExpPreaching/Sermon-1-Key.md",
|
"BG4E-ExpPreaching/Sermon-1-Key.md",
|
||||||
|
"BG4E-ExpPreaching/Sermon-3.md",
|
||||||
|
"BG4E-ExpPreaching/Sermon-1.md",
|
||||||
|
"BG4E-ExpPreaching/JesusChrist-vs-ChristJesus.md",
|
||||||
|
"images/key.png",
|
||||||
|
"images/Pasted image 20221208210229.png",
|
||||||
|
"images/Pasted image 20221208210320.png",
|
||||||
|
"images/Pasted image 20230317084649.png",
|
||||||
|
"images/Pasted image 20230317084752.png",
|
||||||
|
"images/Pasted image 20230403142914.png",
|
||||||
|
"images/Pasted image 20211020143849.png",
|
||||||
|
"images/Pasted image 20211020143723.png",
|
||||||
|
"images/Pasted image 20211018144032.png",
|
||||||
|
"images/Pasted image 20210918060146.png",
|
||||||
"62-1John/123John-Style.md",
|
"62-1John/123John-Style.md",
|
||||||
"40-Matthew/Sermon-on-the-Mount.Interlinear.md",
|
"40-Matthew/Sermon-on-the-Mount.Interlinear.md",
|
||||||
"40-Matthew/Sermon-on-the-Mount.Notes.md",
|
"40-Matthew/Sermon-on-the-Mount.Notes.md",
|
||||||
|
@ -195,19 +190,15 @@
|
||||||
"40-Matthew/Mat.5.1-2.md",
|
"40-Matthew/Mat.5.1-2.md",
|
||||||
"40-Matthew/Sermon-on-the-Mount-Interlinear.BIBa.md",
|
"40-Matthew/Sermon-on-the-Mount-Interlinear.BIBa.md",
|
||||||
"60-1Peter/1Pe.1.1-2.md",
|
"60-1Peter/1Pe.1.1-2.md",
|
||||||
"BG4E-ExpPreaching/Sermon-1.md",
|
|
||||||
"46-1Corinthians/1Co.15.1-11.md",
|
"46-1Corinthians/1Co.15.1-11.md",
|
||||||
"Phrasing-Signs.md",
|
"Phrasing-Signs.md",
|
||||||
"BG4E-ExpPreaching/Sermon-3.md",
|
|
||||||
"BG4E-ExpPreaching/Sermon-4.md",
|
"BG4E-ExpPreaching/Sermon-4.md",
|
||||||
"BG4E-ExpPreaching/Sermon-2.md",
|
|
||||||
"BG4E-ExpPreaching/Sermon-5-Key.md",
|
"BG4E-ExpPreaching/Sermon-5-Key.md",
|
||||||
"BG4E-ExpPreaching/Sermon-5.md",
|
"BG4E-ExpPreaching/Sermon-5.md",
|
||||||
"BG4E-ExpPreaching/Sermon-c.md",
|
"BG4E-ExpPreaching/Sermon-c.md",
|
||||||
"BG4E-ExpPreaching/Sermon-b.md",
|
"BG4E-ExpPreaching/Sermon-b.md",
|
||||||
"BG4E-ExpPreaching/Sermon-a.md",
|
"BG4E-ExpPreaching/Sermon-a.md",
|
||||||
"BG4E-ExpPreaching/Sermon-3-Key.md",
|
"BG4E-ExpPreaching/Sermon-3-Key.md",
|
||||||
"BG4E-ExpPreaching/JesusChrist-vs-ChristJesus.md",
|
|
||||||
"60-1Peter/1Pe.1.3-9.md",
|
"60-1Peter/1Pe.1.3-9.md",
|
||||||
"60-1Peter/1Pe.1.10-12.md",
|
"60-1Peter/1Pe.1.10-12.md",
|
||||||
"Syntax/GGBB Apposition vs Epexgetisis.md",
|
"Syntax/GGBB Apposition vs Epexgetisis.md",
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
- Matt. 1:18 Τοῦ δὲ <mark>Ἰησοῦ</mark> <mark>Χριστοῦ</mark> ἡ γένεσις οὕτως ἦν. μνηστευθείσης τῆς μητρὸς αὐτοῦ Μαρίας τῷ Ἰωσήφ, πρὶν ἢ συνελθεῖν αὐτοὺς εὑρέθη ἐν γαστρὶ ἔχουσα ἐκ πνεύματος ἁγίου.
|
- Matt. 1:18 Τοῦ δὲ <mark>Ἰησοῦ</mark> <mark>Χριστοῦ</mark> ἡ γένεσις οὕτως ἦν. μνηστευθείσης τῆς μητρὸς αὐτοῦ Μαρίας τῷ Ἰωσήφ, πρὶν ἢ συνελθεῖν αὐτοὺς εὑρέθη ἐν γαστρὶ ἔχουσα ἐκ πνεύματος ἁγίου.
|
||||||
- Matt. 26:63 ὁ δὲ <mark>Ἰησοῦ</mark>ς ἐσιώπα. καὶ ὁ ἀρχιερεὺς εἶπεν αὐτῷ· ἐξορκίζω σε κατὰ τοῦ θεοῦ τοῦ ζῶντος ἵνα ἡμῖν εἴπῃς εἰ σὺ εἶ ὁ <mark>χριστὸς</mark> ὁ υἱὸς τοῦ θεοῦ.
|
- Matt. 26:63 ὁ δὲ <mark>Ἰησοῦ</mark>ς ἐσιώπα. καὶ ὁ ἀρχιερεὺς εἶπεν αὐτῷ· ἐξορκίζω σε κατὰ τοῦ θεοῦ τοῦ ζῶντος ἵνα ἡμῖν εἴπῃς εἰ σὺ εἶ ὁ <mark>χριστὸς</mark> ὁ υἱὸς τοῦ θεοῦ.
|
||||||
- Matt. 27:17 συνηγμένων οὖν αὐτῶν εἶπεν αὐτοῖς ὁ Πιλᾶτος· τίνα θέλετε ἀπολύσω ὑμῖν, <mark>Ἰησοῦν</mark> τὸν Βαραββᾶν ἢ <mark>Ἰησοῦν</mark> τὸν λεγόμενον <mark>χριστόν</mark>;
|
- Matt. 27:17 συνηγμένων οὖν αὐτῶν εἶπεν αὐτοῖς ὁ Πιλᾶτος· τίνα θέλετε ἀπολύσω ὑμῖν, <mark>Ἰησοῦν</mark> τὸν Βαραββᾶν ἢ <mark>Ἰησοῦν</mark> τὸν λεγόμενον <mark>χριστόν</mark>;
|
||||||
- Matt. 27:22 λέγει αὐτοῖς ὁ Πιλᾶτος· τί οὖν ποιήσω <mark>Ἰησοῦν</mark> τὸν λεγόμενον <mark>χριστόν</mark>; λέγουσιν πάντες· σταυρωθήτω.
|
- Matt. 27:22 λέγει αὐτοῖς ὁ Πιλᾶτος· τί οὖν ποιήσω <mark>Ἰησοῦν</mark> τὸν λεγόμενον <mark>χριστόν</mark>; λέγουσιν πάντες· σταυρωθήτω.
|
||||||
- Mk. 1:1 Ἀρχὴ τοῦ εὐαγγελίου <mark>Ἰησοῦ</mark> <mark>Χριστοῦ</mark> υἱοῦ θεοῦ.
|
- Mk. 1:1 Ἀρχὴ τοῦ εὐαγγελίου <mark>Ἰησοῦ</mark> <mark>Χριστοῦ</mark> υἱοῦ θεοῦ.
|
||||||
- Mk. 12:35 Καὶ ἀποκριθεὶς ὁ <mark>Ἰησοῦ</mark>ς ἔλεγεν διδάσκων ἐν τῷ ἱερῷ· πῶς λέγουσιν οἱ γραμματεῖς ὅτι ὁ <mark>χριστὸς</mark> υἱὸς Δαυίδ ἐστιν;
|
- Mk. 12:35 Καὶ ἀποκριθεὶς ὁ <mark>Ἰησοῦ</mark>ς ἔλεγεν διδάσκων ἐν τῷ ἱερῷ· πῶς λέγουσιν οἱ γραμματεῖς ὅτι ὁ <mark>χριστὸς</mark> υἱὸς Δαυίδ ἐστιν;
|
||||||
- Jn. 1:17 ὅτι ὁ νόμος διὰ Μωϋσέως ἐδόθη, ἡ χάρις καὶ ἡ ἀλήθεια διὰ <mark>Ἰησοῦ</mark> <mark>Χριστοῦ</mark> ἐγένετο.
|
- Jn. 1:17 ὅτι ὁ νόμος διὰ Μωϋσέως ἐδόθη, ἡ χάρις καὶ ἡ ἀλήθεια διὰ <mark>Ἰησοῦ</mark> <mark>Χριστοῦ</mark> ἐγένετο.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
## Sermon-1 (林前15:1-11) 參考解答
|
## Sermon-1 (林前15:1-11) 參考解答
|
||||||
|
|
||||||
#### 句法圖析 (Syntax Diagram)
|
### 句法圖析 (Syntax Diagram)
|
||||||
|
|
||||||
- 15:1a (<RUBY><ruby><ruby><strong>Γνωρίζω</strong><rt>γνωρίζω</rt></ruby><rt>I make known</rt></ruby><rt>V-PAI-1S</rt></RUBY>)P <RUBY><ruby><ruby>δὲ<rt>δέ</rt></ruby><rt>now</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>ὑμῖν,<rt>σύ</rt></ruby><rt>to you</rt></ruby><rt>P-2DP</rt></RUBY>)C (<RUBY><ruby><ruby>ἀδελφοί,<rt>ἀδελφός</rt></ruby><rt>brothers</rt></ruby><rt>N-VPM</rt></RUBY>)=C (<mark><RUBY><ruby><ruby>τὸ<rt>ὁ</rt></ruby><rt>the</rt></ruby><rt>T-ASN</rt></RUBY> <RUBY><ruby><ruby>εὐαγγέλιον<rt>εὐαγγέλιον</rt></ruby><rt>gospel</rt></ruby><rt>N-ASN</rt></RUBY>°¹</mark>)C
|
- 15:1a (<RUBY><ruby><ruby><strong>Γνωρίζω</strong><rt>γνωρίζω</rt></ruby><rt>I make known</rt></ruby><rt>V-PAI-1S</rt></RUBY>)P <RUBY><ruby><ruby>δὲ<rt>δέ</rt></ruby><rt>now</rt></ruby><rt>CONJ</rt></RUBY> (<RUBY><ruby><ruby>ὑμῖν,<rt>σύ</rt></ruby><rt>to you</rt></ruby><rt>P-2DP</rt></RUBY>)C (<RUBY><ruby><ruby>ἀδελφοί,<rt>ἀδελφός</rt></ruby><rt>brothers</rt></ruby><rt>N-VPM</rt></RUBY>)=C (<mark><RUBY><ruby><ruby>τὸ<rt>ὁ</rt></ruby><rt>the</rt></ruby><rt>T-ASN</rt></RUBY> <RUBY><ruby><ruby>εὐαγγέλιον<rt>εὐαγγέλιον</rt></ruby><rt>gospel</rt></ruby><rt>N-ASN</rt></RUBY>°¹</mark>)C
|
||||||
- 15:1b (<RUBY><ruby><ruby>ὃ<rt>ὅς</rt></ruby><rt>that</rt></ruby><rt>R-ASN</rt></RUBY>°¹⮥)C (<RUBY><ruby><ruby><strong>εὐηγγελισάμην</strong><rt>εὐαγγελίζομαι</rt></ruby><rt>I proclaimed</rt></ruby><rt>V-AMI-1S</rt></RUBY>)P (<RUBY><ruby><ruby>ὑμῖν,<rt>σύ</rt></ruby><rt>to you</rt></ruby><rt>P-2DP</rt></RUBY>)C
|
- 15:1b (<RUBY><ruby><ruby>ὃ<rt>ὅς</rt></ruby><rt>that</rt></ruby><rt>R-ASN</rt></RUBY>°¹⮥)C (<RUBY><ruby><ruby><strong>εὐηγγελισάμην</strong><rt>εὐαγγελίζομαι</rt></ruby><rt>I proclaimed</rt></ruby><rt>V-AMI-1S</rt></RUBY>)P (<RUBY><ruby><ruby>ὑμῖν,<rt>σύ</rt></ruby><rt>to you</rt></ruby><rt>P-2DP</rt></RUBY>)C
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
|
|
||||||
<div style='page-break-after: always;'></div>
|
<div style='page-break-after: always;'></div>
|
||||||
|
|
||||||
#### 句法筆記 (Syntax Notes)
|
### 句法筆記 (Syntax Notes)
|
||||||
|
|
||||||
- 15:1 Γνωρίζω δὲ ὑμῖν , ἀδελφοί , τὸ εὐαγγέλιον ὃ εὐηγγελισάμην ὑμῖν , ὃ καὶ παρελάβετε , ἐν ᾧ καὶ ἑστήκατε , 弟兄們,我如今把先前所傳給你們的福音告訴你們知道;這福音你們也領受了,又靠著站立得住,
|
- 15:1 Γνωρίζω δὲ ὑμῖν , ἀδελφοί , τὸ εὐαγγέλιον ὃ εὐηγγελισάμην ὑμῖν , ὃ καὶ παρελάβετε , ἐν ᾧ καὶ ἑστήκατε , 弟兄們,我如今把先前所傳給你們的福音告訴你們知道;這福音你們也領受了,又靠著站立得住,
|
||||||
- 15:1a Γνωρίζω:可以接兩個補語 (BAGD),直接受格 (τὸ εὐαγγέλιον) 表達「某事」,間接受格 (ὑμῖν) 表達「某人」。
|
- 15:1a Γνωρίζω:可以接兩個補語 (BAGD),直接受格 (τὸ εὐαγγέλιον) 表達「某事」,間接受格 (ὑμῖν) 表達「某人」。
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
|
|
||||||
<div style='page-break-after: always;'></div>
|
<div style='page-break-after: always;'></div>
|
||||||
|
|
||||||
#### 語意圖析 (Semantic Diagram)
|
### 語意圖析 (Semantic Diagram)
|
||||||
|
|
||||||
|
|
||||||
![../images/2023-05-10-1Co.15.1-11b 1.png](../images/2023-05-10-1Co.15.1-11b%201.png)
|
![../images/2023-05-10-1Co.15.1-11b 1.png](../images/2023-05-10-1Co.15.1-11b%201.png)
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
|
|
||||||
<div style='page-break-after: always;'></div>
|
<div style='page-break-after: always;'></div>
|
||||||
|
|
||||||
#### 大綱 (Outline)
|
### 大綱 (Outline)
|
||||||
|
|
||||||
- (0) 開場:神學院有什麼用?!
|
- (0) 開場:神學院有什麼用?!
|
||||||
- 來神學院學什麼?對弟兄姊妹有用嗎?能解決教會的問題嗎?
|
- 來神學院學什麼?對弟兄姊妹有用嗎?能解決教會的問題嗎?
|
||||||
|
@ -126,12 +126,12 @@
|
||||||
|
|
||||||
<div style='page-break-after: always;'></div>
|
<div style='page-break-after: always;'></div>
|
||||||
|
|
||||||
#### 小抄 (memo)
|
### 小抄 (memo)
|
||||||
|
|
||||||
|
|
||||||
![../images/2023-05-10-1Co.15.1-11小抄.jpg|500x520](../images/2023-05-10-1Co.15.1-11%E5%B0%8F%E6%8A%84.jpg)
|
![../images/2023-05-10-1Co.15.1-11小抄.jpg|500x520](../images/2023-05-10-1Co.15.1-11%E5%B0%8F%E6%8A%84.jpg)
|
||||||
|
|
||||||
|
|
||||||
#### 講道影片
|
### 講道影片
|
||||||
|
|
||||||
https://youtu.be/1iBlCf7-zFM
|
https://youtu.be/1iBlCf7-zFM
|
BIN
images/00015.png
BIN
images/00015.png
Binary file not shown.
Before Width: | Height: | Size: 173 KiB |
Binary file not shown.
Before Width: | Height: | Size: 58 KiB |
Binary file not shown.
Before Width: | Height: | Size: 50 KiB |
Binary file not shown.
Before Width: | Height: | Size: 30 KiB |
Binary file not shown.
Before Width: | Height: | Size: 818 KiB |
Loading…
Reference in New Issue