Electron实现markdown笔记软件(二)

7 篇文章 0 订阅
7 篇文章 0 订阅

关于这个markdown笔记软件(二)——模型层设计

项目源码:
(https://github.com/andytt/ErtuilEditor

目录

关于这个markdown笔记软件(一)——总体的思路和介绍

关于这个markdown笔记软件(二)——模型层设计

关于这个markdown笔记软件(三)——视图层设计

关于这个markdown笔记软件(四)——md的渲染和生成

关于这个markdown笔记软件(五)——electron库

关于这个markdown笔记软件(六)——应用逻辑、electron对话框

关于这个markdown笔记软件(七)——其他细节、总结

数据库选择

之前也说过我们使用的是lowdb作为数据库处理,这个node.js非常小巧,只管理一个json文件。这对于一个小项目来说,是最合适不过的了。

安装

命令:

npm install lowdb --save

基本使用方法:

有关数据库对函数定义在./js/database.js文件中。
引入包:

var low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync')

链接数据库需要两部:

const adapter = new FileSync(db_path);
var db = low(adapter);

具体使用方法:

npm网可以看到具体的使用方法。

建立模型

目前的模型非常简单,在database中只有三个表:label,notes,info。

  • label:记录了标签名,拥有两个field,id、label_name
  • notes:具体记录了所有笔记,三个field,id、label_name、note_name
  • info:记录了标签和笔记的数量,label_num,note_num

下面代码给出了数据库初始化(只执行一次):

const adapter = new FileSync(db_path);
var db = low(adapter);
db.defaults({ label:[],notes:[],info:{} }).write();
db.get('label').push({id: 1,label_name :'default'}).write();
db.set('info.note_num',0).write();
db.set('info.label_num',1).write();

可以看到,对label表插入了默认标签,‘default’。

封装

database.js通过对外暴露以下函数,提供服务:

exports.db_get_node_number = db_get_node_number;
exports.db_change_label = db_change_label;
exports.db_init = db_init;
exports.db_insert_note = db_insert_note;
exports.db_get_labels = db_get_labels;
exports.db_get_notes_by_label = db_get_notes_by_label;
exports.db_get_note_by_name = db_get_note_by_name;
exports.db_get_id_by_name = db_get_id_by_name;
exports.db_change_node_name = db_change_node_name;
exports.db_remove_node = db_remove_node;
exports.db_insert_label = db_insert_label;
exports.db_remove_label = db_remove_label;

选择几个具体的函数给出代码:

function db_insert_note(db_path,name,label){
    const adapter = new FileSync(db_path);
    var db = low(adapter);
    if(db.get('notes').find({ note_name: name }).size().value() >=1 ){
        db.get('notes').find({ note_name: name }).assign({label_name : label}).write();
    }else{
        var id = db.get('info.note_num').value() + 1;
        db.get('notes').push({id: id,note_name : name ,label_name : label}).write();
        db.set('info.note_num',id).write();
    }
}

插入笔记,如果重名且label不一致,就修改label。

function db_change_node_name(db_path,old_name,new_name){
    const adapter = new FileSync(db_path);
    var db = low(adapter);
    db.get('notes').find({note_name:old_name}).assign({note_name:new_name}).write();
}

修改note的名字属性。

还有其他函数不再一一列举。

其他文件

基本原则

  • 数据库文件和其他文本文件全部放在项目的./data/文件夹下。其中每一个笔记都创建一个同名文件夹,存放.md和通过markdown解析生成的.html文件。
  • 如果有图片和其他文件,插入markdown时,会自动拷贝一份图片,并放在笔记同名文件夹下。引用复制的文件。
  • 对于输出的pdf文件,原本打算生成后直接输出,不再本地保存。由于生成pdf的包不支持中文文件名,所以先将.html复制到./data/output.html,再进行打印。

其中对本地文件的存储和html渲染,在buildMarkdown.js文件中的save_file()函数实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Electron实现国际化,可以使用 Electron 提供的 i18n API。以下是实现步骤: 1. 在项目中创建一个 `locales` 文件夹,用于存放不同语言的翻译文件。 2. 在 `locales` 文件夹中创建一个 `en.json` 文件,用于存放英文翻译。 3. 在 `en.json` 文件中定义键值对,表示需要翻译的文本,如: ```json { "hello": "Hello!", "world": "World!" } ``` 4. 在 Electron 主进程中使用 `app.getPath('userData')` 获取用户数据存储路径,并在此路径下创建一个 `locales` 文件夹,用于存放用户选择的语言文件。 5. 在 Electron 渲染进程中使用 `electron.remote.app` 获取主进程实例,并使用 `app.getLocale()` 获取用户系统语言。 6. 使用 `electron.remote.require` 引入 `electron-i18n` 模块,并在 `index.html` 中使用 `data-i18n` 属性标记需要翻译的文本,如: ```html <h1 data-i18n="hello"></h1> <p data-i18n="world"></p> ``` 7. 在渲染进程中使用 `electron.remote.require('electron-i18n')` 加载翻译文件,并使用 `i18n.translator.translate()` 方法进行翻译,如: ```javascript const i18n = electron.remote.require('electron-i18n'); i18n.translator.loadLocale('en', `${app.getPath('userData')}/locales`); i18n.translator.translateDocument(document); ``` 这里使用 `loadLocale` 方法加载英文翻译文件,并使用 `translateDocument` 方法翻译整个页面。 8. 如果需要支持多语言切换,可以在渲染进程中监听 `select` 元素的 `change` 事件,并使用 `i18n.translator.setLocale()` 方法切换语言,如: ```javascript const select = document.querySelector('select'); select.addEventListener('change', () => { const locale = select.value; i18n.translator.setLocale(locale); }); ``` 这里使用 `setLocale` 方法切换语言。 以上就是在 Electron实现国际化的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值