monopyly 1.4.6__py3-none-any.whl → 1.4.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. monopyly/CHANGELOG.md +187 -0
  2. monopyly/README.md +13 -2
  3. monopyly/__init__.py +19 -0
  4. monopyly/_version.py +2 -2
  5. monopyly/banking/accounts.py +1 -1
  6. monopyly/cli/apps.py +25 -4
  7. monopyly/common/forms/_forms.py +4 -1
  8. monopyly/core/actions.py +108 -21
  9. monopyly/core/blueprint.py +1 -1
  10. monopyly/core/context_processors.py +10 -0
  11. monopyly/core/errors.py +9 -0
  12. monopyly/core/filters.py +4 -2
  13. monopyly/core/routes.py +22 -9
  14. monopyly/credit/routes.py +9 -1
  15. monopyly/credit/transactions/_transactions.py +1 -1
  16. monopyly/static/css/style.css +161 -73
  17. monopyly/static/js/make-payment.js +4 -2
  18. monopyly/templates/banking/account_summaries.html +26 -12
  19. monopyly/templates/banking/account_summaries_page.html +2 -1
  20. monopyly/templates/banking/account_summary.html +7 -2
  21. monopyly/templates/banking/accounts_page.html +2 -2
  22. monopyly/templates/core/credits.html +32 -0
  23. monopyly/templates/core/errors/400.html +8 -0
  24. monopyly/templates/core/errors/401.html +8 -0
  25. monopyly/templates/core/errors/403.html +8 -0
  26. monopyly/templates/core/errors/404.html +8 -0
  27. monopyly/templates/core/errors/405.html +8 -0
  28. monopyly/templates/core/errors/408.html +8 -0
  29. monopyly/templates/core/errors/418.html +8 -0
  30. monopyly/templates/core/errors/425.html +8 -0
  31. monopyly/templates/core/errors/500.html +8 -0
  32. monopyly/templates/core/errors/error.html +31 -0
  33. monopyly/templates/{profile.html → core/profile.html} +3 -1
  34. monopyly/templates/credit/statement_summary.html +7 -2
  35. monopyly/templates/credit/statements.html +7 -6
  36. {monopyly-1.4.6.dist-info → monopyly-1.4.7.dist-info}/METADATA +14 -3
  37. {monopyly-1.4.6.dist-info → monopyly-1.4.7.dist-info}/RECORD +43 -31
  38. monopyly/templates/credits.html +0 -20
  39. /monopyly/templates/{index.html → core/index.html} +0 -0
  40. /monopyly/templates/{story.html → core/story.html} +0 -0
  41. {monopyly-1.4.6.dist-info → monopyly-1.4.7.dist-info}/WHEEL +0 -0
  42. {monopyly-1.4.6.dist-info → monopyly-1.4.7.dist-info}/entry_points.txt +0 -0
  43. {monopyly-1.4.6.dist-info → monopyly-1.4.7.dist-info}/licenses/COPYING +0 -0
  44. {monopyly-1.4.6.dist-info → monopyly-1.4.7.dist-info}/licenses/LICENSE +0 -0
@@ -7,7 +7,10 @@
7
7
  :root {
8
8
  --moneytree: #5e8f40;
9
9
  --moneytree-leaves: #85bb65;
10
+ --silver-dollar: #cccccc;
10
11
  --masthead-height: 50px;
12
+ --masthead-color: #2b2b2b;
13
+ --border-gray: #dddddd;
11
14
  }
12
15
 
13
16
  html {
@@ -94,7 +97,7 @@ header#masthead {
94
97
  border-width: 0 0 4px 3px;
95
98
  border-style: solid;
96
99
  border-color: var(--moneytree-leaves);
97
- background-color: #2b2b2b;
100
+ background-color: var(--masthead-color);
98
101
  opacity: 0.9;
99
102
  }
100
103
 
@@ -117,7 +120,7 @@ header#masthead {
117
120
  }
118
121
 
119
122
  .monopyly-logo:hover {
120
- color: #f5f5f5;
123
+ filter: brightness(0.95);
121
124
  }
122
125
 
123
126
 
@@ -161,7 +164,7 @@ footer#site-info {
161
164
  }
162
165
 
163
166
  #site-info p {
164
- color: #cccccc;
167
+ color: var(--silver-dollar);
165
168
  font-size: 9pt;
