1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-14 18:26:26 +00:00

Compare commits

...

67 Commits

Author SHA1 Message Date
sota1235
87f9589be3 v0.8.1 2017-01-14 17:09:45 +09:00
Sota Sugiura
96413b9851 Merge pull request #218 from asmsuechan/feature-vim-keymap
Adds vim keymap setting
2017-01-14 17:03:20 +09:00
Sota Sugiura
9699ef6319 Merge pull request #237 from sota1235/feature-add_folder_on_note_detail
Add folder selector on note detail.
2017-01-14 16:57:00 +09:00
sota1235
dd8f4d60f0 fix: do not ignore dist file 2017-01-14 16:49:38 +09:00
asmsuechan
372f2e7319 Adds a prop keyMap to NoteDetail and SnippetNoteDetail 2017-01-14 16:39:50 +09:00
sota1235
1957d87dd7 modify: fix font size - folder name 2017-01-14 15:52:11 +09:00
sota1235
a148d17ba1 modify: add folder selector on top of note detail component 2017-01-14 15:44:28 +09:00
sota1235
297553c240 modify: move updated string to the bottom of note detail component 2017-01-14 14:54:08 +09:00
sota1235
f0fcaa6be7 modify: move zoom-pointer to left on note detail component 2017-01-14 14:47:06 +09:00
sota1235
cfa40f3ec1 refactor: remove unused component 2017-01-14 14:40:33 +09:00
sota1235
832c43de88 refactor: remove unused option 2017-01-14 14:36:26 +09:00
sota1235
1665e18edb fix: remove unused npm command 2017-01-14 13:52:10 +09:00
Sota Sugiura
fd1717046b Merge pull request #232 from BoostIO/simplified
I simplified.
2017-01-14 13:36:47 +09:00
sota1235
7fe7c555bc modify: add badge for TravisCI 2017-01-14 13:30:42 +09:00
Sota Sugiura
411a7a8e80 Merge pull request #233 from BoostIO/update-more-information
Update more information.
2017-01-14 13:27:38 +09:00
sota1235
196f5a7bf7 modify: add license section 2017-01-14 13:24:25 +09:00
Kazu Yokomizo
3fa326121a Update more information. 2017-01-12 20:35:53 +09:00
Kazu Yokomizo
cce69bea3a I simplified. 2017-01-12 20:29:20 +09:00
Sota Sugiura
f70cf7845d Merge pull request #231 from sota1235/master
[Refactor] Use ESLint instead of StandarJS and add settings for TravisCI
2017-01-12 00:48:05 +09:00
Sota Sugiura
bd0a326128 Merge pull request #20 from sota1235/feature-settings_for_travis
Settings for TravisCI
2017-01-12 00:34:44 +09:00
sota1235
897d99e043 modify: add badge of TravisCI on README 2017-01-12 00:28:10 +09:00
sota1235
b0f288e103 fix: ignore invalid tests 2017-01-12 00:23:44 +09:00
sota1235
7d26d46c7b modify: execute test on TravisCI 2017-01-12 00:01:12 +09:00
sota1235
5c7804fc40 modify: fix some codes pointed by eslint 2017-01-11 23:59:48 +09:00
sota1235
836f3af1ab add: files for using eslint 2017-01-11 23:52:22 +09:00
sota1235
67b89d4fe7 modfiy: install npm libraries for using eslint 2017-01-11 23:49:59 +09:00
sota1235
bc2d9d0fe2 modify: add settings for travisci 2017-01-11 23:38:43 +09:00
sota1235
79f33b9405 refactor: fix some coding style pointed by standard js 2017-01-11 23:35:02 +09:00
sota1235
ed9ddee5f1 refactor: fix by standardjs 2017-01-11 23:17:32 +09:00
sota1235
0d004b2f0a add: npm script for fix codes with standardjs 2017-01-11 23:13:50 +09:00
sota1235
f41ff77d76 add: npm command for checking coding style 2017-01-11 23:12:24 +09:00
sota1235
ae97a76d2e add: for using TravisCI 2017-01-11 23:10:09 +09:00
Sota Sugiura
3ca18c04c6 Merge pull request #221 from asmsuechan/remember-window-size
refs #207 Keeps window size
2017-01-11 23:03:01 +09:00
asmsuechan
2b03e6e956 refs #207 Fixes lengthy assignment 2017-01-11 22:56:12 +09:00
Sota Sugiura
010793a478 Merge pull request #228 from asmsuechan/iss-224
refs #224 Fixes the style of folder-list
2017-01-11 22:30:03 +09:00
asmsuechan
b136512ece refs #224 Fixes the style of folder-list 2017-01-11 10:21:53 +09:00
asmsuechan
9179c199fe refs #207 Keeps window size 2017-01-09 11:37:05 +09:00
Sota Sugiura
cfa4dfa817 Merge pull request #222 from asmsuechan/fix-npm-install
Fixes npm task bacause oh-my-cdn is removed
2017-01-09 11:35:13 +09:00
asmsuechan
6a73a3af97 Fixes npm task bacause oh-my-cdn is removed 2017-01-09 11:27:55 +09:00
Sota Sugiura
923c24fa6c Merge pull request #214 from asmsuechan/master
Fixes the theme of code block by codemirror
2017-01-08 23:53:10 +09:00
Sota Sugiura
4b1c8a3238 Merge pull request #206 from sota1235/hotfix-replace_old_url
Replace old url.
2017-01-08 23:46:54 +09:00
sota1235
76508fbc3b refactor: remove oh-my-cdn 2017-01-08 23:45:34 +09:00
sota1235
2bfda95ed8 modify: get flowchart.js from npm 2017-01-08 23:44:49 +09:00
Sota Sugiura
6e5082a470 Merge pull request #220 from BoostIO/Fixed-the-features-url(ja)
Fixed the features url(ja).
2017-01-08 19:47:32 +09:00
Kazu Yokomizo
a6cec44fc4 Fixed the features url(ja). 2017-01-08 19:45:45 +09:00
Sota Sugiura
600fab4f23 Merge pull request #219 from BoostIO/Fixed-the-features-url
Fixed the features url.
2017-01-08 19:45:26 +09:00
Kazu Yokomizo
12377b8caf Fixed the features url. 2017-01-08 19:44:46 +09:00
Sota Sugiura
250c6e488d Merge pull request #211 from BoostIO/Update-Author-&-Maintainer
Update Author & Maintainer
2017-01-08 19:42:35 +09:00
Kazu Yokomizo
3a9b57adae Merge branch 'master' into Update-Author-&-Maintainer 2017-01-08 19:41:31 +09:00
Sota Sugiura
74415956ac Merge pull request #213 from BoostIO/Updated-of-Japanese-readme
Updated of Japanese readme.
2017-01-08 19:36:08 +09:00
Sota Sugiura
33d7ed25a5 Merge pull request #212 from BoostIO/Fixed-link-and-typo
Fixed link and typo.
2017-01-08 19:33:05 +09:00
asmsuechan
df2de5c081 Adds note of caution next to keymap change select box 2017-01-08 18:16:32 +09:00
asmsuechan
7f4c58a84a Adds vim keymap setting 2017-01-08 17:52:52 +09:00
asmsuechan
7437b26e3c Fixes in order to handle default setting 2017-01-07 23:51:37 +09:00
asmsuechan
ee6d41859f Fixes the theme of code block by codemirror 2017-01-07 22:48:37 +09:00
Kazu Yokomizo
b368c3b5d8 Updated of Japanese readme.
Link, typo and list of Author & Maintainer
2017-01-07 19:33:31 +09:00
Kazu Yokomizo
b1ae2b0b6f Fixed link and typo. 2017-01-07 19:26:36 +09:00
Kazu Yokomizo
27a6d53c7f Update Author & Maintainer
add sota1235, Kohei TAKATA and Kazu Yokomizo.
2017-01-07 18:07:23 +09:00
sota1235
4caf3a81be fix: update the url of official homepage 2017-01-05 00:08:18 +09:00
sota1235
ab578f768f refactor: remove unused file 2017-01-05 00:06:03 +09:00
Sota Sugiura
e4212e796a Merge pull request #204 from sota1235/master
Use npm instead of using oh-my-cdn
2017-01-04 23:55:57 +09:00
Sota Sugiura
95b1ff9b41 Merge pull request #19 from sota1235/feature-remove_oh_my_cdn
Remove oh-my-cdn
2017-01-04 23:53:50 +09:00
sota1235
684d2c411e fix: path for react-dom.min.js 2017-01-04 23:51:29 +09:00
sota1235
42710cfee5 refactor: remove libraries in package.json 2017-01-04 23:46:06 +09:00
sota1235
277004fd9b refactor: replace with files in node_modules 2017-01-04 23:30:15 +09:00
sota1235
14f79c4c21 modify: install libraries with using npm, not using oh-my-cdn 2017-01-04 23:15:32 +09:00
Sota Sugiura
f88cd80dca Merge pull request #198 from sota1235/master
v0.8.0
2017-01-03 18:14:15 +09:00
74 changed files with 291 additions and 315 deletions

