├── .vscode ├── settings.json └── launch.json ├── config ├── devconfig.example.json ├── webpack.config.eslint.js ├── webpack.config.base.babel.js ├── webpack.config.electron.babel.js ├── webpack.config.renderer.dev.babel.js ├── gulp.babel.js └── webpack.config.renderer.prod.babel.js ├── assets ├── loading.gif └── icons │ ├── win │ └── app.ico │ └── osx │ └── app.icns ├── .eslintignore ├── app ├── main │ ├── resource │ │ ├── app.png │ │ ├── start.png │ │ ├── tray-icon.png │ │ ├── tray-icon@2x.png │ │ └── tray-icon@3x.png │ ├── oauthConfig.js │ ├── index.html │ ├── schedule.js │ ├── package.json │ ├── Oauth2.js │ ├── webview │ │ └── webview.html │ ├── pdf.js │ └── index.js ├── views │ ├── assets │ │ ├── images │ │ │ ├── icon.png │ │ │ ├── logo.png │ │ │ └── onedrive.png │ │ └── scss │ │ │ ├── preview.scss │ │ │ ├── common.scss │ │ │ ├── color.scss │ │ │ ├── themes.scss │ │ │ ├── trash.scss │ │ │ ├── drive.scss │ │ │ └── index.scss │ ├── sagas │ │ ├── sagas.js │ │ ├── app.js │ │ ├── projects.js │ │ └── drive.js │ ├── actions │ │ ├── user.js │ │ ├── exportQueue.js │ │ ├── drive.js │ │ ├── note.js │ │ ├── markdown.js │ │ ├── app.js │ │ └── projects.js │ ├── component │ │ ├── share │ │ │ ├── Loading.jsx │ │ │ ├── search │ │ │ │ ├── search.scss │ │ │ │ └── Search.jsx │ │ │ ├── SVGIcon.jsx │ │ │ └── notebook │ │ │ │ └── NoteItem.jsx │ │ ├── cloud │ │ │ ├── Notebooks.jsx │ │ │ ├── Notes.jsx │ │ │ ├── Cloud.jsx │ │ │ └── Drive.jsx │ │ ├── trash │ │ │ ├── ToolBar.jsx │ │ │ ├── Files.jsx │ │ │ ├── Projects.jsx │ │ │ ├── Trash.jsx │ │ │ └── HOCList.jsx │ │ ├── AppToolBar.jsx │ │ ├── note │ │ │ ├── Explorer.jsx │ │ │ ├── Note.jsx │ │ │ └── ToolBar.jsx │ │ └── editor │ │ │ ├── Markdown.jsx │ │ │ ├── Preview.jsx │ │ │ └── Editor.jsx │ ├── reducers │ │ ├── reducers.js │ │ ├── user.js │ │ ├── exportQueue.js │ │ ├── note.js │ │ ├── drive.js │ │ ├── markdown.js │ │ └── app.js │ ├── index.jsx │ ├── services │ │ ├── CommonServices.js │ │ └── OneDrive.js │ └── utils │ │ ├── db │ │ └── DB.js │ │ └── utils.js └── webview │ └── webview-pre.js ├── .github └── ISSUE_TEMPLATE │ ├── Custom.md │ ├── Feature_request.md │ └── Bug_report.md ├── .travis.yml ├── .editorconfig ├── .eslintrc.yml ├── templete └── index.html ├── scripts ├── packageDMG.js ├── packageDeb.js └── packageSetup.js ├── .babelrc ├── .gitignore ├── CHANGELOG.md ├── README.md ├── .sass-lint.yml └── package.json /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /config/devconfig.example.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensions": [] 3 | } 4 | -------------------------------------------------------------------------------- /assets/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/assets/loading.gif -------------------------------------------------------------------------------- /assets/icons/win/app.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/assets/icons/win/app.ico -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | lib 4 | app/views/utils/highlight.min.js 5 | out 6 | releases 7 | -------------------------------------------------------------------------------- /app/main/resource/app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/main/resource/app.png -------------------------------------------------------------------------------- /assets/icons/osx/app.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/assets/icons/osx/app.icns -------------------------------------------------------------------------------- /app/main/resource/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/main/resource/start.png -------------------------------------------------------------------------------- /app/main/resource/tray-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/main/resource/tray-icon.png -------------------------------------------------------------------------------- /app/main/resource/tray-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/main/resource/tray-icon@2x.png -------------------------------------------------------------------------------- /app/main/resource/tray-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/main/resource/tray-icon@3x.png -------------------------------------------------------------------------------- /app/views/assets/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/views/assets/images/icon.png -------------------------------------------------------------------------------- /app/views/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/views/assets/images/logo.png -------------------------------------------------------------------------------- /app/views/assets/images/onedrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rivafarabi/Yosoro/master/app/views/assets/images/onedrive.png -------------------------------------------------------------------------------- /config/webpack.config.eslint.js: -------------------------------------------------------------------------------- 1 | require('babel-register'); 2 | 3 | module.exports = require('./webpack.config.base.babel'); 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/Custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/views/sagas/sagas.js: -------------------------------------------------------------------------------- 1 | import app from './app'; 2 | import projects from './projects'; 3 | import drive from './drive'; 4 | 5 | export default [ 6 | ...app, 7 | ...projects, 8 | ...drive, 9 | ]; 10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | 3 | language: node_js 4 | 5 | node_js: 6 | - 8 7 | - 9 8 | 9 | cache: 10 | npm: true 11 | directories: 12 | - node_modules 13 | 14 | install: 15 | - yarn install 16 | 17 | script: 18 | - node --version 19 | - npm test 20 | -------------------------------------------------------------------------------- /app/views/actions/user.js: -------------------------------------------------------------------------------- 1 | export const GET_USER_AVATAR = 'GET_USER_AVATAR'; 2 | export const GET_USER_AVATAR_SUCCESS = 'GET_USER_AVATAR_SUCCESS'; 3 | export const GET_USER_AVATAR_FAILED = 'GET_USER_AVATAR_FAILED'; 4 | 5 | export const SET_USER_LOCAL_AVATAR = 'SET_USER_LOCAL_AVATAR'; 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | 9 | [*.{js,jsx}] 10 | indent_style = space 11 | indent_size = 2 12 | 13 | [*.scss] 14 | indent_style = tab 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /app/views/actions/exportQueue.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 文件导出队列 3 | */ 4 | 5 | export const EXPORT_INIT_QUEUE = 'EXPORT_INIT_QUEUE'; 6 | export const EXPORT_SUCCESS_SINGLE = 'EXPORT_SUCCESS_SINGLE'; 7 | export const EXPORT_FAILED_SINGLE = 'EXPORT_FAILED_SINGLE'; 8 | export const EXPORT_COMPOLETE = 'EXPORT_COMPOLETE'; 9 | -------------------------------------------------------------------------------- /.eslintrc.yml: -------------------------------------------------------------------------------- 1 | env: 2 | es6: true 3 | node: true 4 | browser: true 5 | parserOptions: 6 | ecmaVersion: 6 7 | sourceType: 'module' 8 | parser: 'babel-eslint' 9 | extends: alchemy 10 | plugins: 11 | - react 12 | - jsx-a11y 13 | - import 14 | rules: 15 | no-console: 16 | - error 17 | - 'allow': 18 | - 'warn' 19 | - 'error' 20 | - 'info' 21 | import/no-extraneous-dependencies: 0 22 | -------------------------------------------------------------------------------- /app/views/assets/scss/preview.scss: -------------------------------------------------------------------------------- 1 | .preview-root { 2 | background-color: #fcfdfe; 3 | overflow: hidden; 4 | position: relative; 5 | 6 | &.pre-mode { 7 | margin: 0 auto; 8 | background-color: inherit; 9 | 10 | .preview-body { 11 | width: 100%; 12 | padding: 0; 13 | } 14 | } 15 | } 16 | 17 | .preview-body { 18 | width: 100%; 19 | height: 100%; 20 | overflow: hidden; 21 | box-sizing: border-box; 22 | padding: 0.5rem; 23 | } 24 | -------------------------------------------------------------------------------- /app/main/oauthConfig.js: -------------------------------------------------------------------------------- 1 | const oauthConfig = { 2 | oneDrive: { 3 | clientId: '35730bb9-a23a-46f9-aebf-5c2b9d6fc06c', 4 | authorizationUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize', 5 | tokenUrl: 'https://login.microsoftonline.com/common/oauth2/v2.0/token', 6 | useBasicAuthorizationHeader: false, 7 | redirectUri: 'http://localhost', 8 | clientSecret: 'bcdfnjKNMK0$-!wHQO6656]', 9 | }, 10 | }; 11 | 12 | export default oauthConfig; 13 | -------------------------------------------------------------------------------- /templete/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |
11 |
12 | {props.tip}
9 |List is empty.
); 9 | } 10 | return ( 11 |List is empty.
); 9 | } 10 | return ( 11 |Notebook is empty.
27 |Trash can is empty.
29 |
2 |
3 |
Beautiful Cloud Drive Markdown NoteBook Desktop App
5 |
6 |
7 |
9 |
10 |
11 |
12 |
14 |
15 |
216 |
305 |