parent
5508bff4e9
commit
f9731125d5
@ -0,0 +1,210 @@
|
|||||||
|
/*
|
||||||
|
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/obisidian-link-favicon
|
||||||
|
*/
|
||||||
|
|
||||||
|
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: () => FaviconPlugin
|
||||||
|
});
|
||||||
|
var import_obsidian3 = __toModule(require("obsidian"));
|
||||||
|
|
||||||
|
// src/settings.ts
|
||||||
|
var import_obsidian2 = __toModule(require("obsidian"));
|
||||||
|
|
||||||
|
// src/provider.ts
|
||||||
|
var import_obsidian = __toModule(require("obsidian"));
|
||||||
|
var providers = {
|
||||||
|
"google": { name: "Google", url: (domain) => Promise.resolve("https://www.google.com/s2/favicons?domain=" + domain) },
|
||||||
|
"duckduckgo": { name: "DuckDuckGo", url: (domain) => Promise.resolve("https://icons.duckduckgo.com/ip3/" + domain + ".ico") },
|
||||||
|
"iconhorse": { name: "Icon Horse", url: (domain) => Promise.resolve("https://icon.horse/icon/" + domain) },
|
||||||
|
"splitbee": { name: "Splitbee", url: (domain) => Promise.resolve("https://favicon.splitbee.io/?url=" + domain) },
|
||||||
|
"besticon": { name: "The Favicon Finder", url: (domain, settings) => {
|
||||||
|
const host = settings.provider === "besticon" ? settings.providerDomain : settings.fallbackProviderDomain;
|
||||||
|
return Promise.resolve(host + "/icon?url=" + domain + "&size=32..64..256");
|
||||||
|
} },
|
||||||
|
"favicongrabber": { name: "Favicon Grabber", url: (domain) => __async(void 0, null, function* () {
|
||||||
|
const icons = JSON.parse(yield (0, import_obsidian.request)({
|
||||||
|
method: "GET",
|
||||||
|
url: "https://favicongrabber.com/api/grab/" + domain
|
||||||
|
}));
|
||||||
|
if (icons.length === 0)
|
||||||
|
return Promise.resolve("http://invalid.stuff");
|
||||||
|
return Promise.resolve(icons.icons[0].src);
|
||||||
|
}) }
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/settings.ts
|
||||||
|
var DEFAULT_SETTINGS = {
|
||||||
|
provider: "duckduckgo",
|
||||||
|
fallbackProvider: "google",
|
||||||
|
providerDomain: "",
|
||||||
|
fallbackProviderDomain: "",
|
||||||
|
ignored: ""
|
||||||
|
};
|
||||||
|
var FaviconSettings = class extends import_obsidian2.PluginSettingTab {
|
||||||
|
constructor(app, plugin) {
|
||||||
|
super(app, plugin);
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
display() {
|
||||||
|
const { containerEl } = this;
|
||||||
|
containerEl.empty();
|
||||||
|
containerEl.createEl("h2", { text: "Link Favicons" });
|
||||||
|
new import_obsidian2.Setting(containerEl).setName("Icon Provider").addDropdown((dropdown) => {
|
||||||
|
for (const id in providers) {
|
||||||
|
if (providers.hasOwnProperty(id)) {
|
||||||
|
dropdown.addOption(id, providers[id].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dropdown.setValue(this.plugin.settings.provider).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.provider = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
this.display();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
if (Array.of("besticon").includes(this.plugin.settings.provider)) {
|
||||||
|
new import_obsidian2.Setting(containerEl).setName("Provider Domain").setDesc("This Provider is be selfhosted, please specify your deployment url. Refer to the readme of the provider for deployment instructions.").addText((text) => text.setValue(this.plugin.settings.providerDomain).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.providerDomain = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
new import_obsidian2.Setting(containerEl).setName("Fallback Icon Provider").addDropdown((dropdown) => {
|
||||||
|
for (const id in providers) {
|
||||||
|
if (providers.hasOwnProperty(id)) {
|
||||||
|
dropdown.addOption(id, providers[id].name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dropdown.setValue(this.plugin.settings.fallbackProvider).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.fallbackProvider = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
this.display();
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
if (Array.of("besticon").includes(this.plugin.settings.fallbackProvider)) {
|
||||||
|
new import_obsidian2.Setting(containerEl).setName("Fallback Provider Domain").setDesc("This Provider is be selfhosted, please specify your deployment url. Refer to the readme of the provider for deployment instructions.").addText((text) => text.setValue(this.plugin.settings.fallbackProviderDomain).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.fallbackProviderDomain = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
new import_obsidian2.Setting(containerEl).setName("Ignored Domains").setDesc("Don't show an favicon for these domains(one per line)").addTextArea((text) => {
|
||||||
|
text.setValue(this.plugin.settings.ignored).onChange((value) => __async(this, null, function* () {
|
||||||
|
this.plugin.settings.ignored = value;
|
||||||
|
yield this.plugin.saveSettings();
|
||||||
|
}));
|
||||||
|
text.inputEl.setAttr("rows", 8);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// src/main.ts
|
||||||
|
var FaviconPlugin = class extends import_obsidian3.Plugin {
|
||||||
|
isDisabled(el) {
|
||||||
|
if (el.getAttribute("data-no-favicon"))
|
||||||
|
return true;
|
||||||
|
if (el.getAttribute("data-favicon"))
|
||||||
|
return true;
|
||||||
|
const style = getComputedStyle(el, ":before").getPropertyValue("background-url");
|
||||||
|
console.log(style);
|
||||||
|
}
|
||||||
|
onload() {
|
||||||
|
return __async(this, null, function* () {
|
||||||
|
console.log("enabling plugin: link favicons");
|
||||||
|
yield this.loadSettings();
|
||||||
|
this.addSettingTab(new FaviconSettings(this.app, this));
|
||||||
|
this.registerMarkdownPostProcessor((element, _) => __async(this, null, function* () {
|
||||||
|
const provider = providers[this.settings.provider];
|
||||||
|
const fallbackProvider = providers[this.settings.fallbackProvider];
|
||||||
|
if (!provider || !fallbackProvider) {
|
||||||
|
console.log("Link Favicons: misconfigured providers");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const links = element.querySelectorAll("a.external-link:not([data-favicon])");
|
||||||
|
for (let index = 0; index < links.length; index++) {
|
||||||
|
const link = links.item(index);
|
||||||
|
if (!this.isDisabled(link)) {
|
||||||
|
link.dataset.favicon = "true";
|
||||||
|
try {
|
||||||
|
const domain = new URL(link.href);
|
||||||
|
if (!this.settings.ignored.split("\n").contains(domain.hostname)) {
|
||||||
|
const el = document.createElement("object");
|
||||||
|
el.addClass("link-favicon");
|
||||||
|
el.dataset.host = domain.hostname;
|
||||||
|
el.data = yield provider.url(domain.hostname, this.settings);
|
||||||
|
el.data.contains(".ico") ? el.type = "image/x-icon" : el.type = "image/png";
|
||||||
|
el.style.height = "0.8em";
|
||||||
|
el.style.display = "inline-block";
|
||||||
|
const img = el.createEl("img");
|
||||||
|
img.src = yield fallbackProvider.url(domain.hostname, this.settings);
|
||||||
|
img.addClass("link-favicon");
|
||||||
|
img.style.height = "0.8em";
|
||||||
|
img.style.display = "block";
|
||||||
|
link.prepend(el);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.log("Link Favicons: invalid url: " + link.href);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onunload() {
|
||||||
|
console.log("disabling plugin: link favicons");
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"id": "link-favicon",
|
||||||
|
"name": "Link Favicons",
|
||||||
|
"version": "1.2.2",
|
||||||
|
"minAppVersion": "0.12.0",
|
||||||
|
"description": "See the favicon for a linked website. ",
|
||||||
|
"author": "Johannes Theiner",
|
||||||
|
"authorUrl": "https://github.com/joethei",
|
||||||
|
"isDesktopOnly": false
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
.link-favicon{
|
||||||
|
vertical-align: bottom;
|
||||||
|
margin-bottom: 0.3em;
|
||||||
|
margin-left: 0.1em;
|
||||||
|
margin-right: 0.1em;
|
||||||
|
cursor: pointer !important;
|
||||||
|
image-rendering: -webkit-optimize-contrast;
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"id": "obsidian-advanced-uri",
|
"id": "obsidian-advanced-uri",
|
||||||
"name": "Advanced Obsidian URI",
|
"name": "Advanced URI",
|
||||||
"description": "Advanced modes for Obsidian URI",
|
"description": "Advanced modes for Obsidian URI",
|
||||||
"isDesktopOnly": false,
|
"isDesktopOnly": false,
|
||||||
"js": "main.js",
|
"js": "main.js",
|
||||||
"version": "1.16.0"
|
"version": "1.16.1"
|
||||||
}
|
}
|
||||||
|
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,91 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
Tag: ["Restaurant"]
|
||||||
|
Date: 2021-12-11
|
||||||
|
DocType: "Place"
|
||||||
|
Hierarchy: "NonRoot"
|
||||||
|
TimeStamp:
|
||||||
|
location: [47.3607763,8.551603810962654]
|
||||||
|
Place:
|
||||||
|
Type: ["Restaurant", "Bar"]
|
||||||
|
SubType: Modern
|
||||||
|
Style: Swiss
|
||||||
|
Location: "Bellevue"
|
||||||
|
Country: "CH"
|
||||||
|
Status: "Prospect"
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Parent:: [[@Restaurants Zürich|Restaurants in Zürich]]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```button
|
||||||
|
name Save
|
||||||
|
type command
|
||||||
|
action Save current file
|
||||||
|
id Save
|
||||||
|
```
|
||||||
|
^button-RazziaSave
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
# Razzia
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```ad-abstract
|
||||||
|
title: Summary
|
||||||
|
collapse: open
|
||||||
|
1ere recommendation in Zürich
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```toc
|
||||||
|
style: number
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### Contact
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
```ad-address
|
||||||
|
~~~
|
||||||
|
Seefeldstrasse 82
|
||||||
|
8008 Zürich
|
||||||
|
Switzerland
|
||||||
|
~~~
|
||||||
|
```
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
Phone:: <a href="tel:++41442967070">044 296 70 70</a>
|
||||||
|
|
||||||
|
Email:: welcome@razzia-zuerich.ch
|
||||||
|
|
||||||
|
Website:: [razzia. restaurant & bar Zürich - home](https://razzia-zuerich.ch/)
|
||||||
|
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
### Notes
|
||||||
|
|
||||||
|
 
|
||||||
|
|
||||||
|
Loret ipsum
|
||||||
|
|
||||||
|
 
|
||||||
|
 
|
Loading…
Reference in new issue