diff --git a/browser/components/TodoListPercentage.styl b/browser/components/TodoListPercentage.styl new file mode 100644 index 00000000..f33309c2 --- /dev/null +++ b/browser/components/TodoListPercentage.styl @@ -0,0 +1,13 @@ +.percentageBar + position absolute + background-color #bcbcbc + height 20px + width 100% + +.progressBar + background-color #52d8a5 + height 20px + text-align center + +.progressBar p + color white diff --git a/browser/components/TodolistPercentage.js b/browser/components/TodolistPercentage.js new file mode 100644 index 00000000..05a1d9d3 --- /dev/null +++ b/browser/components/TodolistPercentage.js @@ -0,0 +1,29 @@ +/** + * @fileoverview Percentage of todo achievement. + */ + +import React, { PropTypes } from 'react' +import CSSModules from 'browser/lib/CSSModules' +import styles from './TodoListPercentage.styl' + +/** + * @param {number} percentageOfTodo + */ + +const TodoListPercentage = ({ + percentageOfTodo +}) => ( +
+
+

{percentageOfTodo + '%'}

+
+
+) + + +TodoListPercentage.propTypes = { + percentageOfTodo: PropTypes.number.isRequired +} + +export default CSSModules(TodoListPercentage, styles) diff --git a/browser/main/Detail/MarkdownNoteDetail.js b/browser/main/Detail/MarkdownNoteDetail.js index 6cb0a473..59e7c559 100644 --- a/browser/main/Detail/MarkdownNoteDetail.js +++ b/browser/main/Detail/MarkdownNoteDetail.js @@ -2,6 +2,7 @@ import React, { PropTypes } from 'react' import CSSModules from 'browser/lib/CSSModules' import styles from './MarkdownNoteDetail.styl' import MarkdownEditor from 'browser/components/MarkdownEditor' +import TodoListPercentage from 'browser/components/TodoListPercentage' import StarButton from './StarButton' import TagSelect from './TagSelect' import FolderSelect from './FolderSelect' @@ -95,6 +96,24 @@ class MarkdownNoteDetail extends React.Component { return title } + getPercentageOfCompleteTodo (value) { + let splitted = value.split('\n') + let numberOfTodo = 0 + let numberOfCompletedTodo = 0 + + for (let i = 0; i < splitted.length; i++) { + let trimmedLine = splitted[i].trim() + if (trimmedLine.match(/^- \[\s|x\] ./)) { + numberOfTodo++ + } + if (trimmedLine.match(/^- \[x\] ./)) { + numberOfCompletedTodo++ + } + } + + return Math.floor(numberOfCompletedTodo / numberOfTodo * 100) + } + handleChange (e) { let { note } = this.state @@ -263,6 +282,9 @@ class MarkdownNoteDetail extends React.Component { value={this.state.note.tags} onChange={(e) => this.handleChange(e)} /> +
{(() => {