Skip to content

Commit

Permalink
feat: 优化部分交互
Browse files Browse the repository at this point in the history
  • Loading branch information
terwer committed Aug 15, 2023
1 parent d184e3d commit fea1af2
Show file tree
Hide file tree
Showing 21 changed files with 363 additions and 292 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

![](./icon.png)

Publish articles from Siyuan Notes to platforms such as Yuque, Notion, Cnblogs, WordPress, Typecho, Hexo, Zhihu and more.
Publish articles from siyuan-note to platforms such as Yuque, Notion, Cnblogs, WordPress, Typecho, Hexo, Zhihu and more.

Support features such as fast publishing, image bed management, platform expansion, smart labels, etc.

> **Front Announcement 1: Release Tool's first platform-wide version `1.8.0` using the forward agent of Siyuan Note!**
> **Front Announcement 1: Publish Tool's first platform-wide version `1.8.0` using the forward agent of Siyuan Note!**
>
> **Front Announcement 2: The first version of the release tool that fully supports image upload `1.8.0` is released!**
> **Front Announcement 2: The first version of the Publish Tool that fully supports image upload `1.8.0` is released!**
Tips: Zhihu uses the image upload of the Zhihu platform, Yuque, Notion, and Hexo need Picgo plugin support, and the Metaweblog series platform supports both Picgo plugin and self-contained image upload (install Picgo plugin to use Picgo plugin, otherwise use their own platform)

Expand Down Expand Up @@ -70,7 +70,7 @@ Names not listed in order
disabled at any time
- [X] **Dynamic Newly Added**: Support custom adding platform
- [ ] **Smart Classification**: Support smart tags, smart slug aliases, smart summaries, and continue to improve
- [X] **Article Binding**: Support linking existing platform articles to Siyuan Notes to facilitate follow-up management,
- [X] **Article Binding**: Support linking existing platform articles to siyuan-note to facilitate follow-up management,
support Siyuan->platform one-way synchronization
- [X] **Adapt to Theme**: Automatically adapt to dark mode and light mode
- [X] **Language support**: multi-language support, support Chinese version and English version
Expand Down
2 changes: 1 addition & 1 deletion siyuan/i18n/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"settingPicbed": "Picbed manage",
"settingPublish": "Publish setting",
"settingPlatform": "Platform setting",
"settingMenuTips": "Let creation return to fun",
"settingAbout": "About",
"copyPageId": "Copy pageId",
"publisherWidget": "Publisher Widget",
"cancel": "Cancel",
Expand Down
2 changes: 1 addition & 1 deletion siyuan/i18n/zh_CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"settingPicbed": "图床设置",
"settingPublish": "发布设置",
"settingPlatform": "平台设置",
"settingMenuTips": "让创作回归乐趣",
"settingAbout": "关于",
"copyPageId": "复制文档ID",
"publisherWidget": "挂件版",
"cancel": "取消",
Expand Down
9 changes: 9 additions & 0 deletions siyuan/invoke/widgetInvoke.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,15 @@ export class WidgetInvoke {
await this.showPage(`/setting/general?id=${pageId}`)
}

public async showPublisherAboutDialog() {
let pageId: string | undefined = PageUtil.getPageId()
if (pageId == "") {
pageId = undefined
}
this.logger.debug("pageId=>", pageId)
await this.showPage(`/setting/about?id=${pageId}`)
}

