mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-26 20:02:27 +03:00
web: fix add form completions (fixes #1156)
It seems like show (toJSON "a") used to give "\"a\"" instead of "String \"a\"". I haven't found the root cause, it's possible that this fix won't work if built with older libs.
This commit is contained in:
parent
c5537cedb5
commit
aa47d8ddc9
@ -13,7 +13,7 @@ module Hledger.Web.Widget.AddForm
|
|||||||
|
|
||||||
import Control.Monad.State.Strict (evalStateT)
|
import Control.Monad.State.Strict (evalStateT)
|
||||||
import Data.Bifunctor (first)
|
import Data.Bifunctor (first)
|
||||||
import Data.List (dropWhileEnd, nub, sort, unfoldr)
|
import Data.List (dropWhileEnd, intercalate, nub, sort, unfoldr)
|
||||||
import Data.Maybe (isJust)
|
import Data.Maybe (isJust)
|
||||||
#if !(MIN_VERSION_base(4,13,0))
|
#if !(MIN_VERSION_base(4,13,0))
|
||||||
import Data.Semigroup ((<>))
|
import Data.Semigroup ((<>))
|
||||||
@ -73,10 +73,6 @@ addForm j today = identifyForm "add" $ \extra -> do
|
|||||||
-- bindings used in add-form.hamlet
|
-- bindings used in add-form.hamlet
|
||||||
let descriptions = sort $ nub $ tdescription <$> jtxns j
|
let descriptions = sort $ nub $ tdescription <$> jtxns j
|
||||||
journals = fst <$> jfiles j
|
journals = fst <$> jfiles j
|
||||||
listToJsonArray :: [Text] -> Markup
|
|
||||||
listToJsonArray = preEscapedString . escapeJSSpecialChars . show . toJSON
|
|
||||||
where
|
|
||||||
escapeJSSpecialChars = regexReplaceCI "</script>" "<\\/script>" -- #236
|
|
||||||
|
|
||||||
pure (validateTransaction dateRes descRes postRes, $(widgetFile "add-form"))
|
pure (validateTransaction dateRes descRes postRes, $(widgetFile "add-form"))
|
||||||
|
|
||||||
@ -98,6 +94,28 @@ addForm j today = identifyForm "add" $ \extra -> do
|
|||||||
, fieldEnctype = UrlEncoded
|
, fieldEnctype = UrlEncoded
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-- Used in add-form.hamlet
|
||||||
|
toBloodhoundJson :: [Text] -> Markup
|
||||||
|
toBloodhoundJson ts =
|
||||||
|
-- This used to work, but since 1.16, it seems like something changed.
|
||||||
|
-- toJSON ("a"::Text) gives String "a" instead of "a", etc.
|
||||||
|
-- preEscapedString . escapeJSSpecialChars . show . toJSON
|
||||||
|
preEscapedString $ concat [
|
||||||
|
"[",
|
||||||
|
intercalate "," $ map (
|
||||||
|
("{\"value\":" ++).
|
||||||
|
(++"}").
|
||||||
|
escapeJSSpecialChars .
|
||||||
|
drop 7 . -- "String "
|
||||||
|
show .
|
||||||
|
toJSON
|
||||||
|
) ts,
|
||||||
|
"]"
|
||||||
|
]
|
||||||
|
where
|
||||||
|
-- avoid https://github.com/simonmichael/hledger/issues/236
|
||||||
|
escapeJSSpecialChars = regexReplaceCI "</script>" "<\\/script>"
|
||||||
|
|
||||||
validateTransaction ::
|
validateTransaction ::
|
||||||
FormResult Day
|
FormResult Day
|
||||||
-> FormResult Text
|
-> FormResult Text
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
jQuery(document).ready(function() {
|
jQuery(document).ready(function() {
|
||||||
descriptionsSuggester = new Bloodhound({
|
descriptionsSuggester = new Bloodhound({
|
||||||
local:#{listToJsonArray descriptions},
|
local:#{toBloodhoundJson descriptions},
|
||||||
limit:100,
|
limit:100,
|
||||||
datumTokenizer: function(d) { return [d.value]; },
|
datumTokenizer: function(d) { return [d.value]; },
|
||||||
queryTokenizer: function(q) { return [q]; }
|
queryTokenizer: function(q) { return [q]; }
|
||||||
@ -9,7 +9,7 @@
|
|||||||
descriptionsSuggester.initialize();
|
descriptionsSuggester.initialize();
|
||||||
|
|
||||||
accountsSuggester = new Bloodhound({
|
accountsSuggester = new Bloodhound({
|
||||||
local:#{listToJsonArray (journalAccountNamesDeclaredOrImplied j)},
|
local:#{toBloodhoundJson (journalAccountNamesDeclaredOrImplied j)},
|
||||||
limit:100,
|
limit:100,
|
||||||
datumTokenizer: function(d) { return [d.value]; },
|
datumTokenizer: function(d) { return [d.value]; },
|
||||||
queryTokenizer: function(q) { return [q]; }
|
queryTokenizer: function(q) { return [q]; }
|
||||||
|
Loading…
Reference in New Issue
Block a user