166
169
  text-align: center;
167
170
  }
@@ -193,7 +196,7 @@ aside.sidebar {
193
196
  height: 100%;
194
197
  width: 10%;
195
198
  min-width: 50px;
196
- margin-top: 50px; /* Account for content header */
199
+ margin-top: 50px; /* account for content header */
197
200
  }
198
201
 
199
202
  #content-header h1 {
@@ -201,12 +204,40 @@ aside.sidebar {
201
204
  box-sizing: border-box;
202
205
  margin: 0 0 30px 0;
203
206
  padding-bottom: 10px;
204
- border-bottom: 1px solid #dddddd;
207
+ border-bottom: 1px solid var(--border-gray);
205
208
  text-align: center;
206
209
  font-size: 2em;
207
210
  letter-spacing: -2px;
208
211
  }
209
212
 
213
+ #content-header h1.error {
214
+ text-align: left;
215
+ }
216
+
217
+
218
+ /*
219
+ * Provide styles for error pages
220
+ */
221
+ .error span.code {
222
+ margin-left: 30px;
223
+ color: var(--silver-dollar);
224
+ font-weight: 300;
225
+ letter-spacing: 1px;
226
+ }
227
+
228
+ .custom-error-content p {
229
+ font-size: 18pt;
230
+ }
231
+
232
+ .standard-error-content {
233
+ margin-top: 50px;
234
+ }
235
+
236
+ .standard-error-content p.error-description {
237
+ font-size: 12pt;
238
+ font-style: oblique;
239
+ }
240
+
210
241
 
211
242
  /*
212
243
  * General object characteristics
@@ -233,7 +264,8 @@ aside.sidebar {
233
264
  }
234
265
 
235
266
  .button-block {
236
- border: 1px solid #dddddd;
267
+ margin: 15px 0;
268
+ border: 1px solid var(--border-gray);
237
269
  border-radius: 10px;
238
270
  box-shadow: 1px 1px 3px #bbbbbb;
239
271
  background-color: #eeeeee;
@@ -241,6 +273,14 @@ aside.sidebar {
241
273
  color: inherit;
242
274
  }
243
275
 
276
+ .button-block:first-of-type {
277
+ margin-top: 0;
278
+ }
279
+
280
+ .button-block:last-of-type {
281
+ margin-bottom: 0;
282
+ }
283
+
244
284
  .button-block:hover {
245
285
  filter: brightness(0.98);
246
286
  text-decoration: none;
@@ -253,16 +293,34 @@ aside.sidebar {
253
293
  .screenshot {
254
294
  width: 100%; /* override the markdown default */
255
295
  margin: 20px 0;
256
- border: 1px solid #f3f3f3;
296
+ border: 1px solid #bbbbbb;
257
297
  box-shadow: 3px 3px 5px #bbbbbb;
258
298
  }
259
299
 
