mirror of
https://github.com/jxpeng98/obsidian-to-NotionNext
synced 2026-07-29 16:35:57 +08:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2434ddd532 | ||
|
|
55804e491a | ||
|
|
679e7ec4f1 | ||
|
|
9be679f456 |
11
.github/workflows/release.yml
vendored
11
.github/workflows/release.yml
vendored
@@ -75,6 +75,17 @@ jobs:
|
|||||||
asset_name: manifest.json
|
asset_name: manifest.json
|
||||||
asset_content_type: application/json
|
asset_content_type: application/json
|
||||||
|
|
||||||
|
- name: Upload markdown template
|
||||||
|
id: upload-md
|
||||||
|
uses: actions/upload-release-asset@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.REPO_ACCESS_TOKEN }}
|
||||||
|
with:
|
||||||
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||||
|
asset_path: ./obsidian_template.md
|
||||||
|
asset_name: template.md
|
||||||
|
asset_content_type: text/markdown
|
||||||
|
|
||||||
# - name: Upload styles.css
|
# - name: Upload styles.css
|
||||||
# id: upload-css
|
# id: upload-css
|
||||||
# uses: actions/upload-release-asset@v1
|
# uses: actions/upload-release-asset@v1
|
||||||
|
|||||||
34
README-zh.md
34
README-zh.md
@@ -27,6 +27,10 @@
|
|||||||
- password
|
- password
|
||||||
- icon
|
- icon
|
||||||
|
|
||||||
|
在最新的0.0.6版本,我还增加了以下内容:
|
||||||
|
- titleicon: 标题的emoji图标,暂时只能支持emoji
|
||||||
|
- coverurl: 封面图片的url, url可以是任何一种图片的url, 例如jpg,png,svg等等。
|
||||||
|
|
||||||
**如果你是直接复制的NotionNext的模板,这些内容应该已经有了。我在原作者的基础之上对本插件的内容进行了更改,所以你只需要保证你的数据库有如上内容,并且所有的字母都是小写!!!**
|
**如果你是直接复制的NotionNext的模板,这些内容应该已经有了。我在原作者的基础之上对本插件的内容进行了更改,所以你只需要保证你的数据库有如上内容,并且所有的字母都是小写!!!**
|
||||||
|
|
||||||
|
|
||||||
@@ -41,24 +45,36 @@
|
|||||||
### 使用插件
|
### 使用插件
|
||||||
在仓库中我上传了一个模板,你可以直接复制到你的模板文件夹中。然后使用Obsidian的模板功能一键生成新笔记。
|
在仓库中我上传了一个模板,你可以直接复制到你的模板文件夹中。然后使用Obsidian的模板功能一键生成新笔记。
|
||||||
|
|
||||||
|
|
||||||
如果你不想使用模板,你也可以直接在Obsidian中创建一个新的文件,然后复制下边的内容。然后保存。
|
如果你不想使用模板,你也可以直接在Obsidian中创建一个新的文件,然后复制下边的内容。然后保存。
|
||||||
```markdown
|
```markdown
|
||||||
---
|
---
|
||||||
type: Post # Post or Page, the default is Post
|
# default value has been set.
|
||||||
slug: test # slug for url, the default is
|
# for any unwanted value, you can delete it or set it to empty.
|
||||||
stats: Draft # Draft, Invisible, Published
|
# for example, if you donot want to set password, you can delete password: "1234" or set it to password: ""
|
||||||
category: test
|
# 我已经在插件中设置了默认值,如果有不需要的选项,可以直接删除。
|
||||||
summary: this is a summary for test post
|
# 例如你不需要密码选项,你可以将password: "1234"删除,或者将它设置为空。
|
||||||
icon: fa-solid fa-camera # you can ignore this
|
# !!!!!!!!!!!!
|
||||||
password: "1234" # if you donot want to set password, you can delete this line
|
# 现在阶段一定不要修改表头的名字, please do not change the name of the header in YAML front matter
|
||||||
|
# !!!!!!!!!!!!
|
||||||
|
titleicon: 📎 # emoji icon, default is 📜, 默认是📜
|
||||||
|
coverurl: https://img.jxpeng.dev/2023/08/843e27a210847f05a0f7cfb121fec100.jpg # default is empty, 默认是空
|
||||||
|
type: Post # Post or Page, default is Post, 默认是Post
|
||||||
|
slug: test # slug for url, default is empty, 默认是空
|
||||||
|
stats: Draft # Draft, Invisible, Published, default is Draft, 默认是Draft
|
||||||
|
category: test # default is 'Obsidian', 默认是'Obsidian'
|
||||||
|
summary: this is a summary for test post # default is empty, 默认是空
|
||||||
|
icon: fa-solid fa-camera # you can ignore this, default is empty, 默认是空,可直接删除
|
||||||
|
password: "1234" # if you donot want to set password, you can delete this line, default is empty, 默认是空,可直接删除
|
||||||
|
# 现在必须开启tags选项,否则会报错
|
||||||
tags:
|
tags:
|
||||||
- test # tags for post
|
- test # tags for post
|
||||||
- web # add more tags if you want
|
- web # add more tags if you want
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
Contents Below
|
Contents Below
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
模板使用如下:
|
模板使用如下:
|
||||||

