making the frontmatter icons work

This commit is contained in:
Jamie Steiner 2024-11-10 15:52:07 +02:00
parent ef86d258c1
commit 4d4db83b5e
5 changed files with 38 additions and 116 deletions

View file

@ -1,68 +1,11 @@
# Share Note
Instantly share / publish a note. Notes are shared with your full theme and should look identical to how they look in your Obsidian vault.
Instantly share / publish a note. Notes are shared in markdown format, and are encrypted by default. This plugin uses Pastebin for storage. When shared, the note is upload to pastebin, and a url is created. Other users who receive the url, can open it in obsidian, and the note will be added to their vault. This allows users a quick and easy way to transport notes from one user to another, as long as both users have this plugin installed.
- 👉 [Install this plugin from the Plugin Store](https://obsidian.md/plugins?id=share-note)
- 📄 [Documentation](https://docs.note.sx/)
- 💬 [Discussion for this plugin](https://forum.obsidian.md/t/42788)
- 🚀 [Request new features / see the roadmap](https://note.sx/roadmap)
To share a note, choose `Share Note` from the command palette, or click the `⋮` menu in any note and choose `Copy shared link`
To send a note, choose `Send Note` from the command palette, or click the `⋮` menu in any note and choose `Copy shared link`
<img width="260" src="https://github.com/alangrainger/obsidian-share/assets/16197738/69b270a7-c064-4915-9c81-698ae5b54b44">
---
## Full theme support
Uploads using your current theme, along with all your options and custom CSS snippets.
Supports all Obsidian content types:
### Images!
<img width="320" src="docs/wow5.png">
### Dataview queries!
Here's an example inline Dataview query. It will be correctly rendered when sharing:
```
The answer is `= 7 + 8`!
```
The answer is 15!
### Callouts!
<img width="600" src="docs/callouts.png">
### Links between notes!
If your shared note links to another note which is also shared, that link will also function on the shared webpage.
### Code blocks!
```javascript
function doYouEven(haveToAsk) {
return 'Of course we can do it!'
}
```
### Checkboxes! Tags!
**Project Manhattan:** #in-progress #behind-schedule
- [x] Start project
- [x] Procrastinate
- [ ] Finish project
### Internal links
Share a table of contents and jump around your document.
---
## Usage
Use the `Share Note` command from the Command Palette. You can map it to a hotkey to make things faster.
@ -79,38 +22,6 @@ The content of your note is encrypted by default. What this means is that you ca
> 🛈 **Encryption is optional, and can be turned on/off for individual notes, or for all notes, whatever you prefer.**
### 🧑‍💻 How it works
When you share an encrypted note, you'll get a share link that looks like this:
https://share.note.sx/4earajc8#PtC3oQDjDQK9VP7fljmQkLBA/rIMb2tbFsGoG44VdFY
This part is the link to the file:
https://share.note.sx/4earajc8
If you click on it, you'll see a message that says "*Encrypted note*", because you haven't provided the decryption key.
The decryption key is the second part of the share link after the `#` symbol:
`#PtC3oQDjDQK9VP7fljmQkLBA/rIMb2tbFsGoG44VdFY`
When you combine those two things together, the note is able to be decrypted and you can see the content:
https://share.note.sx/4earajc8#PtC3oQDjDQK9VP7fljmQkLBA/rIMb2tbFsGoG44VdFY
The decryption key **only** exists inside your vault, and is only known to you and whoever you send the link to. Nobody else can read the content.
You may optionally share an unencrypted version of a note by using the frontmatter checkbox property `share_unencrypted` = ✅. This note you are currently reading is shared unencrypted.
If you decide you want to share most notes unencrypted by default, then you can encrypt an individual note by using a frontmatter checkbox called `share_encrypted`.
## Self-hosting
If you want to self-host your own server, you can use this repo:
https://github.com/alangrainger/share-note-self-hosted-backend
## Troubleshooting
See here: [Troubleshooting](https://docs.note.sx/Troubleshooting)

View file

@ -43,7 +43,7 @@ export default class SendNotePlugin extends Plugin {
if (data.action === "send-note" && data.sendurl && data.filename) {
requestUrl(data.sendurl)
.then((response) => {
console.log(response.text);
// console.log(response.text);
// check if file already exists
let newFilename = data.filename;
const file = this.app.vault.getAbstractFileByPath(data.filename);
@ -264,12 +264,12 @@ export default class SendNotePlugin extends Plugin {
if (linkEl?.innerText !== shareLink) return;
// Remove existing elements
// valueEl?.querySelectorAll('div.share-note-icons').forEach(el => el.remove())
if (valueEl && !valueEl.querySelector("div.share-note-icons")) {
if (valueEl && !valueEl.querySelector("div.send-note-icons")) {
const iconsEl = document.createElement("div");
iconsEl.classList.add("share-note-icons");
iconsEl.classList.add("send-note-icons");
// Re-share note icon
const shareIcon = iconsEl.createEl("span");
shareIcon.title = "Re-share note";
shareIcon.title = "Re-send note";
setIcon(shareIcon, "upload-cloud");
shareIcon.onclick = () => this.uploadNote();
// Copy to clipboard icon
@ -278,11 +278,11 @@ export default class SendNotePlugin extends Plugin {
setIcon(copyIcon, "copy");
copyIcon.onclick = async () => {
await navigator.clipboard.writeText(shareLink);
new StatusMessage("📋 Shared link copied to clipboard");
new StatusMessage("📋 Sending link copied to clipboard");
};
// Delete shared note icon
const deleteIcon = iconsEl.createEl("span");
deleteIcon.title = "Delete shared note";
deleteIcon.title = "Delete sent note";
setIcon(deleteIcon, "trash-2");
deleteIcon.onclick = () => this.deleteSharedNote(activeFile);
valueEl.prepend(iconsEl);

View file

@ -107,7 +107,13 @@ export default class Note {
let pastebinUserKey = this.plugin.settings.pasteBinUserKey;
let expiry = this.plugin.settings.pastebinExpiry;
const noteContent = await this.plugin.app.vault.read(this.file);
console.log("noteContent", noteContent);
// console.log("noteContent", noteContent);
await this.plugin.app.fileManager.processFrontMatter(this.file, (frontmatter) => {
if ((frontmatter["send_link"] = true)) {
delete frontmatter["send_link"];
}
});
requestUrl({
url: "https://pastebin.com/api/api_post.php",
method: "POST",
@ -119,15 +125,20 @@ export default class Note {
}&api_paste_expire_date=${expiry}&api_paste_format=text&api_paste_code=${encodeURIComponent(noteContent)}`,
})
.then((res) => {
console.log("res", res.text);
// console.log("res", res.text);
const urlObj = new URL(res.text);
// Get the pathname and split by "/"
const pathSegments = urlObj.pathname.split("/");
// The last segment will be the suffix
const suffix = pathSegments[pathSegments.length - 1];
const obsidianUrl = `obsidian://send-note?sendurl=https://pastebin.com/raw/${suffix}&filename=${this.file.basename}.md`;
console.log(obsidianUrl);
// console.log(obsidianUrl);
navigator.clipboard.writeText(obsidianUrl);
this.plugin.app.fileManager.processFrontMatter(this.file, (frontmatter) => {
if ((frontmatter["send_link"] = true)) {
frontmatter["send_link"] = obsidianUrl;
}
});
})
.catch((err) => {
console.log("err", err);

View file

@ -50,7 +50,7 @@ export const DEFAULT_SETTINGS: SendNoteSettings = {
server: "https://api.note.sx",
uid: "",
apiKey: "",
yamlField: "share",
yamlField: "send",
noteWidth: "",
theme: "",
themeMode: ThemeMode["Same as theme"],

View file

@ -1,24 +1,24 @@
.share-note-status-error.notice {
background: #c10000;
color: white
.send-note-status-error.notice {
background: #c10000;
color: white;
}
.share-note-status-info.notice {
background: hsl(204, 86%, 53%);
color: white
.send-note-status-info.notice {
background: hsl(204, 86%, 53%);
color: white;
}
.share-note-status-success.notice {
background: #629762;
color: white
.send-note-status-success.notice {
background: #629762;
color: white;
}
.share-note-icons {
display: flex;
.send-note-icons {
display: flex;
}
.share-note-icons > span {
display: flex;
margin-left: 6px;
cursor: pointer;
.send-note-icons > span {
display: flex;
margin-left: 6px;
cursor: pointer;
}