3
.eslintignore Normal file
View File

@@ -0,0 +1,3 @@
node_modules/
compiled/
dist/

6
.eslintrc Normal file
View File

@@ -0,0 +1,6 @@
{
"extends": ["standard", "standard-jsx"],
"rules": {
"no-useless-escape": 0
}
}

6
.travis.yml Normal file
View File

@@ -0,0 +1,6 @@
language: node_js
node_js:
- 'stable'
- 'lts/*'
script: npm run lint && npm run test

View File

@@ -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,

View File

@@ -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}

View File

@@ -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`
} }

View File

@@ -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)

View File

@@ -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)

View File

@@ -12,7 +12,7 @@ export default class ProfileImage extends React.Component {
className={className} className={className}
width={this.props.size} width={this.props.size}
height={this.props.size} height={this.props.size}
src={src}/> src={src} />
) )
} }
} }

View File

@@ -17,17 +17,17 @@ const SideNavFilter = ({
isFolded, isHomeActive, handleAllNotesButtonClick, isFolded, isHomeActive, handleAllNotesButtonClick,
isStarredActive, handleStarredButtonClick isStarredActive, handleStarredButtonClick
}) => ( }) => (
<div styleName={ isFolded ? 'menu--folded' : 'menu' }> <div styleName={isFolded ? 'menu--folded' : 'menu'}>
<button styleName={isHomeActive ? 'menu-button--active' : 'menu-button'} <button styleName={isHomeActive ? 'menu-button--active' : 'menu-button'}
onClick={handleAllNotesButtonClick} onClick={handleAllNotesButtonClick}
> >
<i className='fa fa-book fa-fw'/> <i className='fa fa-book fa-fw' />
<span styleName='menu-button-label'>All Notes</span> <span styleName='menu-button-label'>All Notes</span>
</button> </button>
<button styleName={isStarredActive ? 'menu-button--active' : 'menu-button'} <button styleName={isStarredActive ? 'menu-button--active' : 'menu-button'}
onClick={handleStarredButtonClick} onClick={handleStarredButtonClick}
> >
<i className='fa fa-star fa-fw'/> <i className='fa fa-star fa-fw' />
<span styleName='menu-button-label'>Starred</span> <span styleName='menu-button-label'>Starred</span>
</button> </button>
</div> </div>
@@ -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)

View File

@@ -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'
@@ -117,7 +117,7 @@ class SnippetTab extends React.Component {
<button styleName='deleteButton' <button styleName='deleteButton'
onClick={(e) => this.handleDeleteButtonClick(e)} onClick={(e) => this.handleDeleteButtonClick(e)}
> >
<i className='fa fa-times'/> <i className='fa fa-times' />
</button> </button>
} }
</div> </div>

View File

@@ -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)

View File

@@ -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

View File

@@ -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}
/> />

View File

@@ -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()

View File

@@ -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'

View File

@@ -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'
@@ -351,7 +350,7 @@ function refreshData () {
ReactDOM.render(( ReactDOM.render((
<Provider store={store}> <Provider store={store}>
<Finder/> <Finder />
</Provider> </Provider>
), document.getElementById('content'), function () { ), document.getElementById('content'), function () {
refreshData() refreshData()

View File

@@ -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
}

View File

@@ -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']})

View File

@@ -1,17 +1,17 @@
/** /**
* @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'.
* @param {mixed} * @param {mixed}
* @return {string} * @return {string}
*/ */
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')

View File

@@ -58,7 +58,7 @@ md.use(math, {
}) })
md.use(require('markdown-it-footnote')) md.use(require('markdown-it-footnote'))
// Override task item // Override task item
md.block.ruler.at('paragraph', function (state, startLine/*, endLine*/) { md.block.ruler.at('paragraph', function (state, startLine/*, endLine */) {
let content, terminate, i, l, token let content, terminate, i, l, token
let nextLine = startLine + 1 let nextLine = startLine + 1
let terminatorRules = state.md.block.ruler.getRules('paragraph') let terminatorRules = state.md.block.ruler.getRules('paragraph')

View File

@@ -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>
} }

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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>
) )

View File

@@ -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

View File

@@ -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,11 +545,10 @@ 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)}
> >
<i className='fa fa-ellipsis-v'/> <i className='fa fa-ellipsis-v' />
</button> </button>
</div> </div>
</div> </div>
@@ -563,7 +573,7 @@ class SnippetNoteDetail extends React.Component {
<button styleName='plusButton' <button styleName='plusButton'
onClick={(e) => this.handleTabPlusButtonClick(e)} onClick={(e) => this.handleTabPlusButtonClick(e)}
> >
<i className='fa fa-plus'/> <i className='fa fa-plus' />
</button> </button>
</div> </div>
{viewList} {viewList}
@@ -577,24 +587,25 @@ class SnippetNoteDetail extends React.Component {
? 'Select Syntax...' ? 'Select Syntax...'
: this.state.note.snippets[this.state.snippetIndex].mode : this.state.note.snippets[this.state.snippetIndex].mode
}&nbsp; }&nbsp;
<i className='fa fa-caret-down'/> <i className='fa fa-caret-down' />
</button> </button>
<button <button
onClick={(e) => this.handleIndentTypeButtonClick(e)} onClick={(e) => this.handleIndentTypeButtonClick(e)}
> >
Indent: {config.editor.indentType}&nbsp; Indent: {config.editor.indentType}&nbsp;
<i className='fa fa-caret-down'/> <i className='fa fa-caret-down' />
</button> </button>
<button <button
onClick={(e) => this.handleIndentSizeButtonClick(e)} onClick={(e) => this.handleIndentSizeButtonClick(e)}
> >
size: {config.editor.indentSize}&nbsp; size: {config.editor.indentSize}&nbsp;
<i className='fa fa-caret-down'/> <i className='fa fa-caret-down' />
</button> </button>
</div> </div>
<StatusBar <StatusBar
{..._.pick(this.props, ['config', 'location', 'dispatch'])} {..._.pick(this.props, ['config', 'location', 'dispatch'])}
date={note.updatedAt}
/> />
</div> </div>
) )

View File

@@ -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

View File

@@ -1,5 +1,4 @@
.root .root
position absolute
left 7px left 7px
top 0 top 0
padding 0 padding 0

View File

@@ -8,7 +8,7 @@ class TagSelect extends React.Component {
super(props) super(props)
this.state = { this.state = {
newTag: '', newTag: ''
} }
} }
@@ -111,7 +111,7 @@ class TagSelect extends React.Component {
<button styleName='tag-removeButton' <button styleName='tag-removeButton'
onClick={(e) => this.handleTagRemoveButtonClick(tag)(e)} onClick={(e) => this.handleTagRemoveButtonClick(tag)(e)}
> >
<i className='fa fa-times fa-fw tag-removeButton-icon'/> <i className='fa fa-times fa-fw tag-removeButton-icon' />
</button> </button>
</span> </span>
) )

View File

@@ -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

View File

@@ -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
}) })
}) })
} }
@@ -169,7 +169,7 @@ class Main extends React.Component {
onMouseDown={(e) => this.handleLeftSlideMouseDown(e)} onMouseDown={(e) => this.handleLeftSlideMouseDown(e)}
draggable='false' draggable='false'
> >
<div styleName='slider-hitbox'/> <div styleName='slider-hitbox' />
</div> </div>
} }
<div styleName={config.isSideNavFolded ? 'body--expanded' : 'body'} <div styleName={config.isSideNavFolded ? 'body--expanded' : 'body'}

View File

@@ -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}`
@@ -376,7 +376,7 @@ class NoteList extends React.Component {
} }
onClick={(e) => this.handleListStyleButtonClick(e, 'DEFAULT')} onClick={(e) => this.handleListStyleButtonClick(e, 'DEFAULT')}
> >
<i className='fa fa-th-large'/> <i className='fa fa-th-large' />
</button> </button>
<button styleName={config.listStyle === 'SMALL' <button styleName={config.listStyle === 'SMALL'
? 'control-button--active' ? 'control-button--active'
@@ -384,7 +384,7 @@ class NoteList extends React.Component {
} }
onClick={(e) => this.handleListStyleButtonClick(e, 'SMALL')} onClick={(e) => this.handleListStyleButtonClick(e, 'SMALL')}
> >
<i className='fa fa-list-ul'/> <i className='fa fa-list-ul' />
</button> </button>
</div> </div>
<div styleName='list' <div styleName='list'

View File

@@ -181,7 +181,7 @@ class StorageItem extends React.Component {
<button styleName='header-addFolderButton' <button styleName='header-addFolderButton'
onClick={(e) => this.handleAddFolderButtonClick(e)} onClick={(e) => this.handleAddFolderButtonClick(e)}
> >
<i className='fa fa-plus'/> <i className='fa fa-plus' />
</button> </button>
} }