|

|
||||||
|
|||||||
32
README.md
32
README.md
@@ -28,6 +28,10 @@ Before installing the plugin, you must have set up the following:
|
|||||||
- password
|
- password
|
||||||
- icon
|
- icon
|
||||||
|
|
||||||
|
In version 0.0.6, I also add the following contents:
|
||||||
|
- titleicon: the unique icon for each post, it can only support emoji currently.
|
||||||
|
- cover url: the cover image for each post, it should be end with a type of image, such as .jpg, .png, .gif, etc.
|
||||||
|
|
||||||
**If you've directly copied the NotionNext template, these contents should already exist. I've made changes to this plugin based on the original author's work. All you need to ensure is that your database has the above content, and every letter is in lowercase!!!**
|
**If you've directly copied the NotionNext template, these contents should already exist. I've made changes to this plugin based on the original author's work. All you need to ensure is that your database has the above content, and every letter is in lowercase!!!**
|
||||||
|
|
||||||
**⚠️⚠️⚠️: All headers are in lowercase!!! The order doesn't matter!**
|
**⚠️⚠️⚠️: All headers are in lowercase!!! The order doesn't matter!**
|
||||||
@@ -45,19 +49,31 @@ In the repository, I have uploaded a template which you can directly copy into y
|
|||||||
If you don't want to use the template, you can also directly create a new file in Obsidian and then copy the content below. Then save it.
|
If you don't want to use the template, you can also directly create a new file in Obsidian and then copy the content below. Then save it.
|
||||||
```markdown
|
```markdown
|
||||||
---
|
---
|
||||||
type: Post # Post or Page, the default is Post
|
# default value has been set.
|
||||||
slug: test # slug for url, the default is
|
# for any unwanted value, you can delete it or set it to empty.
|
||||||
stats: Draft # Draft, Invisible, Published
|
# for example, if you donot want to set password, you can delete password: "1234" or set it to password: ""
|
||||||
category: test
|
# 我已经在插件中设置了默认值,如果有不需要的选项,可以直接删除。
|
||||||
summary: this is a summary for test post
|
# 例如你不需要密码选项,你可以将password: "1234"删除,或者将它设置为空。
|
||||||
icon: fa-solid fa-camera # you can ignore this
|
# !!!!!!!!!!!!
|
||||||
password: "1234" # if you donot want to set password, you can delete this line
|
# 现在阶段一定不要修改表头的名字, please do not change the name of the header in YAML front matter
|
||||||
|
# !!!!!!!!!!!!
|
||||||
|
titleicon: 📎 # emoji icon, default is 📜, 默认是📜
|
||||||
|
coverurl: https://img.jxpeng.dev/2023/08/843e27a210847f05a0f7cfb121fec100.jpg # default is empty, 默认是空
|
||||||
|
type: Post # Post or Page, default is Post, 默认是Post
|
||||||
|
slug: test # slug for url, default is empty, 默认是空
|
||||||
|
stats: Draft # Draft, Invisible, Published, default is Draft, 默认是Draft
|
||||||
|
category: test # default is 'Obsidian', 默认是'Obsidian'
|
||||||
|
summary: this is a summary for test post # default is empty, 默认是空
|
||||||
|
icon: fa-solid fa-camera # you can ignore this, default is empty, 默认是空,可直接删除
|
||||||
|
password: "1234" # if you donot want to set password, you can delete this line, default is empty, 默认是空,可直接删除
|
||||||
|
# 现在必须开启tags选项,否则会报错
|
||||||
tags:
|
tags:
|
||||||
- test # tags for post
|
- test # tags for post
|
||||||
- web # add more tags if you want
|
- web # add more tags if you want
|
||||||
---
|
---
|
||||||
|
|
||||||
Contents Below
|
Contents Below
|
||||||
|
|
||||||
```
|
```
|
||||||
Usage of the template is as follows:
|
Usage of the template is as follows:
|
||||||

