Initial commit
This commit is contained in:
91
Templates/Scripts/bookmark-webclipper.js
Normal file
91
Templates/Scripts/bookmark-webclipper.js
Normal file
@@ -0,0 +1,91 @@
|
||||
//
|
||||
// copy this code into this site to create a bookmarklet: https://caiorss.github.io/bookmarklet-maker/
|
||||
//
|
||||
javascript: (function () {
|
||||
if (window.obs_active) return;
|
||||
window.obs_active = true;
|
||||
|
||||
Promise.all([
|
||||
import('https://unpkg.com/turndown@6.0.0?module'),
|
||||
import('https://unpkg.com/@tehshrike/readability@0.2.0'),
|
||||
]).then(async ([{ default: T }, { default: R }]) => {
|
||||
|
||||
/* 1. CONFIGURATION */
|
||||
const vault = "Bobbie's Vault";
|
||||
const folder = "Library/";
|
||||
let tags = "clippings"; // disabled lower down
|
||||
|
||||
/* 2. DATE & TIME */
|
||||
const d = new Date();
|
||||
const pad = (n) => n.toString().padStart(2, '0');
|
||||
const isoNow = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}T${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;
|
||||
const today = `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
|
||||
|
||||
/* 3. ORIGINAL TAG LOGIC */
|
||||
if (document.querySelector('meta[name="keywords" i]')) {
|
||||
var keywords = document.querySelector('meta[name="keywords" i]').getAttribute('content').split(',');
|
||||
keywords.forEach(function (keyword) {
|
||||
tags += ' ' + keyword.split(' ').join('');
|
||||
});
|
||||
}
|
||||
|
||||
/* 4. CONTENT CAPTURE */
|
||||
const { title, byline, content } = new R(document.cloneNode(true)).parse();
|
||||
const selection = window.getSelection().toString();
|
||||
const md = new T({
|
||||
headingStyle: 'atx',
|
||||
hr: '---',
|
||||
bulletListMarker: '-',
|
||||
codeBlockStyle: 'fenced',
|
||||
emDelimiter: '*',
|
||||
}).turndown(selection || content);
|
||||
|
||||
/* 5. ORIGINAL METADATA LOGIC */
|
||||
const getMeta = (attr, val) => {
|
||||
const el = document.querySelector(`meta[${attr}='${val}']`);
|
||||
return el ? el.getAttribute("content").trim() : "";
|
||||
};
|
||||
|
||||
const author = byline || getMeta("name", "author") || getMeta("property", "author") || getMeta("property", "og:site_name");
|
||||
const authorBrackets = author ? `"[[${author}]]"` : "";
|
||||
|
||||
const timeEl = document.querySelector("time");
|
||||
let published = "";
|
||||
const pubAttr = timeEl ? timeEl.getAttribute("datetime") : "";
|
||||
if (pubAttr) {
|
||||
const pD = new Date(pubAttr);
|
||||
published = `${pD.getFullYear()}-${pad(pD.getMonth() + 1)}-${pad(pD.getDate())}`;
|
||||
}
|
||||
|
||||
|
||||
/* 6. BUILD YAML & FILE */
|
||||
const fileContent =
|
||||
'---\n'
|
||||
+ 'created: ' + isoNow + '\n'
|
||||
+ 'up:\n'
|
||||
+ ' - "[[Library]]"\n'
|
||||
+ 'title: "' + title + '"\n'
|
||||
+ 'source: ' + document.URL + '\n'
|
||||
+ 'author: ' + authorBrackets + '\n'
|
||||
+ 'published: ' + published + '\n'
|
||||
+ 'topics: \n'
|
||||
+ 'tags:\n'
|
||||
+ '---\n\n'
|
||||
+ md;
|
||||
|
||||
/* 7. SAFE URI CONSTRUCTION */
|
||||
const fileName = today + " " + title.replace(/[:/\\|?*<>]/g, '-').substring(0, 60).trim();
|
||||
const uri = `obsidian://new?vault=${encodeURIComponent(vault)}&file=${encodeURIComponent(folder + fileName)}&content=${encodeURIComponent(fileContent)}`;
|
||||
|
||||
/* 8. STABLE EXECUTION (IFRAME) */
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.style.display = 'none';
|
||||
iframe.src = uri;
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(iframe);
|
||||
window.obs_active = false;
|
||||
}, 1000);
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user