toodles 0.1.0.5 → 0.1.0.6
raw patch · 5 files changed
+52/−8 lines, 5 files
Files
- app/Main.hs +6/−2
- toodles.cabal +2/−2
- web/css/toodles.css +4/−0
- web/html/index.html +12/−3
- web/js/app.js +28/−1
app/Main.hs view
@@ -5,7 +5,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} --- TODO(avi|p=3|#cleanup) - break this into modules+-- TODO(avi|p=3|#cleanup|key=val|k3y=asdf) - break this into modules module Main where import qualified Control.Exception as E@@ -71,6 +71,7 @@ { editIds :: [Integer] , setAssignee :: Maybe T.Text , addTags :: [T.Text]+ , addKeyVals :: [(T.Text, T.Text)] , setPriority :: Maybe Integer } deriving (Show, Generic) @@ -208,7 +209,10 @@ else assignee entry newPriority = if isJust (setPriority editRequest) then setPriority editRequest else priority entry in - entry {assignee = newAssignee, tags = tags entry ++ addTags editRequest, priority = newPriority}+ entry {assignee = newAssignee,+ tags = tags entry ++ addTags editRequest,+ priority = newPriority,+ customAttributes = nub $ customAttributes entry ++ addKeyVals editRequest} recordUpdates :: MonadIO m => TodoEntry -> m () recordUpdates t = void $ updateTodoLinesInFile renderTodo t
toodles.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: c6c9747348f5840600bc60ca50371441531f0a8aeb8866276836eb133141353a+-- hash: 770bcef8fdc02da5e012a221275957c0f7b87d287968aa1806ed5ddd1c1c3746 name: toodles-version: 0.1.0.5+version: 0.1.0.6 synopsis: Manage the TODO entries in your code description: See the README on GitHub at <https://github.com/aviaviavi/toodles#readme> category: Project Management
web/css/toodles.css view
@@ -132,3 +132,7 @@ .toodles-nav-title-text { padding-left: 5px; }++.input-error {+ color: red;+}
web/html/index.html view
@@ -59,24 +59,33 @@ <div class="field edit-todo-field-input"> <label class="label">Set Assignee</label> <div class="control">- <input class="input" type="text" placeholder="Assignee" v-model="setAssignee">+ <input class="input" type="text" placeholder="Assignee" v-model="setAssignee" @keyup.enter="submitTodoEdits"> </div> </div> <div class="field edit-todo-field-input"> <label class="label">Add Tag (comma separated)</label> <div class="control">- <input class="input" type="text" placeholder="#bug,#techdebt,..." v-model="addTags">+ <input class="input" type="text" placeholder="#bug,#techdebt,..." v-model="addTags" @keyup.enter="submitTodoEdits"> </div> </div> <div class="field edit-todo-field-input">+ <label class="label">Add Custom Attributes (comma separated)</label>+ <div class="input-error key-val-parse-error" v-show="addKeyValParseError">Parse error, check your formatting and try again</div>+ <div class="control">+ <input class="input" type="text" placeholder="key1:val1,key2:val2,..." v-model="addKeyVals" @keyup.enter="submitTodoEdits">+ </div>+ </div>++ <div class="field edit-todo-field-input"> <label class="label">Set Priority</label> <div class="control">- <input class="input" type="number" placeholder="Number" v-model="setPriority">+ <input class="input" type="number" placeholder="Number" v-model="setPriority" @keyup.enter="submitTodoEdits"> </div> </div> + <div class="input-error nothing-filled-error" v-show="nothingFilledError">Add some changes before submitting</div> <button class="button is-primary submit-todo-edits" v-on:click="submitTodoEdits">Submit</button> </div> </div>
web/js/app.js view
@@ -14,6 +14,9 @@ addTags: "", setPriority: null, lastSortField: null,+ addKeyVals: "",+ addKeyValParseError: false,+ nothingFilledError: false, } }, created: function() {@@ -167,6 +170,23 @@ }, submitTodoEdits: function(){+ this.keyValParseError = false+ this.nothingFilledError = false++ if (!(this.addKeyVals || this.setAssignee || this.setPriority || this.addTags)) {+ this.nothingFilledError = true+ return+ }+ const keyVals =+ this.addKeyVals.trim() === "" ?+ [] :+ this.addKeyVals.split(",").map(p => p.split(":").map(t => t.trim()))+ const keyValError = keyVals.some(p => p && p.length !== 2)+ if (keyValError) {+ this.addKeyValParseError = true+ return+ }+ $.ajax({ url: "/todos/edit", type: "POST",@@ -182,7 +202,8 @@ "#" + tag }),- setPriority: parseInt(this.setPriority)+ setPriority: parseInt(this.setPriority),+ addKeyVals: keyVals, }), success: function(data){ this.todos.filter(function(t) {@@ -197,6 +218,12 @@ } if (this.setPriority) { t.priority = parseInt(this.setPriority)+ }++ if (this.addKeyVals) {+ for (var i = 0; i < keyVals.length; i++) {+ t.customAttributes[keyVals[i][0]] = keyVals[i][1]+ } } }.bind(this)) this.closeModal()