|

|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { Notice, requestUrl,TFile,normalizePath, App } from "obsidian";
|
import {App, Notice, requestUrl, TFile} from "obsidian";
|
||||||
import { Client } from "@notionhq/client";
|
import {Client} from "@notionhq/client";
|
||||||
import { markdownToBlocks, } from "@tryfabric/martian";
|
import {markdownToBlocks,} from "@tryfabric/martian";
|
||||||
import * as yamlFrontMatter from "yaml-front-matter";
|
import * as yamlFrontMatter from "yaml-front-matter";
|
||||||
import * as yaml from "yaml"
|
import * as yaml from "yaml"
|
||||||
import MyPlugin from "main";
|
import MyPlugin from "main";
|
||||||
|
|
||||||
export class Upload2Notion {
|
export class Upload2Notion {
|
||||||
app: MyPlugin;
|
app: MyPlugin;
|
||||||
notion: Client;
|
notion: Client;
|
||||||
@@ -13,7 +14,7 @@ export class Upload2Notion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async deletePage(notionID:string){
|
async deletePage(notionID:string){
|
||||||
const response = await requestUrl({
|
return await requestUrl({
|
||||||
url: `https://api.notion.com/v1/blocks/${notionID}`,
|
url: `https://api.notion.com/v1/blocks/${notionID}`,
|
||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
headers: {
|
headers: {
|
||||||
@@ -23,22 +24,49 @@ export class Upload2Notion {
|
|||||||
},
|
},
|
||||||
body: ''
|
body: ''
|
||||||
})
|
})
|
||||||
return response;
|
}
|
||||||
|
|
||||||
|
async getDataBase(databaseID:string){
|
||||||
|
const response = await requestUrl({
|
||||||
|
url: `https://api.notion.com/v1/databases/${databaseID}`,
|
||||||
|
method: 'GET',
|
||||||
|
headers: {
|
||||||
|
'Authorization': 'Bearer ' + this.app.settings.notionAPI,
|
||||||
|
'Notion-Version': '2022-06-28',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// Check if cover is present in the JSON response and then get the URL
|
||||||
|
if (response.json.cover && response.json.cover.external) {
|
||||||
|
return response.json.cover.external.url;
|
||||||
|
} else {
|
||||||
|
return null; // or some other default value, if you prefer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 因为需要解析notion的block进行对比,非常的麻烦,
|
// 因为需要解析notion的block进行对比,非常的麻烦,
|
||||||
// 暂时就直接删除,新建一个page
|
// 暂时就直接删除,新建一个page
|
||||||
async updatePage(notionID:string, title:string, allowTags:boolean, tags:string[], type:string, slug:string, stats:string, category:string, summary:string, paword:string, favicon:string, datetime:string, childArr:any) {
|
async updatePage(notionID:string, title:string, allowTags:boolean, emoji:string, cover:string, tags:string[], type:string, slug:string, stats:string, category:string, summary:string, paword:string, favicon:string, datetime:string, childArr:any) {
|
||||||
await this.deletePage(notionID)
|
await this.deletePage(notionID)
|
||||||
const res = await this.createPage(title, allowTags, tags, type, slug, stats, category, summary, paword, favicon, datetime, childArr)
|
|
||||||
return res
|
const databasecover = await this.getDataBase(this.app.settings.databaseID)
|
||||||
|
|
||||||
|
if (cover == null) {
|
||||||
|
cover = databasecover
|
||||||
|
}
|
||||||
|
|
||||||
|
return await this.createPage(title, allowTags, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime, childArr)
|
||||||
}
|
}
|
||||||
|
|
||||||
async createPage(title:string, allowTags:boolean, tags:string[], type:string, slug:string, stats:string, category:string, summary:string, pawrod:string, favicon:string, datetime:string, childArr: any) {
|
async createPage(title:string, allowTags:boolean, emoji:string, cover:string, tags:string[], type:string, slug:string, stats:string, category:string, summary:string, pawrod:string, favicon:string, datetime:string, childArr: any) {
|
||||||
const bodyString:any = {
|
const bodyString:any = {
|
||||||
parent: {
|
parent: {
|
||||||
database_id: this.app.settings.databaseID
|
database_id: this.app.settings.databaseID
|
||||||
},
|
},
|
||||||
|
icon: {
|
||||||
|
emoji: emoji || '📜'
|
||||||
|
},
|
||||||
properties: {
|
properties: {
|
||||||
title: {
|
title: {
|
||||||
title: [
|
title: [
|
||||||
@@ -113,18 +141,26 @@ export class Upload2Notion {
|
|||||||
},
|
},
|
||||||
children: childArr,
|
children: childArr,
|
||||||
}
|
}
|
||||||
|
if (cover) {
|
||||||
if(this.app.settings.bannerUrl) {
|
|
||||||
bodyString.cover = {
|
bodyString.cover = {
|
||||||
type: "external",
|
type: "external",
|
||||||
external: {
|
external: {
|
||||||
url: this.app.settings.bannerUrl
|
url: cover
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!bodyString.cover && this.app.settings.bannerUrl) {
|
||||||
|
bodyString.cover = {
|
||||||
|
type: "external",
|
||||||
|
external: {
|
||||||
|
url: this.app.settings.bannerUrl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await requestUrl({
|
return await requestUrl({
|
||||||
url: `https://api.notion.com/v1/pages`,
|
url: `https://api.notion.com/v1/pages`,
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
@@ -135,13 +171,12 @@ export class Upload2Notion {
|
|||||||
},
|
},
|
||||||
body: JSON.stringify(bodyString),
|
body: JSON.stringify(bodyString),
|
||||||
})
|
})
|
||||||
return response;
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
new Notice(`network error ${error}`)
|
new Notice(`network error ${error}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async syncMarkdownToNotion(title:string, allowTags:boolean, tags:string[], type:string, slug:string, stats:string, category:string, summary:string, paword:string, favicon:string, datetime:string, markdown: string, nowFile: TFile, app:App, settings:any): Promise<any> {
|
async syncMarkdownToNotion(title:string, allowTags:boolean, emoji:string, cover:string, tags:string[], type:string, slug:string, stats:string, category:string, summary:string, paword:string, favicon:string, datetime:string, markdown: string, nowFile: TFile, app:App, settings:any): Promise<any> {
|
||||||
let res:any
|
let res:any
|
||||||
const yamlObj:any = yamlFrontMatter.loadFront(markdown);
|
const yamlObj:any = yamlFrontMatter.loadFront(markdown);
|
||||||
const __content = yamlObj.__content
|
const __content = yamlObj.__content
|
||||||
@@ -150,9 +185,9 @@ export class Upload2Notion {
|
|||||||
const notionID = frontmasster ? frontmasster.notionID : null
|
const notionID = frontmasster ? frontmasster.notionID : null
|
||||||
|
|
||||||
if(notionID){
|
if(notionID){
|
||||||
res = await this.updatePage(notionID, title, allowTags, tags, type, slug, stats, category, summary, paword, favicon, datetime, file2Block);
|
res = await this.updatePage(notionID, title, allowTags, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime, file2Block);
|
||||||
} else {
|
} else {
|
||||||
res = await this.createPage(title, allowTags, tags, type, slug, stats, category, summary, paword, favicon, datetime, file2Block);
|
res = await this.createPage(title, allowTags, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime, file2Block);
|
||||||
}
|
}
|
||||||
if (res.status === 200) {
|
if (res.status === 200) {
|
||||||
await this.updateYamlInfo(markdown, nowFile, res, app, settings)
|
await this.updateYamlInfo(markdown, nowFile, res, app, settings)
|
||||||
|
|||||||
63
main.ts
63
main.ts
@@ -1,18 +1,7 @@
|
|||||||
import {
|
import {App, Editor, MarkdownView, Notice, Plugin, PluginSettingTab, Setting} from "obsidian";
|
||||||
App,
|
import {addIcons} from 'icon';
|
||||||
Editor,
|
import {Upload2Notion} from "Upload2Notion";
|
||||||
MarkdownView,
|
|
||||||
Modal,
|
|
||||||
Notice,
|
|
||||||
Plugin,
|
|
||||||
PluginSettingTab,
|
|
||||||
Setting,
|
|
||||||
normalizePath
|
|
||||||
} from "obsidian";
|
|
||||||
import {addIcons} from 'icon';
|
|
||||||
import { Upload2Notion } from "Upload2Notion";
|
|
||||||
import {NoticeMConfig} from "Message";
|
import {NoticeMConfig} from "Message";
|
||||||
import { CLIENT_RENEG_LIMIT } from "tls";
|
|
||||||
|
|
||||||
|
|
||||||
// Remember to rename these classes and interfaces!
|
// Remember to rename these classes and interfaces!
|
||||||
@@ -48,7 +37,7 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
|
|||||||
"Share to NotionNext",
|
"Share to NotionNext",
|
||||||
async (evt: MouseEvent) => {
|
async (evt: MouseEvent) => {
|
||||||
// Called when the user clicks the icon.
|
// Called when the user clicks the icon.
|
||||||
this.upload();
|
await this.upload();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -60,7 +49,7 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
|
|||||||
id: "share-to-notionnext",
|
id: "share-to-notionnext",
|
||||||
name: "share to notionnext",
|
name: "share to notionnext",
|
||||||
editorCallback: async (editor: Editor, view: MarkdownView) => {
|
editorCallback: async (editor: Editor, view: MarkdownView) => {
|
||||||
this.upload()
|
await this.upload()
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -80,12 +69,12 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const { markDownData, nowFile, tags, type, slug, stats, category, summary, paword, favicon, datetime } =await this.getNowFileMarkdownContent(this.app);
|
const { markDownData, nowFile, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime } =await this.getNowFileMarkdownContent(this.app);
|
||||||
|
|
||||||
if (markDownData) {
|
if (markDownData) {
|
||||||
const { basename } = nowFile;
|
const { basename } = nowFile;
|
||||||
const upload = new Upload2Notion(this);
|
const upload = new Upload2Notion(this);
|
||||||
const res = await upload.syncMarkdownToNotion(basename, allowTags, tags, type, slug, stats, category, summary, paword, favicon, datetime, markDownData, nowFile, this.app, this.settings)
|
const res = await upload.syncMarkdownToNotion(basename, allowTags, emoji, cover, tags, type, slug, stats, category, summary, paword, favicon, datetime, markDownData, nowFile, this.app, this.settings)
|
||||||
if(res.status === 200){
|
if(res.status === 200){
|
||||||
new Notice(`${langConfig["sync-success"]}${basename}`)
|
new Notice(`${langConfig["sync-success"]}${basename}`)
|
||||||
}else {
|
}else {
|
||||||
@@ -97,6 +86,8 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
|
|||||||
async getNowFileMarkdownContent(app: App) {
|
async getNowFileMarkdownContent(app: App) {
|
||||||
const nowFile = app.workspace.getActiveFile();
|
const nowFile = app.workspace.getActiveFile();
|
||||||
const { allowTags } = this.settings;
|
const { allowTags } = this.settings;
|
||||||
|
let emoji = ''
|
||||||
|
let cover = ''
|
||||||
let tags = []
|
let tags = []
|
||||||
let type = ''
|
let type = ''
|
||||||
let slug = ''
|
let slug = ''
|
||||||
@@ -110,6 +101,8 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
|
|||||||
const FileCache = app.metadataCache.getFileCache(nowFile)
|
const FileCache = app.metadataCache.getFileCache(nowFile)
|
||||||
try {
|
try {
|
||||||
if(allowTags) {
|
if(allowTags) {
|
||||||
|
emoji = FileCache.frontmatter.titleicon;
|
||||||
|
cover = FileCache.frontmatter.coverurl;
|
||||||
tags = FileCache.frontmatter.tags;
|
tags = FileCache.frontmatter.tags;
|
||||||
type = FileCache.frontmatter.type;
|
type = FileCache.frontmatter.type;
|
||||||
slug = FileCache.frontmatter.slug;
|
slug = FileCache.frontmatter.slug;
|
||||||
@@ -128,6 +121,8 @@ export default class ObsidianSyncNotionPlugin extends Plugin {
|
|||||||
return {
|
return {
|
||||||
markDownData,
|
markDownData,
|
||||||
nowFile,
|
nowFile,
|
||||||
|
emoji,
|
||||||
|
cover,
|
||||||
tags,
|
tags,
|
||||||
type,
|
type,
|
||||||
slug,
|
slug,
|
||||||
@@ -178,15 +173,14 @@ class SampleSettingTab extends PluginSettingTab {
|
|||||||
.setName("Notion API Token")
|
.setName("Notion API Token")
|
||||||
.setDesc("It's a secret")
|
.setDesc("It's a secret")
|
||||||
.addText((text) =>{
|
.addText((text) =>{
|
||||||
let t = text
|
|
||||||
.setPlaceholder("Enter your Notion API Token")
|
|
||||||
.setValue(this.plugin.settings.notionAPI)
|
|
||||||
.onChange(async (value) => {
|
|
||||||
this.plugin.settings.notionAPI = value;
|
|
||||||
await this.plugin.saveSettings();
|
|
||||||
})
|
|
||||||
// t.inputEl.type = 'password'
|
// t.inputEl.type = 'password'
|
||||||
return t
|
return text
|
||||||
|
.setPlaceholder("Enter your Notion API Token")
|
||||||
|
.setValue(this.plugin.settings.notionAPI)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.notionAPI = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -194,15 +188,14 @@ class SampleSettingTab extends PluginSettingTab {
|
|||||||
.setName("Database ID")
|
.setName("Database ID")
|
||||||
.setDesc("It's a secret")
|
.setDesc("It's a secret")
|
||||||
.addText((text) => {
|
.addText((text) => {
|
||||||
let t = text
|
// t.inputEl.type = 'password'
|
||||||
.setPlaceholder("Enter your Database ID")
|
return text
|
||||||
.setValue(this.plugin.settings.databaseID)
|
.setPlaceholder("Enter your Database ID")
|
||||||
.onChange(async (value) => {
|
.setValue(this.plugin.settings.databaseID)
|
||||||
this.plugin.settings.databaseID = value;
|
.onChange(async (value) => {
|
||||||
await this.plugin.saveSettings();
|
this.plugin.settings.databaseID = value;
|
||||||
})
|
await this.plugin.saveSettings();
|
||||||
// t.inputEl.type = 'password'
|
})
|
||||||
return t
|
|
||||||
}
|
}
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "share-to-notionnext",
|
"id": "share-to-notionnext",
|
||||||
"name": "Share to NotionNext",
|
"name": "Share to NotionNext",
|
||||||
"version": "0.0.4",
|
"version": "0.0.8",
|
||||||
"minAppVersion": "0.0.1",
|
"minAppVersion": "0.0.1",
|
||||||
"description": "This is a plugin for Obsidian. This plugin shares obsidian md file to notion with notion api for NotionNext web deploy.",
|
"description": "This is a plugin for Obsidian. This plugin shares obsidian md file to notion with notion api for NotionNext web deploy.",
|
||||||
"author": "jxpeng98",
|
"author": "jxpeng98",
|
||||||
|
|||||||
@@ -1,15 +0,0 @@
|
|||||||
---
|
|
||||||
type: Post // Post or Page
|
|
||||||
slug: test // slug for url
|
|
||||||
stats: Draft // Draft, Invisible, Published
|
|
||||||
category: test
|
|
||||||
summary: this is a summary for test post
|
|
||||||
icon: fa-solid fa-camera // you can ignore this
|
|
||||||
password: "1234" // if you donot want to set password, you can delete this line
|
|
||||||
tags:
|
|
||||||
- test // tags for post
|
|
||||||
- web // add more tags if you want
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
Contents Below
|
|
||||||
25
obsidian_template.md
Normal file
25
obsidian_template.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
# default value has been set.
|
||||||
|
# for any unwanted value, you can delete it or set it to empty.
|
||||||
|
# for example, if you donot want to set password, you can delete password: "1234" or set it to password: ""
|
||||||
|
# 我已经在插件中设置了默认值,如果有不需要的选项,可以直接删除。
|
||||||
|
# 例如你不需要密码选项,你可以将password: "1234"删除,或者将它设置为空。
|
||||||
|
# !!!!!!!!!!!!
|
||||||
|
# 现在阶段一定不要修改表头的名字, please do not change the name of the header in YAML front matter
|
||||||
|
# !!!!!!!!!!!!
|
||||||
|
titleicon: 📎 # default is 📜, 默认是📜
|
||||||
|
coverurl: https://img.jxpeng.dev/2023/08/843e27a210847f05a0f7cfb121fec100.jpg # default is empty, 默认是空
|
||||||
|
type: Post # Post or Page, default is Post, 默认是Post
|
||||||
|
slug: test # slug for url, default is empty, 默认是空
|
||||||
|
stats: Draft # Draft, Invisible, Published, default is Draft, 默认是Draft
|
||||||
|
category: test # default is 'Obsidian', 默认是'Obsidian'
|
||||||
|
summary: this is a summary for test post # default is empty, 默认是空
|
||||||
|
icon: fa-solid fa-camera # you can ignore this, default is empty, 默认是空,可直接删除
|
||||||
|
password: "1234" # if you donot want to set password, you can delete this line, default is empty, 默认是空,可直接删除
|
||||||
|
# 现在必须开启tags选项,否则会报错
|
||||||
|
tags:
|
||||||
|
- test # tags for post
|
||||||
|
- web # add more tags if you want
|
||||||
|
---
|
||||||
|
|
||||||
|
Contents Below
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "share-to-notionnext",
|
"name": "share-to-notionnext",
|
||||||
"version": "0.0.4",
|
"version": "0.0.8",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "This is a plugin for Obsidian. This plugin share obsidian md file to notion with notion api for NotionNext web deploy.",
|
"description": "This is a plugin for Obsidian. This plugin share obsidian md file to notion with notion api for NotionNext web deploy.",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
|
|||||||
Reference in New Issue
Block a user