diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 6f5c8093..f3913e48 100755 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -224,6 +224,7 @@ export default class MarkdownPreview extends React.Component { return ` + ${styles} @@ -431,9 +432,9 @@ export default class MarkdownPreview extends React.Component { el.innerHTML = '' if (codeBlockTheme.indexOf('solarized') === 0) { const [refThema, color] = codeBlockTheme.split(' ') - el.parentNode.className += ` cm-s-${refThema} cm-s-${color} CodeMirror` + el.parentNode.className += ` cm-s-${refThema} cm-s-${color}` } else { - el.parentNode.className += ` cm-s-${codeBlockTheme} CodeMirror` + el.parentNode.className += ` cm-s-${codeBlockTheme}` } CodeMirror.runMode(content, syntax.mime, el, { tabSize: indentSize diff --git a/browser/components/NoteItem.styl b/browser/components/NoteItem.styl index f213348a..5203ccea 100644 --- a/browser/components/NoteItem.styl +++ b/browser/components/NoteItem.styl @@ -117,7 +117,7 @@ $control-height = 30px font-size 12px line-height 20px overflow ellipsis - display flex + display block .item-bottom-tagList flex 1 diff --git a/browser/components/StorageItem.js b/browser/components/StorageItem.js index 25be3c57..c92579da 100644 --- a/browser/components/StorageItem.js +++ b/browser/components/StorageItem.js @@ -6,6 +6,7 @@ import React from 'react' import styles from './StorageItem.styl' import CSSModules from 'browser/lib/CSSModules' import _ from 'lodash' +import { SortableHandle } from 'react-sortable-hoc' /** * @param {boolean} isActive @@ -23,32 +24,35 @@ import _ from 'lodash' const StorageItem = ({ isActive, handleButtonClick, handleContextMenu, folderName, folderColor, isFolded, noteCount, handleDrop, handleDragEnter, handleDragLeave -}) => ( - -) + {(!isFolded && _.isNumber(noteCount)) && + {noteCount} + } + {isFolded && + + {folderName} + + } + + ) +} StorageItem.propTypes = { isActive: PropTypes.bool.isRequired, diff --git a/browser/main/SideNav/StorageItem.js b/browser/main/SideNav/StorageItem.js index 0df7a98e..0589276e 100644 --- a/browser/main/SideNav/StorageItem.js +++ b/browser/main/SideNav/StorageItem.js @@ -9,6 +9,7 @@ import RenameFolderModal from 'browser/main/modals/RenameFolderModal' import dataApi from 'browser/main/lib/dataApi' import StorageItemChild from 'browser/components/StorageItem' import _ from 'lodash' +import { SortableElement } from 'react-sortable-hoc' const { remote } = require('electron') const { Menu, dialog } = remote @@ -219,7 +220,8 @@ class StorageItem extends React.Component { render () { const { storage, location, isFolded, data, dispatch } = this.props const { folderNoteMap, trashedSet } = data - const folderList = storage.folders.map((folder) => { + const SortableStorageItemChild = SortableElement(StorageItemChild) + const folderList = storage.folders.map((folder, index) => { const isActive = !!(location.pathname.match(new RegExp('\/storages\/' + storage.key + '\/folders\/' + folder.key))) const noteSet = folderNoteMap.get(storage.key + '-' + folder.key) @@ -233,8 +235,9 @@ class StorageItem extends React.Component { noteCount = noteSet.size - trashedNoteCount } return ( - this.handleFolderButtonClick(folder.key)(e)} handleContextMenu={(e) => this.handleFolderButtonContextMenu(e, folder)} @@ -256,9 +259,9 @@ class StorageItem extends React.Component { key={storage.key} >
this.handleHeaderContextMenu(e)} > diff --git a/browser/main/SideNav/index.js b/browser/main/SideNav/index.js index 6d05e37b..a7e9890b 100644 --- a/browser/main/SideNav/index.js +++ b/browser/main/SideNav/index.js @@ -17,6 +17,7 @@ import EventEmitter from 'browser/main/lib/eventEmitter' import PreferenceButton from './PreferenceButton' import ListButton from './ListButton' import TagButton from './TagButton' +import {SortableContainer} from 'react-sortable-hoc' class SideNav extends React.Component { // TODO: should not use electron stuff v0.7 @@ -68,6 +69,17 @@ class SideNav extends React.Component { router.push('/alltags') } + onSortEnd (storage) { + return ({oldIndex, newIndex}) => { + const { dispatch } = this.props + dataApi + .reorderFolder(storage.key, oldIndex, newIndex) + .then((data) => { + dispatch({ type: 'REORDER_FOLDER', storage: data.storage }) + }) + } + } + SideNavComponent (isFolded, storageList) { const { location, data } = this.props @@ -117,9 +129,9 @@ class SideNav extends React.Component { tagListComponent () { const { data, location } = this.props - const tagList = data.tagNoteMap.map((tag, name) => { + const tagList = _.sortBy(data.tagNoteMap.map((tag, name) => { return { name, size: tag.size } - }) + }), ['name']) return ( tagList.map(tag => { return ( @@ -180,13 +192,16 @@ class SideNav extends React.Component { const isFolded = config.isSideNavFolded const storageList = data.storageMap.map((storage, key) => { - return }) const style = {} diff --git a/readme.md b/readme.md index 67a5689d..b5d02729 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -:mega: Open sourcing our [Android and iOS apps](https://github.com/BoostIO/Boostnote-mobile)! +:mega: We've launched a blogging platform with markdown called **[Boostlog](https://boostlog.io/)**. ![Boostnote app screenshot](./resources/repository/top.png) @@ -25,8 +25,8 @@ Boostnote is an open source project. It's an independent project with its ongoin ## Community - [Facebook Group](https://www.facebook.com/groups/boostnote/) - [Twitter](https://twitter.com/boostnoteapp) -- [Slack Group](https://join.slack.com/t/boostnote-group/shared_invite/enQtMzAzMjI1MTIyNTQ3LTc2MjNiYWU3NTc1YjZlMTk3NzFmOWE1ZWU1MGRhMzBkMGIwMWFjOWMxMDRiM2I2NzkzYzc4OGZhNmVhZjYzZTM) -- [Blog](https://boostlog.io/@junp1234) +- [Slack Group](https://join.slack.com/t/boostnote-group/shared_invite/enQtMzI3NTIxMTQzMTQzLTUyYWZmZWM1YzcwYzQ5OWQ5YzA3Y2M2NzUzNmIwNzYzMjg5NmQyOGJlNzcyZDJhMGY0ZDc0ZjdlZDFhMDdiMWE) +- [Blog](https://boostlog.io/tags/boostnote) - [Reddit](https://www.reddit.com/r/Boostnote/)