diff --git a/browser/components/NoteItem.js b/browser/components/NoteItem.js
index a4e9ca48..79eed23a 100644
--- a/browser/components/NoteItem.js
+++ b/browser/components/NoteItem.js
@@ -4,7 +4,9 @@
import React, { PropTypes } from 'react'
import { isArray } from 'lodash'
import CSSModules from 'browser/lib/CSSModules'
+import { getTodoStatus } from 'browser/lib/getTodoStatus'
import styles from './NoteItem.styl'
+import TodoProcess from './TodoProcess'
/**
* @description Tag element component.
@@ -76,6 +78,10 @@ const NoteItem = ({ isActive, note, dateDisplay, handleNoteClick, handleDragStar
}
+ {note.type === 'MARKDOWN_NOTE'
+ ?
+ : ''
+ }
)
diff --git a/browser/components/NoteItem.styl b/browser/components/NoteItem.styl
index 12f8b193..ea84f7f4 100644
--- a/browser/components/NoteItem.styl
+++ b/browser/components/NoteItem.styl
@@ -39,6 +39,7 @@ $control-height = 30px
.item-wrapper
padding 15px 0
border-bottom $ui-border
+ position relative
.item--active
@extend .item
diff --git a/browser/components/NoteItemSimple.styl b/browser/components/NoteItemSimple.styl
index 15504384..2333353e 100644
--- a/browser/components/NoteItemSimple.styl
+++ b/browser/components/NoteItemSimple.styl
@@ -48,6 +48,7 @@ $control-height = 30px
overflow ellipsis
color $ui-inactive-text-color
border-bottom $ui-border
+ position relative
.item-simple-title-icon
font-size 12px
diff --git a/browser/components/TodoProcess.js b/browser/components/TodoProcess.js
new file mode 100644
index 00000000..91c8a943
--- /dev/null
+++ b/browser/components/TodoProcess.js
@@ -0,0 +1,33 @@
+/**
+ * @fileoverview Percentage of todo achievement.
+ */
+
+import React, { PropTypes } from 'react'
+import CSSModules from 'browser/lib/CSSModules'
+import styles from './TodoProcess.styl'
+
+const TodoProcess = ({
+ todoStatus: {
+ total: totalTodo,
+ completed: completedTodo
+ }
+}) => (
+
0 ? '' : 'none'}}>
+
+
+ {completedTodo} of {totalTodo}
+
+
+
+)
+
+TodoProcess.propTypes = {
+ todoStatus: {
+ total: PropTypes.number.isRequired,
+ completed: PropTypes.number.isRequired
+ }
+}
+
+export default CSSModules(TodoProcess, styles)
diff --git a/browser/components/TodoProcess.styl b/browser/components/TodoProcess.styl
new file mode 100644
index 00000000..db0a0831
--- /dev/null
+++ b/browser/components/TodoProcess.styl
@@ -0,0 +1,36 @@
+.todo-process
+ font-size 12px
+ display flex
+
+.todo-process-text
+ display inline-block
+ padding-right 10px
+ white-space nowrap
+ text-overflow ellipsis
+ i
+ color grey
+ padding-right 5px
+
+.todo-process-bar
+ display inline-block
+ margin auto
+ width 150px
+ height 5px
+ background-color #DADFE1
+ border-radius 2px
+ flex-grow 1
+
+.todo-process-bar--inner
+ height 100%
+ background-color #6C7A89
+ transition 0.3s
+
+
+body[data-theme="dark"]
+ .todo-process
+ color $ui-dark-text-color
+ .todo-process-bar
+ background-color #363A3D
+
+ .todo-process-bar--inner
+ background-color: alpha(#939395, 50%)
diff --git a/browser/lib/getTodoStatus.js b/browser/lib/getTodoStatus.js
new file mode 100644
index 00000000..d65e4946
--- /dev/null
+++ b/browser/lib/getTodoStatus.js
@@ -0,0 +1,25 @@
+export function getTodoStatus (content) {
+ let splitted = content.split('\n')
+ let numberOfTodo = 0
+ let numberOfCompletedTodo = 0
+
+ splitted.forEach((line) => {
+ let trimmedLine = line.trim()
+ if (trimmedLine.match(/^[\+\-\*] \[\s|x\] ./)) {
+ numberOfTodo++
+ }
+ if (trimmedLine.match(/^[\+\-\*] \[x\] ./)) {
+ numberOfCompletedTodo++
+ }
+ })
+
+ return {
+ total: numberOfTodo,
+ completed: numberOfCompletedTodo
+ }
+}
+
+export function getTodoPercentageOfCompleted (content) {
+ const state = getTodoStatus(content)
+ return Math.floor(state.completed / state.total * 100)
+}
diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js
index 9bf97c7a..6d9827f7 100644
--- a/browser/main/Detail/MarkdownNoteDetail.js
+++ b/browser/main/Detail/MarkdownNoteDetail.js
@@ -19,6 +19,7 @@ import InfoButton from './InfoButton'
import InfoPanel from './InfoPanel'
import InfoPanelTrashed from './InfoPanelTrashed'
import { formatDate } from 'browser/lib/date-formatter'
+import { getTodoPercentageOfCompleted } from 'browser/lib/getTodoStatus'
const electron = require('electron')
const { remote } = electron
@@ -70,24 +71,6 @@ class MarkdownNoteDetail extends React.Component {
ee.off('topbar:togglelockbutton', this.toggleLockButton)
}
- getPercentageOfCompleteTodo (noteContent) {
- let splitted = noteContent.split('\n')
- let numberOfTodo = 0
- let numberOfCompletedTodo = 0
-
- splitted.forEach((line) => {
- let trimmedLine = line.trim()
- if (trimmedLine.match(/^[\+\-\*] \[\s|x\] ./)) {
- numberOfTodo++
- }
- if (trimmedLine.match(/^[\+\-\*] \[x\] ./)) {
- numberOfCompletedTodo++
- }
- })
-
- return Math.floor(numberOfCompletedTodo / numberOfTodo * 100)
- }
-
handleChange (e) {
let { note } = this.state
@@ -333,7 +316,7 @@ class MarkdownNoteDetail extends React.Component {
onChange={(e) => this.handleChange(e)}
/>