_TOK_STRUCTURED = 'structured'
_PAGENAME_EDIT_RAW = f'{_PREFIX_EDIT}{_TOK_RAW}'
_PAGENAME_EDIT_STRUCTURED = f'{_PREFIX_EDIT}{_TOK_STRUCTURED}'
-_PAGENAME_LEDGER_RAW = f'{_PREFIX_LEDGER}{_TOK_RAW}'
+PAGENAME_LEDGER_RAW = f'{_PREFIX_LEDGER}{_TOK_RAW}'
PAGENAME_LEDGER_STRUCTURED = f'{_PREFIX_LEDGER}{_TOK_STRUCTURED}'
elif self.pagename.startswith(_PREFIX_EDIT):
self.get_edit(ctx, self.pagename == _PAGENAME_EDIT_RAW)
elif self.pagename.startswith(_PREFIX_LEDGER):
- self.get_ledger(ctx, self.pagename == _PAGENAME_LEDGER_RAW)
+ self.get_ledger(ctx, self.pagename == PAGENAME_LEDGER_RAW)
else:
self.get_ledger(ctx, False)
### end = time_ns()
ctx['has_redundant_empty_lines'] =\
self.server.ledger.has_redundant_empty_lines
self._send_rendered(
- _PAGENAME_LEDGER_RAW if raw else PAGENAME_LEDGER_STRUCTURED, ctx)
+ PAGENAME_LEDGER_RAW if raw else PAGENAME_LEDGER_STRUCTURED, ctx)
booking_lines += [_TransferLine.from_dat(dat_line)]
else: # enter new gap -> ready to start next block
if booking_lines:
- ### i_block = i_block.next = DatBlock(_Booking(booking_lines))
i_block.next = DatBlock(_Booking(booking_lines))
i_block = i_block.next
- ### booking_lines.clear()
- booking_lines = [] # .clear()
+ booking_lines = []
i_block.gap.add([_GapLine.from_dat(dat_line)])
self.last_save_hash = self._hash_dat_lines()
from jinja2 import (Environment as JinjaEnv,
FileSystemLoader as JinjaFSLoader)
# ourselves
-from ledgplom.http import PAGENAME_LEDGER_STRUCTURED, PATH_TEMPLATES
+from ledgplom.http import (PAGENAME_LEDGER_RAW, PAGENAME_LEDGER_STRUCTURED,
+ PATH_TEMPLATES)
from ledgplom.ledger import Ledger
_EXT_DAT = '.dat'
-_EXT_HTML = '.html'
_PATH_TESTS = Path('tests')
print(f'{msg_prefix} FAILED – {abort_msg}')
sys_exit(1)
- tmpl = JinjaEnv(loader=JinjaFSLoader(PATH_TEMPLATES),
- autoescape=True,
- trim_blocks=True,
- ).get_template(f'{PAGENAME_LEDGER_STRUCTURED}.tmpl')
+ jinja = JinjaEnv(loader=JinjaFSLoader(PATH_TEMPLATES),
+ autoescape=True,
+ trim_blocks=True)
+ templates = {item: jinja.get_template(f'{item}.tmpl')
+ for item in (PAGENAME_LEDGER_RAW, PAGENAME_LEDGER_STRUCTURED)}
for path in [p for p in _PATH_TESTS.iterdir()
if p.parts[-1].endswith(_EXT_DAT)]:
- with Path(str(path)[:-len(_EXT_DAT)] + _EXT_HTML
- ).open('r', encoding='utf8') as f:
- lines_expected = [line.rstrip('\n') for line in f.readlines()]
- lines_rendered = tmpl.render(blocks=Ledger(path).blocks).split('\n')
- msg_prefix = f'test for {path}:'
- for idx0, line in enumerate(lines_rendered):
- idx1 = idx0 + 1
- abort_msg = ''
- if idx1 > len(lines_expected):
- abort_msg = f'only {idx0} lines expected'
- elif lines_expected[idx0] != line:
- abort_msg = f'line differs, expected: [{lines_expected[idx0]}]'
- if abort_msg:
- fail(abort_msg, msg_prefix, idx1)
- if len(lines_expected) > idx1:
- fail(f'more lines expected line {idx1}', msg_prefix, None)
- print(f'{msg_prefix} passed')
+ for key, template in templates.items():
+ test_path = Path(str(path)[:-len(_EXT_DAT)] + f'.{key}')
+ if not test_path.exists():
+ continue
+ with test_path.open('r', encoding='utf8') as f:
+ lines_expected = [line.rstrip('\n')
+ for line in f.readlines()]
+ lines_rendered = template.render(blocks=Ledger(path).blocks
+ ).split('\n')
+ msg_prefix = f'test for {test_path}:'
+ for idx0, line in enumerate(lines_rendered):
+ idx1 = idx0 + 1
+ abort_msg = ''
+ if idx1 > len(lines_expected):
+ abort_msg = f'only {idx0} lines expected'
+ elif lines_expected[idx0] != line:
+ abort_msg = ('line differs, expected: '
+ f'[{lines_expected[idx0]}]')
+ if abort_msg:
+ fail(abort_msg, msg_prefix, idx1)
+ if len(lines_expected) > idx1:
+ fail(f'more lines expected line {idx1}', msg_prefix, None)
+ print(f'{msg_prefix} passed')
{{ macros.ledger_empty_lines_fix(has_redundant_empty_lines) -}}
<table class="alternating">
{% for block in blocks %}
- {{ macros.ledger_block_columns('raw', block) }}
+{{ macros.ledger_block_columns('raw', block) -}}
{##}{% for line in block.lines %}
- <tr>
- <td class="{{ 'critical' if line.errors }}">{{line.raw}} </td>
- </tr>
+ <tr>{# -#}
+ <td{{ ' class="critical"' if line.errors }}>
+ {{-line.raw}} {# -#}
+ </td>{# -#}
+ </tr>
{##}{% endfor %}
{% endfor %}
</table>
{{ macros.ledger_block_columns('structured', block) -}}
{##}{% if block.booking %}
<tr>
- <td colspan=3 class="{{ 'critical'
- if block.booking.intro_line.errors }}">
+ <td colspan=3{{ ' class="critical"'
+ if block.booking.intro_line.errors }}>
{{- block.booking.date }} {{ block.booking.target -}}
</td>
<td>{{ block.booking.intro_line.comment }}</td>
<td class="currency{{ ' critical' if line.errors }}">
{{- macros.currency_short(line.currency) -}}
</td>
- <td class="{{ 'critical' if line.errors }}">
+ <td{{ ' class="critical"' if line.errors }}>
{{- line.account -}}
</td>
<td>{{ line.comment }}</td>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<script>
-</script>
-<style>
-html {
- scroll-padding-top: 2em;
-}
-body {
- background: #ffffff;
- font-family: sans-serif;
- text-align: left;
- margin: 0;
- padding: 0;
-}
-#header {
- background: #ffffff;
- position: sticky;
- top: 0;
- padding-left: 0.5em;
- padding-bottom: 0.25em;
- border-bottom: 1px solid black;
-}
-table.alternating > tbody > tr:nth-child(odd) {
- background-color: #dcdcdc;
-}
-table.alternating > tbody > tr:nth-child(even) {
- background: #ffffff;
-}
-td {
- vertical-align: top;
-}
-.critical {
- background: #ff6666 !important;
-}
-td.block_column {
- background: #ffffff;
-}
-td.amount {
- text-align: right;
-}
-td.amount,
-td.currency {
- font-family: monospace;
- font-size: 1.25em;
-}
-</style>
-</head>
-<body>
-<div id="header">
- <form action="" method="POST">
- <span class="disable_on_change">
- ledger <a href="/ledger_structured">structured</a>
- / <a href="/ledger_raw">raw</a>
- · <a href="/balance">balance</a>
- · <input type="submit"name="file_load" value="reload" />
- </span>
- </form>
-</div>
-<form action="/ledger_structured" method="POST">
-<table class="alternating">
- <tr></tr><!-- keep the background-color alternation in proper order -->
- <tr id="block_0">
- <td rowspan=2 class="block_column">
- <input type="submit"
- name="ledger_moveup_0"
- value="^"
- disabled
- />
- <br />
- <input type="submit"
- name="ledger_movedown_0"
- value="v"
- disabled
- />
- <br />
- <input type="submit" name="ledger_copy_0" value="C"/>
- </td>
- <td rowspan=2 class="block_column">
- [<a href="#block_0">#</a>]<br />
- [<a href="/balance?up_incl=0">b</a>]<br />
- [<a href="/edit_structured/0">e</a>]
- </td>
- </tr>
- <tr>
- <td colspan=4> </td>
- </tr>
-</table>
-<input type="submit" name="add_booking" value="add booking" />
-</form>
-</body>
-</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+ scroll-padding-top: 2em;
+}
+body {
+ background: #ffffff;
+ font-family: sans-serif;
+ text-align: left;
+ margin: 0;
+ padding: 0;
+}
+#header {
+ background: #ffffff;
+ position: sticky;
+ top: 0;
+ padding-left: 0.5em;
+ padding-bottom: 0.25em;
+ border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+ background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+ background: #ffffff;
+}
+td {
+ vertical-align: top;
+}
+.critical {
+ background: #ff6666 !important;
+}
+td.block_column {
+ background: #ffffff;
+}
+table {
+ font-family: monospace;
+}
+</style>
+</head>
+<body>
+<div id="header">
+ <form action="" method="POST">
+ <span class="disable_on_change">
+ ledger <a href="/ledger_structured">structured</a>
+ / <a href="/ledger_raw">raw</a>
+ · <a href="/balance">balance</a>
+ · <input type="submit"name="file_load" value="reload" />
+ </span>
+ </form>
+</div>
+<form action="/ledger_raw" method="POST">
+<table class="alternating">
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_0">
+ <td rowspan=2 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_0"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_0"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_0" value="C"/>
+ </td>
+ <td rowspan=2 class="block_column">
+ [<a href="#block_0">#</a>]<br />
+ [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/edit_raw/0">e</a>]
+ </td>
+ </tr>
+ <tr><td> </td></tr>
+</table>
+</form>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+ scroll-padding-top: 2em;
+}
+body {
+ background: #ffffff;
+ font-family: sans-serif;
+ text-align: left;
+ margin: 0;
+ padding: 0;
+}
+#header {
+ background: #ffffff;
+ position: sticky;
+ top: 0;
+ padding-left: 0.5em;
+ padding-bottom: 0.25em;
+ border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+ background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+ background: #ffffff;
+}
+td {
+ vertical-align: top;
+}
+.critical {
+ background: #ff6666 !important;
+}
+td.block_column {
+ background: #ffffff;
+}
+td.amount {
+ text-align: right;
+}
+td.amount,
+td.currency {
+ font-family: monospace;
+ font-size: 1.25em;
+}
+</style>
+</head>
+<body>
+<div id="header">
+ <form action="" method="POST">
+ <span class="disable_on_change">
+ ledger <a href="/ledger_structured">structured</a>
+ / <a href="/ledger_raw">raw</a>
+ · <a href="/balance">balance</a>
+ · <input type="submit"name="file_load" value="reload" />
+ </span>
+ </form>
+</div>
+<form action="/ledger_structured" method="POST">
+<table class="alternating">
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_0">
+ <td rowspan=2 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_0"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_0"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_0" value="C"/>
+ </td>
+ <td rowspan=2 class="block_column">
+ [<a href="#block_0">#</a>]<br />
+ [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/edit_structured/0">e</a>]
+ </td>
+ </tr>
+ <tr>
+ <td colspan=4> </td>
+ </tr>
+</table>
+<input type="submit" name="add_booking" value="add booking" />
+</form>
+</body>
+</html>
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset="UTF-8">
-<script>
-</script>
-<style>
-html {
- scroll-padding-top: 2em;
-}
-body {
- background: #ffffff;
- font-family: sans-serif;
- text-align: left;
- margin: 0;
- padding: 0;
-}
-#header {
- background: #ffffff;
- position: sticky;
- top: 0;
- padding-left: 0.5em;
- padding-bottom: 0.25em;
- border-bottom: 1px solid black;
-}
-table.alternating > tbody > tr:nth-child(odd) {
- background-color: #dcdcdc;
-}
-table.alternating > tbody > tr:nth-child(even) {
- background: #ffffff;
-}
-td {
- vertical-align: top;
-}
-.critical {
- background: #ff6666 !important;
-}
-td.block_column {
- background: #ffffff;
-}
-td.amount {
- text-align: right;
-}
-td.amount,
-td.currency {
- font-family: monospace;
- font-size: 1.25em;
-}
-</style>
-</head>
-<body>
-<div id="header">
- <form action="" method="POST">
- <span class="disable_on_change">
- ledger <a href="/ledger_structured">structured</a>
- / <a href="/ledger_raw">raw</a>
- · <a href="/balance">balance</a>
- · <input type="submit"name="file_load" value="reload" />
- </span>
- </form>
-</div>
-<form action="/ledger_structured" method="POST">
-<table class="alternating">
- <tr></tr><!-- keep the background-color alternation in proper order -->
- <tr id="block_0">
- <td rowspan=1 class="block_column">
- <input type="submit"
- name="ledger_moveup_0"
- value="^"
- disabled
- />
- <br />
- <input type="submit"
- name="ledger_movedown_0"
- value="v"
- disabled
- />
- <br />
- <input type="submit" name="ledger_copy_0" value="C"/>
- </td>
- <td rowspan=1 class="block_column">
- [<a href="#block_0">#</a>]<br />
- [<a href="/balance?up_incl=0">b</a>]<br />
- [<a href="/edit_structured/0">e</a>]
- </td>
- </tr>
- <tr></tr><!-- keep the background-color alternation in proper order -->
- <tr id="block_1">
- <td rowspan=5 class="block_column">
- <input type="submit"
- name="ledger_moveup_1"
- value="^"
- disabled
- />
- <br />
- <input type="submit"
- name="ledger_movedown_1"
- value="v"
- disabled
- />
- <br />
- <input type="submit" name="ledger_copy_1" value="C"/>
- </td>
- <td rowspan=5 class="block_column">
- [<a href="#block_1">#</a>]<br />
- [<a href="/balance?up_incl=1">b</a>]<br />
- [<a href="/edit_structured/1">e</a>]
- </td>
- </tr>
- <tr>
- <td colspan=3 class="">2001-01-01 test</td>
- <td>foo</td>
- </tr>
- <tr>
- <td class="amount">10.00</td>
- <td class="currency">€</td>
- <td class="">foo</td>
- <td></td>
- </tr>
- <tr>
- <td class="amount">-10.00</td>
- <td class="currency">€</td>
- <td class="">bar</td>
- <td></td>
- </tr>
- <tr>
- <td colspan=4> </td>
- </tr>
- <tr></tr><!-- keep the background-color alternation in proper order -->
- <tr id="block_2">
- <td rowspan=6 class="block_column">
- <input type="submit"
- name="ledger_moveup_2"
- value="^"
- disabled
- />
- <br />
- <input type="submit"
- name="ledger_movedown_2"
- value="v"
- />
- <br />
- <input type="submit" name="ledger_copy_2" value="C"/>
- </td>
- <td rowspan=6 class="block_column">
- [<a href="#block_2">#</a>]<br />
- [<a href="/balance?up_incl=2">b</a>]<br />
- [<a href="/edit_structured/2">e</a>]
- </td>
- </tr>
- <tr>
- <td colspan=3 class="">2001-01-02 test</td>
- <td></td>
- </tr>
- <tr>
- <td class="amount">-10.00</td>
- <td class="currency">€</td>
- <td class="">bar</td>
- <td>bar</td>
- </tr>
- <tr>
- <td class="amount">10.00</td>
- <td class="currency">€</td>
- <td class="">baz</td>
- <td></td>
- </tr>
- <tr>
- <td colspan=4> </td>
- </tr>
- <tr>
- <td colspan=4> </td>
- </tr>
- <tr></tr><!-- keep the background-color alternation in proper order -->
- <tr id="block_3">
- <td rowspan=5 class="block_column">
- <input type="submit"
- name="ledger_moveup_3"
- value="^"
- />
- <br />
- <input type="submit"
- name="ledger_movedown_3"
- value="v"
- disabled
- />
- <br />
- <input type="submit" name="ledger_copy_3" value="C"/>
- </td>
- <td rowspan=5 class="block_column">
- [<a href="#block_3">#</a>]<br />
- [<a href="/balance?up_incl=3">b</a>]<br />
- [<a href="/edit_structured/3">e</a>]
- </td>
- </tr>
- <tr>
- <td colspan=3 class="">2001-01-02 test</td>
- <td></td>
- </tr>
- <tr>
- <td class="amount">20.00</td>
- <td class="currency">€</td>
- <td class="">bar</td>
- <td></td>
- </tr>
- <tr>
- <td class="amount">-20.00</td>
- <td class="currency">€</td>
- <td class="">baz</td>
- <td>baz</td>
- </tr>
- <tr>
- <td colspan=4> </td>
- </tr>
- <tr></tr><!-- keep the background-color alternation in proper order -->
- <tr id="block_4">
- <td rowspan=5 class="block_column critical">
- <input type="submit"
- name="ledger_moveup_4"
- value="^"
- disabled
- />
- <br />
- <input type="submit"
- name="ledger_movedown_4"
- value="v"
- disabled
- />
- <br />
- <input type="submit" name="ledger_copy_4" value="C"/>
- </td>
- <td rowspan=5 class="block_column">
- [<a href="#block_4">#</a>]<br />
- [<a href="/balance?up_incl=4">b</a>]<br />
- [<a href="/edit_structured/4">e</a>]
- </td>
- </tr>
- <tr>
- <td colspan=3 class="">2001-01-01 test</td>
- <td></td>
- </tr>
- <tr>
- <td class="amount">10.00</td>
- <td class="currency">€</td>
- <td class="">foo</td>
- <td></td>
- </tr>
- <tr>
- <td class="amount">-10.00</td>
- <td class="currency">€</td>
- <td class="">bar</td>
- <td></td>
- </tr>
- <tr>
- <td colspan=4> </td>
- </tr>
-</table>
-<input type="submit" name="add_booking" value="add booking" />
-</form>
-</body>
-</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+ scroll-padding-top: 2em;
+}
+body {
+ background: #ffffff;
+ font-family: sans-serif;
+ text-align: left;
+ margin: 0;
+ padding: 0;
+}
+#header {
+ background: #ffffff;
+ position: sticky;
+ top: 0;
+ padding-left: 0.5em;
+ padding-bottom: 0.25em;
+ border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+ background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+ background: #ffffff;
+}
+td {
+ vertical-align: top;
+}
+.critical {
+ background: #ff6666 !important;
+}
+td.block_column {
+ background: #ffffff;
+}
+table {
+ font-family: monospace;
+}
+</style>
+</head>
+<body>
+<div id="header">
+ <form action="" method="POST">
+ <span class="disable_on_change">
+ ledger <a href="/ledger_structured">structured</a>
+ / <a href="/ledger_raw">raw</a>
+ · <a href="/balance">balance</a>
+ · <input type="submit"name="file_load" value="reload" />
+ </span>
+ </form>
+</div>
+<form action="/ledger_raw" method="POST">
+<table class="alternating">
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_0">
+ <td rowspan=1 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_0"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_0"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_0" value="C"/>
+ </td>
+ <td rowspan=1 class="block_column">
+ [<a href="#block_0">#</a>]<br />
+ [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/edit_raw/0">e</a>]
+ </td>
+ </tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_1">
+ <td rowspan=5 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_1"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_1"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_1" value="C"/>
+ </td>
+ <td rowspan=5 class="block_column">
+ [<a href="#block_1">#</a>]<br />
+ [<a href="/balance?up_incl=1">b</a>]<br />
+ [<a href="/edit_raw/1">e</a>]
+ </td>
+ </tr>
+ <tr><td>2001-01-01 test ; foo </td></tr>
+ <tr><td> foo 10 € </td></tr>
+ <tr><td> bar -10 € </td></tr>
+ <tr><td> </td></tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_2">
+ <td rowspan=6 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_2"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_2"
+ value="v"
+ />
+ <br />
+ <input type="submit" name="ledger_copy_2" value="C"/>
+ </td>
+ <td rowspan=6 class="block_column">
+ [<a href="#block_2">#</a>]<br />
+ [<a href="/balance?up_incl=2">b</a>]<br />
+ [<a href="/edit_raw/2">e</a>]
+ </td>
+ </tr>
+ <tr><td>2001-01-02 test </td></tr>
+ <tr><td> bar -10 € ; bar </td></tr>
+ <tr><td> baz 10 € </td></tr>
+ <tr><td> </td></tr>
+ <tr><td> </td></tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_3">
+ <td rowspan=5 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_3"
+ value="^"
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_3"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_3" value="C"/>
+ </td>
+ <td rowspan=5 class="block_column">
+ [<a href="#block_3">#</a>]<br />
+ [<a href="/balance?up_incl=3">b</a>]<br />
+ [<a href="/edit_raw/3">e</a>]
+ </td>
+ </tr>
+ <tr><td>2001-01-02 test </td></tr>
+ <tr><td> bar 20 € </td></tr>
+ <tr><td> baz -20 € ; baz </td></tr>
+ <tr><td> </td></tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_4">
+ <td rowspan=5 class="block_column critical">
+ <input type="submit"
+ name="ledger_moveup_4"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_4"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_4" value="C"/>
+ </td>
+ <td rowspan=5 class="block_column">
+ [<a href="#block_4">#</a>]<br />
+ [<a href="/balance?up_incl=4">b</a>]<br />
+ [<a href="/edit_raw/4">e</a>]
+ </td>
+ </tr>
+ <tr><td>2001-01-01 test </td></tr>
+ <tr><td> foo 10 € </td></tr>
+ <tr><td> bar -10 € </td></tr>
+ <tr><td> </td></tr>
+</table>
+</form>
+</body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="UTF-8">
+<script>
+</script>
+<style>
+html {
+ scroll-padding-top: 2em;
+}
+body {
+ background: #ffffff;
+ font-family: sans-serif;
+ text-align: left;
+ margin: 0;
+ padding: 0;
+}
+#header {
+ background: #ffffff;
+ position: sticky;
+ top: 0;
+ padding-left: 0.5em;
+ padding-bottom: 0.25em;
+ border-bottom: 1px solid black;
+}
+table.alternating > tbody > tr:nth-child(odd) {
+ background-color: #dcdcdc;
+}
+table.alternating > tbody > tr:nth-child(even) {
+ background: #ffffff;
+}
+td {
+ vertical-align: top;
+}
+.critical {
+ background: #ff6666 !important;
+}
+td.block_column {
+ background: #ffffff;
+}
+td.amount {
+ text-align: right;
+}
+td.amount,
+td.currency {
+ font-family: monospace;
+ font-size: 1.25em;
+}
+</style>
+</head>
+<body>
+<div id="header">
+ <form action="" method="POST">
+ <span class="disable_on_change">
+ ledger <a href="/ledger_structured">structured</a>
+ / <a href="/ledger_raw">raw</a>
+ · <a href="/balance">balance</a>
+ · <input type="submit"name="file_load" value="reload" />
+ </span>
+ </form>
+</div>
+<form action="/ledger_structured" method="POST">
+<table class="alternating">
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_0">
+ <td rowspan=1 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_0"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_0"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_0" value="C"/>
+ </td>
+ <td rowspan=1 class="block_column">
+ [<a href="#block_0">#</a>]<br />
+ [<a href="/balance?up_incl=0">b</a>]<br />
+ [<a href="/edit_structured/0">e</a>]
+ </td>
+ </tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_1">
+ <td rowspan=5 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_1"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_1"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_1" value="C"/>
+ </td>
+ <td rowspan=5 class="block_column">
+ [<a href="#block_1">#</a>]<br />
+ [<a href="/balance?up_incl=1">b</a>]<br />
+ [<a href="/edit_structured/1">e</a>]
+ </td>
+ </tr>
+ <tr>
+ <td colspan=3>2001-01-01 test</td>
+ <td>foo</td>
+ </tr>
+ <tr>
+ <td class="amount">10.00</td>
+ <td class="currency">€</td>
+ <td>foo</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="amount">-10.00</td>
+ <td class="currency">€</td>
+ <td>bar</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td colspan=4> </td>
+ </tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_2">
+ <td rowspan=6 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_2"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_2"
+ value="v"
+ />
+ <br />
+ <input type="submit" name="ledger_copy_2" value="C"/>
+ </td>
+ <td rowspan=6 class="block_column">
+ [<a href="#block_2">#</a>]<br />
+ [<a href="/balance?up_incl=2">b</a>]<br />
+ [<a href="/edit_structured/2">e</a>]
+ </td>
+ </tr>
+ <tr>
+ <td colspan=3>2001-01-02 test</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="amount">-10.00</td>
+ <td class="currency">€</td>
+ <td>bar</td>
+ <td>bar</td>
+ </tr>
+ <tr>
+ <td class="amount">10.00</td>
+ <td class="currency">€</td>
+ <td>baz</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td colspan=4> </td>
+ </tr>
+ <tr>
+ <td colspan=4> </td>
+ </tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_3">
+ <td rowspan=5 class="block_column">
+ <input type="submit"
+ name="ledger_moveup_3"
+ value="^"
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_3"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_3" value="C"/>
+ </td>
+ <td rowspan=5 class="block_column">
+ [<a href="#block_3">#</a>]<br />
+ [<a href="/balance?up_incl=3">b</a>]<br />
+ [<a href="/edit_structured/3">e</a>]
+ </td>
+ </tr>
+ <tr>
+ <td colspan=3>2001-01-02 test</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="amount">20.00</td>
+ <td class="currency">€</td>
+ <td>bar</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="amount">-20.00</td>
+ <td class="currency">€</td>
+ <td>baz</td>
+ <td>baz</td>
+ </tr>
+ <tr>
+ <td colspan=4> </td>
+ </tr>
+ <tr></tr><!-- keep the background-color alternation in proper order -->
+ <tr id="block_4">
+ <td rowspan=5 class="block_column critical">
+ <input type="submit"
+ name="ledger_moveup_4"
+ value="^"
+ disabled
+ />
+ <br />
+ <input type="submit"
+ name="ledger_movedown_4"
+ value="v"
+ disabled
+ />
+ <br />
+ <input type="submit" name="ledger_copy_4" value="C"/>
+ </td>
+ <td rowspan=5 class="block_column">
+ [<a href="#block_4">#</a>]<br />
+ [<a href="/balance?up_incl=4">b</a>]<br />
+ [<a href="/edit_structured/4">e</a>]
+ </td>
+ </tr>
+ <tr>
+ <td colspan=3>2001-01-01 test</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="amount">10.00</td>
+ <td class="currency">€</td>
+ <td>foo</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td class="amount">-10.00</td>
+ <td class="currency">€</td>
+ <td>bar</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td colspan=4> </td>
+ </tr>
+</table>
+<input type="submit" name="add_booking" value="add booking" />
+</form>
+</body>
+</html>