taskell 1.11.2 → 1.11.3
raw patch · 6 files changed
+107/−56 lines, 6 files
Files
- README.md +11/−1
- src/Taskell/Data/Task.hs +17/−12
- src/Taskell/Events/Actions/Modal/Detail.hs +15/−15
- src/Taskell/Events/Actions/Modal/Help.hs +10/−12
- src/Taskell/Events/State/Modal/Detail.hs +53/−15
- taskell.cabal +1/−1
README.md view
@@ -33,6 +33,9 @@ - [Due Dates](#due-dates) - [Theming](#theming) - [Roadmap](#roadmap)+- [Contributing](#contributing)+ - [Core Contributors](#core-contributors)+- [Acknowledgements](#acknowledgements) ## Installation @@ -342,11 +345,18 @@ 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)) ---
src/Taskell/Data/Task.hs view
@@ -4,20 +4,22 @@ 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 @@ -43,7 +45,7 @@ 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 =@@ -62,6 +64,9 @@ 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)
src/Taskell/Events/Actions/Modal/Detail.hs view
@@ -7,14 +7,14 @@ 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@@ -27,6 +27,8 @@ , (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)@@ -37,28 +39,26 @@ 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
src/Taskell/Events/Actions/Modal/Help.hs view
@@ -1,14 +1,12 @@ {-# 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)@@ -16,12 +14,12 @@ 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
src/Taskell/Events/State/Modal/Detail.hs view
@@ -6,6 +6,7 @@ , showDetail , getCurrentItem , getCurrentMode+ , getCurrentSubtask , getField , setComplete , remove@@ -13,29 +14,58 @@ , 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 = pure $@@ -78,25 +108,25 @@ 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@@ -139,6 +169,11 @@ 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@@ -150,6 +185,9 @@ previousSubtask :: Stateful previousSubtask = changeSubtask (-1)++subTaskAtIndex :: Int -> Stateful+subTaskAtIndex idx state = setIndex state idx lastSubtask :: Stateful lastSubtask state = lastIndex state >>= setIndex state
taskell.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.12 name: taskell-version: 1.11.2+version: 1.11.3 license: BSD3 license-file: LICENSE copyright: 2019 Mark Wales