parent
8cd2a734e5
commit
17f27980c6
File diff suppressed because one or more lines are too long
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"id": "obsidian-3d-graph",
|
||||||
|
"name": "3D Graph",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "A 3D Graph for Obsidian",
|
||||||
|
"author": "Alexander Weichart",
|
||||||
|
"authorUrl": "https://github.com/AlexW00",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
Binary file not shown.
@ -0,0 +1,57 @@
|
|||||||
|
.graph-3d-view .tree-item.is-collapsed > .tree-item-children {
|
||||||
|
display: none;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view {
|
||||||
|
padding: 0 !important;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .graph-controls.is-collapsed > .graph-control-section {
|
||||||
|
display: none;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.graph-3d-view .graph-controls:hover > .control-buttons {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .graph-controls > .control-buttons:hover {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .graph-controls > .control-buttons {
|
||||||
|
float: right;
|
||||||
|
margin-right: 0;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .hidden {
|
||||||
|
display: none;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .control-buttons {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .control-buttons > * {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .graph-settings-view > .clickable-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 8px;
|
||||||
|
left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .node-label {
|
||||||
|
color: var(--text-normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
.graph-3d-view .scene-nav-info {
|
||||||
|
display: none;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"plugins": {
|
||||||
|
"plugins-galore": {
|
||||||
|
"repo": {
|
||||||
|
"domain": "github.com",
|
||||||
|
"owner": "dylanpizzo",
|
||||||
|
"name": "obsidian-plugins-galore",
|
||||||
|
"url": "https://github.com/dylanpizzo/obsidian-plugins-galore",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"version": "0.1.1"
|
||||||
|
},
|
||||||
|
"obsidian-3d-graph": {
|
||||||
|
"repo": {
|
||||||
|
"domain": "github.com",
|
||||||
|
"owner": "AlexW00",
|
||||||
|
"name": "obsidian-3d-graph",
|
||||||
|
"url": "https://github.com/AlexW00/obsidian-3d-graph",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,388 @@
|
|||||||
|
/*
|
||||||
|
* THIS IS A GENERATED/BUNDLED FILE.
|
||||||
|
* The source is available at https://github.com/dylanpizzo/obsidian-plugins-galore.
|
||||||
|
* Contributions are very welcome!
|
||||||
|
*/
|
||||||
|
|
||||||
|
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: () => Galore
|
||||||
|
});
|
||||||
|
var import_obsidian7 = __toModule(require("obsidian"));
|
||||||
|
|
||||||
|
// src/util/cacheRequest.ts
|
||||||
|
var import_obsidian = __toModule(require("obsidian"));
|
||||||
|
var cache = [];
|
||||||
|
var cacheRequest = (req) => __async(void 0, null, function* () {
|
||||||
|
const filteredCache = cache.filter((item) => item.req === JSON.stringify(req));
|
||||||
|
if (filteredCache.length) {
|
||||||
|
return filteredCache[0].res;
|
||||||
|
}
|
||||||
|
const res = yield (0, import_obsidian.request)(req);
|
||||||
|
cache.push({ req: JSON.stringify(req), res });
|
||||||
|
return res;
|
||||||
|
});
|
||||||
|
|
||||||
|
// src/util/gitServerInterface.ts
|
||||||
|
var countRegexInString = (str, re) => ((str || "").match(re) || []).length;
|
||||||
|
var getKeyWithMax = (obj) => Object.keys(obj).reduce((a, b) => obj[a] >= obj[b] ? a : b, null);
|
||||||
|
var parseRepoURL = (url) => __async(void 0, null, function* () {
|
||||||
|
let urlObj = null;
|
||||||
|
try {
|
||||||
|
urlObj = new URL(url);
|
||||||
|
} catch (e) {
|
||||||
|
urlObj = new URL("https://" + url);
|
||||||
|
}
|
||||||
|
const domain = urlObj.hostname;
|
||||||
|
let path = urlObj.pathname;
|
||||||
|
if (path[0] === "/") {
|
||||||
|
path = path.slice(1);
|
||||||
|
}
|
||||||
|
const pathParts = path.split("/");
|
||||||
|
const owner = pathParts[0];
|
||||||
|
const name = pathParts[1];
|
||||||
|
const originBody = yield cacheRequest({ url: urlObj.origin });
|
||||||
|
const typeScores = {
|
||||||
|
github: countRegexInString(originBody, /github/gi),
|
||||||
|
gitea: countRegexInString(originBody, /gitea/gi),
|
||||||
|
gitlab: countRegexInString(originBody, /gitlab/gi)
|
||||||
|
};
|
||||||
|
const type = getKeyWithMax(typeScores);
|
||||||
|
return {
|
||||||
|
domain,
|
||||||
|
owner,
|
||||||
|
name,
|
||||||
|
url,
|
||||||
|
type
|
||||||
|
};
|
||||||
|
});
|
||||||
|
var getRelease = (repo, options) => __async(void 0, null, function* () {
|
||||||
|
const { type, domain, owner, name } = repo;
|
||||||
|
const { allowPrerelease = false } = options || {};
|
||||||
|
let release = null;
|
||||||
|
if (type === "github") {
|
||||||
|
const rawReleases = JSON.parse(yield cacheRequest({
|
||||||
|
url: `https://api.${domain}/repos/${owner}/${name}/releases`
|
||||||
|
}));
|
||||||
|
const rawRelease = rawReleases.filter((x) => !x.draft && (allowPrerelease || !x.prerelease)).sort((x) => x.published_at)[0];
|
||||||
|
release = {
|
||||||
|
version: rawRelease.tag_name,
|
||||||
|
assets: rawRelease.assets.map((asset) => ({
|
||||||
|
name: asset.name,
|
||||||
|
url: asset.browser_download_url
|
||||||
|
}))
|
||||||
|
};
|
||||||
|
} else if (type === "gitea") {
|
||||||
|
const rawReleases = JSON.parse(yield cacheRequest({
|
||||||
|
url: `https://${domain}/api/v1/repos/${owner}/${name}/releases`
|
||||||
|
}));
|
||||||
|
const rawRelease = rawReleases.filter((x) => !x.draft && (allowPrerelease || !x.prerelease)).sort((x) => x.published_at)[0];
|
||||||
|
release = {
|
||||||
|
version: rawRelease.tag_name,
|
||||||
|
assets: rawRelease.assets.map((asset) => ({
|
||||||
|
name: asset.name,
|
||||||
|
url: asset.browser_download_url
|
||||||
|
}))
|
||||||
|
};
|
||||||
|
} else if (type === "gitlab") {
|
||||||
|
const rawReleases = JSON.parse(yield cacheRequest({
|
||||||
|
url: `https://${domain}/api/v4/projects/${owner}%2F${name}/releases`
|
||||||
|
}));
|
||||||
|
const rawRelease = rawReleases.filter((x) => allowPrerelease || !x.upcoming_release).sort((x) => x.published_at)[0];
|
||||||
|
release = {
|
||||||
|
version: rawRelease.tag_name,
|
||||||
|
assets: rawRelease.assets.links.map((asset) => ({
|
||||||
|
name: asset.name,
|
||||||
|
url: asset.direct_asset_url
|
||||||
|
}))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return release;
|
||||||
|
});
|
||||||
|
var getAsset = (release, name) => __async(void 0, null, function* () {
|
||||||
|
const asset = release.assets.filter((asset2) => asset2.name === name)[0];
|
||||||
|
if (!asset) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return cacheRequest({
|
||||||
|
url: asset.url
|
||||||
|
});
|
||||||
|
});
|
||||||
|
var getAssets = (release, names) => __async(void 0, null, function* () {
|
||||||
|
const assets = names ? release.assets.filter((asset) => names.includes(asset.name)) : release.assets;
|
||||||
|
return Promise.all(assets.map((asset) => __async(void 0, null, function* () {
|
||||||
|
return { name: asset.name, content: yield cacheRequest({ url: asset.url }) };
|
||||||
|
})));
|
||||||
|
});
|
||||||
|
|
||||||
|
// src/ui/settingsPage.ts
|
||||||
|
var import_obsidian6 = __toModule(require("obsidian"));
|
||||||
|
|
||||||
|
// src/util/pluginActions.ts
|
||||||
|
var import_obsidian3 = __toModule(require("obsidian"));
|
||||||
|
|
||||||
|
// src/ui/errorModal.ts
|
||||||
|
var import_obsidian2 = __toModule(require("obsidian"));
|
||||||
|
var GaloreErrorModal = class extends import_obsidian2.Modal {
|
||||||
|
constructor(app2, error) {
|
||||||
|
super(app2);
|
||||||
|
this.error = null;
|
||||||
|
this.error = error;
|
||||||
|
}
|
||||||
|
onOpen() {
|
||||||
|
const { contentEl } = this;
|
||||||
|
contentEl.setText("Oops. Something went wrong!");
|
||||||
|
}
|
||||||
|
onClose() {
|
||||||
|
const { contentEl } = this;
|
||||||
|
contentEl.empty();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/util/pluginActions.ts
|
||||||
|
var getPluginsDir = (app2) => {
|
||||||
|
return (0, import_obsidian3.normalizePath)(app2.vault.configDir + "/plugins") + "/";
|
||||||
|
};
|
||||||
|
var getPluginPath = (app2, pluginID) => {
|
||||||
|
return getPluginsDir(app2) + pluginID + "/";
|
||||||
|
};
|
||||||
|
var getRemotePluginMeta = (repo) => __async(void 0, null, function* () {
|
||||||
|
try {
|
||||||
|
const release = yield getRelease(repo);
|
||||||
|
return { repo, version: release.version };
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
new GaloreErrorModal(app, error).open();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var getRemotePlugin = (repo) => __async(void 0, null, function* () {
|
||||||
|
try {
|
||||||
|
const release = yield getRelease(repo);
|
||||||
|
const galore = { repo, version: release.version };
|
||||||
|
const rawManifest = yield getAsset(release, "manifest.json");
|
||||||
|
const manifest = JSON.parse(yield getAsset(release, "manifest.json"));
|
||||||
|
const assets = yield getAssets(release);
|
||||||
|
return {
|
||||||
|
galore,
|
||||||
|
manifest,
|
||||||
|
assets
|
||||||
|
};
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
new GaloreErrorModal(app, error).open();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var getLocalPluginMeta = (pluginsGalore, pluginID) => {
|
||||||
|
return pluginsGalore.galoreData.plugins[pluginID];
|
||||||
|
};
|
||||||
|
var writePlugin = (pluginsGalore, plugin) => __async(void 0, null, function* () {
|
||||||
|
try {
|
||||||
|
const path = getPluginPath(app, plugin.manifest.id);
|
||||||
|
const adapter = app.vault.adapter;
|
||||||
|
if (!(yield adapter.exists(path))) {
|
||||||
|
yield adapter.mkdir(path);
|
||||||
|
}
|
||||||
|
pluginsGalore.galoreData.plugins[plugin.manifest.id] = plugin.galore;
|
||||||
|
yield pluginsGalore.saveGaloreData();
|
||||||
|
yield Promise.all(plugin.assets.map((asset) => __async(void 0, null, function* () {
|
||||||
|
return adapter.write(path + asset.name, asset.content);
|
||||||
|
})));
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
new GaloreErrorModal(app, error).open();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var installPluginFromRepo = (pluginsGalore, repo) => __async(void 0, null, function* () {
|
||||||
|
const plugin = yield getRemotePlugin(repo);
|
||||||
|
yield writePlugin(pluginsGalore, plugin);
|
||||||
|
return plugin;
|
||||||
|
});
|
||||||
|
var getGalorePlugins = (pluginsGalore) => __async(void 0, null, function* () {
|
||||||
|
try {
|
||||||
|
const app2 = pluginsGalore.app;
|
||||||
|
const adapter = app2.vault.adapter;
|
||||||
|
const pluginsDir = getPluginsDir(app2);
|
||||||
|
const galorePluginPaths = Object.keys(pluginsGalore.galoreData.plugins).map((pluginID) => pluginsDir + "/" + pluginID + "/");
|
||||||
|
const galorePlugins = yield Promise.all(galorePluginPaths.map((path) => __async(void 0, null, function* () {
|
||||||
|
const localManifest = JSON.parse(yield adapter.read(path + "manifest.json"));
|
||||||
|
const localGalore = getLocalPluginMeta(pluginsGalore, localManifest.id);
|
||||||
|
const remoteGalore = yield getRemotePluginMeta(localGalore.repo);
|
||||||
|
return {
|
||||||
|
manifest: localManifest,
|
||||||
|
repo: localGalore.repo,
|
||||||
|
localVersion: localGalore.version,
|
||||||
|
remoteVersion: remoteGalore.version,
|
||||||
|
canUpdate: localGalore.version !== remoteGalore.version
|
||||||
|
};
|
||||||
|
})));
|
||||||
|
return galorePlugins;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
new GaloreErrorModal(app, error).open();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// src/ui/updateModal.ts
|
||||||
|
var import_obsidian4 = __toModule(require("obsidian"));
|
||||||
|
var GaloreUpdateModal = class extends import_obsidian4.Modal {
|
||||||
|
constructor(plugin, galorePlugins) {
|
||||||
|
super(app);
|
||||||
|
this.galorePlugins = null;
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.app = plugin.app;
|
||||||
|
this.galorePlugins = galorePlugins;
|
||||||
|
}
|
||||||
|
onOpen() {
|
||||||
|
const { contentEl } = this;
|
||||||
|
contentEl.createEl("h2", { text: "Plugins Galore: Update Plugins" });
|
||||||
|
new import_obsidian4.Setting(contentEl).setName("Select the plugins below to update, and then click Update.").setDesc("").addButton((button) => button.setButtonText("Cancel").onClick((ev) => {
|
||||||
|
this.close();
|
||||||
|
})).addButton((button) => button.setButtonText("Update").setCta().onClick((ev) => __async(this, null, function* () {
|
||||||
|
const pluginsToUpdate = this.galorePlugins.filter((plugin) => plugin.toggle.getValue());
|
||||||
|
for (const plugin of pluginsToUpdate) {
|
||||||
|
yield installPluginFromRepo(this.plugin, plugin.repo);
|
||||||
|
}
|
||||||
|
new import_obsidian4.Notice(`Updated ${pluginsToUpdate.length} plugins`);
|
||||||
|
this.close();
|
||||||
|
})));
|
||||||
|
for (const plugin of this.galorePlugins) {
|
||||||
|
new import_obsidian4.Setting(contentEl).setName(plugin.manifest.name).setDesc(`Version: ${plugin.localVersion} -> ${plugin.remoteVersion}`).addToggle((toggle) => {
|
||||||
|
plugin.toggle = toggle;
|
||||||
|
toggle.setValue(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onClose() {
|
||||||
|
const { contentEl } = this;
|
||||||
|
contentEl.empty();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/ui/addModal.ts
|
||||||
|
var import_obsidian5 = __toModule(require("obsidian"));
|
||||||
|
var GaloreAddModal = class extends import_obsidian5.Modal {
|
||||||
|
constructor(plugin) {
|
||||||
|
super(app);
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.app = plugin.app;
|
||||||
|
}
|
||||||
|
onOpen() {
|
||||||
|
const { contentEl } = this;
|
||||||
|
contentEl.empty();
|
||||||
|
contentEl.createEl("h2", { text: "Plugins Galore: Add a Plugin" });
|
||||||
|
let repoURL = "";
|
||||||
|
let siteType = "github";
|
||||||
|
new import_obsidian5.Setting(contentEl).setName("Repo URL").setDesc("").addText((text) => text.setPlaceholder("https://github.com/{owner}/{plugin-repo}").setValue(repoURL).onChange((value) => {
|
||||||
|
repoURL = value;
|
||||||
|
}));
|
||||||
|
new import_obsidian5.Setting(contentEl).setName("Install the plugin").setDesc("").addButton((button) => button.setButtonText("Install").setCta().onClick((ev) => __async(this, null, function* () {
|
||||||
|
const repo = yield parseRepoURL(repoURL);
|
||||||
|
const plugin = yield installPluginFromRepo(this.plugin, repo);
|
||||||
|
new import_obsidian5.Notice(`Installed ${plugin.manifest.name}.`);
|
||||||
|
this.close();
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
onClose() {
|
||||||
|
const { contentEl } = this;
|
||||||
|
contentEl.empty();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/ui/settingsPage.ts
|
||||||
|
var GaloreSettingTab = class extends import_obsidian6.PluginSettingTab {
|
||||||
|
constructor(plugin) {
|
||||||
|
super(app, plugin);
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.app = plugin.app;
|
||||||
|
}
|
||||||
|
display() {
|
||||||
|
const { containerEl } = this;
|
||||||
|
containerEl.empty();
|
||||||
|
containerEl.createEl("h2", { text: "Plugins Galore" });
|
||||||
|
let repoURL = "";
|
||||||
|
let repoInput = null;
|
||||||
|
new import_obsidian6.Setting(containerEl).setName("Add a plugin").setDesc("").addButton((button) => button.setButtonText("Add a plugin").setCta().onClick((ev) => __async(this, null, function* () {
|
||||||
|
new GaloreAddModal(this.plugin).open();
|
||||||
|
})));
|
||||||
|
new import_obsidian6.Setting(containerEl).setName("Installed Plugins").setDesc("This only checks for updates on plugins installed through Plugins Galore.").addButton((button) => button.setButtonText("Check for updates").setCta().onClick((ev) => __async(this, null, function* () {
|
||||||
|
const galorePlugins = yield getGalorePlugins(this.plugin);
|
||||||
|
const galorePluginsThatCanUpdate = galorePlugins.filter((x) => x.canUpdate);
|
||||||
|
if (galorePluginsThatCanUpdate.length) {
|
||||||
|
new GaloreUpdateModal(this.plugin, galorePluginsThatCanUpdate).open();
|
||||||
|
} else {
|
||||||
|
new import_obsidian6.Notice("No plugins updates found.");
|
||||||
|
}
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
var Galore = class extends import_obsidian7.Plugin {
|
||||||
|
onload() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.loadGaloreData();
|
||||||
|
this.addSettingTab(new GaloreSettingTab(this));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
loadGaloreData() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
this.galoreData = Object.assign({}, {
|
||||||
|
plugins: {
|
||||||
|
"plugins-galore": {
|
||||||
|
repo: yield parseRepoURL("https://github.com/dylanpizzo/obsidian-plugins-galore"),
|
||||||
|
version: this.manifest.version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, yield this.loadData());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
saveGaloreData() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
yield this.saveData(this.galoreData);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "plugins-galore",
|
||||||
|
"name": "Plugins Galore",
|
||||||
|
"version": "0.1.1",
|
||||||
|
"minAppVersion": "0.14.0",
|
||||||
|
"description": "This is an Obsidian plugin to allow easily sideloading other plugins.",
|
||||||
|
"author": "Dylan Pizzo",
|
||||||
|
"authorUrl": "https://github.com/dylanpizzo",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
title: ⚽ Lyon - Paris SG (0-1)
|
||||||
|
allDay: false
|
||||||
|
startTime: 20:45
|
||||||
|
endTime: 22:45
|
||||||
|
date: 2022-09-18
|
||||||
|
CollapseMetaTable: true
|
||||||
|
---
|
||||||
|
|
||||||
|
[[2022-09-18|this day]], Lyon - [[Paris SG]]: 0-1
|
||||||
|
Buteurs:: ⚽ Messi
|
@ -0,0 +1,109 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
Tag: ["Italian", "Napolitano", "Restaurant"]
|
||||||
|
Date: 2022-09-20
|
||||||
|
DocType: "Place"
|
||||||
|
Hierarchy: "NonRoot"
|
||||||
|
TimeStamp:
|
||||||
|
location: [47.3704056,8.5355364]
|
||||||
|
Place:
|
||||||
|
Type: "Restaurant"
|
||||||
|
SubType: "Napolitan"
|
||||||
|
Style: "Italian"
|
||||||
|
Location: Altstadt
|
||||||
|
Country: CH
|
||||||
|
Status: Tested
|
||||||
|
CollapseMetaTable: true
|
||||||
|
Phone: <a href="tel:+41447002222">+41 (0) 44 700 22 22</a>
|
||||||
|
Email: "[zurich@luigia.ch](readdle-spark://compose?recipient=zurich@luigia.ch&subject=Reservierung)"
|
||||||
|
Website: "[Le meilleur de l'Italie | LUIGIA | Restaurants italiens en Suisse](http://luigia.ch/)"
|
||||||
|
|
||||||
|
locations:
|
||||||
|
---
|
||||||
|
|
||||||
|
Parent:: [[@@Zürich|Zürich]], [[@Restaurants Zürich|Restaurants in Zürich]]
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
`= elink("https://waze.com/ul?ll=" + this.location[0] + "%2C" + this.location[1] + "&navigate=yes", "Launch Waze")`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Save
|
||||||
|
type command
|
||||||
|
action Save current file
|
||||||
|
id Save
|
||||||
|
```
|
||||||
|
^button-LuigiaSave
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
# Luigia
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
> [!summary]+
|
||||||
|
> Note Description
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```toc
|
||||||
|
style: number
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 📇 Contact
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
> [!address] 🗺
|
||||||
|
> Talstrasse 61
|
||||||
|
> 8001 Zürich
|
||||||
|
> Switzerland
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
☎️ `= this.Phone`
|
||||||
|
|
||||||
|
📧 `= this.Email`
|
||||||
|
|
||||||
|
🌐 `= this.Website`
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 🗒 Notes
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
Loret ipsum
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### 🔗 Other activity
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```dataview
|
||||||
|
Table DocType as "Doc type" from [[Luigia]]
|
||||||
|
where !contains(file.name, "@@Travel")
|
||||||
|
sort DocType asc
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
 
|
Loading…
Reference in new issue