diff --git a/browser/components/FolderMark.js b/browser/components/FolderMark.js deleted file mode 100644 index dd6708b9..00000000 --- a/browser/components/FolderMark.js +++ /dev/null @@ -1,52 +0,0 @@ -import React, { PropTypes } from 'react' - -const BLUE = '#3460C7' -const LIGHTBLUE = '#2BA5F7' -const ORANGE = '#FF8E00' -const YELLOW = '#E8D252' -const GREEN = '#3FD941' -const DARKGREEN = '#1FAD85' -const RED = '#E10051' -const PURPLE = '#B013A4' - -function getColorByIndex (index) { - switch (index % 8) { - case 0: - return RED - case 1: - return ORANGE - case 2: - return YELLOW - case 3: - return GREEN - case 4: - return DARKGREEN - case 5: - return LIGHTBLUE - case 6: - return BLUE - case 7: - return PURPLE - default: - return DARKGREEN - } -} - -export default class FolderMark extends React.Component { - render () { - let color = getColorByIndex(this.props.color) - let className = 'FolderMark fa fa-square fa-fw' - if (this.props.className != null) { - className += ' active' - } - - return ( - - ) - } -} - -FolderMark.propTypes = { - color: PropTypes.number, - className: PropTypes.string -} diff --git a/browser/lib/Repository.js b/browser/lib/Repository.js index 9c583b4b..b23e497d 100644 --- a/browser/lib/Repository.js +++ b/browser/lib/Repository.js @@ -87,7 +87,6 @@ let repositories = [] * ##### `note.cson` * * ```cson - * name: String * tags: [String] // tags * folder: String // hash key of folder * mode: String // syntax mode @@ -151,7 +150,7 @@ class Repository { let noteNames = fs.readdirSync(dataPath) let notes = noteNames .map((noteName) => { - let notePath = path.join(dataPath, noteNames) + let notePath = path.join(dataPath, noteName) return new Promise(function (resolve, reject) { CSON.readFile(notePath, function (err, obj) { @@ -218,7 +217,9 @@ class Repository { this.isMount = true // Put in `repositories` array if it isn't in. - let targetIndex = _.findIndex(repositories, {cached: {key: this.cached.key}}) + let targetIndex = _.findIndex(repositories, (repo) => { + this.cached.key === repo.cached.key + }) if (targetIndex < 0) { repositories.push(this) } @@ -241,7 +242,9 @@ class Repository { this.isMount = false // Discard from `repositories` array if it is in. - let targetIndex = _.findIndex(repositories, {cached: {key: this.cached.key}}) + let targetIndex = _.findIndex(repositories, (repo) => { + this.cached.key === repo.cached.key + }) if (targetIndex > -1) { repositories.splice(targetIndex, 1) } @@ -586,6 +589,7 @@ class Repository { } static saveAllCached (allCached) { + console.info('cach updated > ', allCached) localStorage.setItem('repositories', JSON.stringify(allCached)) } diff --git a/browser/main/Main.js b/browser/main/Main.js index ee8f12e6..c3489f87 100644 --- a/browser/main/Main.js +++ b/browser/main/Main.js @@ -84,18 +84,35 @@ class Main extends React.Component { - +
- +
this.handleSlideMouseDown(e)} draggable='false' - /> + > +
+
{ + return sum.concat(repository.notes + .map((note) => { + note._repository = repository + return note + })) + }, []) + } + + let repository = _.find(repositories, {key: repositoryKey}) + if (repository == null) return [] + + let folder = _.find(repository.folders, {key: folderKey}) + if (folder == null) { + return repository.notes + .map((note) => { + note._repository = repository + return note + }) + } + + return repository.notes + .filter((note) => note.folder === folderKey) + .map((note) => { + note._repository = repository + return note + }) + } + + handleNoteClick (key) { + return (e) => { + console.log(key) + } + } + render () { - let articleElements = [] + let notes = this.getNotes() + let noteElements = notes.map((note) => { + let folder = _.find(note._repository.folders, {key: note.folder}) + let tagElements = note.tags.map((tag) => { + return {tag} + }) + let key = `${note._repository.key}/${note.key}` + + return ( +
this.handleNoteClick(key)(e)} + > +
+ +
+ {folder.name} +
+ +
+ {moment(note.createdAt).fromNow()} +
+ +
+ +
{note.title}
+ +
{tagElements.length > 0 ? tagElements : Not tagged yet}
+ +
+ ) + }) return (
this.handleNoteListKeyDown(e)} style={this.props.style} > - {articleElements} + {noteElements}
) } } +NoteList.contextTypes = { + router: PropTypes.shape([]) +} NoteList.propTypes = { dispatch: PropTypes.func, diff --git a/browser/main/SideNav/FolderItem.styl b/browser/main/SideNav/FolderItem.styl index bf64366b..e138c160 100644 --- a/browser/main/SideNav/FolderItem.styl +++ b/browser/main/SideNav/FolderItem.styl @@ -61,6 +61,8 @@ border-radius 5px border $ui-border outline none + background-color white + z-index 1 &:focus border-color $ui-input--focus-borderColor &:disabled diff --git a/browser/main/TopBar/index.js b/browser/main/TopBar/index.js index 3aa89aee..e1071520 100644 --- a/browser/main/TopBar/index.js +++ b/browser/main/TopBar/index.js @@ -1,8 +1,9 @@ import React, { PropTypes } from 'react' -import { connect } from 'react-redux' import CSSModules from 'browser/lib/CSSModules' import styles from './TopBar.styl' import activityRecord from 'browser/lib/activityRecord' +import Repository from 'browser/lib/Repository' +import _ from 'lodash' const OSX = window.process.platform === 'darwin' @@ -30,23 +31,56 @@ class TopBar extends React.Component { this.searchInput.blur() } - handleSearchChange (e) { - } - - handleSearchClearButton (e) { - this.searchInput.value = '' - this.focusInput() - } - handleNewPostButtonClick (e) { activityRecord.emit('ARTICLE_CREATE') + + let { params, repositories } = this.props + + let folderKey = params.folderKey + let repositoryKey = params.repositoryKey + if (folderKey == null) { + let repository = _.find(repositories, {key: repositoryKey}) + if (repository == null) { + repository = repositories[0] + } + if (repository != null) { + repositoryKey = repository.key + folderKey = repository.folders[0] != null && repository.folders[0].key + } + if (folderKey == null) throw new Error('no folder exists') + } + + let newNote = { + title: 'New Note', + content: '', + folder: folderKey, + tags: [], + mode: 'markdown' + } + + Repository + .find(repositoryKey) + .then((repo) => { + console.log(repo) + return repo.addNote(newNote) + }) + .then((note) => { + let { dispatch } = this.props + dispatch({ + type: 'ADD_NOTE', + repository: repositoryKey, + note: note + }) + }) + .catch((err) => { + console.error(err) + }) } handleTutorialButtonClick (e) { } handleLinksButton (e) { - } render () { @@ -112,4 +146,4 @@ TopBar.propTypes = { }) } -export default connect((x) => x)(CSSModules(TopBar, styles)) +export default CSSModules(TopBar, styles) diff --git a/browser/main/index.js b/browser/main/index.js index 718fc3b2..fedef081 100644 --- a/browser/main/index.js +++ b/browser/main/index.js @@ -76,7 +76,7 @@ ipc.on('open-finder', function () { let el = document.getElementById('content') const history = syncHistoryWithStore(hashHistory, store) -history.listen((location) => console.info(location)) + ReactDOM.render(( diff --git a/browser/main/store.js b/browser/main/store.js index 012e9de6..3b315308 100644 --- a/browser/main/store.js +++ b/browser/main/store.js @@ -105,6 +105,16 @@ function repositories (state = initialRepositories, action) { targetRepo.folders.splice(targetFolderIndex, 1) } + return repos + } + case 'ADD_NOTE': + { + let repos = state.slice() + let targetRepo = _.find(repos, {key: action.repository}) + + if (targetRepo == null) return state + targetRepo.notes.push(action.note) + return repos } } diff --git a/index.js b/index.js index fe56a62e..7a1fdf7b 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,6 @@ function isFinderCalled () { var argv = process.argv.slice(1) - return argv.some(arg => arg.match(/--finder/)) + return argv.some((arg) => arg.match(/--finder/)) } if (isFinderCalled()) {