260
- .grouping {
300
+ .group-stack {
301
+ margin: 15px 10px 25px;
302
+ padding: 20px 30px;
261
303
  border-radius: 15px;
262
304
  box-shadow: 0 0 20px #eeeeee;
263
305
  background-color: #eef5eb;
264
306
  }
265
307
 
308
+ .group-stack .stack-title {
309
+ display: flex;
310
+ justify-content: space-between;
311
+ margin: 0 0 15px 0;
312
+ padding: 0 15px;
313
+ font-size: 1.1em;
314
+ letter-spacing: 1px;
315
+ text-transform: uppercase;
316
+ }
317
+
318
+ .group-stack .stack-title-info {
319
+ margin-left: 15px;
320
+ color: #888888;
321
+ font-weight: 400;
322
+ }
323
+
266
324
  .paid-notice {
267
325
  color: var(--moneytree-leaves);
268
326
  font-weight: bold;
@@ -491,7 +549,8 @@ form .autocomplete-box {
491
549
  z-index: 99;
492
550
  width: 100%;
493
551
  padding-right: 10px;
494
- border: 1px solid #cccccc;
552
+ border: 1px solid var(--silver-dollar);
553
+ box-sizing: border-box;
495
554
  background-color: white;
496
555
  }
497
556
 
@@ -502,7 +561,7 @@ form .autocomplete-box .item {
502
561
  }
503
562
 
504
563
  form .autocomplete-box .item:hover {
505
- background-color: #cccccc;
564
+ background-color: var(--silver-dollar);
506
565
  }
507
566
 
508
567
  form .autocomplete-box .item.active {
@@ -643,7 +702,7 @@ form .autocomplete-box .item.active {
643
702
  position: relative;
644
703
  right: -100%;
645
704
  width: min-content;
646
- transition: 0.4s;
705
+ transition: 0.4s 0.2s;
647
706
  }
648
707
 
649
708
  .slide-text-gadget:hover .sleeve {
@@ -653,7 +712,7 @@ form .autocomplete-box .item.active {
653
712
  .slide-text-gadget .sleeve .main {
654
713
  position: absolute;
655
714
  transform: translateX(-100%);
656
- transition: 0.2s;
715
+ transition: 0.2s 0.2s;
657
716
  }
658
717
 
659
718
  .slide-text-gadget:hover .sleeve .main {
@@ -746,8 +805,8 @@ form .autocomplete-box .item.active {
746
805
  .toggle-switch-gadget .option .slider .switch {
747
806
  position: relative;
748
807
  left: 0;
749
- width: 50%;
750
808
  height: 100%;
809
+ width: 50%;
751
810
  box-sizing: border-box;
752
811
  border-radius: 50%;
753
812
  background-color: #eeeeee;
@@ -772,7 +831,7 @@ form .autocomplete-box .item.active {
772
831
  * Style generic box tables
773
832
  */
774
833
  .box-table {
775
- border: 2px solid #dddddd;
834
+ border: 2px solid var(--border-gray);
776
835
  }
777
836
 
778
837
  .box-table .icon-button {
@@ -789,8 +848,8 @@ form .autocomplete-box .item.active {
789
848
  }
790
849
 
791
850
  .box-table .box-row {
792
- border-top: 0.5px solid #dddddd;
793
- border-bottom: 0.5px solid #dddddd;
851
+ border-top: 0.5px solid var(--border-gray);
852
+ border-bottom: 0.5px solid var(--border-gray);
794
853
  background-color: #f5f5f5;
795
854
  }
796
855
 
@@ -822,7 +881,7 @@ form .autocomplete-box .item.active {
822
881
  }
823
882
 
824
883
  #card-filter .card:hover {
825
- background-color: #cccccc;
884
+ background-color: var(--silver-dollar);
826
885
  text-decoration: none;
827
886
  }
828
887
 
@@ -878,7 +937,7 @@ form .autocomplete-box .item.active {
878
937
  position: absolute;
879
938
  height: 100%;
880
939
  width: 100%;
881
- border: 1px solid #cccccc;
940
+ border: 1px solid var(--silver-dollar);
882
941
  border-radius: 20px;
883
942
  box-shadow: 1px 1px 3px #222222;
884
943
  text-align: center;
@@ -949,7 +1008,7 @@ form .autocomplete-box .item.active {
949
1008
  }
950
1009
 
951
1010
  .credit-card.inactive .card-face.front {
952
- color: #cccccc;
1011
+ color: var(--silver-dollar);
953
1012
  filter: brightness(0.9);
954
1013
  }
955
1014
 
@@ -1088,7 +1147,7 @@ form .autocomplete-box .item.active {
1088
1147
 
1089
1148
  .transactions-table .titles,
1090
1149
  .transactions-table .transaction {
1091
- border-bottom: 1px solid #dddddd;
1150
+ border-bottom: 1px solid var(--border-gray);
1092
1151
  }
1093
1152
 
1094
1153
  .transactions-table .titles {
@@ -1612,13 +1671,12 @@ form .autocomplete-box .item.active {
1612
1671
  display: flex;
1613
1672
  flex-direction: column;
1614
1673
  flex-wrap: wrap;
1615
- align-items: center;
1674
+ align-items: stretch;
1616
1675
  gap: 10px;
1617
1676
  width: 100%;
1618
1677
  }
1619
1678
  @media screen and (max-width: 1500px) {
1620
1679
  .details .primary-info {
1621
- display: flex;
1622
1680
  align-items: center;
1623
1681
  }
1624
1682
  }
@@ -1639,14 +1697,16 @@ form .autocomplete-box .item.active {
1639
1697
  .details .summary-container {
1640
1698
  display: flex;
1641
1699
  justify-content: center;
1642
- min-width: 45%;
1700
+ width: 45%;
1701
+ min-width: 500px;
1643
1702
  margin: 0 0 0 0;
1644
1703
  }
1645
1704
 
1646
1705
  .details .summary-box {
1647
1706
  display: flex;
1648
1707
  flex-direction: column;
1649
- width: min-content;
1708
+ width: 500px;
1709
+ box-sizing: border-box;
1650
1710
  padding: 40px 50px 60px;
1651
1711
  border-radius: 25px;
1652
1712
  box-shadow: 1px 1px 5px #dddddd;
@@ -1656,7 +1716,6 @@ form .autocomplete-box .item.active {
1656
1716
  .details .summary-box .balance {
1657
1717
  display: flex;
1658
1718
  justify-content: space-between;
1659
- min-width: 325px;
1660
1719
  margin: 20px 0;
1661
1720
  font-size: 72pt;
1662
1721
  font-weight: bold;
@@ -1664,10 +1723,6 @@ form .autocomplete-box .item.active {
1664
1723
  text-align: center;
1665
1724
  }
1666
1725
 
1667
- .details .summary-box .balance .dollar-sign {
1668
- margin-right: 5px;
1669
- }
1670
-
1671
1726
  .details .summary-box .projected-balance .amount {
1672
1727
  color: var(--moneytree);
1673
1728
  font-weight: 500;
@@ -1698,12 +1753,13 @@ form .autocomplete-box .item.active {
1698
1753
  }
1699
1754
 
1700
1755
  .details .transactions-container {
1701
- width: 50%;
1756
+ width: 52.5%;
1702
1757
  order: 2;
1703
1758
  min-width: 500px;
1704
1759
  }
1705
1760
  @media screen and (max-width: 1500px) {
1706
1761
  .details .transactions-container {
1762
+ width: 50%;
1707
1763
  order: 1;
1708
1764
  margin-top: 50px;
1709
1765
  }
@@ -1820,10 +1876,10 @@ form .autocomplete-box .item.active {
1820
1876
  #homepage-block {
1821
1877
  margin-bottom: 20px;
1822
1878
  padding: 0 0 30px 0;
1823
- background-color: #dddddd;
1824
- border: 1px solid #d8d8d8;
1879
+ background-color: gainsboro;
1880
+ border: 1px solid lightgray;
1825
1881
  border-radius: 6px;
1826
- box-shadow: 2px 2px 5px #cccccc;
1882
+ box-shadow: 2px 2px 5px var(--silver-dollar);
1827
1883
  }
1828
1884
 
1829
1885
  #homepage-block h2 {
@@ -1873,7 +1929,7 @@ form .autocomplete-box .item.active {
1873
1929
  margin: 20px;
1874
1930
  padding: 50px;
1875
1931
  border: 1px solid #f5f5f5;
1876
- box-shadow: 2px 2px 5px #cccccc;
1932
+ box-shadow: 2px 2px 5px var(--silver-dollar);
1877
1933
  background-color: #fafafa;
1878
1934
  }
1879
1935
 
@@ -1961,6 +2017,38 @@ form .autocomplete-box .item.active {
1961
2017
  margin-top: 50px;
1962
2018
  }
1963
2019
 
2020
+ #readme .warning {
2021
+ padding: 15px 25px;
2022
+ border: 1px solid var(--silver-dollar);
2023
+ border-radius: 10px;
2024
+ box-shadow: 2px 2px 3px var(--silver-dollar);
2025
+ background-color: #f2d7a5;
2026
+ }
2027
+
2028
+ #readme .warning h5 {
2029
+ margin: 0 0 5px 0;
2030
+ }
2031
+
2032
+ #changelog {
2033
+ width: 80%;
2034
+ margin: 0 auto;
2035
+ }
2036
+
2037
+ #changelog h1 {
2038
+ font-size: 32pt;
2039
+ text-align: center;
2040
+ }
2041
+
2042
+ #changelog h2 {
2043
+ border-bottom: 1px solid var(--border-gray);
2044
+ }
2045
+
2046
+ #changelog a.latest-release {
2047
+ display: block;
2048
+ margin: 30px 0;
2049
+ font-size: 1.5em;
2050
+ }
2051
+
1964
2052
  #story .signature {
1965
2053
  margin-bottom: 100px;
1966
2054
  font-weight: bold;
@@ -1969,6 +2057,14 @@ form .autocomplete-box .item.active {
1969
2057
  }
1970
2058
 
1971
2059
 
2060
+ /*
2061
+ * Customization for the 'Credits' page
2062
+ */
2063
+ .affiliation-disclaimer {
2064
+ margin-top: 80px;
2065
+ }
2066
+
2067
+
1972
2068
  /*
1973
2069
  * Customization for the 'Profile' page
1974
2070
  */
@@ -2002,7 +2098,7 @@ form .autocomplete-box .item.active {
2002
2098
  flex-basis: 100%;
2003
2099
  margin-right: 0;
2004
2100
  padding-bottom: 50px;
2005
- border-bottom: 0.5px solid #dddddd;
2101
+ border-bottom: 0.5px solid var(--border-gray);
2006
2102
  }
2007
2103
 
2008
2104
  #profile .banking.profile-section .bank-list {
@@ -2025,15 +2121,9 @@ form .autocomplete-box .item.active {
2025
2121
  /*
2026
2122
  * Customization for the 'Bank Accounts' page
2027
2123
  */
2028
- #bank-container .bank-block {
2029
- margin: 25px 0;
2030
- padding: 30px;
2031
- }
2032
-
2033
- #bank-container .bank-block h3 {
2034
- margin-top: 0;
2124
+ #bank-container .bank-stack .stack-title {
2035
2125
  padding: 0 30px;
2036
- /*text-align: center;*/
2126
+ text-align: left;
2037
2127
  }
2038
2128
 
2039
2129
  #bank-container .account-block {
@@ -2068,7 +2158,7 @@ form .autocomplete-box .item.active {
2068
2158
  #account-type-container {
2069
2159
  width: 30%;
2070
2160
  min-width: 350px;
2071
- border: 2px solid #dddddd;
2161
+ border: 2px solid var(--border-gray);
2072
2162
  background-color: #f5f5f5;
2073
2163
  }
2074
2164
 
@@ -2078,13 +2168,13 @@ form .autocomplete-box .item.active {
2078
2168
  }
2079
2169
 
2080
2170
  #account-type-container .account-types {
2081
- border-top: 2px solid #dddddd;
2171
+ border-top: 2px solid var(--border-gray);
2082
2172
  }
2083
2173
 
2084
2174
  #account-type-container .account-type {
2085
2175
  padding: 10px;
2086
- border-top: 0.5px solid #dddddd;
2087
- border-bottom: 0.5px solid #dddddd;
2176
+ border-top: 0.5px solid var(--border-gray);
2177
+ border-bottom: 0.5px solid var(--border-gray);
2088
2178
  }
2089
2179
 
2090
2180
 
@@ -2105,10 +2195,22 @@ form#bank-account .hidden {
2105
2195
  align-items: center
2106
2196
  }
2107
2197
 
2108
- #bank-account-summaries-container .bank {
2109
- margin: 0 0 10px;
2198
+ #bank-account-summaries-container h2.bank {
2199
+ margin: 0 0 5px;
2200
+ font-size: 1.6em;
2201
+ letter-spacing: 1px;
2202
+ text-transform: uppercase;
2110
2203
  text-align: center;
2204
+ }
2205
+
2206
+ #bank-account-summaries-container h3.balance {
2207
+ margin: 0 0 10px;
2208
+ color: gray;
2209
+ font-size: 1em;
2210
+ font-weight: 300;
2111
2211
  text-transform: uppercase;
2212
+ text-align: center;
2213
+ letter-spacing: 1px;
2112
2214
  }
2113
2215
 
2114
2216
  #bank-account-summaries {
@@ -2117,29 +2219,21 @@ form#bank-account .hidden {
2117
2219
  width: 100%;
2118
2220
  }
2119
2221
 
2120
- #bank-account-summaries .account-type-block {
2222
+ #bank-account-summaries .account-type-stack {
2121
2223
  display: flex;
2122
2224
  flex-direction: column;
2123
- width: 50%;
2225
+ width: 60%;
2124
2226
  min-width: 400px;
2125
- margin: 10px auto;
2126
- padding: 25px;
2227
+ margin: 15px auto 25px;
2127
2228
  }
2128
2229
 
2129
2230
  #bank-account-summaries .account-block {
2130
2231
  display: flex;
2131
2232
  justify-content: space-between;
2132
2233
  align-items: center;
2133
- width: 100%;
2134
- box-sizing: border-box;
2135
- margin-bottom: 15px;
2136
2234
  padding: 30px 10%;
2137
2235
  }
2138
2236
 
2139
- #bank-account-summaries a.account-block:last-of-type {
2140
- margin-bottom: 0;
2141
- }
2142
-
2143
2237
  #bank-account-summaries .account-block .title {
2144
2238
  font-size: 16pt;
2145
2239
  }
@@ -2408,27 +2502,21 @@ form#card #statement-due-day-field {
2408
2502
  justify-content: space-around;
2409
2503
  }