View File

@@ -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) {
@@ -65,7 +62,7 @@ class SideNav extends React.Component {
<button styleName='top-menu' <button styleName='top-menu'
onClick={(e) => this.handleMenuButtonClick(e)} onClick={(e) => this.handleMenuButtonClick(e)}
> >
<i className='fa fa-navicon fa-fw'/> <i className='fa fa-navicon fa-fw' />
<span styleName='top-menu-label'>Menu</span> <span styleName='top-menu-label'>Menu</span>
</button> </button>
</div> </div>
@@ -87,8 +84,8 @@ class SideNav extends React.Component {
onClick={(e) => this.handleToggleButtonClick(e)} onClick={(e) => this.handleToggleButtonClick(e)}
> >
{isFolded {isFolded
? <i className='fa fa-angle-double-right'/> ? <i className='fa fa-angle-double-right' />
: <i className='fa fa-angle-double-left'/> : <i className='fa fa-angle-double-left' />
} }
</button> </button>
</div> </div>

View File

@@ -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' />&nbsp; <i className='fa fa-search-plus' />&nbsp;
{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 = {

View File

@@ -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,
@@ -262,8 +260,8 @@ class TopBar extends React.Component {
<span styleName='control-search-optionList-item-folder-surfix'>in {storage.name}</span> <span styleName='control-search-optionList-item-folder-surfix'>in {storage.name}</span>
</div> </div>
{note.type === 'SNIPPET_NOTE' {note.type === 'SNIPPET_NOTE'
? <i styleName='control-search-optionList-item-type' className='fa fa-code'/> ? <i styleName='control-search-optionList-item-type' className='fa fa-code' />
: <i styleName='control-search-optionList-item-type' className='fa fa-file-text-o'/> : <i styleName='control-search-optionList-item-type' className='fa fa-file-text-o' />
}&nbsp; }&nbsp;
{note.title} {note.title}
</div> </div>
@@ -276,7 +274,7 @@ class TopBar extends React.Component {
> >
<div styleName='control'> <div styleName='control'>
<div styleName='control-search'> <div styleName='control-search'>
<i styleName='control-search-icon' className='fa fa-search fa-fw'/> <i styleName='control-search-icon' className='fa fa-search fa-fw' />
<div styleName='control-search-input' <div styleName='control-search-input'
onFocus={(e) => this.handleSearchFocus(e)} onFocus={(e) => this.handleSearchFocus(e)}
onBlur={(e) => this.handleSearchBlur(e)} onBlur={(e) => this.handleSearchBlur(e)}
@@ -303,14 +301,14 @@ class TopBar extends React.Component {
<button styleName='left-search-clearButton' <button styleName='left-search-clearButton'
onClick={(e) => this.handleSearchClearButton(e)} onClick={(e) => this.handleSearchClearButton(e)}
> >
<i className='fa fa-times'/> <i className='fa fa-times' />
</button> </button>
} }
</div> </div>
<button styleName='control-newPostButton' <button styleName='control-newPostButton'
onClick={(e) => this.handleNewPostButtonClick(e)}> onClick={(e) => this.handleNewPostButtonClick(e)}>
<i className='fa fa-plus'/> <i className='fa fa-plus' />
<span styleName='control-newPostButton-tooltip'> <span styleName='control-newPostButton-tooltip'>
Make a Note {OSX ? '⌘' : '^'} + n Make a Note {OSX ? '⌘' : '^'} + n
</span> </span>

View File

@@ -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
} }
} }

View File

@@ -20,10 +20,10 @@ class ModalBase extends React.Component {
render () { render () {
return ( return (
<div className={'ModalBase' + (this.state.isHidden ? ' hide' : '')}> <div className={'ModalBase' + (this.state.isHidden ? ' hide' : '')}>
<div onClick={(e) => this.close(e)} className='modalBack'/> <div onClick={(e) => this.close(e)} className='modalBack' />
{this.state.component == null ? null : ( {this.state.component == null ? null : (
<Provider store={store}> <Provider store={store}>
<this.state.component {...this.state.componentProps} close={this.close}/> <this.state.component {...this.state.componentProps} close={this.close} />
</Provider> </Provider>
)} )}
</div> </div>
@@ -33,7 +33,7 @@ class ModalBase extends React.Component {
let el = document.createElement('div') let el = document.createElement('div')
document.body.appendChild(el) document.body.appendChild(el)
let modalBase = ReactDOM.render(<ModalBase/>, el) let modalBase = ReactDOM.render(<ModalBase />, el)
export function openModal (component, props) { export function openModal (component, props) {
if (modalBase == null) { return } if (modalBase == null) { return }

View File

@@ -33,13 +33,13 @@ export default class DeleteArticleModal extends React.Component {
render () { render () {
return ( return (
<div className='DeleteArticleModal modal'> <div className='DeleteArticleModal modal'>
<div className='title'><i className='fa fa-fw fa-trash'/> Delete an article.</div> <div className='title'><i className='fa fa-fw fa-trash' /> Delete an article.</div>
<div className='message'>Do you really want to delete?</div> <div className='message'>Do you really want to delete?</div>
<div className='control'> <div className='control'>
<button ref='no' onClick={(e) => this.handleNoButtonClick(e)}><i className='fa fa-fw fa-close'/> No</button> <button ref='no' onClick={(e) => this.handleNoButtonClick(e)}><i className='fa fa-fw fa-close' /> No</button>
<button ref='yes' onClick={(e) => this.handleYesButtonClick(e)} className='danger'><i className='fa fa-fw fa-check'/> Yes</button> <button ref='yes' onClick={(e) => this.handleYesButtonClick(e)} className='danger'><i className='fa fa-fw fa-check' /> Yes</button>
</div> </div>
</div> </div>
) )

View File

@@ -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')
@@ -197,7 +196,7 @@ class InitModal extends React.Component {
render () { render () {
if (this.state.isLoading) { if (this.state.isLoading) {
return <div styleName='root--loading'> return <div styleName='root--loading'>
<i styleName='spinner' className='fa fa-spin fa-spinner'/> <i styleName='spinner' className='fa fa-spin fa-spinner' />
<div styleName='loadingMessage'>Preparing initialization...</div> <div styleName='loadingMessage'>Preparing initialization...</div>
</div> </div>
} }
@@ -235,7 +234,7 @@ class InitModal extends React.Component {
{this.state.legacyStorageExists && {this.state.legacyStorageExists &&
<div styleName='body-migration'> <div styleName='body-migration'>
<label><input type='checkbox' checked={this.state.migrationRequested} onChange={(e) => this.handleMigrationRequestedChange(e)}/> Migrate old data from the legacy app v0.5</label> <label><input type='checkbox' checked={this.state.migrationRequested} onChange={(e) => this.handleMigrationRequestedChange(e)} /> Migrate old data from the legacy app v0.5</label>
</div> </div>
} }
@@ -247,7 +246,7 @@ class InitModal extends React.Component {
> >
{this.state.isSending {this.state.isSending
? <span> ? <span>
<i className='fa fa-spin fa-spinner'/> Loading... <i className='fa fa-spin fa-spinner' /> Loading...
</span> </span>
: 'Let\'s Go!' : 'Let\'s Go!'
} }

View File

@@ -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'
@@ -114,8 +114,8 @@ class NewNoteModal extends React.Component {
> >
<i styleName='control-button-icon' <i styleName='control-button-icon'
className='fa fa-file-text-o' className='fa fa-file-text-o'
/><br/> /><br />
<span styleName='control-button-label'>Markdown Note</span><br/> <span styleName='control-button-label'>Markdown Note</span><br />
<span styleName='control-button-description'>It is good for any type of documents. Check List, Code block and Latex block are available.</span> <span styleName='control-button-description'>It is good for any type of documents. Check List, Code block and Latex block are available.</span>
</button> </button>
@@ -126,14 +126,14 @@ class NewNoteModal extends React.Component {
> >
<i styleName='control-button-icon' <i styleName='control-button-icon'
className='fa fa-code' className='fa fa-code'
/><br/> /><br />
<span styleName='control-button-label'>Snippet Note</span><br/> <span styleName='control-button-label'>Snippet Note</span><br />
<span styleName='control-button-description'>This format is specialized on managing snippets like Gist. Multiple snippets can be grouped as a note. <span styleName='control-button-description'>This format is specialized on managing snippets like Gist. Multiple snippets can be grouped as a note.
</span> </span>
</button> </button>
</div> </div>
<div styleName='description'><i className='fa fa-arrows-h'/> Tab to switch format</div> <div styleName='description'><i className='fa fa-arrows-h' /> Tab to switch format</div>
</div> </div>
) )

View File

@@ -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

View File

@@ -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)

View File

@@ -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'
@@ -26,7 +26,7 @@ class InfoTab extends React.Component {
<div styleName='top'> <div styleName='top'>
<div styleName='icon-space'> <div styleName='icon-space'>
<img styleName='icon' src='../resources/app.png' width='92' height='92'/> <img styleName='icon' src='../resources/app.png' width='92' height='92' />
<div styleName='icon-right'> <div styleName='icon-right'>
<div styleName='appId'>Boostnote {appVersion}</div> <div styleName='appId'>Boostnote {appVersion}</div>
<div styleName='description'> <div styleName='description'>
@@ -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&nbsp; <div styleName='madeBy'>Made by&nbsp;
<a href='http://maisin.co/' <a href='http://maisin.co/'
onClick={(e) => this.handleLinkClick(e)} onClick={(e) => this.handleLinkClick(e)}

View File

@@ -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'
@@ -137,7 +140,7 @@ class UnstyledFolderItem extends React.Component {
</div> </div>
: null : null
} }
<i className='fa fa-square'/> <i className='fa fa-square' />
</button> </button>
<input styleName='folderList-item-left-nameInput' <input styleName='folderList-item-left-nameInput'
value={this.state.folder.name} value={this.state.folder.name}
@@ -368,17 +371,17 @@ class StorageItem extends React.Component {
: <div styleName='header-label' : <div styleName='header-label'
onClick={(e) => this.handleLabelClick(e)} onClick={(e) => this.handleLabelClick(e)}
> >
<i className='fa fa-folder-open'/>&nbsp; <i className='fa fa-folder-open' />&nbsp;
{storage.name}&nbsp; {storage.name}&nbsp;
<span styleName='header-label-path'>({storage.path})</span>&nbsp; <span styleName='header-label-path'>({storage.path})</span>&nbsp;
<i styleName='header-label-editButton' className='fa fa-pencil'/> <i styleName='header-label-editButton' className='fa fa-pencil' />
</div> </div>
} }
<div styleName='header-control'> <div styleName='header-control'>
<button styleName='header-control-button' <button styleName='header-control-button'
onClick={(e) => this.handleNewFolderButtonClick(e)} onClick={(e) => this.handleNewFolderButtonClick(e)}
> >
<i className='fa fa-plus'/> <i className='fa fa-plus' />
<span styleName='header-control-button-tooltip' <span styleName='header-control-button-tooltip'
style={{left: -20}} style={{left: -20}}
>Add Folder</span> >Add Folder</span>
@@ -386,7 +389,7 @@ class StorageItem extends React.Component {
<button styleName='header-control-button' <button styleName='header-control-button'
onClick={(e) => this.handleExternalButtonClick(e)} onClick={(e) => this.handleExternalButtonClick(e)}
> >
<i className='fa fa-external-link'/> <i className='fa fa-external-link' />
<span styleName='header-control-button-tooltip' <span styleName='header-control-button-tooltip'
style={{left: -50}} style={{left: -50}}
>Open Storage folder</span> >Open Storage folder</span>
@@ -394,7 +397,7 @@ class StorageItem extends React.Component {
<button styleName='header-control-button' <button styleName='header-control-button'
onClick={(e) => this.handleUnlinkButtonClick(e)} onClick={(e) => this.handleUnlinkButtonClick(e)}
> >
<i className='fa fa-unlink'/> <i className='fa fa-unlink' />
<span styleName='header-control-button-tooltip' <span styleName='header-control-button-tooltip'
style={{left: -10}} style={{left: -10}}
>Unlink</span> >Unlink</span>

View File

@@ -72,7 +72,7 @@ class StoragesTab extends React.Component {
<button styleName='list-control-addStorageButton' <button styleName='list-control-addStorageButton'
onClick={(e) => this.handleAddStorageButton(e)} onClick={(e) => this.handleAddStorageButton(e)}
> >
<i className='fa fa-plus'/> Add Storage <i className='fa fa-plus' /> Add Storage
</button> </button>
</div> </div>
</div> </div>

View File

@@ -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'>

View File

@@ -43,7 +43,7 @@ class Preferences extends React.Component {
switch (this.state.currentTab) { switch (this.state.currentTab) {
case 'INFO': case 'INFO':
return <InfoTab/> return <InfoTab />
case 'HOTKEY': case 'HOTKEY':
return ( return (
<HotkeyTab <HotkeyTab
@@ -86,9 +86,9 @@ class Preferences extends React.Component {
let tabs = [ let tabs = [
{target: 'STORAGES', label: 'Storages'}, {target: 'STORAGES', label: 'Storages'},
{target: 'HOTKEY', label: 'Hotkey'}, {target: 'HOTKEY', label: 'Hotkey'},
{target: 'UI', label: 'UI'}, {target: 'UI', label: 'UI'},
{target: 'INFO', label: 'Info'} {target: 'INFO', label: 'Info'}
] ]
let navButtons = tabs.map((tab) => { let navButtons = tabs.map((tab) => {

View File

@@ -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

View File

@@ -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':

View File

@@ -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

View File

@@ -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>

View File

@@ -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,9 +10,8 @@ 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) {
if (process.platform === 'win32') { if (process.platform === 'win32') {
mainWindow.minimize() mainWindow.minimize()
@@ -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)
} }

View File

@@ -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',

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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"
}
}

View File

@@ -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"

View File

@@ -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)からも私達を支援することができます!
![Boostnote app screenshot](./resources/repository/top.png) ![Boostnote app screenshot](./resources/repository/top.png)
オープンソースノートアプリ
次の用務がある場合には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).

View File

@@ -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/)에서 몇가지 상품들을 팔고있습니다.

View File

@@ -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)!
![Boostnote app screenshot](./resources/repository/top.png) ![Boostnote app screenshot](./resources/repository/top.png)
[日本語](./readme-ja.md) - [한국어](./readme-ko.md) [![Build Status](https://travis-ci.org/BoostIO/Boostnote.svg?branch=master)](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)**
[![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](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).

View File

@@ -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()

View File

@@ -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')