Skip to content
This repository has been archived by the owner on Mar 25, 2024. It is now read-only.

Commit

Permalink
Merge branch 'release/1.11.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
smallhadroncollider committed Aug 12, 2021
2 parents fb7feee + 0348134 commit 5e5d7d3
Show file tree
Hide file tree
Showing 8 changed files with 109 additions and 57 deletions.
1 change: 1 addition & 0 deletions .bin/build
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ git stash
#----------------------------------------------------------------------------

# check cabal build works
cabal update
cabal build

if [ $? -ne 0 ]
Expand Down
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ Follow [@taskellcli](https://twitter.com/taskellcli) on Twitter for updates
- [Due Dates](#due-dates)
- [Theming](#theming)
- [Roadmap](#roadmap)
- [Contributing](#contributing)
- [Core Contributors](#core-contributors)
- [Acknowledgements](#acknowledgements)

## Installation

Expand Down Expand Up @@ -342,12 +345,19 @@ The available colours are: `black`, `red`, `green`, `yellow`, `blue`, `magenta`,

See [roadmap.md](https://github.com/smallhadroncollider/taskell/blob/develop/roadmap.md) for planned features

### Contributing
---

## Contributing

Please check the [roadmap.md](https://github.com/smallhadroncollider/taskell/blob/develop/roadmap.md) before adding any bugs/feature requests to Issues.

Anyone is welcome to contribute to the project, but please read through [CONTRIBUTING.md](https://github.com/smallhadroncollider/taskell/blob/master/CONTRIBUTING.md) and make sure that you agree with the [Code of Conduct](https://github.com/smallhadroncollider/taskell/blob/master/CODE_OF_CONDUCT.md) before getting involved.

### Core Contributors

- Mark Wales ([@smallhadroncollider](https://github.com/smallhadroncollider))
- Ali Ahmed ([@AliNisarAhmed](https://github.com/AliNisarAhmed))

---

## Acknowledgements
Expand Down
2 changes: 1 addition & 1 deletion docs/_config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: taskell
tagline: Command-line Kanban board/task management
baseurl: ""
locale: "en"
version: 1.11.2
version: 1.11.3
destination: _site/public
exclude: [deployment, Capfile, log, Gemfile, Gemfile.lock]

Expand Down
2 changes: 1 addition & 1 deletion package.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: taskell
version: '1.11.2'
version: '1.11.3'
category: Command Line Tools
author: Mark Wales
maintainer: [email protected]
Expand Down
29 changes: 17 additions & 12 deletions src/Taskell/Data/Task.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,22 @@ module Taskell.Data.Task where

import ClassyPrelude

import Control.Lens (ix, makeLenses, (%~), (&), (.~), (?~), (^.), (^?))
import Control.Lens ((%~), (&), (.~), (?~), (^.), (^?), ix, makeLenses)

import Data.Sequence as S (adjust', deleteAt, (|>))
import Data.Text (strip)
import Data.Time.Zones (TZ)
import Taskell.Data.Date (Due (..), inputToTime)
import Data.Sequence as S ((|>), adjust', deleteAt, insertAt)
import Data.Text (strip)
import Data.Time.Zones (TZ)
import Taskell.Data.Date (Due(..), inputToTime)
import qualified Taskell.Data.Subtask as ST (Subtask, Update, complete, duplicate, name)

data Task = Task
{ _name :: Text
, _description :: Maybe Text
, _subtasks :: Seq ST.Subtask
, _due :: Maybe Due
} deriving (Show, Eq)
data Task =
Task
{ _name :: Text
, _description :: Maybe Text
, _subtasks :: Seq ST.Subtask
, _due :: Maybe Due
}
deriving (Show, Eq)

type Update = Task -> Task

Expand All @@ -43,7 +45,7 @@ setDescription text =

maybeAppend :: Text -> Maybe Text -> Maybe Text
maybeAppend text (Just current) = Just (concat [current, "\n", text])
maybeAppend text Nothing = Just text
maybeAppend text Nothing = Just text

appendDescription :: Text -> Update
appendDescription text =
Expand All @@ -63,6 +65,9 @@ clearDue task = task & due .~ Nothing
getSubtask :: Int -> Task -> Maybe ST.Subtask
getSubtask idx = (^? subtasks . ix idx)

addSubtaskAtIndex :: Int -> ST.Subtask -> Update
addSubtaskAtIndex idx subtask = subtasks %~ S.insertAt idx subtask

addSubtask :: ST.Subtask -> Update
addSubtask subtask = subtasks %~ (|> subtask)

Expand Down
30 changes: 15 additions & 15 deletions src/Taskell/Events/Actions/Modal/Detail.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ module Taskell.Events.Actions.Modal.Detail

import ClassyPrelude

import Graphics.Vty.Input.Events
import Taskell.Events.Actions.Types as A (ActionType (..))
import Taskell.Events.State (clearDate, normalMode, quit, store, undo, write)
import Taskell.Events.State.Modal.Detail as Detail
import Taskell.Events.State.Types
import Taskell.Events.State.Types.Mode (DetailItem (..), DetailMode (..))
import Taskell.IO.Keyboard.Types (Actions)
import qualified Taskell.UI.Draw.Field as F (event)
import Graphics.Vty.Input.Events
import Taskell.Events.Actions.Types as A (ActionType(..))
import Taskell.Events.State (clearDate, normalMode, quit, store, undo, write)
import Taskell.Events.State.Modal.Detail as Detail
import Taskell.Events.State.Types
import Taskell.Events.State.Types.Mode (DetailItem(..), DetailMode(..))
import Taskell.IO.Keyboard.Types (Actions)
import qualified Taskell.UI.Draw.Field as F (event)

events :: Actions
events
Expand All @@ -27,6 +27,8 @@ events
, (A.MoveUp, (write =<<) . (up =<<) . store)
, (A.MoveDown, (write =<<) . (down =<<) . store)
, (A.New, (Detail.insertMode =<<) . (Detail.lastSubtask =<<) . (Detail.newItem =<<) . store)
, (A.NewAbove, Detail.newAbove)
, (A.NewBelow, Detail.newBelow)
, (A.Edit, (Detail.insertMode =<<) . store)
, (A.Complete, (write =<<) . (setComplete =<<) . store)
, (A.Delete, (write =<<) . (Detail.remove =<<) . store)
Expand All @@ -37,28 +39,26 @@ events

normal :: Event -> Stateful
normal (EvKey KEsc _) = normalMode
normal _ = pure
normal _ = pure

insert :: Event -> Stateful
insert (EvKey KEsc _) s = do
item <- getCurrentItem s
case item of
DetailDescription -> (write =<<) $ finishDescription s
DetailDate -> showDetail s
(DetailItem _) -> (write =<<) . (showDetail =<<) $ finishSubtask s
DetailDate -> showDetail s
(DetailItem _) -> (write =<<) . (showDetail =<<) $ finishSubtask s
insert (EvKey KEnter _) s = do
item <- getCurrentItem s
case item of
DetailDescription -> (write =<<) $ finishDescription s
DetailDate -> (write =<<) $ finishDue s
(DetailItem _) ->
(Detail.lastSubtask =<<) . (Detail.newItem =<<) . (store =<<) . (write =<<) $
finishSubtask s
(DetailItem _) -> (Detail.newBelow =<<) . (write =<<) $ finishSubtask s
insert e s = updateField (F.event e) s

event :: Event -> Stateful
event e s = do
m <- getCurrentMode s
case m of
DetailNormal -> normal e s
DetailNormal -> normal e s
(DetailInsert _) -> insert e s
22 changes: 10 additions & 12 deletions src/Taskell/Events/Actions/Modal/Help.hs
Original file line number Diff line number Diff line change
@@ -1,27 +1,25 @@
{-# LANGUAGE OverloadedLists #-}

module Taskell.Events.Actions.Modal.Help
( event,
events,
)
where
( event
, events
) where

import ClassyPrelude
import Graphics.Vty.Input.Events
import Taskell.Events.Actions.Types as A (ActionType (..))
import Taskell.Events.Actions.Types as A (ActionType(..))
import Taskell.Events.State
import Taskell.Events.State.Modal.Help (moveHelpMenuDown, moveHelpMenuUp)
import Taskell.Events.State.Types (Stateful)
import Taskell.IO.Keyboard.Types (Actions)

events :: Actions
events =
[ (A.Quit, quit),
(A.MoveUp, moveHelpMenuUp),
(A.Next, moveHelpMenuUp),
(A.MoveDown, moveHelpMenuDown),
(A.Previous, moveHelpMenuDown)
]
[ (A.Quit, quit)
, (A.MoveUp, moveHelpMenuUp)
, (A.Next, moveHelpMenuUp)
, (A.MoveDown, moveHelpMenuDown)
, (A.Previous, moveHelpMenuDown)
]

event :: Event -> Stateful
event _ = normalMode
68 changes: 53 additions & 15 deletions src/Taskell/Events/State/Modal/Detail.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,65 @@ module Taskell.Events.State.Modal.Detail
, showDetail
, getCurrentItem
, getCurrentMode
, getCurrentSubtask
, getField
, setComplete
, remove
, insertMode
, editDescription
, editDue
, newItem
, newItemAtIndex
, nextSubtask
, previousSubtask
, lastSubtask
, subTaskAtIndex
, up
, down
, newAbove
, newBelow
) where

import ClassyPrelude

import Control.Lens ((&), (.~), (^.))

import Taskell.Data.Date (timeToDisplay)
import qualified Taskell.Data.Seq as S
import qualified Taskell.Data.Subtask as ST (blank, name, toggle)
import Taskell.Data.Task (Task, addSubtask, countSubtasks, description, due,
getSubtask, removeSubtask, setDescription, setDue,
subtasks, updateSubtask)
import Taskell.Events.State (getCurrentTask, setCurrentTask)
import Taskell.Events.State.Types (State, Stateful, mode, time, timeZone)
import Taskell.Events.State.Types.Mode (DetailItem (..), DetailMode (..),
ModalType (Detail), Mode (Modal))
import Taskell.UI.Draw.Field (Field, blankField, getText, textToField)
import Taskell.Data.Date (timeToDisplay)
import qualified Taskell.Data.Seq as S
import qualified Taskell.Data.Subtask as ST (blank, name, toggle)
import Taskell.Data.Task
( Task
, addSubtask
, addSubtaskAtIndex
, countSubtasks
, description
, due
, getSubtask
, removeSubtask
, setDescription
, setDue
, subtasks
, updateSubtask
)
import Taskell.Events.State (getCurrentTask, setCurrentTask, store)
import Taskell.Events.State.Types (State, Stateful, mode, time, timeZone)
import Taskell.Events.State.Types.Mode
( DetailItem(..)
, DetailMode(..)
, ModalType(Detail)
, Mode(Modal)
)
import Taskell.UI.Draw.Field (Field, blankField, getText, textToField)

newAbove :: Stateful
newAbove state = do
idx <- getCurrentSubtask state
store state >>= newItemAtIndex idx >>= subTaskAtIndex idx >>= insertMode

newBelow :: Stateful
newBelow state = do
idx <- (+ 1) <$> getCurrentSubtask state
store state >>= newItemAtIndex idx >>= subTaskAtIndex idx >>= insertMode

updateField :: (Field -> Field) -> Stateful
updateField fieldEvent s =
Expand Down Expand Up @@ -78,25 +108,25 @@ getCurrentSubtask :: State -> Maybe Int
getCurrentSubtask state =
case state ^. mode of
Modal (Detail (DetailItem i) _) -> Just i
_ -> Nothing
_ -> Nothing

getCurrentItem :: State -> Maybe DetailItem
getCurrentItem state =
case state ^. mode of
Modal (Detail item _) -> Just item
_ -> Nothing
_ -> Nothing

getCurrentMode :: State -> Maybe DetailMode
getCurrentMode state =
case state ^. mode of
Modal (Detail _ m) -> Just m
_ -> Nothing
_ -> Nothing

getField :: State -> Maybe Field
getField state =
case state ^. mode of
Modal (Detail _ (DetailInsert f)) -> Just f
_ -> Nothing
_ -> Nothing

setComplete :: Stateful
setComplete state = do
Expand Down Expand Up @@ -139,6 +169,11 @@ newItem state = do
task <- addSubtask ST.blank <$> getCurrentTask state
setCurrentTask task state

newItemAtIndex :: Int -> Stateful
newItemAtIndex idx state = do
task <- addSubtaskAtIndex idx ST.blank <$> getCurrentTask state
setCurrentTask task state

-- list navigation
changeSubtask :: Int -> Stateful
changeSubtask inc state = do
Expand All @@ -151,6 +186,9 @@ nextSubtask = changeSubtask 1
previousSubtask :: Stateful
previousSubtask = changeSubtask (-1)

subTaskAtIndex :: Int -> Stateful
subTaskAtIndex idx state = setIndex state idx

lastSubtask :: Stateful
lastSubtask state = lastIndex state >>= setIndex state

Expand Down

0 comments on commit 5e5d7d3

Please sign in to comment.