2410
2504
 
2411
- #credit-statements .card-column {
2505
+ #credit-statements .card-stack {
2412
2506
  display: flex;
2413
2507
  flex-direction: column;
2414
2508
  height: min-content;
2415
- margin: 15px 10px;
2416
- padding: 20px;
2417
- text-transform: uppercase;
2418
- text-align: center;
2419
- font-size: 1.1em;
2420
2509
  }
2421
2510
 
2422
- #credit-statements-container .card-column .digits {
2423
- color: #888888;
2511
+ #credit-statements .card-stack .stack-title {
2512
+ justify-content: center;
2424
2513
  }
2425
2514
 
2426
2515
  #credit-statements .statement-block {
2427
2516
  display: flex;
2428
- align-items: center;
2429
2517
  justify-content: space-between;
2518
+ align-items: center;
2430
2519
  width: 275px;
2431
- margin: 15px;
2432
2520
  padding: 45px 50px;
2433
2521
  }
2434
2522
 
@@ -2511,7 +2599,7 @@ form#pay input {
2511
2599
  }
2512
2600
 
2513
2601
  form#pay .form-inputs {
2514
- border: 1px solid #cccccc;
2602
+ border: 1px solid var(--silver-dollar);
2515
2603
  border-radius: inherit;
2516
2604
  }
