Allow selecting the date range from the chart
By dragging a region with the mouse
This commit is contained in:
		
							parent
							
								
									9cff45b2c5
								
							
						
					
					
						commit
						fe6e9a79fe
					
				| @ -160,6 +160,7 @@ instance Yesod App where | |||||||
|       addScript $ StaticR js_jquery_cookie_js |       addScript $ StaticR js_jquery_cookie_js | ||||||
|       addScript $ StaticR js_jquery_hotkeys_js |       addScript $ StaticR js_jquery_hotkeys_js | ||||||
|       addScript $ StaticR js_jquery_flot_min_js |       addScript $ StaticR js_jquery_flot_min_js | ||||||
|  |       addScript $ StaticR js_jquery_flot_selection_min_js | ||||||
|       addScript $ StaticR js_jquery_flot_time_min_js |       addScript $ StaticR js_jquery_flot_time_min_js | ||||||
|       addScript $ StaticR js_jquery_flot_tooltip_min_js |       addScript $ StaticR js_jquery_flot_tooltip_min_js | ||||||
|       toWidget [hamlet| \<!--[if lte IE 8]> <script type="text/javascript" src="@{StaticR js_excanvas_min_js}"></script> <![endif]--> |] |       toWidget [hamlet| \<!--[if lte IE 8]> <script type="text/javascript" src="@{StaticR js_excanvas_min_js}"></script> <![endif]--> |] | ||||||
|  | |||||||
| @ -19,7 +19,7 @@ import Hledger.Web.WebOptions | |||||||
| import Hledger.Web.Widget.AddForm (addModal) | import Hledger.Web.Widget.AddForm (addModal) | ||||||
| import Hledger.Web.Widget.Common | import Hledger.Web.Widget.Common | ||||||
|              (accountQuery, mixedAmountAsHtml, |              (accountQuery, mixedAmountAsHtml, | ||||||
|               transactionFragment, removeInacct, replaceInacct) |               transactionFragment, removeDates, removeInacct, replaceInacct) | ||||||
| 
 | 
 | ||||||
| -- | The main journal/account register view, with accounts sidebar. | -- | The main journal/account register view, with accounts sidebar. | ||||||
| getRegisterR :: Handler Html | getRegisterR :: Handler Html | ||||||
| @ -99,8 +99,8 @@ decorateLinks = | |||||||
| 
 | 
 | ||||||
| -- | Generate javascript/html for a register balance line chart based on | -- | Generate javascript/html for a register balance line chart based on | ||||||
| -- the provided "TransactionsReportItem"s. | -- the provided "TransactionsReportItem"s. | ||||||
| registerChartHtml :: String -> [(CommoditySymbol, [TransactionsReportItem])] -> HtmlUrl AppRoute | registerChartHtml :: Text -> String -> [(CommoditySymbol, [TransactionsReportItem])] -> HtmlUrl AppRoute | ||||||
| registerChartHtml title percommoditytxnreports = $(hamletFile "templates/chart.hamlet") | registerChartHtml q title percommoditytxnreports = $(hamletFile "templates/chart.hamlet") | ||||||
|  -- have to make sure plot is not called when our container (maincontent) |  -- have to make sure plot is not called when our container (maincontent) | ||||||
|  -- is hidden, eg with add form toggled |  -- is hidden, eg with add form toggled | ||||||
|  where |  where | ||||||
| @ -109,6 +109,7 @@ registerChartHtml title percommoditytxnreports = $(hamletFile "templates/chart.h | |||||||
|    commoditiesIndex = zip (map fst percommoditytxnreports) [0..] :: [(CommoditySymbol,Int)] |    commoditiesIndex = zip (map fst percommoditytxnreports) [0..] :: [(CommoditySymbol,Int)] | ||||||
|    simpleMixedAmountQuantity = maybe 0 aquantity . listToMaybe . amounts |    simpleMixedAmountQuantity = maybe 0 aquantity . listToMaybe . amounts | ||||||
|    shownull c = if null c then " " else c |    shownull c = if null c then " " else c | ||||||
|  |    nodatelink = (RegisterR, [("q", T.unwords $ removeDates q)]) | ||||||
| 
 | 
 | ||||||
| dayToJsTimestamp :: Day -> Integer | dayToJsTimestamp :: Day -> Integer | ||||||
| dayToJsTimestamp d = | dayToJsTimestamp d = | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ module Hledger.Web.Widget.Common | |||||||
|   , writeJournalTextIfValidAndChanged |   , writeJournalTextIfValidAndChanged | ||||||
|   , journalFile404 |   , journalFile404 | ||||||
|   , transactionFragment |   , transactionFragment | ||||||
|  |   , removeDates | ||||||
|   , removeInacct |   , removeInacct | ||||||
|   , replaceInacct |   , replaceInacct | ||||||
|   ) where |   ) where | ||||||
| @ -120,6 +121,13 @@ transactionFragment j Transaction{tindex, tsourcepos} = | |||||||
|     -- or 0 if this txn has no known file (eg a forecasted txn) |     -- or 0 if this txn has no known file (eg a forecasted txn) | ||||||
|     tfileindex = maybe 0 (+1) $ elemIndex (sourceFilePath tsourcepos) (journalFilePaths j) |     tfileindex = maybe 0 (+1) $ elemIndex (sourceFilePath tsourcepos) (journalFilePaths j) | ||||||
| 
 | 
 | ||||||
