mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-15 02:36:36 +00:00
Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87f9589be3 | ||
|
|
96413b9851 | ||
|
|
9699ef6319 | ||
|
|
dd8f4d60f0 | ||
|
|
372f2e7319 | ||
|
|
1957d87dd7 | ||
|
|
a148d17ba1 | ||
|
|
297553c240 | ||
|
|
f0fcaa6be7 | ||
|
|
cfa40f3ec1 | ||
|
|
832c43de88 | ||
|
|
1665e18edb | ||
|
|
fd1717046b | ||
|
|
7fe7c555bc | ||
|
|
411a7a8e80 | ||
|
|
196f5a7bf7 | ||
|
|
3fa326121a | ||
|
|
cce69bea3a | ||
|
|
f70cf7845d | ||
|
|
bd0a326128 | ||
|
|
897d99e043 | ||
|
|
b0f288e103 | ||
|
|
7d26d46c7b | ||
|
|
5c7804fc40 | ||
|
|
836f3af1ab | ||
|
|
67b89d4fe7 | ||
|
|
bc2d9d0fe2 | ||
|
|
79f33b9405 | ||
|
|
ed9ddee5f1 | ||
|
|
0d004b2f0a | ||
|
|
f41ff77d76 | ||
|
|
ae97a76d2e | ||
|
|
3ca18c04c6 | ||
|
|
2b03e6e956 | ||
|
|
010793a478 | ||
|
|
b136512ece | ||
|
|
9179c199fe | ||
|
|
cfa4dfa817 | ||
|
|
6a73a3af97 | ||
|
|
923c24fa6c | ||
|
|
4b1c8a3238 | ||
|
|
76508fbc3b | ||
|
|
2bfda95ed8 | ||
|
|
6e5082a470 | ||
|
|
a6cec44fc4 | ||
|
|
600fab4f23 | ||
|
|
12377b8caf | ||
|
|
250c6e488d | ||
|
|
3a9b57adae | ||
|
|
74415956ac | ||
|
|
33d7ed25a5 | ||
|
|
df2de5c081 | ||
|
|
7f4c58a84a | ||
|
|
7437b26e3c | ||
|
|
ee6d41859f | ||
|
|
b368c3b5d8 | ||
|
|
b1ae2b0b6f | ||
|
|
27a6d53c7f | ||
|
|
4caf3a81be | ||
|
|
ab578f768f | ||
|
|
e4212e796a | ||
|
|
95b1ff9b41 | ||
|
|
684d2c411e | ||
|
|
42710cfee5 | ||
|
|
277004fd9b | ||
|
|
14f79c4c21 | ||
|
|
f88cd80dca |
3
.eslintignore
Normal file
3
.eslintignore
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
node_modules/
|
||||||
|
compiled/
|
||||||
|
dist/
|
||||||
6
.eslintrc
Normal file
6
.eslintrc
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": ["standard", "standard-jsx"],
|
||||||
|
"rules": {
|
||||||
|
"no-useless-escape": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
6
.travis.yml
Normal file
6
.travis.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- 'stable'
|
||||||
|
- 'lts/*'
|
||||||
|
|
||||||
|
script: npm run lint && npm run test
|
||||||
@@ -52,7 +52,7 @@ export default class CodeEditor extends React.Component {
|
|||||||
indentUnit: this.props.indentSize,
|
indentUnit: this.props.indentSize,
|
||||||
tabSize: this.props.indentSize,
|
tabSize: this.props.indentSize,
|
||||||
indentWithTabs: this.props.indentType !== 'space',
|
indentWithTabs: this.props.indentType !== 'space',
|
||||||
keyMap: 'sublime',
|
keyMap: this.props.keyMap,
|
||||||
inputStyle: 'textarea',
|
inputStyle: 'textarea',
|
||||||
extraKeys: {
|
extraKeys: {
|
||||||
Tab: function (cm) {
|
Tab: function (cm) {
|
||||||
@@ -102,6 +102,9 @@ export default class CodeEditor extends React.Component {
|
|||||||
if (prevProps.fontFamily !== this.props.fontFamily) {
|
if (prevProps.fontFamily !== this.props.fontFamily) {
|
||||||
needRefresh = true
|
needRefresh = true
|
||||||
}
|
}
|
||||||
|
if (prevProps.keyMap !== this.props.keyMap) {
|
||||||
|
needRefresh = true
|
||||||
|
}
|
||||||
|
|
||||||
if (prevProps.indentSize !== this.props.indentSize) {
|
if (prevProps.indentSize !== this.props.indentSize) {
|
||||||
this.editor.setOption('indentUnit', this.props.indentSize)
|
this.editor.setOption('indentUnit', this.props.indentSize)
|
||||||
@@ -194,6 +197,7 @@ CodeEditor.propTypes = {
|
|||||||
CodeEditor.defaultProps = {
|
CodeEditor.defaultProps = {
|
||||||
readOnly: false,
|
readOnly: false,
|
||||||
theme: 'xcode',
|
theme: 'xcode',
|
||||||
|
keyMap: 'sublime',
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
fontFamily: 'Monaco, Consolas',
|
fontFamily: 'Monaco, Consolas',
|
||||||
indentSize: 4,
|
indentSize: 4,
|
||||||
|
|||||||
@@ -166,6 +166,7 @@ class MarkdownEditor extends React.Component {
|
|||||||
mode='GitHub Flavored Markdown'
|
mode='GitHub Flavored Markdown'
|
||||||
value={value}
|
value={value}
|
||||||
theme={config.editor.theme}
|
theme={config.editor.theme}
|
||||||
|
keyMap={config.editor.keyMap}
|
||||||
fontFamily={config.editor.fontFamily}
|
fontFamily={config.editor.fontFamily}
|
||||||
fontSize={editorFontSize}
|
fontSize={editorFontSize}
|
||||||
indentType={config.editor.indentType}
|
indentType={config.editor.indentType}
|
||||||
@@ -179,6 +180,7 @@ class MarkdownEditor extends React.Component {
|
|||||||
}
|
}
|
||||||
style={previewStyle}
|
style={previewStyle}
|
||||||
theme={config.ui.theme}
|
theme={config.ui.theme}
|
||||||
|
keyMap={config.editor.keyMap}
|
||||||
fontSize={config.preview.fontSize}
|
fontSize={config.preview.fontSize}
|
||||||
fontFamily={config.preview.fontFamily}
|
fontFamily={config.preview.fontFamily}
|
||||||
codeBlockTheme={config.preview.codeBlockTheme}
|
codeBlockTheme={config.preview.codeBlockTheme}
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ export default class MarkdownPreview extends React.Component {
|
|||||||
|
|
||||||
this.refs.root.contentWindow.document.head.innerHTML = `
|
this.refs.root.contentWindow.document.head.innerHTML = `
|
||||||
<style id='style'></style>
|
<style id='style'></style>
|
||||||
<link rel="stylesheet" href="${appPath}/compiled/katex-style.css">
|
<link rel="stylesheet" href="${appPath}/node_modules/katex/dist/katex.min.css">
|
||||||
<link rel="stylesheet" href="${appPath}/node_modules/codemirror/lib/codemirror.css">
|
<link rel="stylesheet" href="${appPath}/node_modules/codemirror/lib/codemirror.css">
|
||||||
<link rel="stylesheet" id="codeTheme">
|
<link rel="stylesheet" id="codeTheme">
|
||||||
`
|
`
|
||||||
@@ -184,9 +184,9 @@ export default class MarkdownPreview extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setCodeTheme (theme) {
|
setCodeTheme (theme) {
|
||||||
theme = consts.THEMES.some((_theme) => _theme === theme)
|
theme = consts.THEMES.some((_theme) => _theme === theme) && theme !== 'default'
|
||||||
? theme
|
? theme
|
||||||
: 'default'
|
: 'elegant'
|
||||||
this.getWindow().document.getElementById('codeTheme').href = `${appPath}/node_modules/codemirror/theme/${theme}.css`
|
this.getWindow().document.getElementById('codeTheme').href = `${appPath}/node_modules/codemirror/theme/${theme}.css`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,8 +75,8 @@ const NoteItem = ({ isActive, note, dateDisplay, handleNoteClick, handleNoteCont
|
|||||||
: <i styleName='item-title-icon' className='fa fa-fw fa-file-text-o' />
|
: <i styleName='item-title-icon' className='fa fa-fw fa-file-text-o' />
|
||||||
}
|
}
|
||||||
|
|
||||||
{note.isStarred ?
|
{note.isStarred
|
||||||
<i styleName='item-star' className='fa fa-star' /> : ''
|
? <i styleName='item-star' className='fa fa-star' /> : ''
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -91,10 +91,10 @@ NoteItem.propTypes = {
|
|||||||
type: PropTypes.string.isRequired,
|
type: PropTypes.string.isRequired,
|
||||||
title: PropTypes.string.isrequired,
|
title: PropTypes.string.isrequired,
|
||||||
tags: PropTypes.array,
|
tags: PropTypes.array,
|
||||||
isStarred: PropTypes.bool.isRequired,
|
isStarred: PropTypes.bool.isRequired
|
||||||
}),
|
}),
|
||||||
handleNoteClick: PropTypes.func.isRequired,
|
handleNoteClick: PropTypes.func.isRequired,
|
||||||
handleNoteContextMenu: PropTypes.func.isRequired,
|
handleNoteContextMenu: PropTypes.func.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(NoteItem, styles)
|
export default CSSModules(NoteItem, styles)
|
||||||
|
|||||||
@@ -40,10 +40,10 @@ NoteItemSimple.propTypes = {
|
|||||||
storage: PropTypes.string.isRequired,
|
storage: PropTypes.string.isRequired,
|
||||||
key: PropTypes.string.isRequired,
|
key: PropTypes.string.isRequired,
|
||||||
type: PropTypes.string.isRequired,
|
type: PropTypes.string.isRequired,
|
||||||
title: PropTypes.string.isrequired,
|
title: PropTypes.string.isrequired
|
||||||
}),
|
}),
|
||||||
handleNoteClick: PropTypes.func.isRequired,
|
handleNoteClick: PropTypes.func.isRequired,
|
||||||
handleNoteContextMenu: PropTypes.func.isRequired,
|
handleNoteContextMenu: PropTypes.func.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(NoteItemSimple, styles)
|
export default CSSModules(NoteItemSimple, styles)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ SideNavFilter.propTypes = {
|
|||||||
isHomeActive: PropTypes.bool.isRequired,
|
isHomeActive: PropTypes.bool.isRequired,
|
||||||
handleAllNotesButtonClick: PropTypes.func.isRequired,
|
handleAllNotesButtonClick: PropTypes.func.isRequired,
|
||||||
isStarredActive: PropTypes.bool.isRequired,
|
isStarredActive: PropTypes.bool.isRequired,
|
||||||
handleStarredButtonClick: PropTypes.func.isRequired,
|
handleStarredButtonClick: PropTypes.func.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(SideNavFilter, styles)
|
export default CSSModules(SideNavFilter, styles)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './SnippetTab.styl'
|
import styles from './SnippetTab.styl'
|
||||||
import context from 'browser/lib/context'
|
import context from 'browser/lib/context'
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ const StorageItem = ({
|
|||||||
onClick={handleButtonClick}
|
onClick={handleButtonClick}
|
||||||
onContextMenu={handleContextMenu}
|
onContextMenu={handleContextMenu}
|
||||||
>
|
>
|
||||||
<span styleName={isFolded ?
|
<span styleName={isFolded
|
||||||
'folderList-item-name--folded' : 'folderList-item-name'
|
? 'folderList-item-name--folded' : 'folderList-item-name'
|
||||||
}
|
}
|
||||||
style={{borderColor: folderColor}}
|
style={{borderColor: folderColor}}
|
||||||
>
|
>
|
||||||
@@ -52,7 +52,7 @@ StorageItem.propTypes = {
|
|||||||
folderName: PropTypes.string.isRequired,
|
folderName: PropTypes.string.isRequired,
|
||||||
folderColor: PropTypes.string,
|
folderColor: PropTypes.string,
|
||||||
isFolded: PropTypes.bool.isRequired,
|
isFolded: PropTypes.bool.isRequired,
|
||||||
noteCount: PropTypes.number,
|
noteCount: PropTypes.number
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(StorageItem, styles)
|
export default CSSModules(StorageItem, styles)
|
||||||
|
|||||||
@@ -39,6 +39,8 @@
|
|||||||
border-width 0 0 0 3px
|
border-width 0 0 0 3px
|
||||||
border-style solid
|
border-style solid
|
||||||
border-color transparent
|
border-color transparent
|
||||||
|
overflow hidden
|
||||||
|
text-overflow ellipsis
|
||||||
|
|
||||||
.folderList-item-noteCount
|
.folderList-item-noteCount
|
||||||
float right
|
float right
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './NoteDetail.styl'
|
import styles from './NoteDetail.styl'
|
||||||
import MarkdownPreview from 'browser/components/MarkdownPreview'
|
import MarkdownPreview from 'browser/components/MarkdownPreview'
|
||||||
@@ -97,9 +97,7 @@ class NoteDetail extends React.Component {
|
|||||||
let { note, config } = this.props
|
let { note, config } = this.props
|
||||||
if (note == null) {
|
if (note == null) {
|
||||||
return (
|
return (
|
||||||
<div styleName='root'>
|
<div styleName='root' />
|
||||||
|
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,6 +152,7 @@ class NoteDetail extends React.Component {
|
|||||||
fontSize={editorFontSize}
|
fontSize={editorFontSize}
|
||||||
indentType={config.editor.indentType}
|
indentType={config.editor.indentType}
|
||||||
indentSize={editorIndentSize}
|
indentSize={editorIndentSize}
|
||||||
|
keyMap={config.editor.keyMap}
|
||||||
readOnly
|
readOnly
|
||||||
ref={'code-' + index}
|
ref={'code-' + index}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import NoteItem from 'browser/components/NoteItem'
|
import NoteItem from 'browser/components/NoteItem'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
|
|
||||||
@@ -54,12 +54,11 @@ class NoteList extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
let { storageMap, notes, index } = this.props
|
let { notes, index } = this.props
|
||||||
|
|
||||||
let notesList = notes
|
let notesList = notes
|
||||||
.slice(0, 10 + 10 * this.state.range)
|
.slice(0, 10 + 10 * this.state.range)
|
||||||
.map((note, _index) => {
|
.map((note, _index) => {
|
||||||
|
|
||||||
const isActive = (index === _index)
|
const isActive = (index === _index)
|
||||||
const key = `${note.storage}-${note.key}`
|
const key = `${note.storage}-${note.key}`
|
||||||
const dateDisplay = moment(note.updatedAt).fromNow()
|
const dateDisplay = moment(note.updatedAt).fromNow()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './StorageSection.styl'
|
import styles from './StorageSection.styl'
|
||||||
import StorageItem from 'browser/components/StorageItem'
|
import StorageItem from 'browser/components/StorageItem'
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import React, { PropTypes } from 'react'
|
|||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import { connect, Provider } from 'react-redux'
|
import { connect, Provider } from 'react-redux'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import ipc from './ipcClient'
|
|
||||||
import store from './store'
|
import store from './store'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './FinderMain.styl'
|
import styles from './FinderMain.styl'
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
import superagent from 'superagent'
|
|
||||||
import superagentPromise from 'superagent-promise'
|
|
||||||
|
|
||||||
export const SERVER_URL = 'https://b00st.io/'
|
|
||||||
// export const SERVER_URL = 'http://localhost:3333/'
|
|
||||||
|
|
||||||
export const request = superagentPromise(superagent, Promise)
|
|
||||||
|
|
||||||
export function shareViaPublicURL (input) {
|
|
||||||
return request
|
|
||||||
.post(SERVER_URL + 'apis/share')
|
|
||||||
// .set({
|
|
||||||
// Authorization: 'Bearer ' + auth.token()
|
|
||||||
// })
|
|
||||||
.send(input)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
|
||||||
SERVER_URL,
|
|
||||||
shareViaPublicURL
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
import CodeMirror from 'codemirror'
|
import CodeMirror from 'codemirror'
|
||||||
import _ from 'lodash'
|
|
||||||
|
|
||||||
CodeMirror.modeInfo.push({name: 'Stylus', mime: 'text/x-styl', mode: 'stylus', ext: ['styl'], alias: ['styl']})
|
CodeMirror.modeInfo.push({name: 'Stylus', mime: 'text/x-styl', mode: 'stylus', ext: ['styl'], alias: ['styl']})
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* @fileoverview Formatting date string.
|
* @fileoverview Formatting date string.
|
||||||
*/
|
*/
|
||||||
import moment from 'moment';
|
import moment from 'moment'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description Return date string. For example, 'Sep.9, 2016 12:00'.
|
* @description Return date string. For example, 'Sep.9, 2016 12:00'.
|
||||||
@@ -11,7 +11,7 @@ import moment from 'moment';
|
|||||||
export function getLastUpdated (date) {
|
export function getLastUpdated (date) {
|
||||||
const m = moment(date)
|
const m = moment(date)
|
||||||
if (!m.isValid()) {
|
if (!m.isValid()) {
|
||||||
throw Error('Invalid argument.');
|
throw Error('Invalid argument.')
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.format('MMM D, gggg H:mm')
|
return m.format('MMM D, gggg H:mm')
|
||||||
|
|||||||
@@ -128,8 +128,8 @@ class FolderSelect extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
nextOption () {
|
nextOption () {
|
||||||
let { storages } = this.props
|
|
||||||
let { optionIndex } = this.state
|
let { optionIndex } = this.state
|
||||||
|
let { folders } = this.props
|
||||||
|
|
||||||
optionIndex++
|
optionIndex++
|
||||||
if (optionIndex >= folders.length) optionIndex = 0
|
if (optionIndex >= folders.length) optionIndex = 0
|
||||||
@@ -262,13 +262,11 @@ class FolderSelect extends React.Component {
|
|||||||
: <div styleName='idle'>
|
: <div styleName='idle'>
|
||||||
<div styleName='idle-label'>
|
<div styleName='idle-label'>
|
||||||
<span styleName='idle-label-name'
|
<span styleName='idle-label-name'
|
||||||
style={{borderColor: currentOption.folder.color}}
|
style={{color: currentOption.folder.color}}
|
||||||
>
|
>
|
||||||
{currentOption.folder.name}
|
{currentOption.folder.name} /
|
||||||
<span styleName='idle-label-name-surfix'>in {currentOption.storage.name}</span>
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<i styleName='idle-caret' className='fa fa-fw fa-caret-down'/>
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,29 +7,28 @@
|
|||||||
transition 0.15s
|
transition 0.15s
|
||||||
user-select none
|
user-select none
|
||||||
&:hover
|
&:hover
|
||||||
background-color white
|
background-color $ui-button--hover-backgroundColor
|
||||||
border-color $ui-borderColor
|
|
||||||
|
|
||||||
.root--search, .root--focus
|
.root--search, .root--focus
|
||||||
@extend .root
|
@extend .root
|
||||||
background-color white
|
background-color $ui-noteDetail-backgroundColor = #F4F4F4
|
||||||
border-color $ui-input--focus-borderColor
|
border-color $ui-input--focus-borderColor
|
||||||
|
width 100px
|
||||||
&:hover
|
&:hover
|
||||||
background-color white
|
|
||||||
border-color $ui-input--focus-borderColor
|
border-color $ui-input--focus-borderColor
|
||||||
|
|
||||||
.idle
|
.idle
|
||||||
position relative
|
position relative
|
||||||
cursor pointer
|
cursor pointer
|
||||||
|
|
||||||
.idle-label
|
.idle-label
|
||||||
absolute left top
|
|
||||||
padding 0 0 0 5px
|
|
||||||
right 20px
|
right 20px
|
||||||
overflow ellipsis
|
overflow ellipsis
|
||||||
|
|
||||||
.idle-label-name
|
.idle-label-name
|
||||||
border-left solid 4px transparent
|
font-size 16px
|
||||||
padding 2px 5px
|
padding 2px
|
||||||
|
|
||||||
.idle-label-name-surfix
|
.idle-label-name-surfix
|
||||||
font-size 10px
|
font-size 10px
|
||||||
color $ui-inactive-text-color
|
color $ui-inactive-text-color
|
||||||
@@ -60,9 +59,9 @@
|
|||||||
max-height 450px
|
max-height 450px
|
||||||
overflow auto
|
overflow auto
|
||||||
z-index 200
|
z-index 200
|
||||||
|
border $ui-border
|
||||||
background-color white
|
background-color white
|
||||||
border-radius 2px
|
border-radius 2px
|
||||||
box-shadow 2px 2px 10px gray
|
|
||||||
|
|
||||||
.search-optionList-item
|
.search-optionList-item
|
||||||
height 34px
|
height 34px
|
||||||
@@ -115,8 +114,8 @@ body[data-theme="dark"]
|
|||||||
|
|
||||||
.search-optionList
|
.search-optionList
|
||||||
color white
|
color white
|
||||||
|
border-color $ui-dark-borderColor
|
||||||
background-color $ui-dark-button--hover-backgroundColor
|
background-color $ui-dark-button--hover-backgroundColor
|
||||||
box-shadow 2px 2px 10px black
|
|
||||||
|
|
||||||
.search-optionList-item
|
.search-optionList-item
|
||||||
&:hover
|
&:hover
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ const LastUpdatedString = ({ date }) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
LastUpdatedString.propTypes = {
|
LastUpdatedString.propTypes = {
|
||||||
date: PropTypes.string,
|
date: PropTypes.string
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(LastUpdatedString, styles)
|
export default CSSModules(LastUpdatedString, styles)
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
.info-right-date
|
.info-right-date
|
||||||
display inline
|
display inline
|
||||||
|
line-height 24px
|
||||||
|
padding-right 25px
|
||||||
font-size 11px
|
font-size 11px
|
||||||
color $ui-button-color
|
color $ui-button-color
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import styles from './MarkdownNoteDetail.styl'
|
|||||||
import MarkdownEditor from 'browser/components/MarkdownEditor'
|
import MarkdownEditor from 'browser/components/MarkdownEditor'
|
||||||
import StarButton from './StarButton'
|
import StarButton from './StarButton'
|
||||||
import TagSelect from './TagSelect'
|
import TagSelect from './TagSelect'
|
||||||
import LastUpdatedString from './LastUpdatedString'
|
import FolderSelect from './FolderSelect'
|
||||||
import dataApi from 'browser/main/lib/dataApi'
|
import dataApi from 'browser/main/lib/dataApi'
|
||||||
import { hashHistory } from 'react-router'
|
import { hashHistory } from 'react-router'
|
||||||
import ee from 'browser/main/lib/eventEmitter'
|
import ee from 'browser/main/lib/eventEmitter'
|
||||||
@@ -219,6 +219,15 @@ class MarkdownNoteDetail extends React.Component {
|
|||||||
onClick={(e) => this.handleStarButtonClick(e)}
|
onClick={(e) => this.handleStarButtonClick(e)}
|
||||||
isActive={note.isStarred}
|
isActive={note.isStarred}
|
||||||
/>
|
/>
|
||||||
|
<div styleName='info-left-top'>
|
||||||
|
<FolderSelect styleName='info-left-top-folderSelect'
|
||||||
|
value={this.state.note.storage + '-' + this.state.note.folder}
|
||||||
|
ref='folder'
|
||||||
|
data={data}
|
||||||
|
onChange={(e) => this.handleFolderChange(e)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<TagSelect
|
<TagSelect
|
||||||
ref='tags'
|
ref='tags'
|
||||||
value={this.state.note.tags}
|
value={this.state.note.tags}
|
||||||
@@ -226,7 +235,6 @@ class MarkdownNoteDetail extends React.Component {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div styleName='info-right'>
|
<div styleName='info-right'>
|
||||||
<LastUpdatedString date={note.updatedAt} />
|
|
||||||
<button styleName='info-right-button'
|
<button styleName='info-right-button'
|
||||||
onClick={(e) => this.handleContextButtonClick(e)}
|
onClick={(e) => this.handleContextButtonClick(e)}
|
||||||
>
|
>
|
||||||
@@ -248,6 +256,7 @@ class MarkdownNoteDetail extends React.Component {
|
|||||||
|
|
||||||
<StatusBar
|
<StatusBar
|
||||||
{..._.pick(this.props, ['config', 'location', 'dispatch'])}
|
{..._.pick(this.props, ['config', 'location', 'dispatch'])}
|
||||||
|
date={note.updatedAt}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -16,6 +16,19 @@ $info-margin-under-border = 27px
|
|||||||
padding 0 5px
|
padding 0 5px
|
||||||
margin 0px 2px
|
margin 0px 2px
|
||||||
|
|
||||||
|
.info-left-top
|
||||||
|
display inline-block
|
||||||
|
height $info-height
|
||||||
|
line-height $info-height
|
||||||
|
|
||||||
|
.info-left-top-folderSelect
|
||||||
|
display inline-block
|
||||||
|
padding 0 3px
|
||||||
|
height 34px
|
||||||
|
line-height 34px
|
||||||
|
vertical-align middle
|
||||||
|
border-radius 3px
|
||||||
|
|
||||||
.info-left-button
|
.info-left-button
|
||||||
width 34px
|
width 34px
|
||||||
height 34px
|
height 34px
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import CodeEditor from 'browser/components/CodeEditor'
|
|||||||
import MarkdownEditor from 'browser/components/MarkdownEditor'
|
import MarkdownEditor from 'browser/components/MarkdownEditor'
|
||||||
import StarButton from './StarButton'
|
import StarButton from './StarButton'
|
||||||
import TagSelect from './TagSelect'
|
import TagSelect from './TagSelect'
|
||||||
import LastUpdatedString from './LastUpdatedString'
|
import FolderSelect from './FolderSelect'
|
||||||
import dataApi from 'browser/main/lib/dataApi'
|
import dataApi from 'browser/main/lib/dataApi'
|
||||||
import { hashHistory } from 'react-router'
|
import { hashHistory } from 'react-router'
|
||||||
import ee from 'browser/main/lib/eventEmitter'
|
import ee from 'browser/main/lib/eventEmitter'
|
||||||
@@ -14,6 +14,7 @@ import SnippetTab from 'browser/components/SnippetTab'
|
|||||||
import StatusBar from '../StatusBar'
|
import StatusBar from '../StatusBar'
|
||||||
import context from 'browser/lib/context'
|
import context from 'browser/lib/context'
|
||||||
import ConfigManager from 'browser/main/lib/ConfigManager'
|
import ConfigManager from 'browser/main/lib/ConfigManager'
|
||||||
|
import _ from 'lodash'
|
||||||
|
|
||||||
function pass (name) {
|
function pass (name) {
|
||||||
switch (name) {
|
switch (name) {
|
||||||
@@ -508,6 +509,7 @@ class SnippetNoteDetail extends React.Component {
|
|||||||
fontSize={editorFontSize}
|
fontSize={editorFontSize}
|
||||||
indentType={config.editor.indentType}
|
indentType={config.editor.indentType}
|
||||||
indentSize={editorIndentSize}
|
indentSize={editorIndentSize}
|
||||||
|
keyMap={config.editor.keyMap}
|
||||||
onChange={(e) => this.handleCodeChange(index)(e)}
|
onChange={(e) => this.handleCodeChange(index)(e)}
|
||||||
ref={'code-' + index}
|
ref={'code-' + index}
|
||||||
/>
|
/>
|
||||||
@@ -527,6 +529,15 @@ class SnippetNoteDetail extends React.Component {
|
|||||||
onClick={(e) => this.handleStarButtonClick(e)}
|
onClick={(e) => this.handleStarButtonClick(e)}
|
||||||
isActive={note.isStarred}
|
isActive={note.isStarred}
|
||||||
/>
|
/>
|
||||||
|
<div styleName='info-left-top'>
|
||||||
|
<FolderSelect styleName='info-left-top-folderSelect'
|
||||||
|
value={this.state.note.storage + '-' + this.state.note.folder}
|
||||||
|
ref='folder'
|
||||||
|
data={data}
|
||||||
|
onChange={(e) => this.handleFolderChange(e)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<TagSelect
|
<TagSelect
|
||||||
ref='tags'
|
ref='tags'
|
||||||
value={this.state.note.tags}
|
value={this.state.note.tags}
|
||||||
@@ -534,7 +545,6 @@ class SnippetNoteDetail extends React.Component {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div styleName='info-right'>
|
<div styleName='info-right'>
|
||||||
<LastUpdatedString date={note.updatedAt} />
|
|
||||||
<button styleName='info-right-button'
|
<button styleName='info-right-button'
|
||||||
onClick={(e) => this.handleContextButtonClick(e)}
|
onClick={(e) => this.handleContextButtonClick(e)}
|
||||||
>
|
>
|
||||||
@@ -595,6 +605,7 @@ class SnippetNoteDetail extends React.Component {
|
|||||||
|
|
||||||
<StatusBar
|
<StatusBar
|
||||||
{..._.pick(this.props, ['config', 'location', 'dispatch'])}
|
{..._.pick(this.props, ['config', 'location', 'dispatch'])}
|
||||||
|
date={note.updatedAt}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
|
|
||||||
.override
|
.override
|
||||||
absolute bottom left
|
absolute bottom left
|
||||||
|
left 60px
|
||||||
height 23px
|
height 23px
|
||||||
z-index 1
|
z-index 1
|
||||||
button
|
button
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
.root
|
.root
|
||||||
position absolute
|
|
||||||
left 7px
|
left 7px
|
||||||
top 0
|
top 0
|
||||||
padding 0
|
padding 0
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class TagSelect extends React.Component {
|
|||||||
super(props)
|
super(props)
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
newTag: '',
|
newTag: ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
.root
|
.root
|
||||||
position absolute
|
display inline-block
|
||||||
top 19px
|
top 19px
|
||||||
left 44px
|
|
||||||
user-select none
|
user-select none
|
||||||
vertical-align middle
|
vertical-align middle
|
||||||
width 300px
|
width 300px
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ class Main extends React.Component {
|
|||||||
ConfigManager.set({ navWidth })
|
ConfigManager.set({ navWidth })
|
||||||
dispatch({
|
dispatch({
|
||||||
type: 'SET_NAV_WIDTH',
|
type: 'SET_NAV_WIDTH',
|
||||||
navWidth,
|
navWidth
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -324,8 +324,8 @@ class NoteList extends React.Component {
|
|||||||
const isDefault = config.listStyle === 'DEFAULT'
|
const isDefault = config.listStyle === 'DEFAULT'
|
||||||
const isActive = location.query.key === note.storage + '-' + note.key
|
const isActive = location.query.key === note.storage + '-' + note.key
|
||||||
const dateDisplay = moment(
|
const dateDisplay = moment(
|
||||||
config.sortBy === 'CREATED_AT' ?
|
config.sortBy === 'CREATED_AT'
|
||||||
note.createdAt : note.updatedAt
|
? note.createdAt : note.updatedAt
|
||||||
).fromNow()
|
).fromNow()
|
||||||
const key = `${note.storage}-${note.key}`
|
const key = `${note.storage}-${note.key}`
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,6 @@ import ConfigManager from 'browser/main/lib/ConfigManager'
|
|||||||
import StorageItem from './StorageItem'
|
import StorageItem from './StorageItem'
|
||||||
import SideNavFilter from 'browser/components/SideNavFilter'
|
import SideNavFilter from 'browser/components/SideNavFilter'
|
||||||
|
|
||||||
const electron = require('electron')
|
|
||||||
const { remote } = electron
|
|
||||||
|
|
||||||
class SideNav extends React.Component {
|
class SideNav extends React.Component {
|
||||||
// TODO: should not use electron stuff v0.7
|
// TODO: should not use electron stuff v0.7
|
||||||
handleMenuButtonClick (e) {
|
handleMenuButtonClick (e) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import React, { PropTypes } from 'react'
|
|||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './StatusBar.styl'
|
import styles from './StatusBar.styl'
|
||||||
import ZoomManager from 'browser/main/lib/ZoomManager'
|
import ZoomManager from 'browser/main/lib/ZoomManager'
|
||||||
|
import LastUpdatedString from '../Detail/LastUpdatedString'
|
||||||
|
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const { remote, ipcRenderer } = electron
|
const { remote, ipcRenderer } = electron
|
||||||
@@ -52,22 +53,23 @@ class StatusBar extends React.Component {
|
|||||||
<div className='StatusBar'
|
<div className='StatusBar'
|
||||||
styleName='root'
|
styleName='root'
|
||||||
>
|
>
|
||||||
<div styleName='blank' />
|
|
||||||
{status.updateReady
|
|
||||||
? <button onClick={this.updateApp} styleName='update'>
|
|
||||||
<i styleName='update-icon' className='fa fa-cloud-download' /> Ready to Update!
|
|
||||||
</button>
|
|
||||||
: null
|
|
||||||
}
|
|
||||||
{/*<button styleName='help'>
|
|
||||||
<i className='fa fa-info-circle' />
|
|
||||||
</button>*/}
|
|
||||||
<button styleName='zoom'
|
<button styleName='zoom'
|
||||||
onClick={(e) => this.handleZoomButtonClick(e)}
|
onClick={(e) => this.handleZoomButtonClick(e)}
|
||||||
>
|
>
|
||||||
<i className='fa fa-search-plus' />
|
<i className='fa fa-search-plus' />
|
||||||
{Math.floor(config.zoom * 100)}%
|
{Math.floor(config.zoom * 100)}%
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
<div styleName='blank' />
|
||||||
|
|
||||||
|
{status.updateReady
|
||||||
|
? <button onClick={this.updateApp} styleName='update'>
|
||||||
|
<i styleName='update-icon' className='fa fa-cloud-download' /> Ready to Update!
|
||||||
|
</button>
|
||||||
|
: null
|
||||||
|
}
|
||||||
|
|
||||||
|
<LastUpdatedString date={this.props.date} />
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -77,7 +79,8 @@ StatusBar.contextTypes = {
|
|||||||
status: PropTypes.shape({
|
status: PropTypes.shape({
|
||||||
updateReady: PropTypes.bool.isRequired
|
updateReady: PropTypes.bool.isRequired
|
||||||
}).isRequired,
|
}).isRequired,
|
||||||
config: PropTypes.shape({}).isRequired
|
config: PropTypes.shape({}).isRequired,
|
||||||
|
date: PropTypes.string
|
||||||
}
|
}
|
||||||
|
|
||||||
StatusBar.propTypes = {
|
StatusBar.propTypes = {
|
||||||
|
|||||||
@@ -10,8 +10,6 @@ import ConfigManager from 'browser/main/lib/ConfigManager'
|
|||||||
import dataApi from 'browser/main/lib/dataApi'
|
import dataApi from 'browser/main/lib/dataApi'
|
||||||
|
|
||||||
const OSX = window.process.platform === 'darwin'
|
const OSX = window.process.platform === 'darwin'
|
||||||
const { remote } = require('electron')
|
|
||||||
const { Menu, MenuItem } = remote
|
|
||||||
|
|
||||||
class TopBar extends React.Component {
|
class TopBar extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
@@ -71,10 +69,10 @@ class TopBar extends React.Component {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (storage == null) alert('No storage to create a note')
|
if (storage == null) window.alert('No storage to create a note')
|
||||||
let folder = _.find(storage.folders, {key: params.folderKey})
|
let folder = _.find(storage.folders, {key: params.folderKey})
|
||||||
if (folder == null) folder = storage.folders[0]
|
if (folder == null) folder = storage.folders[0]
|
||||||
if (folder == null) alert('No folder to create a note')
|
if (folder == null) window.alert('No folder to create a note')
|
||||||
|
|
||||||
return {
|
return {
|
||||||
storage,
|
storage,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export const DEFAULT_CONFIG = {
|
|||||||
},
|
},
|
||||||
editor: {
|
editor: {
|
||||||
theme: 'default',
|
theme: 'default',
|
||||||
|
keyMap: 'sublime',
|
||||||
fontSize: '14',
|
fontSize: '14',
|
||||||
fontFamily: 'Monaco, Consolas',
|
fontFamily: 'Monaco, Consolas',
|
||||||
indentType: 'space',
|
indentType: 'space',
|
||||||
@@ -34,7 +35,7 @@ export const DEFAULT_CONFIG = {
|
|||||||
preview: {
|
preview: {
|
||||||
fontSize: '14',
|
fontSize: '14',
|
||||||
fontFamily: 'Lato',
|
fontFamily: 'Lato',
|
||||||
codeBlockTheme: 'xcode',
|
codeBlockTheme: 'elegant',
|
||||||
lineNumber: true
|
lineNumber: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './InitModal.styl'
|
import styles from './InitModal.styl'
|
||||||
import dataApi from 'browser/main/lib/dataApi'
|
import dataApi from 'browser/main/lib/dataApi'
|
||||||
import store from 'browser/main/store'
|
import store from 'browser/main/store'
|
||||||
import { hashHistory } from 'react-router'
|
import { hashHistory } from 'react-router'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import keygen from 'browser/lib/keygen'
|
|
||||||
|
|
||||||
const CSON = require('@rokt33r/season')
|
const CSON = require('@rokt33r/season')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './NewNoteModal.styl'
|
import styles from './NewNoteModal.styl'
|
||||||
import dataApi from 'browser/main/lib/dataApi'
|
import dataApi from 'browser/main/lib/dataApi'
|
||||||
|
|||||||
@@ -94,6 +94,10 @@
|
|||||||
p
|
p
|
||||||
line-height 1.2
|
line-height 1.2
|
||||||
|
|
||||||
|
.note-for-keymap
|
||||||
|
margin-left: 10px
|
||||||
|
font-size: 12px
|
||||||
|
|
||||||
colorDarkControl()
|
colorDarkControl()
|
||||||
border-color $ui-dark-borderColor
|
border-color $ui-dark-borderColor
|
||||||
background-color $ui-dark-backgroundColor
|
background-color $ui-dark-backgroundColor
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import store from 'browser/main/store'
|
|||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const ipc = electron.ipcRenderer
|
const ipc = electron.ipcRenderer
|
||||||
|
|
||||||
const OSX = global.process.platform === 'darwin'
|
|
||||||
|
|
||||||
class HotkeyTab extends React.Component {
|
class HotkeyTab extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props)
|
super(props)
|
||||||
@@ -150,7 +148,7 @@ class HotkeyTab extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
HotkeyTab.propTypes = {
|
HotkeyTab.propTypes = {
|
||||||
dispatch: PropTypes.func,
|
dispatch: PropTypes.func
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CSSModules(HotkeyTab, styles)
|
export default CSSModules(HotkeyTab, styles)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { PropTypes } from 'react'
|
import React from 'react'
|
||||||
import CSSModules from 'browser/lib/CSSModules'
|
import CSSModules from 'browser/lib/CSSModules'
|
||||||
import styles from './InfoTab.styl'
|
import styles from './InfoTab.styl'
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ class InfoTab extends React.Component {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div styleName='clear'></div>
|
<div styleName='clear' />
|
||||||
<div styleName='madeBy'>Made by
|
<div styleName='madeBy'>Made by
|
||||||
<a href='http://maisin.co/'
|
<a href='http://maisin.co/'
|
||||||
onClick={(e) => this.handleLinkClick(e)}
|
onClick={(e) => this.handleLinkClick(e)}
|
||||||
|
|||||||
@@ -106,7 +106,10 @@ class UnstyledFolderItem extends React.Component {
|
|||||||
const popover = { position: 'absolute', zIndex: 2 }
|
const popover = { position: 'absolute', zIndex: 2 }
|
||||||
const cover = {
|
const cover = {
|
||||||
position: 'fixed',
|
position: 'fixed',
|
||||||
top: 0, right: 0, bottom: 0, left: 0
|
top: 0,
|
||||||
|
right: 0,
|
||||||
|
bottom: 0,
|
||||||
|
left: 0
|
||||||
}
|
}
|
||||||
const pickerStyle = Object.assign({}, {
|
const pickerStyle = Object.assign({}, {
|
||||||
position: 'absolute'
|
position: 'absolute'
|
||||||
|
|||||||
@@ -5,9 +5,6 @@ import ConfigManager from 'browser/main/lib/ConfigManager'
|
|||||||
import store from 'browser/main/store'
|
import store from 'browser/main/store'
|
||||||
import consts from 'browser/lib/consts'
|
import consts from 'browser/lib/consts'
|
||||||
|
|
||||||
const electron = require('electron')
|
|
||||||
const ipc = electron.ipcRenderer
|
|
||||||
|
|
||||||
const OSX = global.process.platform === 'darwin'
|
const OSX = global.process.platform === 'darwin'
|
||||||
|
|
||||||
class UiTab extends React.Component {
|
class UiTab extends React.Component {
|
||||||
@@ -34,7 +31,8 @@ class UiTab extends React.Component {
|
|||||||
fontFamily: this.refs.editorFontFamily.value,
|
fontFamily: this.refs.editorFontFamily.value,
|
||||||
indentType: this.refs.editorIndentType.value,
|
indentType: this.refs.editorIndentType.value,
|
||||||
indentSize: this.refs.editorIndentSize.value,
|
indentSize: this.refs.editorIndentSize.value,
|
||||||
switchPreview: this.refs.editorSwitchPreview.value
|
switchPreview: this.refs.editorSwitchPreview.value,
|
||||||
|
keyMap: this.refs.editorKeyMap.value
|
||||||
}
|
}
|
||||||
config.preview = {
|
config.preview = {
|
||||||
fontSize: this.refs.previewFontSize.value,
|
fontSize: this.refs.previewFontSize.value,
|
||||||
@@ -181,6 +179,23 @@ class UiTab extends React.Component {
|
|||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div styleName='group-section'>
|
||||||
|
<div styleName='group-section-label'>
|
||||||
|
Editor Keymap
|
||||||
|
</div>
|
||||||
|
<div styleName='group-section-control'>
|
||||||
|
<select value={config.editor.keyMap}
|
||||||
|
ref='editorKeyMap'
|
||||||
|
onChange={(e) => this.handleUIChange(e)}
|
||||||
|
>
|
||||||
|
<option value='sublime'>default</option>
|
||||||
|
<option value='vim'>vim</option>
|
||||||
|
</select>
|
||||||
|
<span styleName='note-for-keymap'>Please reload boostnote after you change the keymap</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div styleName='group-header2'>Preview</div>
|
<div styleName='group-header2'>Preview</div>
|
||||||
<div styleName='group-section'>
|
<div styleName='group-section'>
|
||||||
<div styleName='group-section-label'>
|
<div styleName='group-section-label'>
|
||||||
|
|||||||
@@ -29,11 +29,6 @@ $ npm run hot
|
|||||||
```
|
```
|
||||||
> Actually the app can be start with `npm start`. However, the app will use the compiled script.
|
> Actually the app can be start with `npm start`. However, the app will use the compiled script.
|
||||||
|
|
||||||
If the app gets stuck on load, you may need to run the following.
|
|
||||||
```
|
|
||||||
$ npm run vendor
|
|
||||||
```
|
|
||||||
|
|
||||||
By this, webpack will watch the code changes and apply it automatically.
|
By this, webpack will watch the code changes and apply it automatically.
|
||||||
|
|
||||||
> ### Notice
|
> ### Notice
|
||||||
|
|||||||
10
gruntfile.js
10
gruntfile.js
@@ -5,16 +5,16 @@ const packager = require('electron-packager')
|
|||||||
const WIN = process.platform === 'win32'
|
const WIN = process.platform === 'win32'
|
||||||
|
|
||||||
module.exports = function (grunt) {
|
module.exports = function (grunt) {
|
||||||
var auth_code
|
var authCode
|
||||||
try {
|
try {
|
||||||
auth_code = grunt.file.readJSON('secret/auth_code.json')
|
authCode = grunt.file.readJSON('secret/auth_code.json')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e.origError.code === 'ENOENT') {
|
if (e.origError.code === 'ENOENT') {
|
||||||
console.warn('secret/auth_code.json is not found. CodeSigning is not available.')
|
console.warn('secret/auth_code.json is not found. CodeSigning is not available.')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const OSX_COMMON_NAME = auth_code != null ? auth_code.OSX_COMMON_NAME : ''
|
const OSX_COMMON_NAME = authCode != null ? authCode.OSX_COMMON_NAME : ''
|
||||||
const WIN_CERT_PASSWORD = auth_code != null ? auth_code.WIN_CERT_PASSWORD : ''
|
const WIN_CERT_PASSWORD = authCode != null ? authCode.WIN_CERT_PASSWORD : ''
|
||||||
|
|
||||||
var initConfig = {
|
var initConfig = {
|
||||||
pkg: grunt.file.readJSON('package.json'),
|
pkg: grunt.file.readJSON('package.json'),
|
||||||
@@ -98,7 +98,7 @@ module.exports = function (grunt) {
|
|||||||
prune: true,
|
prune: true,
|
||||||
overwrite: true,
|
overwrite: true,
|
||||||
out: path.join(__dirname, 'dist'),
|
out: path.join(__dirname, 'dist'),
|
||||||
ignore: /node_modules\/ace-builds\/(?!src-min)|node_modules\/ace-builds\/(?=src-min-noconflict)|node_modules\/devicon\/icons|dist|^\/browser|^\/secret|\.babelrc|\.gitignore|^\/\.gitmodules|^\/gruntfile|^\/readme.md|^\/webpack|^\/appdmg\.json|^\/node_modules\/grunt/
|
ignore: /node_modules\/ace-builds\/(?!src-min)|node_modules\/ace-builds\/(?=src-min-noconflict)|node_modules\/devicon\/icons|^\/browser|^\/secret|\.babelrc|\.gitignore|^\/\.gitmodules|^\/gruntfile|^\/readme.md|^\/webpack|^\/appdmg\.json|^\/node_modules\/grunt/
|
||||||
}
|
}
|
||||||
switch (platform) {
|
switch (platform) {
|
||||||
case 'win':
|
case 'win':
|
||||||
|
|||||||
@@ -1,19 +1,10 @@
|
|||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
const app = electron.app
|
const app = electron.app
|
||||||
const Menu = electron.Menu
|
|
||||||
|
|
||||||
var finderWindow = null
|
|
||||||
|
|
||||||
app.on('ready', function () {
|
app.on('ready', function () {
|
||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
app.dock.hide()
|
app.dock.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
// var template = require('./finder-menu')
|
|
||||||
// var menu = Menu.buildFromTemplate(template)
|
|
||||||
// Menu.setApplicationMenu(menu)
|
|
||||||
|
|
||||||
finderWindow = require('./finder-window')
|
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exports = app
|
module.exports = app
|
||||||
|
|||||||
@@ -31,16 +31,17 @@
|
|||||||
<script src="../node_modules/codemirror/addon/mode/overlay.js"></script>
|
<script src="../node_modules/codemirror/addon/mode/overlay.js"></script>
|
||||||
<script src="../node_modules/codemirror/addon/mode/loadmode.js"></script>
|
<script src="../node_modules/codemirror/addon/mode/loadmode.js"></script>
|
||||||
<script src="../node_modules/codemirror/keymap/sublime.js"></script>
|
<script src="../node_modules/codemirror/keymap/sublime.js"></script>
|
||||||
|
<script src="../node_modules/codemirror/keymap/vim.js"></script>
|
||||||
<script src="../node_modules/codemirror/addon/runmode/runmode.js"></script>
|
<script src="../node_modules/codemirror/addon/runmode/runmode.js"></script>
|
||||||
|
|
||||||
<script src="../compiled/raphael.js"></script>
|
<script src="../node_modules/raphael/raphael.min.js"></script>
|
||||||
<script src="../compiled/flowchart.js"></script>
|
<script src="../node_modules/flowchart.js/release/flowchart.min.js"></script>
|
||||||
|
|
||||||
<script src="../compiled/katex.js"></script>
|
<script src="../node_modules/katex/dist/katex.min.js"></script>
|
||||||
<script src="../compiled/react.js"></script>
|
<script src="../node_modules/react/dist/react.min.js"></script>
|
||||||
<script src="../compiled/react-dom.js"></script>
|
<script src="../node_modules/react-dom/dist/react-dom.min.js"></script>
|
||||||
<script src="../compiled/redux.js"></script>
|
<script src="../node_modules/redux/dist/redux.min.js"></script>
|
||||||
<script src="../compiled/react-redux.js"></script>
|
<script src="../node_modules/react-redux/dist/react-redux.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
window._ = require('lodash');
|
window._ = require('lodash');
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ const electron = require('electron')
|
|||||||
const app = electron.app
|
const app = electron.app
|
||||||
const Menu = electron.Menu
|
const Menu = electron.Menu
|
||||||
const ipc = electron.ipcMain
|
const ipc = electron.ipcMain
|
||||||
const autoUpdater = electron.autoUpdater
|
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const ChildProcess = require('child_process')
|
const ChildProcess = require('child_process')
|
||||||
const _ = require('lodash')
|
const _ = require('lodash')
|
||||||
@@ -11,7 +10,6 @@ const GhReleases = require('electron-gh-releases')
|
|||||||
var ipcServer = null
|
var ipcServer = null
|
||||||
|
|
||||||
var mainWindow = null
|
var mainWindow = null
|
||||||
var finderWindow = null
|
|
||||||
|
|
||||||
var shouldQuit = app.makeSingleInstance(function (commandLine, workingDirectory) {
|
var shouldQuit = app.makeSingleInstance(function (commandLine, workingDirectory) {
|
||||||
if (mainWindow) {
|
if (mainWindow) {
|
||||||
@@ -26,12 +24,8 @@ var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory)
|
|||||||
|
|
||||||
if (shouldQuit) {
|
if (shouldQuit) {
|
||||||
app.quit()
|
app.quit()
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var version = app.getVersion()
|
|
||||||
var versionText = (version == null || version.length === 0) ? 'DEV version' : 'v' + version
|
|
||||||
|
|
||||||
var isUpdateReady = false
|
var isUpdateReady = false
|
||||||
|
|
||||||
var ghReleasesOpts = {
|
var ghReleasesOpts = {
|
||||||
@@ -108,14 +102,9 @@ app.on('ready', function () {
|
|||||||
Menu.setApplicationMenu(menu)
|
Menu.setApplicationMenu(menu)
|
||||||
break
|
break
|
||||||
case 'win32':
|
case 'win32':
|
||||||
finderWindow = require('./finder-window')
|
|
||||||
mainWindow.setMenu(menu)
|
mainWindow.setMenu(menu)
|
||||||
break
|
break
|
||||||
case 'linux':
|
case 'linux':
|
||||||
// Finder is available on cinnamon only.
|
|
||||||
if (process.env.DESKTOP_SESSION === 'cinnamon') {
|
|
||||||
finderWindow = require('./finder-window')
|
|
||||||
}
|
|
||||||
Menu.setApplicationMenu(menu)
|
Menu.setApplicationMenu(menu)
|
||||||
mainWindow.setMenu(menu)
|
mainWindow.setMenu(menu)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ var help = {
|
|||||||
submenu: [
|
submenu: [
|
||||||
{
|
{
|
||||||
label: 'Boostnote official site',
|
label: 'Boostnote official site',
|
||||||
click: function () { shell.openExternal('https://b00st.io/') }
|
click: function () { shell.openExternal('https://boostnote.io/') }
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Issue Tracker',
|
label: 'Issue Tracker',
|
||||||
|
|||||||
@@ -2,12 +2,15 @@ const electron = require('electron')
|
|||||||
const app = electron.app
|
const app = electron.app
|
||||||
const BrowserWindow = electron.BrowserWindow
|
const BrowserWindow = electron.BrowserWindow
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
const Config = require('electron-config')
|
||||||
|
const config = new Config()
|
||||||
|
|
||||||
var showMenu = process.platform !== 'win32'
|
var showMenu = process.platform !== 'win32'
|
||||||
|
let windowSize = config.get('windowsize') || { width: 1080, height: 720 }
|
||||||
|
|
||||||
var mainWindow = new BrowserWindow({
|
let mainWindow = new BrowserWindow({
|
||||||
width: 1080,
|
width: windowSize.width,
|
||||||
height: 720,
|
height: windowSize.height,
|
||||||
minWidth: 500,
|
minWidth: 500,
|
||||||
minHeight: 320,
|
minHeight: 320,
|
||||||
autoHideMenuBar: showMenu,
|
autoHideMenuBar: showMenu,
|
||||||
@@ -46,6 +49,7 @@ if (process.platform !== 'linux' || process.env.DESKTOP_SESSION === 'cinnamon')
|
|||||||
})
|
})
|
||||||
|
|
||||||
app.on('before-quit', function (e) {
|
app.on('before-quit', function (e) {
|
||||||
|
config.set('windowsize', mainWindow.getBounds())
|
||||||
mainWindow.removeAllListeners()
|
mainWindow.removeAllListeners()
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -57,22 +57,23 @@
|
|||||||
<script src="../node_modules/codemirror/addon/mode/overlay.js"></script>
|
<script src="../node_modules/codemirror/addon/mode/overlay.js"></script>
|
||||||
<script src="../node_modules/codemirror/addon/mode/loadmode.js"></script>
|
<script src="../node_modules/codemirror/addon/mode/loadmode.js"></script>
|
||||||
<script src="../node_modules/codemirror/keymap/sublime.js"></script>
|
<script src="../node_modules/codemirror/keymap/sublime.js"></script>
|
||||||
|
<script src="../node_modules/codemirror/keymap/vim.js"></script>
|
||||||
<script src="../node_modules/codemirror/addon/runmode/runmode.js"></script>
|
<script src="../node_modules/codemirror/addon/runmode/runmode.js"></script>
|
||||||
|
|
||||||
<script src="../node_modules/codemirror/addon/edit/continuelist.js"></script>
|
<script src="../node_modules/codemirror/addon/edit/continuelist.js"></script>
|
||||||
|
|
||||||
<script src="../compiled/raphael.js"></script>
|
<script src="../node_modules/raphael/raphael.min.js"></script>
|
||||||
<script src="../compiled/flowchart.js"></script>
|
<script src="../node_modules/flowchart.js/release/flowchart.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
window._ = require('lodash')
|
window._ = require('lodash')
|
||||||
</script>
|
</script>
|
||||||
<script src="../node_modules/js-sequence-diagrams/fucknpm/sequence-diagram-min.js"></script>
|
|
||||||
|
|
||||||
<script src="../compiled/katex.js"></script>
|
<script src="../node_modules/js-sequence-diagrams/fucknpm/sequence-diagram-min.js"></script>
|
||||||
<script src="../compiled/react.js"></script>
|
<script src="../node_modules/katex/dist/katex.min.js"></script>
|
||||||
<script src="../compiled/react-dom.js"></script>
|
<script src="../node_modules/react/dist/react.min.js"></script>
|
||||||
<script src="../compiled/redux.js"></script>
|
<script src="../node_modules/react-dom/dist/react-dom.min.js"></script>
|
||||||
<script src="../compiled/react-redux.js"></script>
|
<script src="../node_modules/redux/dist/redux.min.js"></script>
|
||||||
|
<script src="../node_modules/react-redux/dist/react-redux.min.js"></script>
|
||||||
<script type='text/javascript'>
|
<script type='text/javascript'>
|
||||||
const electron = require('electron')
|
const electron = require('electron')
|
||||||
electron.webFrame.setZoomLevelLimits(1, 1)
|
electron.webFrame.setZoomLevelLimits(1, 1)
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"directory": "compiled",
|
|
||||||
"targets": {
|
|
||||||
"react": "https://cdnjs.cloudflare.com/ajax/libs/react/15.0.2/react.js",
|
|
||||||
"react-dom": "https://cdnjs.cloudflare.com/ajax/libs/react/15.0.2/react-dom.js",
|
|
||||||
"redux": "https://cdnjs.cloudflare.com/ajax/libs/redux/3.5.2/redux.js",
|
|
||||||
"react-redux": "https://unpkg.com/react-redux@4.4.5/dist/react-redux.min.js",
|
|
||||||
"katex": "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.js",
|
|
||||||
"katex-style": "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css",
|
|
||||||
"raphael": "https://raw.githubusercontent.com/DmitryBaranovskiy/raphael/master/raphael.js",
|
|
||||||
"flowchart": "https://cdnjs.cloudflare.com/ajax/libs/flowchart/1.6.3/flowchart.js"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
29
package.json
29
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "boost",
|
"name": "boost",
|
||||||
"version": "0.8.0",
|
"version": "0.8.1",
|
||||||
"description": "Boostnote",
|
"description": "Boostnote",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
@@ -8,10 +8,10 @@
|
|||||||
"start": "electron ./index.js",
|
"start": "electron ./index.js",
|
||||||
"hot": "electron ./index.js --hot",
|
"hot": "electron ./index.js --hot",
|
||||||
"webpack": "webpack-dev-server --hot --inline --config webpack.config.js",
|
"webpack": "webpack-dev-server --hot --inline --config webpack.config.js",
|
||||||
"postinstall": "npm run vendor",
|
|
||||||
"vendor": "oh-my-cdn",
|
|
||||||
"compile": "grunt compile",
|
"compile": "grunt compile",
|
||||||
"test": "PWD=$(pwd) NODE_ENV=test ava"
|
"test": "PWD=$(pwd) NODE_ENV=test ava",
|
||||||
|
"fix": "npm run lint --fix",
|
||||||
|
"lint": "eslint ./**/*.js"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"electron-version": "1.2.8"
|
"electron-version": "1.2.8"
|
||||||
@@ -44,15 +44,18 @@
|
|||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/BoostIO/Boostnote/issues"
|
"url": "https://github.com/BoostIO/Boostnote/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://b00st.io",
|
"homepage": "https://boostnote.io",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@rokt33r/markdown-it-math": "^4.0.1",
|
"@rokt33r/markdown-it-math": "^4.0.1",
|
||||||
"@rokt33r/season": "^5.3.0",
|
"@rokt33r/season": "^5.3.0",
|
||||||
"codemirror": "^5.19.0",
|
"codemirror": "^5.19.0",
|
||||||
|
"electron-config": "^0.2.1",
|
||||||
"electron-gh-releases": "^2.0.2",
|
"electron-gh-releases": "^2.0.2",
|
||||||
|
"flowchart.js": "^1.6.5",
|
||||||
"font-awesome": "^4.3.0",
|
"font-awesome": "^4.3.0",
|
||||||
"immutable": "^3.8.1",
|
"immutable": "^3.8.1",
|
||||||
"js-sequence-diagrams": "^1000000.0.6",
|
"js-sequence-diagrams": "^1000000.0.6",
|
||||||
|
"katex": "^0.6.0",
|
||||||
"lodash": "^4.11.1",
|
"lodash": "^4.11.1",
|
||||||
"markdown-it": "^6.0.1",
|
"markdown-it": "^6.0.1",
|
||||||
"markdown-it-checkbox": "^1.1.0",
|
"markdown-it-checkbox": "^1.1.0",
|
||||||
@@ -62,6 +65,11 @@
|
|||||||
"mixpanel": "^0.4.1",
|
"mixpanel": "^0.4.1",
|
||||||
"moment": "^2.10.3",
|
"moment": "^2.10.3",
|
||||||
"node-ipc": "^8.1.0",
|
"node-ipc": "^8.1.0",
|
||||||
|
"raphael": "^2.2.7",
|
||||||
|
"react": "^15.0.2",
|
||||||
|
"react-dom": "^15.0.2",
|
||||||
|
"react-redux": "^4.4.5",
|
||||||
|
"redux": "^3.5.2",
|
||||||
"sander": "^0.5.1",
|
"sander": "^0.5.1",
|
||||||
"superagent": "^1.2.0",
|
"superagent": "^1.2.0",
|
||||||
"superagent-promise": "^1.0.3"
|
"superagent-promise": "^1.0.3"
|
||||||
@@ -81,6 +89,9 @@
|
|||||||
"dom-storage": "^2.0.2",
|
"dom-storage": "^2.0.2",
|
||||||
"electron-packager": "^6.0.0",
|
"electron-packager": "^6.0.0",
|
||||||
"electron-prebuilt": "^1.2.8",
|
"electron-prebuilt": "^1.2.8",
|
||||||
|
"eslint": "^3.13.1",
|
||||||
|
"eslint-config-standard": "^6.2.1",
|
||||||
|
"eslint-config-standard-jsx": "^3.2.0",
|
||||||
"faker": "^3.1.0",
|
"faker": "^3.1.0",
|
||||||
"grunt": "^0.4.5",
|
"grunt": "^0.4.5",
|
||||||
"grunt-electron-installer": "^1.2.0",
|
"grunt-electron-installer": "^1.2.0",
|
||||||
@@ -88,7 +99,6 @@
|
|||||||
"jsdom": "^9.4.2",
|
"jsdom": "^9.4.2",
|
||||||
"merge-stream": "^1.0.0",
|
"merge-stream": "^1.0.0",
|
||||||
"nib": "^1.1.0",
|
"nib": "^1.1.0",
|
||||||
"oh-my-cdn": "^0.1.1",
|
|
||||||
"react": "^15.3.0",
|
"react": "^15.3.0",
|
||||||
"react-color": "^2.2.2",
|
"react-color": "^2.2.2",
|
||||||
"react-css-modules": "^3.7.6",
|
"react-css-modules": "^3.7.6",
|
||||||
@@ -107,14 +117,9 @@
|
|||||||
"grunt-electron-installer-debian": "^0.2.0"
|
"grunt-electron-installer-debian": "^0.2.0"
|
||||||
},
|
},
|
||||||
"optional": false,
|
"optional": false,
|
||||||
"standard": {
|
|
||||||
"globals": [
|
|
||||||
"localStorage"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"ava": {
|
"ava": {
|
||||||
"files": [
|
"files": [
|
||||||
"tests/**/*.js"
|
"tests/**/*-test.js"
|
||||||
],
|
],
|
||||||
"require": [
|
"require": [
|
||||||
"babel-register"
|
"babel-register"
|
||||||
|
|||||||
41
readme-ja.md
41
readme-ja.md
@@ -1,36 +1,28 @@
|
|||||||
# Boostnote
|
# Boostnote
|
||||||
|
|
||||||
> [Boostnote store](https://boostnote.paintory.com/)をはじめました!! :tada: そして、[Pateron](https://www.patreon.com/boostnote)からも私達を支援することができます!
|
> [Boostnote shop](https://boostnote.paintory.com/)をはじめました!! :tada:
|
||||||
|
そして、[Pateron](https://www.patreon.com/boostnote)からも私達を支援することができます!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
オープンソースノートアプリ
|
|
||||||
|
|
||||||
次の用務がある場合にはIssue trackerを利用してください。
|
**ロードマップ・リクエスト一覧は[こちら](https://github.com/BoostIO/Boostnote/wiki/List-of-the-requested-features)です!**
|
||||||
|
皆さんからのプルリクをお待ちしています!
|
||||||
|
|
||||||
|
以下のような場合には、Issue trackerを利用してください。
|
||||||
- Boostnoteに関して質問したい時
|
- Boostnoteに関して質問したい時
|
||||||
- Boostnoteや計画事項にフィードバックがしたい時
|
- Boostnoteや計画事項にフィードバックがしたい時
|
||||||
- Boostnoteにバグを報告したい時
|
- Boostnoteにバグを報告したい時
|
||||||
- Boostnoteに寄与したい時
|
|
||||||
|
|
||||||
## Goal
|
## Goal
|
||||||
|
|
||||||
単に何かを書くのが楽しくなってほしいです。 :grinning:
|
書くことが楽しくなって欲しいです。 :grinning:
|
||||||
|
|
||||||
- ターゲット OS : OSX, Windows, Linux(後々はモバイルも!)
|
- ターゲット OS : OSX, Windows, Linux(後々はモバイルも!)
|
||||||
- Cloud : Google drive, Dropbox, One drive, iCloud...
|
- Cloud : Google drive, Dropbox, One drive, iCloud...
|
||||||
- オープンソースで残ること!
|
- オープンソースで残ること!
|
||||||
|
|
||||||
## 印象を受けたアプリ/サービス
|
|
||||||
|
|
||||||
- Atom
|
|
||||||
- Quiver
|
|
||||||
- Evernote
|
|
||||||
- GitKraken
|
|
||||||
- GitBook
|
|
||||||
- Gist
|
|
||||||
- Gistbox
|
|
||||||
- Snippets Lab
|
|
||||||
|
|
||||||
|
|
||||||
## Using stack
|
## Using stack
|
||||||
|
|
||||||
@@ -50,12 +42,12 @@
|
|||||||
|
|
||||||
## Goods
|
## Goods
|
||||||
|
|
||||||
<img src="https://b00st.io/images/t3.png" width="250"/>
|
<img src="https://boostnote.io/images/t3.png" width="250"/>
|
||||||
<img src="https://b00st.io/images/t1.png" width="250"/>
|
<img src="https://boostnote.io/images/t1.png" width="250"/>
|
||||||
|
|
||||||
[Boostnote store](https://boostnote.paintory.com/)から幾つかのグッズを販売しています。
|
[Boostnote shop](https://boostnote.paintory.com/)から幾つかのグッズを販売しています。
|
||||||
|
|
||||||
商品は全世界何処でも届けることができます。このストアは[Paintory](https://paintory.com/)から提供されます。
|
商品は全世界どこへでも届ける事が出来ます!
|
||||||
|
|
||||||
## Donation
|
## Donation
|
||||||
|
|
||||||
@@ -63,11 +55,13 @@
|
|||||||
|
|
||||||
## Author & Maintainer
|
## Author & Maintainer
|
||||||
|
|
||||||
[Rokt33r(Dick Choi of MAISIN&CO.)](https://github.com/rokt33r)
|
- [Rokt33r](https://github.com/rokt33r)
|
||||||
|
- [sota1235](https://github.com/sota1235)
|
||||||
|
- [Kohei TAKATA](https://github.com/kohei-takata)
|
||||||
|
- [Kazu Yokomizo](https://github.com/kazup01)
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
- [Kazu Yokomizo](https://github.com/kazup01)
|
|
||||||
- [dojineko](https://github.com/dojineko)
|
- [dojineko](https://github.com/dojineko)
|
||||||
- [Romain Bazile](https://github.com/gromain)
|
- [Romain Bazile](https://github.com/gromain)
|
||||||
- [Bruno Paz](https://github.com/brpaz)
|
- [Bruno Paz](https://github.com/brpaz)
|
||||||
@@ -75,10 +69,9 @@
|
|||||||
- [Yoshihisa Mochihara](https://github.com/yosmoc)
|
- [Yoshihisa Mochihara](https://github.com/yosmoc)
|
||||||
- [Mike Resoli](https://github.com/mikeres0)
|
- [Mike Resoli](https://github.com/mikeres0)
|
||||||
- [tjado](https://github.com/tejado)
|
- [tjado](https://github.com/tejado)
|
||||||
- [sota1235](https://github.com/sota1235)
|
|
||||||
|
|
||||||
## Copyright & License
|
## Copyright & License
|
||||||
|
|
||||||
Copyright (C) 2016 MAISIN&CO.
|
Copyright (C) 2017 Maisin&Co.
|
||||||
|
|
||||||
[GPL v3](./LICENSE).
|
[GPL v3](./LICENSE).
|
||||||
|
|||||||
@@ -51,8 +51,8 @@
|
|||||||
|
|
||||||
## Goods
|
## Goods
|
||||||
|
|
||||||
<img src="https://b00st.io/images/t3.png" width="250"/>
|
<img src="https://boostnote.io/images/t3.png" width="250"/>
|
||||||
<img src="https://b00st.io/images/t1.png" width="250"/>
|
<img src="https://boostnote.io/images/t1.png" width="250"/>
|
||||||
|
|
||||||
[Boostnote store](https://boostnote.paintory.com/)에서 몇가지 상품들을 팔고있습니다.
|
[Boostnote store](https://boostnote.paintory.com/)에서 몇가지 상품들을 팔고있습니다.
|
||||||
|
|
||||||
|
|||||||
70
readme.md
70
readme.md
@@ -5,68 +5,32 @@
|
|||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
</h1>
|
</h1>
|
||||||
<h4 align="center">Note app built for developers. </h4>
|
<h4 align="center">Note-taking app for programmers. </h4>
|
||||||
<h5 align="center">macOS, Windows and Linux</h5>
|
<h5 align="center">macOS, Windows and Linux</h5>
|
||||||
<h5 align="center">Built with Electron, React + Redux, Webpack and CSSModules</h5>
|
<h5 align="center">Built with Electron, React + Redux, Webpack and CSSModules</h5>
|
||||||
<h1> </h1>
|
|
||||||
|
|
||||||
> We launched our [Boostnote store](https://boostnote.paintory.com/)!! :tada: Also, you can support us via [Patreon](https://www.patreon.com/boostnote) and [Open collective](https://opencollective.com/boostnote)!
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
[日本語](./readme-ja.md) - [한국어](./readme-ko.md)
|
[](https://travis-ci.org/BoostIO/Boostnote)
|
||||||
|
|
||||||
## Goals
|
|
||||||
* We want our users to enjoying writing _anything_. :grinning:
|
|
||||||
* Open sourced forever!
|
|
||||||
|
|
||||||
See upcoming features and bug fixes [here](https://github.com/BoostIO/Boostnote/issues/68)
|
|
||||||
## Feedback
|
|
||||||
Please use the [issue tracker](https://github.com/BoostIO/Boostnote/issues) for questions, bug reporting and contribution information.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
If you want to join our dev Slack group ask @rokt33r.
|
|
||||||
**[Build instructions](docs/build.md)**
|
|
||||||
|
|
||||||
[](https://github.com/feross/standard)
|
|
||||||
|
|
||||||
## Inspirations
|
|
||||||
- Atom
|
|
||||||
- Quiver
|
|
||||||
- Evernote
|
|
||||||
- GitKraken
|
|
||||||
- GitBook
|
|
||||||
- Gist
|
|
||||||
- Gistbox
|
|
||||||
- Snippets Lab
|
|
||||||
|
|
||||||
## Store
|
|
||||||
<img src="https://b00st.io/images/t3.png" width="250"/>
|
|
||||||
<img src="https://b00st.io/images/t1.png" width="250"/>
|
|
||||||
|
|
||||||
We're selling Boostnote goods on the [Boostnote store](https://boostnote.paintory.com/).
|
|
||||||
|
|
||||||
Products are shipped worldwide. Powered by [Paintory](https://paintory.com/)
|
|
||||||
|
|
||||||
## Donation
|
|
||||||
* [Patreon](https://www.patreon.com/boostnote)
|
|
||||||
* [Open collective](https://opencollective.com/boostnote)
|
|
||||||
|
|
||||||
## Author & Maintainer
|
## Author & Maintainer
|
||||||
[Rokt33r(Dick Choi of MAISIN&CO.)](https://github.com/rokt33r)
|
- [Rokt33r](https://github.com/rokt33r)
|
||||||
|
- [sota1235](https://github.com/sota1235)
|
||||||
|
- [Kohei TAKATA](https://github.com/kohei-takata)
|
||||||
|
- [Kazu Yokomizo](https://github.com/kazup01)
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
- [Kazu Yokomizo](https://github.com/kazup01)
|
[Great contributors](https://github.com/BoostIO/Boostnote/graphs/contributors) :tada:
|
||||||
- [dojineko](https://github.com/dojineko)
|
|
||||||
- [Romain Bazile](https://github.com/gromain)
|
|
||||||
- [Bruno Paz](https://github.com/brpaz)
|
|
||||||
- [Fabian Mueller](https://github.com/dotcs)
|
|
||||||
- [Yoshihisa Mochihara](https://github.com/yosmoc)
|
|
||||||
- [Mike Resoli](https://github.com/mikeres0)
|
|
||||||
- [tjado](https://github.com/tejado)
|
|
||||||
- [sota1235](https://github.com/sota1235)
|
|
||||||
|
|
||||||
## Copyright & License
|
|
||||||
Copyright (C) 2016 MAISIN&CO.
|
## More Information
|
||||||
|
* Website: http://boostnote.io/
|
||||||
|
* Roadmap(upcoming features and bug fixes): https://goo.gl/Mdu44q
|
||||||
|
* Boostnote Shop(Products are shipped to all over the world :+1:): https://boostnote.paintory.com/
|
||||||
|
* Donation: [Patreon](https://www.patreon.com/boostnote)
|
||||||
|
* Development: https://github.com/BoostIO/Boostnote/blob/master/docs/build.md
|
||||||
|
* Copyright (C) 2017 Maisin&Co.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
[GPL v3](./LICENSE).
|
[GPL v3](./LICENSE).
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ test.beforeEach((t) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
test.serial('Initialize All Storages', (t) => {
|
test.serial('Initialize All Storages', (t) => {
|
||||||
const { v1StorageData, legacyStorageData, emptyStorageData } = t.context
|
const { v1StorageData, legacyStorageData } = t.context
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
.then(function test () {
|
.then(function test () {
|
||||||
return init()
|
return init()
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ const TestDummy = require('../fixtures/TestDummy')
|
|||||||
const sander = require('sander')
|
const sander = require('sander')
|
||||||
const os = require('os')
|
const os = require('os')
|
||||||
const CSON = require('@rokt33r/season')
|
const CSON = require('@rokt33r/season')
|
||||||
const faker = require('faker')
|
|
||||||
|
|
||||||
const storagePath = path.join(os.tmpdir(), 'test/move-note')
|
const storagePath = path.join(os.tmpdir(), 'test/move-note')
|
||||||
const storagePath2 = path.join(os.tmpdir(), 'test/move-note2')
|
const storagePath2 = path.join(os.tmpdir(), 'test/move-note2')
|
||||||
Reference in New Issue
Block a user