2517
2605
 
@@ -2677,7 +2765,7 @@ form#credit-transaction .merchant-field {
2677
2765
  border-radius: 20px;
2678
2766
  text-align: center;
2679
2767
  outline: none;
2680
- caret-color: #cccccc;
2768
+ caret-color: var(--silver-dollar);
2681
2769
  transition: border 0.1s ease;
2682
2770
  }
2683
2771
 
@@ -2733,6 +2821,6 @@ form#credit-transaction .merchant-field {
2733
2821
  #transaction-tags .subtags {
2734
2822
  margin: 0 0 0 10px;
2735
2823
  padding-left: 40px;
2736
- border-left: 1px solid #dddddd;
2824
+ border-left: 1px solid var(--border-gray);
2737
2825
  }
2738
2826
 
@@ -17,7 +17,8 @@ import { executeAjaxRequest } from './modules/ajax.js';
17
17
 
18
18
  (function() {
19
19
 
20
- const $container = $('#statement-summary-container');
20
+ const $summaryContainer = $('#statement-summary-container');
21
+ const $transactionContainer = $('#statement-transactions-container');
21
22
  prepareForm();
22
23
 
23
24
  function prepareForm() {
@@ -82,7 +83,8 @@ import { executeAjaxRequest } from './modules/ajax.js';
82
83
  function updateStatementPaymentAjaxRequest(rawData) {
83
84
  // Return the newly updated statement payment info
84
85
  function updateAction(response) {
85
- $container.html(response)
86
+ $summaryContainer.html(response[0]);
87
+ $transactionContainer.html(response[1]);
86
88
  // Prepare the form again (in case statement is not paid in full)
87
89
  prepareForm();
88
90
  }
@@ -1,21 +1,35 @@
1
1
  <div id="bank-account-summaries">
2
2
 
3
- {% for account_type in type_accounts %}
4
- <div class="account-type-block grouping">
3
+ {% for account_type, accounts in type_accounts|items %}
4
+ {# Use a scoped variable so that the accounts generator can be reused #}
5
+ {% with accounts = accounts|list %}
5
6
 
6
- {% for account in type_accounts[account_type]|sort(attribute='last_four_digits') %}
7
+ <div class="account-type-stack group-stack">
7
8
 
8
- <a class="account-block button-block" href="{{ url_for('banking.load_account_details', account_id=account.id) }}">
9
- <div class="title">
10
- <span class="digits">{{ account.last_four_digits }}</span>
11
- <b>{{ account.account_type.type_name }}</b>
12
- </div>
13
- <div class="balance">${{ account.balance|currency }}</div>
14
- </a>
9
+ <h2 class="stack-title">
10
+ {{ account_type.type_name }}
11
+ {% if accounts|length> 1 %}
12
+ <span class="stack-title-info">${{ accounts|sum(attribute='balance')|currency }}</span>
13
+ {% endif %}
14
+ </h2>
15
15
 
16
- {% endfor %}
16
+ <div class="account-blocks">
17
+ {% for account in accounts|sort(attribute='last_four_digits') %}
17
18
 
18
- </div>
19
+ <a class="account-block button-block" href="{{ url_for('banking.load_account_details', account_id=account.id) }}">
20
+ <div class="title">
21
+ <span class="digits">{{ account.last_four_digits }}</span>
22
+ <b>{{ account.account_type.type_name }}</b>
23
+ </div>
24
+ <div class="balance">${{ account.balance|currency }}</div>
25
+ </a>
26
+
27
+ {% endfor %}
28
+ </div>
29
+
30
+ </div>
31
+
32
+ {% endwith %}
19
33
  {% endfor %}
20
34
 
21
35
  </div>
@@ -44,7 +44,8 @@
44
44
  {% block content %}
45
45
 
46
46
  <div id="bank-account-summaries-container">
47
- <h2 class="bank">{{ bank.bank_name }} (${{ bank_balance|currency }})</h2>
47
+ <h2 class="bank">{{ bank.bank_name }}</h2>
48
+ <h3 class="balance">${{ bank_balance|currency }}</h3>
48
49
 
49
50
  {% include 'banking/account_summaries.html' %}
50
51
 
@@ -9,8 +9,13 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div class="dollar-sign">$</div>
13
- <div>{{ account.balance|currency }}</div>
12
+ {% with account_balance = account.balance|currency %}
13
+ {% set vbox_width = calculate_summary_balance_width(account_balance) %}
14
+ <svg viewBox="0 0 {{ vbox_width }} 100">
15
+ <text x="0" y="75" fill="currentColor">$</text>
16
+ <text x="75" y="75" fill="currentColor">{{ account_balance }}</text>
17
+ </svg>
18
+ {% endwith %}
14
19
  </div>
15
20
 
16
21
  {% if account.balance != account.projected_balance %}
@@ -19,8 +19,8 @@
19
19
  {% set bank_accounts = bank.bank_accounts %}
20
20
  {% if bank_accounts %}
21
21
 
22
- <div class="bank-block grouping">
23
- <h3>{{ bank.bank_name }}</h3>
22
+ <div class="bank-stack group-stack">
23
+ <h2 class="stack-title">{{ bank.bank_name }}</h2>
24
24
 
25
25
  <div class="account-blocks box-table">
26
26
  {% for account in bank_accounts %}
@@ -0,0 +1,32 @@
1
+ {% extends "layout.html" %}
2
+
3
+ {% block title %}
4
+ Credits
5
+ {% endblock %}
6
+
7
+ {% block header %}
8
+ <h1>Credits</h1>
9
+ {% endblock %}
10
+
11
+ {% block content %}
12
+
13
+ <div class="credits">
14
+
15
+ <h3>Image Credits</h3>
16
+ <p>
17
+ The chain link icon was adapted from <a href="https://commons.wikimedia.org/wiki/File:Chain_link_icon.png">Wikipedia Commons</a>.
18
+ The original image was created by user Mdowdell and published under the <a href="https://creativecommons.org/licenses/by-sa/3.0/legalcode">CC BY-SA 3.0 License</a>.
19
+ </p>
20
+
21
+ </div>
22
+
23
+ <div class="affiliation-disclaimer">
24
+
25
+ <h3>Disclaimer</h3>
26
+ <p>
27
+ At risk of stating the obvious, given that this is a <b>homemade personal finance manager</b>, the <i>Monopyly</i> app is in no way affiliated, associated, authorized, endorsed by, or in any way officially connected with Hasbro, the present publisher and trademark holder of the board game MONOPOLY.
28
+ </p>
29
+
30
+ </div>
31
+
32
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>Nice try, but something went wrong in that request.</p>
7
+
8
+ {% endblock %}