|  | removeDates :: Text -> [Text] | ||||||
|  | removeDates = | ||||||
|  |     map quoteIfSpaced . | ||||||
|  |     filter (\term -> | ||||||
|  |         not $ T.isPrefixOf "date:" term || T.isPrefixOf "date2:" term) . | ||||||
|  |     Query.words'' Query.prefixes | ||||||
|  | 
 | ||||||
| removeInacct :: Text -> [Text] | removeInacct :: Text -> [Text] | ||||||
| removeInacct = | removeInacct = | ||||||
|     map quoteIfSpaced . |     map quoteIfSpaced . | ||||||
|  | |||||||
| @ -58,7 +58,10 @@ function registerChart($container, series) { | |||||||
|     { /* general chart options */ |     { /* general chart options */ | ||||||
|       xaxis: { |       xaxis: { | ||||||
|         mode: "time", |         mode: "time", | ||||||
|         timeformat: "%Y/%m/%d" |         timeformat: "%Y/%m/%d", | ||||||
|  |       }, | ||||||
|  |       selection: { | ||||||
|  |         mode: "x" | ||||||
|       }, |       }, | ||||||
|       legend: { |       legend: { | ||||||
|         position: 'sw' |         position: 'sw' | ||||||
|  | |||||||
| @ -55,5 +55,20 @@ | |||||||
|      ] |      ] | ||||||
|      var plot = registerChart($chartdiv, seriesData); |      var plot = registerChart($chartdiv, seriesData); | ||||||
|      \$chartdiv.bind("plotclick", registerChartClick); |      \$chartdiv.bind("plotclick", registerChartClick); | ||||||
|  |      plot.setSelection({ xaxis: { from: 500, to: 700 } }); | ||||||
|  |      \$chartdiv.bind("plotselected", function(event, ranges) { | ||||||
|  |        console.log("selected", ranges.xaxis.from, ranges.xaxis.to); | ||||||
|  |        var from = new Date(ranges.xaxis.from); | ||||||
|  |        var to = new Date(ranges.xaxis.to); | ||||||
|  |        var range = | ||||||
|  |          from.getFullYear() + "/" + (from.getMonth() + 1) + "/" + from.getDate() + "-" + | ||||||
|  |          to.getFullYear() + "/" + (to.getMonth() + 1) + "/" + to.getDate(); | ||||||
|  |        var baselink = "@?{nodatelink}"; | ||||||
|  |        if (baselink.endsWith("?q")) { | ||||||
|  |          document.location = baselink + "=date:" + range; | ||||||
|  |        } else { | ||||||
|  |          document.location = baselink + "%20date:" + range; | ||||||
|  |        } | ||||||
|  |      }); | ||||||
|    }; |    }; | ||||||
|  }); |  }); | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
|   #{header} |   #{header} | ||||||
| 
 | 
 | ||||||
| <div .hidden-xs> | <div .hidden-xs> | ||||||
|   ^{registerChartHtml balancelabel $ transactionsReportByCommodity items} |   ^{registerChartHtml q balancelabel $ transactionsReportByCommodity items} | ||||||
| 
 | 
 | ||||||
| <div.table-responsive> | <div.table-responsive> | ||||||
|   <table .table.table-striped.table-condensed> |   <table .table.table-striped.table-condensed> | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user