private async showPage(pageUrl: string, isReload?: boolean, w?: string, h?: string, noscroll?: boolean) {
const deviceType: DeviceTypeEnum = DeviceDetection.getDevice()
this.logger.info(`you are from ${deviceType}`)
Expand Down
6 changes: 4 additions & 2 deletions siyuan/topbar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,10 @@ export class Topbar {
menu.addSeparator()
menu.addItem({
icon: "iconSparkles",
label: this.pluginInstance.i18n.settingMenuTips,
type: "readonly",
label: this.pluginInstance.i18n.settingAbout,
click: () => {
this.widgetInvoke.showPublisherAboutDialog()
},
})

if (this.pluginInstance.isMobile) {
Expand Down
45 changes: 42 additions & 3 deletions src/adaptors/base/baseExtendApi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ class BaseExtendApi extends WebApi implements IBlogApi, IWebApi {
private readonly isSiyuanOrSiyuanNewWin: boolean
private readonly kernelApi: SiyuanKernelApi

/**
* 构造函数用于创建一个新的实例
*
* @param api - 一个 BaseBlogApi 或 BaseWebApi 实例,用于与 API 进行通信
*/
constructor(api: BaseBlogApi | BaseWebApi) {
super()
this.logger = createAppLogger("base-extend-api")
Expand All @@ -65,7 +70,32 @@ class BaseExtendApi extends WebApi implements IBlogApi, IWebApi {
this.kernelApi = kernelApi
}

/**
* 在保存前编辑文章
*
* @param post - 要编辑的文章
* @param id - 文章的可选 ID
* @param publishCfg - 发布配置的可选参数
* @returns 一个 Promise,解析为编辑后的文章
*/
public async preEditPost(post: Post, id?: string, publishCfg?: any): Promise<Post> {
// 处理图片
post = await this.handlePictures(post, id, publishCfg)
return post
}

// ================
// private methods
// ================
/**
* 处理图片
*
* @param post - 要处理图片的 Post 对象
* @param id - (可选)图片 ID
* @param publishCfg - (可选)发布配置参数
* @returns 一个 Promise,解析为处理后的 Post 对象
*/
private async handlePictures(post: Post, id?: string, publishCfg?: any): Promise<Post> {
const cfg: BlogConfig = publishCfg.cfg
const dynCfg: DynamicConfig = publishCfg.dynCfg

Expand Down Expand Up @@ -163,14 +193,23 @@ class BaseExtendApi extends WebApi implements IBlogApi, IWebApi {
return post
}

// ================
// private methods
// ================
/**
* 检查 Picgo 是否已安装
*
* @returns 一个 Promise,解析为布尔值,表示是否已安装 Picgo
*/
private async checkPicgoInstalled() {
// 检测是否安装 picgo 插件
return await isFileExists(this.kernelApi, "/data/plugins/siyuan-plugin-picgo/plugin.json", "text")
}

/**
* 读取文件并将其转换为 Base64 编码
*
* @param url - 要读取的文件的 URL
* @param cfg - 博客配置对象
* @returns 一个 Promise,解析为文件的 Base64 编码字符串
*/
private async readFileToBase64(url: string, cfg: BlogConfig): Promise<any> {
let base64Info: any
if (this.isSiyuanOrSiyuanNewWin) {
Expand Down
25 changes: 0 additions & 25 deletions src/adaptors/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,31 +212,6 @@ class Adaptors {
this.logger.debug(`get blogAdaptor from key ${key}`)
return blogAdaptor
}

// 新增 preEditPost , 此方法不再需要
// /**
// * 根据平台key查找YAML适配器
// *
// * @param key
// * @param newCfg
// */
// public static async getYamlAdaptor(key: string, newCfg?: any): Promise<YamlConvertAdaptor> {
// let yamlAdp = null
// const type: SubPlatformType = getSubPlatformTypeByKey(key)
//
// switch (type) {
// case SubPlatformType.Github_Hexo: {
// const { yamlAdaptor } = await useHexoApi(key, newCfg)
// yamlAdp = yamlAdaptor
// break
// }
// default: {
// break
// }
// }
// this.logger.debug(`get yamlAdaptor from key ${key}=>`, yamlAdp)
// return yamlAdp
// }
}

export default Adaptors
2 changes: 1 addition & 1 deletion src/components/publish/SinglePublishSelectPlatform.vue
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ onMounted(async () => {
<i class="el-icon">
<span v-html="cfg?.platformIcon"></span>
</i>
{{ HtmlUtil.parseHtml(cfg.platformName, 11) }}
{{ StrUtil.upperFirst(HtmlUtil.parseHtml(cfg.platformName, 11)) }}
</el-text>
</el-badge>
</div>
Expand Down
34 changes: 18 additions & 16 deletions src/components/test/CnblogsTest.vue
Original file line number Diff line number Diff line change
Expand Up @@ -405,26 +405,28 @@ const cnblogsHandleApi = async () => {
</script>

<template>
<div id="cnblogs-test">
<div class="method-list">
<el-select v-model="methodOption" class="m-2" placeholder="请选择方法名称" @change="onMethodChange">
<el-option v-for="item in methodOptions.options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<back-page title="博客园测试">
<div id="cnblogs-test">
<div class="method-list">
<el-select v-model="methodOption" class="m-2" placeholder="请选择方法名称" @change="onMethodChange">
<el-option v-for="item in methodOptions.options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>

<div class="item">
<el-button type="primary" :loading="isLoading" @click="cnblogsHandleApi">开始测试cnblogs</el-button>
</div>
<div class="item">
<el-button type="primary" :loading="isLoading" @click="cnblogsHandleApi">开始测试cnblogs</el-button>
</div>

<div class="item"><el-button>入参</el-button></div>
<div class="item"><el-input v-model="params" type="textarea" :rows="5"></el-input></div>
<div v-if="showParamFile" class="item"><input type="file" @change="onImageSelect" /></div>
<div class="item"><el-button>入参</el-button></div>
<div class="item"><el-input v-model="params" type="textarea" :rows="5"></el-input></div>
<div v-if="showParamFile" class="item"><input type="file" @change="onImageSelect" /></div>

<div class="item"><el-button>结果</el-button></div>
<div class="item">
<el-input v-model="logMessage" type="textarea" :rows="10" placeholder="日志信息"></el-input>
<div class="item"><el-button>结果</el-button></div>
<div class="item">
<el-input v-model="logMessage" type="textarea" :rows="10" placeholder="日志信息"></el-input>
</div>
</div>
</div>
</back-page>
</template>

<style lang="stylus" scoped>
Expand Down
27 changes: 17 additions & 10 deletions src/pages/OtherTest.vue → src/components/test/OtherTest.vue
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,21 @@ const testHandleNotion = () => {
</script>

<template>
<div>
<el-form>
<el-form-item>
<el-input v-model="formData.content" style="width: 75%; margin-right: 16px" type="textarea" :rows="10" />
</el-form-item>
<el-form-item>
<el-button @click="testHandleNotion">测试Notion</el-button>
</el-form-item>
</el-form>
</div>
<back-page title="其他测试">
<div id="other-test">
<el-form>
<el-form-item>
<el-input v-model="formData.content" style="width: 75%; margin-right: 16px" type="textarea" :rows="10" />
</el-form-item>
<el-form-item>
<el-button @click="testHandleNotion">测试Notion</el-button>
</el-form-item>
</el-form>
</div>
</back-page>
</template>

<style scoped lang="stylus">
#other-test
margin 16px 20px
</style>
7 changes: 5 additions & 2 deletions src/pages/PicgoTest.vue → src/components/test/PicgoTest.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import { BrowserUtil } from "zhi-device"
import { usePicgoBridge } from "~/src/composables/usePicgoBridge.ts"
import { createAppLogger } from "~/src/utils/appLogger.ts"
import { getWidgetId } from "~/src/utils/widgetUtils.ts"
const logger = createAppLogger("picgo-test")
const { handlePicgo } = usePicgoBridge()
Expand All @@ -35,7 +36,7 @@ const { handlePicgo } = usePicgoBridge()
const props = defineProps({
pageId: {
type: String,
default: BrowserUtil.getQueryParam("pageId"),
default: BrowserUtil.getQueryParam("pageId") ?? getWidgetId(),
},
})
Expand All @@ -46,5 +47,7 @@ const testHandlePicgo = async () => {
</script>

<template>
<el-button @click="testHandlePicgo">测试</el-button>
<back-page title="Picgo测试">
<el-button @click="testHandlePicgo">测试</el-button>
</back-page>
</template>
34 changes: 18 additions & 16 deletions src/components/test/SiyuanTest.vue
Original file line number Diff line number Diff line change
Expand Up @@ -335,26 +335,28 @@ const siyuanHandleApi = async () => {
</script>

<template>
<div id="siyuan-test">
<div class="method-list">
<el-select v-model="methodOption" class="m-2" placeholder="请选择方法名称" @change="onMethodChange">
<el-option v-for="item in methodOptions.options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<back-page title="siyuan测试">
<div id="siyuan-test">
<div class="method-list">
<el-select v-model="methodOption" class="m-2" placeholder="请选择方法名称" @change="onMethodChange">
<el-option v-for="item in methodOptions.options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>

<div class="item">
<el-button type="primary" :loading="isLoading" @click="siyuanHandleApi">开始测试siyuan</el-button>
</div>
<div class="item">
<el-button type="primary" :loading="isLoading" @click="siyuanHandleApi">开始测试siyuan</el-button>
</div>

<div class="item"><el-button>入参</el-button></div>
<div class="item"><el-input v-model="params" type="textarea" :rows="5"></el-input></div>
<div v-if="showParamFile" class="item"><input type="file" @change="onImageSelect" /></div>
<div class="item"><el-button>入参</el-button></div>
<div class="item"><el-input v-model="params" type="textarea" :rows="5"></el-input></div>
<div v-if="showParamFile" class="item"><input type="file" @change="onImageSelect" /></div>

<div class="item"><el-button>结果</el-button></div>
<div class="item">
<el-input v-model="logMessage" type="textarea" :rows="10" placeholder="日志信息"></el-input>
<div class="item"><el-button>结果</el-button></div>
<div class="item">
<el-input v-model="logMessage" type="textarea" :rows="10" placeholder="日志信息"></el-input>
</div>
</div>
</div>
</back-page>
</template>

<style lang="stylus" scoped>
Expand Down
34 changes: 18 additions & 16 deletions src/components/test/TypechoTest.vue
Original file line number Diff line number Diff line change
Expand Up @@ -297,26 +297,28 @@ const typechoHandleApi = async () => {
</script>

<template>
<div id="typecho-test">
<div class="method-list">
<el-select v-model="methodOption" class="m-2" placeholder="请选择方法名称" @change="onMethodChange">
<el-option v-for="item in methodOptions.options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>
<back-page title="Typecho测试">
<div id="typecho-test">
<div class="method-list">
<el-select v-model="methodOption" class="m-2" placeholder="请选择方法名称" @change="onMethodChange">
<el-option v-for="item in methodOptions.options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</div>

<div class="item">
<el-button type="primary" :loading="isLoading" @click="typechoHandleApi">开始测试typecho</el-button>
</div>
<div class="item">
<el-button type="primary" :loading="isLoading" @click="typechoHandleApi">开始测试typecho</el-button>
</div>

<div class="item"><el-button>入参</el-button></div>
<div class="item"><el-input v-model="params" type="textarea" :rows="5"></el-input></div>
<div v-if="showParamFile" class="item"><input type="file" @change="onImageSelect" /></div>
<div class="item"><el-button>入参</el-button></div>
<div class="item"><el-input v-model="params" type="textarea" :rows="5"></el-input></div>
<div v-if="showParamFile" class="item"><input type="file" @change="onImageSelect" /></div>

<div class="item"><el-button>结果</el-button></div>
<div class="item">
<el-input v-model="logMessage" type="textarea" :rows="10" placeholder="日志信息"></el-input>
<div class="item"><el-button>结果</el-button></div>
<div class="item">
<el-input v-model="logMessage" type="textarea" :rows="10" placeholder="日志信息"></el-input>
</div>
</div>
</div>
</back-page>
</template>

<style lang="stylus" scoped>
Expand Down
Loading

0 comments on commit fea1af2

Please sign in to comment.