/*
THIS IS A GENERATED/BUNDLED FILE BY ROLLUP
if you want to view the source visit the plugins github repository
*/
'use strict';
var obsidian = require('obsidian');
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
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
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
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 step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
const TWEET_LINK = new RegExp(/https:\/\/(?:mobile\.)?twitter\.com\/.+\/(\d+)/);
class TwitterEmbed {
canHandle(link, settings) {
return settings.replaceTwitterLinks && TWEET_LINK.test(link);
}
createEmbed(link, container) {
this._ensureTwitterLoaded();
const tweetId = link.match(TWEET_LINK)[1];
container.id = `TweetContainer${tweetId}`;
window.twttr.ready(() => {
window.twttr.widgets.createTweet(tweetId, container);
});
return container;
}
_ensureTwitterLoaded() {
window.twttr = (function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {};
if (d.getElementById(id))
return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
// Add global settings for Twitter embeds
const meta = d.createElement("meta");
meta.name = "twitter.dnt";
meta.content = "on";
d.getElementsByTagName("head")[0].appendChild(meta);
t._e = [];
t.ready = function (f) {
t._e.push(f);
};
return t;
})(document, "script", "twitter-wjs");
}
}
const YOUTUBE_LINK = new RegExp(/http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?[\w\?=]*)?/);
class YouTubeEmbed {
canHandle(link, settings) {
return settings.replaceYouTubeLinks && YOUTUBE_LINK.test(link);
}
createEmbed(link, container) {
const wrapper = document.createElement("div");
wrapper.classList.add("video-wrapper");
const iframe = document.createElement("iframe");
const videoId = link.match(YOUTUBE_LINK)[1];
iframe.src = `https://www.youtube.com/embed/${videoId}`;
iframe.title = "YouTube video player";
iframe.setAttr("frameborder", "0");
iframe.allow =
"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture;";
iframe.setAttr("sandbox", "allow-scripts allow-same-origin allow-presentation allow-popups");
wrapper.appendChild(iframe);
container.appendChild(wrapper);
return container;
}
}
const DEFAULT_SETTINGS = {
replaceTwitterLinks: true,
replaceYouTubeLinks: true,
keepLinksInPreview: false,
embedPlacement: "above",
disableAutomaticEmbeds: false,
};
class SimpleEmbedsPlugin extends obsidian.Plugin {
constructor() {
super(...arguments);
this.embedSources = [new TwitterEmbed(), new YouTubeEmbed()];
}
onload() {
return __awaiter(this, void 0, void 0, function* () {
console.log(`Loading ${this.manifest.name} v${this.manifest.version}`);
yield this.loadSettings();
this.addSettingTab(new SimpleEmbedPluginSettingTab(this.app, this));
this.registerMarkdownPostProcessor((el, ctx) => {
const anchors = el.querySelectorAll("a.external-link");
anchors.forEach((anchor) => {
this._handleAnchor(anchor);
});
});
});
}
onunload() {
console.log(`Unloading ${this.manifest.name}`);
}
loadSettings() {
return __awaiter(this, void 0, void 0, function* () {
this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData());
});
}
saveSettings() {
var _a;
return __awaiter(this, void 0, void 0, function* () {
yield this.saveData(this.settings);
const view = this.app.workspace.getActiveViewOfType(obsidian.MarkdownView);
(_a = view === null || view === void 0 ? void 0 : view.previewMode) === null || _a === void 0 ? void 0 : _a.rerender(true);
});
}
_handleAnchor(a) {
const isWithinText = Array.from(a.parentElement.childNodes)
.filter((node) => {
return node instanceof Text;
})
.some((text) => {
const nbsp = new RegExp(String.fromCharCode(160), "g");
const data = text.data.replace(nbsp, "").trim();
return !!data;
});
const disableAutomaticEmbeds = this.settings.disableAutomaticEmbeds;
const replaceWithEmbed = disableAutomaticEmbeds
? a.innerText.endsWith("|embed")
: !a.innerText.endsWith("|noembed");
a.innerText = a.innerText.replace("|noembed", "").replace("|embed", "");
if (isWithinText && !disableAutomaticEmbeds) {
return;
}
const href = a.getAttribute("href");
const container = document.createElement("div");
container.classList.add("embed-container");
let embedSource = this.embedSources.find((source) => {
return source.canHandle(href, this.settings);
});
if (embedSource && replaceWithEmbed) {
const embed = embedSource.createEmbed(href, container);
this._insertEmbed(a, embed);
}
}
_insertEmbed(a, container) {
const parent = a.parentElement;
const keepLinksInPreview = this.settings.keepLinksInPreview;
const placement = this.settings.embedPlacement;
if (keepLinksInPreview && placement === "above") {
parent.insertBefore(container, a);
}
else if (keepLinksInPreview && placement === "below") {
container.insertAfter(a);
}
else {
parent.replaceChild(container, a);
}
}
}
class SimpleEmbedPluginSettingTab extends obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
let { containerEl } = this;
containerEl.empty();
containerEl.createEl("h3", { text: "Available Embed Sources" });
containerEl.createEl("p", {
cls: "setting-item-description",
}, (el) => {
el.innerHTML =
"Disable to prevent all links from source ever being turned into embeds. To disable an individual link, add |noembed to the link text. For example, [Some description|noembed](https://twitter.com/user/status/123)";
});
new obsidian.Setting(containerEl).setName("Twitter").addToggle((toggle) => {
toggle
.setValue(this.plugin.settings.replaceTwitterLinks)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
this.plugin.settings.replaceTwitterLinks = value;
yield this.plugin.saveSettings();
}));
});
new obsidian.Setting(containerEl).setName("YouTube").addToggle((toggle) => {
toggle
.setValue(this.plugin.settings.replaceYouTubeLinks)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
this.plugin.settings.replaceYouTubeLinks = value;
yield this.plugin.saveSettings();
}));
});
containerEl.createEl("h3", { text: "Advanced Settings" });
new obsidian.Setting(containerEl)
.setName("Keep links in preview")
.setDesc("Insert embeds above the link, instead of replacing the link in the preview.")
.addToggle((toggle) => {
toggle
.setValue(this.plugin.settings.keepLinksInPreview)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
this.plugin.settings.keepLinksInPreview = value;
yield this.plugin.saveSettings();
placement.setDisabled(!this.plugin.settings.keepLinksInPreview);
}));
});
const placement = new obsidian.Setting(containerEl)
.setName("Place embeds")
.setDesc('When "Keep links in preview" is enabled, choose whether to place the embed above or below the link.')
.addDropdown((dropdown) => {
dropdown
.addOptions({ above: "Above link", below: "Below link" })
.setValue(this.plugin.settings.embedPlacement)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
this.plugin.settings.embedPlacement = value;
yield this.plugin.saveSettings();
}));
})
.setDisabled(!this.plugin.settings.keepLinksInPreview);
const fragment = new DocumentFragment();
const div = fragment.createEl("div");
const span = fragment.createEl("span");
span.innerHTML =
"Instead of automatically embedding all matching links, you must add |embed to the link text of each link you would like to turn into an embed. For example, [Some description|embed](https://twitter.com/user/status/123)";
div.appendChild(span);
fragment.appendChild(div);
new obsidian.Setting(containerEl)
.setName("Disable automatic embeds")
.setDesc(fragment)
.addToggle((toggle) => {
toggle
.setValue(this.plugin.settings.disableAutomaticEmbeds)
.onChange((value) => __awaiter(this, void 0, void 0, function* () {
this.plugin.settings.disableAutomaticEmbeds = value;
yield this.plugin.saveSettings();
}));
});
}
}
module.exports = SimpleEmbedsPlugin;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsImVtYmVkcy90d2l0dGVyLnRzIiwiZW1iZWRzL3lvdXR1YmUudHMiLCJzZXR0aW5ncy50cyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlBsdWdpbiIsIk1hcmtkb3duVmlldyIsIlBsdWdpblNldHRpbmdUYWIiLCJTZXR0aW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFD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