Last active
September 13, 2023 14:25
-
-
Save atalazer/eeb1073ac4f97d35131f7eedecb00467 to your computer and use it in GitHub Desktop.
Originally form https://gist.github.com/kepano/90c05f162c37cf730abb8ff027987ca3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
javascript: Promise.all([import('https://unpkg.com/turndown@6.0.0?module'), import('https://unpkg.com/@tehshrike/readability@0.2.0'), ]).then(async ([{ | |
default: Turndown | |
}, { | |
default: Readability | |
}]) => { | |
/* Optional vault name */ | |
const vault = ""; | |
/* Optional folder name such as "Clippings/" */ | |
const folder = "00 Inbox/Web Clips/"; | |
/* Optional tags */ | |
let tags = "web-clip"; | |
/* Parse the site's meta keywords content into tags, if present */ | |
if (document.querySelector('meta[name="keywords" i]')) { | |
var keywords = document.querySelector('meta[name="keywords" i]').getAttribute('content').split(','); | |
keywords.forEach(function(keyword) { | |
let tag = ' ' + keyword.split(' ').join(''); | |
tags += tag; | |
}); | |
} | |
function getSelectionHtml() { | |
var html = ""; | |
if (typeof window.getSelection != "undefined") { | |
var sel = window.getSelection(); | |
if (sel.rangeCount) { | |
var container = document.createElement("div"); | |
for (var i = 0, len = sel.rangeCount; i < len; ++i) { | |
container.appendChild(sel.getRangeAt(i).cloneContents()); | |
} | |
html = container.innerHTML; | |
} | |
} else if (typeof document.selection != "undefined") { | |
if (document.selection.type == "Text") { | |
html = document.selection.createRange().htmlText; | |
} | |
} | |
return html; | |
} | |
const selection = getSelectionHtml(); | |
const { | |
title, | |
byline, | |
content | |
} = new Readability(document.cloneNode(true)).parse(); | |
function getFileName(fileName) { | |
var userAgent = window.navigator.userAgent, | |
platform = window.navigator.platform, | |
windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE']; | |
if (windowsPlatforms.indexOf(platform) !== -1) { | |
fileName = fileName.replace(':', '').replace(/[/\\?%*|"<>]/g, '-'); | |
} else { | |
fileName = fileName.replace(':', '').replace(/\//g, '-').replace(/\\/g, '-'); | |
} | |
return fileName; | |
} | |
const fileName = getFileName(title); | |
if (selection) { | |
var markdownify = selection; | |
} else { | |
var markdownify = content; | |
} | |
if (vault) { | |
var vaultName = '&vault=' + encodeURIComponent(`${vault}`); | |
} else { | |
var vaultName = ''; | |
} | |
const markdownBody = new Turndown({ | |
headingStyle: 'atx', | |
hr: '---', | |
bulletListMarker: '-', | |
codeBlockStyle: 'fenced', | |
emDelimiter: '*', | |
}).turndown(markdownify); | |
var date = new Date(); | |
function convertDate(date) { | |
var yyyy = date.getFullYear().toString(); | |
var mm = (date.getMonth()+1).toString(); | |
var dd = date.getDate().toString(); | |
var mmChars = mm.split(''); | |
var ddChars = dd.split(''); | |
return yyyy + '-' + (mmChars[1]?mm:"0"+mmChars[0]) + '-' + (ddChars[1]?dd:"0"+ddChars[0]); | |
} | |
const today = convertDate(date); | |
// Utility function to get meta content by name or property | |
function getMetaContent(attr, value) { | |
var element = document.querySelector(`meta[${attr}='${value}']`); | |
return element ? element.getAttribute("content").trim() : ""; | |
} | |
// Fetch byline, meta author, property author, or site name | |
var author = byline || getMetaContent("name", "author") || getMetaContent("property", "author") || getMetaContent("property", "og:site_name"); | |
// Check if there's an author and add brackets | |
var authorName = author ? `"${author}"` : ""; | |
/* Try to get published date */ | |
var timeElement = document.querySelector("time"); | |
var publishedDate = timeElement ? timeElement.getAttribute("datetime") : ""; | |
if (publishedDate && publishedDate.trim() !== "") { | |
var date = new Date(publishedDate); | |
var year = date.getFullYear(); | |
var month = date.getMonth() + 1; // Months are 0-based in JavaScript | |
var day = date.getDate(); | |
// Pad month and day with leading zeros if necessary | |
month = month < 10 ? '0' + month : month; | |
day = day < 10 ? '0' + day : day; | |
var published = year + '-' + month + '-' + day; | |
} else { | |
var published = '' | |
} | |
/* YAML front matter as tags render cleaner with special chars */ | |
const fileContent = | |
'---\n' | |
+ 'author: ' + authorName + '\n' | |
+ 'title: "' + title + '"\n' | |
+ 'source: ' + document.URL + '\n' | |
+ 'tags: [' + tags + ']\n' | |
+ '---\n\n' | |
+ markdownBody ; | |
document.location.href = "obsidian://new?" | |
+ "file=" + encodeURIComponent(folder + fileName) | |
+ "&content=" + encodeURIComponent(fileContent) | |
+ vaultName ; | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment